
✨ 坚持用 清晰易懂的图解 + 代码语言, 让每个知识点都 简单直观 !
🚀 个人主页 :不呆头 · CSDN
🌱 代码仓库 :不呆头 · Gitee
📌 专栏系列 :
💬 座右铭 : "不患无位,患所以立。"
【Linux】操作系统(Operator System)的认识
- 摘要
- 目录
-
- 一、概念
- 二、设计OS的目的
- 三、对上,对下解析
-
- [1. 底层硬件](#1. 底层硬件)
- [2. 操作系统](#2. 操作系统)
- [3. 驱动](#3. 驱动)
- [4. 用户层](#4. 用户层)
- [5. 系统调用接口](#5. 系统调用接口)
- [6. 用户操作接口](#6. 用户操作接口)
- 四、理解操作系统的"管理"
- 总结
摘要
操作系统是计算机系统中最核心的软件,用于对底层硬件进行统一管理,并为上层用户提供安全、稳定和高效的运行环境。它通过内核实现内存管理、进程调度、文件管理和驱动控制等核心功能;同时借助驱动程序完成与底层硬件的解耦;再向上提供用户操作接口(命令行、图形界面、库函数等),让用户能够以简洁、直观的方式使用复杂的系统资源。理解操作系统的管理本质,就是理解其如何通过"抽象"和"组织"来屏蔽底层复杂性,实现对硬件和软件的统一调度与管理。
目录
一、概念
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核和其他程序
- 内核:进程/任务/线程管理,文件系统,内存管理,驱动管理。
- 其他程序:例如函数库,shell程序等等。
二、设计OS的目的
- 对下,与硬件交互,管理所有的硬件资源。
- 对上,为用户提供良好(稳定,高效,安全)的执行环境。
但是这里的用户是指程序员,而不是普通人、用户,因为普通用户使用的app软件和客户端是由程序员开发的,并不会接触到操作系统;而程序员开发软件等,必然会接触到操作系统。所以此处的用户指的是程序员。

三、对上,对下解析
1. 底层硬件
我们肉眼可见的计算机就相当于计算机的底层硬件,如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安全模块 | 中断管理、图形处理、网络收发、安全加密支持 |
2. 操作系统
但是单单只有硬件是不够的,我们还需要有一个软件来对这些硬件进行管理。例如,内存何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备?是按行刷新还是全刷新?这些都是由软件进行管理的,而这个软件就是操作系统(Operator System)。

而操作系统又主要进行着四项管理:分别是内存管理,进程管理,文件管理和驱动管理。
- 内存管理:内存分配、内存共享、内存保护以及内存扩张等等。
- 进程管理:其工作主要是进程的调度。
- 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等等。
- 驱动管理:对计算机设备驱动程序的分类、更新、删除等操作。
3. 驱动
但是我们直接让操作系统和底层硬件打交道吗?如果我们使用操作系统来对输入内容进行读取操作,那么当我们改变键盘的输入模式,会导致读取的方式改变,我们操作系统内核的源代码就需要重新进行编译,这样对操作系统的维护成本太高了,所以我们需要一个驱动层。

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

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

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

四、理解操作系统的"管理"
精髓:先描述,再组织!
这里我们举一个例子来了解管理,我们有学生、辅导员和校长三个角色。显然,校长在这三个人当中是管理者,学生是被管理者,那么辅导员充当什么角色?
- 其实我们完成任何一件事情都需要经过两个过程,第一个是决定要不要做这件事或者如何做这件事(相当于做决策);第二是付出行动的做这件事(相当于执行)。如上述例子,校长是管理者,管理学校的学生,校长就是那个做决策的人,但是他做决策后并不需要自己去执行(因为他是校长,哈哈哈),所以我们辅导员的作用就是去充当做执行的校色。所以辅导员的主要任务就是执行管理者的决策,称之为执行者。
- 虽然校长是管理者,但是我们学生身为被管理者在学校一般能看到校长人吗?所以校长是如何做到在我们看不到的情况下对我们进行管理的呢?
举个例子,现在校长要求辅导员将电子信息工程02班成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的全国电子设计大赛,当辅导员将资料拿来后校长选出三名学生说:"就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的大赛。"然后校长就什么也不管了。
- 在这个过程中,校长根本没有见过这三名同学,就对其进行了管理,他根据的是什么?没错,他根据的是数据。
- 实际上,学校将我们每个学生的各种信息都进行了管理,基本信息、成绩信息以及健康信息等等。
- 每一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理。这么一套信息在C语言当中我们称之为抽象结构体,而在C++当中又叫做面向对象。
- 当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。这里我们假设校长以双链表的形式将学生的信息组织起来。
- 此时校长对各个学生的管理,实际上就变成了对双链表的增删查改。当有新生时直接向该双链表加入一个结点,当学生毕业后直接将学生信息从该双链表当中移除即可。
总结
操作系统的核心价值在于 对下管理硬件、对上提供接口 。通过内核、驱动和用户接口三层递进,操作系统既保证了硬件的高效利用,又为用户和开发者提供了友好、简洁的交互方式。同时,操作系统的管理精髓在于对复杂资源的 抽象与组织,这与我们在数据结构中学习到的思想相一致。掌握操作系统,不仅是理解计算机如何工作的关键,也是进一步深入编程、系统开发和计算机科学的必经之路。
不是呆头将一直坚持用清晰易懂的图解 + 代码语言,让每个知识点变得简单!
👁️ 【关注】 看一个非典型程序员如何用野路子解决正经问题
👍 【点赞】 给"不写八股文"的技术分享一点鼓励
🔖 【收藏】 把这些"奇怪但有用"的代码技巧打包带走
💬 【评论】 来聊聊------你遇到过最"呆头"的 Bug 是啥?
🗳️ 【投票】 您的投票是支持我前行的动力
技术没有标准答案,让我们一起用最有趣的方式,写出最靠谱的代码! 🎮💻