首先声明这里的文字都是我个人的一些菜鸟型的思考,没有任何保证,不喜勿喷!
这个学期学习操作系统,有点喜欢,写系列文章记之!先做一些理论复习,后结合minix谈!
用的是现代操作系统,第一章无非是对于操作系统的一些历史探索:
学习操作系统前,首先提出一个问题,什么是操作系统?为什么会有操作系统这样一个东西存在?
我觉得明白这点是很重要的,你不知道这个东西有什么意义,一味的跟着老师学,最后越学越怀疑自己,你TMD到底在学什么?我们先假设没有操作系统,这个是可以的,现在的很多嵌入式设备(相当于微型PC)都没有系统,当然很多也可以支持你装系统,但是如果没有系统会怎么样?我们习惯了在windows下写东西以至于我们忽略了为何存在这样一种东西!如果有硬件开发经验的人就知道,你得直接对硬件操作,对于内存的每一个byte你要清楚的知道它的地址,你得往某些外设的寄存器写值,这是非常令人厌烦的工作,而当你的项目需要和现在的这种计算机系统打交道的话,对不起,你可以跳湖自杀了!所以,和硬件直接打交道不是一件让你高兴的事情,同时我们也没有必要这样做,操作系统产生了,它把硬件给包装了,让我们看到的是一个个美丽的api,我们直接调用api,至于底层,我们就不用管了!
不过,你也可以看出,一般写底层的人更牛逼,越靠近底层越繁琐,这样后面的问题我们回答了,当然操作系统还有另外一个层面的功能,下面再说,不过你问我操作系统是什么,这个还真不好定义,不过我归纳操作系统是把硬件抽象为用户提供简单借口同时管理资源分配!
向下,很多操作系统把硬件全部抽象为文件,我们只需要通过操作系统去简单的操控这些文件即可(当然没那么简单),向上,现在的系统往往运行多道程序,每个程序都想访问硬件,这要是乱了怎么办?呵呵,操作系统就会维护这种秩序,所以操作系统为我们和硬件提供了美丽的接口同时让我们的这种交流处于一种规律下!
最后我们不妨称之为抽象者和资源管理者!
我们接着大概介绍一下历史和其他杂七杂八:
首先最早的真空管你就不要想什么操作系统了,那还是机器码时代,到了晶体管时代,严格意义上也没有这个概念,到了集成电路的时候,IBM最早推出了操作系统,开始了一系列的发展,首先比较大的进步是“多道程序设计”的支持,最开始的时候,我们如果在等待I/O,如果这个I/O很繁重,我们必须坐那等,浪费了大部分时间,CPU什么也干不了,这是不能容忍的,我们可以把内存分为好几块,每一部分做不同的事情。后来又提出来分时系统和兼容分时系统,其实这些我们只要了解即可,就不再介绍了,各种各样的操作系统为用户而活,有什么需求,就有什么出现。
操作系统的特点:
共享,我们在操作系统的平台上运行多个程序,这些进程需要访问有限的硬件资源,而我们操作系统要对这些资源做合理的分配和和使用,使资源能被进程轮流使用。
并发,我们希望所有的事情能够一起往前跑,而不是一个个依次跑,这样速度才会快,可是我们无法达到并行(有几个cpu另说),对于单核下我们不能允许一个进程一直霸占着资源,我们希望模拟并行,所谓并发,就是通过时间片轮转,一个个轮流着来,而我们操作系统需要很好的维护这种并发过程。
虚拟,典型的例子就是内存,首先我们不希望直接写到内存某块,这样可能破坏其他数据,我们把用户和真实内存隔开,告诉你有一个多大的虚拟内存,往里面写东西,我来帮你映射到物理内存,这样,我知道怎么分配,用户不知道也不想知道,还是一个接口的意思。
异步性或者说不确定性,现在的多道任务操作系统无法保证你的执行顺序和执行时间,但我们应该保证有确定的结果。
操作系统的体系结构:
虽然操作系统是一个接口,但是作为一个大的系统,它必须分化为许多小的模块来提高效率,不过不同的操作系统,一般结构也会有一些差异!
一般来讲,操作系统可以分为以下几种结构:
《1》整体结构,我们也称为单体结构,此时的操作系统内核,被做成一个大的内核,OS的全部功能都做进内核中,包括调度、文件系统、网络、设备驱动器、存储管理。比如设备驱动管理、资源分配、进程间通信、进程间切换管理、文件系统、存储管理、网络等。单体内核是指在一大块代码中实际包含了所有操作系统功能,并作为一个单一进程运行,具有唯一地址空间。大部分UNIX(包括Linxu)系统都采用的单体内核,这种结构大,等价就是笨拙而且难以理解,但是效率高,这种结构按照服务功能的思想设计。
- 《2》分层结构,操作系统按照一定的功能分层,某个层次的模块只能往下调用,我们一个系统调用通过这种方式一层一层往下走,但是这种结构其实效率偏低,而且另外一方面分层其实并不是一件非常清晰的事情,当然这种分层的结构让操作系统的实现和设计变得很简单,按照资源管理的方式设计,拥有这种有序性让它变得可维护和可靠。
《3》微内核结构,其实现在主要讨论的一般是整体结构和微内核结构,相比于大内核,微内核结构把操作系统分为小的,良好定义的模块,只有其中一个模块--微内核是运行在内核态下的,其他模块作为进程运行在用户态下,这样内核和其他的如驱动程序和服务器是分开的,不会因为某一个驱动或者服务器的bug导致整个系统的崩溃,这就是大内核的不好,容易因为错误死掉,而且大而僵,小内核灵活,当然大内核直接调用某个过程服务相应的请求,而微内核得一层层往下走,陷入到内核,这点倒是和分层结构有点类似,但是分层结构本质还是大的内核,所以大的不规范但是可以快速执行,像美国国会和中国政府一样,各有各的优点,而且微内核现在很重要的一个思想就是机制和策略分离,这样我们可以把机制做得更简单,把内核做得更小,对于用户来讲,我们可以改动系统的非内核部分,实现我们的策略。
《4》所谓虚拟机,通过虚拟化软件,使得一个真实的系统表现为几个或一个不同的虚拟操作系统。
转载于:https://blog.51cto.com/hereandthere/1416832