操作系统的发展
1. 手工操作系统
-
缺点
用户独占全机,资源利用率低
cpu等待手工操作,cpu利用不充分
2. 批处理操作系统
-
单道批处理操作系统
-
特征
自动性
顺序性
单道性
-
缺点
- 每次主机仅能放一次作业,运行期间高速的cpu等待低速的I/O完成的状态
-
-
多道批处理操作系统
-
特点
多道
宏观上运行
微观上运行
-
面临的问题
如何分配处理器
多道程序内存分配
I/O设备如何分配
如何组织和存放大量程序和数据,以方便用户使用保证其安全性和一致性
-
优点
资源利用率高
多道程序共享计算机资源,使各资源充分利用
系统吞吐量大
-
缺点
用户响应时间长
不提供人机交互能力
用户不了解计算机情况,不能控制计算机
-
3. 分时操作系统
-
特点
交互性
同时性
独立性
及时性
-
问题
- 解决了人机交互问题,对一些事件不能及时做出处理
4. 实时操作系统
硬实时操作系统
软实时操作系统
5. 网络操作系统和分布式操作系统
- 网络中各种资源共享以及个计算机之间的通信
6. 个人操作系统
- 如Windows,Linux等
操作系统运行机制
-
两种指令
特权指令 指计算机不允许用户直接使用的指令。只能在和心态下执行
非特权指令 既可以在核心态游客一再用户态下执行
-
两种处理状态
核心态 此时cpu可以执行特轻轻按指令
用户态
-
两种程序
内核程序 管理者,管理应用程序,可以执行一些特权指令
应用程序
操作系统
-
内核功能(最核心基础的功能,是计算机配置上的底层软件,实现操作系统内核功能的程序就是内核程序)
时钟管理
中断处理
原语(设备驱动、CPU切换)
注意:以上三个功能是最接近硬件的层次,若仅仅包含以上三个就是内核,若还包括以下的就称之为大内核
-
系统控制的数据处理结构
进程管理
存储器管理
设备管理
非内核功能
系统调用
指系统中各种资源都有操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配,I/O操作、文件管理等),都必须通过系统调用的方式像操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户非法操作。 会使处理器从用户态进入核心态
1. 设备管理
完成设备的请求/释放/启动等功能
2. 文件管理
完成文件的 读/写/创建/删除等功能
3. 进程管理
完成进程的创建/撤销/阻塞/唤醒等功能
4. 进程通信
完成进程之间的消息传递/信号传递等功能
5. 内存管理
完成内存分配/回收等功能
系统调用的过程
(系统调用发生在用户态,对系统调用的处理发生在核心态)
传递系统调用参数
-
执行陷入指令[用户态]
(产生内中断,使处理器从用户态进入核心态)
(操作系统获得CPU控制权 )
执行系统调用相应服务程序[核心态]
-
返回用户程序
注意:
陷入指令在用户态执行,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态
发出系统请求旨在用户态,而对系统调用的相应处理在核心态下进行
陷入指令是唯一一个只能在用户态执行,而不可以在核心态执行的指令
陷入指令又称为访管指令
进程
程序:一个指令序列
进程实体:
PCB
程序段:程序本身
数据段:运行程序要处理的数据
1. 定义
理解:
为了方便操作系统管理,完成各种程序并发执行,引入了进程,进程实体的概念。
系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)
-
一般把进程实体简称为进程所谓创建进程,实质上是为了创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB
三种定义
进程是程序的一次执行过程
进程是一个程序及其数据在处理及上顺序执行所发生的活动。
进程是具有独立功能的程序在数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位
总:进程是进程实体的运行过程,是系统进行资源分配和调度的一个单位。
对比进程实体和进程
进程实体:主要强调创建的PCB(静态)
进程:强调运行过程(动态)
注意:在没有特别要求的时候,可以当进程实体就是进程
2. 组成
PCB
-
进程描述信息
-
进程标识符PID
进程被创建时,操作系统会为该进程分配一个唯一的,不重复的ID,用于区分不同的进程(类似一身份证号)
用户标识符UID
-
-
进程控制和管理信息
进程当前状态
进程优先级
-
资源分配清单
程序段指针
数据段指针
键盘
鼠标
-
处理机相关信息
-
各种寄存器值
进程切换时需要把进程当前运行的情况记录下来保存在PCB中,如程序计数器的值表示了当前程序执行到哪一句
-
-
其他
进程标识码
处理机状态
进程调度信息
进程控制信息
3.组织方式
一个操作系统中,通常由数十、数百乃至数千个PCB。为了能对其有效管理,应当用适当的方式把这些PCB组织起来
-
链接方式
按照进程状态将PCB分为多个队列
-
操作系统持有执行各个队列的指针
执行指针
就绪队列执指针
-
阻塞队列指针
[图片上传失败...(image-39b9cf-1629181963277)]
-
索引方式
根据进程状态不同,建立几张索引表
-
操作系统有指向哥哥索引表的指针
执行指针
就绪队列执指针
-
阻塞队列指针
[图片上传失败...(image-bedf32-1629181963277)]
4. 特征
动态性:进程时程序一次执行过程,动态产生、变化、消亡
并发性 :内存中有多个进程实体,个进程可并发执行
独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位
异步性:各进程按各自独立的,不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题
结构性:每个进程都会配置一个PCB,从结构上看,进程有程序段、数据段、PCB组成
进程的状态和转换
进程是程序的一次执行,执行过程中,有时需要被CPU处理,有时又需要等待CPU服务,可见进程的状态会有各种变化,为了方便对各个进程的管理,操作系统需要将进程合理划分为几种状态。
1. 状态
-
运行状态:占有CPU,并在CPU上运行cpu √ 其他资源 √
注意:单核处理机环境下,每一时刻最多只有一个 进程处于运行态(双核有两个)
-
就绪状态:已经具备运行条件,但由于没有空闲CPU,而暂时不能运行cpu √ 其他资源 ×
注意:此时进程已经拥有除了处理及之外所有的资源,一旦获得处理机,即立刻进入运行态
-
阻塞状态:因等待某一件事而暂停不能运行cpu × 其他资源 ×
注意:如等待操作系统分配打印机,等待读磁盘操作的结果
以上三种为三种基本状态
-
创建状态:进程正在被创建,操作系统为系统分配资源、初始化PCB
操作系统需要完成创建进程,为该进程分配所需要的内存空间等系统资源,为其创建初始化PCB
终止状态:进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
2. 进程状态间的转换
进程控制
1. 什么是进程控制
进程控制主要功能是对系统中的所有晋城市是有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。(实现进程状态转换)
2. 如何实现进程及控制
用原语实现进程控制。原语的特点是执行期间不允许中断,只能一起呵成
这种不可以中断的操作即原子操作
原语采用“关中断指令”和“开中断指令”实现
3. 进程控制相关的原语(三类)
更新PCB中的信息
将PCB插入合适的队列
分配/回收资源
进程的创建
-
创建原语
申请空白PCB
为新进程分配所需资源
初始化PCB
将PCB插入就绪队列
-
引起进程创建的事件
-
用户登录
分时系统中,用户登陆成功,系统为用户建立一个新的进程
-
作业调度
多道批处理系统中,有新的作业放入内存时,会建立一个新的进程
-
提供服务
用户向操作系统提出某些请求时,会新建一个进程处理该请求
-
应用请求
由用户进程主动请求创建一个进程
-
进程的终止
-
撤销原语
从PCB集合中找到种植进程的PCB
若进程正在运行,立即剥夺进程,将CPU分配给其它进程
终止其所有子进程
将该进程拥有的所有资源归还父进程或操作系统
删除PCB
-
引起进程终止的事件
正常结束
异常结束
外界干预
进程的阻塞
-
阻塞原语
找到要阻塞的进程对应的PCB
保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
将PCB插入响应时间的等待队列
-
引起进程阻塞的事件
需要等待系统分配某种资源
需要等待相互合作的其他进程完成工作
进程的唤醒
-
唤醒原语
在时间等待队列中到PCB
将PCB从等待队列溢出,设置进程为就绪
将PCB插入就绪队列,等待被调度
-
引起进程唤醒的事件
- 等待事件的发生
系统阻塞原语和唤醒原语要成对出现,因何事阻塞就因何事被唤醒
进程的切换
-
切换原语
将运行环境信息存入PCB
PCB移入相应队列
选择另一个进程执行,并更新其PCB
根据PCB回复进程所需运行环境
引起进程切换的事件
* 当前进程事件片到
* 有更高优先级的进程到达
* 当前进程主动阻塞
* 当前进程终止
进程通信
定义:进程通信指进程之间的信息交换
(进程是分配系统资源的单位<u style="box-sizing: border-box;">包括内存地址空间</u>,因此各进程拥有内存地址空间相互独立)
进程是不能直接访问另一个进程空间的
1. 共享储存
基于数据结构的共享
基于存储空间的共享
两个进程对共享空间是互斥的
2. 管道通信
3. 消息传递
消息: 消息头 消息体
总结
线程概念与多线程模型
什么是线程?为什么引入线程?
引入线程概念之后,cpu调用对象由进程变为了线程
线程相当于轻量级进程,是一个最基本的CPU单元,也是程序执行流的小单位
线程是进程的一个实体,是被系统独立调度和分配的基本单位
统一进程内的存在许多线程,线程共享此进程内的资源
线程的组成
线程ID
程序计数器
寄存器集合
推栈
引入线程带来的变化
-
资源分配、调度
传统进程机制中,进程是资源分配、调度的基本单位
引入线程后,进程是资源分配的基本单位,线程是调度的基本单位
-
并发性
传统进程机制中,只能进程间并发
引入线程后,个线程之间也能并发
-
系统开销
传统进程间并发,需要切换进程的运行环境,系统开销很大
线程间并发,如果是同一进程内的线程切换,则不需要切换线程
引入线程后,并发所带来的系统开销减少
线程的属性
线程是处理机调度单位
多CPU计算机中。各个进程可占用不同的CPU
每个线程都有一个线程ID(唯一的线程标识符),线程控制块(TCB)【数据结构】
线程也有就绪、堵塞、运行三种基本状态
线程几乎不拥有系统资源
同一进程的不同线程间共享进程的资源
由于共享内存地址空间,同一进程中的线程间甚至无需系统干预
同一进程中的线程切换,不会引起进程切换
不同进程中的线程切换,会引起线程切换
切换同进程内的线程,系统开销很小
切换进程,系统开销很大
线程的实现方式
-
用户级线程
用户级线程用户可以看到,操作系统看不到
-
内核级线程
相当于从操作系统内核视角能看到的线程,必须在核心态下才能完成。
总结
处理机的调度
1. 基本概念
如有大量任务,但是资源有限,没办法同时处理,需要某些规则决定任务顺序,即调度!!
进程数量远大于处理机个数,需要从就绪序列中按照一定算法选择一个进程并将处理机分配给它运行,实现进程的并发运行
2. 三个层次
-
高级调度(作业调度)
是辅存(外存)与内存之间的调度
-
中级调度(内存调度)
将暂时不能运行的进程调制外存等待,当具备空闲条件时在冲洗调入内存。
暂时调到外存等待的进程状态为挂起状态,PCB不会调到外存,会常驻内存,内部会记录进程数据在外存中的存放位置,进程状态等信息,被挂起进程PCB会被放到挂起的队列中。
补充:挂起状态与七状态模型
-
低级调度(进程调度)
3. 三层调度的联系、对比、
要做什么 | 调度发生位置 | 发生频率 | 对进程状态的影响 | |
---|---|---|---|---|
高级调度 | 按照某种规则从后备队列中选择合适的作业将其调入内存,并为其创建进程 | 外存->内存(面向作业) | 最低 | 无->创建态->就绪态 |
中极调度 | 按照某种规则从挂起队列中选择合适的作业将其数据调回内存 | 外存->内存(面向进程) | 中等 | 挂起态->就绪态(阻塞挂起->阻塞态) |
低级调度 | 按照某种规则从就绪队列中选择一个进程为其分配处理机 | 内存->CPU | 最高 | 就绪态->运行态 |
总结
进程调度的问题
1. 调度的时机
需要进行进程调度的情况
-
当前运行进程主动放弃处理机
进程正常终止
运行过程中发生异常而阻止
进程主动请求阻塞(如 等待I/O)
-
当前运行的进程被动放弃处理机
分给进程的时间片用完
有更紧急的事情需要处理(如 I/O中断)
有更高优先级的进程进入就绪队列
不能进行进程调度与切换的情况
在处理及中断过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进程切换进程在操作系统内核程序临界区中。
在原子操作过程中(原语)。原子操作不可中断,要一气呵成
2. 调度的切换与过程
- 广义的进程调度:包含选一个进程+进程切换两个步骤
1. 进程切换过程主要完成了各种数据的保存
2. 对新的进程各种数据的恢复(如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,一般保存在进程控制块)
频繁的进程调动、切换会是否大部分时间花在进程切换上,真正用于执行的时间减少
3. 调度的方式
-
非剥夺调度方式(非抢占方式)
只允许进程主动放弃处理机,在运行过程中有更紧迫的任务到达,当前进程依然会继续使用处理机,知道进程终止或主动要求进入阻塞态
实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统
-
剥夺调度方式(抢占方式)
抢占方式。当一个进程在处理机上执行时,如果一个更重要或更紧迫的进程要使用处理及。即立即暂停正在执行的进程,将处理及分配给更重要更紧迫的那个进程。
可以有限处理更紧急的进程,也可以实现让各进程按时间片轮流执行的功能(通过时钟中断) 更适合于分时操作系统、实时操作系统
总结
调度算法的评价指标
-
cpu利用率:CPU“忙碌”的时间占总
系统吞吐量:单位时间完成作业的数量
-
周转时间:作业从提交给系统,到作业完成的这段时间间隔
-
等待时间:指进程(作业)处于等待处理及状态时间之和,等待时间越长,用户满意度越低
对进程来说:等待时间指进程建立后等待被服务的时间之和,在等待I/O完成期间其实进程也是在被服务的,所以不计入等待时间
对于作业来说:不仅要考虑建立进程之后的而等待时间,还要加上作业在外村后被队列中的等待时间。
响应时间:用户从提出请求到响应锁花费的时间
总结
-
调度算法
学习思路
1. 算法思想
2. 算法规则
3. 调度算法用于作业调度 or 进程调度
4. 抢占式 or 非抢占式
5. 优点 and 缺点
6. 是否会饥饿
1. 先来先服务(FCFS)
2. 短作业优先(SJF)
3. 高响度比优先(HRRN)
生产者消费者问题
-
问题描述
系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据)
共享一个缓冲区
只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。
缓冲区是临界资源,各进程必须互斥地访问。