- 进程就是运行中的程序。程序本身是没有生命周期的,它只是存在磁盘上面的一些指令。是操作系统让这些字节运行起来,让程序发挥作用。
- 虚拟化:通常让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个CPU的假象。
- 上下文切换:它让操作系统能够停止运行一个程序,并开始在给定的CPU上运行另一个程序。
4.1 抽象:进程概念
- 操作系统为正在运行的程序提供的抽象,就是所谓的进程。
- 进程的机器状态:程序在运行时可以读取或更新的内容。进程可以访问的内存是该进程的一部分。程序计数器告诉程序即将执行的指令。栈指针和相关的帧指针用于管理函数参数栈、局部变量和返回地址。
4.2 进程API
- 创建create:操作系统必须包含一些创建新进程的方法
- 销毁destroy:强制销毁进程的接口
- 等待wait、其他控制、状态status。
4.3 进程创建:更多细节
- 操作系统运行程序必须做的第一件事是将代码和所有静态数据加载到内存中,加载到进程的地址空间中。
- 操作系统惰性执行该过程:仅在程序执行期间需要加载的代码或数据分片,才会加载。
- 之后在运行此进程之前必须为程序的运行时栈分配一些内存。操作系统分配这些内存,并提供给进程,操作系统也可能会用参数初始化栈,具体来说,它会将参数填入main()函数,即argc和argv[]数组
- 操作系统有可能为程序的堆分配一些内存、操作系统还将执行一些其他的初始化任务,特别是与输入/输出相关的任务。
- 通过将代码和静态数据加载到内存中,通过创建和初始化栈以及执行与I/O设置相关的其他工作,OS现在为程序执行搭好了舞台。最后一项任务:启动程序,在入口处运行,即main()。通过跳转到main()例程,OS将CPU的控制权转移到新创建的进程中,从而程序开始执行。
4.4 进程状态
- 运行:在运行状态下,进程正在处理器上运行,这意味着它正在执行指令
- 就绪:在就绪状态下,进程已准备好运行,但由于某种原因,操作系统选择不在此处运行。
- 阻塞:一个进程执行了某种操作,直到发生其他事件时才会准备运行。