目录
[一 冯诺依曼体系结构](#一 冯诺依曼体系结构)
[2 计算机的模块化](#2 计算机的模块化)
[3 计算机的标准](#3 计算机的标准)
[4 计算机的硬件组成,为什么要存在内存?](#4 计算机的硬件组成,为什么要存在内存?)
[5 通过两个场景 理解冯诺依曼结构](#5 通过两个场景 理解冯诺依曼结构)
[二 操作系统 (Operator System)](#二 操作系统 (Operator System))
[1 概念](#1 概念)
[2 设计操作系统(OS)的目的](#2 设计操作系统(OS)的目的)
[3 操作系统是如何进行软硬件资源管理的](#3 操作系统是如何进行软硬件资源管理的)
[4 核心功能](#4 核心功能)
[5 如何理解管理](#5 如何理解管理)
[6 系统调用和库函数概念](#6 系统调用和库函数概念)
[7 承上启下](#7 承上启下)
一 冯诺依曼体系结构
1概念区分
我们日常使用的电脑,比如笔记本,以及不太常见的服务器,绝大多数都采用冯・诺依曼体系结构 。英特尔的处理器就是典型的冯・诺依曼架构代表。
不过,除了冯・诺依曼体系之外,还有其他架构,例如哈佛架构。哈佛架构常见于嵌入式系统、一些小型设备,甚至早期的手机处理器中
需要注意的是,"电脑的体系架构" 和 "计算机的体系结构" 这两个概念并不完全相同。如果问题问的是具体的处理器架构,通常指的是英特尔、ARM 这类;如果问题问的是计算机的基本结构,则通常指的是冯・诺依曼体系结构。
2 计算机的模块化
计算机的模块化,是指将整个计算机系统拆解为功能独立、接口标准的硬件或软件模块,这些模块可以像积木一样单独设计、制造、升级和替换,最终组合成完整的系统。
模块化的核心优势
✅ 易维护性:某个模块损坏时,只需更换该模块,不用整机报废。
✅ 可扩展性:需要更高性能时,单独升级 CPU / 显卡即可,无需重新购买整机。
✅ 降低成本:厂商可以批量生产标准化模块,用户也能按需付费,避免浪费。
✅ 加速创新:不同厂商专注于优化某一类模块(如显卡厂商专注图形性能),推动技术迭代。
3 计算机的标准
计算机能实现模块化,依赖统一的硬件与软件标准。就像秦始皇统一度量衡消除了交流障碍,硬件标准让不同厂商的 CPU、内存、显卡等模块可以无缝组合,软件标准让不同程序能在同一系统上运行。
4 计算机的硬件组成,为什么要存在内存?
截至目前,我们所认识的计算机,都是由⼀个个的硬件组件组成
• 输入单元 :包括键盘,鼠标,扫描仪,写板等
• 中央处理器(CPU) :含有运算器和控制器等
• 输出单元:显示器,打印机等
cpu不能直接由输入设备读取数据,也不能直接把数据输出到输出设备
IO是外部设备和内存之间的
所有设备都只能直接和内存打交道

为什么要存在内存?
1 数据在体系结构中流动
2 存储分级的问题
3 内存
第一点我们在图中已经解释了,下面来看后面两点

5 通过两个场景 理解冯诺依曼结构

二 操作系统 (Operator System)
1 概念
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
• 内核(进程管理,内存管理,文件管理,驱动管理)
• 其他程序(例如函数库,shell程序等等)

狭义操作系统:只聚焦于操作系统本身
2 设计操作系统(OS)的目的
对下,与硬件交互,管理所有的软硬件资源
对上,为用户程序(应用程序)提供⼀个良好的执行环境


操作系统要访问底层硬件,要通过驱动程序控制,操作系统和硬件不直接关联
3 操作系统是如何进行软硬件资源管理的

4 核心功能
在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的"搞管理"的软件
5 如何理解管理
我们用一个例子理解管理



校长(操作系统) :真正的管理者,不需要直接接触学生(硬件),只需要通过数据来做决策和管理。
辅导员(驱动程序) :执行者,负责收集学生的信息并传递给校长,是管理者与被管理者之间的桥梁。
学生(硬件) :被管理的对象,他们的各项信息(成绩、考勤等)就是核心数据。
管理的本质是数据驱动
管理者不需要与被管理者面对面,真正需要的是反映被管理者状态的有效数据 。管理的核心就是对这些数据进行收集、分析和决策,最终落实到对特定数据结构的增删查改操作上。
数据的传递依赖 "执行者 "管理者之所以能获取到被管理者的数据,正是因为有 "辅导员" 这样的执行者在中间负责信息的采集与传递。
现实问题→计算机问题的转化原本用 Excel 表格做的人工管理工作,现在可以交给计算机完成。这一过程本质上是把现实中的管理问题,建模成对数据结构(比如链表)的增删查改操作,也就是先描述、再组织的过程。
总结
计算机管理硬件---->先描述,再组织
描述起来,⽤struct结构体
组织起来,⽤链表或其他⾼效的数据结构
6 系统调用和库函数概念
之前我们是从操作系统向下看,剖析它如何通过驱动程序管理底层硬件;现在转为向上看,讲解操作系统如何通过系统调用接口、用户操作接口,为用户提供安全可控的交互方式。
操作系统不允许用户直接访问内核,核心原因是为了安全。如果用户可以随意修改内存大小等关键资源,会破坏系统稳定性,甚至引发恶意攻击。
为了高效管理各类资源(如进程、内存、文件),操作系统内部会大量使用结构体和数据结构,这和我们之前用链表管理学生信息的思路是一致的。

1 库函数的定位
库函数的核心价值是 "降低用户使用操作系统的成本 ",它提供了更易用的封装接口。但并非所有库函数都对应系统调用 ------ 有些功能仅在用户态即可完成,无需请求内核介入。
2 操作系统的实现基础
绝大多数操作系统由 C 语言开发,这决定了其接口设计天然遵循 C 语言的 "传参 + 返回值" 模式,系统调用也不例外。
3 内核访问的唯一入口
用户程序若要访问操作系统内核的数据或资源,只能通过系统调用,没有其他途径。
后面我们用 "银行小窗口" 的故事:用户(程序)不能直接进入银行后台(内核),只能通过柜台窗口(系统调用)办理存款、取款(访问内核资源)等业务,这既保证了安全,也规范了交互流程。

printf是一个库函数,它的主要工作是格式化字符串。为了完成最终的打印,它会封装并触发对应的系统调用,由操作系统内核负责与硬件交互,完成实际的输出操作
用户程序无法直接操作硬件,必须通过系统调用请求内核提供服务。这个过程就像你想向屏幕 "写" 数据,必须先把请求交给操作系统,再由操作系统驱动显示器完成显示。
第二个故事
我们可以用这个银行存款的故事,来更生动地理解操作系统的设计思路:
1银行的核心需求有两个:
提供服务:要让客户能正常办理存款、取款等业务。
保障安全:绝对不能让客户直接进入金库或后台,因为存在坏人破坏、窃取资产的风险。
如果让客户自由进出银行内部,安全就无法保障;但完全拒绝客户,又失去了服务的意义。
- 解决方案:柜台小窗口
银行的应对方案是开设柜台窗口,这是客户办理业务的唯一合法通道:
客户只能在窗口外提交请求,由银行工作人员(系统调用的执行者)在内部处理。
工作人员会验证请求的合法性,再进行存款、取款等操作,确保整个过程在可控、安全的前提下完成。
- 对应到计算机系统
这个场景完美对应了操作系统的工作原理:
银行 → 操作系统内核:管理着最核心的资源(金库对应内存、硬件等)。
客户 → 用户程序:需要访问内核资源来完成功能。
柜台窗口 → 系统调用:用户程序访问内核的唯一合法接口,确保安全与可控。
大堂经理 → 库函数(如printf):为用户提供更友好的引导,简化操作流程。

对不熟悉银行流程的客户(比如大字不识的老大爷)来说,直接面对柜台窗口(系统调用)会非常吃力,甚至无法完成业务。
大堂经理(库函数)的作用就是降低用户的使用成本:他会引导客户填单、排队,把复杂的流程拆解成简单步骤,让客户能顺利办理业务。
对应到开发场景
柜台窗口 = 系统调用:这是操作系统提供的底层接口,功能基础但要求用户对底层机制有一定了解。
大堂经理 = 库函数:它封装了系统调用,提供更易用的接口,让上层开发者不用关心底层细节,就能高效完成功能开发

7 承上启下
那在还没有学习进程之前,就问⼤家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来
