引子
大概是这学期初的时候开始就很想学操作系统,但是因为种种原因,一直拖着没学。前两天刚考完期中,运气比较好及格了,课业压力总算是减轻了一些;对于操作系统的学习,学长们给我推荐的都是《操作系统真相还原》和MIT的公开课和实验,但是我手边并没有《操作系统真相还原》,iPad上倒是有电子版,但碍于电子版读起来总是不舒服。还有就是MIT的公开课没有中文字幕,虽说我曾经是英语专业,但硬听英文课这种留学生水平还是没达到的。于是我就从协会拿了一本《现代操作系统》,之前有在cj学长的博客里看到说这本书晦涩难懂,但是我的感觉还不错,从一啃上这本书开始就感觉很有兴趣往下看。打算先把这个看完,然后在暑假里再跟着《操作系统真相还原》搭建一个操作系统。
OK废话一大堆,总之就是我很开心,开始着手一直想学的操作系统了,这篇文章将作为读书笔记。
引论
其实看完这本书的引论部分我就已经学到(或者浅层了解了)以前一直想学的一些概念。
什么是操作系统
简单来说,操作系统是一种运行在内核态的软件,其任务是为应用程序员(应用程序)提供一个资源集的清晰抽象,并管理这些硬件资源。这个很好理解,如果没有操作系统,我们不可能对着一堆硬件玩。
作为扩展机器的操作系统:
操作系统通过提供了一些抽象,比如文件、接口这些来对底层硬件如硬盘等进行操作。抽象是管理复杂性的一个关键。好的抽象可以把一个几乎不可能管理的任务划分为两个可管理的部分。第一部分是抽象的定义和实现,第二部分是随时用这些抽象来解决问题。硬件是丑陋的,操作系统自身通过实现向下对接硬件的丑陋接口和给应用层提供简洁清晰的美丽接口,承载着整个计算机的运行。
作为资源管理者的操作系统
上述 操作系统提供抽象 的说法是一种自顶向下的观点,我们从应用层看到的是这些美丽的抽象。那么我们自底向上可以看到的是操作系统对资源的管理。资源也就是各种计算机相关硬件,当一个计算机(或网络)有多个用户时,处理不同用户之间的资源,使之不互相干扰,这是操作系统做的很重要的一件事。资源管理的实现是资源多路复用,主要方式是空间复用和时间复用。具体描述不展开了。
操作系统的历史
从古老到现代,这部分就跳过了不重要
计算机硬件简介
一台简单的PC硬件结构大概是CPU、内存以及IO设备都由一条系统总线连接起来并通过总线与其他设备通信。现代的PC还有多重总线等。
处理器
CPU,每个CPU基本周期中,首先从内存中取出指令,解码以确定其类型和操作数,接着执行之,然后下一条。
每个CPU都有一套可执行的专门指令集,也就是常说的x86、ARM这些,x86不能处理ARM,vise versa。
与CPU紧密相关的还有寄存器,寄存器位于CPU内部,用于保存关键变量和临时数据。(其实也就是程序执行流,pwn的核心其实就是控制各个寄存器,劫持程序流以提权等)。一些常见的堆栈寄存器看过汇编语言就都很熟悉了,rax,rdi这种。还有一些特殊的寄存器比如程序计数器,书上说的是保存了下一条指令的地址,(其实也就是ip寄存器)。堆栈指针,记录栈顶(rsp)。程序状态字,这个不太熟,但是其作用是记录条件位码、CPU优先级、模式(用户态或内核态),以及其他各种控制位。
操作系统必须知晓所有寄存器。在时间多路复用CPU中尤其关键。为了改善性能,CPU采用流水线机制,就是在执行指令n时,解码指令n+1,读取指令n+2,可以提高效率。另外还有超标量CPU,不详细讲了
多数CPU拥有两种模式,内核态、用户态。在PSW(程序状态字)中有一个二进制位控制。用户使用系统调用来陷入内核并调用操作系统。关键指令是TRAP,将用户态切换成内核态并启用操作系统。
储存器
自顶向下分别是 寄存器 -> 高速缓存 -> 主存 -> 磁盘 访问时间逐渐减慢,容量逐渐增大。
磁盘
详细结构就不描述了,每一层一个磁道,每个磁道划分为若干扇区。需要注意的是固态硬盘不是磁盘。
IO设备
IO设备分为设备控制器和设备其本身。控制器是电路板上的一块或一组芯片。它从操作系统读取命令并物理的控制设备。控制器的作用可以理解成是提供一个简单的复杂接口。控制器中装的往往是一个小型的嵌入式计算机。每个设备需要在操作系统中装入驱动程序,并在内核态运行驱动程序。把设备驱动器装入操作系统有三个途径。一是将内核与设备驱动程序重新链接,然后重启动系统(unix)。第二个是在操作系统文件中设置一个入口,并通知该文件需要一个设备驱动程序,然后重启系统。启动的时候寻找驱动程序并装载(windows)。第三种是运行时接受新设备驱动并装好,无需重启。书上说的是这种方式现在(书编写的时候)采用的较少,可是在现在看来却是最常见的了。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !