本文将根据个人学习进度对b站王道408课程以及题目考察的知识点进行整合,视频中详细的导图将会直接复用,并且将会对一些重点知识进行扩展以及一些思维导图的补充,(目前第三章内容正在整理中......由于第三章内容繁多且都是重点,习题量不足,为了保证质量暂且搁置段时间先往后推进,)
一:计算机系统概述
1.1操作系统概念和功能
①:操作系统概念和功能
补充 :
|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 有关系统调用应该注意的知识点 ||
| 1:系统调用的目的 | 请求系统的服务 |
| 2:区别系统调用和系统调用的调用 | 1. 系统调用 :这是指操作系统提供的接口,允许用户程序请求内核级功能。例如,open()
、read()
、write()
等函数都是系统调用,它们直接与操作系统内核进行交互。(一定是在内核态) 2. 系统调用的调用 :这通常是指用户程序在代码中实际执行系统调用的过程。当用户程序调用某个系统调用函数时,这就是"系统调用的调用"。简单来说,它指的是在用户空间代码中执行某个系统调用的行为。(可能在内额) |
②:操作系统的特征
1.2操作系统的发展
Ⅰ:了解各系统的优缺点,以及诞生的主要目标是什么
Ⅱ:优缺点对比
1.3操作系统的的运行机制
①:中断和异常
Ⅰ:有关中断的扩展
|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 有关中断的知识补充 ||
| 常见的内中断 | 非法操作码 缺页 除0 运算溢出 |
| 中断向量表 | 中断向量表用于帮助CPU自检,在OS初始化过程中由BIOS(硬件)生成,可由OS进行扩展和初始化 |
| 中断与内核态联系 | 使操作系统由++用户态转内核态的过程都是由硬件完成++ 的,中断只是引发该操作的原因之一,当程序出现"中断异常"硬件将操作系统转为内核态后,执行对应的中断程序。因此:++中断处理程序属于OS程序,运行在核心态++,但是被中断程序可以是用户程序 |
| 外部中断 | 1. 硬件中断:通常由外部设备发起,常见的硬件中断类型包括: * 定时器(时钟)中断:由系统定时器产生,用于操作系统调度等操作。 * I/O中断:外部设备(如键盘、鼠标、网络适配器、磁盘驱动器等)发出的中断信号,表示设备准备好进行数据传输。 * 电源管理中断:用于处理电源状态的变化,比如休眠或唤醒。 2. 外部信号中断:来自于外部信号源的中断,如: * 按键中断:当按下某键时,发送中断信号给处理器。 * 外部传感器中断:如温度传感器、光传感器等,产生中断以通知处理器。 3. 异常中断:有些外部条件(如过载、故障)会引发异常中断,应用程序需要相应的处理。 4. 网络中断:网络接口卡(NIC)接收到数据包时会产生的中断。 |
| 外部中断与OS的联系 | 1. 中断处理机制:外部中断是由外部设备(如键盘、鼠标、网络设备等)产生的信号,用于通知CPU某个事件的发生。操作系统需要实现中断处理机制,来响应这些中断,并进行相应的处理。 2. 上下文切换 :当外部中断发生时,当前正在执行的程序会被挂起,操作系统会保存当前程序的上下文信息(++例如:通用寄存器,中断屏蔽字,PC由隐指令保存,TLB,PSW和Cache以及中断程序的中断点由硬件保存++),然后转而运行中断处理程序。处理完中断后,操作系统会恢复先前的程序状态,继续执行。这一过程称为上下文切换。 3. 设备驱动程序:外部中断通常与设备驱动程序相关联。当外设需要CPU的服务时,会产生中断请求,操作系统通过设备驱动程序来管理和响应这些中断,实现对硬件设备的控制。 4. 实时性与调度:外部中断的处理时间和优先级会影响操作系统的调度策略。在实时操作系统中,外部中断可能需要立即响应,以保证系统的实时性能。 5. 资源管理 :++操作系统需要协调和管理多个外部设备的中断请求,确保系统的稳定性和数据的一致性++。例如,同一时间内可能会有多个设备产生中断,操作系统需要合理调度这些中断的处理顺序。 总结来说,++外部中断是操作系统与硬件设备之间的桥梁,通过高效的中断处理机制,操作系统可以及时响应外部事件++,保障系统的正常运行和各个程序的有效执行。 |
Ⅱ:中断程序与子程序比较
比较点 | 中断程序 | 子程序调用 |
---|---|---|
触发机制 | 由硬件设备或系统事件自动触发 | 由程序员显式调用 |
控制流 | 会中断当前执行的程序,转而执行中断处理 | 在程序中显式地调用,并在返回后继续执行 |
优先级 | 通常具有较高的优先级,需要快速响应 | 优先级取决于程序的结构和逻辑 |
执行环境 | 通常处于内核模式或特权级别执行 | 通常在用户模式下执行 |
保存状态 | 中断时需要保存当前执行上下文,以便恢复 | 函数调用时保存返回地址和局部变量 |
调用返回 | 中断处理完成后,需要恢复到之前的状态 | 子程序完成后,通过返回指令返回调用点 |
目的 | 处理异步事件、硬件信号、异常等 | 代码复用、模块化、逻辑分离 |
执行次数 | 通常是偶发的,取决于外部事件的发生 | 可以多次调用,取决于程序逻辑 |
运行时影响 | 可能影响整个系统的响应和性能 | 只影响调用该子程序的程序逻辑 |
程序计数器(PC) | 需要保护PC和PSW内容,由中断隐指令完成 | 需要保护PC内容,由CALL指令完成 |
②:系统调用
Ⅰ:系统调用的调用与子程序调用比较
表格
特性 | 子程序调用 | 系统调用 |
---|---|---|
定义 | 在程序内部调用的模块或函数 | 程序请求操作系统提供服务的机制 |
执行环境 | 用户空间 | 用户空间与内核空间之间 |
性能 | 执行速度较快 | 执行速度较慢 |
安全性 | 相对较高 | 较低,可能导致安全漏洞 |
参数传递 | 通过栈、寄存器、全局变量等方式传递 | 通常通过特定寄存器或内存缓冲区 |
使用场景 | 代码重用、模块化设计 | 获取系统资源,如文件、进程管理等 |
上下文切换 | 无需(同一进程内调用) | 需要(从用户态切换到内核态) |
返回值处理 | 直接返回 | 通过特定机制返回(如errno) |
1.4操作系统体系结构
①:宏内核与微内核的对比
-
定义与架构:
- 宏内核:所有操作系统服务(如进程管理、内存管理、设备驱动等)都在内核空间中运行,提供高效的系统调用和资源管理。
- 微内核:仅保留最基本的功能(如进程间通信、基本的内存管理),其他服务(如文件系统、网络协议等)在用户空间中运行。
-
优缺点对比:
- 宏内核 :
- 优点:性能较高,系统调用开销小,适合高性能需求的环境。
- 缺点:内核复杂度高,易出现稳定性和安全性问题。
- 微内核 :
- 优点:内核简单,易于维护和扩展,系统稳定性和安全性较高。
- 缺点:性能较低,用户空间与内核空间的频繁切换可能导致开销增加。
- 宏内核 :
-
应用场景:
- 宏内核通常用于需要高性能和低延迟的系统,如实时操作系统。
- 微内核适合于需要高可靠性和安全性的系统,如嵌入式系统和分布式系统。
-
实例:
- 常见的宏内核操作系统有Linux和Windows。
- 常见的微内核操作系统有Minix和QNX。
-
设计哲学:
- 宏内核强调高效的资源管理和快速的系统调用。
- 微内核则强调模块化和灵活性,允许不同服务独立运行
②:常见操作系统结构
|-----|-------------------------|
| 常见操作系统结构 ||
| 宏内核 | Windows IOS macoS Linux |
| 微内核 | 谷歌Fuchsia 华为鸿蒙OS |
③:各体系结构特征,优缺点对比
1.5操作系统引导
Ⅰ:操作系统引导概念:
操作系统引导(Booting)是指计算机从关闭状态或重启状态释放硬件并加载操作系统的过程。这个过程通常分为几个步骤,涉及硬件初始化、加载操作系统内核以及最终交接控制权给操作系统。
Ⅱ:磁盘数据
-
引导扇区(Boot Sector):
- BIOS引导扇区(MBR):通常位于硬盘的第一个扇区,负责引导磁盘上的操作系统。MBR包含了引导程序及分区表。
- GPT引导:在使用GUID分区表(GPT)时,系统会有一个EFI系统分区(ESP),其中包含EFI引导程序。
-
操作系统内核:
- 操作系统的核心文件,负责管理硬件资源和提供接口给应用程序。这个内核文件通常位于某个特定的目录下(如 /boot、C:\Windows\System32 等)。
-
引导配置文件:
- 包含引导参数和设置,比如 GRUB 和 LILO 的配置文件。在 Windows 系统中,有引导管理器(Boot Manager,通常为 BCD 文件)来配置引导选项。
-
驱动程序:
- 磁盘上还存放着硬件驱动程序,它们在引导过程中被加载,以便更好地管理外部设备。
++Ⅲ:引导过程++
-
开机自检(POST):
- 开机时,BIOS(或UEFI)会进行自检,检测计算机硬件是否正常,例如内存、硬盘、显卡等。
-
加载引导程序:
- 完成自检后,BIOS会查找引导设备(通常是硬盘、USB或CD/DVD),读取引导扇区(MBR或GPT)中的引导程序,并将其加载到内存中。
-
引导加载程序的执行:
- MBR引导程序会找到并加载操作系统的引导加载器(如GRUB、LILO、Windows Boot Manager等)。这些引导加载器会根据配置文件,引导特定的操作系统内核。
-
加载操作系统内核:
- 引导加载器开始加载操作系统的内核文件到内存,同时调用相应的初始化程序。这一阶段还可能会加载必要的驱动程序。
-
硬件初始化:
- 内核启动后会进行进一步的硬件初始化,包括设置进程管理、内存管理、文件系统和设备驱动等。
-
用户空间的启动:
- 完成所有初始化后,内核会启动第一个用户进程(在Linux中通常是
init
或systemd
,在Windows中是smss.exe
),此进程将负责启动系统中的其他服务和用户界面。
- 完成所有初始化后,内核会启动第一个用户进程(在Linux中通常是
1.6虚拟机
Ⅰ:了解两类虚拟机区别
二:进程与线程
2.1:进程
①:进程的概念,组成,特征
2.2:调度
2.3:进程同步和互斥
2.4:死锁
①:死锁的概念
②:死锁的处理策略
1:静态策略 预防死锁
重点:关于死锁定理定位是用于处理检测死锁的方法。
此处是根据死锁定理,预防任意一个条件以达到无法发生死锁的目的
|-----------|--------------------------------------|----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 死锁定理 ||||
| 互斥条件 | 对于必须使用的资源的争抢才会导致死锁 | SPOOLing技术将独占设备改造为逻辑上共享资源 (例: 给打印机添加输出队列,将进程请求挂载到队列上,依次处理,在逻辑上看各个进程都申请到打印资源,从而进行后续操作) ||
| 互斥条件 | 对于必须使用的资源的争抢才会导致死锁 | 缺点:可改造的资源有限,不是所有互斥资源都能共享 ||
| 不可剥夺 | 进程获得的资源在未使用完之前,不可被剥夺,只能主动释放 | 方案一:当一个进程申请新的资源得不到满足时,需要将已有资源全部释放,待以后需要重新申请 | 缺点:(长时间得不到某个资源可能会导致饥饿) |
| 不可剥夺 | 进程获得的资源在未使用完之前,不可被剥夺,只能主动释放 | 方案二:当某个进程需要资源被其他资源占用,由OS协助,强行剥夺该资源 | 缺点:(反复申请会增加开销, 释放资源可能会导致前一阶段的工作失效,实现难度大,只适用于易保存和恢复状态的资源) |
| 请求并保持 | 进程已拥有至少一个资源,但新的资源请求不通过且已拥有的资源不释放 | 静态分配方法(一次性分配策略):运行前一次性申请完全部资源才运行 | 缺点: 1:各个资源需要运行的时间不一,被申请后可能长时间处于空闲状态,降低系统资源利用率和吞吐量 2:如果有大量单资源需求的进程,那么多资源需要的进程很容易导致饥饿 |
| 循环等待 | 存在一个进程资源的循环等待链 | 顺序资源分配法:给资源按序分配序号,每个进程只有先申请到所需的小序号资源,才能申请大序号资源 | 缺点: 1:新增资源需要重新分配编号 2:实际应用顺序与编号递增顺序不一致,可能会导致资源浪费(例如:扫描仪为3号资源,打印机为1号资源,某个进程需要先使用扫描仪再使用打印机,那么在申请到扫描仪之前,打印机一直处于空闲且被占用的状态) 3:必须按照规定次序申请资源,用户编程麻烦(代码逻辑要先申请扫描仪后打印机,不同系统的资源编号可能导致不同的顺序) |
2:动态策略: 避免死锁
Ⅰ: 安全序列和安全态:
进程按照特定顺序给进程分配资源,就不会发生死锁,则该顺序组成的序列称为安全序列
例 {P8 P1 P9 ...... Pn}
当前状态能找到一个安全序列就是安全态,反之为不安全态(此状态可能 会发生****死锁)
Ⅱ:银行家算法
核心思想:根据此次资源分配是否会导致系统进入不安全态来决定是否进行此次资源分配
有关银行家算法应该注意的知识点
++注1 : 有m个同类资源,n个进程,每个进程最多申请k个资源时采用银行家算法分配资源,++
++只要保证最大需求量小于等于m就一定有一个安全序列,保证各进程最大需求量之和小于m +++ ++n个就不会发生死锁(极端情况n - 1个进程申请了1个资源,1个进程申请了m个资源)++
++注2: 银行家算法虽然会通过检测是否存在安全序列来判断申请资源的请求是否合法,但是 安全序列并不是唯一的,也不是固定的,它只是一种可执行方案,而非一种必须遵循的规 则,因此它不需要限制用户申请资源的顺序且它不能用于判断系统是否进入死锁状态·++
3:死锁的检测和解除 - 允许死锁发生
Ⅰ:死锁的解除
|------------------|-----------------------------|---------------------------|
| 死锁的解除 |||
| 资源剥夺法 | 挂起部分死锁进程,剥夺其资源分配给其他死锁进程 | 会导致饥饿 |
| 撤销进程法(终止进程法) | 强制撤销部分甚至全部死锁进程,并剥夺其资源 | 导致先前工作功亏一篑,代价大 |
| 进程回退法 | 让一个或多个进程回退到可以避免死锁的时间节点 | 需要OS记录进程历史信息设置还原点,难度大 |
4:死锁的解决策略总结
|-------------|--------------------------------------------------------------------------------------------------------------|
| 预防死锁的策略 | 共享化资源 |
| 预防死锁的策略 | 资源全分配策略:在请求资源时,任务必须一次性请求并获取所需的所有资源,否则不分配任何资源 |
| 预防死锁的策略 | **优先级策略:**为资源分配设定优先级,确保高优先级的进程能够获得其所需资源,从而降低低优先级进程引发死锁的可能性。 |
| 预防死锁的策略 | 序列化:对于资源的请求和释放,确保进程按照一定顺序请求资源。 |
| 避免死锁的策略 | 银行家算法:根据进程的最大需求和可用资源判断资源分配是否会导致安全状态,进而避免不安全的资源分配 |
| 避免死锁的策略 | 资源预分配法:要求进程在开始执行之前申请所需的全部资源,没有足够的资源时,进程无法开始执行 |
| 避免死锁的策略 | 总资源分配顺序:对资源进行全局排序,所有进程按照固定顺序请求资源,从而保障没有循环等待发生。 |
| 检测死锁的策略 | 资源分配图法:资源分配图是一个有向图,用于表示某时刻系统资源和进程之间的状态,其中,++有向边包括进程指向资源的申请边,资源指向进程的分配边,圆圈节点表示进程,矩形框表示资源,其中的圆点表示资源数++ |
| 检测死锁的策略 | 时间戳法:为每个进程分配一个时间戳,基于进程的等待和持有资源的时间,判断是否存在死锁。 |
| 检测死锁的策略 | 死锁检测算法:定期运行死锁检测算法,检查当前资源分配情况,识别系统中的死锁并采取相应的措施,例如回收被某些进程持有的资源 |
5:死锁中的数据结构
Ⅰ:资源有向图
- 定义 :资源有向图是一种图形表示方式,其中节点表示进程和资源,边表示资源的请求和分配。
- 从资源节点到进程节点的边表示进程对该资源的请求。
- 从进程节点到资源节点的边表示资源被某个进程持有。
- 用途:资源有向图用于检测死锁。一旦图中存在环路,就说明系统可能已发生死锁。
Ⅱ:前驱图(也称用于数据流分析的前驱图)
- 定义:前驱图用于表示某一进程的状态和依赖关系。通常在操作系统中,前驱图的节点表示进程的状态,边表示状态之间的转换。
- 用途:在避免死锁和资源调度中,可以使用前驱图来跟踪进程的状态,确保进程之间的依赖关系不会导致循环等待。
Ⅲ:安全图
- 定义:安全图用于表示系统的安全状态,即可以成功完成的进程序列。通常在银行家算法中使用。
- 用途:确保在给定的资源分配下,系统始终处于安全状态,如果系统进入不安全状态,则可能会发生死锁。
③:死锁中应当注意知识点
|---------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 使用信号量进行控制的方法能确保互斥访问,但不能完全避免死锁 | 最简单的例子,A B 进程都需要C D资源A - C , B - D;两者都被阻塞 |
| ###### Ⅰ:哲学家问题解决死锁的破坏条件 | 1. 控制可拿筷子的人数:循环等待 2. 控制拿筷子顺序:循坏等待 3. **同时检查2只筷子:**保持并等待条件 |
| ###### Ⅱ:区分循坏等待和保持并等待条件 | 1. 互斥条件:至少有一个资源必须处于非共享状态,即某个资源(在这个案例中是筷子)只能被一个哲学家使用。 2. 保持并等待条件:一个哲学家持有至少一根筷子(资源),但正在等待另一根筷子。这意味着他并不释放已经持有的资源。 3. 不抢占条件:已经分配给哲学家的资源(筷子)在他们完成使用前,不会被其他哲学家抢占。 4. 循环等待条件:存在一个哲学家形成一个循环,彼此间都在等待对方持有的筷子 |
| ###### Ⅱ:区分循坏等待和保持并等待条件 | ###### 1. 判断是否破坏了循环等待条件 * 破坏循环等待 :要解决循环等待,可以通过对资源的分配顺序进行调整或规定资源请求的优先级。具体方法包括: * 资源请求顺序:对资源进行排序,要求所有进程以固定的顺序请求资源。这样可以防止形成环路。 * 撤销某些进程:直接终止某些进程,使得资源的占用关系不再形成环路。 * 如何判断:检查解决策略是否改变了资源的分配方式,是否确保资源总是被请求而不会形成环路。如果策略明确规定了资源的请求顺序或限制了进程的资源请求,那么这就是破坏了循环等待条件。 ###### 2. 判断是否破坏了保持并等待条件 * 破坏保持并等待:要破坏保持并等待条件,通常的做法是: * 主动释放资源:在进程请求新资源时,强制其释放当前持有的资源。这意味着一个进程在请求其他资源时,如果已经持有资源,就必须首先释放它们。 * 非持久性分配:要求所有资源在请求时必须一次性申请到所有需要的资源,进程不能在持有某些资源的情况下再请求新的资源。 * 如何判断:检查解决策略是否要求进程在请求新的资源之前释放已持有的所有资源。如果是,那么该策略就破坏了保持并等待条件。 |
| ###### Ⅲ:进程的执行严格遵循优先级并不能破坏死锁定理的条件 | * 例高优先进程用完时间片,下处理机后,低优先级进程将高优先级进程所需资源占用 |
| ###### Ⅳ:信号量在特殊情况下避免死锁的发生 | 在单行线问题中,由于信号量的控制,双方进程无法同时进入行道中,发生在道中相遇,都无法通过的情况,此时无死锁发生 |
三:内存管理
3.1:内存管理方式
①:内存的基础知识
②:内存管理概念
③:覆盖与交换
Ⅰ:覆盖技术
Ⅱ:交换技术
Ⅲ:覆盖与交换的区别(理解概念选择题常考)
④:内存空间分配与回收
Ⅰ:连续分配管理方式
1:单一连续分配方式
2:固定分区分配
3:动态分区分配
Ⅱ:非连续分配管理方式
⑤:动态分区分配算法
1:首次适应算法
2:最佳适应算法
3:最坏适应算法
4:邻近适应算法
5:动态分区分配算法对比
⑥:基本分页存储管理概念
⑦:基本地址变换机构
⑧:具有块表的地址变换机构
⑨:两级页表
⑩:基本分段存储管理
⑪:段页式管理方式
四:文件管理
4.1文件系统基础
文件功能和目标
文件属性
文件的逻辑结构
①无结构文件
无明显的结构特性,非重点讨论对象