99网
您的当前位置:首页2.1 进程的基本概念

2.1 进程的基本概念

来源:99网

为了方便操作系统管理,完成程序并发处理,引入了进程、进程实体的概念。

系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置等)。

进程实体:程序段、数据段、PCB三者构成,一般简称为进程。所谓创建进程,实质上就是创建进程实体中的PCB,而撤销进程,实质上是撤销进程实体中的PCB。

PCB是进程存在的唯一标志。

进程的定义(都在强调动态性):进程是具有功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个单位。进程是进程实体的运行过程。

进程实体是静态的,进程则是动态的。但进程和进程实体一般不做过多区分,除非题目专门考察二者的区别,否则一般情况下,二者是等同的。

PCB的内容

进程描述信息:进程标识符PID和用户标识符UID。

进程控制和管理信息:进程当前状态和进程优先级。

资源分配清单:程序段指针和数据段指针、键盘、鼠标。

处理机相关信息:各种寄存器的值。

进程的组织方式

链接方式:按照进程状态将PCB分为多个队列 ,操作系统持有指向各个队列的指针。

如执行指针,就绪队列指针(通常优先级较高的进程处于队头位置),阻塞队列指针。

索引方式:根据进程状态的不同,建立几张索引表,操作系统将持有指向各个索引表的指针。

进程的特征

动态性:进程是程序的一次执行过程,是动态地产生、变化和消亡的 。

并发性:内存中有多个进程实体,各进程可并发执行。

性:进程是能运行、获得资源、接受调度的基本单位。

异步性:各进程按各自的、不可预知的速度向前推进,操作系统要提供”进程通过机制“来解决异步问题。

结构性:每个进程都会配置一个PCB,结构上看,进程由程序段、数据段、PCB组成。

进程的状态:运行状态、就绪状态、阻塞状态、创建状态、终止状态。

进程状态间的转换:就绪态到运行态,运行态到阻塞态,阻塞态到就绪态,创建态到就绪态,运行态到终止态。

如果状态切换时,PCB进入了别的队列,但PCB有关状态的内容没有更改,就产生了数据的不一致。

原语,正是为了解决此类问题而产生。

原语:执行期间不允许中断,只能一气呵成。这样不可被中断的操作即原子操作。

原语采用“关中断”指令和“开中断”指令实现。中间夹杂原语代码即可。

开/关中断指令是指令。

原语要做的事情:(3类)

1.更新PCB中的信息(如,修改程序状态标志、将运行环境保存到PCB、从PCB恢复运行环境)

所有的进程控制原语都一定会修改进程状态标志

2.将PCB插入到合适的队列

3.分配/回收资源

 

 

 

 

进程通信

主要有三种方式:共享存储、消息传递、管道通信三种。

共享存储:通过互斥的共享空间来实现进程间的安全通信。  操作系统负责提供共享空间和同步互斥工具。     

共享存储又分为:基于数据结构的存储:比如共享空间内只能放一个长度为10的数组,共享速度慢,多,是一种低级通信方式。

                             基于存储区的存储:操作系统只负责在内存中划定一块共享存储区,数据形式、存放位置都由进程自己控制,而不是操作系统,通信速度更快,是一种高级通信方式。

管道通信

管道是指用于连续读写进程的一个共享文件,其实就是在内存中开辟一个大小固定的缓冲区。

管道只能采取半双工方式,也就某一时间段内只能实现单向传输。如果想要实现全双工通信,需要设置两个管道。

各进程应互斥的访问管道。A进程把管道写满后,B进程方可全部读出数据,也只有在数据全部读出后,A才能再写。

数据以字符流的形式写入管道,当管道写满后,写进程的write()系统调用将被阻塞,数据空后,读进程同理被阻塞。数据一旦被读出,就从管道中被抛弃,这意味着,读进程最多有一个,否则会有读错风险。

消息传递

进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的 发送消息/接受消息 两个原语进行数据交换。

格式化的信息:如计算机网络中发送的报文,其实就是一种格式化的消息。

 

消息传递分为:

直接通信方式:消息直接挂到接收进程的消息缓冲队列上

间接通信方式:又称,信箱发送方式,消息要先发送到中间实体(信箱)中。

线程

线程的实现方式:用户级线程/内核级线程/二者混合式

有的进程,可能需要同时执行一系列事情,如QQ,需要同时视频、发文字等。而传统的进程只能串行的执行一系列程序,因此,出现了线程,来增加并发度。

引入线程后,线程成为了程序执行流的最小单位,之前是进程。线程是一个基本的CPU执行单元。

进程只作为除了CPU之外系统资源的分配单元,也就是打印机等设备是分配给进程的,而不是线程。

传统的进程切换,需要保存进程环境,系统开销很大。

而线程切换,若是同一进程内的线程切换,并不需要切换进程环境,系统开销小。

引入线程后,并发所带来的系统开销减小、

每个线程都有一个TID和一个线程控制块TCB,线程也有就绪、阻塞、运行三种基本状态。

线程几乎不拥有系统资源,都在进程内。

同一进程的不同线程共享系统资源。

不同进程中的线程切换,会引起进程切换。

所有线程管理工作都由应用程序负责,用户级线程切换可以在用户态即可完成。用户级线程对用户不透明,对操作系统透明。

内核级线程的管理工作由操作系统完成,必须在核心态完成。

内核级线程才是处理机分配的单位。

多线程模型问题:几个用户级线程映射到几个内核级线程上。

多对一模型:多个用户级线程映射一个内核级线程,每个用户级线程只对应一个内核级线程。

优点:用户级线程的切换只需要在用户态完成即可,不需要切换到核心态,线程管理系统的开销小,效率高哦。

缺点:一个用户级线程被阻塞后。整个进程都会被阻塞。多个线程不可在多个处理机上运行,因为只有一个内核级线程。

一对一模型:一个用户级线程映射一个内核级线程。

优点:一个用户级线程被阻塞了,别的线程还可继续执行。多线程可在多核处理机下并行执行。

缺点:一个用户进程会占用多个内核级线程,需要切换到核心态,系统开销大。

多对多模型:克服了多对一并发度并不高的缺点,和一对一中一个用户进程占太多内核级线程,开销太多的缺点。

因篇幅问题不能全部显示,请点此查看更多更全内容