操作系统 chapter01 概念、进程、调度算法
作者:互联网
1. 操作系统的定义
1.负责管理协调硬件、软件等计算机资源的工作
2.为上层的应用程序、用户提供简单易用的服务
3.操作系统是系统软件,而不是硬件
课本定义:
操作系统(Operating SystemOS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
作为系统资源的管理者
提供功能:
1.处理机管理
2.存储器管理
3.文件管理
4.设备管理
目标: 安全、高效
作为用户和计算机硬件间的接口
提供功能:
1.命令接口 :允许用户直接使用
1.联机命令接口 : 用户说一句做一句
2.脱机命令接口:用户说一堆做一堆(如:批处理 .bat文件)
2.程序接口: 允许用户通过程序间接使用,由一组系统调用组成
(程序接口= 系统调用 = 广义指令)
3.GUI:图形界面
目标:方便用户使用
作为最接近硬件的层次
提供功能与目标:实现对硬件机器的扩展
2. 操作系统的特征
并发和共享的操作系统的基本特征,没有并发和共享就没有虚拟和异步
2.1 并发
注意并发与并行的区别:
并发:宏观上同时发生,微观上交替发生。
并行:同一时刻干两件事
操作系统的并发性:同时运行着多个程序
多核处理器:指的是可以有多个程序并行运行
2.2 共享
资源共享:多个并发运行的程序共同使用资源
1.互斥共享:一个时间段只允许一个程序访问(如:视频聊天需要的摄像头)
2.同时共享:允许一个时间段多个程序访问(如:我既可以在QQ发送文件,也可以同时在微信发送文件)
2.3 虚拟
物理上的实体对应到 虚拟上的对应
如: 一个程序需要4GB的运行内存。我的电脑只有4GB,但我却可以运行他和其他一堆的程序。
这就用到了虚拟存储技术
虚拟技术
1.空分复用技术
2.时分复用技术
2.4 异步
因为多个程序并发,且资源有限,导致某个程序并不是能够一贯执行到底。可能会遇到阻塞。
这就是异步性
2.5 总结
只有程序有了并发性后,才会有的异步性
3. 操作系统的发展与分类
3.1 手工操作阶段
纸带打点,输入计算机中运算,输出纸带
主要缺点: 用户独占全机、人机速度矛盾导致计算机资源利用率低
3.2 单道批处理系统
引入脱机输入/输出系统(磁带),并引入监督程序(操作系统的雏形)负责控制作业的输入输出。
主要优点: 缓解了一定程度的人机速度矛盾,资源利用率有所提升。
主要缺点: 内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/0完成。资源利用率依然很低。
3.3 多道批处理系统
过程:每次往内存中输入多道程序
这个阶段: 操作系统正式诞生,并引入了中断技术,由操作系统负责管理这些程序的运行。各个程序并发执行
主要优点: 多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源保持“忙碌”状态,系统吞吐量增大。
主要缺点: 用户响应时间长,没有人机交互功能(用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行)
为何多道批处理系统的系统资源利用率高?
3.4 分时操作系统
分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
主要优点:用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。
3.5 实时操作系统
主要优点:能够优先响应一些紧急任务,某些紧急任务不需时间片排队。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的主要特点是及时性和可靠性
硬实时操作系统:必须在绝对严格的规定时间内完成处理 (导弹控制系统)
软实时操作系统:能接受偶尔违反时间规定 (订票系统)
3.6 知识点回顾
4. OS的运行机制和体系结构
4.1 指令
简单来说,“ 指令”就是处理器(CPU) 能识别、执行的最基本命令
比如:加法指令就是让CPU进行加法运算
指令的两种类型
1. 特权指令
2. 非特权指令
两种处理器状态
1.用户态(目态)
2. 核心态 (管态)
4.2 两种程序
1.内核程序: 操作系统的内核程序是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态
2.应用程序: 为了保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态
4.3 操作系统的内核
内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序。
4.3.1 大内核
将操作系统的主要功能模块都作为系统内核,运行在核心态
优点:高性能
缺点:内核代码庞大,结构混乱,难以维护
4.3.2 微内核
只把最基本的功能保留在内核
优点:内核功能少,结构清晰,方便维护
缺点:需要频繁地在核心态和用户态之间切换,性能低
4.3.3 类比企业
操作系统的体系结构问题与企业的管理问题很相似。
内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令。用户态、核心态之间的切换相当于普通员工和管理层之间的工作交接
大内核:企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织
结构混乱,难以维护。
微内核:随着企业体量越来越大,管理层只负责最核心的一-些工作。优点是组织结构清晰,方
便维护;缺点是效率低。
4.4 常考
最常考知识点:
1.特权指令只能在核心态下执行
2.内核程序只能在核心态下执行
3.核心态、用户态之,间的切换(后续讲解内容)
5. 中断和异常
5.1 概况
5.2 中断机制的诞生
早期计算机: 各程序只能串行执行,系统资源利用率低
为了解决上述问题,人们发明了操作系统(作为计算机的管理者),引入中断机制,实现了多道程序并发执行
本质:发生中断就意味着需要操作系统介入,开展管理工作
CPU收到计时部件发出的中断信号,切换为核心态对中断进行处理
进程2发出系统调用(内中断信号),请求输出。CPU切换为核心态,对中断进行处理
喂~打印机开始工作吧,进程2暂停运行等待I/O完成,换进程3运行
5.3 中断的概念和作用
1.当中断发生时,CPU立即进入核心态
2.当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
3. 对于不同的中断信号,会进行不同的处理
发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。
5.4 中断的分类
内中断:信号的来源: CPU内部,与当前执行的指令有关
如:系统调用时使用的访管指令(又叫陷入指令、trap指令)
如:缺页
如:整数除0
外中断:信号的来源: CPU外部,与当前执行的指令无关
如: /0操作完成发出的中断信号
如:用户强行终止一个进程
5.4.1 另一种分类方式
5.5 外中断的处理过程
Step 1:执行完每个指令之后,CPU都要检查当前是否有外部中断信号
Step 2:如果检测到外部中断信号,则需要保护被中断进程的CPU环境( 如程序状态字PSW、程序计数器PC、各种通用寄存器)
Step 3:根据中断信号类型转入相应的中断处理程序
Step 4:恢复原进程的CPU环境并退出中断,返回原进程继续往下执行
6. 系统调用
6.1 什么是系统调用,有何作用?
操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接
口和程序接口。其中,程序接口由一组系统调用组成。
“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用
程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
6.2 系统调用与库函数的区别
6.3 系统调用背后的过程
int x
int是interrupt 中断的意思 ,x 是 系统调用号(比如用0,1,2,3 代表不同的调用【exit,begin......】)
调用过程
1.传递系统调用参数
2.执行陷入指令
3.执行系统调用相应服务程序
4.返回用户程序
7. 进程
7.1 进程的定义
程序:就是一个指令序列,早期的计算机(只支持单道程序)
程序段在高地址部分,数据段存在低地址部分
程序的代码放在程序段内,程序运行过程处理的数据放在数据段内(如变量)
引入多道程序技术之后:
为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念
系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB) ,用来描述进程的各种信息(如程序代码存放位置)
程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下, 我们把进程实体就简称为进程,例如,所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB。
注意: PCB 是进程存在的唯一标志!
从不同的角度,进程可以有不同的定义,比较传统典型的定义有:
1.进程是程序的一.次执行过程。
2.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
3.进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一一个独立单位
强调“动态性”
7.2 进程的组成
PID : 当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的ID,用于区分不同的进程(类似于身份证号)
各种寄存器值:当进程切换时需要把进程当前的运行情况记录下来保存在PCB中,如程序计数器的值表示了当前程序执行到哪一句
7.3 进程的组织
7.3.1 链接方式
7.3.2 索引方式
7.3.3 总结
7.4 进程的特征
7.5 进程的状态与转换
7.5.1 进程的三种状态
注意:单核处理机环境下,每时刻最多只有一个进程处于运行态。(双核环境下可以同时有两个进程处于运行态)
就绪态:进程已经拥有了除处理机之外所有需要的资源,一且获得处理机,即可立即进入运行态开始运行。即:万事俱备,只欠CPU
阻塞态:如:等待操作系统分配打印机、等待读磁盘操作的结果。CPU是计算机中最昂贵的部件,为了提高CPU的利用率,需要先将其他进程需要的资源分配到位,才能得到CPU的服务
7.5.2 另外两种状态
7.5.3 进程状态总结
7.6 进程控制
进程控制就是各种进程状态之间的转换
7.6.1 如何进行进程控制
7.7 进程通信
什么是进程通信?
7.7.1 共享存储
7.7.2 消息传递
7.7.3 管道通信
8. 线程
8.1 什么是线程?为什么要引入线程?
进程是程序的一次执行。但这些功能显然不可能是由一个程序顺序处理就能实现的
传统的进程是程序执行流的最小单位
有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度
可以把线程理解为“轻量级进程”。
线程是一个基本的CPU执行单元,也是程序执行流的最小单位。
引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)
8.2 引入线程后,有什么变化?
类比:去图书馆看书。
切换进程运行环境:有一个不认识的人要用桌子,你需要你的书收走,他把自己的书放到桌上
向一进程内的线程切换=你的舍友要用这张书桌,可以不把桌子上的书收走
8.3 线程的属性
8.4 线程的实现方式
用户级线程由应用程序通过线程库实现。
所有的线程管理工作都由应用程序负责(包括线程切换)
用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明)
可以这样理解,“ 用户级线程”就是“从用户视角看能看到的线程”
内核级线程的管理工作由操作系统内核完成。
线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
可以这样理解,“内核级线程” 就是“从操作系统内核视角看能看到的线程”
在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上( n>= m)
重点重点重点:
操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。
例如:左边这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行。
8.5 多线程模型
多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级
线程。优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统
开销小,效率高缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机.上并行运行
一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同
数量的内核级线程。优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核.处理机上并行执行。
缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
多对多模型:n用户及线程映射到m个内核级线程(n>=m),每个用户进程对应m个
内核级线程。克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。
集二者之大成
8.6 小节总结
9. 处理机调度
9.1 调度基本概念
从就绪队列安装一定算法选择一个进程,将处理机分配给它
9.2 作业调度
高级调度(作业调度) :外存于内存之间的调度
9.3 内存调度
中级调度(内存调度):决定将哪个处于挂起状态的进程调入内存
进程七状态模型:引入挂起态
9.4 进程调度
低级调度(进程调度):从就绪队列选个进程,分配处理机
9.5 三个调度的联系与对比
高级调度:创建完PCB,放入就绪队列
中级调度:让挂起-> 阻塞
低级调度:就绪-> 运行态
9.6 调度总结
中级调度:引入了挂起态
9.7 进程调度的时机
需要进程调度与切换:
1. 进程主动放弃
2. 进程被动放弃
不能进程调度与切换:
1.中断
2.临界区
3.原子操作
注意区分 普通临界区和操作系统内核程序临界区
9.8 进程调度的方式
非抢占式
抢占式
9.9 进程的切换与过程
狭义的进程调度
广义的进程调度
进程切换代价
总结
9.10 调度算法的性能指标
9.10.1 CPU利用率
CPU利用率 =
9.10.2 系统吞吐量
系统吞吐量 = 总共完成作业数 / 总共花费时间
9.10.3 周转时间
周转时间 = 作业完成时间 - 作业提交时间
平均周转时间 = 各作业周转时间之和 / 作业数
9.10.4 等待时间
处于等待处理机状态时间之和
9.10.5 响应时间
提交请求到首次产生响应
9.11 FCFS、SJF、HRRN 调度算法
9.11.1 FCFS
非抢占式算法
按先后顺序,等待时间越久越优先得到服务,
对长作业有利,对短作业不利。(排队买奶茶)
例子:
发现P3的带权周转时间非常大,P3用户体验非常糟糕
FCFS总结:
9.11.2 SJF
最短的作业/进程优先得到服务
SJF 非抢占式
追求最少的平均等待时间、周转时间、平均带权周转时间
默认短作业是非抢占式的
在所有
例子:
发现SJF的算法是优于FCFS的
SRTN:抢占式的短作业优先算法,最短剩余时间优先算法
选择当前完成作业剩余时间最短的进程
采用抢占式后,三个指标更小了,又一次优化
严谨性问题:
很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”
1. 严格来说,这个表述是错误的,不严谨的。之前的例子表明,最短剩余时间优先算法得到的平均等待时间、平均周转时间还要更少
2. 应该加上一个条件“在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少”;
3. 或者说“在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少”;
虽然严格来说,SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS) ,SJF依然可以获得较少的平均等待时间、平均周转时间
如果选择题中遇到“SJF算法的平均等待时间、平均周转时间最少”的选项,那最好判断其他选项是不是有很明显的错误,如果没有更合适的选项,那也应该选择该选项
总结
回顾
FCFS算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题。
SJF算法是选择- - 个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至还会造成饥饿问题
能不能设计一个算法,即考虑到各个作业的等待时间,也能兼顾运行时间呢?
9.11.3 高响应比优先 HRRN
综合考虑作业的等待时间和要求服务的时间
响应比 = (等待时间 + 要求服务时间) / 要求服务时间
综合考虑了等待时间和运行时间(要求服务时间)
等待时间相同时,要求服务时间短的优先(SJF 的优点)
9.11.4 对比
这三种算法一般使用在早期,无交互性
9.12 其他调度算法
9.12.1 时间片轮转调度算法(RR)Round-Robin
诞生于分时操作系统
公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应(时间片)
抢占式
例子:
时间片大小为5的情况:
如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间。因此时间片不能太大。
如何理解会增大进程响应时间?
另一方面,进程调度、切换是有时间代价的( 保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小。
一般来说, 设计时间片时要让切换进程的开销占比不超过1%
总结
9.12.2 优先级调度算法
随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序
每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程。
有:
1.抢占式
2.非抢占式
例子:
补充:
就绪队列未必只有一一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置
根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。
静态优先级:创建进程时确定,之后- -直不变。
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。
如何合理地设置各类进程的优先级?
通常:
系统进程优先级高于用户进程
前台进程优先级高于后台进程
操作系统更偏好I/O型进程(或称I/0繁忙型进程)
注:与I/0型进 程相对的是计算型进程(或称CPU繁忙型进程)
如果采用的是动态优先级,什么时候应该调整?
可以从追求公平、提升资源利用率等角度考虑
如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
如果某进程占用处理机运行了很长时间,则可适当降低其优先级
如果发现一个进程频繁地进行I/O操作,则可适当提升其优先级
总结
9.12.3 多级反馈队列调度算法
对其他调度算法的折中权衡
优点多抢占式
动态过程:规则较为复杂
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
- 新进程到达时先进入第1级队列,按FCFS原则排队 等待被分配时间片。若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经在最下级的队列,则重新放回最下级队列队尾
- 只有第k级队列为空时,才会为k+1级队头的进程分配时间片被抢占处理机的进程重新放回原队列队尾
总结
9.12.4 三种算法对比
注:比起早期的批处理操作系统来说,由于计算机造价大幅降低,因此之后出现的交互式操作系统(包括分时操作系统、实时操作系统等)更注重系统的响应时间、公平性、平衡性等指标。而这几种算法恰好也能较好地满足交互式系统的需求。因此这三种算法适合用于交互式系统。( 比如UNIX使用的就是多级反馈队列调度算法)
标签:操作系统,用户,调度,算法,线程,内核,chapter01,进程 来源: https://blog.csdn.net/weixin_45817392/article/details/120194598