目录
1.操作系统的基本概念
1.1.操作系统的概念
1.操作系统控制和管理整个计算机系统的软件和硬件资源,并合理进行工作调度和资源分配(操作系统是系统资源的管理者,即处理机管理、存储器管理、文件管理和设备管理)
2.操作系统提供给用户和其他软件方便的接口和环境(向上层提供服务,上层即用户和软件;操作系统屏蔽底层硬件细节,即用户在使用的时候无需关心底层如何实现功能)
①②直接给用户使用,③给软件/程序员使用
①命令接口:联机命令接口(交互式命令接口)——用户说一句,系统做一句;脱机命令接口(批处理用户接口)——用户说一堆,系统做一堆
②图形用户接口(GUI)
③程序接口:在程序中进行系统调用(广义指令)使用程序接口。用户不能直接使用程序接口,只能通过程序代码间接使用程序接口
3.操作系统是计算机系统中最基本的系统软件(操作系统是一种软件,最接近硬件的软件)
操作系统需要实现对硬件机器的扩展(操作系统将CPU、内存等硬件合理组织,使得它们能实现更多功能)
1.2.操作系统的特征
1.并发:两个或者多个事件在同一时间间隔内发生(宏观上同时发生,微观上交替发生)
(区别于并行:两个或者多个事件在同一时间内同时发生)
单核CPU同一时刻只能进行一个任务,程序只能并发运行
多核CPU同一时刻可以进行多个任务,程序可以并行运行
2.共享:即资源共享。系统中的资源可供多个并发执行的进程共同使用
①互斥共享:一个时间段内只允许一个进程访问该资源
②同时共享:一个时间段内允许多个进程“同时”访问该资源(宏观同时,微观交替)
3.虚拟:一个物理上的实体变为若干个逻辑上的对应物
①时分复用:虚拟处理器(处理机在各个微小的时间内交替为各个进程服务))
②空分复用:虚拟存储器
4.异步:在多道程序环境下,以不可预知的速度向前推进(原因:资源有限)
2.操作系统的发展和分类
1.批处理阶段
①单道批处理系统:引入脱机输入/输出技术,并用监督程序(操作系统的雏形)负责控制作业的输入和输出
缺点:
内存中只能有一道程序运行(串行执行程序)
CPU需要大量时间等待I/O完成
②多道批处理系统:内存中存入多个程序,并且支持它们并发运行(共享资源)
缺点:没有人机交互功能(无法调试/输入参数)
2.分时操作系统:以时间片为单位轮流为用户/作业服务(可以进行人机交互)
用户感觉上独占计算机,实际共享计算机
缺点:完全公平(基于时间片)——不能优先处理紧急任务
3.实时操作系统:可以优先处理紧急任务
①硬实时:必须绝对严格在特定时间内完成
②软实时:可以偶尔违反时间规定
3.操作系统运行环境
3.1.处理器运行模式
1.应用程序只能使用非特权指令
2.特权指令只能由操作系统内核使用
3.CPU可以判断当前指令为特权指令/非特权指令:通过PSW标志位标记当前CPU处于何种状态
内核态(管态):正在运行的是内核程序,可以执行特权指令
用户态(目态):正在执行的是应用程序,只能执行非特权指令
4.内核态→用户态:执行一条特权指令——修改PSW标志位为用户态(操作系统主动让出CPU使用权)
5.用户态→内核态:由中断引发,硬件自动完成变态过程,操作系统强行夺回CPU使用权(停止运行当前程序,转而运行处理中断信号的内核程序)
3.2.中断和异常
中断是操作系统内核夺回CPU使用权的唯一途径(用户态→内核态)
3.2.1.内中断(异常)
与当前执行的指令有关,中断信号来源于CPU内部
①终止(由致命错误引起,内核无法修复,并且不会交还CPU使用权,而是直接终止应用程序):用户态下执行特权指令、除法指令除数为0
②故障(错误条件引起,内核程序修复后CPU,使用权交还给应用程序):缺页
③陷入(程序故意引发):应用程序请求系统内核服务,执行陷入指令(陷入指令并非特权指令,且需要在用户态下执行,系统调用通过陷入指令完成)
3.2.2.外中断(中断)
与当前执行的指令无关,中断信号来源于CPU外部
每一条指令执行结束时,CPU都会检查是否有外中断信号(中断周期)
①时钟中断——由时钟部件发来的中断信号(两个应用程序可以通过时钟中断的方式并发运行)
②I/O中断请求(例:打印机打印完成后,会向CPU发送中断信号)
3.2.3.中断机制的基本原理
1.不同类型的中断信号,需要不同的中断处理程序。因此,CPU检测到中断信号后,会根据中断信号的类型查询中断向量表
2.中断处理程序需要在内核态下执行
3.3.系统调用
特权指令、访管指令、陷入指令、广义指令--操作系统 - 哔哩哔哩
1.应用程序可以通过系统调用请求获得操作系统内核的服务(程序接口由一组系统调用组成)
2.系统调用和库函数的区别:
3.系统调用的应用场景:与共享资源相关的场景下必须使用系统调用功能让操作系统的内核合理进行资源分配(例如:两个应用程序并发使用打印机,如果不能够进行合理分配,那么将会导致A打印一段B打印一段)
4.系统调用的分类:
5.系统调用的过程:
①执行传参指令(用户态):在用户态下,通过若干传参指令将若干个参数分别传入寄存器中(参数的作用是指明应用程序需要系统调用的类型),操作系统根据参数提供对应的系统调用服务
②传参指令执行结束后,执行陷入指令(用户态→内核态):陷入指令引发内中断,CPU暂停执行应用程序,转而执行中断服务程序(陷入指令对应的中断服务程序为系统调用的入口程序)
③执行对应的系统调用服务程序(内核态):执行中断服务程序的过程中,根据寄存器中的参数执行对应的系统调用处理程序
④系统调用执行完毕(内核态→用户态)
6.系统调用的注意点:
①陷入指令并非特权指令,且需要在用户态下执行
②陷入指令执行后将会发出一个内中断,随后CPU由用户态→内核态
③用户态下发出系统调用请求,内核态下处理系统调用请求
④陷入指令 = trap = 访管指令
4.操作系统体系结构
1.操作系统分为内核(接近硬件,下层)和非内核(接近软件,上层)
①非内核:GUI等
②内核:操作系统最核心的部分,由内核程序实现内核功能
2.大内核(宏内核):既含有时钟管理、中断处理和原语等与硬件关联紧密的模块;也含有对数据结构进行操作的功能(进程管理、存储器管理和设备管理等)
①性能高:模块间可以直接相互调用(无需使用消息传递的方式)
②结构混乱、难以维护:内核内的功能多
③内核中某个功能出错,就可能导致整个系统崩溃:内核功能联系紧密,相互依赖
3.微内核:仅含有时钟管理、中断处理和原语等与硬件关联紧密的模块
①效率低:各模块相互调用需要通过消息传递的方式;可能需要进行多次CPU状态的转换
②功能少,易于维护:仅含有和硬件联系紧密的模块
③内核中某个功能出错,不会导致整个系统崩溃
4.分层结构:每层仅能调用比自己更低一层的功能(3调用2,2调用1),且不能跨层调用
缺点:
①难以合理定义各层边界:低层在实际情况下可能会用到高层的功能
②效率低:只能逐层进行调用(5→4→3→2→1→0)
优点:
①便于调试和验证:由于每层仅能调用比自己更低一层的功能,因此,基于下一层已经过调试的条件下,仅需对本层进行调试
②易扩充和易维护:层与层之间的接口已经确定,仅需对应上下层的接口进行设定即可完成扩展
5.模块化:内核被划分为多个模块,即内核 = 主模块(内存、进程等等) + 可加载内核模块(驱动等)
优点:
①逻辑清晰、易于维护:每个模块的功能不同(内存、进程等)
②可多模块同时进行开发:确定某个模块对外的接口后,其他模块可以使用该接口
③支持动态加载新的内核模块:添加新模块功能无需对整个内核进行重新编译
④无需消息传递就可以直接调用其他模块的功能,效率高(微内核需要使用消息传递的方式)
缺点:
①模块间的接口定义未必合理:由于模块间可以相互调用,因此,在实际情况下,模块已定义的接口未必能满足其他接口调用的需要
②难以调试和验证:调试过程中难以判断是自身出问题还是调用其他模块导致问题
6.外核:内核负责进程调度和通信;外核负责给内核分配未经抽象(使得内核能够明确知道自己申请的空间在硬盘/内存中的实际位置)的资源(例硬盘和内存的存储空间)
①用户进程可以灵活使用硬件资源
②不需要对硬件资源进行映射
5.操作系统的引导
1.硬件自检:检查是否插内存条/磁盘等
2.扫描分区表:找到活动分区
3.分区表:一种数据结构,记录每个分区的大小和地址范围
4.安装操作系统的分区为活动分区,并使用其启动操作系统,即图中C盘
5.计算机主存有RAM和ROM组成,BIOS(基本输入/输出系统)存放在ROM中,其中最重要的是ROM引导程序(自举程序)
6.RAM一经关机/断电,其中数据就丢失,而ROM不会,根据这一特性,可以令计算机在开机时固定的去ROM的某一区域中启动自举程序:ROM引导程序(自举程序)的作用是指示CPU将磁盘的主引导记录读入内存(即将磁盘引导程序和分区表读入内存)
7.CPU执行主存中的磁盘引导程序MBR → 磁盘引导程序根据分区表判断C盘存储的位置 → 读入C盘的第一部分数据,即引导记录PBR → CPU执行引导记录程序PBR → 找到启动管理器(通常存放在根目录下的某个位置)→ 启动启动管理程序(操作系统初始化程序) → CPU执行启动管理程序 → 启动管理程序完成初始化等一系列工作
8.硬件自检:即硬件是否有问题,例如有无插磁盘/内存条
6.虚拟机