进程
进程,即一个程序加载到内存后就变为进程。
为了提高CPU利用率,人们想起将多个程序同时加载到计算机里,并发执行。这些同时存在于计算机内存的程序就称为进程。进程让每个用户感觉到自己独占CPU。因此,进程就是为了在CPU上实现多道编程而出现的概念。
进程的状态
我们将进程分为三种状态:执行、阻塞、就绪。
进程创立
进程创立步骤:
①分配进程控制块
②初始化CPU寄存器
③初始化页表
④将程序代码从磁盘读进内存
⑤将处理器状态设置为“用户态”
⑥跳转到程序的起始地址(设置程序计数器)
注意:跳转指令是内核态指令,而在第5步时处理器状态已经被设置为用户态,而用户态下是不能执行内核态指令的。这就需要硬件帮忙了,硬件必须将第5、6步作为一个步骤一起完成。
进程创立在不同操作系统所需的方法也不一样。(基本按以上步骤)
UNIX将进程创立分两个步骤:第一,创建一个与自己完全一样的新进程;第二,exec,将新的进程的地址空间用另一个程序的内容覆盖,然后跳转到新程序的起始地址,从而完成新程序的启动。
Windows使用一个系统调用就完成进程创建。这个系统调用就是CreateProccess。在调用该函数时我们把欲执行的程序名称作为参数传过来。创建新的页表,不需要复制别的进程。
进程管理
与一个社会管理人类似,操作系统要管理进程就要维护关于进程的一些信息。当一个进程产生时,操作系统也就需要为其建立记录。而操作系统用于维护进程记录的结构就是进程表或进程控制块(PCB)。这个进程表或PCB里面存放的就是有关该进程的资料。一般包括:进程ID、程序计数器、寄存器、状态字、栈指针、信号……
这个进程表保持在操作系统所在内核空间里。
进程管理最大的问题是资源分配。资源分配要考虑公平与效率。这样,公平与效率就成了进程管理中永恒的主题。
进程的缺陷
1、进程只能在一个时间内干一件事(执行一个程序执行流),而如果想同时干两件或多件事情,进程就不够用了。
2、进程在执行过程中如果阻塞,例如等待输入,整个进程就将挂起,而无法继续执行。这样,即使进程里面有部分工作不依赖于输入数据,也无法推进。
为了解决这个问题,人们发明了线程。