-
进程
-
运行中的程序,就被称为「进程」(Process)
-
多个程序、交替执行的思想,就有 CPU 管理多个进程的初步想法。
-
虽然单核的 CPU 在某一个瞬间,只能运行一个进程。但在 1 秒钟期间,它可能会运行多个进程,这样就产生并行的错觉,实际上这是并发。
-
进程与程序的关系类比
-
女生说她想喝可乐,那么男生只好把做菜的事情暂停一下,并在手机菜谱标记做到哪一个步骤,把状态信息记录了下来。
-
这体现了,CPU 可以从一个进程(做菜)切换到另外一个进程(买可乐),在切换前必须要记录当前进程中运行的状态信息,以备下次切换回来的时候可以恢复执行。
-
-
进程的状态
-
运行状态(Running):该时刻进程占用 CPU
-
就绪状态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行;
-
阻塞状态(Blocked):该进程正在等待某一事件发生(如等待输入/输出操作的完成)而暂时停止运行,这时,即使给它CPU控制权,它也无法运行;
-
创建状态(new):进程正在被创建时的状态;
-
结束状态(Exit):进程正在从系统中消失时的状态;
-
在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换出到硬盘,等需要再次运行的时候,再从硬盘换入到物理内存。
-
需要一个新的状态,来描述进程没有占用实际的物理内存空间的情况,这个状态就是挂起状态
-
阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
-
就绪挂起状态:进程在外存(硬盘),但只要进入内存,即刻立刻运行;
-
-
导致进程挂起的原因不只是因为进程所使用的内存空间不在物理内存,还包括如下情况:
-
通过 sleep 让进程间歇性挂起,其工作原理是设置一个定时器,到期后唤醒进程。
-
用户希望挂起一个程序的执行,比如在 Linux 中用
Ctrl+Z
挂起进程
-
-
-
进程的控制结构
-
用进程控制块(process control block,PCB)数据结构来描述进程的。
-
PCB 是进程存在的唯一标识
-
PCB 具体包含什么信息呢?
-
进程描述信息:
-
进程标识符:标识各个进程,每个进程都有一个并且唯一的标识符;
-
用户标识符:进程归属的用户,用户标识符主要为共享和保护服务;
-
-
进程控制和管理信息:
-
进程当前状态,如 new、ready、running、waiting 或 blocked 等;
-
进程优先级:进程抢占 CPU 时的优先级;
-
-
资源分配清单:
-
有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的 I/O 设备信息。
-
-
CPU 相关信息:
-
CPU 中各个寄存器的值,当进程被切换时,CPU 的状态信息都会被保存在相应的 PCB 中,以便进程重新执行时,能从断点处继续执行。
-
-
-
每个 PCB 是如何组织的呢?
-
通过链表的方式进行组织,把具有相同状态的进程链在一起,组成各种队列
-
将所有处于就绪状态的进程链在一起,称为就绪队列;
-
把所有因等待某事件而处于等待状态的进程链在一起就组成各种阻塞队列;
-
另外,对于运行队列在单核 CPU 系统中则只有一个运行指针了,因为单核 CPU 在某个时间,只能运行一个程序。
-
-
-