冯·诺依曼体系结构、理解操作系统管理
在谈操作系统概念之前,先简单讲解一下冯诺伊曼体系结构,理解了在硬件层面上数据流的走向,这对后续的理解有很大的帮助。
文章目录
- 一.冯·诺依曼结构
- 冯·诺依曼体系结构
- 内存存在的意义
- 二.理解操作系统管理
- 操作系统的作用
- 管理的本质
- 系统调用
一.冯·诺依曼结构
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。
冯·诺依曼体系结构
数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
简要来说,就是一些计算机硬件按照特定结构组织起来,下面是经典的冯·诺依曼体系结构示意图,日常的计算机,手机都遵守这个体系结构。
- 运算器&控制器(CPU):运算器负责运算,控制器负责协调设备
- 输入设备:磁盘、网卡等
- 输出设备:声卡、显卡、网卡、磁盘等
- 存储器:内存-掉电易失(RAM)
各种硬件设备分别代表上述五个部分,五个部分相互独立。同时设备之间是用总线进行连接的。连接不是目的,而是一种手段,目的是让设备之间进行数据流动。而数据流动的本质就是对数据的拷贝。拷贝的整体速度是决定计算机效率的重要指标。
这里重点关注一下数据流,可以看到CPU只能对存储器即内存进行读写,不可以直接与外设设备进行数据传输。对应的,外设也只能和内存传输数据。
由此可以看出,在冯·诺依曼体系结构中,内存占据了很重要的地位。但是单单看图,存储器的位置似乎有点尴尬:输入设备先要将数据流入存储器,存储器再将数据交由运算器进行计算,这就已经发生了两次数据的拷贝了。如果直接将输入设备与运算器相连,只用一次拷贝,好像效率可以更高,但真的如此吗?
这里就要引出一个问题:内存存在的意义是什么❓
内存存在的意义
首先看一下存储器金字塔:
距离CPU越近的存储单元效率越高,造价越高,单位容量越小。
距离CPU越远的存储单元效率越低,造价越低,单位容量越大。
输入输出即I/O操作更是缓慢,若CPU直接和外设相连,CPU有大部分时间都是在休息的,一方面CPU的性能没有被完全释放;另一方面,由于木桶效应,整个计算机拷贝数据的速度变成了以I/O速度为主,这肯定是不行的。
引入内存,其速度略比CPU的L3 cache 慢,但容量与之对比可是有巨大差距(缓存一般是以MB为单位,内存是以GB为单位),这样内存的作用就体现出来了:介于外设和CPU之间的巨大缓存,在CPU忙碌但同时外设有数据输入时,内存可以先将该数据缓存下来,当CPU空闲下来可以直接快速地将数据拷贝至运算器,而非慢速地等待外设输入数据。
由此,内存的引入将计算机效率变成了以内存效率为主,选用内存就是因为其性价比高,同时也将提升效率的重点转移到软件上来了。
这下就不难理解“程序在运行的时候要先加载到内存”这句话了。
- 程序是文件,存放在磁盘中即外设中
- 程序是指令和数据的组成,需要让CPU执行
上面两点再结合冯·诺依曼体系结构图,外设的数据必须经过内存才能被CPU访问到。数据流层面,CPU和外设不直接接触,CPU只和内存打交道,外设也只和内存打交道。根本原因就是冯·诺依曼体系结构规定如此。
二.理解操作系统管理
操作系统的作用
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。
操作系统包括
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
操作系统是一个进行软硬件资源管理的软件。
由上图可以看到操作系统:
- 对下通过执行驱动程序对底层硬件进行管理,也同时管理其他软件程序。
- 对上提供系统调用,提供给用户稳定、安全、高效的环境
那么操作系统是如何进行管理的呢❓
管理的本质
要回答上面这个问题,首先先思考下面三个问题:
- 管理是什么❓
- 管理者如何拿到被管理者的信息❓
- 信息数据量大该怎么办呢❓
回答1:
- 通过现实中管理者与被管理者的情况可以映射到操作系统的管理上。管理者负责决策,被管理者负责执行。管理者和被管理者并不需要见面,管理者只要对被管理者的信息进行管理即可。那么管理者的核心工作就是根据这些信息进行决策。
管理的本质就是管理者不对被管理者直接进行管理,只要通过各种渠道拿到被管理者的信息,对数据进行管理,再通过各种渠道进行反馈到真实的人身上。
回答2:
- 管理者可以规定好自己需要的信息,将其放在表格中让被管理者进行填写,对应编程的思想即抽取对象的属性,从而对对象进行描述。具体来说就是创建一个结构体,创建一个类,描述其有各种属性。
回答3:
- 计算机正是处理数据的好手,可以将这些已经描述过具有属性的对象,组织到一种数据结构中,从而更好地进行增删查改。
所谓管理,就是先描述,再组织。
现实中的管理映射到操作系统的管理,两者本质是一样的。
- 描述:用struct结构体
- 组织:用链表或其他高效的数据结构
系统调用
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
系统调用,其功能和银行的窗口一样,是为了保护操作系统所管理的软硬件资源,不允许用户随意进行处理,用户必须通过系统调用接口才能对软硬件资源进行访问等操作。