在上一章节已经讲过了在单道系统的时代,内存中只有一个程序,这样的系统效率是不高的,所以需要在内存中同时运行多个程序, 同时运行多个程序有什么问题吗?
顺序和并发
先来看一下顺序程序的特征:
- 顺序性:顺序性是指内存中只有一个程序,资源的利用率是很低的
- 封闭性:程序独占系统的资源
- 可再现性:相同的环境下由于只有一个程序独占资源,所以多次相同的输入会有相同的输出
对比顺序程序,多道中的多个程序运行有什么特征,看一下并发程序的特征:
- 间断性:多个程序宏观上并发,微观上轮流使用CPU,所以每一个程序都是走走停停,具有间断性,这样做提高了资源的利用率
- 失去封闭性:多个程序共享系统的资源,所以资源的状态不专属于一个程序,失去了封闭性
- 不可再现性:由于多个程序共享资源,每个程序都有对资源修改的权利,所以程序的输出结果是不一定的
操作系统设计的最终目的是不但要提高资源的利用率,而且还要具备封闭性和可再现性,如何解决封闭性的问题
引入进程
解决封闭性有两种方法
1.Bernstein条件:既然所有运行的程序不能并发运行,那么能否让一部分互不干扰的程序并发运行,在一部分程序上实现并发
具体内容:
其实要表达的意思是这样的,将程序的所有读的集合和写的集合挪列出来,如果两个程序仅仅只有读集有交集,说明两个程序是可以并发的,也就是说两个程序可以同时读,但一个读一个写和同时写都是不能并发的
2.引入进程
那么能否有一个东西将资源封闭起来呢?
进程就被引入了,进程是系统进行资源分配和处理机调度的独立单位,所以进程之间是可以并发的。
进程 = 数据段 + 程序段 + PCB
程序和进程有什么区别?
- 进程是动态的,程序是静态的
- 进程具备并发性,程序没有
- 进程是资源分配和处理机调度的独立单位,并发性受系统制约
- 一个程序运行多次,对应多个进程
PCB是做什么用的?
PCB是程序控制块,为了使参与并发执行的每个程序都能独立的运行,在操作系统专门配备的数据结构。结构中有什么内容,在学习完进程的基本状态后再进行理解
进程的基本状态
进程的基本状态可以分为:就绪状态,阻塞状态,执行状态
三者的转换关系用一张图来表示:
描述一下这个过程
- 当作业从外存的后备队列中调入内存的时候,该进程就处于了就绪状态,这个时候等待CPU时间片,如果CPU有空闲的时间,经过进程调度该进程进入运行状态,如果中间没有等待事件比如IO请求,那么进程直接完成撤销。
- 如果有IO请求,那么进入阻塞状态等待IO事件,如果IO事件具备,那么进程重新进入就绪状态等待CPU的调度。
- 如果进程运行到一半,CPU时间片用完了,那么就该其他进程运行了,那么该进程就会进入就绪状态等待CPU时间片。
总结一下:
- 就绪状态:等待CPU时间片
- 阻塞状态:等待事件
- 执行状态:使用CPU
有“挂起”的进程状态
什么是挂起状态?
挂起就是将正在活动的进程(执行,就绪,阻塞)处于静止状态,此时系统将回收这部分进程所占用的资源。
为什么需要挂起?
刚才上面的定义说到了目的和用途,那到底是什么用途?
- 系统负荷调节:前面讲到了实时系统,实时系统有过载保护,如何理解呢,在民用的操作系统中,有时系统超负荷时会出现死机,这时用户就会打开任务管理器关掉一部分不重要的程序,过一会在重新打开刚才关掉的程序。这个过程如果是实时系统,比如军事航空上,死机肯定是不允许的,随意关掉某个程序很复杂的。而挂起就可以解决一部分程序占用资源的问题,以达到系统负荷调节的目的。
- 终端用户的需要:举一个简单的例子,写代码时会用到调试,而调试就用到了挂起。
- 操作系统的需要:操作系统需要查看资源的使用情况,需要用到挂起。
- 对换的需要-虚拟内存:虚拟内存是比实际内存大的,虚拟内存就是通过把进程进行挂起,以增大内存的使用。
有挂起状态的状态讲解
理解了什么是挂起和挂起有什么用后,看一下有挂起状态的进程状态。可以把就绪状态和阻塞状态划分为静止和活动,通过一张图来看一下状态的转换。
可以看到虚线上面的和基本状态演变图相似,下面多了静止就绪和静止阻塞。
说一说不同点:
- 从创建直接到静止就绪,说明考虑到系统当前资源状况和性能的要求,不分配给新建进程所需的内存资源
- 两个激活,两个挂起,说明内存不足或者需要用内存的时候,执行挂起,用完后又进行了激活。
PCB详解
刚才上面已经说过了,了解了进程状态后来讲解PCB,因为这里我是根据进程的生命周期来讲解PCB
PCB的作用以及描述:
- 作为进程独立运行基本单位的标志,当系统创建了一个新进程,就建立了一个PCB,PCB因为是经常要用的,所以PCB被放到了内存区域达到系统内存
- PCB为进程管理所需要的信息,当调度程序调度进程时,只能根据该进程PCB中记录的程序和数据在内存或外存中的起始指针,才能找到对应的程序和数据,需要访问IO时也相同。
- PCB提供调度所需的信息,只有处于就绪状态的进程才能被调度被执行,所以在PCB中提供了进程处于何种状态的信息,进程的优先级等信息。
- PCB能实现间断性的运行方式, 当进程因阻塞而暂停运行时,必须要保留CPU现场信息,当进程再次被调度时,还需要恢复CPU现场信息。
- 为实现与其他进程的同步与通信,PCB中有通信区域或通信队列指针等。
- 在进程执行完后,PCB会随之消亡
通过上面的描述,已经知道了PCB中包含的一部分信息,具体来看一下
PCB中的信息:
- 进程标识符:唯一的表示一个进程
- 处理机状态:包括通用寄存器,指令计数器,程序状态字,用户栈指针
- 进程调度信息:进程状态,进程优先级,进程调度信息,事件
- 进程控制信息:程序和数据地址,进程同步,资源清单,链接地址