首页 云计算

操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试

分类:云计算
字数: (5579)
阅读: (9192)
内容摘要:操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试,

在上一篇操作系统复习笔记中,我们主要关注了进程管理和线程调度。今天,我们将深入探讨操作系统的另外两个核心模块:虚拟内存管理和磁盘管理。这两个模块在保证系统稳定性和提升性能方面起着至关重要的作用,也是面试中经常被问到的重点。

虚拟内存:突破物理内存的限制

问题场景:内存溢出与分页错误

相信很多同学都遇到过内存溢出的问题,尤其是在运行大型应用或者同时打开多个程序时。没有虚拟内存的情况下,每个进程都直接访问物理内存,容易导致冲突,甚至系统崩溃。更糟糕的是,如果程序访问了其没有权限访问的内存区域,就会触发分页错误(Page Fault),导致程序异常终止。

底层原理:页表、TLB 与地址转换

虚拟内存的核心思想是为每个进程提供一个独立的、连续的虚拟地址空间。这个地址空间远大于实际的物理内存大小。操作系统通过页表(Page Table)将虚拟地址映射到物理地址。页表是一个由页表项(Page Table Entry, PTE)组成的数组,每个 PTE 记录了虚拟页到物理页的映射关系,以及该页的权限信息(如读、写、执行)。

为了加速地址转换,操作系统通常会使用转换后备缓冲区(Translation Lookaside Buffer, TLB)。TLB 是一种高速缓存,存储了最近使用的虚拟页到物理页的映射关系。当 CPU 需要访问某个虚拟地址时,首先会查找 TLB。如果 TLB 中存在对应的映射关系,则直接使用该映射关系进行地址转换,这就是所谓的 TLB 命中。如果 TLB 中不存在对应的映射关系,则需要查找页表,并将查找到的映射关系添加到 TLB 中,这就是所谓的 TLB 未命中。

操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试

代码/配置:Linux Swap 分区

Linux 系统使用 Swap 分区作为虚拟内存的补充。当物理内存不足时,操作系统会将一部分不常用的页从物理内存交换到 Swap 分区,从而释放物理内存空间。

可以使用 swaponswapoff 命令来启用和禁用 Swap 分区。

# 查看 Swap 分区信息
swapon -s

# 启用 Swap 分区
swapon /dev/sdaX  # 将 /dev/sdaX 替换为实际的 Swap 分区设备

# 禁用 Swap 分区
swapoff /dev/sdaX

修改 vm.swappiness 参数可以调整 Swap 分区的使用策略。vm.swappiness 的值越大,操作系统越倾向于使用 Swap 分区。

操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试
# 查看 vm.swappiness 的值
sysctl vm.swappiness

# 修改 vm.swappiness 的值
sysctl vm.swappiness=60

# 永久修改 vm.swappiness 的值
echo "vm.swappiness=60" >> /etc/sysctl.conf
sysctl -p

实战避坑:Swap 分区并非万能药

过度依赖 Swap 分区会降低系统性能。因为磁盘的读写速度远慢于内存。因此,应该尽量避免频繁的页面交换。可以通过增加物理内存、优化程序代码等方式来减少对 Swap 分区的依赖。同时,监控系统的内存使用情况,及时发现并解决内存泄漏等问题。

磁盘管理:高效的数据存储与访问

问题场景:IO 瓶颈与磁盘碎片

在高并发的 Web 应用中,磁盘 IO 往往是性能瓶颈之一。大量的并发请求会导致磁盘频繁读写,降低系统的响应速度。此外,频繁的文件创建和删除会导致磁盘碎片,进一步降低磁盘的性能。

底层原理:磁盘调度算法与文件系统

操作系统使用磁盘调度算法来优化磁盘的读写顺序,从而减少磁盘臂的移动距离,提高磁盘的 IO 效率。常见的磁盘调度算法包括:

操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试
  • FCFS (First-Come, First-Served):先来先服务算法,按照请求的先后顺序进行处理。
  • SSTF (Shortest Seek Time First):最短寻道时间优先算法,优先处理距离当前磁头位置最近的请求。
  • SCAN (Elevator Algorithm):扫描算法,磁头在一个方向上移动,处理沿途的所有请求,直到到达磁盘的边缘,然后改变方向,继续处理沿途的请求。
  • C-SCAN (Circular SCAN):循环扫描算法,磁头在一个方向上移动,处理沿途的所有请求,直到到达磁盘的边缘,然后立即返回到磁盘的起始位置,继续扫描。

文件系统负责组织和管理磁盘上的文件。常见的文件系统包括:

  • FAT32:Windows 系统常用的文件系统,支持最大 4GB 的单个文件。
  • NTFS:Windows 系统使用的更高级的文件系统,支持更大的文件和更强的安全性。
  • ext4:Linux 系统常用的文件系统,具有良好的性能和稳定性。
  • XFS:一种高性能的 Linux 文件系统,适用于大型文件和高并发应用。

代码/配置:Linux IO 调度器

Linux 系统提供了多种 IO 调度器,可以通过以下命令查看当前使用的 IO 调度器:

cat /sys/block/sda/queue/scheduler

可以使用 cfq, noop, deadline 等 IO 调度器。

操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试
  • cfq (Completely Fair Queuing):完全公平队列算法,为每个进程分配公平的 IO 资源。
  • noop (No Operation):无操作算法,简单地按照请求的先后顺序进行处理。
  • deadline:截止时间算法,为每个请求设置一个截止时间,优先处理截止时间较早的请求。

可以通过以下命令修改 IO 调度器:

echo noop > /sys/block/sda/queue/scheduler

也可以在 /etc/rc.local 文件中添加以上命令,使其在系统启动时自动执行。

实战避坑:选择合适的 IO 调度器

不同的 IO 调度器适用于不同的场景。例如,对于数据库等需要高吞吐量的应用,可以选择 noopdeadline 调度器。对于需要公平分配 IO 资源的应用,可以选择 cfq 调度器。在实际应用中,需要根据具体的需求进行选择,并通过性能测试来验证选择的有效性。定期进行磁盘碎片整理,也有助于提升磁盘性能。 例如宝塔面板,通常会提供磁盘碎片整理功能。

希望这篇操作系统复习第二篇文章能够帮助你更好地理解虚拟内存和磁盘管理的相关知识。 掌握这些知识点,对于理解操作系统原理,解决实际问题,以及应对面试都有很大的帮助。

操作系统复习:从虚拟内存到磁盘调度,架构师手把手带你通关面试

转载请注明出处: 程序员闰土

本文的链接地址: http://m.acea1.store/blog/306647.SHTML

本文最后 发布于2026-04-18 06:59:42,已经过了9天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 咕咕咕 2 天前
    关于虚拟内存和物理内存映射那块,我理解的还是有点模糊,有没有更深入的资料推荐?