王道考研视频——操作系统笔记
操作系统第一章!入门
王道考研视频——操作系统笔记,第一部分,操作系统的概念和体系结构
0.0 课程白嫖指南_哔哩哔哩_bilibili0.0 课程白嫖指南是王道计算机考研 操作系统的第1集视频,该合集共计84集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1YE411D7nH?p=1
1.1 操作系统的概念、特征、功能、目标
操作系统( Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。
计算机操作系统是随着计算机研究和应用的发展逐步形成并发展起来的,它是计算机系统中最基本的系统软件。
1.1.1 操作系统的特征
操作系统的基本特征包括并发、共享、虚拟和异步。
1.1.1.1 并发( Concurrence)
并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,一段时间内宏观上有多道程序在同时执行,而在每一时刻,单处理机环境下实际仅能有一道程序执行,故微观上这些程序还是在分时地交替执行。操作系统的并发性是通过分时(时分复用技术)得以实现的。
虽然现在CPU很多都是多核的,但是程序有可能很多,所以并发还是很重要.
1.1.1.2 共享( Sharing)
资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
共享可分为以下两种资源共享方式:
(1)互斥共享方式
系统中的某些资源,如打印机、磁带机,虽然它们可以提供给多个进程使用,但为使所打印或记录的结果不致造成混淆,应规定在一段时间内只允许一个进程访问该资源。为此,当进程A访问某资源时,必须先提出请求,如果此时该资源空闲,系统便可将之分配给进程A使用,此后若再有其他进程也要访问该资源时(只要A未用完)则必须等待。仅当进程A访问完并释放该资源后,才允许另一进程对该资源进行访问。我们把这种资源共享方式称为互斥式共享,而把在一段时间内只允许一个进程访问的资源称为临界资源或独占资源。计算机系统中的大多数物理设备,以及某些软件中所用的栈、变量和表格,都属于临界资源,它们都要求被互斥地共享
(2)同时共享方式
系统中还有另一类资源,允许在一段时间内由多个进程“同时”对它们进行访问。这里所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问,即“分时共享”,典型的可供多个进程“同时”访问的资源是磁盘设备,一些用重入码编写的文件也可以被“同时”共享,即若干个用户同时访问该文件.
要注意到,互斥共享,是因为一种资源在一段时间内(哪怕是一段很小的时间)只能满足一个请求,否则就会出现严重的问题(如打印机,第一行打印A文档的内容,第二行打印B文档的内容,你能想象是什么效果吗?).而同时共享方式,通常要求,一个请求分几个时间片段间隔地完成的效果,与连续完成的效果相同
并发和共享是操作系统两个最基本的特征,这两者之间又是互为存在条件的:
① 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题(无意义)
② 若系统不能对资源共享实施有效的管理,也必将影响到程序的并发执行,甚至根本无法并发执行
1.1.1.3 虚拟( Virtual)
虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实的,即实际存在的;而后者是虚的,是用户感觉上的事物。用于实现虚拟的技术,称为虚拟技术。在操作系统中利用了多种虚拟技术,分别用来实现虚拟处理器、虚拟内存和虚拟外部设备等。
在虚拟处理器技术中,是通过多道程序设计技术,让多道程序并发执行的方法,来分时使用一个处理器的。此时,虽然只有一个处理器,但它能同时为多个用户服务,使每个终端用户都感觉有一个中央处理器(CPU)在专门为它服务。利用多道程序设计技术,把一个物理上的CPU虚拟为多个逻辑上的CPU,称为虚拟处理器
类似地,可以通过虚拟存储器技术,将一台机器的物理存储器变为虚拟存储器,以便从逻辑上来扩充存储器的容量。当然,这时用户所感觉到的内存容量是虚的。我们把用户所感觉到的存储器(实际是不存在的)称为虚拟存储器。还可以通过虚拟设备技术,将一台物理I/O设备虚拟为多台逻辑上的I/O设备,并允许每个用户占用一台逻辑上的I/O设备,这样便可以使原来仅允许在一段时间内由一个用户访问的设备(即临界资源),变为在一段时间内允许多个用户同时访问的共享设备.因此,操作系统的虚拟技术可归纳为:时分复用技术,如处理器的分时共享;空分复用技术,如虚拟存储器。
把CPU抽象成进程,把磁盘抽象成文件,把内存抽象成地址空间
1.1.1.4 异步((Asynchronism)
在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性.
1.1.2 操作系统的目标和功能
1.1.2.1 操作系统作为计算机系统资源的管理者
(1)处理机管理
在多道程序环境下,处理机的分配和运行都以进程(或线程)为基本单位,因而对处理机的管理可归结为对进程的管理。
并发时在计算机内同时运行多个进程,所以,进程何时创建、何时撤销、如何管理、如何避免冲突、合理共享就是进程管理的最主要的任务。
进程管理的主要功能有:进程控制、进程同步、进程通信、死锁处理、处理机调度等。
(2)存储器管理
存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用以及提高内存的利用率,主要包括内存分配、地址映射、内存保护与共享和内存扩充等功能
(3)文件管理
计算机中的信息都是以文件的形式存在的,操作系统中负责文件管理的部分称为文件系统。
文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。
(4)设备管理
设备管理的主要任务是完成用户的I/O请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能。
1.1.2.2 操作系统作为用户与计算机硬件系统之间的接口
操作系统提供的接口主要分为两类
一类是命令接口,用户利用这些操作命令来组织和控制作业的执行;另一类是程序接口,编程人员可以使用它们来请求操作系统服务。
(1)命令接口
使用命令接口进行作业控制的主要方式有两种,即联机控制方式和脱机控制方式。按作业控制方式的不同,可以将命令接口分为联机命令接口和脱机命令接口
联机命令接口又称交互式命令接口,适用于分时或实时系统的接口。它由一组键盘操作命令组成。用户通过控制台或终端输入操作命令,向系统提出各种服务要求。用户每输入完一条命令,控制权就转入操作系统的命令解释程序,然后由命令解释程序对输入的命令解释并执行,完成指定的功能。之后,控制权又转回到控制台或终端,此时用户又可以输入下一条命令.
脱机命令接口又称批处理命令接口,即适用于批处理系统,它由一组作业控制命令(或称作业控制语句)组成。脱机用户不能直接干预作业的运行,应事先用相应的作业控制命令写成一份作业操作说明书,连同作业一起提交给系统。当系统调度到该作业时,由系统中的命令解释程序,对作业说明书上的命令或作业控制语句逐条解释执行,从而间接地控制作业的运行,联机命令接口可以理解为:“雇主”说一句话,“工人”做一件事,并做出反馈,这就强调了交互性。
(2)程序接口
程序接口由一组系统调用命令(简称系统调用,也称广义指令)组成。用户通过在程序中使用这些系统调用命令来请求操作系统为其提供服务。用户在程序中可以直接使用这组系统调用命令向系统提出各种服务要求,如使用各种外部设备,进行有关磁盘文件的操作,申请分配和回收内存以及其他各种控制要求
操作系统不允许用户直接操作各种硬件资源,因此用户程序只能通过系统调用的方式来请求内核为其服务,间接地使用各种资源
(3) GUI
图形用户界面(GUI)即图形接口,用户通过鼠标和键盘,在图形界面上单击或使用快捷键就能很方便地使用操作系统。有些系统提供了上述三种接口,但GUI最终是通过调用程序接口实现的,严格地说GUI图形接口不属于操作系统的一部分,但图形接口所调用的系统调用命令,属于操作系统的一部分.
1.1.2.3 操作系统用做扩充机器
没有任何软件支持的计算机称为裸机,它仅构成计算机系统的物质基础,而实际呈现在用户面前的计算机系统是经过若干层软件改造的计算机。裸机在最里层,它的外面是操作系统,由操作系统提供的资源管理功能和方便用户的各种服务功能,将裸机改造成功能更强、使用更方便的机器,通常把覆盖了软件的机器称为扩充机器,又称之为虚拟机.
1.2 操作系统的发展与分类
1.2.1 手工操作阶段(此阶段无操作系统)
用户在计算机上操作的所有工作都要人工干预,如程序的装入、运行、结果的输出等。随着计算机硬件的发展,人机矛盾(速度和资源利用)越来越大,必须寻求新的解决办法。
手工操作阶段有两个突出的缺点:
1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源利用率低。
2)CPU等待手工操作,CPU的利用不充分。唯一的解决办法就是用高速的机器代替相对较慢的手工操作来对作业进行控制
1.2.2 批处理阶段(操作系统开始出现)
为了解决人机矛盾及CPU和I/O设备之间速度不匹配的矛盾,出现了批处理系统。
它按发展历程又分为单道批处理系统、多道批处理系统(多道程序设计技术出现以后)
1)单道批处理系统
系统对作业的处理是成批进行的,但内存中始终保持一道作业。
该系统是在解决人机矛盾和CPU与 I/O 设备速率不匹配的矛盾
中形成的。单道批处理系统的主要特征如下
1)自动性。在顺利的情况下,在磁带上的一批作业能自动地逐个依次运行,而无需人工
2)顺序性。磁带上的各道作业是顺序地进入内存,各道作业的完成顺序与它们进入内存的顺序,在正常情况下应完全相同,亦即先调入内存的作业先完成
3)单道性。内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序进入内存运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行
此时面临的问题是:每次主机内存中仅存放一道作业,每当它运行期间(注意这里是“运行时”,并不是“完成后”)发出输入输出请求后,高速的CPU便处于等待低速的I/O完成状态.为了进一步提高资源的利用率和系统的吞吐量,引入了多道程序技术.
2)多道批处理系统
多道程序设计技术允许多个程序同时进入内存并运行。即同
时把多个程序放入内存,并允许们交替在CPU中运行,它们
共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂
停运行时,CPU便立即转去运行另一道程序。
多道程序设计的特点有:多道、宏观上并行、微观上串行。
1)多道:计算机内存中同时存放多道相互独立的程序。
2)宏观上并行:同时进入系统的多道程序都处于运行过程中,即它们先后开始了各自的运行,但都未运行完毕。
3)微观上串行:内存中的多道程序轮流占有CPU,交替
执行多道程序设计技术的实现需要解决下列问题
1)如何分配处理器
2)多道程序的内存分配问题。
3)I/O设备如何分配。
4)如何组织和存放大量的程序和数据,以便于用户使用和保证其安全性与一致性。
优点是资源利用率高,多道程序共享计算机资源,从而使各种资源得到充分利用:系统吞吐量大,CPU和其他
资源保持“忙碌”状态。
缺点是用户响应的时间较长。不提供人机交互能力,用户既不能了解自己程序的运行情况,也不能控制计算机.
1.2.3 分时操作系统
在操作系统中采用分时技术就形成了分时系统。所谓分时技术就是把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行。
由于计算机速度很快,作业运行轮转得很快,给每个用户的感觉好像是自己独占一台计算机,分时操作系统是多个用户通过终端同时共享一台主机,这些终端连接在主机上,用户可以同时与主机进行交互操作而互不干扰。
分时系统也是支持多道程序设计的系统,但它不同于多道批处理系统。多道批处理是实现作业自动控制而无需人工干预的系统,而分时系统是实现人机交互的系统,这使得分时系统具有与批处理系统不同的特征,其主要特征如下:
1)同时性。同时性也称多路性,指允许多个终端用户同时使用一台计算机,即一台计算机与若干台终端相连接,终端上的这些用户可以同时或基本同时使用计算机。
2)交互性。用户能够方便地与系统进行人机对话,即用户通过终端采用人机对话的方式直接控制程序运行,与同程序进行交互。
3)独立性。系统中多个用户可以彼此独立地进行操作,互不干扰,单个用户感觉不到别人也在使用这台计算机,好像只有自己单独使用这台计算机一样
4)及时性。用户请求能在很短时间内获得响应。分时系统采用时间片轮转方式使一台计算机同时为多个终端务,使用户能够对系统的及时响应感到满意虽然分时操作系统比较好地解决了人机交互问题,但是在一些应用场合,需要系统能对外部的信息在规定的时间(比时间片的时间还短)内作出处理(比如飞机订票系统或导弹制导系统).因此,实时系统应运而生。
1.2.4 实时操作系统
为了能在某个时间限制内完成某些紧急任务而不需时间片排队,诞生了实时操作系统。
这里的时间限制可以分为两种情况:如果某个动作必须绝对地在规定的时刻(或规定的时间范围)发生,则称为硬实时系统。例如,飞行器的飞行自动控制系统,这类系统必须提供绝对保证,让某个特定的动作在规定的时间内完成。
如果能够接受偶尔违反时间规定,并且不会引起任何永久性的损害,则称为软实时系统,如飞机订票系统、银行管理系统,在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完接收的事件。实时操作系统的主要特点是及时性和可靠性。
1.2.5 网络操作系统和分布式计算机系统
网络操作系统把计算机网络中的各台计算机有机地结合起来,提供一种统一、经济而有效的使用各台计算机的方法,实现各个计算机之间的互相传送数据。
网络操作系统最主要的特点是网络中各种资源的共享以及各台计算机之间的通信,分布式计算机系统是由多台计算机组成并满足下列条件的系统:
系统中任意两台计算机通过通信方式交换信息:系统中的每一台计算机都具有同等的地位,即没有主机也没有从机;每台计算机上的资源为所有用户共享;系统中的任意若干台计算机都可以构成一个子系统,并且还能重构;任何工作都可以分布在几台计算机上,由它们并行工作、协同完成。用于管理分布式计算机系统的操作系统称为分布式计算机系统。该系统的主要特点是:分布性和并行性。分布式操作系统与网络操作系统本质上的不同之处在于分布式操作系统中,若干台计算机相互协同完成同一任务。
1.2.6 个人计算机操作系统
个人计算机操作系统是目前使用最广泛的操作系统,广泛应用于文字处理、电子表格、游戏等。常见的有
Windows、 Linux和 Macintosh等
1.3 操作系统的运行机制跟体系结构
1.3.1 操作系统的运行机制
计算机系统中,通常CPU执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序或系统外层的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全考虑不能执行这些指令。操作系统在具体实现上划分了用户态(目态)和内核态(管态),以严格区分两类程序,操作系统的各项功能分别被设置在不同的层次上。一些与硬件关联较紧密的模块,诸如时钟管理、中断处理、设备驱动等处于最底层。其次是运行频率较高的程序,诸如进程管理、存储器管理和设备管理等。
这两部分内容构成了操作系统的内核。这部分内容的指令操作工作在核心态。
内核是计算机上配置的底层软件,是计算机功能的延伸。不同系统对内核的定义稍有区别。大多数操作系统内核
包括四个方面的内容
1)时钟管理
在计算机的各种部件中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提
供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。诸如,在分时操作系统中,采用时间片
轮转调度的实现;在实时系统中,按截止时间控制运行的实现;在批处理系统中,通过时钟管理来衡量一个作
业的运行程度等。因此,系统管理的方方面无不依赖于时钟。
2)中断机制
引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。例如,键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代操作系统是靠中断驱动的软件。
中断机制中,只有一小部分功能属于内核,负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。这样可以减少中断的处理时间,提高系统的并行处理能力
3)原语
按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规定的操作。其特点是:
1)它们处于操作系统的最底层,是最接近硬件的部分。
2)这些程序的运行具有原子性,其操作只能一气呵成(这主要是从系统的安全性和便于管理考虑的)
3)这些程序的运行时间都较短,而且调用频繁。
通常把具有这些特点的程序称为原语( Atomic Operation).定义原语的直接方法是关闭中断,让它的所有动作不可分割地进行完,再打开中断。
系统中的设备驱动、CPU切换、进程通信等功能中的部分操作都可以定义为原语,使它们成为内核的组成部分
4)系统控制的数据结构及处理
系统来登记状态信息的数据结构很多,比如作业控制块、进程控制块(PCB)、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效的管理,系统需要一些基本的操作,常见的操作有以下三种
1)进程管理:进程状态管理、进程调度和分派、创建与撤销进程控制块等
2)存储器管理:存储器的空间分配和回收、内存信息保护程序、代码对换程序等
3)设备管理:缓冲区管理、设备分配和回收等
从上述内容可以了解,核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令
1.3.2 中断和异常
中断( Interruption),也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断,表示设备输入输出处理已经完成,希望处理机能够向设备发下一个输入输出请求,同时让完成输入输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关
异常( Exception),也称内中断、例外或陷入(Trap),指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的事件。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一但出现应立即处理。
1.3.3 系统调用
所谓系统调用就是用户在程序中调用操作系统提供的一些子功能,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/O传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。通常,一个操作系统提供的系统调用命令有几十乃至上百条之多,这些系统调用按功能大致可分为如下几类
设备管理:完成设备的请求或释放,以及设备启动等功能
文件管理:完成文件的读、写、创建及删除等功能
进程控制:完成进程的创建、撤销、阻塞及唤醒等功能
进程通信:完成进程之间的消息传递或信号传递等功能
内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。显然,系统调用运行在系统的
核心态。
通过系统调用的方式来使用系统功能,可以保证系统的稳定性和安全性,防止用户随意更改或访问系统的数据或命令。系统调用命令是由操作系统提供的一个或多个子程序模块实现的。
下面列举一些由用户态转向核心态的例子: