一、进程的概念
1、什么是程序(proceduce)?
程序是描述计算机所要完成的具有具体功能的,并在时间上按严格的次序先后进行的计算机操作序列的命令集合。
2、什么是进程(process)?
进程是一个具有独立功能的程序对于某一个数据集在处理机上的一次执行过程和分配资源的基本单位(简单来说进程是动态的程序,正在进行的程序。)
在早期批处理系统时期,因为同一时间计算机同一时间只会运行一个程序,所以没有进程的概念,程序即进程
3、程序的顺序执行和并发执行的特点。
顺序执行:执行的程序有严格的上下文关系。上一条指令的结束时下一条指令开始的充要条件
特点是:顺序性,封闭性,可再现性。
并发执行:程序在宏观上并行,在微观上依次执行。
特点是:独立性,随机性,资源共享性。
4、进程的特点是什么?
动态性(进程是动态的过程),并发性(多个进程并发执行),独立性(多个进程间彼此独立),异步(各个进程按照独立的、不可预知的速度向前推进,异步性会导致并发程序执行的不确定性)、结构性*
二、进程的描述
1、进程与进程的实体
进程是指执行中的动态的程序
进程的实体是指对进程的动态描述,它包括:进程控制块(PCB),相关程序段,该程序段对其进行操作的数据结构。
2、进程控制块PCB(process control block){作业控制块JCB}的主要内容
在多道操作系统中,一个进程的PCB结构必须部分或全部常驻在内存中,每个进程的PCB都是独一无二的,无可替代的,是进程存在的唯一证据。
主要内容包括:
(1)描述信息:进程号或进程标识号(PID)、用户名或用户标记名(UID)、家族关系。
(2)控制信息:进程当前状态(进程五态)、进程优先级(占有优先级时间,进程优先级偏移,占有内存时间等)、程序开始地址、计时信息、通信信息
(3)资源管理信息(最大部分),由于内容较多,一般会把部分信息放于外存
(4)CPU现场保护结构:切换时需要保存或恢复的CPU寄存器信息
3、进程的资源控制信息:
(1)占有的内存大小及其控制信息:给进程分配的虚拟地址与物理地址的对应关系、资源上限。
(2)对换或覆盖用的相关信息,这些信息将会在申请或释放内存时使用。
(3)共享内存段的起始地址。
(4)指向文件系统的指针和相关标识。
(5)输入输出设备的设备号,所要传送的数据长度、缓冲区地址、缓冲区长度及其所用设备的先关信息。
4、什么是上下文和上下文切换?
上下文:进程执行活动全过程的静态描述,进程的上下文由进程的用户空间地址内容、硬件寄存器内容及该进程相关的核心数据结构组成。(进程的上下文是一个与进程的切换和处理机状态发生交换相关的概念。包括进程执行过的、执行时和待执行的指令和数据。是进程执行全过程的静态描述。)
进程的上下文切换:多道操作系统中,进程与进程间发生切换时发生的系统状态的转换。
5、进程上下文切换的三过程:保存、选取、调度激活
6、进程空间的大小:进程空间的大小只与处理机位数相关,进程空间=2^处理机位数
7、进程空间的两部分:用户空间和系统空间。
三、进程状态的转换
1、进程五态
新建态(正在被创建的状态),就绪态(等待执行),执行态(正在执行,对于计算机来说,有几个CPU就有几个执行态进程),阻塞态(因为某种原因无法执行),终止态(已经执行完毕,还未进行撤销)
2、状态转换:
新建态→就绪态:新建完成 就绪态→执行态:调度
执行态→就绪态:时间片到
执行态→阻塞态:睡眠或中断 阻塞态→就绪态:唤醒
执行态→终止态:终止或完成
注:思考为什么阻塞态不能直接转换成运行态?就绪态为什么不能转换成阻塞态?
四、进程的组织
1、什么是进程的组织?
进程的组织就是多个进程间的组织方式
2、进程的组织方式
①、链接方式:根据进程状态将PCB分成多个队列,操作系统持有各队列的指针。
②、索引方式:指针指向的不是各个队列,而是一个索引表中的各项
五、进程控制
1、什么是进程控制?
进程控制就是系统使用特殊功能的程序段来进行创建、撤销进程以及完成进程间状态的转换,目的是为了达到多进程间高效率并发执行胡协调、实现资源共享。(进程控制就是要实现进程状态间的转换)
2、什么是原语?原语的分类?
原语是一段具有特殊功能的公有程序,具有不可分割性(即在执行过程中不允许被打断)。
主要分为两类:机器指令级和功能级。包括创建原语、撤销原语、阻塞原语和唤醒原语等。
简单来说:原语就是不可细分(操作系统层面上)的指令。
注:为什么要使用原语,因为进程控制的过程是由一系列不可中断的指令组成的,因此需要使用一种不可中断的语句执行
3、原语的一般坐拥
①、更新PCB中的状态信息(保存上下文,状态转换,恢复上下文)
②、将PCB插入相应队列
③、分配或回收资源
3、进程间的状态转换:
①、进程创建:进程的创建属于中断中的内中断
(1)系统程序模块同一创建,这些进程间是平等的,没有资源继承关系
(2)父进程创建子进程:子进程与父进程是隶属关系,构成树状结构的家族关系。
但无论哪种方式创建,都必须通过创建原语创建:
申请空白PCB描PCB链表;
若无空的PCB结构(没有空位),则创建失败;反之取空PCB(i),填入相关参数,PCB(i)进入进程家族,返回。
分配资源;初始化PCB;
将PCB插入就绪队列
②、进程撤销
(1)进程完成相关功能正常终止
(2)进程未完成相关功能,但因为某种错误非正常终止
(3)进程被祖先进程要求解散。
无论哪种方式,都必须通过撤销原语撤销:原语扫描PCB进程表或进程家族,若无则出错处理;反之则看该PCB进程是否有子进程,若有,则撤销其子进程,然后再返回继续撤销;反之则释放该进程占用资源,释放该PCB结构本身,返回。
③、进程阻塞
阻塞原语:保存当前CPU现场,置该进程的状态,被阻塞进程进入等待队列,转进程调度。
④、进程唤醒
从等待队列中摘出需要唤醒的进程,将进程转制为就绪状态,将被唤醒的进程送入就绪队列,转进程调度或返回。
六、进程通信
1、进程通信是什么?
进程通信就是进程间的信息交换,进程间的地址空间是独立的,且不可相互访问的,所以必须需要一种方式帮助两个进程的通信
2、进程的通信目的:
数据传输,资源共享,数据共享,通知事件,进程控制
3、进程通信的方式:共享存储、信息传递、管道通信、信号量、套接字
4、共享存储:操作系统为两个进程分配一段共享空间;两个进程对共享空间的访问是互斥的。
共享存储分为两种:基于数据结构的共享和基于存储区的共享
基于数据结构的共享要求进程间的共享信息必须以某种格式存在,是一种低级通信
基于存储区的共享则没有这些需求。是一种高级通信
5、管道通信:队列
管道只能采取半双工通信,即某一时间端内只能实现单向的传输。管道中数据的读和写分别只能在管道为满或空时进行。且一旦被读出则数据就会消失。
管道通讯分为两种:FIFO管道和pipo管道,前者允许各种形式的进程进行通信,后者只允许父子进程进行通信
注:半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。
因此,半双工通信实际上是一种可切换方向的单工通信。
6、消息传递:通过“发送消息/接受消息”两个原语实现。分为消息式和消息队列式(信箱)
消息的格式:消息头和消息体,消息头包括发送进程的PID,接收进程的PID,消息类型,消息长度等;消息体包括消息的内容
消息式和消息队列式区别在于是否有中间体信箱
注:共享存储的内容一般可以反复读取;管道通讯在建立管道期间的开销较大,建成后只能用于特定进程间通信;信息队列对于通信格式有要求,消息的读和写过程开销较大;信号量的修改一般需要PV原语进行,所以一般用于进程控制;套接字也常常被用于进程控制。
7、和控制台通信
(1)、KCP\DCP\CCP都是什么?
KCP:keyboard Control Process(键盘控制进程)DCP Display CP(显示控制进程)
CCP Convesation CP(会话控制进程)
(2)过程:
问题描述:该系统一共分成两部分,由系统操作员操作的控制台终端和用户控制的用户终端。
设控制台是由KCP与DCP组成。CCP从用户终端读取信息,并从内容将输出内容压入outbuf中,DCP读取outbuf中内容并显示给操作台终端,操作员解答问题,并将回答内容通过KCP输出到inbuf,有CCP读取并反馈用户(在此过程中KCP与DCP还分别与键盘和显示器动作程序DP进行了通信)。
所以完成过程是:键盘→KCP→CCP,CCP→DCP→DP.
①KCP与CCP共用缓冲区inbuf,CCP与DCP共用缓冲区outbuf
②相邻两进程是互斥关系也是同步关系。
③CCP除了与KCP和DCP的通信外还需要处理与各个用户间的通信,与各用户也是同步与互斥的关系,各个用户间则只有互斥的关系。