面试八股文攻略(五)—— 操作系统

一、 操作系统的基本功能

  1. 进程管理:进程是计算机中最基本的资源,操作系统负责进程的创建、销毁、调度和同步。

  2. 内存管理:操作系统负责分配和管理内存资源,保证程序能够正常运行。

  3. 文件系统管理:操作系统负责文件的创建、管理和访问,提供文件的读写接口。

  4. 设备管理:操作系统负责管理设备的资源,包括设备驱动程序的加载、设备资源的分配和管理。

  5. 安全管理:操作系统对系统中的资源进行安全控制,包括用户身份认证、访问权限控制、进程隔离等。

  6. 网络管理:操作系统负责计算机的网络连接、数据传输和路由管理。

二、 内存管理

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)
    淘汰的页被换入
    空闲页面链表:物理块挂载到链表末尾
    已修改页面链表:当链表中页面到达一定数量后集中写回磁盘
内存颠簸
  1. 概念
    缺页中断更换掉的页面是很快又要访问的页面,导致缺页中断迅速的再次发生,急剧的降低效率。
  2. 解决方案
    替换策略不当则修改替换算法
    运行程序过多则设法减少程序数量
段页式分配取一次数据要访问几次内存

三次以上
第一次是从段表地址寄存器中得到段表的初始地址后再访问段表,从而得到内存中相应段的页表地址
第二次是访问页表以获取要访问的物理地址
第三次我们才能访问我们真正需要访问的物理单元。

四、虚拟寄存器

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

  1. DMA引擎传输数据到内核缓冲区(用户态->内核态)
  2. 此时内核缓冲区与用户缓冲区共享数据(内核态->用户态)
  3. 调用write方法,将用户缓冲区(共享)的数据拷贝到Socket缓冲区(用户态->内核态)
  4. 数据异步的从Socket缓冲区使用DMA引擎拷贝到网络协议引擎
  5. write方法返回(内核态->用户态)

优点:即使频繁调用,使用小块文件传输,效率也很高
缺点:不能很好的利用DMA方式,会比sendfile多消耗CPU,内存安全性控制复杂,需要避免JVM Crash问题。

sendFile

1. Linux2.1版本

拷贝数据时不经过用户态,直接将数据从内核缓冲区拷贝到Socket缓冲区。

涉及3次数据拷贝、3次上下文切换
流程:

  1. DMA引擎传输数据到内核缓冲区(用户态->内核态)
  2. 调动wirte方法直接从内核缓冲区进入socket(内核态)
  3. socket->网络协议栈
  4. wirte方法返回(内核态->用户态)
2.Linux2.4版本

直接从内核缓冲区拷贝到网络协议栈从而再一次减少了一次拷贝.
涉及2次数据拷贝、3次上下文切换
流程:
1.使用 DMA 引擎从文件拷贝到内核缓冲区
2. 从内核缓冲区将数据拷贝到网络协议栈;内核缓存区只会拷贝一些 offset 和 length 信息到 SocketBuffer,基本无消耗。
3. socket->网络协议栈

优点:可以利用DMA方式,消耗CPU较少,大块文件传输效率高,无内存安全新问题。
缺点:小块文件效率低于mmap方式,只能是BIO方式传输,不能使用NIO。RocketMQ选择了第一种方式,mmap+write方式,因为有小块数据传输的需求,效果会比sendfile更好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值