计算机操作系统
2017-03-20 19:34:18 0 举报
AI智能生成
计算机系统前3章知识点
作者其他创作
大纲/内容
第一章 操作系统引论
<div>1.1 操作系统的概述</div>
<div>计算机系统= 硬件+软件</div>
<div>操作系统的定位:</div><div><div>它是裸机之上的第一层软件</div><div> 裸机:没有配置任何软件的物理计算机</div></div>
1.2 操作系统的目标和作用
<div>1.操作系统的目标</div>
<div>方便性:方便使用计算机系统,避免用户自己编写程序的繁琐工作。</div>
<div>有效性:<span style="font-size: 13px;">合理组织计算机的工作流程,进一步改善资源的利用率,提高系统的吞吐量。</span></div>
<div>可扩充性</div>
<div>开放性</div>
<div>2. 操作系统的作用</div>
<div>它作为用户和计算机硬件之间的接口</div>
<div>它作为计算机系统资源的管理者</div>
<div>它作为扩充机器</div>
<div> 3. 推动操作系统发展的主要动力</div>
<div>不断提高计算机资源利用率</div>
<div>方便用户使用</div>
<div>器件的不断更新换代</div>
<div>计算机体系结构的不断发展</div>
<div>1.3 操作系统的发展过程</div>
<div>1. 无操作系统的计算机系统 </div>
<div> 1) 人工操作方式</div>
<div> 2) 脱机输入/输出方式</div>
<div>2. 单道批处理系统 </div>
<div> 1) 联机批处理(慢速I/O直接与主机相连)</div>
<div>2) 脱机输入/输出方式</div>
3. 多道批处理系统
<div>4. 分时系统 </div>
<div>5. 实时系统 </div>
<div>概述:计算机能及时响应外部事件的请求,在规定的时间内完成对原事件的处理,并且控制所有实时设备和实时任务协调一致的工作。</div>
<div>系统特征 :</div>
<div>(1)响应时间要快</div><div>(2)系统可靠性要高</div><div>(3)具有连续的人-机对话能力</div><div>(4)具有保护过载能力</div><div>(5)系统整体性要强</div>
<div>6. 实时系统和分时系统的比较</div>
<div>1.4 操作系统的基本特性</div>
<div>1. 并发性(Concurrence):指多个事件同时发生。</div>
<div>并发:是一种逻辑的或者宏观的同时性概念,即并发是宏观上的并行。</div><div>(在各自的起点和终点之间);</div>
<div>并行:是一种物理的或者微观的同时性概念。</div>
<div>2. 共享性(Sharing):OS追求的主要目标之一,并发和共享是OS的两个最基本的特征。</div>
<div>3. 不确定性(Nondeterminacy):指事件的不可预测(时间和次序)随机性事件是造成OS不确定性的基本原因。</div>
<div>4. 虚拟性(Virtual):虚拟是指将一个物理的实体变换(映射)为若干个逻辑上的对应物。例如分时CPU。</div>
1.5 操作系统的主要功能
<div>1. 处理机管理</div>
主要任务:对CPU进行分配,且对其运行控制和管理
<div>进行控制:为作业创建、撤销已结束的进程;</div><div>进程同步:进程互斥和进程同步;</div><div>进程通信:进程之间的信息交换;</div><div>调度:作业调度和进程调度。</div>
<div>2. 存储器管理</div>
<div>主要任务:为多道程序分配内存,方便用户使用存储器,提高 存储器利用率并且在逻辑上扩充内存。</div>
<div>内存分配:为每道程序静态或者动态地分配内存;</div><div>内存保护:保证每道用户程序都在自己的内存空间运行,互不干扰;</div><div>地址映射:将应用程序的地址空间映射为逻辑地址或相对地址;</div><div>内存扩充:借助虚拟存储技术,从逻辑上扩充内存。</div>
<div>3. 设备管理功能</div>
<div>主要任务:完成I/O请求,分配I/O设备,提高CPU和I/O设备的利用率,提高I/O速度,方便使用I/O设备。 </div>
<div>缓冲管理:管理好各类缓冲区,提高系统吞吐量;</div><div>设备分配:根据I/O请求,分配所需要的设备;</div><div>设备处理:实现CPU与设备控制器之间的通信;<br><div>设备独立性:指应用程序独立于物理设备;</div><div>虚拟设备:将一个物理设备变换(改造)为多个对应的逻辑设备,是每个用户感觉自己独占该设备(spooling技术)。</div></div>
<div>4. 文件管理</div>
<div>主要任务:对用户文件和系统文件进行管理,方便用户使用,并保证文件的安全性 。</div>
<div>文件存储空间的管理:为文件分配必要的外存空间,提高外存利用率,并提高文件系统的运行速度;</div><div>目录管理:为每个文件建立其目录项,并对众多的目录项加以有效的组织,实现方便的按名存取;<br><div>文件读/写管理:从外存中读写数据;</div><div>文件保护:防止未经核准的用户存取文件,防止冒名存取文件,防止不正确的方式存取文件。</div></div>
<div>5. 用户接口</div>
<div>主要任务:方便用户使用操作系统,以命令、系统调用或者图形方式为用户提供接口 。</div>
1.6 操作系统的结构设计
<div>1. 传统的操作系统结构</div>
<div>无结构操作系统:<span style="font-size: 13px;">OS可以看做一组过程的集合,过程之间互相调用。</span></div>
<div>模块化结构: <span style="font-size: 13px;">OS由许多标准的、可兼容的基本单位构成,称为模块。各模块功能上相互独立,模块间通过规定的接口相互调用,将各模块连接起来构成完整的系统。 </span></div>
<div>分层式操作系统:<span style="font-size: 13px;">将模块按照某种逻辑关系排成若干层、层间只能单向依赖,不构成循环,系统的正确性由各层的正确性来保证。</span></div>
<div>2. 微内核操作系统结构</div>
<div>客户/服务器模式(Client-Server Model)</div>
<div>面向对象的设计技术(Object-Oriented Programming)</div>
<div>微内核技术(MicroKernel):是指精心设计的、能实现现代OS核心功能的小型内核。 </div>
<div>a. 进程管理</div><div>b. 存储器管理</div><div>c. 进程通信管理</div><div>d. I/O设备管理</div>
第2章 进程的描述与控制
<div>2.1 进程的基本概念</div>
<div>1. 程序的顺序执行与特征</div>
<div>前趋图: 是一个有向无循环图DAG(Directed Acyclic Graph)</div>
<div>特征:</div>
<div>(1)顺序性 </div><div>(2)封闭性 </div><div>(3)可再现性 </div>
<div>2.程序的并发执行和特征</div>
<div>(1)不可再现性 :<span style="font-size: 13px;">并发程序的执行结果与它们的相对速度有关。</span></div>
<div>(2)制约性 :并发程序之间相互依赖和制约。</div>
<div>(3)程序与计算不再一一对应 </div>
<div>3.进程的定义和特征</div>
定义:一个具有独立功能的程序在一个数据集合上的一次动态执行过程。是系统进行资源分配和调度的一个独立单位。
<div>进程和程序的区别:</div>
<div>程序是静态概念,是一组指令的有序集合;进程是程序的执行,是动态概念。</div>
<div>进程的存在是暂时的,而程序的存在是永久的。</div>
<div>进程和程序是密切相关的,但是无一一对应关系。一个程序可对应多个进程;通过调用关系,一个进程也可包含多个程序。</div>
进程是一个能独立运行的单位,能与其它进程并发执行。而程序是不能作为一个独立运行的单位而并发执行的。
<div>进程是程序的执行,因此进程的组成应包括程序、数据和进程控制块(即进程状态信息)。</div>
<div>特征</div>
<div>动态性 进程是程序在并发系统内的一次执行,一个进程有一个从产生到消失的生命期;</div>
<div>并发性 正是为了描述程序在并发系统内执行的动态特性才引入了进程,没有并发就没有进程;</div>
<div>独立性 每个进程的程序都是相对独立的顺序程序,可以按照自己的方向和速度独立地向前推进;</div>
<div>制约性 进程之间的相互制约,主要表现在互斥地使用资源和相关进程之间必要的同步和通讯;</div>
<div>结构性 进程 = PCB(进程控制块) + 程序 + 数据集合。</div>
<div>4.进程的状态和组成</div>
进程的基本状态:
运行状态
就绪状态
阻塞状态
创建状态
退出状态
<div>进程队列、PCB组织方式:</div>
线性方式
链接方式
<div>索引方式</div>
<div> 2.2 进程控制</div>
原语:
<div>原语操作也称做“原子操作”,即一个操作中的所有动作要么全做,要么全不做。</div>
进程的创建
进程可借助创建原语建立一个子进程
进程的终止
<div>撤销原语一般由其父进程或祖先发出,不会自己撤销自己。一旦系统中出现要求终止进程的事件后,便调用进程终止原语。</div>
<div>进程的阻塞</div>
<div>正在运行的进程通过调用阻塞原语主动地把自己阻塞。 </div>
进程的唤醒
<div>当被阻塞进程所等待的事件出现时,则由另外的与被阻塞进程相关的进程调用唤醒原语,将等待该事件的进程唤醒。可见,被阻塞进程不能唤醒自己。</div>
进程的挂起
<div>调用挂起原语的进程只能挂起它自己或它的子孙。</div>
进程的激活
<div>一个进程只能将自己的子孙进程解挂。一个进程可以将自己挂起,却不能将自己解挂。</div>
<div> 2.3 进程同步</div>
1.进程同步的基本概念
<div>(1)同步(直接相互制约关系、相互合作的关系)</div>
<div>(2)互斥(间接相互制约关系、对资源争用的关系)</div>
<div>2.临界资源和临界区</div>
<div>(1)临界资源(Critical Resouce )</div>
一次只允许一个进程使用的资源。
<div>(2) 临界区(critical section) </div>
<div>在每个进程中访问临界资源的那段程序,简称CS区。</div>
<div>(3) 临界区的调用原则</div>
空闲让进
忙则等待
有限停留
让权等待
<div>3.临界区互斥执行的解决方法</div>
<div>(1)软件方法</div>
<div>单标志算法<br>双标志、先检查算法<br>双标志、先修改后检查算法<br></div>
<div>先修改、后检查、后修改者等待算法(算是对两个进程同步最好的实现)</div>
<div>(2)硬件方法</div>
4.信号量机制
1. 整型信号量
即PV操作对应的wait(S),signal(S).S表示资源数 mutex互斥
执行一次signal操作意味着释放一个单位资源
执行一次wait操作意味着申请分配一个单位资源
2. 记录型信号量
<div>信号量的值(s.value,计数)</div>
<div>指向PCB的指针(s.L,标识进程等待队列)</div>
<div>3. AND型信号量 </div>
<div>区别:上述的进程互斥问题,是针对各进程之间要共享一个临界资源而言的。在有些应用场合,是一个进程需要先获得两个或更多的共享资源后,方能执行其任务。</div>
<div>Swait(S1,S2,…,Sn)</div>
<div>Ssignal(S1,S2,…,Sn)</div>
<div>4. 信号量集 </div>
区别:在记录型信号量机制中,wait(S)和signal(S)操作仅能对信号量施以加1或减1操作,当一次需要N个某类临界资源时,便要进行N次wait(S)操作,很低效;另外,在有些情况下,当资源数量低于某一下限值时,便不予以分配。
S为信号量,d为需求值,t为下限值。
Swait(S1, t1, d1, …, Sn, tn, dn)
5.信号量的应用
<div>利用信号量实现进程互斥 </div>
<div>用信号量实现进程同步</div>
利用信号量实现前趋关系
2.4 经典的同步问题
生产者—消费者问题
<div>2. 读者-写者问题(reader-writers problem)</div>
<div>3. 哲学家进餐问题(The Dinning Philosophers Problem)</div>
<div>用AND信号量机制可获得最简洁的解法。</div><div>每个哲学家先获得两个临界资源(筷子)后方能进餐,</div>
<div> 2.5 管程机制</div>
1.管程的基本概念
<div>基本思想:把信号量及其操作原语封装在一个对象中。</div>
<div>2.管程(monitor)的定义</div>
<div>管程由三部分组成:</div><div>(1)局部于管程的共享变量说明;</div><div>(2) 对该数据结构进行操作的一组过程;</div><div>(3) 对局部于管程的数据设置初始值的语句。此外,还须为管程赋予一个名字。 </div>
为了实现对临界资源的互斥访问,管程每次只允许一个进程进入其内(即访问管程内的某个过程)
<div>3.引入管程的优点</div>
<div>(1)具有良好的封装性,可增强模块的独立性。</div><div>(2)引入管程可以提高代码的可读性,便于修改和维护并保证代码的正确性。 </div>
<div>4.管程和进程的区别</div>
<div>(1)进程是为了描述程序的动态执行过程,而管程是为了协调进程的同步和对共享资源的访问。</div><div>(2)操作系统维护进程的数据结构是PCB,而与管程相关的数据结构是等待队列。</div><div>(3)管程可被进程调用,管程与操作系统的共享资源相关。</div><div>(4)进程有创建和撤消,而管程没有。 </div>
<div> 2.6 进程通信</div>
进程通信的类型
<div>1. 共享存储器系统(Shared-Memory System) </div>
2. 管道(Pipe)通信
<div>3. 消息传递系统(Message passing system)</div>
<div>2.7 线程</div>
线程的基本概念
线程的引入正是为了简化线程间的通信,减小程序在并发执行时所付出的时空开销,提高进程内的并发程度。
<div>2.线程和进程的对比</div>
<div><div>(1)线程和进程的关系</div>线程是进程的一个组成部分。</div><div>一个进程可以有多个线程,一个进程的多个线程都在进程的地址空间活动。</div><div>资源的分配对象是进程,而不是线程。</div><div>调度的基本单位是线程而不是进程,即处理机是分配给线程的;真正在处理机上执行的是线程,但线程所用到的资源是进程所分配到的资源。</div><div>线程在执行过程中,需要协作同步。</div>
<div>(2)进程和线程的比较</div><div>地址空间资源:不同进程的地址空间是相互独立的,而同一进程的各个线程共享同一地址空间。</div><div>通信关系:进程通信必须使用操作系统提供的进程间通信机制,而同一进程的各个线程间可以通过直接读写进程数据段来进行通信。</div><div>调度切换:同一进程中的线程上下文切换比进程上下文切换要快得多。</div>
<div>3. 线程的属性</div>
<div>(1)轻型实体。 </div><div>(2) 独立调度和分派的基本单位。 </div><div>(3) 可并发执行。 </div><div>(4) 共享进程资源。 </div>
<div>4. 线程的状态</div>
<div> 就绪状态:线程已具备执行条件,正在等待CPU。</div><div> 备用状态:由调度程序选定为一个执行对象。</div><div> 运行状态:正在CPU上执行其程序。</div><div> 等待状态:正在执行,由于某种原因不能继续运行下去。</div><div> 转换状态:若线程已准备好执行,但突然资源不可用,从而成为转换状态。</div><div> 终止状态:线程完成了它的执行。</div>
<div> 2.8 例题选讲</div>
第3章 处理机调试与死锁
<div>3.1 处理机调度的基本概念</div>
<div>1.高级调度——又称作业调度或长调度 </div>
定义:用于决定把外存上后备队列中哪些作业调入内存,并为它们创建进程、分配必要的资源,然后将新创建的进程插入到就绪队列中,准备运行。
<div>任务:<br>接纳多少个作业——取决于多道程序度</div><div>接纳哪些作业——取决于调度算法</div>
<div>2.低级调度--又称进程调度或短调度。是最基本的调度 </div>
定义:用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序执行把处理机分配给该进程的具体操作。
调度方式:
<div>(1)非抢占方式</div>
(2)抢占方式
<div> 优先权原则; </div><div> 短作业优先原则;</div><div> 时间片原则。 </div>
<div>3. 中级调度--挂起和激活,存储器管理中的对换功能。</div>
<div>三种调度相比较:</div>
<div>进程调度的运行频率最高 </div><div>作业调度频率最低 </div><div>中级调度界于之间 </div>
<div>3.2 调度算法</div>
1.调度队列模型
<div>1. 仅有进程调度的调度队列模型 </div>
<div>2. 具有高级和低级调度的调度队列模型 </div>
<div>3. 同时具有三级调度的调度队列模型 </div>
2.调度算法
<div>3.2.1 先来先服务调度算法(FCFS)</div>
<div>FCFS算法比较有利于长作业(进程),不利于短作业(进程)。</div><div>有利于CPU繁忙型作业(进程),不利于I/O繁忙型作业(进程)——因非抢占式 </div>
<div>3.2.2 短作业(进程)优先调度算法(SJF)(SPF)</div>
<div>从后备队列中选择一个或几个估计运行时间最短的作业,将它调入内存运行。</div>
<div>优点:当多个作业同时到达时,SJF算法可使平均周转时间最短。</div>
<div>3.2.3 高优先权优先调度算法 </div>
目的:照顾紧迫型作业,使之在进入系统后便获得优先处理。
<div>系统从后备中选择一个或几个优先权最高的作业,将它调入内存运行。 </div>
优先权的类型
<div>静态优先权</div>
<div>静态优先权——它是在创建进程时确定的,且在进程整个运行期间保持不变。</div>
动态优先权
在创建进程时所赋予的优先权,是可以随进程得推进,或随其等待时间的增加而改变的,以便获得更好的调度性。
<div>3.2.4 高响应比优先调度算法</div>
<div>响应比=(等待时间+要求服务时间)/要求服务时间</div>
<div>每次要进行作业调度时,系统首先计算后备队列中各作业的响应比,然后选择一个或若干个响应比最高的作业调入内存执行。 </div>
优点:综合了FCFS和SJF算法的优点<br><div>缺点是会增加系统开销——每次调度都要计算响应比。 </div>
<div>3.2.5 基于时间片的轮转调度算法 </div>
<div>1.时间片轮转法 </div>
<div>系统把就绪队列中的所有进程,按先来先服务的原则,排成一个队列; </div>
<div>每次调度时,把CPU分配给队首进程,并让它执行一个时间片; </div>
2.多级反馈队列调度算法
<div>3.3 实时调度 </div>
目的:满足实时系统对调度的要求
<div>具备下述几个条件:</div>
<div>1.提供必要的信息</div>
<div>2.系统处理能力强</div>
<div>3.采用抢占式调度机制</div>
<div>4.具有快速切换机制</div>
常用的几种实时调度算法
<div>1.最早截止时间优先算法</div><div> 即EDF(Earliest Deadling First)算法</div>
<div>根据任务的开始截止时间来确定任务的优先级。截止时间愈早,其优先级愈高。</div>
<div>2.最低松弛度优先算法</div><div> 即LLF(Least Laxity First)算法</div>
<div>根据任务紧急(或松弛)的程度来确定任务的优先级。任务紧急程度愈高,其优先级愈高。</div>
3.4 产生死锁的原因和必要条件
定义:一组竞争系统资源或相互通信的进程间相互的“永久”阻塞。
产生死锁的原因
<div>(1)竞争资源 </div><div>(2)进程间推进顺序非法 </div>
<div>产生死锁的必要条件</div>
<div>互斥条件 </div><div>请求和保持条件 </div><div>不剥夺条件 </div><div>环路等待条件</div>
处理死锁的基本方法
<div>预防死锁、避免死锁、检测死锁、解除死锁</div>
3.5 预防和避免死锁的方法
预防死锁
<div>1.破坏“互斥”条件 </div>
<div>2.屏弃“请求并保持”条件 </div>
3.屏弃“不剥夺”条件
<div>4.屏弃“环路等待”条件 </div>
避免死锁——银行家算法
<div>1. 安全状态 </div>
<div>存在一个安全序列<P2,P1,P3>,即只要系统按此进程序列分配资源,就能使每一个进程都顺利完成。 </div>
2. 安全状态之例
<div>3. 利用银行家算法避免死锁</div>
<div>1)银行家算法中的数据结构</div>
<div>可利用资源向量Available</div>
<div>最大需求矩阵Max </div>
<div>分配矩阵Allocation </div>
<div>需求矩阵Need </div>
3.6 死锁的检测和解除
<div>预防死锁的方法——破坏死锁必要条件</div>
<div>避免死锁——银行家算法</div>
死锁的检测
<div>1. 利用资源分配图检测死锁</div>
<div>(1) 若资源分配图中无环路,则此时系统中无死锁;</div>
<div>(2) 如果资源分配图中有环路,且每个资源类中仅有一个资源,则系统中发生了死锁。此时,环路是系统发生死锁的充要条件,环路中的进程便为死锁进程;</div>
子主题
死锁的解除
<div>剥夺资源 </div>
<div>从其它进程剥夺足够资源给死锁进程,以解除死锁状态。(教科书) 或者:</div><div>剥夺死锁进程占用的资源,但并不撤消它,直到死锁解除。</div>
<div>撤消进程</div>
撤消全部死锁进程 <br><div> 按某个顺序逐个撤消死锁进程,直至使死</div><div> 锁状态解除为止。 </div>
0 条评论
下一页