操作系统
- 一,冯诺依曼体系结构
- 内存的重要作用
- 二,操作系统的概念
- 三,设计操作系统的目的
- 三,操作系统在计算机体系中的定位
- 四,操作系统是如何进行管理的
一,冯诺依曼体系结构
在众多计算机相关的书籍中,不得不提的就是冯诺依曼体系结构,冯诺依曼体系结构仍运用在当今的计算机中。
计算机硬件的五大成员:
- 输入设备
- 输出设备
- 存储器
- 控制器
- 运算器
一台计算机要想工作,那么这五部分是不可或缺的,计算机处理的数据都是从输入设备输入,流向存储器,CPU从存储器中读取数据,将处理的结果放回存储器,存储器将处理的结果通过输出设备输出。
内存的重要作用
存储器也就是内存,在其中起到了非常重要的作用,它作为沟通CPU与外设之间的桥梁。(外设指的就是输入设备,输出设备,例如:磁盘,显卡,网卡,键盘,显示器等等。)
由于CPU的运算速度非常快,是一般的外设的很多很多倍,如果外设与CPU直接沟通那么可想而知,外设会大大的拉低了CPU的速度,就如同木桶效应一般,一个木桶能装多少水是由最短的木板决定的。
内存在CPU与外设之间起到了一个缓冲的作用,内存的速度相比外设是非常快的,与CPU相比还是比较慢的,但是至少比外设快很多。在处理数据时,内存会把外设中的部分数据提前加载到内存中,以供CPU处理。
这里不得不说的就是局部性原理: 根据统计学原理,当一个数据正在被访问时,那么下一次有很大的可能会访问其周围的数据。所以当CPU需要获取某一行数据时,内存可以将该行数据周围的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接在内存中拿数据。
关于冯诺依曼体系需要强调的几点:
- 这里的存储器指的是内存
- 不考虑缓存的情况,这里的CPU能且只能对内存进行读写,不能访问外设
- 外设要输入或输出数据,也只能写入内存或从内存中读取
- 总之,所有的设备都只能和内存打交道
现在你应该明白为什么我们编写的可执行程序在运行前要先加载到内存,是因为程序的运行是要通过CPU对其处理,而CPU只会和内存打交道。
二,操作系统的概念
任何的计算机系统都包括一个基本的程序集合,成为操作系统(OS)。
笼统的理解操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
三,设计操作系统的目的
- 与硬件交互,管理所有的软硬件资源
- 为用户提供一个良好的执行环境
三,操作系统在计算机体系中的定位
操作系统是一款管理软硬件资源的软件
首先,计算机的最底层是一些硬件,它们之间形成冯诺依曼体系结构。
但是,单单靠他们是完成不了工作的,需要一个软件来管理他们。
例如:我们上述介绍的内存会加载输入设备中的数据,但它是何时加载?又是加载多少的呢?没有东西管理它,他是无法完成工作的,而管理他们的软件就是操作系统(Operator System)。
但是,OS并不是与底层的硬件进行直接交流的,例如,如果操作系统完成键盘的读取操作,那么只要你的键盘读取方式进行了改变,那么操作系统的内核源代码就需要进行重新编译,这对操作系统来说维护的成本太高了。
于是在硬件和操作系统之间增加一层硬件驱动,驱动层的主要工作就是单独去控制底层硬件的。例如:键盘有键盘驱动,显卡有显卡驱动,网卡有网卡驱动,硬盘有硬盘驱动。驱动简单的来说就是去访问某个硬件,访问这个硬件的读,写以及硬件的状态等等,驱动层就是直接和硬件打交道的。而驱动一般是由硬件制造厂商提供的,或是由操作系统相关的模块进行开发的。
此时,操作系统就只需要关心何时去读取数据,而不用关心具体是怎么去读取数据的,这就完成了操作系统与硬件之间的解耦。
操作系统的主要工作:
- 进程管理
- 内存管理
- 文件管理
- 驱动管理
操作系统对下是这样进行管理的,但是对上它又做了些什么呢?
操作系统会直接让用户去操作它去管理硬件嘛?答案肯定是不会的。
操作系统是一个很谨慎的软件,它不会将自己暴露给用户,而是通过系统调用接口的方式对上提供服务,这就和现实生活中银行很像,银行里都会有一大面玻璃墙,还会提供许多服务窗口,银行通过这些窗口对外进行服务。
银行这样做是因为,它既要对外提供服务,但是也要保护自身的安全,万一哪个去银行办理业务的人是个坏人怎么办。
操作系统也是这样,为了防止别人的破坏,它对外提供服务的方式是暴露在外面一些系统接口。
对与系统接口的使用只有小部分的专业人士才会,所以在系统接口上面还有一层,例如:shell命令行解释器,GUI图形化界面,函数库等,来帮助人们去调用系统接口的程序。
建立在这样的基础上,用户才可以得心应手的使用计算机,用户是最上面的一层。
可以看到,计算机的体系实际上一个层状结构。
四,操作系统是如何进行管理的
提到操作系统是如何管理软硬件资源的,先从一个例子入手,校领导是如何管理学生的?
一个大学里面至少有1万名学生,如果校长是去和每个学生直接交流进行管理的,那得管理到猴年马月,这想想就是不现实的。
校长的手里有我们每个人的数据,他是通过我们们数据对我们进行管理的,例如校长有一天找到了计算机学院的导员,告诉他要对学院前几名的学生进行表彰,难道校长会去一个一个看每个人的成绩最后找出来前几名嘛?显然不是,他手里有学生的数据,假如校长是一个懂计算机的校长,他根据学生的共同特征,创建了一个这样的结构体,里面包括姓名,学号,学分,绩点等等,这样每个同学在校长的眼里就是一个个的结构体,有了这么多结构体,怎么去查询成绩前几名的学生呢?答案是将这些结构体组织起来,比如说用链表这个数据结构存储起来,然后通过对链表的遍历找到要表彰的学生。
校长对学生的管理,其实管理的是学生们的数据。学生就好比计算机中的硬件,校长就是操作系统,硬件驱动就是辅导员,校长根本不关心它的命令是如何去实现的,他只关心他的决策是什么,至于如何实施那是辅导员的事情。
操作系统其实就是校长的角色,是一个管理者的角色,他不会直接去和硬件进行交流,而是它的手里掌握的硬件的数据,它通过硬件的数据去管理硬件,至于实施的具体步骤是硬件驱动完成的。
总结为一句话就是:操作系统进行管理是通过先描述再组织进行的,描述就是把每个软硬件描述为一个结构体,再把这些结构体组织起来进行管理的。