计算机操作系统笔记02

第2章 进程管理

2.1 进程的基本概念

1.关于程序执行顺序

1)引入前趋图
描述进程执行前后关系的图
有向无循环图(DAG)
Pi结点:描述一个程序段、进程、或一条语句。
有向边“——>”:结点之间的偏序或前序关系
Pi——>Pk,则Pi是Pk的直接前趋,Pk是Pi的直接后继。

2)程序顺序执行时的特征

  • 顺序性    处理机的操作严格按程序规定顺序执行
  • 封闭性   程序一旦开始执行,其计算结果不受外界因素影响。
  • 可再现性   程序执行只要初始条件一样,不论如何停顿,重复执行多少次结果都一样。

4)并发程序执行时的特征

  • 间断性(运行表现)
  • 失去封闭性
  • 结果不可再现性

2.  进程

1)进程的定义

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

2)进程的特征

  • 结构性特征,进程的根本——PCB
  • 动态性   进程实质上是进程实体的一次有生命期的执行过程。程序只是静态的一组有序指令。  进程最基本特征
  • 并发性   多个进程实体同存于内存中,在一段时间内同时运行。有PCB的程序才能并发。
  • 独立性
  • 异步性

3)进程的基本状态

  • 就绪状态(Ready)   进程获得除CPU之外的所有必需资源,一旦得到CPU控制权,可立即运行。
  • 运行状态(Running)   进程已获得所有运行必需的资源,正在处理机上执行。
  • 阻塞状态(Blocked)   正在执行的进程由于发生某事件(请求I/O、申请缓冲、时间片到)而暂时无法执行时,便放弃CPU后暂停

进程的三基态的转换(重要)

3.  进程控制块PCB

1)进程控制块中的信息(pcb内)

  • 进程标识符信息
  • 处理机状态信息
  • 进程调度信息
  • 进程控制信息

2)PCB信息的存放

  • 系统运行中有若干个程序的PCB,它们常驻内存的PCB区。
  • 采用的数据结构:PCB结构体,PCB链表或队列

3)PCB的组织方式

  • 链接方式   同一状态的PCB,依靠链接指针链接成队列。就绪队列;若干个阻塞队列;空白队列(PCB区的空PCB块)
  • 索引方式   同状态的PCB同样集中记录,但以索引表的方式记录PCB的地址。用专门的单元记录各索引表的首地址。

2.2 进程控制

进程控制的基本过程:

  • 进程的创建
  • 进程的终止
  • 进程的阻塞与唤醒
  • 进程的挂起和激活

1.进程的创建

1)一个进程创建另一进程的事件(原因)

2)创建过程

(1) 申请空白PCB
(2) 为新进程分配资源
        主要是内存资源的处理
(3) 初始化进程控制块
        标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
(4) 将新进程插入就绪队列

2.进程的终止

1)引起进程终止的事件

2)终止过程

(1) 根据进程标示符,检索出该进程PCB,读其状态。
    *IF 执行态,立即终止该进程,置调度标志为真,指示重新进行调度。
    *IF 有子孙进程,亦应予以终止,以防成为不可控进程。
(2) 归还全部资源至其父进程或系统。
(3) 将该进程PCB从所在队列或链表中移出。

3.进程的阻塞与唤醒

1)引起进程阻塞和唤醒的事件

2)阻塞和唤醒过程

(1)将PCB中的状态改为阻塞
(2)该PCB加入到阻塞队列中
(3)转进程调度,将处理机分配给另一进程
(4)进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态。

4.进程的挂起与激活

(1)检查被挂起进程的状态,活动就绪则改为静止就绪,活动阻塞则改为静止阻塞
(2)将该PCB复制到内存(方便检查)/外存(对换)指定区域
(3)*若挂起的进程是执行态,则需重新进行进程调度。

激活原语的执行过程
若挂起进程在外存上,将其调入内存
检查进程状态,若处于静止就绪,则改为活动就绪,若处于静止阻塞,则改为活动阻塞

2.3 进程同步

1.进程同步的基本概念

1)进程同步的主要任务:

使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

2)临界资源

一次仅允许一个进程使用的资源。

3)临界区

每个进程中访问临界资源的那段代码叫临界区。

为了正确同步,对临界区的代码要增加控制

4)同步机制应遵循的规则

  • 空闲让进:资源使用最基本原则
  • 忙则等待:保证互斥
  • 有限等待:合适时被唤醒防止死等
  • 让权等待:能主动释放CPU防止忙等

2.信号量机制

1) 整型信号量

最初的信号量机制,两个原子操作对一个共享整型量进行操作。

  • 信号量定义为一个整型量;
  • 根据初始情况赋相应的值;
  • 仅能通过两个原子操作来访问。
//p操作
wait(S):
    While S<=0 do no-op; 
    S:=S-1;

//v操作
signal(S):
    S:=S+1;

2)记录型信号量

整型信号量缺点

整型信号量符合“有限等待”原则

  • signal释放资源后,当CPU被分配给等待进程后,等待进程仍可继续执行,可以符合“有限等待”。

但整型信号量不符合“让权等待”原则

  • 整型信号量的wait操作,当s ≤0时,当前进程会占着CPU不断测试;
  • 信号量原语不能被打断,这个占有CPU的进程会一直不断的占据CPU循环下去,陷入忙等。

改进:条件不符时应能够主动放弃CPU

不仅要有值的处理,还有队列的处理。
此时形成记录型数据结构,包括两部分:

  • 整型变量value(代表资源数目)
  • 进程链表L(链接所有等待进程)

代码描述:
type  Semaphore=record
    value:integer;
    L:list  of  PCB;
end;
操作:S.Value,S.L

Value>0,表示当前可用资源的数量;
Value≤0,其绝对值表示等待使用该资源的进程数,即在该信号量队列上排队的PCB的个数。

不仅修改资源数,还要处理进程的阻塞、唤醒等操作。先修改资源数,再判断处理。

//P操作
wait():
    S.value = S.value - 1;
    if  S.value < 0  then  block(S,L)

//v操作
signal():
    S.value = S.value + 1;
    if  S.value <= 0 then wakeup(S,L)

3)AND型信号量

  • 出现原因:一些应用往往需要两个或多个共享资源,而不是前述的一个资源。进程同时要求的共享资源越多,发生死锁可能性越大。
  • 解决思想:一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。

4)信号量集

引入原因:

  • 每次只能获得或释放一个单位的资源,低效;
  • 某些时候资源分配有下限的限制;
  • 修改:在大于可分配设置的下界值t前提下,每次可分配d个。

 

 

 

2.4 经典进程同步问题

1、生产者—消费者问题   互斥、同步

2、哲学家就餐问题   互斥

3、读者——写者问题   有条件的互斥

猜你喜欢

转载自blog.csdn.net/Wjwstruggle/article/details/82861121