admin管理员组文章数量:1122850
操作系统知识点总结:
第一章:操作系统概述
1.1操作系统的概念:
操作系统是一种系统软件,与其他系统软件和应用软件不同,它有自己的基本特征。它的四大基本特征也就是并发,共享,虚拟,异步。
1.2操作系统的特征(四大基本特征):
- 并发: 这里我们要理解什么是并发,什么是并行。并发是指多个事件在同一时间间隔内发生。而并行是指多个事件在同一时刻发生。
- 共享: 共享分为两种共享方式:互斥共享方式:在一定时间内只允许一个进程去访问。同时共享方式:在一定时间内允许多个进程去访问。
其中 **并发和共享是操作系统最基本的特征。两者互为存在条件,**资源共享是以并发为条件的,没有并发就没有办法谈共享。若系统不能对资源并发进行有效的管理,那么必将影响到程序的并发执行。
3.虚拟
4.异步: 进程的执行不是一贯到底的,而是走走停停,不断向前推进。
虚拟性以并发性和共享性为前提,异步性是并发性和共享性的必然结果。
1.3操作系统的目标和功能:
1.操作系统是计算机系统资源的管理者:
(1).处理机管理
(2).存储器管理
(3).文件管理
(4).设备管理
2.操作系统作为用户和计算机硬件系统之间的接口
3.操作系统实现了对计算机资源的扩充
操作系统的目标:实现方便性,有效性,可扩充性,开放性。
1.4操作系统的发展历程:
1.人工操作阶段:
2.单道批处理阶段:
实现了对作业的连续处理,但由于只有一个通道,它解决了人机矛盾和CPU与IO设备速度不匹配的矛盾。提高了系统的资源利用率和吞吐量。
缺点:不能充分利用资源,原因是只有一个通道。
3.多道批处理阶段:
优点:提高了资源的利用率,系统的吞吐量大。
缺点:平均周转时间长,没有交互能力。
实现多道批处理的关键是: 如何分配处理器,多道程序的内存分配问题,I/O设备如何分配,如何保证其安全性和一致性。
4.分时操作系统
分时系统实现的关键是如何让用户与自己的作业进行交互。
5.实时操作系统
//TODO
1.5操作系统的运行环境:
两种指令(特权指令和非特权指令):
特权指令: 指的是不允许用户直接使用的指令。
非特权指令: 是指允许用户直接使用的指令,它不能访问系统的软硬资源。
随之而来的是两种运行模式(用户态和核心态):
当CPU处于核心态时就可以使用特权指令,同时切换到用户态的指令也是特权指令。当CPU处于用户态时也只能使用非特权指令。
★★★中断与异常
中断:
中断也被称为外中断,是指CPU执行指令外部的事件。
异常也被称为内中断,是指CPU执行指令内部的事件。
中断和异常的分类:
外中断可分为可屏蔽中断和不可屏蔽中断。
异常分为故障,自陷和终止。
中断和异常的处理过程:
当CPU在执行用户程序的第i条指令时检测到一个异常事件,或者发现了一个中断请求信号,这是CPU打断当前的用户程序,然后转到相应的中断或异常处理程序中去执行。若中断或者异常处理程序能够解决相应的问题,则在中断或者异常处理程序最后,通过执行中断和异常返回指令,回到被打断的用户程序的下一条指令(i+1)条指令继续执行,若发现是不可修复的错误就终止用户程序。
原语:
所谓原语就是由若干条指令组成的,用于完成某一特定功能的过程,它是有原子性的,也就是说原语在执行过程中不能被中断,只能一气呵成。原子操作在内核态下执行,并且常驻内存。
1.6系统调用:
所谓的系统调用是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序。
系统调用按功能可分为:
由于系统调用对整个系统的影响非常的大,因此需要由内核程序负责完成,要运行在内核态,用户可以通过陷入指令(trap/访管指令)来发起系统调用,即是将CPU的使用权交给操作系统的内核程序(CPU的状态从用户态转变为内核态)。让内核程序对系统调用请求进行相应得处理,处理完成后将CPU得使用权还给用户程序(即由内核态转变为用户态)。目的就是让用户程序不能执行对系统影响大得操作。必须通过系统调用得方式请求操作系统代为执行。增加了安全性。
列举从用户态转变到内核态的例子:
(1).用户程序要求操作系统的服务,即系统调用。
(2).发生一次中断。
(3).用户程序产生了一个错误状态。
(4).用户程序企图执行一条特权指令。
(5).从核心态转向用户态由一条指令实现,这条指令也是特权指令(因为是在内核态下执行的指令),一般是中断返回指令。
访管指令是将用户态转向核心态,因此它是在用户态下使用的指令,不是特权指令。
1.7操作系统的结构(新知识点):
大内核: 所有的系统功能都放在了内核里。这也保证了状态切换的次数减少,性能增加内核内部的各个程序可以互相调用。缺点:所有的程序都放在内核导致维护起来很难,并且当一个程序出现错误,可能就导致整个内核出现错误。
微内核: 只把最核心的功能放入内核,优点:内核易于维护,可靠性高,一个功能出错不会影响内核。缺点:性能低,需要频繁的进行状态切换。
1.8虚拟机:
虚拟机:使用虚拟化技术将一台物理机虚拟化为多台虚拟机器,每台虚拟机都可以独立运行1个操作系统。
二者对比:
第二类的虚拟机就是我们常用的Vmware,我们将虚拟机安装在我们的宿主机上,所有的资源都依靠于宿主机,这也就意味着性能会差,但是可迁移性非常好,我们只需要将我们的镜像文件ISO拷贝到另一台电脑上即可。
第一章知识点补充:
1.操作系统管理计算机的硬件资源和软件资源。
2.系统调用是操作系统为应用程序使用内核功能所提供的接口。
3.操作系统为编程人员提供的接口是程序接口,即系统调用。
4.用户不能直接操作硬件资源,只能通过系统调用的方式来请求内核为其提供服务,间接的去访问资源。
5.操作系统不能直接用来编程,配置操作系统的机器与裸机相比,资源利用率提高了。
6.操作系统的接口分为 命令接口 和 程序接口(系统调用)。
7.计算机开机后,操作系统被加载到RAM中。
8.实时操作系统必须在被控制对象的规定时间内来处理来自外部的请求。
9.计算机通过硬件中断机制完成了由用户态转变为核心态。
10.内核包含四个部分:时钟管理,中断机制,原语和广义指令。输入和输出涉及中断操作,也属于内核。
11.关中断属于特权指令。
12.微内核结构中,内核的功能越少越稳定。支持分布式系统。windows属于宏内核
第二章:进程与线程
回忆:
2.1进程:
进程的概念:
进程是程序的一次执行过程,是一个程序及其数据在处理机上顺序执行时所发生的活动,是具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。
重点:
(1).进程是动态的,具有过程性。
(2).PCB是进程存在的唯一标识。
(3).进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征: (1)动态性,(2),并发性(3),异步性(4),独立性
2.2进程的状态与转换:
五种状态以及五种状态之间的转换:
运行态: 进程正在处理机上运行。
就绪态: 进程获得了除处理机之外的其他所有资源。一旦得到处理机就可以开始运行。
阻塞态: 进程正在等待某一事件而暂停运行。
注意: 一个进程从运行态转变到阻塞态是主动的行为,从阻塞态转变为就绪态是被动的。
2.3进程的组成:
PCB(最核心的进程控制块,是进程存在的唯一标识) + 程序段 + 数据段
2.4进程控制:
进程的创建: 终端用户登录系统,作业调度,系统提供服务都会引起进程的创建。
进程的终止: (1).正常结束(2).异常结束,表示进程在运行时,发生了某种异常事件导致无法继续运行(3).外界干预
进程的阻塞和唤醒
2.5进程通信:
进程通信是指进程之间的信息交换,其中我们所知道的PV操作则是低级通信方式,而高级通信方式是 共享内存,消息传递,管道通信。
2.6线程:
在引入线程后,进程作为除CPU外的系统资源的分配单元,而线程则作为处理机的分配单元 ,是程序执行流的最小单位。
引入进程的目的是更好的使多道程序并发执行,提高资源利用率和系统吞吐量。引入线程则是减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
2.7线程和进程的比较:
(1).调度:
拥有资源和独立调度的基本单位都是进程,进程之间的切换开销很大。而线程独立调度的基本单位,线程之间切换的开销远小于进程。同时线程之间的切换不会影响进程。进程之间的切换会影响线程。
(2).并发性:
进程之间可以并发,一个进程中的多个线程也可以并发,不同进程中的线程也可以并发。
(3).独立性:
每个进程都拥有独立的地址空间和资源。不允许其他进程访问,线程共享进程的地址空间和资源,并且某个进程中的线程对其他进程是不可见的。
(4).系统开销:
创建和撤销进程的开销要远大于创建和撤销线程的开销。
(5).支持多处理机:
进程只能运行在一个处理机上,对于多线程进程可以在多个处理机上运行。
2.8线程的实现:
用户级线程:
内核级线程:
由图可以看除内核级线程是放在操作系统中的,因此是由操作系统进行管理的。线程的调度,切换等工作都是由内核负责的,因此内核级线程的切换必须在内核态下完成。每个线程都有自己的线程控制块(TCB),同时内核级线程是操作系统能够看到的线程。
优点: 当一个线程被阻塞时,别的线程还能正常运行,并发能力强,多线程可以在多核处理机上并行执行。
缺点: 一个用户级线程会占用多个内核级线程,线程的切换需要切换到内核态,需要状态转换,开销大。
2.9一对一模型:
2.10多对一模型:
2.11多对多模型:
注意: 内核级线程要小于用户级线程的。
2.12线程的状态转换:
线程的状态转换图和进程类似,我们只需要关注三状态转换(就绪,运行,阻塞)
2.13进程调度:
进程调度的时机:
-
当前运行的进程主动放弃处理机:
进程正常的运行完终止。
进程运行过程中发生异常终止。
进程主动请求进入阻塞。
-
当前运行的进程被动放弃处理机:
在运行过程中来了一个优先级更高的进程。
分配给进程的时间片用完。
有更紧急的事情要处理(I/O)。
进程调度的方式:
抢占式和非抢占式
重点知识:
进程在操作系统内核程序临界区是不能进行调度和切换的。
进程处于临界区时是可以进行处理机调度的,为了防止某个进程一直等待临界资源,占用CPU。
2.14调度算法:
重要的几个公式:
(1).先来先服务(FCFS)(非抢占式):
按照作业到达的先后顺序进行调度:
用于作业调度和进程调度。
优点: 因为是先到的先服务,所以保证了公平。并且算法实现十分简单。
缺点: 排在后面的短进程可能要等待很长的时间,因此,FCFS对长作业有利,对短作业不利。
FCFS不会导致饥饿。
(2).短作业优先算法(SJF):
最短的进程优先被服务。默认为非抢占式的,抢占式的(最短剩余时间优先调度算法)SRTN。
用于作业调度和进程调度。
严格上来说,SJF的平均等待时间,平均周转时间并不一定是最少的,但相比于FCFS,SJF会获得较少的平均等待时间和平均周转时间。
优点: “最短的” 平均等待时间,平均周转时间。
缺点: 不公平,对短作业有利,对长作业不利。可能会产生饥饿现象。
(3).高响应比优先(HRRN):
先记住一个公式:
用于作业调度和进程调度。
高响应比优先算法是非抢占式的调度算法,调度时需要计算所有就绪进程的响应比,选择响应比最高的进程上处理机。
优点: 它综合考虑了等待时间和运行时间,当等待时间相同时就是(SJF)的优点。当服务时间相同时就是(FCFS的优点),不会导致饥饿。
(4).时间片轮转调度(RR):
公平的轮流为每个进程服务,让每个进程在一定时间内都能得到响应。
属于抢占式。 不会导致饥饿。
用于进程调度。
优点: 公平,响应快,适用于分时操作系统。
缺点: 由于进程之间的频繁切换会导致很大的开销。
补充: 当时间片设置的过大时会导致每个进程都能在一定时间内完成,这样就变成了先来先服务的调度算法。
当时间设置过小时,会导致进程之间的频繁切换,导致开销大。
(5).优先级调度算法:
调度时选择优先级更高的进程进行调度。
既可以用于作业调度也可以用于进程调度。
有抢占式的和非抢占式的两种。
优点: 用优先级去区分紧急程度,适用于实时操作系统,可以调整对作业的偏好程度。
缺点: 若源源不断的有高优先级的进程来,会导致饥饿。
(6).多级反馈队列调度算法:
对其他调度算法的折中。
用于进程调度。
是抢占式。
优点: 相对公平,每个进程都可以得到快速的响应,短进程较少时间就可以完成。可以灵活的进行调整,避免用户作假。
缺点: 会导致饥饿。
★★★2.15进程同步和进程互斥:
两种共享方式:
(1). 互斥共享方式: 一个时间段内只允许一个进程去访问该资源。
(2). 同时共享方式: 允许一个时间段内多个进程同时去访问该资源。
临界资源: 我们把一个时间段内只允许一个进程去访问的资源称为临界资源(摄像头和打印机),对临界资源的访问必须互斥的进行。
对临界资源的访问分为四部分:
临界区也被称为临界段
解决临界区问题的同步机制要遵循四条准则:
(1).空闲让进 当无进程处于临界区时,表明了临界资源处于空闲状态,应允许一个进程去访问。
(2).忙则等待 当已有进程处于临界区时,表明了临界资源正在被访问,其它试图访问的进程应该等待,以保证对临界资源的互斥访问。
(3).有限等待 要保证在有限的时间内进入临界区,保证不会饥饿。
(4).让权等待 当进程进入不了临界区,要立即释放处理机,以防止进程处于忙等状态。
进程互斥的软件实现方法:
(一):单标志法:
问题: 当P0进程谦让给P1进程去访问临界资源,而P1进程不去访问,这样P0进程也无法访问临界资源,这时就会出现临界资源处于空闲状态,而无进程去访问,违背了"空闲让进"。
(二)双标志先检查:
(三)双标志后检查:
(四)Peterson算法
进程互斥的硬件实现方式:
(1).中断屏蔽方法:
使用开/关中断指令实现。
优点: 简单高效。
缺点: 不适用于多处理机,只适用于单处理机,只适用于操作系统内核进程,因为开关中断指令都必须在内核态下执行。
(2).TestAndSet(TS/TSL)
优点: 实现简单,适用于多处理机环境。
缺点:不满足让权等待,可能出现忙等。
(3).Swap指令(exchange/XCHG)
优点: 实现简单,适用于多处理机环境。
缺点:不满足让权等待,可能出现忙等。
信号量机制:
整形信号量:
用一个整数变量来作为信号量,数值表示的某种资源数。
整形信号量和普通整形变量的区别就是,整形信号量只能执行,初始化,P,V三种操作。
从图中我们可以看到,整形信号量将检查和上锁一气呵成,存在的问题就是,不满足让权等待,会出现忙等。
记录型信号量:
从图中我们可以看出记录型信号量是先使用资源后进行判断,当S.value的值小于0时,就表示资源数不够了,需要进入阻塞状态。其中S.value的初始值表示的是某种资源的数目。记录型信号量机制遵循了让权等待的原则,不会出现忙等的情况。
利用信号量实现进程同步和进程互斥:
实现进程互斥:
1.划定临界区,将访问临界资源的部分,放入到临界区。
2.设置互斥信号量mutex,初始值为1
3.在进入临界区之前执行P操作—申请资源
4.在进入临界区之后执行V操作—释放资源
提示:PV操作必须成对的出现。对不同信号量的访问,要设置不同的互斥信号量。
semaphore mutex = 1; //初始化信号量
//记录型信号量的定义
typedef struct{
int value; //剩余的资源数
struct process *L; //等待队列
}semaphore;
实现进程同步:
为了保证能够一前一后的执行,我们设置同步信号量S,初始为0。
//实现进程同步
semaphore S = 0;
为了保证同步,我们通过**“前V后P”**的方式: 在前操作之后我们执行V操作,在之后后需要执行操作之前,我们执行P操作。
生产者和消费者:
问题描述:
解答:
当生产者生成一个产品时,需要先到空闲缓冲区中申请一个资源,因此先P(empty),当放入缓冲区后,缓冲区的资源数+1,因此V(full)。
消费者同理,当消费者想要去消费一个产品时,需要先到full缓冲区中进行-1操作P(full),消费完后,就增加1个空闲缓冲区V(empty)。因为他们彼此的访问是互斥的所以都要有一个互斥信号量mutex,在放入和取出前后进行P,V操作。
多生产者和多消费者:
问题描述:
解答:
当父亲想要往盘子中放入苹果时,需要先检查盘子是否是空的,因此需要先P(plate)。在确保盘子是空的前提下,向盘子中放入苹果,并且通知女儿V(apple)。同理妈妈也是一样。当女儿想吃苹果时,先检查盘子中是否有苹果P(apple),在取出苹果后,将盘子中的数目-1,并告诉父亲V(plate)。同理儿子也是一样。因为每个人对盘子的访问都是互斥的,盘子只能被一个人使用。因此需要在对盘子的操作前后都加上互斥操作。
吸烟者模型:
题目描述:
可以看作为单生产者和多消费者。
解答:
与前两道题目不同,这里要求三个抽烟者必须轮流抽烟,因此我们需要定义一个i,通过i = (i+1) %3 可以让他们轮流抽烟。通过前V后P我们可以实现同步。
读者与写者:
题目描述:
解答:
写者和写者之间要互斥的访问文件,因此我们定于rw来保证写者和写者之间互斥访问文件。定义的count为记录第几个读者去读文件,如果是第1个读者的话,我们就要进行P(rw)操作,来拿到锁,这样就能保证在读者读文件时,没有写者来干扰。因为读者和读者之间是不互斥,因此只有当所有读者都读完时,我们就释放rw锁,这样写者就可以来写入数据。但这样出现了一个问题当同时有2个读者到达了count == 0的判断,都符合条件,因为锁只有1把,当第一个进程拿到锁后第二个进程会一直拿不到锁,处于等待状态。因此我们需要在设置一个互斥信号量mutex保证对conut的操作要一气呵成。还有一个问题,当有源源不断的读进程进入,这样写进程就会处于饿死状态,这就是读优先。为了避免这样,我们再设置一个信号量w实现写优先。
哲学家进餐:
管程:
为了解决信号量机制在编码时的不方便,我们引入了管程。管程是由共享的数据结构(生产者和消费者中的缓冲区) , 对数据结构初始化的语句,一组用来访问数据结构的过程(函数)。管程可以实现进程互斥和同步。
管程的基本特征:
各外部进程和线程只能通过管程提供的特殊入口才能去访问共享数据,并且每次只允许一个进程在管程内执行某个过程。
局部于管程的数据只能被局部于管程的过程所访问。
各进程互斥的访问管程是在编译器实现的。
死锁:
1.什么是死锁:
各进程互相等待对方手里的资源,导致各个进程都处于阻塞状态,无法向前推进。
两个或两个以上的进程因为争夺共享资源,而出现的一种互相等待的现象。
2.死锁,饥饿,死循环:
共同点: 都不能让程序按照事先计划的去执行。
不同点: 死锁至少是2个进程一起死锁,死锁的进程处于阻塞状态。
饥饿可以是一个进程处于饥饿,饥饿的进程可能是阻塞,也可能是就绪。
死循环可能只有一个进程发生的死循环,死循环可以上处理机运行。
- 死锁产生的四个必要条件:
互斥: 对必须互斥访问的资源进行争夺
请求和保持: 保持着某些资源的同时,请求别的资源。 一次性分配策略就是破坏了请求和保持条件.
不可剥夺: 进程保持的资源只能主动释放,不可强行剥夺。剥夺资源破坏了不可剥夺的条件。
循环等待: 存在一种进程的循环等待链。 死锁一定有循环等待。循环等待不一定有死锁。 资源有序分配破坏了循环等待条件。
4.什么时候会发生死锁:
对不可剥夺的资源的不合理分配,可能会导致死锁。
5.死锁的处理策略:
(1)预防死锁: 破环死锁产生的四个必要条件,一般不去破环互斥条件,。
(2)避免死锁: 利用银行家算法检测死锁,避免系统进入不安全状态。常见的方法: 银行家算法。
(3)检测死锁: 允许死锁发生,系统负责检测出死锁并解除。 常见的方法: 资源分配图化简法。
(4)解除死锁: 允许死锁发生,系统负责检测出死锁并解除
解除死锁的方法: 剥夺资源法: 挂起某些死锁进程,并抢占他们的资源,将资源分配给其他进程。
撤销进程法: 强制撤销部分甚至全部死锁进程,并剥夺这些进程的资源。
特别: 死锁的定义是用来检测死锁的方法。
银行家算法:
安全序列: 指的是如果系统按照这种序列进行分配资源,则每个进程都能顺利完成。只要能找到1个安全序列,就表示系统是安全状态。
如果系统处于安全状态,则一定不会发生死锁。如果系统进入了不安全状态,则可能发生了死锁,但死锁的发生一定是在不安全状态。
银行家算法的核心思想: 在资源分配前先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。
Need = Max - Allocation
例题:
解答:
我们要根据这张表去画出另一张表。找到一个安全序列(不唯一)
(1).拿出Available 与表中的Need比较,找到比它小的。
(2). 第二问一般会有一个Request请求,我们要先拿这个Req去和它对应的Need和Available进行比较,如果小于等于Need和Available,就表示可以继续,接着将Need - req , Allocation + Req,Available - Req 接着进行第一问的运算,求出一个安全序列。反之如果大于Need和Available,则无法满足。
补充知识点:
- 线程是处理机调度的基本单位,可以独立执行程序。进程是资源分配的基本单位。线程本身不具备资源,它共享进程中的资源。
- 每个进程都有自己独立的地址空间,进程各自的独立空间是私有的,只能访问自己地址空间中的数据。
- 动态性是进程最重要的特性,依此区分静态程序。
- 程序的封闭性是指进程执行的结果只取决于进程本身,不受外界影响。
- 进程之间可能是具有相关性的也有可能是相互独立的。
- 不能进行进程调度和处理机切换的情况: 处理中断 访问临界区,原子操作。
- 应该进行进程调度和切换的情况:时间片用完,运行结束,需要等待事件的发生,出错,自我阻塞。新进程加入就绪队列不会引起进程调度。
- PCB中所包含的数据结构: 进程标志信息,进程控制信息,进程资源信息,CPU现场信息。
- 运行态–>阻塞态是进程本身所决定的。
- 设备分配是通过操作系统中设置相应的数据结构实现的。
- 不管系统是否支持线程,进程都是资源分配的基本单位。
- 系统将CPU分配给高优先级的进程,当前的进程处于就绪态。 时间片用完,也是就绪态。
- 父子进程共享一部分资源,不共享虚拟地址空间。
- 时间片轮转调度算法是为了使得多个交互用户能够及时响应,使得用户以为"独占计算机"的使用。
- FCFS算法有利于长作业,不利于短作业。
- 在动态优先级中,随着进程执行时间的增加,其优先级降低。
- 当所有进程同时到达时,平均周转时间最短的是短进程优先
- IO操作高于计算,IO操作越繁忙的进程,优先级越高。
- 所谓临界区并不是指临界资源,而是指访问临界资源的那段代码。
- 临界资源是互斥共享资源,非共享资源不属于临界资源。
第三章:内存管理:
内存管理的主要功能:
- 内存空间的分配与回收
- 内存空间的扩充(实现虚拟性)
- 地址转换
- 内存共享
- 存储保护: 上下限寄存器,重定位寄存器和界地址寄存器。
操作系统负责实现逻辑地址到物理地址的转换。
三种装入方式:
绝对装入: 编译器负责地址转换,只适用于单道环境。
可重定位装入(静态重定位): 装入程序负责地址转换, 固定分区分配算法适用 多道程序环境
动态运行时装入(动态重定位): 运行时才进行地址转换,可以将程序分配到不连续的空间。需要重定位寄存器。
在装入时对目标程序中指令和数据地址修改过程称为重定位。
三种链接方式:
(1).静态链接: 将目标模块和库函数链接成一个装入模块后,就不再拆开。
(2).装入时动态链接: 将用户源程序编译后所得到的一组目标模块,在装入内存时采用边装入边链接的方式。优点: 便于修改和更新,便于实现对目标模块的共享。
(3).运行时动态链接: 是在程序执行时需要该目标模块才进行的,凡在执行过程中未被用到的目标模块,都不会调入内存和被链接到装入模块上,优点是能加快程序的装入时间,还能节省大量的内存空间。
(新考点)进程的内存映像:
- 代码块: 二进制代码,代码是只读的,可以被多个进程共享。
- 数据段:程序运行时加工处理的对象,包含全局变量和静态变量。
- PCB:操作系统通过PCB来管理进程。
- 栈:用来存放动态分配的变量,调用malloc函数动态的向高地址分配空间。
- 堆:用来实现函数调用,从用户空间最大地址往低地址方向增长。
连续分配管理方式:
单一连续分配:
单一连续分配,内存被分成了用户去和系统区,用户区内存中只能有一道用户程序,不支持并发。
内部碎片: 如果内存区域中如果有些部分没有用上就是内部碎片。
固定分区分配:
固定分区分配有两种: 分区大小都相等,分区大小都不等。
动态分区分配:
动态分区分配中出现的外部碎片可以用紧凑技术来修复。并且在单一连续分配和固定分区分配中,都会产生内部碎片,无外部碎片。
动态分区分配算法:
基本分页存储管理:
页表寄存器(PTR)的作用:
(1). 存放页表起始地址。
(2). 存放页表长度。
注意: 页表只有一竖行。
★★★地址变换的过程:
- 根据逻辑地址算出页号,页内偏移量。
- 页号的合法性检查(与页表的长度进行对比)。
- 若页号合法,再根据页表起始地址,页号找到对应的页表项。(第一次访问内存: 查页表)
- 根据页表项中记录的内存块号,页内偏移量,得到最终的物理地址。
- 访问物理内存对应的内存单元。(第二次访问内存: 访问目标内存单元)
当CPU想要访问逻辑地址时要进行2次访问内存的操作。
页式管理中地址是唯一的。
具有快表的地址变换机构:
快表(TLB联想寄存器) 是一种访问速度比内存快很多的高速缓存。
引入快表后,地址的变换过程:
如果快表命中的话,我们也就只需要进行一次访存。
总结:
两级页表
单极页表存在的问题: 页表必须连续存放,当页表很大时,要占用多个连续页框。没有必要让这个页表都常驻内存。
多级页表常见的题型:
多级页表的访存次数(假设没有快表机构):N级页表访问一个逻辑地址需要N+1次。
基本分段存储管理:
段表:
根页表一样,段表的段号也是隐藏的。
分段存储管理的地址变换过程:
分段存储和分页存储的对比:
- 页是信息的物理单位。分页的主要目的是实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户来说是不可见的。
- 段是信息的逻辑单位。分段的主要目的是更好的满足用户需求,一个段通常包含了一组属于一个逻辑模块的信息。分段对用户来说是可见的,用户编程时需要显示的给出段名。
- 页的大小是固定的,由系统决定的,段的长度不固定,决定与用户编写的程序。
- 分页的用户进程地址空间是一维的,程序员只需要给出一个记忆符。
- 分段的用户进程地址空间是二维的,程序员既要给出段名,也要给出段内地址。
分段比分页更容易实现信息的共享和保护。
采用分段存储管理也是两次访存。
分页和分段的优缺点:
段页式存储管理:
重点: 段页式存储是二维的,用户只需要显示的给出段号和段内地址,系统会自动的将段内地址转变为页号和页内偏移量。
一个进程对应一个段表,但可能对应多个页表。
地址转换:
虚拟内存:
传统管理存储方式的特征和缺点:
- 一次性:
作业必须一次性的全部装入内存才能开始运行。 当作业很大时,不能全部装入内存,导致大作业无法运行。当大量作业要求运行时,内存无法容纳所有的作业,因此只有少量作业能运行。并发度下降。
- 驻留性:
一旦作业被装入内存,就会一直驻留内存,直到作业结束。有时我们只需要访问一小部分数据就可以正常运行,这就导致内存会驻留大量的用不到的数据。
局部性原理:
时间局部性: 现在访问的指令,数据在不久后会再次访问。
空间局部性: 现在访问的内存单元周围的内存空间,很可能在不久后会被访问。
高速缓存技术: 将使用频繁的数据放到更高速的存储器中。
虚拟内存的定义: 程序不需要全部装入即可运行。运行时根据需要动态的调入数据,若内存不够,还需要换出一些数据。
特征: 多次性 对换性 虚拟性 离散性
请求分页管理方式:
页表结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dL4D04Tk-1691055754493)(C:\Users\刘泰源\Desktop\image-20230729165018339.png)]
缺页中断机构:
发生的缺页中断属于内中断。
页面置换算法:
改进的Clock算法:
页面分配策略:
驻留集: 指请求分页存储管理中给进程分配的内存块的集合。
抖动(颠簸)现象: 页面频繁的换入和换出的现象,主要原因是分配给进程的物理块不够。
工作集: 在某段时间间隔里,进程实际访问页面的集合。驻留集的大小一般不能小于工作集大小。
固定分配和可变分配: 区别在于进程运行期间驻留集的大小是否可以改变。
局部置换和全局置换: 区别在于放生缺页时是否只能从进程自己的页面中选择一个换出。
补充:
虚拟存储技术是补充内存逻辑空间的技术。
Clock算法是将最近未使用的页面置换出去。也被称为NRU算法。
虚拟存储的最大容量是由计算机地址结构决定的。
导致LRU算法实现起来耗费高的原因是:需要对所有的页进行排序(因为LRU要比较最近谁最先被访问)
虚拟存储中页表项的合法位表示本页面是否在内存中。
快表主要用于地址变换。
采用多级页表时,最高级页表项不能超出一页的大小。
页缓冲队列的长度不影响系统缺页率
第四章文件管理:
文件的类型:
按性质和用途
- 系统文件
- 用户文件
- 库文件
按文件中数据的形式分类
- 源文件
- 目标文件
- 可执行文件
按存取控制属性分类
- 可执行文件
- 只读文件
- 读/写文件
按组织形式和处理方式分类
- 普通文件
- 目录文件
- 特殊文件: 特指系统中的I/O设备
对目录管理的要求:
- 实现**“按名存取”**
- 提高对目录的检索速度
- 文件共享
- 允许文件重名
文件目录:
文件控制块(FCB): 目录文件中的一条记录。FCB的有序集合称为"文件目录",一个FCB就是一个文件目录项。FCB中包含了文件的基本信息(文件名,物理地址,逻辑地址,物理结构)存储控制信息,使用信息。FCB实现了文件名和文件之间的映射,使用户可以实现按名存取
目录本身就是一个有结构的文件。是一种特殊的文件。
目录结构:
单级目录结构: 一个系统只有一个目录表,不允许文件重名。
两级目录结构: 不同目录下的文件可以重名,但不能对文件进行分类。
多级(树形)目录结构: 不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享。系统根据"文件路径"找到目标文件。从根目录出发的是绝对路径。从当前目录出发的是相对路径。
无环图目录结构: 增加了指向同一节点的有向边,使整个目录成为一个有向无环图。为共享结点设置一个共享计数器,计数器为0时才真正删除该节点。
索引节点:
除了文件名之外的所有信息全都放在索引节点中,每个文件对应一个索引节点。
目录项只包含文件名,索引节点指针,因此每个目录项的长度大幅减小。因此每个磁盘可以存放更多个目录项,IO次数就减少了。
文件的逻辑结构:
-
无结构文件(流式文件)
-
有结构文件
- 顺序文件(磁带)
顺序文件的优点就是在对文件记录进行批量存取时效率最高。缺点是增加,删除,查找,修改时效率很慢。
- 索引文件
建立一张索引表实现的直接存取。每当增加新纪录时,便对索引表进行修改。索引文件具有较快的检索速度。缺点是建立了一张索引表增加了存储开销。
- 索引顺序文件
它基本上克服了不能随机访问,不方便删除和插入等缺点。
文件的物理结构:
连续分配: 连续分配方式要求每个文件在磁盘上占有一组连续的块。
优点: 支持顺序访问和直接访问(随机访问);连续分配的文件在顺序访问时速度最快。
缺点: 不方便文件拓展,存储空间利用率低,会产生磁盘碎片。
链接分配: 采用离散分配的方式,可以为文件分配离散的磁盘块。不适合直接存取。
-
隐式链接:
-
除文件的最后一个盘块之外,每个盘块都存在指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针。
优点: 很方便文件拓展,不会有碎片问题,外存利用率高。
缺点: 只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间。
-
显式链接: 把用于链接文件各物理块的指针显式的地存放在一张表中,即文件分配表(FAT)。一个磁盘只会建立一张FAT表,开机时将文件分配表(FAT)放入内存,并常驻内存。
优点: 很方便文件的拓展,不会有碎片问题,外存利用率高。并且支持随机访问,相比于隐式链接来说不需要访问磁盘,文件的访问效率高。
缺点: 文件分配表(FAT)需要占用一定的存储空间。
索引分配:
索引分配支持变长文件。
当一个索引表不够时: 链接方案:
多层索引:
混合索引:
总结:
存储空间的划分和初始化:
文件卷可以由多个物理磁盘组成。
存储空间的管理:
- 空闲表法: (适用于连续分配方式)
分配磁盘块的方法:(首次适应,最佳适应…),回收也与内存回收一样(当左右都有空闲区的话就将3个空闲区合并,空闲表项减少1个)。
空闲盘块表:
- 空闲链表法:
- 空闲盘块链:以盘块为单位组成1条空闲链
操作系统保存着链头和链尾指针。
分配时:若某文件申请了K个磁盘,则从链头开始依次摘下K个盘块分配,并修改链头指针。
回收时:回收的盘块新增到链尾指针后,并修改链尾指针。适用于离散分配。
- 空闲盘区链:以盘区为单位组成1条空闲链
操作系统保存着链头和链尾指针。
分配时:若某文件申请了K个磁盘,则从链头开始依次摘下K个盘块分配,并修改链头指针。当不够时可以将2个盘区合并分配。
回收时:回收的盘块新增到链尾指针后,并修改链尾指针。适用于离散分配和连续分配,当给文件分配多个空闲盘块时效率更高。
- 位示图法:
(字号,位号)=(i,j)的二进制位对应的 盘块号b = n*i+j (n为位号的长度(字长),注意是从0开始还是1开始)
b号盘块对应的字号(行号) i= b/n,位号(列号) j = b%n
当位示图的行号和列号是从1开始的: b = n*(i-1)+j 行号 i = (b-1)/n+1 列号 j = (b-1)%n+1
文件的基本操作:
1.创建文件(create系统调用)
需提供3个参数:文件名,所需要的外存空间,文件存放的路径。
操作系统要在外存找到所需要的空间,创建该文件所对应的目录项。
2.删除文件(delete系统调用)
删除文件所需要的参数:文件存放的路径,文件名。
删除时操作系统需要通过文件存放路径找到目录文件,从目录文件中找到文件所对应的目录项,回收文件占用的磁盘空间。从目录表中删除文件所对应目录项。
3.打开文件(open系统调用)
打开文件主要提供的参数: 文件存放路径,文件名,要对文件的操作类型。
打开文件时并不会把文件数据直接读入内存,而是把文件的目录项复制到文件的打开文件表中。并把索引号(文件描述符)返回给用户。
4.写文件(write系统调用)
5.读文件(read系统调用)
6.关闭文件(close系统调用)
总结:
文件保护:
口令保护:
为文件设置一个"口令"(132131),用户请求访问该文件时必须提供口令。
口令一般存放在FCB或者索引节点中。操作系统会将用户提供的口令与FCB中存储的口令进行对比。
优点:保存口令的空间开销不够,验证口令的开销也小。
缺点:正确的口令,存放在系统内部,不够安全。
加密保护:
优点:保密性强,不需要在系统中存储密码。由于加密保护不由系统实现因此有扩展能力。
缺点: 编译/译码,或者说加密/解密需要花费一定的时间。
访问保护:
访问控制:在每个文件的FCB中增加一个访问控制表(ACL),该表中记录了各个用户对该文件执行那些操作。 实现灵活,可以实现复杂的文件保护。相比于加密保护机制,访问控制的安全性差,灵活度高。
访问控制机制由系统实现。
***文件系统的层次结构:
文件系统的全局结构:
1.物理格式化: 即低级格式化-- 划分扇区,检测坏扇区,并用备用扇区去替换坏扇区。操作系统意识不到坏扇区。
2.逻辑格式化: 磁盘分区,完成各分区的文件系统初始化,
虚拟文件系统:
虚拟文件系统的特点: 1.向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异。2.同时虚拟文件系统要求下层文件系统必须实现一定的函数功能,一个新的文件系统想要在某操作系统上被使用就必须满足虚拟文件系统的要求。3.每打开一个文件,虚拟文件系统就会在主存新建1个vnode,用于统一的数据结构表示文件,无论该文件在哪个文件系统。vnode只存在于主存中,而inode即会被调入主存,也会在外存中存储。
VFS的数据结构: 超级块对象,索引节点对象,目录文件对象,文件对象。
第五章I/O设备管理:
I/O设备就是可以将数据输入到计算机,或者可以接受计算机输出数据的外部设备。
设备的分配方式:
- 独享分配
- 共享分配
- 虚拟分配
I/O设备按使用特性分类:
- 人机交互类外部设备(鼠标,键盘,打印机):数据传输速度慢。
- 存储设备(存储设备,移动硬盘):数据传输速度快。
- 网络通信设备(网络通信,调制解调器):传输速度介于上述两者之间。
按传输速率分类:
- 低速设备
- 中速设备
- 高速设备
按信息交换的单位:
- 块设备:传输速度较高,可寻址,即对它可以随机的读/写任一块。
- 字符设备:传输速率慢,不可寻址,在输入/输出时时常采用中断驱动方式。
I/O控制器:
CPU无法直接控制I/O设备,因此I/O设备还要有一个电子部件作为CPU和I/O设备机器部件之间的"中介",用于实现CPU对设备的控制。
这个部件就是I/O控制器,又称设备控制器,CPU可以控制I/O控制器,又由I/O控制器来控制设备的机器部件。
I/O控制器的组成:
注意:
一个I/O控制器可能会对应多个设备。因此寄存器也可能有多个,而且这些寄存器要有相应的地址。
两种寄存器编址方式:
- 内存映射I/O:控制器中的寄存器和内存统一编制,可以采用对内存进行操作的指令来对控制器进行操作。
- 寄存器独立编制:控制器中的寄存器独立编制,需要设置专门的指令来操作控制器。
★★★I/O控制方式:
程序直接控制方式(轮询):
中断驱动方式:
DMA方式(直接存储器存取):
DMA方式不经过CPU而直接从主存存取数据的数据交换方式。
通道控制方式:
通道是一种硬件,与CPU相比,它能执行的指令比较单一,并且通道是放在主机内存中的,也就是说通道和CPU共享内存。 通道用于完成内存和外设的信息交换。
通道分为3类:
- 字节多路通道:含有多个非分配型子通道。不适合连接高速设备。
- 数组选择通道:在一段时间内只能执行一道通道程序,通道利用率低。
- 数组多路通道:很高的传输效率,但每次只允许一个设备传输数据。
通道技术是一种硬件技术。
总结:
★★★I/O软件层次结构:
当用户发起I/O请求时是从上到下,当发起I/O应答时是从下到上。 其中下三层 (设备驱动程序,中断处理程序,硬件)是指和硬件像交互的。
设备独立性软件的6个功能:
- 向上层提供统一的调用接口
- 设备保护
- 差错处理
- 设备的分配和回收
- 数据缓冲区处理
- 建立逻辑设备名和物理设备名之间的映射关系
输入/输出应用程序接口
字符设备接口(字符没有地址的概念,因此不需要提供地址的概念):
get/put系统调用;向字符设备读/写一个字符。传输速率低.不可寻址,一般采用中断驱动I/O方式
块设备接口:
read/write系统调用:向块设备的读写指针位置读/写多个字符;seek系统调用:修改读写指针的位置,传输速率高.可寻址,一般采用DMA方式
网络设备接口(网络套接字socket接口):
socket系统调用:创建1个网络套接字,read/write 从套接字中读/写数据
阻塞I/O和非阻塞I/O:
阻塞I/O:应用程序发起I/O系统调用,进程需要转为阻塞态等待.(get)
非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待.(write)
假脱机技术(SpooLing):
脱机(脱离主机的控制来进行的输入和输出)
虚拟设备是靠SpooLing技术实现的,SpooLing技术的主要目的是可将独占设备改变成共享设备。提高系统资源/独占设备的利用率。采用以空间换时间的技术。
SpooLing系统是由预输入程序,井管理程序和缓输出程序组成。
构成SpooLing系统的基本条件不仅要有大容量,高速度的外存作为输入井和输出井,而且还要SpooLing软件。
假脱机技术(SpooLing)使用软件模拟脱机技术:
设备的分配和回收:
缓冲区的作用:
- 缓和CPU与I/O设备之间速度不匹配的矛盾。
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制。
- 解决了数据粒度不匹配的问题。
- 提高了CPU与I/O设备之间的并行性。
缓冲区主要解决输入/输入速度比CPU处理的速度慢的问题。
缓冲区是一种临界资源,因此需要考虑实现进程访问缓冲区的同步问题。
单缓冲和双缓冲:
缓冲池通常在主存中建立
磁盘:
磁盘属于共享设备
磁盘的结构:
磁盘调度算法:
FCFS(先来先服务调度)
最短寻找时间优先:
扫描算法(scan算法电梯):
在扫描算法(scan)中有两个缺点:
- 当查找的184号磁道时右边就已经没有目标磁道了,但由于扫描算法必须要移动到最右边才能往左走。
解决: LOOK算法(边走边看):
- scan算法对于各个位置磁道的响应频率不平均,184号磁道的响应频率要更高。
解决:C-SCAN算法:
当移动到最右边时,我们直接让磁道快速移动到最左边,中间不做任何处理。
综合解决: C-LOOK算法
当往回走的时候不用回到最左边,只需要回到最左边的目标磁道。
若题目没有特别说明,则SCAN就是LOOK,C-SCAN就是C-LOOK
磁盘初始化:
- 进行低级格式化(物理格式化),将磁盘的各个磁道划分成多个扇区。一个扇区包含头,数据区域,尾。
- 将磁盘分区,每个分区由若干个柱面组成(C盘,D盘…)
- 进行逻辑格式化,创建文件系统。(位示图,空闲分区表)
引导块:
计算机开机时需要进行一系列的初始化工作,这些工作是通过执行初始化程序(自举程序)。
完整的自举程序放在磁盘的启动块上,启动块位于磁盘的固定位置。
坏块的管理:
坏块: 坏了,无法正常使用的扇区,这属于硬件故障,操作系统是无法修复的。应将他标记出来,一面错误的使用它。
对于复杂的坏块,会维护一个坏块链表。也会保留一些备用扇区(扇区备用),坏块对操作系统是透明的。
固态硬盘(计组):
补充:
共享设备是指同一时间段内允许多个进程同时访问的设备。
共享设备必须是可寻址和可随机访问的,分配共享设备不会引起死锁。
虚拟设备是指把一个物理设备转换车多个逻辑设备是为了克服独占设备速度慢。
I/O逻辑即设备控制器,实现对设备的控制。
字节多路通道用作连接大量的低速或中速的I/O设备。
将系统中的每台设备进行统一编号,该编号为绝对号。
将系统调用参数翻译成设备操作命令的工作由设备无关的操作系统软件完成。
DCT是设备控制表,COCT是控制器控制表,CHCT是通道控制表。
]
磁盘调度算法:
FCFS(先来先服务调度)
最短寻找时间优先:
扫描算法(scan算法电梯):
在扫描算法(scan)中有两个缺点:
- 当查找的184号磁道时右边就已经没有目标磁道了,但由于扫描算法必须要移动到最右边才能往左走。
解决: LOOK算法(边走边看):
- scan算法对于各个位置磁道的响应频率不平均,184号磁道的响应频率要更高。
解决:C-SCAN算法:
当移动到最右边时,我们直接让磁道快速移动到最左边,中间不做任何处理。
综合解决: C-LOOK算法
当往回走的时候不用回到最左边,只需要回到最左边的目标磁道。
若题目没有特别说明,则SCAN就是LOOK,C-SCAN就是C-LOOK
磁盘初始化:
- 进行低级格式化(物理格式化),将磁盘的各个磁道划分成多个扇区。一个扇区包含头,数据区域,尾。
- 将磁盘分区,每个分区由若干个柱面组成(C盘,D盘…)
- 进行逻辑格式化,创建文件系统。(位示图,空闲分区表)
引导块:
计算机开机时需要进行一系列的初始化工作,这些工作是通过执行初始化程序(自举程序)。
完整的自举程序放在磁盘的启动块上,启动块位于磁盘的固定位置。
坏块的管理:
坏块: 坏了,无法正常使用的扇区,这属于硬件故障,操作系统是无法修复的。应将他标记出来,一面错误的使用它。
对于复杂的坏块,会维护一个坏块链表。也会保留一些备用扇区(扇区备用),坏块对操作系统是透明的。
固态硬盘(计组):
补充:
共享设备是指同一时间段内允许多个进程同时访问的设备。
共享设备必须是可寻址和可随机访问的,分配共享设备不会引起死锁。
虚拟设备是指把一个物理设备转换车多个逻辑设备是为了克服独占设备速度慢。
I/O逻辑即设备控制器,实现对设备的控制。
字节多路通道用作连接大量的低速或中速的I/O设备。
将系统中的每台设备进行统一编号,该编号为绝对号。
将系统调用参数翻译成设备操作命令的工作由设备无关的操作系统软件完成。
DCT是设备控制表,COCT是控制器控制表,CHCT是通道控制表。
版权声明:本文标题:操作系统知识点总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1726361096a1080660.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论