第2章 进程管理
2.1 进程的概念
2.1.1 程序的顺序执行(P36)
* 顺序程序活动的特点:
严格地按顺序执行。
程序本身的动作才能改变程序的运行环境。
程序的执行结果与程序运行的速度无关。
2.1.2 多道程序设计(P37)
* 同时运行多个程序,每个程序都分配有各自的存储区和外部设备,
而CPU是共享的。
程序等待输入输出结果时,就调度其它程序在CPU上运行。
2.1.3 程序并发执行时的特征(P38)
1.失去封闭性:资源的状态受到并发程序的共同影响,
程序计算结果与并发程序的相对速度有关。
2.程序与计算不再一一对应(P39)
程序:指令有序集合,是“静态”的。
计算:指令序列在处理机上的执行过程,是“动态”的。
3.并发程序在执行期间可以相互制约(P39)
例如:程序A、B都调用打印程序P,若A已经调用P,则B只能等待。
2.1.4 进程的定义(P40)
1.进程概念的引入
程序:机器能翻译或执行的一组动作或指令,是静态的。
进程(process):任务(task),程序动态执行过程。
2.进程的定义
* 进程的定义:程序在并发环境中的执行过程。
程序比作菜谱,进程比作烹调。
* 进程和程序的区别:
(1)程序是静态的,程序是长期保存的软件资源。
进程是动态的,进程是程序执行的过程,
有生命期,有产生和消亡。
例如:执行命令 $ date
(2)进程是能独立运行的单位,能并发执行。
程序有顺序执行的性质,不插入无调用关系的程序运行。
(3)程序和进程无一一对应关系。
(4)各个进程在并发执行过程中会产生相互制约关系。
3.进程的特征
动态性:有生有亡,有活动有停顿。
并发性:
调度性:进程是系统中申请资源的单位,也是被调度的单位。
异步性:各进程向前推进的速度是不可预知的,即异步方式运行。
结构性:
进程由程序段、数据段和控制结构(如进程控制块)等组成。
2.2 进程的状态和组成
2.2.1 进程的状态及其转换(P43)
1.进程的基本状态
运行态(Running):程序正在处理机上执行时的状态。
就绪态(Ready):进程已具备运行条件。
阻塞态(Blocked):
进程因等待某种事件发生而暂时不能运行的状态。
运行状态 |
||
↑| |
所等待事件发生 |
等|* |
就绪状态 |
←—————————— |
阻塞状态 |
2.进程状态的转换
就绪->运行、运行->阻塞、阻塞->就绪。
2.2.2 进程的组成(P45)
1.进程的组成(P45)
* 进程实体(进程映象):由程序、数据集合和进程控制块组成。
* 进程控制块PCB(Process Control Block):
描述进程状态和特性的数据结构。
2.进程控制块的组成(P46)
* 进程控制块(进程描述块 Process Descriptor):
含有进程的描述信息和控制信息。
* 进程控制块包括内容:
进程名、进程状态信息、调度优先权、通信信息、现场保护区、
资源需求、分配和控制方面的信息、进程实体信息、族系关系。
3.进程控制块的作用(P46)
操作系统根据PCB对进程实施控制和管理。
2.2.3 进程队列(P47)
1.线性方式:
静态分配空间,把所有进程的PCB都放在PCB线性队列中,
在执行CPU调度时要对整个表进行扫描。
2.链接方式:
按照进程的不同状态分别放在不同的队列中。就绪进程排成队列,
通过PCB结构内部的拉链指针把同一队列的PCB链接起来。
CPU调度程序把第一个PCB由该队列中摘下,令其投入运行。
3.索引方式:
专用指针单元 |
就绪索引表 |
地址 |
PCB表 |
||
|
20 |
20 |
PCB1 |
||
就绪指针 20 |
22 |
21 |
PCB2 |
||
|
25 |
22 |
PCB3 |
||
运行指针 22 |
27 |
23 |
PCB4 |
||
|
24 |
PCB5 |
|||
阻塞指针 21 |
25 |
PCB6 |
|||
26 |
PCB7 |
||||
27 |
PCB8 |
||||
28 |
PCB9 |
2.3 进程的管理和有关命令(P48)
* 进程管理包括:创建进程、撤消进程、挂起进程、恢复进程、
改变进程优先级、封锁进程、唤醒进程、调度进程。
2.3.1 进程的管理
1.进程族系(P49)
父进程创建子进程,子进程再创建子进程。
开机—引导操作系统—生成0号进程—
创建1号进程—创建命令解释进程(shell)。
2.原语操作(P50)
* 原语(primitive):
机器指令的延伸,完成特定功能的系统程序。
* 原语操作:原子操作,操作中的动作全做或全不做。
3.进程创建
申请空闲的PCB—为新进程分配资源—
将新进程的PCB初始化—将新进程加入到就绪队列中。
4.进程终止
找到并终止运行态指定进程的PCB;
回收该进程所占用的全部资源;
终止其所有子孙进程,回收全部资源;
释放被终止进程的PCB,并从原来队列中摘走。
5.进程阻塞(P51)
停止进程的执行—保护进程的CPU现场—进程运行态改为阻塞……。
6.进程唤醒
7.进程映象的更换
释放子进程原来的程序和数据所占用的内存空间;
从磁盘上找出子进程所要执行的程序为数据;
分配内存空间,装入新的程序和数据;……
2.3.2 进程的管理命令
1.UNIX系统中进程状态(P52)
用户态运行、核心态运行、创建态、终止态、
在内存就绪、在内存睡眠、在内存暂停、
在外存就绪、在外存睡眠、在外存暂停。
2.UNIX系统中进程映象
* PCB功能的结构:有proc结构和user结构。
* proc结构的信息:
进程状态、用户标志号(UID)、进程标志号(PID)、……。
* user结构的信息:
指向本进程proc结构的指针、实际的和有效的用户标志号、……。
* UNIX系统中进程映象(P54)
proc结构 常驻内存 |
———→ |
user结构 可能对对换到外存上 |
———→ |
系统栈 |
|
———→ |
用户栈 |
|
———→ |
数据段 非共享区,含有进程私有的程序和数据 |
|
———→ |
正文段 |
3.ps命令
process status 显示进程状态。
例如:在主控台tty01上键入命令。
$ ps
进程的ID号 |
终端标识 |
进程占用CPU的时间 |
与进程对应的命令名 |
PID |
TTY |
TIME |
CMD |
595 |
tty01 |
00:00:00 |
sh |
607 |
tty01 |
00:00:00 |
ps |
ps命令选项:长格式显示 -l
F |
S |
UID |
PID |
PPID |
C |
PRI |
进程标志 | 进程状态 | 用户ID号 | 进程ID号 |
父进程ID号 |
用CPU情况 |
优先级 |
NI |
ADDR |
SZ |
WCHAN |
TTY |
TIME |
CMD |
nice值 |
虚地址 |
数据段和 |
睡眠进程 |
终端 |
占用 |
与进程对应 |
4.sleep命令(P55)
进程暂停秒数。
$ sleep 60
5.后台命令符 &
前台命令马上执行,后台命令让前台命令先执行。
$ ls -l/usr&
6.wait命令
等待后台进程结束。
$ wait 2080
等待PID为2080的后台进程结束。
7.kill命令
终止进程的运行。
# kill 678
8.nice命令
nice值:0 — 39,默认值:20,
nice增量值:
普通用户(0 — 19),只能降低或维持优先级。例如:
$ nice -n 10 cc f1.c
编译f1.c时的nice值为20+10
超级用户root(-20 — -1),可以提高优先级。例如:
# nice -n -10 vi abc
编辑abc时的nice值为20-10
2.4 进程的相互作用和通信
2.4.1 进程的同步与互斥(P56)
1.同步
同步:进程间共同完成一项任务时直接发生相互作用的关系。
例如:SPOOLing系统输入功能,设用进程A和B完成。
进程A读信息到缓冲区;
进程B加工缓冲区的信息并写到外存输入井中;
制约关系:
缓冲区取空内容时才能写入新信息,
缓冲区写满内容才能取出内容加工。
2.互斥
互斥:进程竞争同一物理资源产生相互制约。
例如:进程Pa分配打印机,进程Pb释放打印机。
打印机 |
分配 |
用户名 |
用户定义的设备名 |
0 |
1 |
lin |
|
1 |
0 |
|
|
2 |
1 |
xie |
OUTPUT |
* Pa进程分配打印机的过程(P57)
找出分配标志为0的打印机编号—标志置1—填写用户名和设备名。
* Pb进程释放打印机的过程(P58)
找出分配标志为1与被释放相同用户名的打印机编号—标志置0—
清除该机用户名和设备名。
* Pa和Pb不同时使用分配表,必须互斥执行,
否则造成设备无法释放。
3.临界资源和临界区
* 临界资源(Critical Resource)
一次仅允许一个进程使用的共享资源。
* 临界区CS(Critical Section)
进程访问临界资源的程序段。
* 进入临界区的相互关系:
一次仅允许一个进程进入;
已有进程进入自己的临界区,其他进程必须等待;
进程要限时内退出临界区;……
2.4.2 同步机制及其应用
1. 用锁操作原语实现互斥(P59)
* 临界区设锁,进程操作步骤:
关锁—执行临界区程序—开锁退出临界区。
* 关锁原语 lock(w):
while (w = = 0); //已打开
w=1; //关锁
* 开锁原语 unlock(w):
w=0; //开锁
2. 信号量及P,V操作原语(P60)
* 信号量:信号灯。
包含两个成员。整型变量(信号量的值),指向PCB的指针。
* 信号的量值(S):
S>0:表示可用资源数;
S<0:表示等待使用资源的进程数。
* P(S)操作:wait操作,请求分配单位资源。
S>0时,有资源可用,P操作请求分配单位资源,S=S-1。
S<0时,无资源可用,排队等待别的进程释放资源。
* V(S)操作:signal操作,释放单位资源。
V操作释放单位资源,S=S+1;
S>0时,有资源可用,则该进程继续运行;。
S<=0时,有进程等待该资源,把PCB队头进程阻塞改为就绪。
3. 用P,V原语实现互斥(P61)
用P,V操作实现对打印机分配表的互斥操作。
4. 用P,V原语实现简单同步(P62)
简单供者和用者的关系
供者 |
——→ |
缓冲区 |
——→ |
用者 |
|
磁盘 |
5. 生产者—消费者问题(P64)
|
out |
|||
|
N-2 |
N-1 |
|
|
… |
0 |
|||
… |
1 |
in |
||
|
3 |
2 |
|
* 环形缓冲池:绿色区有产品,蓝色区无产品。
* in:生产者下次存入产品的单元。
* out:消费者下次取出产品的单元。
2.4.3 进程间的通信(P66)
1.共享存储器方式
内存分配一片空间作为共享存储区。
2.管道文件
连接两个命令的一个打开文件。一个命令写入,一个命令读出。
例如:UNIX系统中的两个命令间的通信:
who | wc -l //用户清单|统计文件
3.消息传递方式
(1)消息缓冲通信(P67)
发送进程和接收进程利用消息缓冲队列进行通信。
(2)信箱通信(P68)
发送进程和接收进程利用信箱为中间设施进行通信。
* 发送和接收消息的原语形式:
send (mailbox,message) //信箱、要发送的信息
信箱格空时将消息送入相应信箱中。
receive (mailbox,message)
信箱满时将消息从信箱中取走。
自测题(P71)
2.PCB的作用是什么?它是怎样描述进程的动态性质的?(P46、P275)
3.进程的基本状态有哪几种?试描绘进程状态转换图。(P43、P275)
7.什么是进程的互斥与同步?(P56、P275)
10.简述信号量的定义和作用。P,V操作原语是如何定义的?
(P60、P276)