进程管理-理论篇

 

 

进程管理-理论篇

 

本文包括以下内容:

 

1,进程的基本概念     三种状态及转换,组成(PCB

2,进        核态与用户态;进程的创建,撤销,阻塞,唤醒

3,进程互斥和同步     同步(互斥是同步的一种);临界资源,临界区;信号量,PV

4,进         五种进程间通信类型

5,进        调度算法

6,死              多个进程并发执行竞争资源

7,线              基本概念,多线程编程

 

 

 

 

一、进程基本概念

程序并发执行与顺序执行的区别:

早期程序顺序执行较常见,也就是一次执行一个进程,其特点是顺序性、封闭性、可再现性。后来,由于多道程序设计的引入,则变为程序并发执行,其实质是多个进程在宏观上同步执行,微观上进程交替执行(交替使用CPU),使程序具有间断性、失去封闭性、不可再现性等特点。

 

在多进程交替使用CPU时,常采用时间片轮转法,但事实上,程序调度算法有多种,常见的有:先来先服务,优先级,时间片轮转,短作业优先等等。

进程的定义

      进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

进程的特征

1)结构特征

2)动态性

3)并发性

4)独立性

5)异步性

 

进程的基本状态

1,三种状态

1)就绪状态

        当进程已分配到除处理机以外的所有必要的资源后,只要再获得处理机便可立即执行,这时进程的状态称为就绪状态。

2)执行状态

        执行状态是指进程已获得处理机、其程序正在执行的状态。

3)阻塞状态

        正在执行的进程因发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,这种暂停状态被称为阻塞状态。

2,进程的状态转换

1  进程的3种基本状态及其转换

 

Linux进程主要有如下几种状态。

1)运行状态(task_running

2)等待状态

3)暂停状态(task_stopped

4)僵死状态(task_zombie

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2  Linux进程状态转换

 

 

进程的实体

1)进程控制块(PCB

2)程序段

3)数据段

 

进程控制块(PCB

进程控制块是进程实体的一部分,是操作系统中最重要的记录型数据结构(链表)。PCB中记录了操作系统所需的,用于描述进程进展情况及控制进程运行所需的全部信息。

PCB是进程存在的惟一标志。一般把PCB存放在操作系统专门开辟的PCB区内。

在进程控制块中,主要包括下述4方面的信息。

1)进程描述信息

· 进程标识符。即:ID号。每个进程都有惟一的进程标识符,用以识别不同的进程。

· 用户名或用户标识号。每个进程都隶属于某个用户,有利于资源共享与保护。

· 家族关系。标识进程之间的家族关系。Init id=1  fork

2)处理机状态信息

通用寄存器、指令计数器、程序状态字(PSW)、用户栈指针等

3)进程调度信息

· 进程状态。指明进程的当前状态,以作为进程调度和进程对换时的依据。

· 进程优先级。用于描述进程使用处理机的优先级别的一个整数,优先级别高的进程先获得处理机。

· 进程调度所需的其他信息。如进程已等待CPU的时间总和、进程已执行的时间总和等。

· 事件。指进程被阻塞的原因。

4)进程控制信息

· 程序和数据的地址。指出该进程的程序和数据所在的内存或外存地址,以便再调度到该进程执行时,能从中找到其程序和数据。

· 进程同步和通信机制。指实现进程同步和进程通信时所必须的机制,如消息队列指针、信号量等。这些数据应全部或部分地存放在PCB中。

· 资源清单。它是一张列出了除CPU之外的进程所需的全部资源和已经分配给该进程的资源清单。

· 链接指针。它给出了本进程(PCB)所在队列的下一个进程的PCB首地址。链表中的next

 

在一个系统中,通常拥有数十个、数百个乃至数千个PCB。为了对PCB进行有效地管理,系统应把所有的PCB用适当的方式组织起来。目前常用的PCB组织方式有链接方式和索引方式两种。

1,链接方式

 

 

 

 

 

 

 

 

 

 

 

 

 

 


3  PCB链接队列示意图

 

2,索引方式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.3  PCB索引方式示意图

 

二、进程控制

进程控制是进程和处理机管理的一个重要任务。所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程在各种状态之间的转换,从而达到多进程高效率并发执行和协调资源共享的目的。

1.进程的创建  fork

2.进程的撤消  exit

1.进程的阻塞 

2.进程的唤醒 

 

 

三、进程互斥和同步

进程互斥

1.互斥的概念

      所谓进程互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。

2.临界资源

        操作系统中将一次只允许一个进程访问的资源称为临界资源。

3.临界区(Critical Section

      把进程中访问临界资源的那段程序代码段称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。必须在临界区前面增加一段用于进行上述检查的代码,我们把这段代码段称为进入区(Entry Section);相应地,在临界区后面也要加上一段称为退出区(Exit Section)的代码,用于将临界区正被访问的标志恢复为未被访问的标志。

 

一个含有访问某一临界资源的循环进程可描述如下:

    while(TRUE)

    {

      entry section

      critical section

      exit section

      remainder section

    }

4.同步机制应遵循的准则

1)空闲让进。

2)忙则等待。

3)让权等待。

4)有限等待。

 

进程同步

1.同步的概念

     把异步环境下的一组并发进程因直接制约,使得各进程按一定的速度执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。

2.同步与互斥的关系

        进程的同步与进程的互斥都涉及到并发进程共享资源的问题,进程的互斥实际上是进程同步的一种特殊情况。

     有时也把进程的互斥与进程的同步统称为进程的同步。

信号量机制(进程间通信一共有5种方式:信号量,消息,管道)

1.记录型信号量

    struct semaphore

       {

            int value

            PCB *L

       }S

2PV原语操作

       除了给信号量S初始化外,信号量的数值域仅能由PV原语操作改变(PV分别是荷兰语PasserenVerhoog的第一个字母,相当于英文的PassIncrement的意思)。

P原语操作的主要动作是:

1S.value1

2)若S.value1后仍大于或等于零,则进程继续执行;

3)若S.value1后小于零,则该进程被阻塞,进入与该信号量相对应的等待队列L中,然后转进程调度。

P原语操作的功能框图如图4

 

4  P原语操作功能

 

V原语操作的主要动作是:

1S.value1

2)若S.value1后结果大于零,进程继续执行;

3)若S.value1后结果小于或等于零,则从该信号量的等待队列L中唤醒一个等待进程,然后再返回原进程继续执行或转进程调度。

V原语操作的功能框图如图5

5  V原语操作功能

 

进程互斥和同步的实现

 

 

 

 

 

四、进程通信

通信(Communication)意味着在进程间传送数据。 也把进程间控制信息的交换称为低级通信,而把进程间大批量数据的交换称为高级通信。

进程通信的类型

1.共享存储器系统

共享存储器系统为了传送大量数据,在存储器中划出一块共享存储区,诸进程可通过对共享存储区进行读数据或写数据以实现通信。

2.消息传递系统  (适合数据量比较小的时候)

     分为以下两种。

1)直接通信方式

        发送进程可将消息直接发送给接收进程,即将消息挂在接收进程的消息缓冲队列上,而接收进程可从自己的消息缓冲队列中取得消息。

2)间接通信方式  (例如,自己的邮箱就是)

        发送进程将消息发送到指定的信箱中,而接收进程从信箱中取得消息。

3.管道通信系统  分为半双工(在内存完成),全双工(命名管道,介入文件系统)

      UNIX操作系统中,开创了一种借助文件和文件系统形成的一种通信方式。所谓管道是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件。向管道提供输入的发送进程,以字符流方式将大量的数据送入管道,而接收进程从管道中接收数据。由于发送进程和接收进程是利用管道进行通信的,故称为管道通信。

4,信号量5,信号

 

Linux进程间通信类型:

1.信号机制    发送信号

2.管道机制    读者-写者

3.消息队列    消息缓冲队列通信机制,传送小量数据

4 . 共享内存    传送大量数据,锁机制

5. 信号量      PV操作,进程间同步互斥,生产者-消费者,哲学家进餐等。

 

 

五、

进程调度的概念

1.高级、中级和低级调度

1)高级调度

        高级调度通常也称作业调度,用于决定把外存上处于后备队列中的哪些作业调入内存,准备执行。

2)中级调度

        中级调度大多针对于分时系统,是按一定的算法在内存和外存之间进行进程对换,目的在于缓和内存的紧张。

3)低级调度  (有很多种调度算法)

         低级调度用于将内存中就绪队列中的作业分配处理机,使其执行。

2.进程调度的方式

进程调度通常有以下两种方式。

1)非剥夺方式

2)剥夺方式

3.进程调度的功能(如,提高吞吐量等)

4.进程调度算法的性能评价

 

进程调度算法

1.先来先服务调度算法

      在进程调度中,采用FCFS算法时,进程调度程序从就绪进程队列中,选择一个最先进入队列的进程,把处理机分配给它,让它进入执行状态。

      公平性,并且实现也比较容易,这是它的优点。但是,它的缺点是实际上不公平,它比较有利于长进程,而不利于短进程。

2.短进程优先调度算法

      短进程优先(SPF)调度算法,是指对执行时间短的进程优先调度的算法。SPF是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或因等待某事件发生而放弃处理机时,再重新调度。

采用SPF算法,平均周转时间比FCFS调度算法有很多改善,这是它的优点。SPF调度算法的缺点是如下所述。

第一,对长进程非常不利。

第二,紧迫进程不能及时处理。

第三,执行时间的估计值不准确。

3.高优先级优先调度算法

        考虑到系统中的紧迫进程能得到优先处理,引入了高优先级优先(HPF)调度算法,处理机总是分配给就绪进程队列中优先级最高的进程。

        进程的优先级可采用静态优先级和动态优先级两种,优先级可由用户自定或由系统确定。

4.时间片轮转法

      时间片轮转法的基本思想是将CPU的处理时间分成固定大小的时间片。如果一个进程在被调度选中之后用完了系统规定的时间片,但未完成要求的任务,则它自行释放自己所占有的CPU,而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。

5.多级反馈队列调度算法

其基本思想如下所述。

1)系统按优先级设置N个就绪进程队列,第一级队列的优先级最高,其余队列的优先级逐个降低,第N级队列的优先级最低

 

六、死   

在多道程序系统中,多个进程并发执行,共享系统资源,从而提高了资源利用率和系统吞吐量,但可能发生一种危险——死锁。所谓死锁,是指多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。

产生死锁的原因和必要条件

1.产生死锁的原因

产生死锁的主要原因可归结为以下两点。

1)竞争资源

2)进程推进顺序不当

2.产生死锁的必要条件

1)互斥条件

      一个资源在一段时间内只能被一个进程所使用,具有排它性。

2)请求和保持条件

      一个进程在请求新资源而阻塞时,对已获得资源又保持不放。

3)不剥夺条件

      进程已获得的资源,在未使用完之前不能被剥夺,只能在使用完时由自己释放。

4)环路等待条件

      在发生死锁时,必然存在一个进程——资源的环形链。即进程集合{P1P2Pn}中的P1正在等待P2占用的资源,P2正在等待P3占用的资源,…,Pn正在等待P1占用的资源。

只要同时具备上述4个必要条件,系统就会发生死锁,只要上述条件之一不满足,系统就不会发生死锁。

3.处理死锁的方法

      由于死锁状态的出现会给整个系统带来严重的后果,所以如何解决死锁问题引起了人们的普遍关注。目前常用的方法有以下3种。

1)预防死锁

      为了使系统中不发生死锁现象,在系统设计初期即选择一些限制条件,来破坏产生死锁的4个必要条件之一或其中几个。这样,系统中就不会出现死锁现象。这种方法对预防死锁的发生非常有效,但有可能降低系统资源的利用率。

2)避免死锁

     由于一方面预防死锁的方法会降低系统资源利用率,另一方面死锁的必要条件的存在未必就一定会使系统发生死锁,因此为提高系统资源的利用率,可采用避免死锁。避免死锁并不严格限制死锁必要条件的存在,而是在资源的动态分配过程中,使用某种方法去防止系统进入不安全状态,从而避免死锁的最终出现。

3)检测和解除死锁

      由于死锁产生的概率总是比较小的,所以在一些相对简单的系统中,为节省预防或避免死锁中所增加的系统开销,系统中允许出现死锁状态。在这种系统中,专门设置了一个检测机构,可以随时检测出死锁的发生,并能确定与死锁有关的进程和资源,然后采用适当的方法解除系统中的死锁状态。

常用的解除死锁的方法有两种:一是强制性地撤销一些死锁进程,并剥夺它们的资源给其他的进程;另一种是使用一个有效的挂起和解除挂起机构来挂起一些进程,以便从被挂起进程中剥夺一些资源,用来解除死锁。

预防死锁

1.打破请求和保持条件

      打破请求和保持条件,即把进程运行中所要求的所有资源在进程开始运行之前,一次性地分配给进程,只要有一种资源不能满足,该进程就必须等待。这样,进程在运行过程中就不再需要新的资源,这种方法又称为预先静态分配法。

2.打破不剥夺条件

     打破不剥夺条件,即强迫那些请求新资源而没有立即得到满足的进程释放它已保持的其他资源。这意味着一个进程在运行过程可以暂时释放已占有的资源,即允许其他进程剥夺使用该资源,从而破坏了不剥夺条件的出现。

 

3.打破环路等待条件

      死锁产生时,一定存在一种进程和资源的循环链。打破环路等待条件就是在资源的分配过程中,对资源的请求做出某种限制,使环路不可能出现。

 

 

七、线   

线程的引入

     由于进程是一个资源拥有者,所以在进程的创建、撤消和调度切换以及进程的同步与通信中,系统必须付出较大的时空开销。正因为如此,在系统中所设置的进程数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发程度的进一步提高。

由以上对进程的分析可知,如果将进程的上述两个属性分开,由操作系统分开处理,将使多个程序更好地并发执行,同时又可减少系统的开销。也就是说,对于作为调度和分派的基本单位,不同时作为拥有资源的单位;而对于拥有资源的基本单位,又不对之进行频繁的切换。正是在这种思想的指导下,形成了线程(Thread)的概念。

在引入线程的操作系统中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位。它的执行环境很小,除了自身必需的堆栈、寄存器、优先级等私有资源外,共享其所属进程的资源。

 

线程与进程的比较

1)拥有资源

2)调度

3)并发性

4)系统开销

 

线程的属性

线程具有如下属性。

1)线程有控制表。

2)线程共享所属进程的资源。

3)线程是处理机的独立调度单位,多个线程可以并发执行。

4)线程有动态性。

 

线程的状态及其转换

1)就绪状态。线程已具备了执行的条件,等待线程调度程序调度。

2)备用状态。由调度程序选定为一个执行对象。

3)转换状态。若线程已准备好执行,但突然资源不可用,从而成为转换状态。

4)运行状态。获得CPU正在执行。

5)等待状态。正在执行的线程,由于某种原因(如I/O操作)不能继续运行下去。

6)终止状态。线程已执行完成。

线程的状态及其转换如图6所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


6  线程的状态及其转换

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值