目录
- 冯诺依曼体系结构
- 基于冯诺依曼体系数据的高效流转
- 数据流转示例
- 操作系统(Operator System)
- 操作系统(Operator System)层次结构
- 硬件部分
- 系统软件部分
- 用户部分
- 管理——先描述,再组织
就一个程序而言,需要在计算机中运行的才能实现它的价值,那么数据资源在计算机中是怎么流通的呢?计算机是如何高效的利用数据的呢?这就必须要介绍冯诺依曼体系了。
冯诺依曼体系结构
就我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系
冯诺依曼体系结构的计算机包括五大基本组成部件:
运算器:用于完成各种算术运算、逻辑运算和数据传送等数据加工处理。
控制器:用于控制程序的执行,是计算机的大脑。运算器和控制器组成计算机的中央处理器(CPU)。
存储器:用于记忆程序和数据,例如内存。程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定。
输入设备:用于将数据或程序输入到计算机中,例如鼠标、键盘。
输出设备:将数据或程序的处理结果展示给用户,例如显示器、打印机。
目前,我们所认识的计算机,都是有一个个的硬件组件组成,由于这一设计,使得冯诺依曼体系具有以下特点:
-
单一性:冯诺依曼体系是一个单独的体系,主要由存储器和处理器构成。
-
可靠性:由于其独特的结构,当存储器和处理器其中之一发生故障时,另一部分仍能正常工作,具有较强的可靠性。
-
容错性:能容忍一定的不正常情况出现而不会造成整个计算机体系的故障。
-
共享功能:各部件之间相互共享功能资源,使得处理速度明显加快。
接下来对冯诺依曼体系每个部分的数据信号(黑线部分)的流转进行介绍。
冯诺依曼体系可以拆分为以下四部分。
输入设备:
输入单元:包括键盘, 鼠标,扫描仪, 写板,摄像头,网卡,磁盘等。
输入设备:
输出单元:显示器,打印机,显示器,磁盘,网卡等。
可以发现有些设备即是输出又是输入设备。
储存器:
- 这里的存储器指的是内存。
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备),外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
- 一句话,所有设备都只能直接和内存打交道。
CPU:
这里的运算器和控制器我们按中央处理器CPU理解:其具有算术运算功能、逻辑运算功能以及控制功能。
基于冯诺依曼体系数据的高效流转
以计算机高效处理能力的角度来看待这个体系:
计算机的作用就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,当CPU处理完后再输出到输出设备上完成应答。所以,要高效处理一个问题,就必须保证数据在冯诺依曼体系中高速流转。
计算机中数据一般会在内存或者硬盘中,这两者的优缺点如上。
- 内存:存储容量小,但读写时间快。
- 硬盘:存储容量大,但读写时间慢。
CPU的计算速度是很快的,这就要求数据的输入输出必须也能够跟得上CPU的运算速度,所以基于这一要求CPU注定了不能从外设直接读取数据,否则将造成木桶效应,使得计算机运行速度大大降低。
试想一下当CPU从外设读入数据,但是由于外设的读写速度太慢,导致将数据读入的时间比CPU计算的时间长得多,当多个外设都直接向CPU写入数据时就需要等一个数据读完再读另一个数据,这就造成CPU资源的严重浪费,所以,这就是CPU从内存对数据进行读写的原因。
内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。这个缓冲作用一定程度上解决了木桶效应。使得整体速度得到提升,使CPU资源得到充分利用。
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。于是就形成了最终的冯诺依曼体系结构。
可能有人会疑惑从外设将数据交给CPU,再由CPU将数据交给外设真的比外设将数据交给内存再给CPU再给内存,最后才到外设这个流转路径快吗?
局部性原理的应用:根据局部性原理,当一个数据正在被访问时,其周围的数据有很大可能性也会被访问。因此,内存会将正在被访问的数据及其周围的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的。这样,当CPU需要获取某一行数据时,它可以直接从内存中获取,从而提高了数据传输的效率
数据流转示例
我们以日常与朋友的微信聊天做示例:
在这个示例中,键盘作为我们的输入设备将要传递的信息交给内存,再经CPU处理打包后交回给内存,再由内存将处理好的数据输出到我们电脑的显示器,以及网卡上,这样我们就看到了自己输出的信息显示在显示器上,而我们要向朋友发送的信息从网卡经由网络传输到朋友电脑的网卡上;朋友的电脑此时从网卡中将数据读入到内存中,再经CPU处理后交给内存,最终输出到显示器上,此时朋友便能看到我们发送的消息了。
操作系统(Operator System)
都知道操作系统很重要,那么操作系统是什么呢?
概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
作用
设计OS的目的就是为了帮助用户管理软硬件资源
- 与硬件交互,管理所有的软硬件资源(手段)
- 为用户程序(应用程序)提供一个良好的执行环境(目的)
定位
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件。目的就是为了帮助用户管理好软硬件资源。也是计算机开机后第一个被加载到内存的软件。
操作系统(Operator System)层次结构
先观察一整个操作系统的层次体系,主要可以分为三个部分:用户部分,系统软件部分,硬件部分。
硬件部分
硬件部分就是我们实际接触到的设备,是计算机相关实体,如常使用的键盘,鼠标,显示器;也有不常见被封装起来的芯片,网卡,磁盘。这些硬件作为计算机运行的基础。通过这些硬件,用户可以方便的使用计算机。
系统软件部分
驱动程序:
对于以上介绍的硬件是为了确保计算机的运行或者方便用户的使用,当用户使用键盘与朋友聊天时,数据的流转就需要依靠上述提到的冯诺依曼体系了,但是,输入的键盘信息是如何给计算机获取的呢?
这就是驱动程序的使命任务了
当新买的鼠标第一次与电脑连接时,大概率都会看到安装xxx驱动程序的字样,这便是硬件与操作系统构建联系的时候。
驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。
由于操作系统是不和硬件直接打交道的,于是我们又在操作系统与底层硬件之间增加了一层驱动层,驱动层的主要工作就是单独去控制底层硬件的。
例如,键盘有键盘驱动,网卡有网卡驱动,硬盘有硬盘驱动,磁盘有磁盘驱动。驱动简单来说就是去访问某个硬件,访问这个硬件的读、写以及硬件当前的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的(例如网卡)。
此时操作系统就只需关心何时读取数据,而不用关心数据是如何读取的了,也就是完成了操作系统与硬件之间的解耦。
操作系统:
操作系统的定位就是帮助用户管理好计算机的软硬件资源;其作用就是管理,包括:内存管理,进程管理,文件管理,驱动管理。
- 内存管理:内存分配、内存共享、内存保护以及内存扩张等等。
- 驱动管理:对计算机设备驱动驱动程序的分类、更新、删除等操作。
- 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等等。
- 进程管理:其工作主要是进程的调度。
系统调用
在操作系统之上是系统调用层,也叫用户层,在这里我们就可以用命令行或是图形化界面进行各种操作。那这一层的作用是什么呢?
在这里,我们就开始远离操作系统了,操作系统里会有各种数据,因此操作系统是不相信任何人的,但是操作系统的目的就是帮助用户管理软硬件资源的,所以,操作系统必须提供一些接口供上层调用,达到管理的目的;这就是系统调用层的作用。这就像你去银行取钱都是去窗口取钱的,而不是让你去金库里取,因为银行是不信任你的,但它又要为你提供存取钱服务,所以它就为你提供了一个窗口。
用户部分
这里的用户分两种。
用户操作接口:
这部分可以理解为是程序员部分,例如我们C语言或者其他语言要输出一段话,以printf为例:我们使用printf实际上也是去调用了操作系统对应的输出接口,而这个printf就是程序员写好封装好的,其本质也是去调用操作系统的输出接口。
用户:
这里就是我们实打实的普通用户了,使用程序员写好的系统调用接口。
所以这里也可以看到语言层面的库函数的使用是去调用系统对应接口实现的,两者属于上下层关系的。
系统调用和库函数概念:
- 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
- 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
管理——先描述,再组织
在大概了解操作系统的层状体系后,再来研究操作系统是如何进行管理的;毕竟操作系统的定位就是一款管理软硬件资源的软件,所以必然涉及管理。
我们以大学校园为例:
对于管理,肯定有管理者——校长,被管理的人——学生;由于学生人数太多,校长一个人肯定不会自己亲自管理,而且都是分院而治,所以还需要一个人来执行校长的管理工作——辅导员。
再从操作系统的层次体系来看,校长毫无疑问就是——操作系统,学生就是软硬件资源,而辅导员就是驱动程序。
学校大大小小的事都可能由作为管理者的校长拍案,但是我们学生作为被管理者却很少能看见过校长,那么管理的本质是什么呢,为什么在不见面的情况下都能进行管理呢?
从学生的角度上看这个问题,为什么学生会受到学校的管理约束呢?
答案是你的学生档案信息掌握在学校手里,这里面记录了你的有关学情信息,如:绩点,成绩,逃课记录,等等。校长也是通过这些信息来判定你的学习状况,他只需要获取这些信息就能对我们进行管理,根本不需要见面来完成管理工作。如:如果学生绩点很好,没有记过处分,大概率可以被校长评为好学生,如果你经常逃课,挂了很多科,那么校长就有可能开除你。这都是通过学情信息对学生进行管理的。
所以管理的本质是在对信息进行管理。
而当面庞大的学生信息时,可以分两个步骤完成管理
1:先描述
将所要获得的信息按照表格的形式描述好,再由学生完成信息的填写即可;这就是为什么在开学时大家要把信息填好交给学校的原因。
2:再管理
再通过一些高效的数据结构如双向链表将学生的信息串联起来。这个时候校长就获取了所有学生的信息。有了这些信息校长就能进行管理工作了,而且将对学生的管理工作变为了对该链表的增删查改。如:查看信息不就是遍历链表找到对应信息的学生,开除学生不就是删除一个节点,增加学生不就是增加一个节点。将学生信息串联形成一个链表,不仅能完成管理任务,也能高效的管理。
所以管理的精髓在:先描述,再管理。