二、 进程管理
进程的基本概念
程序的顺序执行
当前操作执行完才能进行后续操作
- 顺序性
- 封闭性
- 可再现性
程序的并发执行
- 间断性
- 失去封闭性
- 不可再现性
进程的特征
- 结构特征,每个进程带有进程控制块数据结构
- 动态性
- 并发性
- 独立性
- 异步性
进程的定义
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
- 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
进程的三种基本状态
就绪
执行
-
阻塞
挂起(第四种状态)
引入挂起的原因:
- 终端用户的请求。
- 父进程请求。
- 负荷调节的需要。
- 操作系统的需要。
挂起是外界人为强制的,阻塞是硬件资源不足
有了挂起,增加挂起状态(又称静止状态)和非挂起(活动状态)
(1) 活动就绪→静止就绪。
(2) 活动阻塞→静止阻塞。
(3) 静止就绪→活动就绪。
(4) 静止阻塞→活动阻塞。
进程的控制块
控制块的作用
进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。
控制块中的基本信息
- 进程的标识符
进程标识符用于惟一地标识一个进程。一个进程通常有两种标识符:
(1) 内部标识符。在所有的操作系统中,都为每一个进 程赋予一个惟一的数字标识符,它通常是一个进程的序号。 设置内部标识符主要是为了方便系统使用。
(2) 外部标识符。它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。 - 处理机状态
处理机状态信息主要是由处理机的各种寄存器中的内容组成的。
① 通用寄存器,又称为用户可视寄存器,它们是用户程序可以访问的,用于暂存信息, 在大多数处理机中,有 8~32 个通用寄存器,在RISC结构的计算机中可超过 100 个;
② 指令计数器,其中存放了要访问的下一条指令的地址;
③ 程序状态字PSW,其中含有状态信息,控制信息等;
④ 用户栈指针, 指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。 - 进程的调度信息
在PCB中还存放一些与进程调度和进程对换有关的信息,包括:
① 进程状态,指明进程的当前状态, 作为进程调度和对换时的依据;
② 进程优先级,用于描述进程使用处理机的优先级别的一个整数, 优先级高的进程应优先获得处理机;
③ 进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、 进程已执行的时间总和等;
④ 事件,是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。 - 进程的控制信息
进程控制信息包括:
① 程序和数据的地址, 是指进程的程序和数据所在的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;
② 进程同步和通信机制,指实现进程同步和进程通信时必需的机制, 如消息队列指针、信号量等,它们可能全部或部分地放在PCB中;
③ 资源清单,是一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单;
④ 链接指针, 它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。
控制块的组织方式
-
链接方式
系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。
-
索引方式
系统按照进程的状态分别建立就绪索引表、阻塞索引表等。
Linux的进程控制块:
在创建一个新进程时,系统在内存中申请一个空的task_struct区,即空闲PCB块,并填入所需信息。同时将指向该结构的指针填入到task[]数组中。当前处于运行状态进程的PCB用指针数组current_set[]来指出。这是因为Linux支持多处理机系统,系统内可能存在多个同时运行的进程,故current_set定义成指针数组。
进程控制
进程的创建
进程的终止
引起进程终止(Termination of Process)的事件
- 正常结束
- 异常结束
常见的有:① 越界错误。② 保护错。③ 非法指令。④ 特权指令错。⑤ 运行超时。⑥ 等待超时。⑦ 算术运算错。⑧ I/O故障。 - 外界干预(通常人为)
进程的阻塞与唤醒
- 请求系统服务
- 启动某种操作
- 新数据尚未到达
- 无新工作可做
进程同步
概念
两种制约关系
- 间接相互制约关系---共享资源 (cpu,I/O设备)
- 直接相互制约关系---进程间合作 (进程需要另一进程数据,
比如IE浏览器与网卡)
临界资源
许多硬件资源如打印机,磁带机等,属于临界资源,诸进程采取互斥方式实现对这种资源的共享。
临界区
同步机制应遵守的规则
- 空闲让进。临界区空闲,进程进去
- 忙则等待。临界区忙,进程等待
- 有限等待。 访问临界区进程,等待不要太长
- 让权等待。进程不能进入临界区,释放CPU
信号量机制
整型信号量机制
记录型信号量机制
信号量的应用
实现进程互斥
利用信号量机制,wait(mutex)和signal(mutex)必须成对出现;
缺少wait(mutex)将导致不能保证对临界资源互斥访问;
缺少signal(mutex)将导致临界资源永远不被释放,导致被阻塞进程无法唤醒。
经典进程同步问题
生产者-消费者
利用记录型信号量解决生产者—消费者问题:
假定在生产者和消费者之间的公用缓冲池中,具有n个缓冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。对生产者—消费者问题可描述如下:
首先,在每个程序中用于实现互斥的wait(mutex)和 signal(mutex)必须成对地出现;
其次,对资源信号量empty和full的wait和signal操作, 同样需要成对地出现,但它们分别处于不同的程序中。例如,wait(empty)在计算进程中,而signal(empty)则在打印进程中,计算进程若因执行wait(empty)而阻塞, 则以后将由打印进程将它唤醒;
最后,在每个程序中的多个wait操作顺序不能颠倒。应先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait操作,否则可能引起进程死锁。
高级进程通信
类型
共享存储器系统
基于共享数据结构的通信
基于共享存储区域的通信管道通信
消息传递系统
客户-服务系统
线程
基本概念
为使程序能并发执行,系统还必须进行以下的一系列操作。
1) 创建进程
2) 撤消进程
3) 进程切换
虽然进程可以提高CPU的利用率,但是进程之间的切换是非常耗费资源和时间的。
为了能更进一步的提高 操作系统的并发进,引进了线程。
进程是分配资源的基本单位,而线程则是系统调度的基本单位。一个进程内部的线程可以共享该进程的所分配到的资源。线程的创建与撤消,线程之间的切换所占用的资源比进程要少很多。线程切换仅仅保存和设置少量寄存器内容,切换代价远远低于进程。
这个资源,是指进程的代码段,数据段及系统资源,如打开的文件、I/O设备。
线程的属性
- 轻型实体。
- 独立调度和分派的基本单位。
- 可并发执行。
- 共享进程资源。
线程的创建和终止
在多线程OS环境下,应用程序在启动时,通常仅有一个线程在执行,该线程被人们称为“初始化线程”。它可根据需要再去创建若干个线程。
终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。
多线程OS中的进程
在多线程OS中,进程是作为拥有系统资源的基本单位,通常的进程都包含多个线程并为它们提供资源,但此时的进程就不再作为一个执行的实体。 多线程OS中的进程有以下属性:
(1) 作为系统资源分配的单位。
(2) 可包括多个线程。
(3) 进程不是一个可执行的实体。