八股文面试攻略三:操作系统

操作系统面试核心知识点

一、进程线程

1、进程与线程的区别

进程是操作系统资源分配的基本单位。线程是CPU调度的基本单位。

每个进程有独立的内存空间、数据段、代码段等。而线程是共享进程的大部分资源,共享内存、共享全局变量。但是线程有自己的线程栈、PC、寄存器。

进程创建和切换成本高安全性好;线程轻量、切换快但共享资源可能线程不安全。适合作为应用隔离用进程,适合并发执行用线程。

进程有就绪、阻塞和运行三种状态。

线程有新建、就绪、运行、阻塞和终止五种状态。

2、操作系统中进程与线程切换过程

进程切换 = 从一个进程切换到另一个进程,需要切换整个进程上下文,包括内核态资源。

具体步骤如下:

  1. 保存当前进程上下文
  2. 修改进程状态
  3. 切换虚拟内存:进程切换需要切换地址空间,这是进程切换最昂贵的一步
  4. 切换内核栈:每个进程有独立的内核栈,线程才共享进程栈。
  5. 恢复新进程的CPU上下文
  6. 挑战到新进程继续执行。

进程切换需要切换页表、虚拟内存、内核栈等“重量级资源”,代价昂贵

线程切换 = 在同一进程内切换不同线程运行

具体步骤:

  1. 保存当前线程的寄存器上下文
  2. 修改线程状态
  3. 切换到用户态栈
  4. 恢复新线程的寄存器、PC
  5. 挑战到新线程继续执行。

线程切换不切换虚拟内存,是轻量级的调度操作。

3、描述整个系统的调用过程

系统调用是用户程序请求内核为其执行某些特权操作(如读文件、创建进程、网络收发)的一种机制。如read、write、fork、send等

用户态程序 不能直接操作硬件或修改内核资源,必须通过系统调用。

  1. 用户程序调用库函数
  2. 触发CPU陷入(从用户态切换到内核态)
  3. 内核根据系统调用找到对应的内核函数
  4. 内核执行系统调用逻辑
  5. 内核准备返回值,恢复上下文
  6. 执行sysret/iret返回用户态

用户态调用库函数 → 执行 syscall 指令 → CPU 陷入内核态 →内核根据系统调用号调对应内核函数 → 完成操作 → 返回用户态。

TLB 是存放虚拟页号与物理帧号映射关系的高速缓存,用来加速页表查询。

4、后台进程有什么特点,如果设计一个进程是后台进程需要考虑什么?

后台进程是指在后台长期运行、不依赖终端、无需人工交互的进程,用于提供系统服务或定时任务等功能。Linux 中典型后台进程称为守护进程。

后台进程的主要特点:

  • 不依赖终端/ 无控制台 
  • 长期运行、寿命较长
  • 独立运行,不受用户会话影响
  • 资源占用稳定、单一职责明显
  • 守护进程通常在后台循环执行
  • 通常运行在较低权限保障安全性

设计一个后台程序考虑以下问题:

  1. 正确“后台化”
  2. 日志管理:后台程序没有终端输出,所以日志非常重要
  3. 错误处理/异常处理:后台进程不能因为一个异常就崩掉
  4. 避免资源泄露
  5. 进程与服务管理
  6. 信号处理
  7. 配置热加载
  8. 后台任务调度
  9. 权限安全性
  10. 高可用设计

5、进程之间的通讯方式有哪些?

  1. 管道:半双工,只能用于 有亲缘关系的进程(父子进程),内核负责维护管道缓冲区。
  2. 有名管道:有名字(文件节点),可以用于 无亲缘关系进程通信
  3. 消息队列:内核维护消息队列,适合多个进程并发使用,消息有类型,支持随机读写,但是有长度限制。
  4. 共享内存:多个进程映射同一块物理内存,速度最快。需要配合 信号量 / 互斥锁 来同步读写。适合高性能通讯(进程间传输大量信息)
  5. 信号量:计数器,常用于“PV 操作”。避免竞争条件
  6. 信号:进程管理、异常处理,如子进程退出通知父进程。
  7. 套接字:本地进程通信、远程通信
  8. 内存映射文件(mmap):将文件映射到多个进程的地址空间
  9. RPC:大型系统服务通信

6、操作系统中进程调度方式的策略

进程调度(Process Scheduling)是操作系统决定 哪个进程(或线程)获得 CPU 使用权 的核心机制。

  • 先来先服务
  • 最短作业优先
  • 优先级调度
  • 时间片轮转
  • 多级队列调度
  • 多级反馈队列
  • 实时调度

7、线程同步的方式

多个线程访问共享资源时,采用特定机制来避免出现数据竞争(race condition)、脏读、死锁等问题。保证同一时刻只有一个线程访问共享数据/保证访问顺序。

  1. 互斥锁
  2. 读写锁
  3. 自旋锁
  4. 信号量
  5. 条件变量
  6. 原子操作

8、CAS是一种什么样的同步机制

是一种无锁(lock-free)的原子同步机制

它是乐观锁的实现方式,由 CPU 原子指令支持,效率高,不会阻塞,常用于无锁队列、原子变量和高并发场景。

9、CPU怎么执行指令

CPU 执行指令遵循“取指 → 译码 → 执行 → 访存 → 写回”这一指令周期,通过控制器协调 ALU、寄存器、Cache、总线等部件完成操作。

二、内存

1、用户态与核心态的区别?

模式权限级别谁在运行
用户态低权限普通应用程序
内核态高权限操作系统内核、驱动

用户态是一种受限制的执行模式,应用程序运行其中,不能直接访问硬件或执行特权指令。内核态拥有最高权限,可以管理硬件、内存和进程调度。用户态通过系统调用、中断、异常进入内核态。区分两者是为了保证系统安全和稳定

2、内存管理有哪些方式?

  1. 连续分配:每个进程占用一块连续的物理内存区域,分静态分区、动态分区,容易产生 内存碎片
  2. 非连续分配:分页
  3. 非连续分配:分段
  4. 段页式结合
  5. 虚拟内存
  6. 交换

操作系统的内存管理方式包括:连续分配、分页、分段、段页式、虚拟内存、交换(swap)、伙伴系统、slab/slub 分配器等。现代系统主要采用“分页 + 虚拟内存”,并使用“伙伴系统 + SLAB/SLUB”作为物理内存分配机制。

3、分页和分段的区别

分页是操作系统将虚拟地址空间等分为固定大小的页面(Page),物理内存等分为物理块(Frame)的内存管理方式。

分段把程序按照逻辑结构划分成大小不等的段(Segment),如代码段、数据段、栈段等,每个段具有不同长度。

简单来说:

分页将内存按固定大小的页划分,解决内存不连续问题;分段按逻辑结构划分段,大小可变,适合代码/数据/栈等模块化管理。分页无外碎片但有内碎片,分段无内碎片但有外碎片。现代 OS 基于分页管理内存,分段仅用于权限控制。

4、页面置换算法有哪些?

当发生 缺页中断(Page Fault) 且物理内存已满时,操作系统必须从内存中淘汰一个页面以加载新的页面。决定“淘汰谁”的规则,就是 页面置换算法

  • 先进先出:最先进入内存的页面优先被淘汰。
  • 最佳置换:淘汰未来最长时间不会被访问的页面。
  • LRU:淘汰 最近最久未使用 的页面。
  • LFU:淘汰访问次数最少的页面。
  • 时钟算法:LRU 的高效近似
  • NRU:最近未使用算法,根据两个位:R(是否被访问)、M(是否被修改)

5、什么是虚拟内存

虚拟内存(Virtual Memory)是一种由操作系统与硬件(MMU)共同实现的内存管理机制,它为每个进程提供一个独立、连续的虚拟地址空间,使进程“以为”自己拥有完整内存,而实际物理内存可以按需分配,并且不足时可使用磁盘空间进行扩展

三大核心功能

  1. 提供更大的“逻辑上”可用内存
  2. 为每个进程提供独立的虚拟地址空间(隔离性)
  3. 通过按需调页提高性能

简单来说:虚拟内存是操作系统提供的一种机制,用虚拟地址代替物理地址,为每个进程提供独立的虚拟空间,并通过“按需调页”和“磁盘交换”让程序无需关心物理内存大小。它依靠页表、TLB 和缺页中断实现,解决了内存不足、隔离与安全的问题,是现代操作系统内存管理的核心技术。

6、为什么虚拟地址内存切换比较耗时?

虚拟地址切换指的是:
当 CPU 从一个进程切换到另一个进程时,需要切换页表(Page Table),同时会影响 TLB,需要刷新或失效。这就是所谓的 地址空间切换(Address Space Switch)

因此,虚拟地址空间切换耗时,是因为切换页表(CR3)会导致 TLB 失效,需要重新填充快表;同时多级页表查询开销大,还会导致缓存局部性下降。因此线程切换很快,而进程切换非常昂贵。

7、虚拟内存和物理内存怎么对应?

虚拟内存 → 通过页表 → 映射到物理内存
每个虚拟地址都要通过页表才能找到对应的物理地址。

8、请求页面置换策略有哪些方式?区别是什么?各自用什么算法解决?

请求分页的置换策略包括:
最优(OPT)
栈式策略(LRU、LFU、Clock,不会出现 Belady 异常)
非栈式策略(FIFO、Second Chance,可能出现异常)。
LRU 缺页率低但实现难,Clock 是最常用的近似 LRU,FIFO 最简单但最差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值