第一章 操作系统概论
:
计算机系统中硬件和软件的直接控制和管理,合理组织计算机工作流程,方便用户集合程序
:处理器、存储器、I/O 设备 ,信息文件
作为资源管理者,操作系统是资源管理过程中的主体:
1)监控资源状态
2)分配资源
3)回收资源
4)保护资源
:
1 手动操作时代,使用卡带手动输入指令
2 一批作业在单道批处理期间一次性处理,减少了机器的空闲时间,单个内存总是保存一个操作。
3 多程序设计 批处理: 多个作业一次转入内存,多个作业交替运行,时间间隔很短,。通过通道技术和中断技术。
4 现代操作系统时代
操作系统的功能
主要对CPU分配资源,控制和管理其运行效率,如·管理过程和线程。主要任务如下:
1) 过程控制:资源分配、资源撤销、资源回收、流程转换
2)过程同步:过程的运行以异步(不可预测)进行。为了协调过程,系统中必须设置同步机制
3) 流程通信:当多个流程完成同一任务或竞争资源时,需要进行流程通信
4) 调度:过程调度、交换调度、作业调度
当多个程序同时包含内存并共享内存资源时,它们是程序分配空间和保护的
1)内存分配:内存按一定算法分配,相关信息由机构记录。内外碎片应减少
2)内存保护:每个程序只允许在自己的内存范围内运行,不允许用户程序访问操作系统的程序和数据,也不允许访问其他非共享用户程序。
3)地址映射:虚拟内存逻辑地址-物理内存地址映射
4)内存扩展:虚拟存储技术,将程序的一部分转移到内存中,如果未命中,页面将丢失
除了cpu除了内存以外的所有输入输出设备,这些设备种类繁多,物理特性差异很大。设备管理提供驱动或控制程序,可以在不具体了解的情况下使用
1)缓冲管理:在cpu的高速性和IO低速之间的矛盾 引入缓冲
2)设备分配:为用户分配I/O资源
3)设备处理:实现设备驱动程序CPU与设备控制器之间的通信
4)虚拟设备管理:虚拟设备采用假脱机技术
假脱机技术 - 简书 (jianshu.com)
所有设备都属于文件(不限于文本)。
1)文件存储空间管理:统一管理不同用户文件的存储空间。
2) 目录管理:文件系统为每个文件建立了一个目录项(文件控制块)Linux的inode
3)文件共享:指公共系统中多个过程中的一个文件,在外存中只保存一个副本,节省空间
分为命令接口和程序接口
1)命令接口:用户通过命令接口直接操作,也可分为:在线用户接口、离线用户接口、图形用户接口。
2)程序接口:程序执行在用户状态下,不允许直接使用系统的各种资源,操作系统,执行过程中可以发出请求
操作系统的特点
1)并发性: 并发性是指两个或多个事件同时间隔(不是同时发生的)。微观上,每时每刻只执行一个程序。
2)共享:多个程序系统中的多个过程cpu,内存,I/O设备共享。有利于提高资源利用率
共享有两种方式: 互斥访问 和 同时访问
3)虚拟性:将物理主机虚拟成多个逻辑主机,称为虚拟处理器。
4)异步性:内存中的各个程序何时执行,何时挂机,何种速度推进,都不可以预知
操作系统的分类
根据使用操作系统的用户数量进行分类:单用户操作系统和多用户操作系统
所依赖的硬件规模可分为大、中、小型机和微型机
按照所:批处理系统、分时系统、实时系统、网络操作系统、分布式操作系统、嵌入式操作系统
批处理系统:
具有批处理作业的能力
1)单道批处理系统:当一个作业全部处理完毕后,将下一个作业转移到内存中,浪费资源
2):脱机方式输入输出操作,通过输入井形成后备队列,一批作业通过作业调度调入内存并发执行,可以共享系统资源,避免浪费(如 在处理数据时,IO浪费资源)
:内存中有多个操作,交替使用CPU(内存中为操作分配的过程)
内存转移顺序与作业完成顺序无关(过程调度)
两次调度:作业调度和过程调度
:
可以CPU 和I/O充分利用设备
大内存可以并发执行程序,提高空间利用率
吞吐量增加
缺点:
分时操作系统:
一种操作系统可以提供用户和程序之间的直接人机交互,操作用户通过终端使用计算机;
:操作系统为用户的请求分配一个时间片,当用完时,当前任务暂停(时钟中断),选择下一个请求并分配时间片。轮流获得时间片,直到运行完成。
:
1)用户作业可直接进入内存,以保证用户能与机器交互(无作业调度?)
2)不允许允许长期占用CPU
决定内存中的操作数量。单道只允许一个操作进入内存,在内外存交换上浪费了大量时间。
特点:
:主要特点是终端与系统互动
同时:在各自的终端上共享CPU和其他资源
独立性:由于使用时间片,用户感觉是独立使用计算机
及时性:能在要求时间内得到响应
指标:
响应时间 ----分时片不宜过大或过小
多道批处理与分时系统的区别
多批处理系统与分时操作系统的区别 - 就像空中月 - 博客园 (cnblogs.com)
实时操作系统
要求对 随机外部事件响应和处理
不同的目标任务分类:
1) 实时控制系统:主要用于生产过程的自动控制。时间要求极其严格,毫秒级。
2)实时信息处理系统:用于实时信息自动处理,用户可以接受的秒级
基于事件驱动服务,很少需要工干预和监督。
1)实时性:对外部请求在严格的时间范围内做出响应。
硬事实任务:超时会引发难以预料的后果,如武器控制
软事实系统:时间要求并不十分严格
2)高可靠性和安全性:往往采用多级容错措施和多机备份
------------------------------------------------以上是微观环境
微型操作系统(个人计算机):
即个人计算机上配置的操作系统
一般按照用户数和任务数来划分
1)CP/M
2)MS-DOS(disk operating system)
同一时间内只允许一个用户使用计算机,但允许用户同时运行多个任务(并发)
如Linux,可以登录多个用户名,并切换
网络操作系统
是基于计算机网络,实现网络通信和网络资源管理功能的操作系统,如NT/2008 server
除基本功能外的以下:
1)网络通信:连接建立拆解,报文的分解组装,传输控制,流量控制,校验
2)资源管理和共享
3)网络服务:如电子邮件,远程登录,文件传输
:
1) 客户 / 服务器模式:
网络站点分为两类:
本地客户机--负责收集处理用户本地请求,并发送给远程服务器,等待服务器处理并返回结果;
控制中心或者操作中心的服务器:提供文件请求,数据通信等服务,并返回结果
2)对等模式:所有站点都是对等的,既可以响应其他站点请求,又可以发处请求
缺陷:
并不是一个一体化的系统,并没有统一标准和接口(但通过协议连接),需指定哪一个站点传输。没有统一的界面和接口,难以同步写作
分布式操作系统
由若干台独立的计算机构成,每台计算机都可以独立工作,又可以协同合作。
有一个全局的操作系统,负责全系统(每台计算机)的资源分配,调度,传输控制等工作,并为用户提供统一界面和标准接口
分布式和网络操作系统的区别
1) 分布性:
地理上是一样分配的
处理上的分布性是分布式系统的最基本特征,而网络操作系统主要集中在某个主机或服务器上,控制方式是集中的
2)透明性:
分布式:隐藏了内部细节,如访问文件,只需要知道文件名,而无需知道在哪个站点
3)统一性:分布式系统要求一个统一的操作系统,而网络只需要遵循一些协议就行
嵌入式操作系统:
除基本外,还有以下特点:
1) 系统内核小
2) 专用性强
3)实时性强,弱交互性
4)固化代码,一般在ROM中
如linux,Vxworks
操作系统的结构模型
整体式模型:
模块式结构模型(如DOS),采用模块化程序设计,划分为相对于的独立模块,互相调用,用接口连接起来。
优点:
结构紧密,组合方方便,能自由的调用导致系统效率高
缺点:
1)系统难以扩充,牵连甚多,复杂的调用关系,修改一模块可能导致很多模块改变
2)可靠性低:关系复杂,容易死锁
层次性模型:
把复杂的操作系统模块从高到低分为若干个层次:。
具有单向依赖,不允许同级之间相互调用,单种层次结构难以实现
半序的:单向依赖,单同级之间可以互相调用
优点:
1)正确性:自下而上的设计方法,底层模块一般是基础功能
2) 易扩充和维护
缺点:
1)必须要在相邻层之间建立通讯机制-通常要穿越多个层次,增加开销,效率下降
微内核与 客户/服务器模型
:如ARM微型处理器,只保留最核心的部分功能-可扩展性强,可靠性高,可移植性强,现在多数都采用微内核
: 微内核的基础之上-将操作系统中最基本的部分放入微内核中,其他功能放在微内核以外的一组服务器(进行)中实现。如进程'服务器'。 基本思想:
操作系统分为两大部分:运行在核心态的微内核1)。另一部分在用户的进程2),这些进程相互独立。服务器进程不断检查是否有客户提出服务请求,如果有处理并分返回结果。
当客户请求某类服务时,用户与服务器之间形成了客户/服务器的关系。通过微内核以消息的形式返回给用户。
优点:
1)可扩展性强-只需要增加功能或新增一个服务器
2)提高可靠性:每个进程服务器只在特定的内存中运行,并且处于用户态,不能直接访问硬件
3)适合分布式系统环境
面向对象模型:
不仅可以用来设计程序,还可以用来设计操作系统。--把所有资源都看成对象,可以利用封装,多态,继承等,降低开发成本和实施保护
优点:
1)通过“复用”来降低开发成本(相当于调用别人写好的)
2)易扩充,易修改,具有封装性,且可以利用继承
3)提高正确性:可以对对象进行独立的测试。
第二章:用户与操作系统的接口
操作系统为用户提供了两类接口:作业控制级接口(命令级接口1) 和 程序级接口2(系统调用或应用程序接口)
作业控制级接口
包括脱机控制级接口(批处理系统中) 和 联机用户接口(分时系统中)
作业
用户一次请求计算机系统为其,通常由若干个相对独立的步骤组成,一个步骤称为一个作业步。
作业类型:
脱机作业:又称为批处理作业,用作业控制语言描绘成作业控制卡或作业说明书,递交给操作系统
联机作业:交互式作业,用户通过终端或键盘操作命令(Linux命令行?),多出现在分时系统和实时信息系统中。
脱机用户接口:
1)作业控制语言:一般包含I/O命令,编译命令,操作命令,和条件命令
2) 作业控制卡和作业说明书:包括 作业基本描述,作业控制描述,资源要求描述
联机用户接口:
由一组操作系统命令及命令解释程序组成,用于联机作业的控制(shell-bash)
1)命令行模式:linux命令行
2)批处理命令:允许用户预先把一系列命令组织在一种特定的文件-批命令文件,一次建立,多次执行。节省时间,减小出错概率(shell脚本)
3)图形用户接口方式:GUI
程序级接口
应用程序通过系统调用实现与操作系统的通信,并取得操作系统的服务
用户态与核心态:
当CPU处于用户程序执行状态时称为用户态,CPU处于系统程序执行状态时称为核心态。状态寄存器有一位来记录当前的状态
特权指令和房管指令
:只允许在核心态使用的指令
:为了使用户也能使用特权指令,访管指令能实现暂时到核心态的转变
系统调用:
是操作系统给编程使用的唯一接口,实现对硬件部分相关的工作。屏蔽了具体细节。
1)运行在不同的系统状态:
系统调用:调用程序运行在用户态,被调用程序运行在核心态
一般调用:都运行在用户态
2)状态转换:系统调用要进行中断转核心态进入子程序
3)返回问题:一般过程调用返回时-----可能不能继续执行(要发生进程调度)
4)嵌套调用:都允许嵌套调用
一部分是系统自身需要,一部分是作为服务提供给用户的。
每个调用都事先约定了编号(功能号),需要符合格式,如参数
如DOS环境下的int 21 号功能,参数在ax中
第三章:进程的描述与控制
单道顺序执行
1)顺序性:一次执行一个程序
2)封闭性:资源封闭性(独占)和结果封闭性(结果与运行时间无关)
3)可再现性:只要环境和初始环境相同,最终结果都一样
程序并发执行
并发性:多个程序同时在内存中通过进程调度运行,会发生跟时间有关的错误--如死锁
与时间有关的错误原因:
1)与众多程序执行的速度有关
2)由于多个程序都共享了一个变量,或者需要互相同步协调
3)对于协调没有有效的进行控制
特点:
1)失去了封闭性和可在线性:不在只依靠初始数据,资源也不再独占,还依靠与执行过程中的共享改变
2)程序与任务不再一一对应:一个程序可以对应多个(用户)任务
3)并发执行过程中存在相互制约的关系:
资源的间接制约
读写的直接制约(必须写入内容之后才能读取)
进程
是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行。
特性:
1)动态性:,而程序只是个静态实体
2)并发性:多个进程实体同时存在于内存中,通过进程调用来执行
3)独立性:是一个系统进行资源分配和调度的基本单位,能独立运行。未建立进程的程序都不能作为一个独立的单位参与运行
4)异步性:不可预知,跟操作系统的异步性一样
5)结构性:为了对进程进行控制协调:操作系统必须为每个进程建立一个进程控制块(process control block)---用于描述进程的控制和管理信息
从结构上看,进程分为:程序,数据,进程控制块三部分 组成的活动实体
进程和作业的区别_xiaotai1234的博客-CSDN博客_作业和进程
进程控制块(PCB)
pcb包含了进程的描述信息,控制信息,资源信息--是进程动态特征的集中反应,会随着进程的推进而改变,一般全部或部分常驻于内存中,主要包括一下四类信息:
1)进程标识符信息:分为外标识符(供用户记忆)内标识符(方便系统使用而设置),用于唯一的标识一个进程
2)处理器状态信息:主要由各种寄存器中的内容组成,被中断时,保存在对应的PCB中
包括通用寄存器,状态字psw,PC,栈指针
3)进程调度信息:进程状态,优先级,事件(阻塞原因),其他信息(调度算法有关信息等)
4)进程控制信息
总结:PCB是操作系统感知进程存在的唯一实体,随着进程的创建而创建,消亡而消亡。
一般将同一状态的PCB组成一个链表,多个状态对应多个不同链表(如阻塞列表)
或放入同一个索引表,指向PCB
进程状态
:
就绪态:已经分配到了除了CPU之外的一切资源
执行态:正占用CPU并向前推进
阻塞态:因事件(IO请求,调页等)而暂停,自动放弃CPU而进入等待状态。一旦事件原因解决,转化为就绪态
注意:阻塞态不能直接转换为执行态
:未被挂起的称为活动状态,挂起的称为静止状态---进而每个基本状态又细分为两种
进程控制的主要任务是对进程生命周期全过程进行控制,实现进程状态的改变
内核-微内核
通常将与硬件密切相关的功能模块 运行频率高的功能模块 以及一些基本操作 ,安排在靠近硬件的低层次中,使他们常驻内存以提高效率,并提供特殊保护。通常将这一部分常驻内存称为内核在(kernel),内核通常运行在核心态,并提供一下功能
1)中断操作:是运行的基础
2)时钟管理:许多活动都需要准确的时间,如分时片
3)原语操作:为保证效率和可靠性,把在核心态下执行的某些特点功能的操作称为原语;
原:原子的意思,这些操作,要么不做,要么全做,作为原语的程序段不允许并发执行
常见的有:创建原语,撤消原语,阻塞原语等
为提高效率-:现在一般都是微内核,将更多不常用的模块放在高层次地方(如ARM)
进程控制
1)进程家族树-有向树-进程图:子进程等
2) 进程控制原语
创建-销毁原语:一个进程不会自己撤销(销毁)自己,通常是父进程发出的
阻塞-唤醒原语:进程自我阻塞,其他进程唤醒
挂起-激活原语:调用挂起原语的进程,只能挂起自己或子进程,不能挂起其他家族的进程,激活时只能激活自己家族子孙进程
线程:
进程是分配资源的独立单位,又是独立调度的基本单位-->数据区和代码段互相独立,进程之间的耦合性查,切换保存时开销大
线程是为了减少程序并发执行所付出的开销
定义
1)线程是进程中的一个执行单元
2)线程是进程中一个可调度实体
3)线程是进程中一个相对独立的控制流线索
3)线程是执行的上下文(调度信息:如地址参数等)
---------->线程是进程内一个相对独立,可调度的执行单位。提供了对单个进程中多条控制线索的支持。
线程基本上不拥有资源,只有必不可少的资源(pc,寄存器和栈),但可以与同进程内的其他线程共享进程的所有资源,多个线程可以并发执行。
:一个进程内并发执行多个线程
线程状态:
相较于进程:
派生:线程在进程内派生出来,可由进程派生,也可由线程派生---然后进入就绪态
结束:自行结束或被结束,被释放
线程分类:
分为用户级线程和 系统级线程(核心级线程)
总体来说 用户级线程跟内核无关:
用户级线程和内核级线程 - invisible_man - 博客园 (cnblogs.com)
线程模型:
一般分为三类:多对一,一对一,多对多模型
1) 多对一模型:映射到一个核心级线程,任何时候只能有一个线程访问内核,一旦被堵塞,整个进程讲堵塞
2)一对一模型:一个线程被堵塞不影响其他,但一个用户级线程被创建伴随着一个核心线被创建,开销较大
3)多对多:结合上面两种优点,多个用户级线程映射到少量核心级线程
进程与线程的区别
1)地址空间资源:不同进程地址空间相互独立,同一进程的各线程之间共享同一地址。
2)并发性:不同进程之间可以并发执行,同一进程的多线程之间也可以并发执行
3)通信关系:进程需要操作系统的,而线程还可以直接读写数据段(如全局变量)来进行通信
4)切换速度:由于独占地址,进程切换时间较长,而多线程之间切换较快(共享同一地址)
线程和进程有什么区别(简单介绍)_邦杠的博客-CSDN博客
第四章:进程通信
进程的同步与互斥
分为合作和互斥
1)同步:共同完成一项任务,当都完成各自任务时,才能共同向前推进
2)互斥:抢占同一资源--间接制约关系
临界区与临界资源:
临界资源:一次仅允许一个进程使用的资源称为临界资源
临界区:临界资源的那段代码
:死锁--都无法推进
协调机制设计准则:
1)空闲让进
2)忙则等待
3)有限等待:在有限的时间内等待,避免死锁
4)让权等待:不能进入临界区时,应该释放CPU,提高利用率
软件或硬件机制来设计准则:一般都设计一个标志位flag来代表是否可以使用,但复杂,且不符合4大准则
信号量机制
分为 P 操作:wait操作
v 操作:signal操作
通过增加阻塞操作,和唤醒操---(一组操作-函数,传入的是结构),来符合四大准则
管程机制
用来管理进程同步的机制,相当于类-对操作进行封装和管理
【操作系统】 管程机制 - 华仔要长胖 - 博客园 (cnblogs.com)
经典问题:生产者,消费者问题
【操作系统】生产者消费者问题_niliushall.的博客-CSDN博客_生产者消费者问题
进程通信
信号量技术可以算作进程通信的低级通信机制,效率低且对用户不透明。
应该设计一种专门的通讯机制:
1)高效性:可以直接传送大量数据
2)透明性:可以隐藏细节,自动控制进程的阻塞与唤醒,降低编程复杂性
共享存储系统
在内存中开辟一块共享存储区域作为通信区。一般分为四个步骤
管道通信系统
是在文件系统的基础上形成的。是指连接多个读写进程,这一文件可被几个进程以不同的方式打开
通过相互协调(互斥,同步,对方是否存在),相当于同时读写?
进程间通信(一)—管道 - leno米雷 - 博客园 (cnblogs.com)
消息传递系统
进程间的数据以消息(报文)为单位
1)直接通信方式:利用os提供的原语
sand(Receiver,message)//接收进程receiver
receive(sender,message)//发送者:sender
:发送区准备好后,send原语--->申请缓冲区,并复制到缓冲区-> 缓冲区连接至接收消息队列
2)间接通信方式
利用某种中间实体(箱子),逻辑上分为箱子头(存放箱子相关描述)和箱子体(具体消息)
利用箱子,无需指定接受者,可以实现实时通信或非实时通信
也用send/receive原语(但不用指定接受者和发送者,换为箱子)
客户 / 服务器系统
是计算机网络下的主流通信机制
1)套接字:包含一类数据结构,内含唯一标识符,协议等
2)远程过程调用RPC:是一个通信协议--可以调用另一台终端的进程来处理结果并返回。从用户角度看是透明的
第五章:处理器调度
作业的状态及其转换
由【 用户程序,数据,说明书(要求操作系统对作业程序和数据进行何种控制)】组成,作业可由一系列作业步组成的
分为以下5个状态:
1)提交状态 :输入到外存上
有联机输入方式,脱机输入方式,直接耦合方式,spooling系统,网络输入方式
2)后备状态:在外存的输入井中:建立了JCB(作业控制块),等待被作业调度调入内存的状态
3)运行状态:按照一定算法选中一个作业进入内存,并建立相应的进程(至少对应一个进程)。
。
4)完成状态:正常或被迫终止,在系统调用的作用下完成的
三种调度
越低级调度频率越高,可对应分为三种模型
作业调度(高级调度)
决定哪种作业(后备队列中)进入内存,建立JCB(进入内存之前)并为之分配相应进程,插入就绪队列。结束了负责撤销资源
只有批处理系统才具有作业调度,分时系统因为需要交互性,终端命令直接输入到内存,实时系统,时间要求更严格。
面向系统准则:
1)吞吐量大(单位时间内完成的作业数)
2)cpu利用率高
3)各类资源的平衡利用
面向用户准则
1)周转时间:作业提交---到结束的时间间隔:等待时间+执行时间
2)平均周转时间:n个任务的平均周转时间
3)平均带权周转时间:周转时间(执行+等待)/实际执行时间(cpu占用时间)
4)相应时间短
5)截止时间保证
6)优先权准则
交换调度(中级调度)
按照一定算法在 内存和外存之间进行 进程交换 ,如阻塞的进程调度到外存,提高利用率。
再利用作业调度进入内存继续执行
进程调度(低级调度)
按照策略选择哪个就绪进程占用CPU,管理PCB,进行上下文的切换,频率很高
通常分为
1)非剥夺:一旦开始,不能以任何理由剥夺CPU。但不符合实际情况和需求
2)剥夺式:根据某种原则,来抢占CPU
优先权原则
短进程原则
时间片原则
:
1)进程执行完毕 或 某种错误而终止时
2)自我阻塞时
3)分时系统中 时间片用完
4)在执行完系统调用返回用户进程时,可以看做系统进程完毕,可以重新调度
5)基于优先级,就绪队列某进程优先级高于执行中进程优先级-发生调度(剥夺式)
1)定性:可靠性,是否会引起数据结构的破坏,或上下文的破坏
2)定量:CPU的使用率
常用调度算法
根据目标不同,有些适用于作业调度,有些适用于进程调度
先来先服务(FCFS)(非剥夺)
按照用户作业提交顺序或 就绪队列的先后次序来调度
短作业(进程)优先调度(非剥夺)
对运行时间短的作业或进程 优先进行调度
时间片轮转调度(分时系统-进程-时间片剥夺)
分时系统中用这种(没有作业调度),-->形成循环队列--让每一个进程都能享受到CPU
时间片大小应该与终端数成反比:时间片太大退化为fcfs
高优先级调度算法(可/非)
每个作业或进程都被指定一个优先级,总是选择高优先级进行调度(分为可剥夺,不可剥夺)
1)静态优先权:整个运行期间不改变
2)动态优先权:随时间而改变,避免垄断CPU的情况发生
最高响应比优先调度算法:(非剥夺)
响应时间== 1+ 等待时间/实际执行时间(瞬间的带权周转时间)
(每次完成时都要计算一次响应时间)
多级队列调度算法(分时-时间片剥夺)
时间片和优先级调度算法结合
多个就绪队列,不同优先级-若在指定时间片中当前队列进程未完成,则接到次优先级队列的末尾,最终只剩一个队列---再按时间片轮转调度
实时系统调度(进程)
分为硬事实和软事实,都联系着一个截止时间
基本条件:
1)提供必要信息:如就绪时间,开始时间或截止时间,资源要求,优先级
2)必须能调度:因为不能超时
3)采用抢占式
4)具有快速切换机制:包括对终端的快速响应能力,和快速任务分派能力
算法分类:
1)非剥夺式
非抢占式轮转调度算法
非抢占式优先调度算法
2)剥夺式(抢占式)
基于时钟中断的优先级调度算法:发生时钟中断时,才抢占
立即抢占:一旦出现,只要不在临界区,立即剥夺。
最早截止时间优先算法EDF(可/非)
根据任务的截止时间,时间越早,优先级越高。
一般有截止时间的(周期),采用剥夺式EDF
最低松弛度优先算法LLF(立即剥夺)
松弛度:截止时间点-还需要运行的时间-当前时间
作业和进程的关系
一个作业可以看做用户的一个任务实体,比如一次计算。
而进程是为了完成任务而设置的执行实体(分配资源的基本单位)
第一个进程一般称为根进程
第六章:死锁
定义:两个或两个以上的进程无限期的等待永远不可能发生的事情,称为死锁状态;
假设系统中有m个进程,各需要同类临界资源K个,不发生死锁的最少资源数为
(k-1)m+1
//每个进程都分到了k-1个,只要还有一个就能连环释放资源
原因
对于可剥夺资源,不会产生死锁的
对于临界资源(不可剥夺),不能强袭强袭收回。
1)竞争不可剥夺资源
2)进程推进不合理
必要条件
1)互斥条件:互斥的,不能抢占同类资源,只能等待自动释放
2)请求和保持:不释放当前资源 并且可以继续申请资源
3)不能剥夺
4)环路:必然存在一个资源的环形链
策略
预防策略
静态解决的方法,从4个必要条件出发,只要破坏一个就不会发生死锁
1)破坏互斥:往往行不通
2)破坏不剥夺:释放后难以恢复进程
3)破坏请求与保持条件(静态资源分配法):
一次性的分配整个运行过程中的所有资源,结束才释放-->导致非常浪费
4)破坏环路(动态资源分配法):
对所有资源进行线性排序,资源的请求时,只能往高序号请求,而不能低序号请求
但难以增加新设备,也难以预料实际使用资源顺序(序号高低),也会限制编程设计
避免策略
动态解决死锁的方法,在请求资源时,进行事实检测,若不安全则决绝命令,确保不会死锁。
划分为两个状态:
不安全状态:可能发生死锁
安全状态:一定不会发生死锁
操作系统——银行家算法(Banker's Algorithm) - 王陸 - 博客园 (cnblogs.com)
最重要在安全性算法检测部分,若找不到一种序列使Finish[i]全部==1 则驳回请求
不足:
1)要求分配的资源数量不变并且告知最大数量,通常不实际
2)要求用户数固定不变,多道中难以实现
3)不一定能在事实系统中有良好的表现(时间要求严格)
检查策略
周期性或发现系统性能下降时被唤醒,检查是否有无死锁进程
通过对资源分配图的简化+算法来确定是否有死锁进程
资源分配图:由有向边E和点集P(表示进程节点),点集R(表示资源节点)
e=(p,r) 表示p申请(还没分配到)r类资源
e=(r,p) 表示r类资源已经分配给p进程
资源图的简化:
:跟银行家一样的 finish不为1则出现了死锁
死锁解除:
当检测出死锁,需要恢复
1)重新启动:不合理,代价最大
2)撤销所有死锁进程:代价大
3)设置检查点:如果设置了检查点,恢复到上一个检查点状态,然后再次执行,可能继续死锁,但由于并发性,也可能不发生死锁
4)逐个撤销死锁进程直到不再死锁。
5)逐个剥夺死锁进程资源分配给剩余进程(相当于撤销),直到不再存在死锁
应优先撤销:使用最少处理器时间的进程/使用最少输出工作量的进程/具有最多剩余时间的进程/占有最少资源的进程 /具有最低有限度的进程
综合处理
系统资源分为
1)内部资源:预分配法
2)内存资源:剥夺法
3)作业资源:死锁避免法
4)外存资源:预分配法
对一些都不适用的资源采用检测法,然后解除死锁
第七章:存储管理技术
多采用多级存储结构(不再叙述),主要讨论的是内存(CPU能直接寻址的地方)。
外存物理地址-逻辑地址--内存物理地址
按照虚拟存储器概念: 一个程序的逻辑地址对应着
编程时所采用的变量(符号-地址),其实就是一种逻辑地址,被加载到内存执行时,才转换为真正的物理地址。
通过符号(变量名)来访问某一单元。
相对地址/逻辑地址:以0位基地址进行编址
绝对地址/实际地址/物理地址,内存空间中实际的地址
。
地址的重定位
由于两个空间不一致,所以需要进行地址映射/重定位
静态重定位
通过装配程序在程序执行之前进行重定位,程序指令已经相对应修改过了,符合物理对应物理地址
优点:容易实现,无需硬件支持
缺点:不能随意移动,要求程序的存储是连续的,不利于共享内存
动态重定位
需要重定位寄存器,利用实际地址的基地址相加 再执行相对应指令,不需要修改指令,还应该设置一个限长寄存器-防止越界
优点:
1)可以移动程序-只需要修改重定位寄存器
2)可以放在不连续的内存中-多设置几个重定位寄存器+限长寄存器
3)可以共享同一程序--重定位寄存器内容一致即可
内碎片/外碎片
不能利用的内存空间
内碎片:物理已分配内存(区块中)中剩余空间,如区块大小大于一个进程,块内的剩余空间浪费了
外碎片:物理内存剩余空间,但因为分散且细小,无法分配给新的进程(作业)
内存地址分配的方式
单一连续方式
划分为系统空间和用户空间两个空间
如MS-DOS,难怪DOSbox内存空间是可以通过移位器与段地址直接相加的,因为整个都是单一连续的用户空间
固定(静态)分区方式(有内碎片)
如linux系统下的ext4文件系统?(事先格式化为区块--外存)
分区大小相等/分区大小不相等,但必须事先分配好
通过分区说明表:包含区号,大小,起始地址,标志位置
:因为可能有内碎片,且程序太大装不下。
可变(动态)分区方式(外碎片)
作业进入内存时,按照作业大小从内存中划分一个分区分配
通常设置两个表格--已使用+空闲分区表
或 空闲分区双向链表
:
1)最先适应算法:把最先找到的大于或等于作业的空闲内存分配给作业
优缺点:内存的高地址通常空闲大,但低地址通常内碎片很多
2)循环最先:从上次分配的空间开始循环检测最先适应算法
优缺点:分配均匀,但缺少大空闲区域
3)最佳适应算法:遍历所有空闲区域,选择一个大于等于作业的分配
通常按空闲区域递增链表排序,减小时间开销
优缺点:最适合,但外碎片很多,内存利用率高
4)最坏适应分配算法:遍历所有空闲区域,选择一个最大的空间区域分配(使剩余的空间足够大,给其他作业继续使用)
通常按空闲区域递减链表排序,减小时间开销
优缺点:最大限度的减少外碎片大小,但空闲区域是不断均匀减小,一段时间后难以有大空间
释放内存时,根据首地址,向上合并(如果有)空闲的内存空间并返回分区号
1)上,下界寄存器,每一次访问都要比较
2)上界寄存器+限长寄存器
3)保护键法:通过匹配保护键字段来允许访问
为了减少外碎片,对已分配各区域进行移动合并,把外碎片合并起来--成为大空间,以供作业使用
但程序中所有与地址有关的数据都要修改,采用
动态重定位技术:
一个作业在内存中移动后,只需要改变重定位寄存器中的内容即可
1)某个作业完成后立即紧缩(重定位),紧缩次数高
2)当一个作业请求一个分区,而内存中没有足够大的空闲区域时,则进程紧缩并改变相关各表。
页/段/段页 储存方式(页-内碎片)
离散存储方式,可以用于虚拟存储技术
逻辑页----物理块--所以不会有外碎片,但最后一个逻辑页-物理块中 通常装不满
具体看我另一篇第三章:
计算机组成原理_幸存者^的博客-CSDN博客
:
1)
由于程序逻辑地址一般从0开始连续编址,连续划分为若干个页面
P(页面)=逻辑地址大小A/页面大小L // 向上整取
d(页内地址-偏移地址)=A MOD L
---->地址存储结构----- 页号p+页内地址d-->通过页表组合寻址
页号:多少位代表有2^n 个页面
页内地址位:有多少位代表一个页面有 2^n 大小
2)二级页表
外层页表-->页表->与d组合成物理地址
外层页表的标志位:若0则不在内存中,调页?
3)页表大小通常为2的幂,这样运算时不用做除法,只要看位数,分割就行
4)动态连接:
分段可便于动态连接
目标文件(可以不止一个)->link->可执行文件
静态连接:执行前就连接了多个目标文件
动态连接:执行中有需求,才将该段(目标程序)调入内存并进行连接
5)
段式:具有现实逻辑意义,如自定义的数据段--无内碎片
页式:无逻辑意义,只是划分为大小相同的页
6)段页储存
实际地址=f(s,p,d)
段表-->页表-->+d实际地址
内存分配以页为单位--物理地址还是被分为与页对应的块--
总结
分页存储会产生内存碎片,不会产生外存碎片;
分段存储不会产生内存碎片,会产生外存碎片。
第八章 虚拟存储管理技术
运行过程中可能出现两种情况:
1)作业的进程所需空间大于内存空间,只有部分空间进入了内存
2)逻辑地址空间(编程时)大于物理空间,进程无法运行
从逻辑上扩充内存容量,这就是虚拟存储管理技术
虚拟存储器概述
一个进程全部装进内存,由于局部性原理-其实是对内存资源的一种浪费,将进程的一部分(部分页/段)调入内存,另一部分在外存,由操作系统进行动态调度
局部性原理
由于调用深度有限/循环体/顺序执行等特点:
1)时间局部性:如果某指令/数据结构被执行,再不久的将来很有可能再执行
2)空间的局限性:一旦访问了某个存储单元,附近的存储单元也可能被访问---程序在一段时间内所访问的地址,可能集中在一定的范围内。
对换原理
虚拟存储器其实就是利用了对换,当内存满时,需要根据算法将内存内的页/段 与 外存 进行交换 ,以保证进程继续进行
1)整体对换:中级调度--以整个进程为单位
2)页面/分段对换:进程的一个页面/分段为单位 ,虚拟技术利用这种
:
有对换空间的OS中,把磁盘空间分为:
1)文件区:访问频率低,为了提高利用率--离散分配方式(段/页)
2)对换区:与内存进行对换的空间,保存从内存调出的进程。驻留时间短-访问频率高,为了提高速度--连续分配方式--与内存动态分配方式中数据结构相似,回收创建方法也相似
定义
仅把进程的一部分装入内存便可以运行的存储系统,是具有调入功能和 置换功能,能从逻辑上进行扩充的一种存储器系统。---逻辑容量由寻址能力和外存容量决定
请求分页式存储管理
在分页式储存管理的基础上,增加了 调页 + 置换(对换) 功能
流程:
0)页表 所需页面的标志位P为0 ,请求调页
1)找到外存中的地址
2)检索内存中空闲的块(对应逻辑页),如果没有按照对换算法 选择一个淘汰页
3)淘汰的块写回外存(更新),修改页表
4)读入所需页面,修改页表
5)重新进行进程
页表内容
外页表? 不 内外页表和在一起了 :
P:标志位 若为0 则表示该进程的该页面不在内存中
A:一段时间内的访问次数--供调度算法使用
M:该内存页面是否修改过 ,第三步的写回:如果没修改过则不用更新外存中的相对页面
外存地址:外存的物理块号,用于调页时第一步
内存物理块分配策略
给一个进程分配的物理块(对应页)个数
1)平均分配:总容量/总进程数
2)按 所有进程总逻辑页面 与自身逻辑页面的比列分配总块数
3)优先级
4)长度和优先级比列分配
:
进程某时间段里实际要访问的页面的合集
缺页率的大小与工作集有关
W(t,Δ)
W工作集是一个与时间段t,Δ分配的物理块大小 相关的二元函数
虽然存在着Belady异常现象(可能物理块分配的多缺页率反而高),但一般而言是一个反比函数
要选择适当的工作集来控制缺页率与空间利用的均衡 ----图中的拐点
外存物理块块分配策略
1)静态分配:运行前将全部页面装入外存,期间不进行释放。内存中有个一模一样的副本,调出写回时检查修改位M 若无修改则不必写回
优缺点:牺牲外存空间,减少调页的系统开销
2)动态分配:仅将未装入内存的页面装入外存,当调入时,释放该页面外存空间----外存与内存的并集才是整个进程的页面(不会同时存在相同的页面),所以写回时必须重新申请物理块(外存地址的物理块)。
优缺点:节省外存空间,但会引起开销
页面调入时机
1)请求调页时才调入
优缺点:不会发生无意义的调页,但发生缺页中断的进程必须等待
2)预调页:调入一批连续的页,但与进程实际运行有很大关系
优缺点:如果调入的一批页很多未被访问,则低效的-应该由进程首次调入时,程序员指出应该调入那些页
置换算法
也适用于快表/页表/段表
抖动现象是指如果分配给进程的存储块数量小于进程所需要的最小值或调度算法不佳,进程的运行将会很频繁地产生缺页中断 ,这种频率非常高的页面置换现象称为抖动-以至于调度页面所需时间比进程实际运行时间还多,此时系统效率急剧下降,导致系统崩溃。
应该kill调其他进程 释放内存
1)FIFO算法:利用一个队列,队列首的页面淘汰
2)最佳置换算法OPT:
置换未来最远使用的算法
置换那些几乎不用的页面,但只是一种理论上的算法,因为即将要使用的页面无从得知----
3)最久未使用置换算法 LRU:按照距离上次访问最长时间进行淘汰,通常用硬件来实现
a:计时法:为每一个页面增设计时器,访问时复制系统时钟,置换时淘汰时钟最小值的
b:堆栈法:按照时间压入栈--双向栈(指针连接)-并且更新(不是传统意义上的,可以对任意一处进行操作)
4)最近未使用 NRU/ Clock置换算法::每个页面设置一个访问位A,将所有页面通过指针连接成一个循环队列,被访问时置为1。淘汰时,按照FIFO算法检查下一个页面--若为1则复位置为0,若为0则淘汰此页面
LRU的近似算法,因为循环队列像一个时钟一样--CLOCK算法
通常再设置一个修改位M---就是上述表项的内容
通常选用M,A 都为0的优先淘汰---总是优先淘汰长久未被被使用且无修改的页面(减少写回)
请求分段式存储管理系统
原理与分页式差不多
流程:
与分页差不多
段表表项内容
存取方式:表示本段的属性,如only-read
增补位:是否进行过动态增长
共享(段表)
相应的表项的 段基地址指向同一个起始地址
共享表段:所有的共享段都在共享段表中占一个表项
1)共享进程数count,只有为0才能释放
2)存取控制字段:记录不同进程的不同权限
保护
1)越界检查
2)存取控制检查
总结:
虚拟存储技术,从系统角度看, 扩充了内存 ,从用户角度看,用户可以在超出 用户作业空间 的存储空间(逻辑空间)中编写程序,大大方便了用户。
第九章 I/O设备
通常把 I/O设备 , 接口线路, 控制部件,通道,管理软件 统称为I/O 系统
把计算机内存和设备之间的信息传送操作
I/O系统组成
io设备分类:
1) 人类可读的:比如屏幕
2)机可读的:如外存,磁盘,传感器
3)通信:与外围远程设备进行通信的,如调制解调器,数字线路驱动器等
:
1)低速设备:键盘,鼠标,语言输入输出设备
2)中速设备:打印机
3)高速设备:磁盘,磁带等
:
1)块设备--块传送(猝发式):信息的存取是以块为单位的
基本特征:可寻址,可随机的读取,I./O采用DMA方式
2)字符设备: 基本单位为字符