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

从冯诺依曼架构到操作系统

友情专栏:【把Linux“聊”明白】



前言

理解Linux,始于理解计算机本身。本文将追溯至计算机的源头——冯·诺依曼体系结构,为您解答计算机如何协调工作、操作系统如何管理软硬件资源这两个核心问题,为您的Linux进阶之路打下最坚实的地基。


一、冯诺依曼体系结构

在我们常见的计算机,如笔记本。不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。冯·诺依曼结构的五大组成部分:


截至目前,我们所认识的计算机,都是由一个个的硬件组件组成

输入设备:包括键盘,鼠标,扫描仪等;
中央处理器(CPU):含有运算器和控制器等;
输出单元:显示器,打印机等。

我们要知道,这里的存储器指的是内存,输入输出设备是站在内存的角度来看的。

为什么cpu不直接在磁盘上获取数据呢?
因为CPU的速度和磁盘的速度之间存在巨大的、难以逾越的鸿沟,如果CPU直接去磁盘取数据,整个计算机将会慢到无法忍受。
内存作为一道必不可少的“缓存”或“缓冲区”,填补了CPU和磁盘之间巨大的速度鸿沟,是保证现代计算机高效运行的基石。

在不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备),外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
所有设备都只能直接和内存打交道。

所以,在我们学习C语言时,printf函数就是把数据写到硬件,也就是显示器上。

二、操作系统的概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

三、设计操作系统的目的

对上,为用户程序(应用程序)提供一个良好的执行环境(目的)

对下,与硬件交互,管理所有的软硬件资源(手段)

我们来看一下计算机系统的层次结构:

  1. 软硬件体系结构为层状结构
  2. 访问操作系统,必须使用系统调用 — 其实就是函数,只不过是系统提供的;
  3. 我们的程序,只要你判断它访问了硬件,那么它必须贯穿整个软硬件体系结构;
  4. 库函数可能在底层封装了系统调用。

四、操作系统的核心功能

在上面我们也可以看出,操作系统是管理者和服务提供者。它管理所有硬件资源(CPU、内存、设备、文件),同时为用户和应用程序提供简单、统一、安全的服务接口。所以操作系统的定位是:⼀款纯正的“搞管理”的软件

4-1 如何理解"管理"

简单来说,就是 — 先描述,再组织
举例:
校长管理学生,先对学生进行描述

struct student
{
	int id; 		 // 学号
	char* name; // 名字
	char* age;  // 年龄
	//...

此时,每个学生信息对应一个结构体,然后,再以某种数据结构(比如链表)将学生对象的信息组织起来:

即:先描述被管理对象,再组织被管理对象

此时,校长想管理学生,需要和学生见面吗?不需要。
所以,要管理,管理者和被管理者,可以不需要见面
那么,管理者和被管理者,怎么管理呢?
根据“数据”进行管理!
但是不需要见面,如何得到数据?
由中间层获取!(比如辅导员)

有了上述的先描述,再组织,可以看到,校长对学生的管理工作,变成了对链表的增删查改。

我们现在可以来类比操作系统管理硬件:

总结

计算机管理硬件

  1. 描述起来,用struct结构体
  2. 组织起来,用链表或其他高效的数据结构

五、系统调用与库函数

系统调用
在开发角度,操作系统对外会表现为一个整体,但同时会暴露自己的部分接口,供上层开发使用。这部分由操作系统提供的接口,叫做系统调用
库函数
系统调用在使用上,功能比较基础,对用户的要求相对较高。因此,有心的开发者可以对部分系统调用进行适度封装,从而形成。有了库,就非常有利于更上层的用户或开发者进行二次开发


总结

从冯诺依曼体系结构的基础框架,到操作系统的“先描述,再组织”管理哲学,我们看到了计算机系统设计的精妙之处。操作系统作为硬件与应用程序之间的桥梁,通过系统调用和库函数为开发者提供了统一的接口。理解这些底层原理,不仅有助于我们更好的深入学习,更能让我们真正明白计算机工作的本质。


如果本文对您有启发:
点赞 - 让更多人看到这篇硬核技术解析 !
收藏 - 实战代码随时复现
关注 - 获取Linux系列深度更新
您的每一个[三连]都是我们持续创作的动力!

转载请说明出处内容投诉
CSS教程网 » 【把Linux“聊”明白】从冯诺依曼架构到操作系统

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买