控制和管理整个计算机系统硬件和软件资源,合理组织、调度计算机的工作与资源分配,进而为用户和其他软件提供方便接口和环境的程序集合。
CPU只能执行两种性质的程序:操作系统内核程序、用户自编程程序。内核程序是应用程序的管理者,为了严格区分两种程序,操作系统在具体实现上划分了用户态(目态)和核心态(管态),CPU在用户态下只能执行非特权指令,而在核心态下可以执行特权指令(I/O指令、置中断指令)
1.中断的引入——为了支持CPU和设备之间的并行操作
中断也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断、时钟中断等。这一类中断通常是与当前执行的指令无关的事件。
2.异常的引入——表示CPU执行指令本身时出现的问题
异常也称内中断、例外或陷入,指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、缺页异常等。对异常的处理一般要依赖与当前程序的运行现场,不能被屏蔽。
中断的处理流程:关中断,保存断点,引出中断服务程序,保存现场和屏蔽字,开中断,执行中断服务程序,关中断,恢复现场和屏蔽字,开中断、中断返回。
答:系统调用是操作系统与应用程序之间的接口,它是用户程序间接操作计算机资源的唯一途径。一般过程调用工作在用户态,通过过程调用语句实现,可以无限制嵌套调用;系统调用运行在核心态,通过访管中断进入,不可以嵌套调用。
运行状态不同
运行状态不同。系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。
调用方法不同
调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。
返回问题
返回问题。在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析――是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。
在多道程序环境下,允许多个程序并发执行,失去了封闭性,拥有了间断性和不可重复性,为了更好的描述和控制,引入进程的概念,实现操作系统的并发性和共享性。进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。早期,进程在操作系统的中拥有独立的资源,但进程的切换会是计算机利用率下降,需要引入轻量级进程,就是线程。线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,每条线程执行不同的任务。
进程是资源的分配和调度单位,线程是CPU调度和分派单位线程依赖于进程,一个进程至少拥有一个线程进程拥有自己独立的地址空间,线程共享进程的地址空间进程是拥有系统资源的一个独立单位,线程不拥有资源进程间切换开销远大于线程多线程程序中一个线程崩溃,整个程序就崩溃了;多进程程序一个进程崩溃,不会影响其他进程
1.共享内存
顾名思义,共享内存就是两个进程同时共享一块内存,然后在这块内存上的数据可以共同修改和读取,达到通信的目的。
2.无名管道
无名管道是半双工的通信方式;并且只能在具有亲缘关系的进程之间使用(亲缘关系是指进程间的父子关系,兄弟关系等),具有亲缘关系的进程在创建时同时拥有一个无名管道的句柄,可以进行读写;无名管道不存在磁盘节点,只存在与内存中用完即销毁。
3.命名管道
命名管道也是半双工的通信方式;可以在不具有亲缘关系的进程间通信;有名管道存在磁盘节点,有对应的FIFO文件,凡是可以访问该路径的文件的进程均可以进行通信。
4.消息队列
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5.套接字
套接字是网络编程的api,通过套接字可以不同的机器间的进程进行通信,常用于客户端进程和服务器进程的通信。
6.信号
信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个),它也是用户进程之间通信和同步的一种原始机制。一个键盘中断或者一个错误条件(比如进程试图访问它的虚拟内存中不存在的位置等)都有可能产生一个信号。Shell也使用信号向它的子进程发送作业控制信号。
创建态、就绪态、运行态、阻塞态、终止态
答:可以,父进程创建子进程后,子进程也成为了一个可以独立运行的单位,虽然子进程继承了父进程的全部资源,但是只要两个进程创建的程序和数据没有冲突,则它们可以并发运行。
1.先来先服务first-comefirst-serverd(FCFS)
2.最短作业优先shortestjobfirst(SJF)
3.优先级调度算法
5.最高响应比优先
6.多级反馈队列调度算法
1.同步
多个进程因为合作而使得进程的执行有一定的先后顺序。比如某个进程需要另一个进程提供的消息,获得消息之前进入阻塞态;
2.互斥
多个进程在同一时刻只有一个进程能进入临界区
同步表现为直接制约,如管道通信,一个进程写,一个进程读,它们是相互制约的。互斥表现为间接制约,比如多个进程同时请求打印机(无SPOOLing技术时)
进程进入临界区的调度准则:
为什么需要进程同步:进程有时候会和其他进程共享一些资源,比如内存、数据库等。当多个进程同时读写同一份共享资源的时候,可能会发生冲突。因此需要进程的同步,多个进程按顺序访问资源。
互斥量Mutex:互斥量是内核对象,只有拥有互斥对象的线程才有访问互斥资源的权限。因为互斥对象只有一个,所以可以保证互斥资源不会被多个线程同时访问;当前拥有互斥对象的线程处理完任务后必须将互斥对象交出,以便其他线程访问该资源;
信号量Semaphore:信号量是内核对象,它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。信号量对象保存了最大资源计数和当前可用资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就减1,只要当前可用资源计数大于0,就可以发出信号量信号,如果为0,则将线程放入一个队列中等待。线程处理完共享资源后,应在离开的同时通过ReleaseSemaphore函数将当前可用资源数加1。如果信号量的取值只能为0或1,那么信号量就成为了互斥量;
事件Event:允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。事件分为手动重置事件和自动重置事件。手动重置事件被设置为激发状态后,会唤醒所有等待的线程,而且一直保持为激发状态,直到程序重新把它设置为未激发状态。自动重置事件被设置为激发状态后,会唤醒一个等待中的线程,然后自动恢复为未激发状态。
临界区CriticalSection:指的是访问资源的那段代码,任意时刻只允许一个线程对临界资源进行访问。拥有临界区对象的线程可以访问该临界资源,其它试图访问该资源的线程将被挂起,直到临界区对象被释放。
非抢占式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生进程调度进程调度某事件而阻塞时,才把处理机分配给另一个进程
抢占式:操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其他就绪进程的调度方式
死锁的概念:在2个或多个并发进程中,如果每个进程持有某有资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。
通俗地讲,就是2个或多个进程被无限期地阻塞、相互等待的一种状态。
死锁产生的原因:系统资源不足,**进程推进顺序非法
产生死锁的必要条件:
1.互斥条件:一个资源每次只能被一个进程使用2.不可剥夺条件:进程已获得资源,在未使用完之前,不能被其他进程强行剥夺,只能主动释放3.请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。4.循环等待条件:即进程集合{p0,p1,p2,p3……pn};p0正在等待p1占用的资源,p1正在等待p2占用的资源,pn正在等待p0占用的资源。只要上述一个条件不成立,就不会发生死锁。
死锁预防:破坏死锁的四个必要条件中的一个或几个,来预防死锁的发生;死锁避免:将系统分为安全和不安全状态,每当系统为进程分配资源时都要检测系统是否会进入不安全状态,若会,则停止分配,进入等待状态;死锁检测:若不加任何限制措施,系统可在为进程分配资源的同时,记录下来进程的请求和分配信息,然后按某种算法计算系统是否会发生死锁;死锁解除:系统发生死锁时通常采用杀掉进程或剥夺进程资源的方法使系统解除死锁。
银行家算法是一种避免死锁的算法,它的原理是避免系统进入不安全状态从而避免死锁。在分配资源之前,它会检查资源是否充足,如果充足,它会试分配资源,再检查此时系统是否处于安全状态,如果处于安全状态,那么就正式分配资源,否则拒绝分配资源。
答:安全状态是指系统按照某种进程顺序,为进程分配资源,使得每个进程都能获取所需的最大资源,并顺利完成。不是,但是死锁状态一定是不安全状态。
存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及在逻辑上扩充存储器。
答:装入方式:绝对装入、静态重定位、动态重定位。链接方式:静态链接、装入时动态链接、运行时动态链接。
覆盖技术,将内存分为一个固定区和若干个覆盖区,固定区存放最活跃的程序段,固定区中的程序不会在运行过程中调入调出;覆盖区中的程序段在运行过程中根据需要进行调入调出。交换技术,内存紧张情况下,将某些进程换出内存,称为挂起,但该进程的PCB仍驻留内存,换出的程序存放在磁盘上的对换区。区别:覆盖技术是同一个进程中,交换技术是在不同进程之间。
答:至少需要在系统中增设一个重定位寄存器,用来存放正在执行作业的内存地址,每次访问数据时,由硬件自动将相对地址与重定位寄存器中的起始地址相加,形成实际的物理地址。
固定式分区的特点是把内存划分为若干个固定大小的连续分区。分区大小可以相等:这种作法只适合于多个相同程序的并发执行(处理多个类型相同的对象)。分区大小也可以不等:有多个小分区、适量的中等分区以及少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。
优点:易于实现,开销小。
缺点主要有两个:内碎片造成浪费;分区总数固定,限制了并发执行的程序数目。
动态分区的特点是动态创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。与固定分区相比较其优点是:没有内碎片。但它却引入了另一种碎片——外碎片。动态分区的分区分配就是寻找某个空闲分区,其大小需大于或等于程序的要求。若是大于要求,则将该分区分割成两个分区,其中一个分区为要求的大小并标记为“占用”,而另一个分区为余下部分并标记为“空闲”。分区分配的先后次序通常是从内存低端到高端。动态分区的分区释放过程中有一个要注意的问题是,将相邻的空闲分区合并成一个大的空闲分区。
最先适配法(nrst-fit):从前往后,依次寻找适配的分区
下次适配法(循环首次适应算法nextfit):从上次分配分区的下一个分区开始查找
最佳适配法(best-fit):找最合适的分区适配
按分区在内存的先后次序从头查找,找到其大小与要求相差最小的空闲分区进行分配。从个别来看,外碎片较小;但从整体来看,会形成较多外碎片优点是较大的空闲分区可以被保留。
最坏适配法(worst-fit):
按分区在内存的先后次序从头查找,找到最大的空闲分区进行分配。基本不留下小空闲分区,不易形成外碎片。但由于较大的空闲分区不被保留,当对内存需求较大的进程需要运行时,其要求不易被满足。
答:采用可变分区方式管理时,一般均采用动态重定位方式装入作业;地址变换要靠硬件支持,主要是两个寄存器:基址寄存器和限长寄存器,这两个值确定了一个分区的位置和大小;限长寄存器存放作业所占分区的长度;基址寄存器则存放作业所占分区的起始地址;地址转换时:根据逻辑地址与限长值比较,如果不有超过这个值,表示访问地址合法,再加上基址寄存器中的值就得到了绝对地址了,否则形成“地址越界”中断。
1.最佳(OPT)置换算法
2.先进先出(FIFO)置换算法
3.最近最久未使用(LRU)算法
4.时钟(CLOCK)置换算法
页表指出逻辑地址中的页号与所占主存块号的对应关系。作用:页式存储管理在用动态重定位方式装入作业时,要利用页表做地址转换工作。快表就是存放在高速缓冲存储器的部分页表。它起页表相同的作用。由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。
1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要(也是对用户透明的,用户不知道具体操作)。段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。分段的目的是为了能更好的满足用户的需要(用户也是可以使用的)。
2)页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
3)分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符(线性地址的16进制表示),即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名(比如数据段、代码段和堆栈段等),又需给出段内地址。
4)页和段都有存储保护机制。但存取权限不同:段有读、写和执行三种权限;而页只有读和写两种权限
注:分页之所以以是一维的,原因du在于分页的大小是zhi固定的,dao且页码之间是连续的,操作zhuan的时候只需shu给出一个地址,就能够根据所给地址的大小与页面大小计算出在页码和页内地址,粗略举例,比如页面大小是4KB,给一个地址为5000,可以算出所在页码是2,页内地址是5000-4000=1000,即在第二页的第1000个位置。而分段的因为每段的长度不一样,必须给出段码和段内地址
答:缺页中断的处理过程与一般中断相似。主要区别:一般中断只需要保护现场,然后就直接跳到需及时处理的地方。
缺页中断除了保护现场之外,还要判断内存中是否有足够的空间存储所需的页或段,然后再把所需页调进来再使用。
2、结果不同
一般中断在处理完之后返回时,执行下一条指令。
缺页中断返回时,执行产生中断的那一条指令。
3、次数不同
在指令执行期间产生和处理缺页中断信号,一条指令在执行期间,可能产生多次缺页中断。
一般中断只产生一次,发生中断指令后转入相应处理程序进行处理,恢复被中断程序现场
文件逻辑结构是说明文件内部如何被组织起来的
顺序结构:顺序存放记录,增加删除一个记录比较困难索引结构:在索引表中存放记录,方便快速查找索引顺序结构:先将记录分组,在用索引表记录
文件物理结构是说明文件是如何存放在外存上的
连续分配:文件会在磁盘上占用一组连续的块链接分配:用链接或者文件分配表实现离散分配索引分配:每个文件都加入一张索引表,如果索引表过大,可以采用多级索引的方式散列文件:定记录的键值或通过Hash函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。
操作系统如何管理外存空闲块,空闲磁盘块的管理
程序直接控制方式:CPU发出I/O命令后不断轮询检查IO控制器状态(浪费CPU资源)中断驱动控制方式(中断程序):CPU发出I/O命令后可以去处理别的进程,当本次IO结束后设备控制器会向CPU发送中断信号,让他回来继续处理。+DMA方式(直接存储器存取):CPU发出IO命令后处理别的进程,本次IO结束后DMA控制器发出中断信号,数据传输单位是块
与中断方式的主要区别是:
1.中断方式在每个数据需要传输时都需要中断CPU,而DMA方式是在所要求传送的一批数据全部传送完毕时才中断CPU;2.中断方式中数据传输是在中断处理时由CPU控制完成的,而DMA方式中数据传输是在DMA控制器控制下完成的。
通过在I/O设备和内存之间开启一个可以直接传输数据的通路,采用DMA控制器来控制一个数据块的传输,CPU只需在一个数据块传输开始阶段设置好传输所需的控制信息,并在传输结束阶段做进一步处理。
通道控制方式(硬件):CPU发送IO命令后处理别的进程,通道会执行通道程序完成IO,完成后通道向CPU发送中断信号,数据传输单位是一组块
答:设备独立性是指用户程序独立于所使用的具体设备。实现方式是系统为每个用户进程配置一张用于联系逻辑设备名和物理设备名的映射表,以实现使用逻辑设备名来请求物理设备。
虚拟性是OS的四大特性之一。如果说可以通过多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机,那么,通过SPOOling技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备。
SPOOLing技术是对脱机输入、输出系统的模拟。相应地,SPOOLing系统必须建立在具有多道程序功能的操作系统上,而且还应有高速随机外存的支持,这通常是采用磁盘存储技术。
SPOOLing系统主要有以下三部分:(1)输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/Q设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。(2)输入缓冲区和输出缓冲区。为了缓和和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区;输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用与暂存从输出井送来的数据,以后在传送给输出设备。(3)输入进程SPi和输入进程SP0。这里利用两个进程来模拟脱机I/O时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SP0模拟脱机输出时的外围控制机,把用户要求输出的数据从先内存送到输出井,待输出设备空闲时,在将输出井中的数据经过输出缓冲区送到输出设备上。
SPOOLing技术的特点:(1)提高了I/O速度。从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾。(2)将独占设备改造为共享设备。因为在SPOOLing系统的系统中,实际上并没为任何进程分配设备,而知识在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表。这样,便把独占设备改造为共享设备。(3)实现了虚拟设备功能。多个进程同时使用一独享设备,而对每一进程而言,都认为自己独占这一设备,从而实现了设备的虚拟分配。不过,该设备是逻辑上的设备。