西安交通大学操作系统复习.docx
《西安交通大学操作系统复习.docx》由会员分享,可在线阅读,更多相关《西安交通大学操作系统复习.docx(26页珍藏版)》请在冰豆网上搜索。
西安交通大学操作系统复习
OPERATINGSYSTEMREVIEW
CHAPTER1
1.操作系统定义:
操控硬件的程序,用户与硬件的媒介,分配控制资源
2.操作系统目标:
方便性(convenience),有效性(efficiency),(可扩充性开放性)
3.操作系统作用:
资源管理(处理机管理,储存器管理,设备管理,文件管理,用户接口);服务用户(提供接口)
4.操作系统分类
(1)批处理(batch):
自动性,没有交互性。
自动从一个job转移到另一个job。
(2)分时(time-sharing):
允许多个用户同时使用,CPU在多个进程之间轮转,可及时响应用户需求。
(3)实时(real-time):
实时性,对时间有严格的要求,对安全性要求高。
(4)通用:
同时具有两种或以上性质的操作系统。
5.操作系统特征
(1)并发性(Concurrence):
并发是指两个或者多个事件在同一时间间隔内发生,在单处理机系统中,宏观上多道程序同时执行,微观上各个程序交替运行。
并发与并行不同,并行是指两个或者多个事件在同一时刻发生。
并发程序具有间断性、失去封闭性和不可再现性等特征。
(2)共享性(Sharing):
共享是指在一段时间内多个并发进程交替使用有限的计算机资源,共同享有计算机资源,操作系统对资源要合理的分配和使用。
共享资源有互斥共享方式和同时访问方式。
互斥访问方式是指当一个进程占有资源时,其他进程不能同时再使用这个资源,必须得等到资源被放弃时再使用。
同时访问方式是指如程序段和磁盘等资源,可以由进程交替访问。
(3)虚拟性(Virtual):
虚拟是指通过某种技术把物理实体转换成若干个逻辑对应物。
例如,地址空间具有虚拟性,它是由内存空间通过划分段表/页表技术转换而来的。
(4)异步性(Asynchronism):
异步性是指进程只要在相同的环境下,无论多少次运行,都会得到相同的结果。
6.相关技术
(1)多道程序技术(multiprogramming)
●定义:
当CPU正在处理的job需要等到I/O响应时,CPU并不会闲置,而是转去处理下一个job,直到之前的job在处理完IO后拿回CPU使用权。
不可与用户交互。
●优点:
提高CPU利用率,控制并发。
(2)分时技术(time-sharing/multitasking)
定义:
logicalextensionofmultiprogramming.Thecpuexecutesmultiplejobsbyswitchingamongthem,buttheswitchsofrequentlythattheuserscaninteractwitheachprogramwhileitisrunning.
CHAPTER2
1.操作系统接口
(1)作业级接口(Commandinterface):
●命令行(commandlineinterface)
●批处理(batch):
规定一种特殊的文件,通常该文件有特殊的扩展名,用户可预先把一系列命令组织在该文件中,一次建立多次执行
●GUI:
makemouse-based-window-and-menusystemasinterface
(2)程序级接口(Programinterface)
系统调用(systemcall)
定义:
systemcallprovideaninterfacetotheservicemadeavailablebytheoperatingsystem.操作系统内核提供的服务的接口。
分类:
进程管理processcontrol文件操作filemanipulation设备管理devicemanipulation信息维护informationmaintenance进程通信communication
2.操作系统结构(OSStructure)
(1)简单结构(MS-DOS,originalunix)
●MS-DOS:
interfacesandlevelsoffunctionalityarenotwellseparated.leavebasehardwareaccessible.
●UNIX:
seriesofinterfacesanddevicedrivers.Monolithicstructureisdifficulttoimplement.
(2)分层结构(layered):
从资源管理的角度出发,把操作系统分为若干层次,在某一层上只能调用低层次上的代码,使模块的调用更加有序。
有利于系统维护和可靠。
(3)微内核结构(microkernel):
去除内核中不必要的部分,将这些部分在用户模式下实现,从而只给内核最基本的功能。
微内核提供给客户程序与运行在用户空间的各种服务提供通信(communication).MACH
CHAPTER3
引入进程原因
在多道程序设计的环境下,程序是并发执行的,它破坏了程序的封闭性和可再现性,使得程序和计算不再一一对应
且由于资源共享,导致在各个程序之间可能存在相互制约的关系,出现了许多新的特征:
动态性、并发性、独立性和异步性。
程序(进程)并发的特点:
间断性\失去了封闭性\不可再现性
程序这个静态概念已经不能如实反映程序活动的这些特征。
为此引入进程这个概念来描述系统和用户的活动。
进程的概念:
程序的一次执行
进程的特性:
(1)动态性:
有生命周期
(2)并发性:
并发执行
(3)独立性:
独立获得资源、独立运行单位
(4)异步性:
推进速度不可预知道、执行结果不确定
(5)结构性:
由程序段、数据段和PCB组成
进程的状态(processstate):
进程的组成
程序(textsection),数据(datasection),PCB(processcontrolblocks)
PCB的定义:
记录OS所需的、用于描述进程的当前情况以及控制进程运行的全部信息,是进程存在的唯一标志,常驻内存。
PCB的内容:
进程标识符;处理机状态(CPU现场);进程调度信息:
状态、优先级、时间、事件;进程控制信息:
地址、通信信息、资源。
Programcounter指明进程的下一条指令
CPUregisters中断发生时,所有的寄存器需要被存储。
CPU-schedulinginfo包括进程优先级,进程队列指针等调度信息
Memory-managementinfo包括基本寄存器的值,页表等信息
Accountinginfo记录进程运行的时间,使用了多少CPU等
IOstatusinfo包括分配给进程的设备
进程与程序的区别联系
(1)进程是程序的一次执行,是一个动态的概念;而程序是一组有序的指令,是一种静态的概念。
即进程是程序执行的动态过程,而程序则是进程运行的静态文本。
(2)一个进程可以执行一个或几个程序,同一个程序也可能由几个进程同时执行。
(3)程序可长期保存,而进程是有生命周期的。
(4)进程是并发实体,而程序则不是。
进程与线程的区别联系
(1)调度方面:
线程作为调度分派的基本单位,而进程则是资源分配和调度的一个基本单位;
(2)并发性方面:
进程之间可以并发,一个进程的多线程之间也可并发执行;
(3)拥有资源方面:
进程作为拥有资源的基本单位,而线程只拥有少量必不可少的资源,但它可以访问所属进程的资源
(4)系统开销方面:
进程切换要涉及到进程环境的切换,开销较大,而线程间切换只需保存和设置少量的寄存器内容,开销远小于进程切换开销
进程的控制
(1)进程控制由操作系统内核完成
(2)内核通过执行相应的原语(primitive)来实现进程的控制
(3)进程控制原语:
创建,终止,阻塞,唤醒,挂起,激活
创建原语完成以下工作:
申请一个空PCB,初始化PCB中项目,把PCB插入就绪队列
撤消原语完成以下工作:
根据ID在PCB链中查找相应PCB,检查进程状态。
若是执行状态则终止进程;终止其子进程;回收资源;撤销PCB
阻塞原语:
当出现阻塞事件,将状态改为阻塞状态,进入阻塞队列
唤醒原语:
将阻塞进程唤醒,状态改为READY,插入就绪队列。
挂起原语:
进程从内存转到外存,改变相应状态
激活原语:
进程从外存转到内存,改变相应状态
CHAPTER4
线程(thread)定义:
AthreadisabasicunitofCPUutilization.处理机调度的基本单位,是进程内的一个可调度实体,又称轻量级进程。
引入目的:
提高系统效率,提高资源利用率,减少进程并发执行时所付出的时空开销,使操作系统有更好的并发性。
(一个进程中的所有线共享同样的code,data,file,比如一个webserver,对于所有的request,反应几乎一样,若为每个request新创建一个进程,会造成code,data,file的重复,造成空间,时间资源的浪费)
线程包括:
线程ID,当前指令指针(PC),寄存器集合,堆栈。
用户级线程和内核支持线程:
(1)用户线程(userthread):
存在于用户空间中,其创建、撤消和切换都不需系统支持。
(2)内核支持线程(kernelthread):
是依赖于内核的,其创建、撤消和切换都是由内核实现的。
Multithreadingmodels
Manytoone:
manyuserlevelthreadstoonekernelthread.(因为只有一个线程可以access内核,因此多个线程不可以同时在多个内核上运行)
Onetoone:
eachuserthreadtoakernelthread(多个线程可以在多个内核上同时运行,一个阻塞也不会影响其他,但每一个用户线程均要创立一个内核线程,额外开销大,限制应用程序的性能)
Manytomany:
manyuserlevelthreadstoasmallerorequalnumberofkernelthreads.(开销不大,而且线程可以并发)
CHAPTER5
三级调度
(1)高级调度:
Long-termscheduler(job-scheduler):
selectaprocessfromthepoolandloadsthemintomemoryforexecution.从jobpool里选一个进程加载在内存里
(2)低级调度:
Shorttermscheduler(CPU-scheduler):
selectaprocessfromtheprocessesinmemorythatarereadytoexecuteandallocatestheCPUtotheprocess.从内存中选择一个进程给CPU执行
(3)中级调度:
Mid-termscheduler:
removeprocessesfrommemoryandlaterreintroduceitintomemory.把内存中的进程swap出去再swap进来
调度时机
(1)现运行进程任务完成或出现异常
(2)现运行进程因某种原因由执行变成阻塞状态
(3)时间片用完
(4)采用可剥夺调度方式时,有更高优先级进程进入就绪队列
调度参数(schedulingcriteria)
周转时间(turnaroundtime)
等待时间(waitingtime)
响应时间(responsetime)
调度算法
FCFS(first-comefirst-serve)
SJF(shortest-job-first)
Priority(优先权调度)
Round-Robin(时间片轮转)
MultilevelQueue(多级队列):
根据进程的性质将就绪队列分为几个队列,每个队列有不同的调度算法,队列与队列之间的调度一般为优先级调度或时间片。
MultilevelFeedback-Queue(多级反馈队列):
主流OS使用此算法。
与多级队列算法不同的是,多级反馈队列允许进程转移到其他队列。
因此多级反馈队列还要设计进程的升级与降级规则。
(此处还有多处理机的调度,线程的调度)
CHAPTER6
基本概念
临界区(criticalsection):
一段代码,用来修改临界资源,只能有一个进程处于临界区
进入区(entrysection):
请求进入临界区的程序
退出区(exitsection):
紧跟着临界区后的程序
剩余区(remaindersection):
剩下的程序
解决临界区问题的三个要求
互斥(Mutualexclusion):
保证安全
有空让进(Progress):
保证资源利用率
有限等待(Boundedwaiting):
防止饥饿
Peterson算法
(1)只能控制两个进程
(2)程序
P0:
flag[0]=true;
turn=1;
while(flag[1]==true&&turn==1)
{
//busywait
}
//criticalsection
flag[0]=false;
//endofcriticalsection
P1:
flag[1]=true;
turn=0;
while(flag[0]==true&&turn==0)
{
//busywait
}
//criticalsection
flag[1]=false;
//endofcriticalsection
(3)程序分析
满足互斥:
如果两个进程都在临界区,则FLAG[i]=FLAG[j]=1。
但turn必然会取0或1中的一个,因此必有一个while满足条件,故必有一个进程在while循环中等待。
因此假设错误,不可能有两个进程同时在临界区。
满足有空让进和有限等待:
假设Pi已经准备好进入临界区,正在while循环中等待。
对于Pj的以下三种情况:
●若Pj未准备好,则FLAG[j]=0,那么Pi的while条件不再满足,进入临界区。
●若Pj准备好了,且也在while循环中,则turn=0,那么Pi的while条件不再满足,进入临界区。
●若Pj刚出临界区,则FLAG[j]=0,那么Pi的while条件不再满足,进入临界区。
因此,只要Pj不在临界区了,Pi就可以进入临界区,因此满足有空让进;当Pj执行完临界区,Pi就可以进入临界区,满足有限等待。
信号量(Semaphore)与PV操作
信号量:
ASemaphoreisaspecialintegervariable,itcanbeaccessedonlythroughtwostandardatomicoperations。
P操作(wait):
requestaresource
Wait(S){whileS<=0;//no-opS--;}
V操作(signal):
releasearesource
signal(S){S++;}
//P.V操作必须成对出现,有一个P操作就一定有一个V操作
//当为互斥操作时,它们处于同一进程
//当为同步操作时,则不在同一进程中出现
//对于前后相连的两个P(S1)和P(S2),顺序是至关重要的:
同步P操作应该放在互斥P操作前,而两个V操作顺序则无关紧要
信号量实现互斥
为临界资源设置一个互斥信号量mutex,其初值为1;在每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间
信号量实现同步
P.V操作必须成对出现,有一个P操作就一定有一个V操作
三个经典问题
(1)生产者消费者
(2)读者写者
(3)哲学家吃米饭
While(true){
wait(chopstick[i]);
wait(chopStick[(i+1)%5]);
//eat
signal(chopstick[i]);
signal(chopstick[(i+1)%5]);
//think
}
管程(Monitor)的定义:
一个管程定义了一个数据结构和能为并发进程调用的在该数据结构上的一组操作过程,这组互斥操作的过程,能同步进程和改变管程中的数据。
管程实现互斥:
外部等待队列。
一个管程的程序在运行一个线程前会先获取互斥锁,直到完成线程或是线程等待某个条件被满足才会放弃互斥锁。
管程实现同步:
内部设置条件变量。
一个条件变量就是一个线程队列(queue),其中的线程正等待某个条件变为真。
CHAPTER7DEADLOCK
死锁(deadlock)的概念
计算机系统中多道程序并发执行时,两个或两个以上的进程由于竞争资源而造成的一种互相等待的现象(僵局),如无外力作用,这些进程将永远不能再向前推进。
死锁产生原因
众多进程竞争有限资源;进程推进顺序不合适。
死锁产生的必要条件
互斥使用(Mutualexclusion)
不可剥夺(Nopreemption)
请求保持(Holdandwait)
环路等待(Circularwait)
解决死锁的方案
(1)设计无死锁的系统:
预防、避免
(2)允许出现死锁然后排除:
检测并解除
(3)置之不理
资源分配图(resource-allocationgraph)中的概念辨析
没有环路,则没有死锁
有环路,可能有死锁也可能没有
若每种资源只有一个实例,有环路就有死锁
死锁的预防
破坏四个必要条件之一,通常是破坏第三、四个条件。
(1)资源的静态分配方法:
进程运行前一次性申请全部资源,破坏请求和保持条件.
(2)资源的顺序分配法:
系统的全部资源进行编号,只允许按编号顺序递增地申请,破除环路待。
(3)一个已占有资源的进程,若要申请新的资源,必须先放弃已占有的资源,破坏请求保持条件。
死锁的避免
每当进程申请资源时,都根据一定的算法判断是否安全
安全状态:
当多个进程动态申请资源时,系统按某一顺序逐次地为每个进程分配所需资源,使每个进程都可以在最终得到最大需求量后依次顺利完成。
不安全状态:
可能死锁
避免死锁的关键:
让系统在动态分配资源的过程中,不要进入不安全状态
银行家算法
死锁的解除:
删除法:
删除死锁进程,将其资源分给其他进程
剥夺法:
剥夺某些进程的资源
CHAPTER8MAINMEMORY
一些概念
●逻辑地址:
anaddressgeneratedbycpu
●物理地址:
anaddressseenbythememoryunit
●内存管理单元(MMU-memorymanagementunit):
包括一个基地址寄存器(relocationregister)和一个加法器,在程序运行时map虚拟地址到物理地址。
●Compilerbindsymbolicaddresstoreloacatableaddress
●Loader/linkageeditorbindrelocatableaddresstoabsoluteaddress
重定位
动态重定位:
在程序执行期间每次访问内存之前进行重定位。
这种变换是靠硬件地址变换机构实现的。
通常采用重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。
静态重定位:
在目标程序装入内存时,由装入程序对目标程序中的指令和数据的逻辑地址改成物理地址。
对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。
内存为程序分配空间的四种方式
(1)连续分配方式(contiguousmemoryallocation)
单一连续分配
固定分区分配:
分区容量和数目固定不变,大小可不等,每个分区容纳一道作业
可变分区分配:
动态分区,作业装入内存时才建立分区(根据作业的大小)
//四种动态分区分配算法:
●首次适应(firstfit):
allocatethefirsthole
●最佳适应(bestfit):
allocatethesmallesthole
●最差适应(worstfit):
allocatethelargesthole
●Nextfit:
从刚刚分配出的内存开始查找合适的hole分配
可重定位分区分配:
重定位寄存器(relocationregister)、紧凑技术(把进程统一移向一边)
(2)基本分页存储管理方式(paging)
分页引入:
动态分区方式产生“外碎片”,采用紧凑技术要付出很大开销,于是引入了页式存储管理。
分页定义
Amemory-managementschemethatpermitsthephysicaladdressspaceoffittingmemorytobenoncontiguous.
分页原理:
●将物理内存分割为等份,叫做物理块(frame),大小一般为2的次方
●将逻辑地址分割为等份,叫做页(page),大小与frame相等
●建立page与frame的关系映射,叫做页表(pagetable),页表在内存里。
●地址转换是在进程执行过程中进行的。
分页的地址变换过程
当一个进程转入执行状态时,其页表的始址和长度从其PCB中装入页表寄存器。
当进程要访问某个逻辑地址中的指令或数据时,地址变换机构自动地将逻辑地址分为页号和页内地址两部分,并将页号与页表寄存器中的页表长度比较,若页号不小于页表长度,便产生越界中断,否则以页号为索引,去检索页表,从中得到该页的物理块号,送入物理地址寄存器与页内地址拼接,形成物理地址。
快表(TLB-translationlook-asidebuffer)
为了提高访问速度,存放被频繁访问的页面的页表项。
先查快表,没有查到再查页表。
快表很小,访问很快,造价高。
内存访问时间的计算(effectiveaccesstime)
Effectiveaccesstime=快表命中率*(快表时+内存时)+(1-快表命中率)*(快表时+2*内存时)
(3)基本分段存储管理方式(segmentation)
硬件实现
定义:
amemory-managementschemethatsupporttheuserviewofmemory.Alogicaladdressspaceisacollectionofsegments.Eachhasanameandalength.
(4)段页式存储管理方式
对换技术(swapping)
定义:
把主存中暂时不能运行的进程调出到外存,以便腾出足够的内存空间,再将具备运行条件的进程调入内存。
作用:
从逻辑上扩充内存空间,从而使整个系统资源利用率提高.
整体对换:
以进程为单位,进程对换
部分对换:
页面对换,分段对换
碎片(fragmentation)
内部碎片(internalfragmentation):
已被分配出去的内存空间大于请求所需的空间
外部碎片(externalfragmentation):
还没有被分配出去但由于太小而无法分配给新进程的空闲块