【Linux】操作系统的认识

✨ 坚持用 清晰易懂的图解 + 代码语言, 让每个知识点都 简单直观 !

🚀 个人主页不呆头 · CSDN

🌱 代码仓库不呆头 · Gitee

📌 专栏系列

💬 座右铭 : "不患无位,患所以立。"


【Linux】操作系统(Operator System)的认识


摘要

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


目录

一、概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(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 输出文本,而不需要了解字符如何通过硬件发送到显示器。


四、理解操作系统的"管理"

精髓:先描述,再组织!
这里我们举一个例子来了解管理,我们有学生、辅导员和校长三个角色。显然,校长在这三个人当中是管理者,学生是被管理者,那么辅导员充当什么角色?

  1. 其实我们完成任何一件事情都需要经过两个过程,第一个是决定要不要做这件事或者如何做这件事(相当于做决策);第二是付出行动的做这件事(相当于执行)。如上述例子,校长是管理者,管理学校的学生,校长就是那个做决策的人,但是他做决策后并不需要自己去执行(因为他是校长,哈哈哈),所以我们辅导员的作用就是去充当做执行的校色。所以辅导员的主要任务就是执行管理者的决策,称之为执行者。
  2. 虽然校长是管理者,但是我们学生身为被管理者在学校一般能看到校长人吗?所以校长是如何做到在我们看不到的情况下对我们进行管理的呢?

举个例子,现在校长要求辅导员将电子信息工程02班成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的全国电子设计大赛,当辅导员将资料拿来后校长选出三名学生说:"就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的大赛。"然后校长就什么也不管了。

  1. 在这个过程中,校长根本没有见过这三名同学,就对其进行了管理,他根据的是什么?没错,他根据的是数据。
  2. 实际上,学校将我们每个学生的各种信息都进行了管理,基本信息、成绩信息以及健康信息等等。
  3. 每一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理。这么一套信息在C语言当中我们称之为抽象结构体,而在C++当中又叫做面向对象。
  4. 当学生的数量多起来了,校长就可以将全部学生的信息组织起来,当然组织的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,于是就有了一门课程专门教我们管理数据的方式,那就是数据结构。这里我们假设校长以双链表的形式将学生的信息组织起来。
  5. 此时校长对各个学生的管理,实际上就变成了对双链表的增删查改。当有新生时直接向该双链表加入一个结点,当学生毕业后直接将学生信息从该双链表当中移除即可。

总结

操作系统的核心价值在于 对下管理硬件、对上提供接口 。通过内核、驱动和用户接口三层递进,操作系统既保证了硬件的高效利用,又为用户和开发者提供了友好、简洁的交互方式。同时,操作系统的管理精髓在于对复杂资源的 抽象与组织,这与我们在数据结构中学习到的思想相一致。掌握操作系统,不仅是理解计算机如何工作的关键,也是进一步深入编程、系统开发和计算机科学的必经之路。


不是呆头将一直坚持用清晰易懂的图解 + 代码语言,让每个知识点变得简单!

👁️ 【关注】 看一个非典型程序员如何用野路子解决正经问题

👍 【点赞】 给"不写八股文"的技术分享一点鼓励

🔖 【收藏】 把这些"奇怪但有用"的代码技巧打包带走

💬 【评论】 来聊聊------你遇到过最"呆头"的 Bug 是啥?

🗳️ 【投票】 您的投票是支持我前行的动力

技术没有标准答案,让我们一起用最有趣的方式,写出最靠谱的代码! 🎮💻

相关推荐
AlfredZhao14 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346620 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信