概述
4229字约14分钟
2024-12-18
概念
负责管理协调硬件、软件等计算机资源的工作
为上层用户、应用程序提供简单易用的服务
是一种系统软件
功能和目标
资源的管理者
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
向上层提供服务
给普通用户
GUI用户图形界面
命令接口
- 联机命令接口(交互式命令接口)
- 脱机命令接口(批处理接口)
给软件/程序员用的
程序接口(系统调用)
可以在程序中进行系统调用来使用程序接口,普通用户不能直接使用程序接口,只能用过程序代码间接使用
对硬件机器的扩展
扩充机器
特征
并发
指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的
并行
指两个或多个事件在同一时刻同时发生
共享
互斥共享方式
系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
同时共享方式
系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问
并发和共享的关系
并发性指计算机系统中同时存在多个运行着的程序
共享性是指系统中的资源可供内存中多个并发执行的进程共同使用
虚拟
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的
空分复用技术
时分复用技术
中断和异常
中断的作用
- 使CPU由用户态变为内核态
- 使操作系统重新夺回CPU的控制权
CPU上会运行两种程序,一种是操作系统内核程序(是整个系统的管理者),一种是 应用程序
在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容)
“中断”是让操作系统内核夺回CPU使用权的唯一途径
如果没有中断机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序
内核态->用户态:执行一条特权指令--修改PSW的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权
中断的类型
内中断:与当前执行的指令有关,中断信号来源CPU内部,CPU在执行指令时会检查是否有异常发送
异常、例外,陷入、故障、中止
指令本身非法(用户态执行特权指令)
指令参数非法(除法运算发现除数为0)
应用程序需要请求操作系统内核的服务,此时会执行一条特殊的指令--陷入指令,该指令会引发一个内部中断信号,执行“陷入指令”,意味着应用程序主动地将CPU控制器还给操作系统内核“系统调用”就是通过陷入指令完成的
外中断:与当前执行的指令无关,中断信号来源CPU外部,每个指令周期末尾,CPU都会检查是否有外中断信号需要处理
时钟中断--由时钟部件发来的中断信号
时钟部件,每隔一个时间片(比如50ms)会给CPU发送一个时钟中断信号
I/O中断请求,当输入输出任务完成时,向CPU发送中断信号
中断机制的基本原理
不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置,显然终端处理程序一定是内核程序,运行在“内核态”
对于一般的异常中断处理后,不会再返回到发生异常的指令处继续执行,例如除数为0引起异常,再次回到该指令,还是会再次引发异常
页缺失是特殊的内中断,其特殊性包括两个,第一个是指令执行过程中可能会发生多次中断,如一条读取数据的多字节指令,指令本身跨越两个页面,若指令后一部分所在页面和数据均不在内存,则该指令的执行至少产生两次缺页中断,第二个是中断处理完成后,将会回到中断指令处继续执行
处理外部中断时,应该由操作系统保存的是
块表(TLB)中的内容、Cache中的内容,完全由硬件出发和操作系统无关
程序计数器(PC)的内容,他是保存断电,由中断引指令完成,不需要操作系统完成
通用寄存器的内容,操作系统保存(保护现场)
系统调用
普通应用程序:可直接进行系统调用,也可使用库函数,部分库函数涉及系统调用
编程语言:向上提供库函数。有时会将系统调用封装采库函数,以隐藏系统调用的一些细节,使程序编程更方便
操作系统:向上提供系统调用,使得上层程序能请求内核的服务
- 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态
- 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
系统调用的目的是使应用程序能够通过系统调用间接调用操作系统中的相关过程,获取相应的系统服务
程序设计时需要调用操作系统提供的系统调用,被调用的系统调用命令经过编译后,形成若干参数和访管指令或软中断
内核
内核是操作系统最基本,最核心的部分,运行在内核态,非内核功能运行在用户态
实现操作系统内核的程序就是内核程序
大内核
将操作系统的主要功能模块都作为系统内核,运行在核心态
优点:高性能
缺点:内核代码庞大,结构混乱, 难以维护
微内核
只把最基本的功能保留在内核
优点:内核功能很少,结构清晰,方便维护
缺点:需要频繁地在核心态和用户态之间转换,性能低
分层结构
最底层是硬件,最高层是用户接口,每层可调用更低一层
操作系统引导(开机过程)
ROM芯片,集成在电脑主板上,存储Basic,Input/Output System:基本输入输出系统的缩写,ROM引导程序,即自举程序
操作系统的发展
手工操作阶段
批处理阶段
- 单道批处理
- 多道批处理
不支持人机交互,当程序员提交程序之后,想要调试程序,不支持的
分时系统
允许人机交互,把一整片的时间分配给一个个小的时间片分给不同的用户,实现多用户可以使用同一个主机
实时系统
军工领域,对实时性要求很高
PC操作系统(个人操作系统)
强调操作系统的应用场景,而不是功能特性
分布式操作系统
一个操作系统管理一堆计算机硬件集群,传统的操作系统只是在管理单机
周转周期-一个进程从提交到完成的时间到周转周期
时间片-操作系统给每一个程序分配的一段时间
资源利用率-操作系统会尽可能的让处理器满负荷运行
分时操作系统是依次要轮流使用CPU,他不是用于批处理作业,主要用于交互性作业类型
加大时间片
分时系统加大时间片会延长系统响应时间
采用静态页式管理
静态页式管理-即基本分页存储管理,进程运行前就将所有页面调入内存
动态页式管理-即请求分页存储管理,当需要使用进程的某个页面时才将页面调入内存
代码可冲入--多个进程/现成共享一段代码,执行结果不会相互影响,这类代码可以很安全地被多个进程/线程共享
优先级+非抢占式调度算法
可以使优先级更高的进程尽快得到响应,但是低优先级的进程可能长时间得不到响应
多用户使用操作系统
当每个用户在登录时,操作系统会创建每个用户相对应的用户进程,操作系统为每个用户服务,实际上是为用户所对应的进程服务,一个用户也有可能会对应多个进程
批处理阶段在用户提交程序后是不允许有交互的引入时间片轮转的分时技术,允许多个用户与计算机直接交互
单道程序系统:内存中最多只有一道作业,作业之间是串行执行的,若当前作业等待I/O,则CPU等待
多道程序系统:内存中有多道作业,作业之间并发执行。若当前作业等待I/O,则CPU转而处理另一道作业
现代操作系统的基本特点:并发、共享、虚拟、异步,其中最基本、一定要实现并发和共享
操作系统结构
微内核操作系统结构
无结构操作系统
优点就是接口简单直接,系统效率高
缺点没有可读性,也不具备可维护性,一旦某一个过程除了问题,凡是与之存在调用关系的过程都要修改,之所以给调试和维护人员带来许多麻烦,有时为了修改操作系统重的错误还不如重新设计开发一个操作系统
模块化操作系统结构
模块与模块之间的关联要尽可能地少,而模块内部的关联要尽可能紧密,这样划分的模块具备独立性,从而减少模块之间复杂的调用关系,使得操作系统结构清晰:而模块内部各部分联系紧密,使得每个模块都具备独立的功能
分层式操作系统结构
层次结构就和盖楼一样,最底层为硬件最高层为用户层,每次只使用低层次的功能和服务
微内核操作系统结构
内存管理
处理机管理
进程管理
进程状态管理、进程调度和分派、创建与撤销进程控制块等
文件管理
I/O管理
存储器管理
存储器的空间分配和回收、内存信息保护程序、代码对换程序等
设备管理
缓冲区管理、设备分配和回收等
将操作系统划分为两部分:一部分是提供各种服务的一组服务器(进程),如用于提供进程管理的进程服务器,提供存储器管理的存储器服务器、提供文件管理的文件服务器,所有这些服务器(进程)都运行在用户态
操作系统的另一部分是微内核,用来处理客户和服务器之间的通信,即由内核来接受客户的请求,再将该请求送至相应的服务器,同时它也接受服务器的应答,并将此应答会送给请求客户
微内核的功能
微内核将最基础的功能和硬件有关的操作均放在内核中,其他各种服务器均与硬件无关,因此具有扩展性高,灵活性强,可靠性好和安全性高等优点
I/O指令、置终端屏蔽指令、清内存、键存储保护、设置时钟指令
中断、异常、陷入、比如缺页中断等
进程(线程)管理
系统调用,比如调用了设备驱动程序
用户内存地址的转换(逻辑->物理映射)
虚拟机
缺点
管理成本高
系统性能下降
虚拟机可以用软件实现,也可以用硬件实现,通常用软件
虚拟机中可以安装多个操作系统
虚拟机是运行在计算机中的一个应用进程
虚拟机文件封装在一个文件夹中,并存储在数据存储器中
用户态/内核态 详情
发生位置 | 处理位置 | |
---|---|---|
中断 | 用户态/内核态 | 内核态 |
异常 | 用户态/内核态 | 内核态 |
缺页 | 用户态/内核态 | 内核态 |
系统调用 | 用户态 | 内核态 |
进程创建 | 用户态/内核态 | 内核态 |
进程切换 | 内核态 | 内核态 |
进程调度 | 内核态 | 内核态 |
用户态向内核态的转换
系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,而系统调用的机制其核心还是使用率操作系统为用户特别开放的一个中断来实现
异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常
外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换
大内核 | 微内核 | |
---|---|---|
复杂性 | 更高 | 更低👍🏻 |
可维护性 | 更低 | 更高👍🏻 |
可靠性(稳定性) | 更低 | 更高👍🏻 |
可移植性 | 更差 | 更好👍🏻 |
可扩展性 | 更差 | 更好👍🏻 |
占用内存空间 | 更多 | 更少👍🏻 |
性能(效率) | 更多 | 更少👍🏻 |
性能(效率) | 更高👍🏻 | 更低 |
用户态、内核态切换开销 | 更低👍🏻 | 更高 |
电脑启动的流程
第一段要执行的程序为,计算机开机的时候CPU首先是要去执行ROM里面的一段程序,这段程序为ROM引导程序,即自举程序
第二段要执行的程序存储在磁盘的第一个扇区当中,在磁盘的第一个扇区被称为(主引导记录MBR)其中包含一个程序 磁盘引导程序,还包含了一个数据结构,磁盘分区表,通过这个程序和磁盘分区表,我们就知道操作系统安装在哪一个分区当中,安装了操作系统的分析我们被称为活动分区,CPU把主引导记录读入主存,然后执行磁盘引导程序,cpu根据磁盘分区表确定活动分区
第三步要执行的就是C 这个分区的第一个扇区,这个扇区存储的数据被称为引导记录,其中包含了一个程序叫分区引导程序,最后一步CPU会把根目录当中的活动分区中的操作系统引导程序读入内存,又成为启动管理器,又称为操作系统初始化程序