操作系统初探
认识冯诺依曼体系结构
冯诺依曼的的体系结构:
冯诺依曼体系结构是由5部分组成的:输入设备、输出设备、内存、运算器、控制器
其中运算器主要的功能是:算术运算、逻辑运算
运算器和控制器一般就集成在我们的CPU当中。
输入设备:键盘、网卡、硬盘、话筒、摄像头
输出设备:显示器、音响、网卡、硬盘
理解:
硬件角度上、数据层面上,cpu只和内存交互。输入设备无法直接联系到cpu计算,cpu无法直接给显示器输出运算结果
为什么?因为cpu的计算能力是很快的,而我们输入与cpu相比是非常慢的。那整体速度却是我们输入和输出来决定的,
我们的数据要进行处理,必须要从外设预装载到内存中,cpu需要直接和内存进行交互。这时候cpu要你的一行代码,那我直接给内存预装载100行,cpu就会从第一行开始从头往后读取数据,因为这里用了统计学上的局部性原理:从统计学角度,代码执行的时候,按顺序从上到下执行的改率是90%左右,也就是说,cpu要执行100行,那么瞬间要执行101行的概率非常的大,所以预装载的时候,把附近的代码全部进行了预加载在内存上。代码的命中率非常之高。
这些操作都是由操作系统完成的。
一个程序要执行,必须提前加载到内存中,为社么呢?CPU所需要的数据和代码必须要从内存中拿,所以一并采用了预装原理,可执行程序的本质就是一个存在在硬盘中的文件,硬盘就是一个外设,无法和cpu直接进行数据交互,cpu运行程序的前提就是要硬盘先把数据加载到内存中。这样有很大的成本优势和效率优势。
成本优势:最少的成本,最高的性能。
数据是如何读取到内存中的?
寄存器不仅仅存在于CPU中,任何一个外设都会有寄存器
输入:我们按键盘,数据存到键盘的寄存器中,进而写到内存的寄存器中,内存根据电路功能,把数据写到内存中
读取数据:从内存读取到cpu寄存器,然后处理、返回到内存,再从内存中输出到输出设备的寄存器中。
各个硬件单元进行交互的时候都是传递的电脉冲信号,通道叫做总线。
总线:
外设和内存的总线:IO总线
内存和CPU的总线:系统总线
以上谈到的都是数据的传输,除了数据的传输,还有硬件控制信号的传输。
我们上文提到,外设不可以和cpu进行直接通讯,指的是再数据层面。
外设是可以和cpu进行控制信号的直接通讯的,,比如常见的中断信号等
理解:
我们通过键盘输入一个数据,cpu如何知道,有数据传来了要计算了?
我们的外设通过电信号的方式给cpu发信号,之后cpu控制硬件,使内存接收数据。
简单了解了之后,我们来进行一下模拟更加复杂的场景
我们发送文件的过程:
你用键盘发一个信息,存在键盘寄存器中,并给cpu发送控制信号。cpu使内存接收键盘寄存器中的数据,存在内存的寄存器中。
cpu接收到内存中的数据进行计算,打包程序等处理,之后返还给内存结果,内存把结果给显示器和网卡的寄存器中,然后通过刷新再显示器上,网卡通过网络把信息发送给朋友的网卡。网卡得到信息并给cpu发信号,cpu控制内存接收数据,并接收内存的数据进行处理解析。然后返还给内存,内存把数据写给显示器的内存中,并等待刷新显示。
操作系统(OS)的概念
上文提到很多硬件,我们还需要有软件,我们进入我们的主题:操作系统 。操作系统就是用来管理我们硬件的软件。
os需要向各个硬件发送指令,并控制他们。
当然os不会自己进行操作,那样成本太高了,试想一下,100个键盘需要100种操作系统吗?所以再os和硬件之间还有一套软件层,驱动,它才真正进行控制底层硬件。
当然了,驱动一般是由硬件厂商提供的,也有可能是操作系统的开发方。当我们使用新鼠标,他应该会进行驱动的安装吧,他家都见过。
驱动的作用除了让os更好更方便的控制硬件,还可以让os和硬件解耦,让他们失去直接的关系,操作系统要操作硬件必须从驱动中穿过,这样既保证了操作系统的安全又保证了硬件的安全。
当然了,咱我们的操作系统和用户层之间也需要解耦,不然用户随意改动操作系统,那遇到高手还好,起码不会崩溃,遇到菜鸡这系统直接凉了。所以操作系统只给了一些安全的常用的接口给用户使用,这就是在os和用户层之间的:系统调用接口。
linux就是用c语言写的,所谓的系统调用接口,其实就是c的一个一个函数。但是这些系统调用接口的使用成本还是很大的,你得对操作系统有很深的理解才能去更好的玩弄系统调用函数,所以我们使用的更多的其实是一个一个的库,比如print的libc库等等。
库其实就是封装了系统调用接口。
封装工作是库的开发者做的,也就是语言的发明者。
最后才有了我们使用的printf和scanf这样基于库和系统调用接口的库函数。我们可以用这些函数接口去写helloworld。
当然还有很多的命令行,也都是对于系统调用接口的封装。
我们通过上文的理解可以得出:
操作系统是一款软件:进行软硬件资源管理的软件
概念
操作系统由两大块组成:
- 内核:驱动管理、内存管理、文件管理、进程管理
- 其他程序:函数库、shell等等
操作系统存在的目的
-
对下:与硬件进行交互。管理硬件软件资源。
试想一下,如果你换一个硬件,就要有新的os来操作它,这很明显不是有给好的设计方案。
正确操作方案:软硬件解耦,通过驱动层去交互。 -
对上:为用户提供良好的使用环境。因为我们不擅长与硬件打交道。操作系统最终的目的就是让用户使用,给用户提供稳定和安全的执行环境。
管理
我们需要深刻的理解什么是管理
管理者通常是做什么事情的?
管理者通常管理的是数据信息资源,比如通过学生的成绩信息,选择优秀者。
那么这些信息是如何得来的?
一般通过执行者的反馈。管理者下达指令,并通过执行者对信息的反馈,来完善或者改变决策。比如虽然我们选了年级前十,获得国家奖学金。但是在观察阶段,辅导员发现一名学生生活作风完全不合格,那么辅导员会把信息反馈给管理者。管理者则通过此信息,取消该生资格。
那么管理者依靠什么做这样的决策呢?难道就是因为它官大权力大吗?他说我就想开除一个学生,他不尊重我。怎么可能是这样,管理者开除一名学生,依靠的是学校出台的相关文件,某生触犯了哪一条,才进行这样的决策。
当管理者需要管理很多的信息的时候,那就一定要进行信息的描述与组织,也就是信息的分类。这样我们把所有成绩放在一起,把所有的综合评分放在一起,把所有的健康信息放在一起,这样才更方便管理者进行数据的管理。
讲了这么一大堆,那我们来告诉大家: