操作系统是计算机系统中最核心的软件,用于对底层硬件进行统一管理,并为上层用户提供安全、稳定和高效的运行环境。它通过内核实现内存管理、进程调度、文件管理和驱动控制等核心功能;同时借助驱动程序完成与底层硬件的解耦;再向上提供用户操作接口(命令行、图形界面、库函数等),让用户能够以简洁、直观的方式使用复杂的系统资源。理解操作系统的管理本质,就是理解其如何通过“抽象”和“组织”来屏蔽底层复杂性,实现对硬件和软件的统一调度与管理。
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核和其他程序

但是这里的用户是指程序员,而不是普通人、用户,因为普通用户使用的app软件和客户端是由程序员开发的,并不会接触到操作系统;而程序员开发软件等,必然会接触到操作系统。所以此处的用户指的是程序员。

我们肉眼可见的计算机就相当于计算机的底层硬件,如CPU,RAM,显示屏等等,如下的表格,看似他们很多,很乱,但是他们是遵守冯·诺依曼体系结构的:输入设备到内存,然后通过中央处理器(CPU)处理后返回到内存,然后到输出设备。

分类 | 具体硬件 | 操作系统管理方式/作用 |
|---|---|---|
处理器(CPU相关) | CPU、寄存器、时钟/定时器、ALU、FPU | 任务调度、上下文切换、时间片管理、运算执行 |
存储与管理 | 主存(RAM)、Cache(L1/L2/L3)、ROM/BIOS/UEFI、MMU | 内存分配、虚拟内存、内存保护、地址转换 |
输入输出设备 | 磁盘/SSD、键盘、鼠标、显示器、打印机、USB设备等 | 通过设备驱动与 OS 交互,抽象为文件/事件/图形输出 |
总线与控制器 | 系统总线(PCIe、AMBA 等)、I/O 控制器、DMA 控制器 | 提供数据传输通道、管理外设通信、实现高效 I/O |
特殊硬件 | 中断控制器(PIC/APIC)、GPU、网卡(NIC)、TPM安全模块 | 中断管理、图形处理、网络收发、安全加密支持 |
但是单单只有硬件是不够的,我们还需要有一个软件来对这些硬件进行管理。例如,内存何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备?是按行刷新还是全刷新?这些都是由软件进行管理的,而这个软件就是操作系统(Operator System)。

而操作系统又主要进行着四项管理:分别是内存管理,进程管理,文件管理和驱动管理。
但是我们直接让操作系统和底层硬件打交道吗?如果我们使用操作系统来对输入内容进行读取操作,那么当我们改变键盘的输入模式,会导致读取的方式改变,我们操作系统内核的源代码就需要重新进行编译,这样对操作系统的维护成本太高了,所以我们需要一个驱动层。

而驱动层的主要工作就是单独去控制底层硬件的。例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动。驱动简单来说就是对应去访问某个硬件,访问这个硬件的读、写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统与硬件之间的解耦。
而操作系统往上就是面向普通用户的用户层,用户可以通过命令行和图形用户界面与操作系统进行交互。而背后所有的硬件管理与资源分配都由操作系统的内核层来完成。

如果用户直接访问操作系统的话(尤其是内核),会破坏其安全性,稳定性和隔离性,可能导致系统崩溃、数据丢失甚至安全漏洞。因此现代操作系统都采用 用户态 / 内核态隔离,只允许通过受控的 系统调用接口 来访问内核。

操作系统提供的底层硬件接口通常非常复杂且具体,直接操作这些底层资源对于普通用户和开发者来说不现实。用户操作接口(如系统调用、库函数、命令行和图形界面)提供了一种 抽象层,使得开发者和用户不需要关心复杂的硬件细节,而可以通过简单的指令或函数调用来实现目标。 例如:通过 printf 输出文本,而不需要了解字符如何通过硬件发送到显示器。

精髓:先描述,再组织!
这里我们举一个例子来了解管理,我们有学生、辅导员和校长三个角色。显然,校长在这三个人当中是管理者,学生是被管理者,那么辅导员充当什么角色?
举个例子,现在校长要求辅导员将电子信息工程02班成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的全国电子设计大赛,当辅导员将资料拿来后校长选出三名学生说:“就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的大赛。”然后校长就什么也不管了。
操作系统的核心价值在于 对下管理硬件、对上提供接口。通过内核、驱动和用户接口三层递进,操作系统既保证了硬件的高效利用,又为用户和开发者提供了友好、简洁的交互方式。同时,操作系统的管理精髓在于对复杂资源的 抽象与组织,这与我们在数据结构中学习到的思想相一致。掌握操作系统,不仅是理解计算机如何工作的关键,也是进一步深入编程、系统开发和计算机科学的必经之路。