进程的概念、状态转换和进程控制块

2019-07-14 13:02发布

1. 为什么要引入进程
通常的程序是不能并发执行的,因为并发执行会使它们具有间断性、失去封闭性,并且其结果不可再现。
为了使程序能够并发执行,并且对程序加以描述及控制,引入了进程的概念。 2. 进程的定义
进程是进程实体的运行过程,进程实体由程序段、相关的数据段和PCB三部分构成。在没有引入线程的操作系统中,进程是系统进行资源分配和调度的一个独立单位。 3. 进程的状态
(1)创建状态
当一个新进程被创建时,系统为其创建PCB,并填写必要的管理信息。但由于该进程所需的资源尚未分配,进程还没有进入主存,进程还不能被调度运行。
(2)就绪状态
当进程已经被分配到除CPU以外的所有资源时,只要再获得CPU就可以执行,这种状态称为就绪状态。
(3)执行状态
进程获得了CPU,正在执行当中。
(4)阻塞状态
正在执行的进程由于发生一些事件暂时无法继续占有CPU时,进程进入阻塞状态。
(5)挂起状态
当有终端用户的请求,或父进程的请求,或系统负荷调节的需要,或操作系统的需要时,进程进入挂起状态。
(6)终止状态
当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统终结,或是被其它拥有终止权的进程终结,进程就进入终止状态。 进程状态转换图(无挂起状态)
这里写图片描述 4. 引起进程进入各种状态的事件
4.1 进入阻塞状态
(1)请求的资源被其它进程占用。如:请求使用打印机资源,但打印机正在被其它进程使用。
(2)启动某种操作。如:启动了某项I/O设备,只有在I/O设备完成了指定的I/O操作后进程才能继续执行。
(3)新数据尚未到达。如:进程A用于输入数据,进程B用于对数据加工,如果进程A尚未输入完数据 ,则进程B阻塞。
(4)无新工作可做。如:发送数据的进程已经发送完数据,且无新的发送请求,则该发送进程阻塞。 4.2 进入挂起状态
(1)终端用户请求。如:终端用户在程序运行期间希望程序 暂停执行,进程进入挂起状态。
(2)父进程的请求。如:父进程希望挂起自己的某个子进程,以便修改子进程或协调各子进程的活动。
(3)进行负荷调节。如:当实时系统的负荷较重,系统可以把一些不重要的进程挂起。
(4)操作系统的需要。如:操作系统挂起某些进程,以便检查运行资源的使用情况 5. 进程控制块(PCB)
5.1 进程控制块的作用
进程控制块记录了操作系统所需的,用于描述进程的当前情况,以及控制进程运行的全部信息。操作系统是根据PCB来对并发执行的进程进行控制和管理的。
例子:
(1)当操作系统要调度某进程执行时,要从该进程的PCB中查看其现行状态和优先级。
(2)当调度某进程后,要根据PCB中保存的CPU状态信息,设置进程恢复运行的现场,并根据PCB中程序和数据的内存地址找到程序和数据。
(3)当进程阻塞或挂起时,要将其断点的CPU环境保存在PCB中。
(3)进程之间实现同步、通信、访问文件时,需要访问PCB。 5.2 进程控制块的内容
(1)进程标识符(PID)。进程标识符唯一地标识一个进程。
(2)CPU状态信息。由CPU的各种寄存器的内容组成。
(3)进程调度信息。包括进程状态、进程优先级、进程调度所需的其他信息、引起状态转换的事件。
(4)进程控制信息。包括程序和数据的地址、进程同步和通信所需的内容、进程所需和已有的资源清单、所在队列中指向下一个进程的链接指针。 进程和线程的区别
  1. 在没有引入线程的操作系统中,进程是系统进行资源分配和调度的基本单位。但是在引入线程的操作系统中,进程是资源拥有的基本单位,线程则是作为调度和分派的基本单位。
2.进程是操作系统中拥有资源的基本单位;而线程一般不拥有系统资源,同一个进程中的线程共享该进程拥有的资源。 3.进程在创建、切换和撤销的时候系统的时空开销比较大;而线程的切换仅需要保存和设置少量寄存器的内容,开销比进程小很多。在同一个进程里,线程的切换不会引起进程的切换。 4.由于同一个进程中的线程具有相同的地址空间,因此线程在同步和通信方面比进程容易。 进程通信是指进程之间进行信息交换(数据传输) 进程通信的分类
1.低级通信
1)使用信号量实现进程间的互斥和同步。 2.高级通信
1)共享存储器系统
互相通信的进程通过共享某些数据结构或共享存储区进行通信。 2)消息传递系统
1.直接通信:发送进程利用操作系统提供的发送命令,直接把消息发送给目标进程。
原语:Send( Receiver , message)
Receive( Sender , message ) 2.间接通信:通过信箱来实现
1)私用信箱:信箱的拥有者有权从信箱中读取信息,其它用户只能将信息发送到该信箱中。
2)公用信箱:核准进程既可以将信息发送到该信箱中,也可以从信箱中读取发送给自己的信息。
3)共享信箱:信箱的拥有者和共享者都有权从信箱中读取发送给自己的信息。 3.消息缓冲队列
需要用到的数据结构:
1)消息缓冲区(sender , size , text , next)
2)PCB中的数据项:增加了指向消息队列的头指针、实现同步的互斥信号量、资源信号量。