进程概念的铺垫
- 先谈硬件——冯诺依曼体系结构
- 冯诺依曼体系结构的5大部件
- 输入输出设备
- 存储器
- 中央处理器(CPU)
- 冯诺依曼体系结构示意图
- 再谈软件——操作系统
- 操作系统的 目的 和 定位
- 如何理解 "管理"
- 总结
- 系统调用 - system call
先谈硬件——冯诺依曼体系结构
我们常见的计算机(PC)、不常见的计算机(工作站、服务器等),大部分都遵守冯诺依曼体系。
冯诺依曼体系结构的5大部件
冯诺依曼体系将计算机的硬件分成了主要的三部分:
1. 输入、输出设备
2. 中央处理器(CPU,由运算器和控制器组成)
3. 存储器
不考虑缓存情况,CPU能且只能对内存进行读写,不能访问外设
一句话,所有设备都只能直接和内存打交
输入输出设备
-
输入设备 : 向计算机输入数据和信息的设备。例如:鼠标、键盘、摄像头、话筒、磁盘、网卡…
-
输入设备 : 是计算机硬件系统的终端设备,用于接收计算机数据的输出。例如:显示器,打印机、声卡、磁盘、网卡…
→ 输入设备 和 输出设备 统称为外围设备(外设)
有的设备是纯的输入/输出设备,也有的既是输入设备又是输出设备(例如磁盘、网卡等)。
存储器
“存储器” 指的是内存。而外存(软盘、硬盘、光盘、U盘、移动固态硬盘(SSD) 和移动硬盘(HDD)等 )对应的是输入输出设备
-
内存: 计算机中的主要存储区域,用于存放当前正在执行的程序和数据。处理器可以快速访问内存中的数据。由于其高速读写的特点,内存通常用于临时存储那些需要快速访问的数据,比如操作系统内核、正在运行的应用程序及其数据等。断电后会丢失,容量小,速度快
-
外存:用于长期存储数据的设备,断电后数据也不会丢失,容量比较大,但存取速度慢。外存主要用于存储操作系统、应用程序、用户文件(如文档、图片、视频等)和备份数据。外存的成本相对较低,特别是在大容量存储需求下更具性价比。常见的外存设备包括硬盘驱动器(HDD)、固态硬盘(SSD)、光盘、U盘等。
内存是为了适配外设和CPU速度不均的问题。
中央处理器(CPU)
中央处理器(Central Processing Unit,简称CPU)是计算机的核心组件,被誉为计算机的“大脑”。它负责执行计算机中的指令并处理数据,是所有计算机系统的控制中心。
广义上我们把CPU分为两个模块:运算器 + 控制器。二者涵盖了CPU的基本功能
-
运算器的作用:对数据进行计算。分为算术运算 和 逻辑运算。
-
控制器的作用:控制计算硬件的流程。
当对CPU的组成进行的更细致的描述,我们可以划分为:
- ①算术逻辑单元(ALU):负责执行所有算术和逻辑运算,如加减乘除、与或非等操作
- ②控制单元(CU):负责从内存中取指令,解释并执行指令。CU控制着整个计算机系统的操作流程,指挥数据如何在CPU和其他部件之间移动。
- ③寄存器(Registers):CPU内部的高速存储单元,用于临时存储指令、数据和地址等信息。寄存器的数量和类型直接影响CPU的处理能力。
- ④缓存(Cache):位于CPU内部或与其紧密耦合的存储器,用于存储频繁使用的数据和指令。缓存的存在大大加快了CPU对数据的访问速度。
冯诺依曼体系结构示意图
图中这五大部件都是独立的个体,要组成计算机,各个硬件单元就必须用 “线” 连接起来,这个 “线” 就是总线。
总线分为 系统总线 和 IO总线
系统总线:存储器(内存)和CPU之间交互的 “线”
I/O总线:存储器(内存)和输入输出设备之间交互的 “线”
再谈软件——操作系统
操作系统是一款用来管理硬件和软件的软件。
任何计算机系统都包含一个基本的程序集合→操作系统(OS,operating system)。
广义来讲操作系统包括:
① 内核(进程管理,内存管理,文件管理,驱动管理)
② 其他程序(例如函数库,shell程序等等)
操作系统的 目的 和 定位
操作系统可以帮助用户管理好所有的软硬件资源(手段)
为用户提供良好的运行环境(目的)
这个“良好”指的是什么呢?→稳定、高效、安全是最基本的!
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的 “搞管理” 的软件
总结来说,操作系统通过管理好底层的软硬件资源,以达到为用户提供良好的运行环境的目的
如何理解 “管理”
在学校中,校长作为管理者,通常不需要与每个学生直接见面。校长在不直接接触学生的情况下,如何有效地进行管理?
①获取信息: 校长通过各种渠道(如教师报告、学生成绩、出勤记录等)获取学生的数据信息。这些信息能够帮助校长了解学生的整体情况。
②分析数据: 校长分析收集到的数据,以识别学校和学生的发展趋势、问题以及需要改进的地方。
③制定决策: 基于数据分析,校长可以制定适当的政策和决策,以促进学生的学习和成长。这些决策可能包括调整课程设置、改善教学方法、提供额外的支持和资源等。
④间接管理: 通过管理教师和学校的其他资源,校长间接地对学生进行管理和影响。教师在课堂上直接与学生互动,但校长通过对教师的指导,实现了对学生的管理。
类比的看,我们可以得出如下结论
-
1、管理者和被管理者是不需要见面的
-
2、管理者在不见被管理者的情况下,如何做好 “管理” ?
-
- 只要能得到被管理者的数据信息,就可以在未来进行管理和决策
-
- 因此管理的本质是通过对数据的管理,达到对人的管理
-
3、管理者和被管理者面都没见过,被管理者的数据是如何拿到的?
-
- 通过 “执行者” —— 驱动程序
管理者管理任何对象时,遵从“先描述,再组织”的原则。
因此在操作系统中,管理任何对象,最终都可以转化成对某种数据结构的增删查改。
总结
计算机管理硬件,首先要把硬件描述起来,由于Linux内核是用C语言写的(C语言没有容器),就注定了要管理计算机资源就只能用struct结构体来描述;结构体描述好之后,要把描述的结构体组织起来,就需要用到链表或其他高效的数据结构(具体要结合场景)
系统调用 - system call
在开发角度,操作系统对外会表现为一个整体向用户提供服务,但是为了保护数据安全,不会把自己完全地暴露给用户(操作系统不相信任何用户),但为了保证给用户能够提供服务,操作系统以接口的方式给用户提供调用的入口,来获取操作系统内部的数据,供上层开发使用。对这些接口的调用,叫做系统调用。
所谓 “接口” ,实际上就是操作系统设计的函数。(接口是操作系统提供的,用C语言实现的)
(换句话说,操作系统存在的最大价值不在于它把软硬件资源管理的有多么好,而在于它能够给用户提供良好、稳定的运行环境。因此操作系统在不相信任何用户的情况下,它也必须给用户提供安全稳定的运行环境,所以,操作系统就必须要给用户提供让用户访问操作系统内数据的接口)
→ 所有访问操作系统的行为,都只能通过 系统调用 完成
对于所有的语言,若要进行任何间接访问硬件的操作,必须要经过操作系统,而要经过操作系统,就必须通过系统调用
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就更有利于更上层用户或开发者进行二次开发。
→ 库函数也就是对系统调用的封装的产物。
例如C语言的printf()
函数,打印的结果能否直接写道硬件上?不能!
——因为硬件是被管理的,要操作硬件,就需要让管理者知道你要访问这个硬件。因为硬件的管理者是上层的操作系统或者驱动,所以printf()
函数若想访问底层的硬件资源,不能直接访问,只能“贯穿”操作系统。
这也就意味着,我们使用C/C++语言,任何间接访问硬件的操作,都必须经过操作系统,而我们上面讲过,操作系统不相信任何用户,它只会给用户提供调用接口,这就注定上层的printf()是一个C标准库的函数,它的底层需要封装系统调用接口
因此,任何计算机语言库函数 和 系统调用 的关系是:(上下层的)调用和被调用的关系!
(库函数是上层,系统调用是下层)