【把Linux“聊”明白】从冯诺依曼架构到操作系统

从冯诺依曼架构到操作系统
友情专栏:【把Linux“聊”明白】
文章目录
- 从冯诺依曼架构到操作系统
- 前言
- 一、冯诺依曼体系结构
- 二、操作系统的概念
- 三、设计操作系统的目的
- 四、操作系统的核心功能
- 4-1 如何理解"管理"
- 五、系统调用与库函数
- 总结
前言
理解Linux,始于理解计算机本身。本文将追溯至计算机的源头——冯·诺依曼体系结构,为您解答计算机如何协调工作、操作系统如何管理软硬件资源这两个核心问题,为您的Linux进阶之路打下最坚实的地基。
一、冯诺依曼体系结构
在我们常见的计算机,如笔记本。不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。冯·诺依曼结构的五大组成部分:

截至目前,我们所认识的计算机,都是由一个个的硬件组件组成
输入设备:包括键盘,鼠标,扫描仪等;
中央处理器(CPU):含有运算器和控制器等;
输出单元:显示器,打印机等。
我们要知道,这里的存储器指的是内存,输入输出设备是站在内存的角度来看的。
为什么cpu不直接在磁盘上获取数据呢?
因为CPU的速度和磁盘的速度之间存在巨大的、难以逾越的鸿沟,如果CPU直接去磁盘取数据,整个计算机将会慢到无法忍受。
内存作为一道必不可少的“缓存”或“缓冲区”,填补了CPU和磁盘之间巨大的速度鸿沟,是保证现代计算机高效运行的基石。
在不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备),外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
即所有设备都只能直接和内存打交道。
所以,在我们学习C语言时,printf函数就是把数据写到硬件,也就是显示器上。
二、操作系统的概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

三、设计操作系统的目的
对上,为用户程序(应用程序)提供一个良好的执行环境(目的)
对下,与硬件交互,管理所有的软硬件资源(手段)
我们来看一下计算机系统的层次结构:
- 软硬件体系结构为层状结构;
- 访问操作系统,必须使用系统调用 — 其实就是函数,只不过是系统提供的;
- 我们的程序,只要你判断它访问了硬件,那么它必须贯穿整个软硬件体系结构;
- 库函数可能在底层封装了系统调用。

四、操作系统的核心功能
在上面我们也可以看出,操作系统是管理者和服务提供者。它管理所有硬件资源(CPU、内存、设备、文件),同时为用户和应用程序提供简单、统一、安全的服务接口。所以操作系统的定位是:⼀款纯正的“搞管理”的软件。
4-1 如何理解"管理"
简单来说,就是 — 先描述,再组织。
举例:
校长管理学生,先对学生进行描述:
struct student
{int id; // 学号char* name; // 名字char* age; // 年龄//...
此时,每个学生信息对应一个结构体,然后,再以某种数据结构(比如链表)将学生对象的信息组织起来:

即:先描述被管理对象,再组织被管理对象
此时,校长想管理学生,需要和学生见面吗?不需要。
所以,要管理,管理者和被管理者,可以不需要见面。
那么,管理者和被管理者,怎么管理呢?
根据“数据”进行管理!
但是不需要见面,如何得到数据?
由中间层获取!(比如辅导员)
有了上述的先描述,再组织,可以看到,校长对学生的管理工作,变成了对链表的增删查改。
我们现在可以来类比操作系统管理硬件:

总结
计算机管理硬件
- 描述起来,用struct结构体
- 组织起来,用链表或其他高效的数据结构
五、系统调用与库函数
系统调用
在开发角度,操作系统对外会表现为一个整体,但同时会暴露自己的部分接口,供上层开发使用。这部分由操作系统提供的接口,叫做系统调用。
库函数
系统调用在使用上,功能比较基础,对用户的要求相对较高。因此,有心的开发者可以对部分系统调用进行适度封装,从而形成库。有了库,就非常有利于更上层的用户或开发者进行二次开发。
总结
从冯诺依曼体系结构的基础框架,到操作系统的“先描述,再组织”管理哲学,我们看到了计算机系统设计的精妙之处。操作系统作为硬件与应用程序之间的桥梁,通过系统调用和库函数为开发者提供了统一的接口。理解这些底层原理,不仅有助于我们更好的深入学习,更能让我们真正明白计算机工作的本质。
如果本文对您有启发:
✅ 点赞 - 让更多人看到这篇硬核技术解析 !
✅ 收藏 - 实战代码随时复现
✅ 关注 - 获取Linux系列深度更新
您的每一个[三连]都是我们持续创作的动力!✨

