操作系统
计算机的操作系统把硬件和软件紧密地 结合在一起,它是其他软件依附的基础,并且允许我们编写与机器进行交互的程序
操作系统的角色
早在第一代软件开发的默契,程序员就分文编写工具以帮助他人的程序员和使用工具解决问题的程序员
现代软件可以分为两类,即应用软件和系统软件。
计算机的操作系统是系统软件的核心
应用软件:帮助我们解决现实世界问题的程序
系统软件:管理计算机系统并与软件进行交互的程序
操作系统:管理计算机资源并未系统交互提供界面的系统软件
操作系统负责管理资源,而这些资源通常是由使用他们的程序共享的。
内存、进程与CPU管理
多道程序设计:同时在主存中驻留多个程序,由他们竞争CPU的技术
内存管理:了解主存中载有多少个程序以及他们的位置的动作
进程:程序执行过程中的动态表示法
进程管理:了解活动进程的信息的动作
CPU调度:确定主存中的那个进程可以访问CPU以便执行的动作
批处理
程序和系统指令集合在一起,称为作业
现代操作系统中的批处理概念允许用户把一组OS命令定义为一个批文件,以控制一个大型程序或一组交互程序的处理
分时
分时:多个交互用户同时共享CPU时间的系统
虚拟机:分时系统创建的每个用户都有专有机器的假象
主机:一个大型的多用户计算机,通常与早期的分时系统有关
哑终端:在早期的分时系统中用户用于访问主机的一套显示器和键盘
前提是CPU足够快,能够处理多个用户的请求并不使任何用户发现自己在等待。
当系统负荷过重时,每个用户的机器看起来都慢了
其他OS要素
操作系统的最后一个要素是需要支持实时系统,所谓实时系统,就是必须给用户提供最少响应时间的系统。
内存管理
操作系统必须采用下列技术:
·跟踪一个程序驻留在内存的什么位置以及是如何驻留的
·把逻辑程序地址转换成实际的内存地址
逻辑地址:对一个存储值的引用,是相对于引用它的程序的。
物理地址:主存储设备中的真实地址
逻辑地址和物理地址间的映射叫做地址联编。
单块内存管理
假设内存中只有两个程序-操作系统和要执行的应用程序。我们把主存分为两部分,每个程序占一部分。曹组系统得到了所需要的空间,余下的分配给了应用程序。
只知道程序的起始地址A,就可以把逻辑地址转换成物理地址。
内存管理机制必须考虑安全问题。必须防止一个程序访问未分配给它的内存空间。
如果把操作系统移到程序之后,就必须确保逻辑地址不会访问操作系统的内存空间。
单块内存管理法的有点在于实现和管理都比较简单,单却大大浪费了内存空间和CPU时间。
分区内存管理
一旦允许多个程序在内存中,操作系统的工作就是确保一个程序不会访问另一个程序的内存空间。
有两种划分内存的方法,即固定分区法和动态分区法。
固定分区法:把内存分成特定数目的分区以载入程序的内存管理方法。
动态分区法:根据容纳程序的需要对内存分区的内存管理方法。
固定分区和动态分区的地址联编基本上是一样的。OS处理地址转换细节的方式有很多,一种方法是使用CPU中的两个专用寄存器帮助管理寻址。当CPU开始运行一个程序是,OS将把程序的分区其实地址存储到基址寄存器中。同样,翻去的长度将被存入界限寄存器。当逻辑地址被引用是,首先它将与界限寄存器中的值进行比较,确保改引用属于分配给程序的内存空间。如果是这样,那么逻辑地址的值将被加到基址寄存器中的值上,以生成物理地址。
·最先匹配,即把第一个足够容纳程序的分区分配给它
·最佳匹配,即把最小的能够容纳程序的分区分配给它
·最差匹配,即把最大的能够容纳程序的分区分配给它
最先匹配和最佳匹配适用于固定分区。但在动态分区中 ,最差匹配往往是最有用的。
当程序终止是,分区表将被更新,以反映这个分区现在是空白的,新程序可以使用他了。在动态分区中,连续的空白分区讲被合并成一个大的空白分区。
在动态分区中,作业可以在内存中移动,以创建较大的空白分区。这个过程叫做压缩。
页式内存管理
在页式内存管理发中,内存被分成小的大小固定的存储块,叫做帧。进程被划分成为页。
一个进程的也可能是四处散落的、无序的。
页映射表:操作系统用于记录页和帧之间的关系的表
地址被转换成两个值--页编号和偏移量。
分页的优点在于不必再把进程存储在连续的内存空间中。这种分割进程的能力把为进程寻找一大块可用空间的问题转化成立寻找足够多的小块内存。
页式内存管理思想的一个重要扩展是请求分页思想。
当引用一个页面时,首先要看他是否已经在内存中了,如果该页面在内存中,就完成访问,否在,要在二级存储设备把这个页面载入可用的帧,然后再完成访问,
页面交换:把一个页面从二级存储设备载入内存,通常会是另一个页面从内存中删除。-
虚拟内存:由于整个程序不必同时处于内存而造成的内存大小没有限制的假象。
当一个程序等待页面交换时,另一个进程接管CPU的控制,这种开销是可以接受的。页面交换过多叫做系统颠簸,会严重降低系统的性能。
进程管理
操作系统必须管理的另一个重要资源是每个进程使用的CPU时间。
进程状态
进入系统、准备执行、执行、等待资源以及执行结束
进程控制块
操作系统必须为每个活动管理大量的数据。这些数据通常存储在成为进程控制块(PCB)的数据结构中。
PCB存储了有关进程的各种信息
PCB还存储了在其他所有CPU寄存器中的值。
上下文切换:当一个进程移出CPU,另一个进程取代它时发生的寄存器信息交换。
PCB还要维护有过CPU调度的信息。
PCB还具有核算信息,如账户、时间限制以及迄今为止使用CPU时间。
CPU调度
非抢先调度:当当前执行的程序资源放弃了CPU时发生的CPU调度。
抢险调度:当执行系统决定照顾另一个进程而抢占当前执行进程的CPU 资源时发生的CPU调度
周转周期:从进程进入准备就绪状态到他最终完成之间的时间间隔,是评估CPU调度算法的标准
先到先服务
进程按照它们到达运行状态的顺序转移到CPU。FCFS调度是非抢先的。
最短作业优先
SJN算法是基于围栏信息的。但是由于我们不可能绝对地明了未来,所以只能猜测并且希望这种猜测是正确的。
轮询法
CPU的轮询法将处理时间平均分配给所有准备就绪的进程。
时间片:在CPU轮询算法中分配给每个程序的时间量。
轮询算法是抢先的。时间片到期,进程就会被强制移出CPU。
CPU的轮询算法可能是应用最广泛的,它一般支持所有的作业,被认为是最公平的算法。
文件系统和目录
操作系统要管理的另一个关键资源是二级存储设备,通常是磁盘。
文件系统
主存具有易失性,关掉电源后存储在主存的信息就会丢失。因此,我们用二级存储设备来永久存储数据。
文件:数据的有名集合,用于二级存储设备
文件系统:操作系统为他管理的文件提供的逻辑视图。
目录:文件的有名分组。
文本文件和二进制文件
文本文件:包含字符的文件
二进制文件:包含塔顶格式的数据的文件,要求给位串一个特定的解释
文件类型
文档中包含的信息的种类叫作文件类型
文件名通常由点号分为两部分,即主文件名和文件扩展名。
根据文件类型,操作系统可以按照对文件有效的方式操作它,这样就大大简化了用户的操作。
有些文件拓展名是默认与特定的程序关联在一起的。
文件操作
要创建一个文件,操作系统需要先在文件系统中为文件内容找一块可用空间,然后把文件的条目加入正确的目录表中,记录问价的名字和位置。
操作系统运行用户打开文件以便写操作或读操作,但不允许同时进行两项操作。
文件访问
顺序访问法和直接访问法
顺序文件访问:以现行方式访问文件中的数据的方法
直接文件访问:通过制定逻辑记录编号直接访问文件中的数据的方法
文件保护
在多用户系统中,文件保护的重要性居于首要地位。
UNIX系统文件保护有三类,即Owner/Group和World
每个文件都由一个特定用户所拥有,通常是文件的创建者
一个关联组中的用户都具有Group许可
World许可把访问权给予了最大数量的用户
没有用户具有改文件的执行特权,因为它是一个数据文件,不是一个可执行文件。
目录
大多数操作系统都用文件表示目录。
目录中存放由文件名、文件类型、文件存储在硬盘上的地址以及文件当前大小
目录树
包含其他目录的目录叫做父目录,被包含的目录叫做子目录。最高层的目录叫做根目录。
个人计算机通常使用文件夹来表示目录结构。
嵌套的目录结构允许存在多个同名目录
工作目录:当前活动的目录
路径名
要用文本指示一个特定的文件,必须说明该文件的路径。
绝对路径:从根目录开始,包括所有后继子目录的路径
相对路径:从当前工作目录开始的路径
磁盘调度
最重要的二级存储设备是磁盘驱动器
磁盘调度:决定先满足哪个磁盘I/O请求的操作
寻道时间,读写头到达指定柱面所花费的时间。等待时间是盘片旋转到正确的位置以便能读写数据所花费的时间。
先到先服务磁盘调度法
FCFS算法
最短寻道时间优先磁盘调度法
假设已有的请求还未解决,而心的请求仍然源源不断地到来,并且新请求将永远得不到满足,因为不断到来的请求总有优先全。这种情况叫做饿死。
SCAN磁盘调度法
从编号小到大再到小
问题
最短作业优先中,如何确定未来是多久?
在最短作业优先中,会不会出现饿死情况?