章节1:概述
1.0.0 抽象层次
软件通常在某一层中实现,底层为高层提供支撑。很好理解,Kernel可以通过System Call操作Hardware;Libraries通常是Kernel提供的System Call的带缓冲区的函数封装如:exit和_exit函数;UI是在Libraries和Kernel的基础上编写出的让人方便使用的人机交互界面;Applications则进一步使用UI中提供的某些方法实现具体的可视化软件功能。
OS的内核态和用户态:内核以内核模式运行因此有全部的操作系统权限可以执行全部的指令,但在一般情况下为了保障系统稳定性与安全性当前的OS会设定用户态只开放一定的指令权限,像编译器、编辑器、Shell、链接器、浏览器等都是在用户态下运行的。比如系统的I/O必须在内核态下执行,那么很显然我们写的程序是不可以直接进行I/O操作的,如果要进行I/O操作就要要求OS帮我们执行I/O操作,OS有一个用户态向内核态的转变,处理完成后再转回来。
Kernel的分层:a. 文件和文件系统;b. I/O;c. 设备驱动程序;
1.1 什么是操作系统
如上所述,操作系统通过提供更高级别的虚拟计算机来提高抽象级别。操作系统的第二个主要目标是管理该虚拟计算机提供的资源。
操作系统是裸机上的第一层软件,它直接控制、管理各种硬件资源,其目的是方便用户使用计算机系统和提高计算机系统资源利用率。
1.1.0 OS作为高层次的抽象虚拟机The Operating System as an Extended Machine
内核本身提高了抽象的层次,并隐藏了细节。例如,用户(内核)可以write()文件(硬件中不存在的概念),并且无需知道该文件是否位于固态磁盘 (SSD)、内部 SCSI 磁盘或Web服务器上。用户还可以忽略文件是连续存储还是被分成块等问题。
1.1.1 OS是资源管理员The Operating System as a Resource Manager
内核必须管理资源以处理争用和解决用户(计算机用户)之间的冲突。通常,资源在用户之间共享或多路复用。这可以采取时间多路复用的形式,即用户轮流(例如处理器资源的时间片轮转)或空间多路复用,每个用户获得资源的一部分(例如磁盘驱动器,分盘)。
1.1.2 多道编程的困难 Multiprogramming
并发的活动可以在时间依赖方式中交互,这使得使用系统测试定位错误实际上是不可能的,这就是为什么让操作系统变得可靠是一件很困难的事。
1.3 系统硬件复习
1.3.1 BUS(总线)
总线是连接两个或多个设备的一组电线,一次只能在总线上发送一条消息且所有与总线相连的设备都会收到消息,总线并不能引导消息到它想到达的目的地,但是通常一些线路会生成一个地址来只是哪些设备需要处理消息。
1.3.2 Processors(处理器)
1.3.3 Memory(主存储器)
此处只谈内存不谈缓存,计算机中有一套速度由快至慢的缓存系统,规律就是速度越快容量越小,速度越慢容量越大。
系统的*内存简称为RAM(随机访问内存),需要注意的是RAM是易失的,即在断电之后RAM中的数据会丢失,而已经写入Disk的数据则不会。因此当计算机重新通电后RAM中会包含一定的垃圾,所以当电源接通后的第一条指令不能来自于RAM。
ROM(Read Only Memory)只读存储器:在现在的计算机中可直接理解为类似于硬盘的存储介质。从名字来看就很容易理解,ReadOnly就是不能Write,所以当其中被写入数据后是不能被更改的,如光盘CD,它的特性使得计算机打开时的第一个指令应当来自于ROM。
当ROM的数据中需要更改时,必须系统更新;修复固件错误等需要修改ROM内容的操作时,产生了新的PROM(Programmable Read Only Memory),例子是CD-R,即出场是空白光盘,但是可以被用户烧录一次,烧录一次之后不可再次更改,俗称刻光盘。
进一步延申那么一个光盘只刻一次那么如果有错就没用了,其实这样非常浪费资源,所以进一步又发明了EPROM(Erasable PROM),例子是CD-RW就是可重复擦写的光盘但是要用紫外线擦除。而后又进一步发明了EEPROM(Electrically EPROM),可以更加方便的执行擦除和写入操作,带电即可。
内存保护和上下文切换 Memory Protection and Context Switching
显而易见的是一个多道批处理系统中,系统会并行处理多个程序,那么在多个程序同时运行的过程中需要保证每个程序不会受到其余程序的干扰。因此我们需要将虚拟地址转换为实际的物理地址,这样的话在每个时间点上不同程序的物理地址是不冲突的。用于执行虚拟地址到物理地址的翻译器叫做MMU(Memory Management Unit)。
系统的上下文切换是当系统中运行的一个进程切换到另一个进程时所有的虚拟地址都需要转换为新进程的物理地址,这回耗费一定的系统资源。
1.3.3 Disks(磁盘)
当我们实际执行IO操作时,磁盘是由以下一些组件构成的:
盘片Platter-盘面Surface-磁头Head-磁道Track-扇区Sector-柱面Cylinder;
寻道时间Seek Time-旋转延迟Rotational Latency-传输时间Transfer Time;
- 磁头(Heads):每个磁头对应一个磁盘面,负责该磁盘面上的数据的读写;
- 磁道(Track):每个盘面会围绕圆心划分出多个同心圆圈,每个圆圈叫做一个磁道;
- 柱面(Cylinders):所有盘片上的同一位置的磁道组成的立体叫做一个柱面;
- 扇区(Sector):以磁道为单位管理磁盘仍然太大,所以又把每个磁道划分出了多个扇区;
- 寻道时间(Seek Time):是指移动到数据(扇区)所在的磁道上的时间,最长寻道时间是移动到最里面(或者最外面)的扇区,最小寻道是指移动到相邻的扇区。磁盘的平均寻道时间是3~15ms;
- 旋转延迟(Rotational Latency):是数据所在的扇区移动到磁道下面所需的时间。旋转延迟时间和磁盘的转速有关,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms;
- 传输时间(Transfer Time):从磁盘上把数据传输的主机接口的时间,和主机连接磁盘的接口和类型有关,和磁盘的传输率有关;
设备控制器(Device Controller):计算机挂接的多个IO设备需要一个设备控制器进行管理,比如同时连接的鼠标、键盘、机械硬盘、耳麦等全都挂接在南桥的IO总线上,要将系统的指令转换为设备所需的内容就需要设备控制器提供的功能。
SSD(Solid State Disks)固态硬盘:可以直接理解为速度更快无需寻道的一种硬盘,其本质是使用方块内电子移动产生的电压差异记录数据,但是固态硬盘的寿命是有限的,每个各自有固定的上限擦写次数。
磁带(Tapes):已经快淘汰了,虽然可以重复擦写数据但是问题是它不支持随机位置读写,但是它是一种成本低并且可以长时间保存数据的一种很好的方式,甚至优于机械硬盘。
1.3.4 I/O设备
除了刚才提到的磁盘和磁带外,I/O 设备还包括监视器(及其关联的图形控制器)、NICs(网络接口控制器)、调制解调器、键盘、鼠标等。
操作系统与设备控制器通信,而不是与设备本身通信。对于每个不同的控制器,操作系统中都包含相应的设备驱动程序。请注意,例如,许多不同的图形控制器能够控制标准监视器,因此操作系统需要许多图形设备驱动程序。
操作系统如何感知IO的完成?
- OS可以繁忙等待,即一直询问控制器I/O是否结束。这是最简单的方法但是他的效率非常的低,也可以称之为PIO(Programmed I/O);
- OS可以让设备控制器启动I/O,然后OS自己去做别的事,然后当I/O结束时设备控制器会触发一个系统中断,告知OS I/O已经执行完毕。这种方法可以让OS在I/O时去做别的事情,但是一次系统中断的成本仍然非常高昂;
- 一些控制器可以有直接内存访问(Direct Memory Access)的权限,那么这些控制器就可以在CPU让他们工作后直接处理内存,这样DMA控制器就减轻了一定的CPU的工作并且是总线的访问次数减半;
1.3.5 Booting the Computer 启动计算机
当按下电源按钮时,控制信号从主板的BIOS开始控制系统中的PROM,接着这个信号到达MBR(Master Boot Record),这是主磁盘上的第一个512字节块。然后控制信号进一步发送到活动分区中的第一个块,然后从此处启动操作系统。
1.4 OS Zoo 各种各样的操作系统
总而言之的确现在也没啥特别多的操作系统,Windows,Linux(Ubuntu),Unix(IOS)。
1.4.1 Mainframe Operating Systems 大型机操作系统
这些系统用于数据中心,具有非常强大的I/O功能和广泛的容错性。
1.4.2 Server Operating Systems 服务器操作系统
也许当今最重要的服务器是 Web 服务器。同样,I/O(和网络)性能至关重要。
1.4.3 Multiprocessor Operating Systems 多处理器操作系统
多处理器(与多计算机或多计算机或计算机网络或网格相反)意味着多个处理器共享内存,并由操作系统的单个实例控制,该实例通常可以在任何处理器上运行。通常它可以同时运行几个。多处理器几乎从计算机时代开始就存在,但现在并不新奇。
分布式操作系统(Distributed Operating System):控制多台计算机系统的操作系统通常被归类为网络操作系统或分布式操作系统。前者基本上是局域网上使用 PC 操作系统上可用的网络设施的普通 PC 的集合。分布式操作系统是上述更复杂、更无缝的版本,处理器之间的边界几乎为用户所看不到(性能除外)。
1.4.4 PC Operating Systems 个人计算机操作系统
在过去,一些操作系统(例如ME)被认为是为客户端操作量身定制的。其他人则认为他们被限制在客户操作范围内。现在这一切似乎都过去了;一个现代的PC操作系统功能齐全。但是出于市场原因,某些功能可能会被禁用。
1.4.5 Handheld Computer Operating Systems 手持计算机操作系统
这包括手机,这一类与上面的类之间的唯一真正区别是对非常有限的内存和非常低的功耗的限制。然而现在手机的内存越来越大,一些手机现在包括一个精简的linux。Android、IOS、塞班。
1.4.6 Embedded Operating Systems 嵌入式操作系统
操作系统是设备的一部分,例如微波炉和心脏监测器。操作系统在ROM上,所以没有改变。因为没有运行用户代码,所以保护就不那么重要了。在这方面,操作系统与最早的计算机相似,嵌入式操作系统在商业上非常重要,但在本课程中没有涉及太多。
1.4.7 Sensor Node Operating Systems 传感器节点操作系统
这些嵌入式系统还包含传感器和通信设备,以便某个地区的系统能够合作。
1.4.8 Real-time Operating Systems 实时操作系统
顾名思义,时间(更准确地说是及时性)是一个重要的考虑因素。有两类:软实时vs硬实时。在后者中,错过最后期限是致命的错误——有时是字面上的错误。在商业上非常重要,但在这门课上讲得不多。
1.4.9 Smart Card Operating Systems 智能卡操作系统
功耗和权限都非常有限。