一、冯诺依曼体系结构
我们常见的计算机,如笔记本;不常见的计算机,如服务器等都是基于冯诺依曼结构来组织起来的。
大多数我们所认识的计算机都是由一个个硬件组成:
- 输入设备:键盘、话筒、摄像头、磁盘、网卡等。
- 中央处理器(CPU):包含运算器和控制器等。
- 运算器:完成算术运算、逻辑运算。
- 控制器:执行代码、进行逻辑控制、响应外设等。
- 输出设备:显示器、扬声器、磁盘、网卡、打印机等。
关于冯诺依曼结构,强调几点:
- 这里的存储器指的是内存,而磁盘和ssd等一般叫做外存,属于输入输出设备的范畴。
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设。
- 输入或输出设备要输入或者输出数据,也只能写入到内存或者从内存读取。
- 所有设备只能和内存打交道。
在日常我们所写C/C++程序时,都需要经过编译形成可执行程序,然后加载到内存,那么为什么需要加载到内存呢?
因为从效率角度来看,输入输出设备 << 内存 << CPU。离CPU越近,效率和成本越高;反之离CPU越远、效率和成本变低。
- CPU在数据层面不和外设直接打交道,只会和内存打交道, 因为外设的效率太低。
- 外设不和CPU直接打交道,只和内存打交道, 与上面不同的在于,程序加载到CPU会进行 预加载,这样CPU可以随时从内存取用。
- 内存的本质就是外设和CPU之间的缓存,所以计算机的效率以内存速度为主(这样做的意义在于引入内存,使用冯诺依曼架构,可以让用户以不怎么高的成本获得效率不错的计算机,内存让计算机更有“性价比“)。
存储金字塔图片(来源于网络):
二、操作系统
2.1 操作系统的概念
操作系统是什么?操作系统是一个进行软硬件资源管理的软件。
计算机硬件刚开始产生的时候,是没有操作系统的,当时人们需要依靠 “开关” 来控制01的输入,从而与计算机做交互。
后来随着计算任务越来越多,那么就需要有一种软件来把不同的人的计算需要调度起来,于是便写了一个专门的调度程序,随着这个程序的发展,人们开始给这个程序起名叫做操作系统。
狭义上的操作系统就是操作系统内核(包括后面的文章所谈论的操作系统皆是指内核),在内核层面上操作系统主要做的工作:进程管理、文件管理、内存管理、驱动管理。
2.2 设计操作系统(OS)的目的
在计算机世界中,几乎所有的软硬件体系结构,本质都是层状的:
操作系统存在的必要性(目的):
- 管理好软硬件资源。
- 给用户提供一个稳定的、安全的、高效的运行环境。
而我们使用计算机,大部分情况是在使用计算机的什么呢? 假设写了一个C语言程序,通过调用printf()函数来向屏幕进行打印信息,就是通过函数来调用显示屏硬件;或者是写一个通信程序,当发出消息时就是调用网卡进行相应操作。
所以本质上使用计算机就是在通过软件来访问硬件资源。 但是计算机的硬件资源是有限的,而我们要完成的操作是无限的,这就要求必须要把硬件资源管理好。
2.3 如何理解“管理”
在一个学校内,存在着校长、辅导员、以及学生三个角色。此时把整个学校看做一个系统。校长显然不能进行对学生的直接管理,而是由辅导员将学生的个人信息、成绩以及日常表现上报,来让校长进行决策。
恰好这个校长以前是个程序员,于是他便使用结构体来对每个学生的个人信息、成绩、日常表现进行描述;通过某种特定的数据结构来组织起来一个个的学生节点。当一个学生需要退学或者被开除时,就不需要校长亲自找到这个学生告诉他:“你被开除了”。而是对数据结构进行增删查改便可以完成。
所以计算机管理软硬件就是这样的:
- 用struct结构体描述。
- 通过链表或其他高效数据结构组织。
而总结起来就是六个字:先描述,再组织。
所以即使我们不知道操作系统内部是怎么实现的,但可以确定,操作系统中有着大量的结构体,而对软硬件资源管理,就是对内部的数据结构进行“增删查改”。