本随笔内容主要是记录学堂在线的操作系统课的一些知识点。
预备知识:
- C、汇编语言
- 计算机结构(8086)
- 数据结构
基本上上面所说的预备知识都是计算机相关专业的基础课程了,不必多提。
参考书:
- Operating System Concepts (9th Edition), John Wiley & Sons, 2012, Abraham Silberschatz等著
- 操作系统概念(第七版),Silberschatz等著(和上面一本是同一本,只是被翻译成了中文)
- Operating Systems-Internals and Design Principles (8th Edition), Prentice Hall, 2011, William Stallings等著
- 操作系统——精髓与设计原理(第七版)(同上)
英文版的电子版书籍可以去libgen找找,这里就不放了,如果可以的话还是建议入正,毕竟……可以炫富(并不是)。
大致的教学内容:
基本概念
操作系统的概念
操作系统的定义不存在公认的精确定义。不过可以这样解释:
下图主要用来说明操作系统的地位:
例如,如果你是用户,那么你只关心应用程序的使用,而不会关心系统应用和操作系统的实现。操作系统就夹在硬件和系统应用之间,对应上面说的,类似于一种作为软件和硬件之间的管理/协调者的地位。
上图表明,操作系统就是用来隔离软件和硬件的,对上层(软件)提供常见的资源,例如线程,对下层则是一种管理者的角色,管理硬件上的操作。
总的来说,操作系统本身就相当于是一种软件,具体而言可以按下图这样分类:
操作系统的组成:
操作系统和外部(用户)的关系:
上图的说明:操作系统提供用户接口和应用,用户使用这些接口和应用。
课程用的ucore的内核:
操作系统内核的特征:
- 并发:计算机系统中同时存在多个运行的程序,需要OS管理和调度
- 共享:多个应用可以“同时”访问资源;互斥共享即在微观上,应用访问的资源是不同的,互斥的,某个应用访问的资源不能让另一个应用去访问
- 虚拟:利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
- 异步:程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知;只要运行环境相同,OS需要保证程序运行的结果也要相同
操作系统的例子
Unix家族
Linux
Linux与Unix是同一类,他们的API是兼容或者相似的(向教授说的……我对Unix的了解基本为零,查了查,只能确认的是Linux是Unix的模仿——这点从他的名字可以看出来,Linux Is Not UniX,即Linux,程序员界的烂俗递归笑话——所以我目前还不能确定是不是确实是兼容的,不过既然是模仿,那么大概率是相似的了。不过知乎上有人提到了是兼容的,如下图)。
瘟到死家族(大雾)
操作系统的演变
单用户系统诞生在早期,这个时期的操作系统的目的主要是提高利用率:
这段时期的执行方式主要是顺序执行,即一个个来处理任务:
但是很多时候任务是可以绑定在一起一次性处理的(就好像国庆7天的作业可以绑定在最后一天写完),于是就有了批处理:
为了进一步提高利用率就提出了多道系统:
原本是在程序运行过程中必须要一步步运行:
但是因为有些时候程序的某些步骤其实是受外围设备的速度限制的,这时候的CPU反而是空闲的,所以为了能够提高利用率就可以让CPU在这段空闲的时间段里处理其他任务。
再进一步提升就到了分时系统:
就是每个程序交替运行,注意图中的timer interrupt,即是用定时器中断来控制切换执行哪个程序(就好像你在开车的时候一边打电话一边抡方向盘一边吼孩子让他不要把头伸出窗外那样)。
再进一步发展后,因为硬件性能的提升和价格的降低,利用率不再是关注点,于是产生了:
然后因为网络的发展,就诞生了:
可以总结为下图:
操作系统结构
简单结构
分层结构
分层结构使得操作系统的可移植性成为了可能。ucore系统就是分层结构。
分层结构的缺陷在于随着层次的增加依赖关系会越来越复杂,导致越来越臃肿,效率越来越低。因此提出了:
微内核结构
现在大部分系统都是微内核和分层的混合体。
外核结构
相当于只让内核起到一种隔离硬件软件的作用,负责分配资源,但是具体怎么处理资源则由程序来决定。原来操作系统的功能就通过操作系统库来实现。有点类似虚拟机的结构。
VMM(虚拟机管理器)
此时管理器负责资源隔离,操作系统负责资源的管理。