程序猿之计算机操作系统 — 1.4 操作系统的结构


程序猿之计算机操作系统 — 1.4 操作系统的结构

一、操作系统作为程序运行环境的意义

前文讨论了计算机系统的基本组件和体系结构,本节我们转向操作系统层面的理解。操作系统的核心任务,是为用户程序提供运行环境,其结构和组织方式多样,但最重要的本质是:支持多道程序并发运行的能力

一、理论理解:从“程序集合”到“资源管理者”的本质跃迁

在操作系统发展的早期阶段,其核心目标是尽可能提升 资源利用率,这也是“多道程序设计”诞生的技术背景:通过让多个作业常驻内存,在一个作业进行 I/O 操作时,CPU 可以切换执行另一个作业,避免资源闲置。于是我们看到,“作业池”机制诞生,它是系统中所有等待执行作业的统一管理区,是操作系统实现“宏观调度”的战略起点。

随着“作业池”向内存调度演进,我们便进入了“作业调度”与“进程调度”并存的阶段。前者决定哪个作业有资格进入内存;后者决定哪个进程能占有 CPU,形成两级调度模型。而“分时系统”则进一步演化了对用户体验的关注,使得“响应时间”成为系统性能评价的新核心,从纯资源最大化转向人机交互友好。

内存管理方面,虚拟内存的引入是一个里程碑。它将物理资源抽象为逻辑空间,既提升了编程体验,也解耦了地址访问与物理结构,使得多任务调度成为可能。而所有这些机制最终都必须协调工作,才能支撑一个高效、响应迅速、并发友好的操作系统结构。

简而言之,操作系统的结构是一种“资源—任务—用户”的协调机制:资源被抽象、任务被调度、用户获得响应。

二、多道程序设计与作业池

操作系统的一个重要特征是支持多道程序设计(multiprogramming),即多个程序可同时驻留在内存中等待运行。为了提升 CPU 利用率,操作系统会采用一种作业池机制,将多个作业事先存入磁盘,再根据策略选入内存运行。图 1-9 就展示了这种作业池结构,其中包括所有等待运行的作业及其调度方式。

在实际操作中,这些作业会进入一个作业池(job pool),操作系统会根据内存与 CPU 资源情况,从池中选择合适的作业装入内存并执行。这样,一旦某个作业由于 I/O 等待而暂停,CPU 可以调度执行其他作业,从而提高系统整体的吞吐率和响应能力。

三、通用集群结构中的操作系统模型

如图 1-8 所示,多个计算机组成的集群系统中,每个节点通常包含操作系统和存储系统,通过局域网(如 Infiniband)进行通信。此结构下的操作系统需管理远程作业分发、作业调度与共享存储访问,进一步提升了系统的并发处理能力和资源利用率。

四、分时操作系统与交互响应

在多道程序设计的基础上,操作系统还支持分时系统(time-sharing),它允许多个用户共享同一计算机。每位用户可以在终端输入命令,系统迅速响应并切换 CPU 执行权,形成“人机交互”。关键指标是响应时间(response time),通常小于 1 秒。分时系统按时间片轮转方式调度多个用户的进程,保障公平性和实时性。

当用户输入指令或操作设备(如键盘、鼠标、触摸屏等),系统应能及时切换 CPU 并给予响应。为了达到这一目标,操作系统需要具备精细的调度算法与任务切换机制。

二、大厂实战理解:从单核时代到“微服务 + AI调度”时代的结构演进

在一线大厂(如华为、字节、NVIDIA)中,操作系统的结构设计已远超“通用程序支持”的原始视角,而更强调“服务稳定性”“资源弹性利用”以及“AI+资源调度智能化”。

例如:

  • 华为鸿蒙 在 IoT 和手机中提出“统一分布式内核”,通过任务调度服务将作业池与 CPU/设备异构能力打通,实现“作业全栈视图统一调度”;

  • 字节跳动在 AI 训练调度中,对传统的作业池做了进一步切分:将训练任务、推理任务、系统任务分别放入隔离池,结合 Kubernetes 的多级资源队列,动态做出调度决策;

  • NVIDIA 的 DGX 操作系统架构 引入了 GPU-aware 作业调度机制,不再仅靠传统 CPU scheduler,而是加入 Tensor Core/GPU memory affinity 的评估指标,通过“动态作业调度器 + 共享 GPU 缓冲区”构建高吞吐量模型服务。

再比如现代分时系统的“交互体验”不再局限于键鼠响应,而是拓展至语音、视觉、触觉等多模态输入,Google Fuchsia OS 就尝试用全新的 Zircon 微内核统一管理这些复杂异步资源,并以最小调度延迟为核心。

总结:

在大厂视角中,操作系统的结构不再是“程序调度器 + 磁盘管理器”的拼接体,而是一套完整的、多租户感知、异构资源支持、任务优先级灵活、具备自适应学习能力的系统调度中枢。

五、作业调度与 CPU 调度

在多任务并发的背景下,操作系统必须解决两类调度问题:

  1. 作业调度(job scheduling):决定将哪个作业从作业池调入内存运行。

  2. CPU 调度(CPU scheduling):决定内存中就绪进程哪个优先获得 CPU 执行权。

这两类调度影响系统的整体性能与用户体验,操作系统会采用各种调度策略(如先来先服务、最短作业优先等)进行优化,后续章节将详细讲解。

六、内存管理与虚拟内存

为了支持多任务并发,操作系统需要采用虚拟内存机制。虚拟内存(virtual memory)允许用户程序的地址空间大于实际物理内存,通过页面置换技术将暂未使用的部分调出至磁盘,使得有限的内存可以容纳更多的活跃任务。虚拟内存的关键是提供统一、连续的逻辑地址视图,而实际物理存储位置可能分布于不同区域。

🎯 大厂面试题 | 操作系统的结构

面试题 1:你如何理解多道程序设计的核心思想?它与分时系统有何本质区别?

参考回答:
多道程序设计(Multiprogramming)的核心思想是:在主存中同时驻留多个程序,使 CPU 可以在一个程序等待 I/O 操作时,调度另一个程序执行,从而最大化 CPU 利用率。其设计重点在于“资源利用最大化”,主要应用于批处理系统中。而分时系统(Time Sharing)则是多道程序设计的自然延伸,其核心目标是提升“用户响应时间”,强调的是公平性与交互性。它通过周期性地切换进程执行权,使得多个用户可以“并发”地共享同一主机资源。因此,前者偏重资源管理,后者更关注用户体验。


面试题 2:为什么需要引入“作业池”?它在现代操作系统中还有现实意义吗?

参考回答:
作业池的引入是为了解决“主存空间有限”与“作业数较多”之间的矛盾。操作系统将所有等待执行的作业保存在磁盘的作业池中,再通过作业调度程序决定哪些作业调入内存。它是实现“宏观作业控制”的前提。即便在现代操作系统中,这一机制仍未过时,只不过名字与表现形式已发生演变。例如 Kubernetes 中的 Job 队列、Linux 系统中的任务控制块(TCB)调度策略、本质上仍然体现了“作业池 -> 调入 -> 执行”的思想。因此,作业池是操作系统资源调度架构的重要组成。


面试题 3:请简述“虚拟内存”的结构与意义,它是如何提升多任务系统性能的?

参考回答:
虚拟内存(Virtual Memory)是通过地址映射机制,将程序访问的逻辑地址转化为实际的物理地址,使得用户程序能够“感知”到比物理内存更大的地址空间。其结构通常包含页表、TLB(快表)与物理内存帧。虚拟内存带来了三大好处:1)提升并发任务承载能力,因为程序不再受限于物理内存总量;2)支持内存隔离与安全机制,每个进程拥有独立地址空间;3)简化程序设计,不需手动管理内存分配。在多任务操作系统中,虚拟内存可有效防止“内存碎片”和“进程间干扰”,提升整体系统稳定性与吞吐能力。


面试题 4:在一个交互式系统中,如何保障响应时间?操作系统结构需要做哪些支撑?

参考回答:
交互式系统的响应时间(Response Time)直接决定用户体验,为了保障其性能,操作系统需从以下结构层面进行支撑:

  • 一是调度策略:采用抢占式调度算法(如 Round-Robin 或最短剩余时间优先),优先分配时间片给短任务或交互任务;

  • 二是I/O管理机制:使用非阻塞式 I/O 及中断驱动机制,避免因阻塞调用导致响应延迟;

  • 三是内存结构:确保交互进程常驻内存,减少页换入换出;

  • 四是系统调用优化:通过系统调用缓存、快速路径优化等技术降低交互命令延迟。
    在安卓或 Linux 中常见的 cgroup + RT kernel 配置就是为了确保 UI 进程与音频流任务的“低延迟优先调度”。

七、文件系统与设备管理

现代操作系统不仅要提供作业与进程管理功能,还要提供健壮的文件系统、设备管理、以及 I/O 调度机制。例如,小型系统需提供防止越权访问的功能,大型系统需支持并发访问与远程 I/O 操作,具体将在第 10~14 章深入探讨。

八、系统调度与同步通信

操作系统必须提供有效的调度机制和同步通信能力,确保任务按优先级顺序执行,并支持用户进程、内核任务之间的有序交互。这涉及进程通信(IPC)、互斥锁、信号量、管道、共享内存等机制,相关内容将在第 6~7 章深入解析。

🏭 大厂场景题 | 操作系统的结构

场景题 1:在华为鸿蒙设备中如何实现“多道程序设计”以提升资源利用率?

参考回答:
在华为鸿蒙系统(HarmonyOS)中,为了兼顾 IoT 设备上资源受限与任务多样的矛盾,其内核通过轻量级内核线程 LTS(Light Thread Scheduler)设计了“预置任务队列 + 动态作业提交池”的双缓冲调度结构,使得在一部分作业正在等待外设响应时,系统可以从另一个调度池中调入任务进行 CPU 执行,从而实现类似传统操作系统“多道程序设计”所描述的“CPU 不空转”的目标,这种方式在 OpenHarmony 的设备中表现为提升功耗利用率和响应效率的双重优化,同时也体现了作业池(Job Pool)结构在资源受限场景下的现代化演进应用。


场景题 2:谷歌 Android 系统中分时设计是如何确保前台应用交互性的?

参考回答:
在 Google Android 系统中,分时系统的设计主要通过 Linux CFS(Completely Fair Scheduler)配合 Android Binder 通信与 AppOps 权限管理共同实现,其核心机制是对所有应用进程根据优先级、IO 频率与是否为前台任务进行实时动态打分,并将打分结果用作时间片再分配的依据,从而使前台任务(如 UI 渲染线程、响应触摸事件)能够以极短延迟切入 CPU 执行,确保用户交互过程中的顺畅与响应性,而后台任务如日志写入、云同步等则进入低优先级队列或直接被 JobScheduler 推迟执行,这种调度方式在 Pixel 系列手机中显著降低了交互时延,符合教材中“分时系统为多个用户提供 CPU 片段”的定义。


场景题 3:在字节跳动服务端中,如何用虚拟内存机制支撑大规模多租户模型部署?

参考回答:
在字节跳动 AIGC 多模态平台中,服务端模型部署往往需要加载多个大型 Transformer 权重文件,而由于物理内存有限,系统采用 Linux 下的共享匿名映射机制(anonymous mmap + page cache reuse)将各模型的权重划分为只读共享段,并配合虚拟内存的页表机制,为每个容器化部署实例构建独立的逻辑地址空间,从而做到在逻辑上隔离、多租户安全的同时,实现底层物理页的最大程度复用,这种机制使得即便多个模型实例并发运行,其物理内存占用仍可被限制在接近单个模型大小,而这正是教材中“虚拟内存允许一个作业看似超出物理内存范围运行”的实际体现。


场景题 4:在微软 Azure 虚拟机中如何利用作业池机制支持动态资源调度?

参考回答:
在微软 Azure 的 AKS(Azure Kubernetes Service)中,每个 Node 节点会维护一份调度待处理作业的 JobPool(作业池),其来源可能是 HPA 自动伸缩产生的新副本请求、GPU 预热缓存模型任务或周期性的后台数据清洗 Job,该作业池采用优先级队列与冷启动评估函数共同调度至适合的容器中执行,其调度器会根据作业特征(CPU/GPU 占用、I/O 带宽需求、执行时间等)选择何时将其从作业池调入内存运行,从而达到类似教材中“从作业池选择作业调入主存执行”的目的,这种设计不仅提高了计算资源利用率,也支持系统级弹性伸缩和多租户隔离策略的落地。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值