一、 操作系统的基本功能
-
进程管理:进程是计算机中最基本的资源,操作系统负责进程的创建、销毁、调度和同步。
-
内存管理:操作系统负责分配和管理内存资源,保证程序能够正常运行。
-
文件系统管理:操作系统负责文件的创建、管理和访问,提供文件的读写接口。
-
设备管理:操作系统负责管理设备的资源,包括设备驱动程序的加载、设备资源的分配和管理。
-
安全管理:操作系统对系统中的资源进行安全控制,包括用户身份认证、访问权限控制、进程隔离等。
-
网络管理:操作系统负责计算机的网络连接、数据传输和路由管理。
二、 内存管理
2.1 概念
1.负责内存空间的分配与回收
2.提供某种技术(虚拟存储或自动覆盖)从逻辑.上对内存空间进行扩充。
3.提供地址转换功能,负责程序的逻辑地址与物理地址的转换
4.提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰
2.2 地址转换
概念:转换逻辑地址和物理地址
方法
- 绝对装入
编译时产生绝对地址 - 可重定位装入
装入时进行地址转换 - 动态装入
运行时进行地址转换
2.3 内存保护
在 CPU 设置上下线寄存器,管理地址上下界,防止越界。使用 重定位寄存器(存了最小的物理地址)和 界地址寄存器(存了最大的逻辑地址)防止地址越界。
三、 内存分配
3.1 连续分配存储
3.1.1 单一连续分配
** 基本思想: ** 内存只分系统与用户区
只能用于单用户,单任务的 OS 中
软件简单,硬件要求低
3.1.2 固定分区分配
基本思想:内存分成数个连续区域储存程序
建立分区使用表,按大小排序
3.1.3 动态分区分配
设立空闲分区表与空闲分区链,按照设定的算法进行分配和回收。回收时会自动和旁边的空闲分区合并地址,不相邻才会生成新的表项。
算法:
- 首次适应算法
按分区先后从头查找到合适的分区 - 循环首次适应算法
从上次分配的分区开始查找 - 最佳适应算法
找到大小和所需相差最小的分区 - 最坏适应算法
挑最大的分区 - 快速适应算法
根据容量设立空闲分区表,进行管理调用
3.1.4 伙伴系统
分区划分:大小均为 2 的 k 次幂
根据内存大小判断使用哪种分区。若不存在空闲分区,则在大一级的分区中寻找空闲分区,找到后将其分割,划定恰当分区存储。回收时将同等大小的分区合并成大一级的分区再回收。
3.1.5 哈希算法分配
根据空闲分区大小计算哈希函数转换成空闲分区链表
3.1.6 可重定位分区
将每个已分配分区中的空闲内存通过紧凑处理成一个大块空闲分区
优点:提高内存利用率
缺点:降低了程序的执行速度,增加了系统开销
3.2 离散分配
3.2.1 基本概念
通过地址变换实现。并且设置了多级页表进行缓存,这些查询能力是基于能并行查询的寄存器实现的。
3.2.2 分页存储
基本概念
- 页面:将进程的逻辑地址分成数个大小相等的片
- 物理块:内存分成和页面相等大小的存储块
- 地址结构:页号 + 偏移量
- 页表:实现逻辑页号向物理块号的转变
优点:
- 页内碎片小,内存利用高
- 实现了离散分配,消除了程序浮动
- 便于存储访问,有利于代码共享
缺点:
- 需要专门的硬件支持,尤其是快表
- 内存访问效率下降
- 不支持动态链接
3.2.3 分段存储
将地址空间分成若干段,每段都有自己的段号+段内地址。
易于实现信息(段)共享,若干个进程可共享一个分段。
3.2.4 分段和分页的区别
信息单位
分页:物理单位,满足系统管理需要
分段:逻辑单位,满足用户的需要
大小
分页:大小固定,系统决定,由硬件实现
分段:段长不固定,程序决定,由编译程序划分
地址空间
分页:一维,线性地址空间
分段:二维,地址由段名和段内地址决定
共享和动态链接
分页:不易实现
分段:很易
3.2.5 最终解决方案:段页式存储
先将程序分成若干个段,再将段分成若干个页。
地址 = 段号 + 段内页号 + 页内地址。
物理块的分配策略
- 固定分配局部置换:分配完成则整个运行不再改变
- 可变分配全局置换:分配部分物理块,并保持一个空闲物理块队列用于置换
- 可变分配局部置换:发现缺页时,只允许从该进程中调出一页。且进程分配的物理块数随缺页频数增减
页面置换算法
- 最佳置换算法(OPR)
- 淘汰策略
以后永不使用的页面
最长时间内不被访问的页面
- 淘汰策略
- 先进先出(FIFO)
- 淘汰策略:淘汰最先进入的页面
- 特点:
实现简单
进程实际运行的规律不相适应
- 最近最久未使用(LRU)
需要寄存器寄存访问情况
要消耗硬件资源 - 最少使用(LFU)
- 页面缓冲算法(PBA)
淘汰的页被换入
空闲页面链表:物理块挂载到链表末尾
已修改页面链表:当链表中页面到达一定数量后集中写回磁盘
内存颠簸
- 概念
缺页中断更换掉的页面是很快又要访问的页面,导致缺页中断迅速的再次发生,急剧的降低效率。 - 解决方案
替换策略不当则修改替换算法
运行程序过多则设法减少程序数量
段页式分配取一次数据要访问几次内存
三次以上
第一次是从段表地址寄存器中得到段表的初始地址后再访问段表,从而得到内存中相应段的页表地址
第二次是访问页表以获取要访问的物理地址
第三次我们才能访问我们真正需要访问的物理单元。
四、虚拟寄存器
4.1概念
在磁盘中划出一个区域,用于存放正在运行的程序中当做内存使用。运行不到的部分,需要运行时再调入。
具有调入和置换功能的逻辑存储器系统,逻辑容量为内存与外存容量和。运行速度接近内存,存储成本接近于外存
4.2 作用
- 虚拟内存:将主存视为一个在磁盘上的高速缓存使用。缓解物理内存不足的压力。
- 内存管理:给每个进程提供了一致的地址空间
- 内存保护:保护每个进程的地址空间不被其他进程破坏
4.3 生效的原因
程序执行时局限于某个部分,访问的存储空间也在某个区域中。程序中存在大量循环操作,地址访问不断重复在某个范围。所以,可以将这部分重复执行的程序放在指定位置,作为外置内存的存在。
4.4 特点
- 多次性:程序分多次调入内存运行
- 对换性:运行中进行调入调出,有效的提高了内存的利用率
- 虚拟性:逻辑上扩充了内存的容量(最重要的特征与目标)
4.5 实现方法
- 分页请求系统:
在分页基础上增加请求调页和页面置换功能
装入部分页面便会启动运行 - 分段请求系统:
在分段基础上增加请求调段和分段置换功能
五、作业调度
5.1 调度的种类
- 高级调度:作业调度
判断哪个后备作业能被调入内存运行。为其创建进程,分配资源,再插入就绪队列 - 中级调度:在虚拟存储器中引入,于内,外存对换区进行进程对换
- 低级调度:进程调度
决定就绪队列中哪个进程获得 CPU
主要功能:
保存处理机现场信息
按算法选取进程
分配处理机给进程
5.2 调度算法
- 先来先服务(FCFS)
较有利于长作业。有利于 CPU 繁忙的作业,不利于 I/O 繁忙的作业 - 短作业优先(SJF / SPF)
不利于长作业。没有考虑紧迫度。难以估计运行时间 - 优先权优先
照顾紧迫度高的作业
六、磁盘存储器
6.1 类型:
- 固定头磁盘:每条磁道都有一个磁头读写。可访问所有磁道,并行读写。
- 移动头磁盘:一个盘面只有一个磁头,只能串行读写,结构简单
6.2 访问策略
先来先服务FCFS
优点:公平,简单
缺点:未对寻道时间进行优化,搜索时间较长
最短寻道优先SSTF
优点:寻道时间最短
缺点:平均时间不一定最短,可能导致IO请求被处理太快
扫描算法SCAN
磁头单方向移动,到边缘后反向移动
又称电梯调度算法
消除了饥饿现象
循环扫描算法CSCAN
不再反向移动,而是回到起点重新移动
七、 中断
7.1 种类
外中断
CPU 指令以外的时间发生
如 IO 中断结束
内中断
即异常,CPU 内部事件引起的中断。如非法指令,地址越界。
内外区别则在于 CPU 内外事件引起
系统调用
用户在程序中调用操作系统提供的一些子功能
硬中断
硬件通过中断控制器触发
软中断
代码调用 INT 指令触发
7.2 处理方案
- 屏蔽中断:处理机处理中断时屏蔽其他中断请求
- 嵌套中断:处理有优先级,优先处理某些中断,处理完后再处理低级中断
八、 CPU
8.1状态种类
- 内核态:运行操作系统程序,操作硬件
- 用户态:运行用户程序
8.2 转化方法
- 用户到内核:中断,异常
- 内核到用户:设置程序状态字 PSW
8.3 区别
- 运行级别不同,用户态的运行特权级别最低,内核态的运行特权级别最高
- 用户态的程序不能直接访问操作系统的内核数据结构和程序。内核态可以,并有一些独特的指令。
- 用户态的内存空间和对象受限,所使用的处理器可被抢占。内核态可以访问所有的内存空间和对象,且使用的处理器不可抢占
九、 零拷贝
9.1 概念
零拷贝技术是一个思想,指的是指计算机执行操作时,CPU 不需要先将数据从某处内存复制到另一个特定区域。
3次数据拷贝、4次上下文切换。
9.2 实现方法
mmap
- DMA引擎传输数据到内核缓冲区(用户态->内核态)
- 此时内核缓冲区与用户缓冲区共享数据(内核态->用户态)
- 调用write方法,将用户缓冲区(共享)的数据拷贝到Socket缓冲区(用户态->内核态)
- 数据异步的从Socket缓冲区使用DMA引擎拷贝到网络协议引擎
- write方法返回(内核态->用户态)
优点:即使频繁调用,使用小块文件传输,效率也很高
缺点:不能很好的利用DMA方式,会比sendfile多消耗CPU,内存安全性控制复杂,需要避免JVM Crash问题。
sendFile
1. Linux2.1版本
拷贝数据时不经过用户态,直接将数据从内核缓冲区拷贝到Socket缓冲区。
涉及3次数据拷贝、3次上下文切换
流程:
- DMA引擎传输数据到内核缓冲区(用户态->内核态)
- 调动wirte方法直接从内核缓冲区进入socket(内核态)
- socket->网络协议栈
- wirte方法返回(内核态->用户态)
2.Linux2.4版本
直接从内核缓冲区拷贝到网络协议栈从而再一次减少了一次拷贝.
涉及2次数据拷贝、3次上下文切换
流程:
1.使用 DMA 引擎从文件拷贝到内核缓冲区
2. 从内核缓冲区将数据拷贝到网络协议栈;内核缓存区只会拷贝一些 offset 和 length 信息到 SocketBuffer,基本无消耗。
3. socket->网络协议栈文章来源:https://www.toymoban.com/news/detail-437253.html
优点:可以利用DMA方式,消耗CPU较少,大块文件传输效率高,无内存安全新问题。
缺点:小块文件效率低于mmap方式,只能是BIO方式传输,不能使用NIO。RocketMQ选择了第一种方式,mmap+write方式,因为有小块数据传输的需求,效果会比sendfile更好。文章来源地址https://www.toymoban.com/news/detail-437253.html
到了这里,关于面试八股文攻略(五)—— 操作系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!