一、引论
前言
谈及操作系统,想必大家脑海里肯定会浮现出很多词语:Windows、IOS、Android、Linux、Unix等等。但是为何会出现操作系统呢?以及操作系统是用来干什么的?
操作系统(Operating System, OS)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。其主要作用是管理好这些设备,提高他们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用。
这是书上的原话。谈一下个人的理解:第一:操作系统主要是为了方便或者说独立性。在没有操作系统的时候,不同的硬件平台,需要不同的使用方法,对用户来说使用门槛极高;并且在后期如果硬件出现问题,也不能轻易更换硬件品牌。这样的裸机,使用起来太过复杂。现在的操作系统,你可以随意的更换硬件,比如把机械硬盘换成固态,把Intel的CPU换成AMD的……这些改动,都不需要我们再进行复杂的程序修改,windows都可以正常识别,这让我们使用起来更加方便。
第二:操作系统管理硬件更有效率。推动操作系统发展的主要动力之一就是我们希望不断提高计算机资源的利用率。
1945年,诞生了第一台计算机,那个时候还没有OS, 编写程序都是需要频繁的拔线缆……后来,技术进步,操作方式变成由程序员将事先已经穿孔的纸带或者卡片,装入输入机,在启动它们,将程序和数据输入计算机,然后计算机运行。
这个过程效率十分低下,因为非常昂贵的CPU(即使现在的CPU也是比较昂贵的,但是当时更贵)在等待人工操作。资源都是空闲的。人们迫切想要改变这一现状,于是操作系统就出现了。
(CPU被压榨的过程)
OS的发展历史
2.1人工操作阶段
把程序和数据转化成二进制,然后根据二进制对纸带进行打孔。通过纸带输入机,把内容传输到计算机进行运算,运算完毕后,用户取走结果,才允许下一个用户使用。
特点:(1)用户占据全机,一台计算机的全部资源都被上级用户所独占。(2)CPU需要等待人工操作。
2.2 脱机输入/输出方式(Off-Line I/O)方式
人工操作太慢了,为了解决这个缺点,聪明的人类很快就想到了一个方法。那就是事先把装有用户程序和数据的纸带装入纸带输入机,然后在一台外围机的控制下,把纸带上的内容输入到磁带上。
由于程序和数据的输入和输出都是在外围机的控制下完成的。所以成为脱机输入/输出方式。与之相反,把在主机的直接控制下进行的输入/输出方式成为联机输入/输出方式。
特点:(1)减少了CPU的空闲时间(CPU这小子不能闲着)。(2)提高了IO的速度。
2.3 单道批处理系统(Simple Batch Processing System)
为了更好的利用资源,先把一批作业使用上面讲到的脱机IO的方式输入到磁带上,并在系统中配上监督程序(Monitor),把这批作业一个接一个的连续处理。因为系统对作业的处理是成批进行的,所以成为批处理系统。又因为内存里只保持了一道作业,所以称为单道批处理系统。
特点:(1)提高了系统资源的利用率和系统的吞吐量。(2)资源仍然得不到充分利用。
人们又发现了一些缺点:那就是资源利用率还是不高(老资本家了)。什么问题呢?那就是每当程序出现了IO请求,CPU便处于等待状态,必须等IO完成后才继续运行。(CPU你小子又闲着了!)
2.4 多道批处理系统(Multiprogrammed Batch Processing System)
为了解决单道批处理的资源利用率不高的缺点,人们提出了新的方法:那就是每当程序出现了IO请求,CPU就从内存里执行另一个程序(此时的内存有多个作业)这样CPU就可以更好的利用IO执行的时间。
在该系统中,用户所提交的作业先存放在外存上,并且拍成一个队列,称为“后备队列”。然后由作业调度程序按照一定的算法,从后备队列中,选择若干个作业调入内存,是它们共享CPU和系统中的各种资源。由于同时在内存中装有若干道程序,这样便可以在运行程序A时,利用其因IO操作而暂停执行时的CPU空档时间,在调度另一道程序B进行,同样可以利用程序B在IO操作时的CPU空档时间,再调度程序C运行,使多道程序交替地运行,这样便可保持CPU处于忙碌状态。
上面一大段,概括的说就是,让CPU不在傻傻的等待IO,把这段时间利用起来。比如你烧水的时候,不再傻傻的站在一边等待水开,而是去打一把贪吃蛇或者俄罗斯方块。
优点:(1)资源利用率高。因为有多个程序交替执行,CPU大多数时间都处于忙碌状态;内存里装入多道程序,提高了内存的利用率。(与单道批处理系统的差别)
(2)系统吞吐量大。资源都保持忙碌,并且仅当作业完成或运行不下去时,才进行切换,系统开销小。
缺点:(1)平均周转时间长。由于作业要排队依次处理,因此作业的周转时间较长。(可以理解为作业排队时间长)
(2)没有交互能力,一旦把程序提交给系统,那么直到作业完成,用户都不能与自己的作业进行交互,修改和调试及其不方便。(哪像现在,调试特别方便。)
2.5 分时系统(Time Sharing System)
为了解决人机交互的痛点,人们又搞出了一种新型OS。它可以实现人机交互与多用户共享主机的功能。人机交互大家都了解它的重要性。但为啥要多用户呢? 这是因为在那个时代,20世纪60年代,计算机还十分昂贵,个人买不起,都需要使用同一台计算机。
多个用户的引入,这叫要求系统具有及时接收、及时处理的功能。总不能我输入一行命令,你让我等两天吧……为此,分时系统引入了时间片的概念。一个时间片,就是一段很短的时间。系统规定每个作业每次只能运行一个时间片,时间片一结束,就停止当前作业,执行下一个作业。
特点:(1)多路性,系统允许多个终端同时连接一个主机上。(2)独立性,每个用户彼此之间不干扰,感觉像是独占主机一样。(3)及时性,每个用户的请求都能在很短的时间内获得响应。(4)交互性。
2.6 实时系统(Real Time System)
实时系统主要用在工业(武器)控制系统、嵌入式系统,这类场景对实时性要求极高。需要系统对所接收到的信号“及时”做出响应。
2.7 微机操作系统
单用户单任务操作系统
CP/M、MS-DOS
b. 单用户多任务操作系统
早期Windows
c. 多用户多任务操作系统
Unix,Solaris, Linux
操作系统的基本特性
3.1 并发(Concurrence)
并发是指在宏观上多个程序在同时运行,但在单处理机系统中,每一时刻仅有一道程序运行,即微观上这些程序只能是分时交替运行的。但若是多处理机系统,程序被分配到多个处理器上,实现并行执行。这种被称为并行。
3.2 共享(Sharing)
系统的资源可供内存中多个并发执行的进程共同使用。某些资源一定时间内只能允许一个进程访问,则称为互斥共享方式;某些资源可以同时被多个进程使用,称为同时访问方式。典型的需要互斥的是:打印机、磁带机等。同时访问的有磁盘
并发和共享是多用户多任务OS的两个最基本的特征。
3.3 虚拟(Virtual)
虚拟指的是通过某种技术,把一个物理实体变为若干个逻辑上的对应物的功能。
3.4 异步(Asynchronism)
进程是以人们不可预知的速度向前推进,这就是进程的异步性。
4. 操作系统的主要功能
4.1 处理机管理
在多道程序系统中,处理机的分配和运行都是以进程为基本单位的,因此对处理机的管理可以归结为对进程的管理。主要功能有:创建和撤销进程,进程运行的协调与同步,进程之间的信息交换,即:进程控制、进程同步、进程通信。
4.2 存储器管理
存储器管理主要是为了多道程序有一个运行良好的环境,提高存储器的利用率,方便用户使用,并在逻辑上扩充内存。为此,存储器管理应该具有:内存分配与回收、内存保护、地址映射和内存扩充等功能。
4.3 设备管理
设备管理的主要任务是:(1)完成用户进程提出的IO请求,分配所需IO设备,并完成指定操作;(2)提高CPU和IO设备的利用率,提高IO速度。为此,设备管理应该具有:缓冲管理、设备分配、设备处理以及虚拟设备等功能。
4.4 文件管理
文件管理的主要任务是对用户文件和系统文件进行管理以方便用户使用,并保证文件的安全性。为此,文件管理应具有:文件存储空间的管理、目录管理、文件的读写管理以及文件的共享和保护等功能。
4.5 微内核OS
微内核(MicroKernel)操作系统结构是在20世纪80年代后期发展起来的。它主要采用了客户/服务器模式,将操作系统划分为两个大的部分:微内核和多个服务器。
在微内核系统中,内核是经过精心设计的、能实现现代OS最基本核心功能的小型内核,微内核并非是完整的OS,而只是将操作系统中最基本的部分放入微内核。
优点:提高了系统的可扩展性;增强了系统的可靠性;可移植性强;提供了对分布式系统的支持。
缺点:与早期的宏内核操作系统相比,运行效率有所降低。最主要的原因是:在完成一次客户对操作系统提出的服务请求时,需要利用消息的多次交互和进行用户/内核模式与上下文的多次切换。(早期OS一般只需要两次切换)
二、进程
2.1 进程的定义
为了使程序能够并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念。为了使参与并发执行的每个程序都能独立的运行,在操作系统中必须为之配置一个专门的数据结构,称之为:进程控制块(Process Control Block, PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。
进程实体:由程序段、相关的数据段和PCB三部分构成的整体叫做进程实体(又称为进程映像)
进程:是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
2.2 进程与程序的区别
进程是动态的,它由创建而产生,由调度而执行,由撤销而死亡。而程序是静态的,只是指令的集合。
并发性。多个进程实体同存于内存中,且能在一段时间内同时运行。
独立性。进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。
异步性。进程是按照异步方式运行的,即按各自独立的、不可预知的速度向前进行。
2.3 进程的基本状态及转换
就绪状态。进程已获得除了CPU以外的所有资源,一旦获得CPU,就可以立即执行,此时进程所处的状态为就绪态。
执行状态。当一个进程获得必要的资源并正在CPU上执行时,该进程处在执行态。
阻塞状态。正在执行的进程,由于发生某事件而暂时无法执行下去,此时进程所处的状态为阻塞状态。当进程处于阻塞态时,即使把CPU分配给该进程,它也无法执行。(因为它在等待CPU以外的资源)
创建状态。进程正在创建,尚未转到就绪态。
结束状态。进程正在从系统中小时,可能是正常结束,也可能是其他原因中断推出运行。
值得一提的是,进程的状态也是存储在PCB这个结构体中。
需要注意的是阻塞态只能从执行态来,并且向就绪态去。
2.4 进程的控制
2.4.1 进程的创建
先向系统申请一个空闲PCB,并指定唯一的进程标识符(PID)
为新进程分配必要的资源
将新进程的PCB初始化。填入进程名、家族信息、程序数据地址、优先级等信息
将新进程加入就绪队列
引起进程创建的事件有:用户登录、作业调度、请求服务。
2.4.2 进程的撤销
从PCB集合中找到被撤销进程的PCB
若处于执行态则立即停止执行,设置重新调度标志
回收被撤销的进程所占有的资源,或者归还给父进程,或者系统。
2.4.3 进程切换
保存处理及上下文,包括程序计数器和其他寄存器
更新PCB信息
把进程的PCB移入相应队列
选择另一个进程执行,更新其PCB
更新内存管理的数据结构
回复处理器上下文
三、处理机调度与死锁
四、存储器管理
五、虚拟存储器
六、输入输出系统
七、文件管理
八、磁盘存储器管理
九、操作系统接口
十、多处理机操作系统
十一、多媒体操作系统
十二、保护与安全