[Linux]操作系统概念
目录
一、冯诺依曼体系结构
1.冯诺依曼体系结构
2. 为什么要采用这种体系呢?
3.基于冯诺依曼体系结构的问题
QQ软件如何实现交流的
程序在运行前必须加载到内存
内存存在的意义
数据流动的本质
二、操作系统
1.什么是操作系统
2.Linux操作系统
外壳程序的作用(命令行解释器)
直接交互不可以吗
shell外壳的运行原理
3.计算机的层次结构
用户态
OS如何管理
操作系统管理的核心
用户操作接口
总结
一、冯诺依曼体系结构
1.冯诺依曼体系结构
冯诺依曼体系结构定义了计算机由运算器、控制器、存储器、输入设备、输出设备五个部分组成。我们现今常见的计算机基本上都是遵循冯诺依曼体系结构去设计实现的,可以说有了该体系,才让如今的计算机得到广泛的普及。
计算机是由一个个硬件构成的,基本上可以分为三大类:输入设备、输出设备、中央处理器。但是,冯诺依曼体系是五种,让CPU与存储器进行交互,而不是直接和输入输出设备交互。将输入设备的内容取出来放到存储器中,让CPU从存储器中取数据。处理完毕之后,放到存储器中,由存储器和输出设备交互。
也就是说CPU和存储器直接交互,不和输入输出设备交互。
2. 为什么要采用这种体系呢?
计算机中有很多的存储器,每一种存储器的存储大小和存储效率是不同的。有图可知,CPU的寄存器存储速度非常的快、然后是高速缓存、内存、最后是磁盘等设备,也就是说CPU速度非常快,而磁盘等输入输出设备的存储速度相当来说就非常的慢,如果让CPU直接和磁盘交互的话,会非常影响CPU的性能,导致计算机整体的性能下降。如果说把计算机的所有存储设备都换成CPU的寄存器呢?那么确实会很快很快,但是每个存储器能够存储的内容很少,价格也会非常昂贵。
最好的处理办法,就是让磁盘这种大容量设备存储数据,让CPU寄存器、告诉缓存这种处理效率非常高的设备进行运算和处理。那么如果想平衡两者的存储速度的差异,可以在中间设置一个容量合适、存储速度较快的硬件设备也就是内存,内存会将CPU要使用的数据提前取出来,放到自己内部,CPU想要数据的时候,可以直接从内存中取出数据。同时把处理好的数据放到内存中,由内存把数据放到磁盘等设备中。
这样采用分级存储的方式,不仅可以发挥CPU速度快的能力,也可以发挥磁盘等设备存储容量大的优点,同时又解决了CPU和磁盘在数据层面交互的时候速度慢的问题。也可以说是速度分级、成本分级了。
所以说冯诺依曼体系结构的计算机,使用最少的钱做出最高效的计算机设备,才让计算机快速的在人们的生活中得到了普及。
3.基于冯诺依曼体系结构的问题
QQ软件如何实现交流的
主机A,从输入设备键盘中输入xxxx对话数据,放到了存储器内存中,CPU从内存中取出数据进行处理后,放回到内存中,内存将数据分别发送到输入设备的显示器和网卡中。这样我们的显示器就可以看到我们发送的数据了,同时网卡设备将数据发送给主机B,主机B的接收设备网卡进行数据接收之后,放到内存中,CPU和内存进行交互,最后由内存将数据放到主机B的输出设备显示器,主机B就也可以看到主机A发送的数据了。
程序在运行前必须加载到内存
程序是由代码和数据构成的,平时存放在磁盘/SSD中,如果要允许的话,是CPU允许,但是CPU不直接和外设交互,所以要先加载到内存当中,由内存把程序代码和数据交互给CPU去执行,所以程序在运行前必须加载到内存中,是由体系结构决定的。
内存存在的意义
内存在冯诺依曼体系结构中,可以说是充当了一个大的硬件级别的缓存,CPU从内存获取数据的同时,内存也在不断从磁盘中取出数据,形成了一个工作流,提高了计算机的运行速率。
数据流动的本质
就是将数据从一个设备拷贝到另一个设备中,我们上述说的从哪放到哪,从哪里取出来,其实都是数据拷贝的过程。
二、操作系统
1.什么是操作系统
操作系统其实就是一款系统级别的软件,帮助计算机进行软硬件资源的管理,给用户提供一个稳定、高效、安全、易用的环境。同时也是启动计算机时第一个加载的软件。如果说我们的计算机没有操作系统的话,可以说这个计算机就编程了一个大的摆件。
2.Linux操作系统
Linux操作系统狭义上来说的话,指的是Linux内核Kernel,广义上来讲应该是指Linux内核+ Linux外壳和对应的配套程序(软件层)
在centos下,shell外壳叫做bash,我们电脑用的windows就是内核,他的图形化界面是一种外壳程序,安卓手机的内核是Linux操作系统,而安卓是他的外壳程序。
外壳程序的作用(命令行解释器)
(1)将用户输入的指令,解释传递给内核
(2)内核执行指令,得到结果,通过外壳传递给用户
直接交互不可以吗
内核结构复杂,用户使用的成本高,同时内核也不信任用户,害怕用户进行过分,非法的要求操作。所以外壳程序不仅仅又命令解释的作用,还有保护内核的作用
shell外壳的运行原理
对于一些非法的指令,可以直接拦截,但是对于一些又bug的程序的话,运行之后可能会把shell外壳程序搞挂掉,但并非如此,shell外壳接受合法的指令后,会创建子进程去执行命令,父进程也就是shell外壳程序继续进行命令的接受获取工作。所以子进程挂掉了也不会影响shell外壳程序的稳定运行。
3.计算机的层次结构
用户态
由图可知,对于用户来说,可以访问的内容非常少,例如:用户不可以直接访问网卡、硬盘等设备、不能直接访问外设是否成功接入等等。都是由用户向操作系统发出指令,让操作系统进行安全判断之后在去执行指令,并给我们反馈。那么如何访问呢?就引入了系统调用接口的概念,用户想要访问内核态或者底层硬件设备都需要通过系统提供的一些系统调用接口,调用这些接口让操作系统帮我们去查看和访问,最后给我们反馈。
操作系统内部非常复杂,如果没有这种限制的话,用户可以随意去访问底层的内容、驱动程序等,那么可能会出现一些不可控制的行为。所以就让操作系统自己去管理软硬件设备,不去干扰他的工作,如果向进行一些访问底层的操作,通过系统调用接口让操作系统去访问,这样的话,可以保证系统的安全性。让计算机稳定的运行。
除非是硬件编程,没有操作系统,否则访问任何内核数据和底层硬件都需要经过操作系统。
OS如何管理
在计算机中的管理,归根结底就是一句话:对结构化的数据进行管理(先描述、再组织)
OS是管理者,底层硬件设备是被管理者,OS不直接和外设进行交互,而是通过驱动程序获取各个硬件的数据,例如:设备的状态、设备的容量、设备类型等字段,把一个一个设备的各种字段结构化,用统一的结构体类型管理各个设备,之后使用链表、树等数据结构将这些结构体连接起来,之后OS对于硬件设备的管理就变成了对于数据结构的增删查改。
这样的话,想访问一个设备是否接入的时候,就变成了看这个设备是否在设备链表中被以结构体的形式管理起来即可。
操作系统管理的核心
进程管理、内存管理、文件I/O管理、驱动管理
用户操作接口
对于系统调用接口来说,繁琐程度很大,使用起来是很麻烦的,用户想要使用这些接口并不容易,但是在实际开发的时候,不得不经常的通过系统调用接口让操作系统帮助我们访问一些内容。所以就有了用户操作接口,将系统调用接口进行一定的封装,将繁琐的接口简单化。
Linux中的shell命令行解释器,就是帮助我们进行一些命令的解释和调用功能,用户输入的指令传递给shell外壳,shell外壳将用户的指令解析转化成系统级别的指令之后传递给操作系统,执行后在将数据返回给用户。Windows的图形化页面、C/C++的一些库函数都是将系统调用接口进行封装,例如printf函数,就是封装了访问显示器的系统调用接口。让用户操作起来更加的简单方便。
总结
操作系统是一个帮助我们管理软硬件资源的的软件,可以管理我们计算机内部的各个模块,并且通过管理驱动程序来管理底层硬件。同时操作系统不允许外界对其内部进行直接的访问,所有的访问都要通过系统调用接口去访问。对于计算机的层状结构的访问需要逐层次的进行访问,不能跃层次访问。同时为了方便用户、老百姓去使用计算机(操作系统),为用户提供了图形化界面、命令行解释器等用户操作外壳程序。