分享

第一章 计算机操作系统知识总结 (三)

 尘封记忆的思念 2016-12-17
第三节
1.程序的并发执行 
程序用来描述计算机所完成的独立功能,并在时间上严格地按前后次序相继地进行计算机操作序列集合,是一个静态概念。 
个程序由若干个程序段组成,而这些程序段的执行必须是顺序的,这种程序执行的方式就称为程序的顺序执行。 程序顺序执行的特点: 
1.顺序性 

  处理机严格按照程序所规定的顺序执行,即每个操作必须在下一个操作开始之前结束。 

2.封闭性 

  程序一旦开始执行,其计算结果不受外界的影响,当程序的初始条件给定之后,其后的状态只能由程序本身确定,即只有本程序才能改变它。 

3.可再现性 

  程序执行的结果与初始条件有关,而与执行时间无关。即只要程序的初始条件相同,它的执行结果是相同的,不论它在什么时间执行,也不管计算机的运行速度。 多道程序系统中程序执行环境的变化 执行环境的特点: 

(1)独立性 

在多道环境下执行的每道程序都是逻辑上独立的。 

(2)随机性 

程序和数据的输入和执行开始时间都是随机的。 

(3)资源共享 

软硬件资源的有限性导致资源共享。 

程序并发执行:若干个程序段同时在系统中运行,这些程序的执行在时间上是重迭的,一个程序段的执行尚未结束,另一个程序段的执行已经开始,即使这种重迭是很小的,也称这几个程序段是并发执行的。 

2.进程:

进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。 进程和程序的区别与联系: 

①程序是指令的集合,是静态的概念。 进程是程序在处理机上的一次执行的过程,是动态的概念。程序可以作为软件资料长期保存。进程是有生命周期的。 

②进程是一个独立的运行单位,能与其它进程并行(并发)活动。而程序则不是。 

③进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。 

④不同的进程可以包含同一程序,只要该程序所对应的数据集不同。 作业和进程的关系 

作业是用户需要计算机完成某项任务时要求计算机所做工作的集合。而进程则是已提交完毕程序的执行过程的描述,是资源分配的基本单位。 其主要区别如下: 
作业是用户向计算机提交任务的任务实体。 
一个作业可由多个进程组成。 
作业的概念主要用于批处理系统中。 进程描述 

在系统中一个进程存在:进程控制块PCB、有关程序段、数据结构集 

① 进程控制块 PCB (Process Control Block) 

包含一个进程的描述信息、控制信息及资源信息,有些系统还有进程调度等待所使用的现场保护区。PCB集中反映一个进程的动态特征。在创建时,建立PCB,并伴随进程运行的全过程,当进程完成其功能后,系统释放PCB,进程也随之消亡 
(1)描述信息  
 1、进程名或进程标识号 name 
  每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。UNIX系统中就是一个整型数。在进程创建时由系统赋予。  2、用户名或用户标识号 
  每个进程都隶属于某个用户,用户名或用户标识号有利于资源共享和保护  3、家族关系 process family 

   有的系统允许一个进程可创建自已的子进程,子进程还可以创建,一个进程往往处在一个家族之中,就需要记录进程在家族中位置的信息。   

(2)控制信息  

 1、进程当前状态 status 说明进程当前所处的状态。 

为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。

 2、进程优先级 priority 

 进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。 

3、执行程序开始地址 start-addr 

4、各种计时信息 

进程占用系统资源的情况,不同的系统的处理差别很大。 

5、通信信息 communication information 

是指某个进程在运行的过程中要与其它进程进行通信,该区记录有关进程通信方面的信息。 

(3)资源管理信息 

包括有关存储器的信息、使用输入、输出设备的信息、有关文件系统的信息: 

1、占用内存大小及管理用数据结构指针。 

2、在某些复杂系统中,还有对换或覆盖用的有关信息。 

3、共享程序段大小及起始地址。 

4、输入输出设备的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及使用设备的有关数据结构指针等。 

5、指向文件系统的指针及有关标识等。 

(4)、CPU现场保护区 cpustatus 

当进程因某种原因不能继续占用CPU时(等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。

 ②进程上下文实际上是进程执行活动全过程的静态描述。 

进程上下文是一个抽象的概念,它包含了每个进程执行过的、执行时的以及待执行的指令和数据,在指令寄存器、堆栈(存放个调用子程序的返回点和参数等),状态字寄存器等中的内容。 上文:已执行过的进程指令和数据在相关寄存器与堆栈中的内容。 正文:正在执行的指令和数据在相关寄存器与堆栈中的内容。 下文:待执行的指令和数据在相关寄存器与堆栈中的内容。 

③进程上下文切换 

进程上下文切换发生在不同的进程之间而不是同一个进程内。包含3个部分,

第一部分为保存被切换进程的正文部分(或当前状态)至有关存储区。

第二部分操作系统进程中有关调度和资源分配程序执行,并选取新的进程。

第三部分则是将被选中进程的原来被保存的正文部分从有关存储区中选出,并送至有关寄存器或堆栈中,激活被选中进程执行。 

④进程空间和大小 
任一进程都有自己的地址空间,把该空间称为进程空间或虚空间。进程空间的大小只与处理机的位数有关。程序的执行都在进程空间内进行。用户程序、进程的各种控制表格等都按一定的结构排列在进程空间中。 在有的系统中进程空间被划分为两部分:用户空间和系统空间。 为了防止用户程序访问系统空间,造成访问出错,计算机通过程序状态寄存器等设置不同的执行模式,即用户模式(用户态)和系统模式(系统态)来进行保护。 

3.进程状态及其转换 
★进程的三种基本状态:

执行状态、就绪状态、等待状态(又称阻塞、挂起、睡眠) 就绪状态(Ready) 
 存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU,就立即可以运行,这些进程所取的状态为就绪状态。(有多个进程处于此状态) 执行状态(Running) 
当进程由调度/分派程序分派后,得到CPU控制权,它的程序正在运行,该进程所处的状态为执行状态。(在系统中,总只有一个进程处于此状态) 等待状态(Wait) 
若一个进程正在等待某个事件的发生(如等待I/O的完成),而暂停执行,这时,即使给它CPU时间,它也无法执行,则称该进程处于等待状态。 

★进程状态转换 
运行到等待   等待某事件的发生(如等待I/O完成) 等待到就绪    事件已经发生(如I/O完成) 
运行到就绪    时间片到(例如,两节课时间到,下课) 新建进程到就绪  新创建的进程进入就绪状态 
就绪到运行   当处理机空闭时,由调度(分派)程序从就绪进程队列中选择一个进程占用CPU。

进程控制:就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。 
原语:把系统态下执行的某些具有特定功能的程序段称为原语。 
用于进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语。 
进程创建方式:

由系统程序模块统一创建;由父进程创建。

进程创建系统调用:     

create(name,priority,start-addr)  UNIX系统:fork() 

进程撤销:

(1)该进程已完成所要求的功能而正常终止

(2)由于某种错误导致非正常终止

(3)祖先进程要求撤销某个子进程。

在一般操作系统中进程撤消的系统调用是:kill  UNIX系统中是exit()  如果撤销进程有自己的子进程,则撤销原语先撤销其子进程的PCB结构并释放子进程所释放的资源后,再撤销当前进程的PCB结构和释放其资源。 

进程的阻塞与唤醒 
当一个处在运行状态的进程,因等待某个事件的发生(如等待打印机)而不能继续运行时,将调用进程挂起系统调用,把进程的状态置为阻塞状态,并调用进程调度程序(等于让出处理机)。 进程从运行状态转换成阻塞状态是由进程挂起原语实现的,因此,调用进程挂起操作是在进程处于运行状态下执行的。它的执行将引起等待某事件的队列的改变. 
一个正在运行的进程会因等待某事件(例如,等待打印机)的发生,由运行状态转换成阻塞状态,当它等待的事件发生后,这个进程将由阻塞状态转换成就绪状态。这种转换由进程唤醒操作完成。 唤醒一个进程有两种方式:系统进程唤醒、事件发生进程唤醒。    
调用进程唤醒操作一般在中断处理、进程通信等过程中。例如,打印机完成中断处理程序,  在完成了打印完成的操作后,就去检查等待打印机的队列,若不为空,则调用进程唤醒操作,唤醒一个(或多个)等待打印机的进程。  

 4.进程互斥 
产生互斥的原因:资源共享、进程合作 
★临界资源:一次仅允许一个进程使用的资源称为临界资源。 
★临界区:每个进程中访问临界资源的那段程序段称为临界区(临界段)。 
间接制约:由于共享某公有资源而引起的在临界区内不允许并发进程交叉执行的现象称为有共享公有资源而造成的对并发进程执行速度的间接制约,简称间接制约。 
★互斥:在操作系统中,当某一进程正在访问某临界区时,就不允许其它进程进入,否则就会发生(后果)无法估计的错误。我们把进程之间的这种相互制约的关系称为互斥。 进入临界区的准则: 
(1)不能假设各并发进程的相对执行速度; 

(2)并发进程中的某个进程不在临界区时,它不能阻止其他进程进入临界区; 

(3)并发进程中的若干个进程申请进入界区时,只能允许一个进程进入;

 (4)当有若干个进程欲进入临界区时,应在有限的时间内使其进入。 解决进程互斥的最简单的办法是加锁。 在系统中为每个临界资源设置一个锁位, 
    1  表示资源可用, 
    0  表示资源已被占用(不可用)。 
这样当一个进程使用某个临界资源之前必须完成下列操作: 

1、考察锁位的值; 
2、若原来的值是为“1”,将锁位置为“0”(占用该资源); 

3、若原来值是为“0”,(该资源已被别人占用),则转到1。 当进程使用完资源后,将锁位置为“1“,称为开锁操作。

 5.信号量与P、V原语 
★信号量sem:是一个整数,在sem大于等于零时,代表可供并发资源使用的资源实体数,但sem小于零时则表示正在等待使用临界区的进程数。sem代表资源的实体。在实际应用中应准确地说明sem的意义和初值。 

★P操作: 
(1)sem减1; 
(2)若sem减1后仍大于等于0,则进程继续执行; 

3)若结果小于0,则该进程挂起。 

注:挂起该进程包括:保留调用进程CPU现场;置“等待”状态;入等待队列;转进程调度;


V操作: 
(1)s值加1; 
(2)若相加结果大于0,进程继续执行; 
(3)否则,唤醒一个(或多个)等待该信号灯的进程,然后本进程继续执行或转进程调度。

★ P、V原语实现互斥的原理 当一个进程想要进入临界区时,它必须先执行P原语操作以将信号量sem减1。在一个进程完成对临界资源的操作后,它必须执行V原语操作以释放它占用的临界资源。由于信号量初始值为1,所以,任一进程在执行P原语操作之后将sem的值变为0,表示该进程可以进入临界区。在该进程未执行V原语操作之前如有另一进程想进入临界区的话,它也应先执行P原语操作,从而使sem的值变为-1,因此,第二个进程将会被阻塞,直到第一个进程执行V原语操作之后,sem的值变为0,从而可唤醒第二个进程进入就绪队列,经调度后进入临界区。在第二个进程执行完V原语操作之后,如果没有其它进程申请进入临界区的话,则sem又恢复到初始值。 用信号量实现两并发进程Pa,Pb互斥的描述如下: 
(1) 设sem为互斥信号量,其取值范围为(1,0,-1)。 其中sem=1标志进程Pa,Pb都未进入类名为S的临界区,sem=0表示进程Pa,Pb已进入类名为S的临界区,sem=-1表示进程Pa,Pb中,一个进程已进入临界区,而另一进程等待进入临界区。 

(2) 描述 Pa: 
P(sem)  
V(sem): …………. Pb: 
P(sem)  
V(sem)::


6.进程同步 
★同步:把异步环境下的一组并发进程,因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。 
用wait(消息名)表示进程等待合作进程发来的消息. 功能:等待到消息名为true的进程继续执行。 用signal(消息名)表示向合作进程发送消息 功能:发送消息名,并将其值置为true。 
利用过程wait和singnal描述计算进程Pc和打印进程Pp的同步关系 
(1) 设消息名Bufempty表示buf为空,消息名Buffull表示Buf中装满了数据。 

(2) 初始化Bufempty=true,Buffull=false.。 

(3) 描述: Pc   : 
      A:wait(Bufempty)           

计算 
Buf计算结果       

Bufempty false       

signal(Buffull)     Goto   A Pp   : 

B:wait(Bufful) 
打印Buf中的数据          

清除Buf中的数据 
Buffulfalse       signal(Bufempty)      Goto   B 
★私有信号量(private Semaphore):进程同步的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关。因此该信号量称为私有信号量。 

★用P,V原语操作实现同步 
首先,为各并发进程设置私有信号量, 然后,为私有信号量赋初值, 
最后,利用P,V原语和私有信号量规定各进程的执行顺序。 
例:设进程Pa和Pb通过缓冲区队列传递数据。Pa为发送进程,Pb为接收进程。Pa发送数据时调用发送过程deposit(data),Pb接受数据时调用过程remove(data),且数据的发送和接受过程满足如下条件:

(1)在


7.生产者与消费者问题 
对于生产者进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满,若未满,则可将数据送入缓冲区,并通知消费者进程;否则,等待; 
对于消费者进程:当它去取数据时,要看缓冲区中是否有数据可取,若有则取走一个数据,并通知生产者进程,否则,等待。 
这种相互等待,并互通信息就是典型的进程同步。 
同时,缓冲区是个临界资源,因此,诸进程对缓冲区的操作程序是一个共享临界区,因此,还有个互斥的问题。 

8.进程通信 
通信(communication)意味着进程间传递数据。操作系统可以看作是各种进程组成的,这些进程都具有各自独立的功能,且大多数都被外部需要而启动执行。 在单机系统中进程的通信有4种形式: 

(1)主从式 

(2)会话式 
(3)消息或邮箱机制 

(4)共享存储区方式 会话方式的特点: 
(1)使用进程在使用服务进程所提供的服务之前,必须得到服务进程的许可。 
(2)服务进程根据使用进程的要求提供服务,但对所提供服务的控制由服务进程自身完成。 

(3)使用进程和服务进程在进行通信时有固定连接关系。 

消息或邮箱机制的特点是: 
(1)只要存在空缓冲区或邮箱,发送进程就可以发送消息。 
(2)与会话系统不同,发送进程和接受进程之间无直接联接关系。 

(3)发送进程和接受进程之间存在缓冲区或邮箱用来存放被传送消息。 
邮箱通信就是由发送进程申请建立一与接受进程联接的邮箱。设置邮箱的最大好处是发送进程和接受进程之间没有时间上的限制。 
共享存储区方式不要求数据移动,两个需要互相交换信息的进程通过共享数据区的操作达到互相通信的目的。

 9.死锁问题 
死锁:指个并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又得不到资源,个并发进程不能继续向前推进的状态。 

★死锁的起因:

根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数。 

★产生死锁有四个必要条件: 
(1)互斥条件。并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作的,进程对他所需要的资源进行排他性控制。  
(2)不剥夺条件。进程所获得的资源在未使用完毕之前,不能被其它进程强行剥夺,而只能由获得该资源的进程自己释放。 
(3)部分分配。进程每次申请它所需要的一部分资源,在等待新资源的同时,继续占用已分配的资源。 

(4)环路等待条件。存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程所请求。 只要有一个条件不满足,死锁就可解除。 预防死锁  
1.破坏“请求与保持条件” 每个进程在运行之前,必须预先提出自己所要使用的全部资源,调度程序在该进程所需要的资源末得到满足之前,不让它们投入运行,并且当资源一旦分配给某个进程之后,那么在该进程的整个运行期间相应资源一直被它占有,这就破坏了产生死锁的部分分配条件。 
2.破坏环路条件  对系统提供的每一项资源,由系统设计者将它们按类型进行线性排队,并赋予不同的序号。 
3.资源受控动态分配  为了避免死锁发生,操作系统必须根据预先掌握的关于资源用法的信息控制资源分配,使得共同进展路径的下一步不致于进入危险区,即只要有产生死锁的可能性,就避免把一种资源分配给一个进程。  死锁的检测和恢复 

 1.资源剥夺法  
(1)还原算法。即恢复计算结果和状态。 
(2)建立检查点主要是用来恢复分配前的状态。 

 2.撤消进程法  
按一定的顺序中止进程序列,直至已释放到有足够的资源来完成剩下的资源为止。

(部分素材来源于网络 版权归原作者所有)

如果你对阿平老师的课程感兴趣,关注收藏!

阿平老师(微信/qq:158912971)

长按,识别图中二维码,关注,学全套课程.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多