操作系统是计算机系统中的一个系统软件,它是一些有特定功能的程序模块的集合。这些程序模块可以有效地组织和管理计算机中的硬件和软件资源,控制程序执行,向用户提供各种服务。
功能:1、提供计算机和用户之间的接口
2、系统资源的管理者(主要功能):进程管理、存储管理、文件管理、作业管理、设备管理。
3、扩充机器
并发:多个事件在同一时间间隔内发生;宏观上并行,微观上串行。
并行:多个事件在同一时刻发生。
串行:一个时刻只能有一个进程占用CPU。
内核态(管态)和用户态(目态)是操作系统的两种级别,内核态运行操作系统程序,用户态运行用户程序。
在计算机中,CPU执行两种不同性质的程序,一种是操作系统的内核程序,内核程序是应用程序的管理者,可以执行特权指令(用户不能直接执行的指令,只允许内核程序调用);一种是用户自编程序或者系统外层的应用程序,出于安全考虑不能执行特权指令。
处于用户态时,进程能访问的内存空间和对象受到限制,占有的处理器可以被抢占;处于内核态时,能访问所有的内存空间和对象,且占有的处理器不可被抢占。
系统调用、异常、外围设备的中断会导致用户态切换到内核态,其中系统调用为主动切换,其他为被动。
大内核是将操作系统各种功能作为一个整体放到内核,而微内核是将一部分操作系统功能移出内核,分层划分为多种服务,比如进程管理、文件管理、设备管理等。这些非内核功能运行在用户态,只有微内核运行在内核态,CPU需要在内核态和用户态切换,造成一定开销。
并发、共享、虚拟、异步,其中并发和共享是最基本的特征。
并发:两个以上事件在一个时间间隔内发生。
共享:资源供多道程序共同使用。
虚拟:将一个物理实体映射成多个逻辑对应物。
异步:多道程序环境下进程并发执行,走走停停以不可预知的速度推进,执行顺序和时间无法确定。
应用程序通过系统调用请求操作系统内核的服务。计算机中硬件资源是有限的,应用程序不允许直接操作,对这些资源的访问必须由操作系统控制。系统调用就是操作系统提供的访问这些资源的唯一入口。有了系统调用,应用程序就不用关注具体的硬件访问操作。系统调用一般通过中断实现。
多道程序是一种软件技术,使同时进入计算机主存的几个相互独立的程序在管理程序的控制下相互交替地运行。采用多道程序设计可以提高CPU利用率,提高主存和IO设备利用率,提高系统吞吐量。
分时系统:一台计算机连多个终端,用户通过各自终端将作业送入计算机,计算机通过终端向各用户报告作业情况,能分时轮流为各终端用户服务,并能及时响应用户请求。
特点:多路性、独立性、及时性、交互性。
实时系统:能对特定输入作业及时响应,并在规定时间内完成处理。
特点:分时的四个特点,交互弱及时强,高可靠性,连续的人机对话。
区别:1、设计目标不同。2、响应时间长短不同。3、交互性强弱不同。4、资源利用率不同。
进程是具有独立功能的程序在某个数据集合上的一次执行过程。是系统进行资源分配和调度的一个独立单位。
多道环境下允许多个进程并发执行,将失去封闭性,并具有间断性和不可再现性,为了更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性,引入了进程的概念。
线程又被称为轻量级进程,是进程内的一个执行实体或执行单元。是系统能够进行调度的最小单位。
进程是资源的拥有者,对进程进行创建、撤销、切换等操作需要非常大的开销。因此需要引入线程,线程切换开销小一些,能提高并发程度和资源利用率。
a.进程有自己独立的地址空间,而同一进程内的线程共享同一地址空间。
b.在引入线程的操作系统中,进程是资源分配和调度的基本单位,线程是处理机(CPU)调度和分配的基本单位。
c.资源是分配给进程的,线程只拥有一点在运行中必不可少的资源(如PC,寄存器,栈),和其他线程共享本进程的资源(如内存)。
d.线程依赖进程存在,一个程序至少有一个进程,一个进程至少有一个线程。
动态性:进程从创建到终止,有生命周期。动态性为最基本特征。
并发性:一段时间内多个进程并发执行。
独立性:进程是独立运行、资源分配和调度的基本单位。
异步性:进程按各自的速度向不可预知的方向推进,不可复现。
线程分为用户级线程和内核级线程。
用户级线程:由应用程序实现,线程的切换无须操作系统干预,在用户态完成,操作系统感受不到线程存在,系统开销小,但是若一个用户级线程阻塞,则整个进程阻塞。在用户级线程的系统中,CPU调度还是以进程为单位,所以,线程只能轮流使用一个CPU。
内核级线程:用操作系统完成线程管理工作,线程切换需要切换到内核态完成,此时CPU调度以线程为单位,多线程可以在多个CPU运行。一个线程阻塞后,其他线程依然可以运行。缺点是由内核调度,成本高。
共享内存、无名管道(父子进程或兄弟进程之间)、有名管道(任意进程之间)、消息队列、套接字、信号、信号量
协程比线程还轻量级,完全由程序控制,切换不会消耗资源,可以在线程执行的子程序内部中断,执行其他子程序后再继续执行,性能得到极大提升。
a.程序是静态的,进程是动态的,有一定生命周期。
b.进程可并发执行,而没有创建进程的程序是不能执行的。
c.进程是申请和分配资源的基本单位,而没有创建进程的程序是不能申请资源的。
d.进程 = 程序+数据+进程控制块(PCB)。(PCB是进程存在的唯一标识)
e.一个程序的多次执行对应多个进程。
将暂时不能运行的进程调到外存(辅存)中等待,即为挂起态,分为阻塞挂起和就绪挂起。
进程调度的功能是按照一定的调度算法从就绪队列中选择一个进程,将处理机分配给该进程,使其投入运行。
a.先来先服务(FCFS):按请求顺序,公平,开销小,无饥饿,长作业有利,短作业不利。非抢占式。
b.短作业优先(SJF):运行时间短的优先,有最短的平均等待时间和平均周转时间,短作业有利,长作业饥饿。可抢占也可不抢占。
c.优先级调度:按优先级调度,适用于实时系统,高优先级的进程不停的来时会导致饥饿。可以动态优先级:优先级随着程序的推进而改变。通常优先级大小:系统进程>用户进程;前台进程>后台;IO型进程优先,可以提高资源利用率和吞吐量。可抢占也可不抢占。
d.时间片轮转:按FCFS排队进行服务,时间片用完就排到最后,公平,响应快,适合分时系统,不会饥饿。抢占式,时间片用完抢。
e.最高响应比优先: 响应比=frac{等待时间+要求服务时间}{要求服务时间} ,短作业优先,不会饥饿,非抢占式。
d.多级反馈调度:多个就绪队列,优先级递减,进程用完了时间片没执行完会被移入下一级队列队尾,只有前面队列为空了才会轮到当前队列。新到的进程放在当前队列队尾。对IO型有利,会饥饿,抢占式。
1、保存当前进程状态,将PC、上下文信息保存到PCB中,更新PCB的信息(运行态改为阻塞态或就绪态等),加入阻塞队列。(若时间片用完则为就绪队列)
2、选择另外一个进程执行,更新PCB信息(改为运行态),将进程的上下文从PCB中取出执行。
作业调度(高级调度):从后备作业队列中选择一个或几个作业,分配资源,建立进程,挂入进程就绪队列,执行完后回收资源。
交换调度(中级调度):将外存交换区中的进程调入内存,将内存中的进程交换到外存。(挂起)
进程调度(低级调度):从进程就绪队列中选择一个进程,使其占用CPU。
两个或两个以上进程因竞争资源而造成的互相等待情况,若无外力作用,这些进程都将无法推进下去。
a.系统资源不足,由于对不可剥夺资源的分配不合理导致死锁。
b.进程的推进顺序不当。
a.互斥条件:一段时间内某资源只由一个进程独占。
b.不可剥夺:资源只能主动释放。
c.请求和保持:进程已有一些资源,申请其他资源时,由于申请的资源被其他进程占用而阻塞,但不放弃已有的资源。
d.循环等待:存在一个进程对资源的循环等待链。
主要有死锁预防、死锁避免、死锁检测、死锁解除
破坏四个必要条件中的一个。
破坏互斥:有些资源不能共享,所以这个不太好破坏。
破坏请求和保持:一次性申请所有资源,如果当前系统资源无法满足,则不分配资源。
破坏不可剥夺:如果一个进程占有了部分资源,申请新资源得不到满足时,就必须释放所有占有的资源。
破坏循环等待:实行有序分配,对所有资源编号,按序号递增顺序对资源提出申请。
在资源的动态分配过程中,保证系统处于安全状态。
安全序列:系统按照某种序列分配资源,每个进程都能完成。
安全状态:能找出一个安全序列,就处于安全状态。
处于安全状态,一定不死锁。发生了死锁,一定不处于安全状态。处于不安全状态,不一定死锁。
银行家算法:避免系统进入不安全状态。
画资源分配图,圆形为进程,方形为资源。再简化资源分配图,若能消去所有边,则可简化。
死锁定理:若资源分配图不可简化,则系统进入了死锁状态。
两种方法:抢占资源、撤销进程
抢占资源:从死锁进程中抢占资源。可以挂起死锁进程。
撤销进程:撤销死锁了的进程。可按优先级、资源占用量等选择进程撤销。
a.从进程数量看:死锁要两个或两个以上进程,而饥饿和死循环可以只有一个。
b.从进程状态看:死锁的所有进程处于阻塞态,发生饥饿的进程可能处于阻塞态或就绪态,而死循环的进程处于运行态。
c.从产生原因看:死锁和饥饿是由于操作系统资源分配不合理导致的,而死循环是代码逻辑问题。
同步:并发进程之间存在的相互制约和相互依赖的关系。
互斥:多个进程在同一时刻只能有一个进程进入临界区。
临界资源:一个时间段内只允许一个进程使用的资源。
临界区:进程中访问临界资源的那段代码。
空闲让进:临界资源空闲,则允许一个请求进入临界区的进程进入。
忙则等待:已有进程进入临界区时,其他试图进入的进程应等待。
有限等待:要求访问临界区的进程,应在有限的时间内能进入。
让权等待:进程不能进入临界区时,立即释放处理机。
a.把分散在各进程中的临界区集中起来进行管理;
b.防止进程有意或无意的违法同步操作;
c.便于用高级语言来书写程序,也便于程序正确性验证。
a.共享变量,用于表示临界资源。
b.对数据结构进行操作的一组过程。
c.初始化语句。
a.共享性:管程可被系统范围内的进程互斥访问,属于共享资源。
b.安全性:管程的局部变量只能由管程的过程访问,不允许进程或其它管程直接访问。
c.互斥性:多个进程对管程的访问是互斥的。任一时刻,管程中只能有一个活跃进程。
d.封装性:管程内的数据结构是私有的,只能在管程内使用,管程内的过程也只能使用管程内的数据结构。进程通过调用管程的过程使用临界资源。
Cache-主存:解决CPU和主存速度不匹配问题,速度接近Cache,容量价位接近主存。之间的数据传输由硬件自动完成,对所有程序员透明。
主存-辅存:解决存储系统容量问题,速度接近主存,容量和价位接近辅存。数据传输由硬件和操作系统一起完成,对应用程序员透明。
1、地址变换:逻辑地址转换为物理地址。
2、内存分配和回收
3、内存扩充:覆蓋技术和虚拟内存,从逻辑上扩充内存。
4、存储保护:保证内存中各道作业在自己存储空间中运行,互不干扰。
预处理:将#后面内容替换 rightarrow 编译:源码编译成目标模块 rightarrow 链接:将目标模块和库函数链接,形成装入模块 rightarrow 装入:将装入模块装入内存运行。
1、静态链接:程序运行之前,把各目标模块及所需的库函数链接为一个完整的可执行程序。
2、装入时链接:在装入内存时边装入边链接。
3、运行时链接:程序运行中需要模块时再对这些模块链接。
1、绝对装入:编译时就得知道程序在内存中的物理地址,目标模块中的地址是物理地址,不适用于多道程序设计。
2、可重定位装入(静态重定位):地址变换在装入时一次性集中完成,之后不再改变。
3、动态运行时装入(动态重定位):地址变换在运行时才确定,依靠硬件地址变换机构(重定位寄存器)实现。
重定位:逻辑地址变换为物理地址
一次性装入:必须分配连续的内存空间。
覆蓋:把程序划分为一系列覆蓋,每个覆蓋是独立的程序单位,把执行时不要求同时装入内存的覆蓋组成一组,成为覆蓋段,将覆蓋段中覆蓋分配到同一个存储区域,成为覆蓋区。解决了必须将程序全部装入内存后才能运行的问题。
交换:把暂时不用的某个程序和数据部分从内存移到外存。
区别:1、交换技术不需要给出程序段之间的覆蓋结构。
2、交换技术在进程和作业之间进行,覆蓋技术在同一进程或作业中进行。
3、覆蓋技术只能覆蓋程序段无关的程序段,交换可以换入换出。
内部碎片:分配的内存中没使用的部分。
外部碎片:没分配掉的内存空间。
1、单一连续分配
将内存分为系统区和用户区,系统区只给操作系统使用,通常在低地址部分。其余给用户使用。
无外部碎片,无需内存保护,简单,可用覆蓋技术解决空间不足;限制了并发执行的程序数量,只能用于单用户、单任务,有内部碎片,利用率低。
2、固定分区分配
将内存划分为若干大小固定的分区,每个分区只能装入一道程序。
无外部碎片,有内部碎片,大程序可能无法装入,只能用覆蓋技术。
分区说明表的表项:分区大小、起始地址、是否已分配
3、动态分区分配
根据待装入进程实际大小建立分区
存在外部碎片,无内部碎片,可通过紧凑解决。
1、首次适应:将空闲分区按地址递增连接,尽量使用低地址部分空闲分区。
2、循环首次适应:在首次适应的基础上,从上次查找结束的位置继续。
3、最佳适应:按容量递增连接。
4、最坏适应:按容量递减连接。
1、分页是物理划分,分段是逻辑划分。
2、分页的划分是操作系统完成的,用户不可见;分段需要程序员参与,可见。
3、分页是为了满足系统管理的需要,分段是为了满足用户需要。
4、分页大小是固定不变的;分段大小可变,甚至可以动态扩充。
5、分页的地址空间是一维的;分段的地址空间是二维的(段名+段内地址)
6、分页有内部碎片无外部碎片,分段有外部碎片无内部碎片。
分页
优点:内存空间利用率高,不会产生外部碎片,只会有少量的内部碎片。
缺点:不便于按逻辑模块实现信息的共享和保护。
分段
优点:便于按照逻辑模块实现信息的共享和保护。支持动态链接,支持动态数据结构,便于实现多段式虚拟存储器。
缺点:如果段长过大,为其分配很大的连续空间会很不方便。会产生外部碎片。
段页(先分段再分页)
优点:兼具段式页式的优点,可以实现共享和保护。
缺点:地址映射至少要两次查表才能访问数据存储单元。
概念:程序不用全部装入内存即可运行,运行时动态地调入,内存不够用时换出。
特征:虚拟扩充、部分装入、离散分配、多次对换。
容量限制:指令的寻址范围、外存容量。
进程访问的页不在内存中,产生缺页中断,阻塞缺页进程,缺页中断程序将所缺页面调入内存,若内存中没有空闲块则用置换算法换出某页,恢复现场,回到引起中断的指令,重新执行。
1、最佳置换算法(OPT)
2、先进先出(FIFO):可能会产生Belady异常(分配的页面数增多却发生更多缺页)。
3、最近最久未使用(LRU)
4、时钟置换算法(CLOCK)
抖动现象:刚换入的页面马上又要换出内存,刚换出的页面马上又要换入内存。
原因:分配的页面太少。
页表:指出逻辑地址中页号和主存块号的映射关系。页式存储管理在动态重定位方式装入作业时,需要页表进行地址转换。
快表:存放在Cache中的部分页表,和页表作用一样,有了快表有时读取数据只需访问一次Cache,一次内存,可以加快执行速度。
文件的逻辑结构分为无结构文件(流式文件)和有结构文件(记录式文件)。其中有结构文件又分为顺序文件、索引文件、索引顺序文件。
其中:顺序文件+顺序存储:逻辑相邻,物理相邻。顺序文件+链式存储:逻辑相邻,物理不一定相邻。
1、连续分配文件:在磁盘上占有一组连续的块。
支持顺序访问和直接访问,读写存取速度最快;不便于文件扩展,磁盘利用率低。
2、隐式链接文件:每个盘块都有指向下一盘块的指针(对用户透明)。
便于文件扩展,外存利用率高;只支持顺序访问,不支持随机访问,指针占用存储空间。
3、显式链接文件:FAT分配表,将链接文件的指针显示放在一张表中,常驻内存。
方便扩展,外存利用率高,支持随机访问,地址转换无需访问磁盘;FAT占内存。
4、索引文件:每个文件都有索引块,采用索引表完成逻辑块号和物理块号的映射。
方便扩展,支持顺序和随机访问;索引表占内存,访问数据要先读索引块。
从用户角度
1、支持对文件的基本操作。
2、支持文件目录,实现文件的按名存取。
3、提供对文件的保护和共享。
从操作系统角度
1、完成文件逻辑结构和物理结构的转换。
2、提供有效的组织和存取文件的方法。
3、管理文件在磁盘上的存储。
文件控制块:FCB,是用来存放控制文件需要的各种信息的数据结构。
文件目录:FCB的有序集合为文件目录,一个FCB就是一个文件目录项。
目录文件:为了实现对文件目录的管理,将文件目录以文件的形式保存在外村,这个文件就是目录文件。
1、文件的基本信息:文件名,文件物理位置,文件逻辑结构,文件的物理结构。
2、存取控制信息:如存取权限。
3、使用信息:如上次修改时间。
最重要的还是文件名和物理位置,实现了文件名和文件之间的映射关系,即按名存取。
FCB不包含文件内容。
包括:文件名,外存上的物理位置,文件存取控制信息,文件大小、类型、属性,其他管理信息。
功能:实现按名存取,通过多级目录还可以提供方便组织文件的方法,灵活的文件命名方法。
1、先来先服务(FCFS):公平
2、最短寻道时间(SSTF):饥饿
3、扫描算法(SCAN)、电梯调度算法:到最边上才能改变磁头方向,饥饿。
LOOK算法:不用到最边上
4、循环扫描算法(CSCAN):到最外则时快速回到最内侧,但是要到最边上。
CLOOK:前方没有了就掉头。
1、程序查询方式(轮询):利用I/O测试指令测试设备的闲忙。若设备不忙,则执行输入输出指令;若设备忙,则I/O测试指令不断对该设备进行测试,直到设备空闲为止。实现简单,但CPU和IO设备只能串行工作,长期处于忙等状态,CPU利用率低。
2、中断方式:引入中断之后,每当设备完成I/O操作,便以中断请求方式通知CPU,然后进行相应处理。但由于CPU直接控制输入输出操作,每传达一个单位信息(字),都要发生一次中断,因而消耗大量CPU时间。
3、DMA方式:用于高速外部设备与内存之间批量数据的传输。CPU只需在传输开始时设置好所需的控制信息,由DMA控制器控制一个数据块的传输。当本次DMA传送的数据全部完成时才产生中断,请求CPU进行结束处理。
4、通道控制方式:通道是一个用来控制外部设备工作的硬件机制,相当于一个输入输出处理机。通道是独立于CPU的,对外部设备实统一管理,代替CPU对I/O操作进行控制,从而使I/O操作可以与CPU并行工作。通道是实现计算机和传输并行的基础,以提高整个系统的效率。
1、状态跟踪:跟踪外设状态信息。
2、设备存取:对设备的存取操作。
3、设备分配:设备分配与回收。
4、设备控制:设备驱动,故障处理。
由上往下为:用户层软件、设备独立性软件、设备驱动程序、中断处理程序、硬件
中间三层属于操作系统内核部分。
将一台独占设备改造成共享设备的一种技术。
当系统中出现了多道程序后,可以利用其中的一道程序,来模拟脱机技术输入时的外围控制机的功能,把低速输入输出设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样便可以在主机的直接控制下,实现脱机输入、输出功能。
必须有多道程序设计的支持。
输入井:模拟脱机输入时的辅存,收容I/O设备输入的数据。
输出井:模拟脱机输出时的辅存,收容用户进程输出的数据。
输入进程:模拟脱机输入中的外围控制机。
输出进程:模拟脱机输出中的外围控制机。
输入缓冲区:在主存中开辟,暂存输入设备送来的数据,之后转到输入井。
输出缓冲区:暂存输出井送来的数据,之后转到输出设备。
1、缓解了CPU和低速I/O设备速度不匹配的矛盾。
2、将独占设备改造为共享设备
3、实现了虚拟设备功能,每个进程都认为自己独占设备。
既要充分发挥设备的使用效率,尽可能让设备忙,又要避免不合理的分配方式造成进程死锁。
1、设备固有属性:独占、共享、虚拟
2、设备的分配算法
3、设备分配的安全性
1、安全分配:为一个进程分配设备后将进入阻塞态,I/O完成后唤醒。
破坏了请求并保持,不会死锁;但对于进程来说CPU和I/O串行工作。
2、不安全分配:分配设备后继续执行,之后还可以继续发出I/O请求,I/O不满足时才阻塞。
CPU和I/O并行,但可能会死锁。
1、根据进程请求的 逻辑设备名 查找 系统设备表(SDT) 。
2、根据 系统设备表 找到用户进程指定的类型且空闲的设备分配。(SDT表目中有对应设备控制表DCT)
3、操作系统在逻辑设备表增加一个表项。
3、根据 设备控制表(DCT) 查找 控制器控制表(COCT),由 指向控制器表的指针 找到 控制器信息(每个设备由一个控制器控制),查看控制器状态;若设备控制器忙,则将PCB挂到控制器等待队列,不忙则分配。
4、根据 控制器控制表 查找 通道控制表(CHCT),若通道忙,则将PCB挂到通道等待队列,不忙则分配。
设备、对应控制器、通道都分配成功才算分配成功。
将上层抽象的I/O命令转化为具体的操作指令,发送给设备控制器。
投资者在买股票时,都会对股票进行研究,大多数股民会抓住股票的市盈率和市净率这两个指标进行分析,但很少会有人关注股票的 ...
五一出遊達到2.3億人,去哪兒數據顯示,在今年五一出遊的人群當中,“90後”占比超過50%,成為絕對的主力,其中“95後”占比達到2...