4.1 操作系统基础知识
4.1.1 操作系统基本概念
操作系统:是管理计算机软硬件资源的程序,同时它又是用户与计算机硬件的接口;操作系统是配置在计算机硬件上的第一层软件,是控制计算机所有操作的软件
4.1.2 操作系统基本功能
@1 处理器管理:
进程状态转换:三种基本状态的转换:就绪、执行、阻塞
- 就绪:满足运行条件。等待CPU,只要获取CPU使用权就可以运行
- 执行:已经获得CPU使用权,正在使用CPU,执行程序代码
- 阻塞:运行中需要其他进程发送某类消息而无法执行代码,直到信息到来才会执行
进程调度:多个进程同时运行,通过算法在多个进程之间均衡分配CPU使用权,即调度
进程互斥与同步:
- 互斥:任何一个时刻,只能有一个进程在运行,同时有多个进程使用一个资源时,只能有一个进程获取使用权,其他进程只能处于等待状态
- 同步:进程在运行时,需要彼此等待和相互通信
@2 存储管理:分为内部存储和外部存储,而存储管理指内存储器的管理
@3 文件管理:以文件为中心对文件进行资源管理,而用户只需要对文件进行操作
@4 设备管理:除CPU以外的所有外部设备称为外围设备
- 与处理器管理接口:用户的输入输出操作出现在进程中,设备管理应向CPU提供读写等命令接口,并且把进程的要求转达给设备驱动机构
- 设备分配与去配:多进程同时运行,造成资源竞争;这时进程向系统提出某个请求,设备管理器必须按照一定的算法把此类外围设备中的一个分配给某个进程;如果同类设备均被占用,则等到设备的使用权
- 并行操作:在多道系统中还需要考虑通道与通道之间、通道与CPU之间的并行操作,在没有通道的情况下,需要设备管理利用中断技术来完成并行操作
- 输入输出控制:与设备和计算机硬件结构紧密相关;在有通道的系统中,需要构造相应的通道程序,启用通道,由通道控制输入输出操作的过程,CPU对通道发出的请求做及时的响应和处理
@5 缓冲区管理:内存和CPU比外围设备速度快很多,为减少外围设备与CPU、内存速度不匹配的问题,系统中设置缓冲区来暂存数据,设备管理负责缓冲区的分配,数据释放和回收等有关管理问题
@6 作业管理与控制:作业管理是指用户一次性提交给计算机去完成的任务,主要任务如下:
- 提供用户界面:用户通过界面使用操作系统,通过“接口”使用计算机,通过用户界面,我们极为便利地使用操作系统
- 作业调度:为提高系统利用率,内存中同时有多个作业处于执行状态,如何根据算法选择作业,使得系统中的作业得以执行,是作业管理要完成的作业调度工作
- 作业善后处理:作业执行完成后,腰围后续作业执行做好准备,(注意:windows系列操作系统取消了作业的概念,基本功能只有进程管理、存储管理、文件管理和设备管理)
4.1.3 操作系统的发展 与变化
操作系统的产生:
- 手工操作阶段:无操作系统,所有工作必须手工完成
- 批处理阶段:将多用户的任务组织在一起,成批处理
- 执行系统阶段:不需全部手工控制,其监督系统可以代替手工控制,即操作系统的雏形
操作系统的完善:
- 批处理操作系统:在监督程序基础上开发出完全控制系统中程序执行及管理硬件的系统程序,这称之为操作系统,所有作业按照既定的顺序依次完成
- 多道批处理操作系统:对批处理系统的改进和提升,减少了系统中的平均等待时间
- 分时操作系统:一个主机连接多个终端设备,采用时间片轮转为每个用户提供服务
- 实时操作系统:优先保证实时性和可靠性,其次是系统效率;规定时间内必须完成任务,否则必须对其做相应的处理
操作系统的发展:
- 网络操作系统:一台计算机为主机,其他的为工作站,网络中个台计算机都有自己的操作系统,而网络操作系统将他们有机组合在一起,用统一的方法管理整个网络中的资源配置 从而达到资源共享,网络操作系统要有很强的通信能力和服务能力
- 分布式操作系统:在网络系统上发展出的新型操作系统,不同在于:分布式操作系统中所有计算机都是主机,没有工作站,并且程序可以分布式执行,即在多台电脑上执行,最后回到用户所在计算机
- 嵌入式操作系统:用于嵌入式系统的操作系统;是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等;嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能;目前在嵌入式领域广泛使用的操作系统有:嵌入式Linux、Windows Embedded、VxWorks等,以及应用在智能手机和平板电脑的Android、iOS等
4.1.4 常见操作系统介绍
常见典型操作系统如下所示:
- Unix:一个通用、交互式、分时多用户并支持网络的操作系统,是可以运行在各种机型(从微机到巨型机在内)上的通用操作系统。主要适用于网络、大中小型机。缺点是软件少,价格贵,难掌握。
- DOS:是单用户、单任务和字符界面的操作系统,主要为16位微型计算机而设计,DOS目前仍在一些微型计算机上运行, 但属于淘汰产品。
- Windows操作系统:特点是:界面图形化,操作便捷、采用多任务机制、支持网络功能、出色的多媒体功能、硬件更容易使用、具有众多应用程序的支持。
- Linux:一个免费、源代码开放、自由传播、类似于Unix的操作系统。它既可以做各种服务器操作系统,也可以安装在微机上,并提供上网软件、文字处理软件、绘图软件、动画软件等,它除了命令操作外还提供了类似Windows风格的图形界面,我国自行开发的有红旗、蓝点Linux、麒麟Linux等;缺点是兼容性差,应用软件安装困难,操作性差,使用不习惯。
- Mac OS:运行于苹果系列微型计算机上的操作系统。苹果机多用于图形领域,它往往代表了潮流和时尚,代表精美的工业设计,但它不兼容Windows软件,所以叫好不叫座。
4.2 进程管理
程序与进程的概念与区别:
- 程序:用户为完成某一个特定问题而编写的操作步骤。
- 进程:可以简单地被看作是正在执行的程序。但是进程需要一定的资源来完成它的任务(例如CPU时间、内存、文件和I/O设备)
进程与程序的区别在于进程是动态的、有生命力的,而程序是静态的。一个程序加载到内存,系统就创建一个进程,程序执行结束后,该进程也就消亡了。在计算机中,由于多个程序共享系统资源,就必然引发对CPU的争夺。如何有效地利用CPU资源,如何在多个请求CPU的进程中选择取舍,这就是进程管理要解决的问题。
4.2.1 进程控制块PCB简介
为了控制进程,操作系统就必须知道进程存储在哪里,以及进程的一些属性。进程控制块是进程实体的一部分,是操作系统中记录进程的专用数据结构。一个新的进程创建时,操作系统就会为该进程建立一个进程控制块;操作系统根据进程控制块对并发进程进行控制。
4.2.2 进程调度及队列图
计算机采用多道程序的目的是使得计算机系统无论何时都有进程运行,单处理器的计算机在某一时刻CPU只能运行一个进程,如果存在多个进程,其它进程就需要等待CPU空闲时才能被调度执行。当一个进程处于等待或CPU时间片用完时,操作系统就会从该进程中拿走CPU控制权,然后再交给其它进程使用,这就是进程的调度。
4.2.3 CPU调度及其准则
在设计CPU调度程序时主要应该考虑的准则包括:
- CPU使用率:让CPU尽可能地忙
- 吞吐量:让CPU在一定时间内完成的进程数尽可能多
- 周转时间:让进程从提交到运行完成的时间尽可能短
- 等待时间:让进程在就绪队列中等待所花时间之和尽可能短
- 响应时间:让进程从提交请求到产生第一响应之间的时间尽可能短
主要的CPU调度算法如下:
- 先到先服务
- 最短作业优先
- 优先权
- 轮转
- 多级队列
- 多级反馈队列
4.2.4 进程的同步与互斥
- 进程的同步就是指相互协作的进程不断调整它们之间的相对速度,以实现共同有序地推进,即允许多个进程并发运行;然而,有些进程之间本身存在某种联系,它们在系统中需要一种协作,以保证进程能正确有序地执行并维护数据的一致性。
- 操作系统中存在着多个进程;而系统中一些资源一次只允许一个进程使用,这类资源被称为临界资源。在进程中访问临界资源的那段程序称为临界区。当一个进程进入临界区执行时,其它进程就不允许进入临界区执行,否则就会导致错误结果。由此得出:多个进程并发执行时,只允许一个进程进入临界区运行,这就是进程的互斥(例如:多个进程在竞争使用打印机时表现为互斥);一个文件可供多个进程共享,其中有一个进程在写操作时,其它进程则不允许同时写或读,表现为互斥
4.2.5 进程的死锁及处理方法
在多道程序设计中,多个进程可能竞争一定数量的资源。一个进程在申请资源时,如果所申请资源不足,该进程就必须处于等待状态。如果所申请的资源被其它进程占有,那么进程的等待状态就可能无法改变,从而形成进程之间相互一直等待的局面,这就是死锁
竞争资源引起死锁的四个必要条件:
- 互斥:任一时刻只能有一个进程独占某一资源,若另一进程申请该资源则需延迟到该资源释放为止。
- 占有并等待:即该进程占有部分资源后还在等待其它资源,而该资源被其它进程占有。
- 非抢占:某进程已占用资源且不主动放弃它所占有的资源时,其它进程不能强占该资源,只有等其完成任务并释放资源。
- 循环等待:在出现死锁的系统中,一定存在这样一个进程链,其中每个进程至少占有其它进程所必需的资源,从而形成一个等待链。
处理死锁问题的三种方式:
- 可使用协议预防和避免死锁,确保系统从不会进入死锁状态。
- 可允许系统进入死锁状态,然后检测出死锁状态,并加以恢复。
- 可忽略进程死锁问题,并假装系统中死锁从来不会发生。即没有必要把精力花在小概率事件上。
处理死锁优先考虑的顺序:先预防和避免;再检测和恢复。
4.3 内存管理
内存是现代操作系统的核心;内存用于容纳操作系统和各种用户进程,是可以被CPU和I/O设备所共同访问的数据仓库。计算机的所有程序运行时都要调入内存。
内存管理的主要工作是:为每个用户进程合理地分配内存,以保证各个进程之间在存储区不发生冲突;当内存不足时,如何把内存和外存结合起来,给用户提供一个比实际内存大得多的虚拟内存,使得程序能顺利执行。内存管理包括内存分配、地址映射、内存保护和扩充。
4.3.1 用户程序执行与地址映射
用户编写程序在执行前,需要多个处理步骤,这些步骤可将源程序转变为二进制机器代码,然后在内存中等待执行。当然有时并非每个步骤都是必需的;通常,将指令和数据的地址映射成内存地址可以发生在以下三个执行阶段:
- 编译阶段:如果在编译时就知道进程将在内存中的什么位置驻留,那么编译器就可以直接以生成绝对地址代码
- 加载阶段: 不知道进程将驻留在什么位置,那么编译器就必须生成程序的逻辑地址,在加载阶段再转变成内存的绝对地址
- 执行阶段:如果进程在执行时可以从一个内存段移动到另一个内存段,那么进程的绝对地址映射工作只能延迟到执行时进行
4.3.2 物理地址空间与逻辑地址空间
- 物理地址:计算机内存单元的真实地址
- 物理地址空间:由物理地址所构成的地址范围
- 逻辑地址:用户程序地址,从0开始编址
- 逻辑地址空间:由逻辑地址所构成的地址范围
- 地址映射:用户程序在运行时要装入内存,这就需要将逻辑地址变换成物理地址,这个过程称为地址映射,也称重定位
用户编写的源程序是不考虑地址的,源程序经CPU编译后产生逻辑地址。从CPU产生的逻辑地址转换为内存中的物理地址的映射是由计算机中被称为内存管理单元的硬件设备来实现的,将逻辑地址与内存管理单元中存放的内存基址相加就得到了物理地址。
4.3.3 进程使用内存的交换技术
为了更加有效地使用内存,进程在不运行时,可以暂时从内存移至外存上,直到需要再运行时再重新调回到内存中。也就是说内存管理程序可将刚刚运行过的进程从内存中换出以释放出占用的内存空间,然后将另一个要运行的进程占据前者释放的内存空间;计算机工作时,为了将多个进程放入到内存就必须考虑在内存中如何放置这些进程。
4.3.4 内存分配方案-连续
对于连续内存分配方案,开始时所有内存是一个大的孔,随着内存分配的进行就会形成位置上不连续的大小不一的孔;在连续内存分配方案中,当新进程需要内存时,为其寻找合适的孔,实现内存分配 ;该方案为每个进程所分配的内存物理地址空间在位置上是连续的
4.3.5 内存分配方案-分页式
@1 分页管理基本思想:
- 内存物理地址空间划分为若干个大小相等的块(页框)
- 进程的逻辑地址空间也划分为同样大小的块(页面)
- 内存分配时每个页面对应地分配一个页框,而一个进程所分得页框在位置上不必是连续的
@2 页表:操作系统为每个用户程序建立一张页表,该表记录用户程序的每个逻辑页面存放在哪一个内存物理页框
4.3.6 虚拟内存方案
虚拟内存是一个容量很大的存储器的逻辑模型,它不是任何实际的物理存储器,它一般是借助硬盘来扩大主存的容量
虚拟内存:对于一个进程来讲,如果仅将当前要运行的几个页面装入内存便可以开始运行,而其余页面可暂时留在磁盘上,待需要时再调入内存,并且调入时也不占用新的内存空间,而是对原来运行过的页面进行置换;这样,就可以在计算机有限的内存中同时驻留多个进程并运行;而对用户来讲感觉到系统提供了足够大的物理内存,而实际上并非真实的,这就是虚拟内存
4.3.7 页面请求与页面置换算法
- 页面请求:在虚拟内存技术中,进程运行时并没有将所有页面装入到内存,在运行过程中进程会不断地请求页面,如果访问的页面已在内存,就继续执行下去;但如果要访问的页面尚未调入到内存,便请求操作系统将所缺页面调入内存,以便进程能继续运行下去。
- 页面置换:如果请求页面调入内存时,分配给该进程的页框已用完,就无法立即装入所请求页面。此时,必须将进程中的某个页面从内存的页框调出到磁盘上,再从磁盘上将所请求的页面调入到内存的该页框中。这个过程叫做页面置换。
4.4 文件管理
文件管理是操作系统最常见的组成部分。文件管理主要提供目录及其文件的管理。
4.4.1 文件的概念
@1 文件:保存在外部存储设备上的相关信息的集合。
@2 文件命名:文件主名+扩展名
@3 文件存取属性:
- 只读:只允许授权用户进行读操作。
- 读写:只允许授权用户进行读和写的操作。
- 文档:允许任何用户进行读写操作。
- 隐藏:不允许用户直接看到文件名。
@4 文件系统:是对文件进行操作和管理的软件,是用户与外存之间的接口。这个系统将所有文件组织成目录结构保存在外存,一个文件对应其中的一个目录条。目录条记录有文件名、文件位置等信息。
@5 操作系统对文件的基本操作包括:创建文件、文件写、文件读、文件重定位、文件删除、文件截短;对文件的其它操作包括:文件复制、重命名、更改属性等
4.4.2 文件的物理结构和逻辑结构
文件结构分物理和逻辑结构;其中:
- 物理结构是文件在外存上的存储组织形式,它与具体的存储设备有关
- 文件逻辑结构是指用户能直接感受到的文件组织结构,它与具体的存储设备无关
有结构和无结构的流式文件:
- 无结构的流式文件:是一维的、连续的、无结构的字符序列,可以看成是由一条无结构的记录组成的文件
- 有结构的记录式文件:是带有结构的、性质相同的记录的集合
顺序文件、索引文件与顺序索引文件:
- 顺序文件:文件所包含的一系列记录按照某种顺序依次连续存储。
- 索引文件:由主文件和索引表构成。可以实现快速访问;按输入记录的先后次序建立数据区和索引表;待全部记录输入完毕后对索引表进行排序,排序后的索引表和主文件一起就形成了索引文件。
- 索引顺序文件:顺序文件和索引文件特点的结合。顺序文件是按主关键字有序排列的,将顺序文件的所有记录分组,索引表中为每组的首记录建立一索引项,组与组之间按关键字大小有序排列,组内记录顺序查找。
4.4.3 文件的访问方式
- 顺序访问方式:主要适合于对顺序文件的访问。其访问的位置是由指针定位的。读操作是读取指针所指示位置的内容,并自动将指针向后移动,以指示下一次读的位置。而对写操作,所写的内容总是添加到文件的尾部;顺序访问方式是基于磁带的模型,不仅适合顺序存储设备(如磁盘),对直接存储设备(如磁盘)也适合。
- 直接访问方式:也称随机访问,它指的是允许跳跃式地随意存取文件中的任何记录,而不需要任何顺序限制。直接访问是最为常见和高效的文件访问方式。直接访问方式是基于磁盘的模型。
- 索引访问方式:在进行文件访问时,首先对索引文件按关键字进行检索,查找到指向数据记录的指针,根据该指针实现对具体数据记录的访问。
4.4.4 文件的目录结构
通常,一个磁盘至少应包含一个分区,每个分区用来保存文件和目录结构
- 文件目录的组成:每个文件有一个文件控制块FCB,它是文件存在的标志,存放了为管理文件所需的所有有关信息;把所有的文件控制块组织在一起,就构成了文件目录,每个文件控制块就是其中的一个目录项
- 文件的目录系统可以组织成单层目录结构、双层目录结构、树型目录结构、无环路目录结构和通用图目录结构
- 树型目录结构是目前使用最为广泛的一种目录结构。这种目录结构在逻辑上的构成是一棵树,子目录是树枝,而文件是树叶。一个用户所拥有的子目录位置不需要统一,在一个子目录下可以再创建子目录
4.5 I/O系统管理
每台计算机都配备了许多外部设备,它们的性能和操作方式都不一样。操作系统对设备(即输入/输出系统)管理的主要目标是:方便用户使用外部设备,提高CPU和设备的利用率。
4.5.1 I/O基本概念
-
端口(port):I/O设备与计算机通信的连接点被称为端口
- 控制器(controller):用于操作端口总线和设备的一组电子器件,是设备与总线的连接装置
4.5.2 输入/输出控制方式
CPU通过端口对外设进行控制的方式有以下几种:
- 程序控制方式:早期计算机采用的方式。CPU向设备控制器发出一条I/O指令启动设备进行一个字节的输入或输出,然后CPU就等待I/O设备进行数据传送,直到一个字节传送完毕。接下来,CPU按以上方式处理下一个字节的输入或输出;CPU绝大部分时间都用于循环等待及测试I/O是否完成,造成CPU资源的极大浪费。CPU和外围设备只能串行工作。
- 中断驱动方式:当某进程要启动某个I/O设备工作时,首先由CPU向相应设备的控制器发出一条I/O命令,然后CPU立即返回继续执行原来的任务,设备控制器则按照命令的要求去控制I/O设备工作。这时,CPU与I/O设备并行工作;这种方式CPU的利用率较高。但这种方式的缺点是在一次数据传送过程中,发生中断次数较多(每次只传送一个字节),这将耗去大量CPU处理时间。
- 直接存储器访问方式:引入设备DMA控制器,在其控制下,以数据块为单位,将数据从设备直接送入内存或相反,当一个或多个数据块传送完毕时才需要CPU干预。该方式CPU的利用率高。
- 通道控制方式:通道控制方式是DMA的发展,它把对每一块数据的读写变成对一组数据块的读写,可以进一步减少CPU的干预。更大程度地提高了系统资源的利用率。
4.5.3 I/O缓冲管理
@1 现代操作系统中,I/O设备与CPU(实际指内存)交换数据时,需要使用缓冲技术。也就是为I/O设备设置缓冲区暂存数据,等到数据积累到一定程度时,再做批量处理
@2 引入缓冲的目的:
- 缓和CPU与I/O设备间速度不匹配的矛盾;
- 减少对CPU中断频率;
- 提高CPU与I/O设备间的并行性。
4.5.4 设备驱动程序
设备驱动程序与具体设备有关,用户安装好硬件后还要再安装驱动程序,计算机才能识别和使用该设备;每个外部设备都有相应的设备驱动程序,它也是硬件的身份识别标志,负责完成设备具体的各种动作(输入/输出操作);一旦为I/O设备安装了驱动程序,那么应用程序在使用I/O设备时,就不必关心设备的特性、I/O控制方式,这样就实现了应用程序与设备的无关性