目录
概述
操作系统一般有处理机管理(进程管理)、存储器管理(内存管理)、设备管理、文件管理和用户接口5种主要功能。
处理机管理:负责对处理机的分配和运行实施有效的管理。多道程序下,处理机分配运行是以进程为单位,因此处理机管理也称为进程管理。
存储器管理:对内存进行分配、保护、和扩充。
设备管理:对设备按一定原则进行分配,为了让主机和设备并行工作,常需要用缓冲技术和虚拟技术;设备传输控制是指实现物理的输入输出(I/O)操作,即启动设备、中断处理、结束处理等;设备独立性是指用户向系统申请的设备与实际操作的设备无关。
文件管理:负责对文件存储空间进行管理,包括存储空间的分配和回收,目录管理、文件操作管理和文件保护等功能。
用户接口:为了使用户能灵活方便的使用计算机和系统功能,操作系统提供了一组使用其功能的手段,称为用户接口。它分为两大类:程序接口和操作接口。它们可以被开发的应用程序调用。
一、操作系统类型与结构
1.1 操作系统的类型
操作系统的类型可分为:单用户操作系统、批处理系统、分时系统、实时系统、网络操作系统、分布式操作系统、并行操作系统和嵌入式操作系统。
一个操作系统可能同时属于多类操作系统。比如window 7和linux系统,它们属于网络操作系统(有网络功能进行分享数据)、也属于分时操作系统(CPU分片且公平分配给各终端使用,交互性强,响应时间不是很严格)。
单用户操作系统:一台处理机只支持一个用户程序的运行,系统全部资源都给该用户使用。可以理解为没有CPU分片,基本只跑一个任务。目前多数微机上运行的操作系统都属于单用户操作系统。
批处理系统:作业成批的装入计算机中,操作系统按一定算法选择一个或多个作业将它们调入内存运行。运行结束后,操作结果放在磁盘,由计算机统一输出。批处理系统分为单道批处理和多道批处理,单道批处理则内存中只能存放一个作业,多道批处理则能存放多个作业,它们的运行都不支持用户干预和交互。
分时操作系统:为了解决终端人机交互问题,系统采用了分时技术,即把CPU的时间划分很短的时间片,轮流分配给各终端作业使用。分时系统具有多路性、独立性、及时性、交互性和同时性等特征。我们平常用的window xp、windows 7、windows 10以及linux都是分时操作系统。
实时操作系统:它为特殊用途开发的专用系统,一般是为实时响应某些特殊任务而开发的。一般是直接中断运行中的任务,运行实时响应的任务来提高实时性。因此,它的系统和应用很难分离,常常结合在一起。分时系统有:windows NT。它和分时操作的区别如下:
(1) 设计目的不同:分时系统主要是提供允许多个终端同时使用一台计算机系统的能力;实时系统是为特殊用途而开发的专用系统。
(2) 响应时间不同:分时系统的响应时间以使用者能接受的等待时间来确定;实时系统的响应时间以控制对象所要求的开始截止时间或完成截止时间来确定。
(3) 交互性不同:分时系统是通用系统,要求能向终端用户提供数据处理、资源共享等服务,交互性强;实时系统一般只限于访问系统中某些特定的专用服务程序,交互性较弱。
(4) 可靠性不同:实时系统的点滴差错都可能导致无法挽回的损失,所以,实时系统会采取多级容错等措施保障系统安全。相比较而言,分时系统的可靠性要低一些。
网络操作系统:指在网络环境下,具有网络功能的操作系统。它的特点是网络中各种资源的共享以及各台计算机之间的通信。
分布式操作系统:由多台计算机组成,能相互合作,共同完成同一个任务。它拥有网络操作系统的全部功能(能联网能共享能通信),且能把任务进行分布式运行,即一个大任务拆分成很多小任务到不同的CPU上执行。
嵌入式操作系统:嵌入式操作系统运行在嵌入式智能芯片环境中,对整个智能芯片以及它所控制的部件等资源进行统一协调、处理、控制。他具有微型化、可定制、实时性、可靠性、易移植等特点。
1.2 操作系统的结构
主要有整体结构、层次结构、客户/服务结构、面向对象结构。
二、进程管理(处理机管理)
进程是一个具有独立功能的程序,关于数据集合的一次可并发执行的运行活动。大多数操作系统来讲,进程是进行资源分配和调度的基本单位。PCB是进程包含进程的描述、控制以及资源信息,PCB是进程存在的标志,进程与PCB是一对一的关系,操作系统利用PCB对并发执行的进程进行控制和管理。
2.1 进程的状态
2.1.1 三态模型
进程三种状态:运行、就绪和阻塞。
就绪:指进程已分配到了除CPU之外的所有资源,具备了执行条件,等待处理机调度的状态。
阻塞:指进程等待某个事件的发生而处于暂停执行的状态。
2.1.2 五态模型
操作系统由于内存资源紧缺不能满足所有进程运行,因此必须将某些进程挂起,放到磁盘对换区(外存)。因此进程加入了挂起和恢复,所以有5个状态:
活跃就绪:进程在内存且处于可被调度状态。和三态模型中的就绪一样。
静止就绪:进程在外存时的就绪状态,不能直接被调度。需要被调回内存才能转化为活跃就绪。
活跃阻塞:同三态模型的阻塞,在内存中等待某事件发生而处于暂停状态。
静止阻塞:进程被对换到外存时的阻塞状态。需要先恢复到内存才能转化为活跃阻塞状态。
2.2 信号量和PV操作
信号量的值通常表示某类资源的数目。多道系统中,信号量是实现进程同步和互斥的工具。
PV操作是对信号量进行处理的操作过程。一般P操作是对信号量减一,V操作是对信号量加一。
2.3 死锁
系统中两个或两个以上的进程无期限地等待永远不会发生的条件而造成相互阻塞的现象被称为死锁。
死锁有4个条件:
1、互斥条件,即同一时刻只允许一个进程使用资源。
2、不剥夺条件,即进程已占用资源,不会被强制剥夺。
3、请求与保持条件,即进程在请求其余资源时,不主动释放已占有的资源。
4、环路条件,即环路中的每个进程在请求另一个进程已经占有的资源。
对于死锁,也有以下处理办法:
2.4 线程管理
线程是进程的活动成分,是处理器分配资源的最小单位。它可以共享进程的资源与地址空间。
线程实现方式:主要有三种:内核线程、用户线程、轻权线程。
多线程模型:有多对一模型、一对一模型、多对多模型,具体如下:
(1) 多对一模型:多个用户线程映射到一个内核线程,线程管理在用户空间进行,效率高。但是一个线程执行了阻塞系统调用,则整个进程会阻塞,因为整个进程是使用一个内核线程,该内核线程变成阻塞了会导致整个进程阻塞。由于整个进程只能使用一个内核线程,即一个核心处理进程的数据,所以多对一模型的进程处理能力完全依靠CPU的单核能力。
(2) 一对一模型:一对一模型将每个用户线程映射到一个内核线程。相对于多对一,它提供了更好的并发性能,因为多个线程能运行在多处理器上。但同时由于每创建一个线程就需要一个内核线程,开销大,因此这种模型一般会限制线程数量,避免开启过多的系统线程。
(3)多对多模型:将用户线程映射到同样数量或数量更小的内核线程上。一般内核线程数量与特定应用程序或特定机器有关,位于多处理器的程序一般比位于单处理器的程序开启的内核线程多。
三、内存管理
程序和数据都必须占用内存,因此内存管理的优劣直接影响操作系统的性能。
3.1 地址变换
用户作业的程序经常用高级语言编写,称为源程序。源程序是不能被计算机直接执行,需要通过编译获得目标程序进行运行。
目标程序使用地址一般称为逻辑地址,需要经过转化成为物理地址,物理地址才是数据存放的真正地址。
3.2 分区存储管理
单一连续管理一般将存储区分成多个连续的内存区,比如一个区域来存储操作系统程序,称为系统内核区,另一个区域归用户使用,称为用户内存区。
分区管理是支持多道程序运行的最简单的一种内存管理方式,主要有固定分区、可变分区、可重定位分区和多重分区4种形式。
3.3 段页式存储管理
分区管理容易产生碎片,利用率不高,主要原因是分区存储要求存储空间连续。避免这种连续空间,段页式存储诞生了。
段页存储将作业的逻辑地址空间分成若干长度相等的区域(称为页),内存空间也划分成若干个与页长度相等的区域(称为页帧或块)。程序装入时,每个页对应一个页帧(块)。
3.3.1 页式存储管理
在分页存储管理中,页帧(块)可以连续,也可以是不连续。系统为每道作业建立了一张页面映射表(页表),记录了页在内存中对应的页帧号(块号)。
逻辑地址由两个部分组成:页号和页内位移(页内地址)。地址变换机构的基本任务是利用页表将逻辑地址转化为物理地址。
3.3.2 段式存储管理
段式存储逻辑地址表是二维的,由段号和段内地址组成。也有段表记录各段所在的物理分区。
3.3.3 段页式存储管理
段页式存储将段式与页式存储结合。段页式存储将作业分成多段,每个分段分成多页,为了实现地址转化,为每个作业配置一张段表和若干页表。
3.4 虚拟存储管理
段页存储和分区存储都需要给作业在内存中分配空间,否则作业无法运行。但作业实际并不是同时使用所有信息,有些部分是运行一遍不再使用,甚至在整个作业运行期间都没使用。因此,作业全部装入内存是资源的浪费。
虚拟存储管理就是仅将运行到的那部分程序和数据装入内存,其余部分留在外存。当内存已满,则将内存暂是不用的程序或数据调至外存,当有足够空间后才将要运行的程序装入内存。
局部性原理:虚拟存储能在作业不全部装入内存的情况下运行,是利用了程序执行时的局部性原理,即程序运行仅局限于某个部分。
页面置换算法:若内存中没有空闲页,又有程序和数据装入内存。就需要选取页面数据进行淘汰。淘汰算法如下:
随机淘汰算法:随机选择页面进行淘汰。
轮转淘汰算法:按照页面编号,循环地从内存置换页。
先进先出算法(FIFO):将在内存停留时间最长的页淘汰。
最小最近使用算法(LRU):least recently used,淘汰离当前时间最近一段时间最长未使用过的页进行淘汰。无需统计使用次数,需要对比最后使用时间与当前时间的间隔大小。
最近未使用算法(NUR):no used recently,将最近一个时间段内未被访问的页进行淘汰。实现策略为:给每个页设置标志(0:未访问,1:已访问),每隔一段时间将所有页置为0,访问了则置为1,需要淘汰就选出标志位0的页进行淘汰。
最优置换算法:永不使用的,在最长时间不再被访问的页面进行淘汰置换。由于需要确定那个页在未来最长时间不被访问,这个很难估计,因此几乎没用过,仅仅用来评价其它算法的优劣。
时钟页面替换法(Clock):将页面链成循环队列。用指针指向循环队列中的下一个被替换的页面。有点类似随机,根据页面引用进入循环队列以及确定淘汰指针。
四、文件系统
4.1 文件的组织结构
4.1.1 逻辑结构
文件逻辑结构主要是用户概念中的文件,主要有两种:无结构的流式文件以及有结构的记录式文件。常用的流式文件有:源程序文件、目标代码文件等。
4.1.2 物理结构
文件的物理结构是指文件在存储介质上的组织方式。常见的物理结构有:顺序结构、链接结构、索引结构。
顺序结构(连续结构):文件分配到连续的物理块中。这种方式管理简单、创建和读取快,空间利用率低,文件修改(插入和删除)慢。
链接结构(串联结构):文件分配到非连续的物理块中,每个物理块都设有指针指向下个物理块的地址从而将物理块链接。链接方式有两种:隐式和显式链接,显式链接的指针在专门的链表中,隐式链接的指针在存放数据的物理块中。这种方式管理复杂、空间利用率高、易于文件修改扩充,但文件读取慢。
索引结构(随机结构):为每个文件建立索引表,每个表指出信息所在的物理块号。还可以建立多级索引,对大文件检索方便,但多级索引开销也大。
4.1.3 树形文件结构
文件的控制块的集合称为文件目录,文件目录也被组织成文件,常被称为目录文件。文件系统一般采用一级目录结构、二级目录结构和多级目录结构。比如:linux和windows都采用了多级目录结构。
4.2 存储空间管理
一个大容量文件可能被多个用户共享,因此,系统需要登记空闲区的情况,将文件保存到空闲区,以及不需保留文件的存储空间。
磁盘空闲区管理方法有:空闲目录文件、空闲块链、位示图、成组链接法。
4.2.1 空闲目录文件
磁盘上对连续未分配区域的空闲文件单独建立目录。目录有个表目,记录了空闲文件的地址以及空闲块个数。
4.2.2 空闲块链
空闲块链将所有空闲块用链接指针或索引结构组成一个空闲文件。
4.2.3 位示图法
利用二进制的1位来表示存储空间1个块的使用情况。一个M行和N列的位示图可以用来表示M×N块的文件存储空间。
4.2.4 成组链接法
将一个文件卷中所有空闲块按固定大小分成若干组,并把每组的盘块数和改组所有盘快记录前一组的最后一个盘块中,将第一组的盘快数和改组所有盘块号计入超级块的空闲盘块中。