操作系统知识点总结:
第一章:操作系统概述
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操作越繁忙的进程,优先级越高。
- 所谓临界区并不是指临界资源,而是指访问临界资源的那段代码。
- 临界资源是互斥共享资源,非共享资源不属于临界资源。
第三章:内存管理:
内存管理需要实现的4个方面:
- 内存空间的分配与回收
- 内存空间的扩充(实现虚拟性)
- 地址转换
操作系统负责实现逻辑地址到物理地址的转换。
三种方式:
绝对装入: 编译器负责地址转换
可重定位装入: 装入程序负责地址转换
动态运行时装入: 运行时才进行地址转换
- 存储保护
连续分配管理方式:
单一连续分配:
单一连续分配,内存被分成了用户去和系统区,用户区内存中只能有一道用户程序,不支持并发。
内部碎片: 如果内存区域中如果有些部分没有用上就是内部碎片。
固定分区分配:
固定分区分配有两种: 分区大小都相等,分区大小都不等。
动态分区分配:
动态分区分配中出现的外部碎片可以用紧凑技术来修复。并且在单一连续分配和固定分区分配中,都会产生内部碎片,无外部碎片。
动态分区分配算法:
临界资源是互斥共享资源,非共享资源不属于临界资源。
第三章:内存管理:
内存管理需要实现的4个方面:
- 内存空间的分配与回收
- 内存空间的扩充(实现虚拟性)
- 地址转换
操作系统负责实现逻辑地址到物理地址的转换。
三种方式:
绝对装入: 编译器负责地址转换
可重定位装入: 装入程序负责地址转换
动态运行时装入: 运行时才进行地址转换
- 存储保护
连续分配管理方式:
单一连续分配:
[外链图片转存中…(img-KPiFyDaa-1690468512811)]
单一连续分配,内存被分成了用户去和系统区,用户区内存中只能有一道用户程序,不支持并发。
内部碎片: 如果内存区域中如果有些部分没有用上就是内部碎片。
固定分区分配:
[外链图片转存中…(img-2vAvYcmU-1690468512811)]
固定分区分配有两种: 分区大小都相等,分区大小都不等。
动态分区分配:
[外链图片转存中…(img-Xahg9WXk-1690468512812)]
动态分区分配中出现的外部碎片可以用紧凑技术来修复。并且在单一连续分配和固定分区分配中,都会产生内部碎片,无外部碎片。
[外链图片转存中…(img-T6llqNSF-1690468512812)]
动态分区分配算法:
[外链图片转存中…(img-JmydlR8A-1690468512812)]