计算机操作系统(OS)知识点总结笔记(待完善)

博主最近在搞自动化测试。。。太南了。。OS可能没空更新了

目录

  • 一、操作系统的概念,功能和目标
    • 1、操作系统的概念
    • 2、操作系统的运行机制与体系结构
    • 3、中断和异常
    • 4、系统调用
  • 二、进程、线程
    • 1、进程
    • 2、线程
    • 3、调度
    • 4、进程同步和互斥
    • 5、进程互斥的软件实现方法
    • 6、进程互斥的硬件实现
    • 7、信号量机制
    • 8、生产者-消费者问题
    • 9、吸烟者问题
    • 10、读者写者问题
  • 三、死锁
    • 1、死锁的概念
    • 2、死锁的处理策略----预防死锁
    • 3、死锁的处理策略----避免死锁
    • 4、死锁的检测和解除
  • 四、内存
    • 1、内存的基础知识
    • 2、覆盖与交换
    • 3、内存管理
    • 4、虚拟内存

一、操作系统的概念,功能和目标

1、操作系统的概念

计算机操作系统(OS)知识点总结笔记(待完善)_第1张图片

操作系统:是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,是计算机中最基本的系统软件

1、操作系统的功能:

  • 系统资源的管理者:处理机、存储器、文件、设备管理
  • 用户与计算机硬件之间的接口(命令接口,程序接口,程序接口=系统调用),为上层用户、应用程序提供简单服务

2、操作系统的特征:共享
共享即资源共享,系统中的资源可供内存中多个并发执行的进程共同调用

  • 互斥共享方式:一个时间段内只允许一个进程访问该资源
  • 同时共享方式:允许一个时间段内由多个进程同时对他们进行访问

3、虚拟:把一个物理上的实体变为若干个逻辑上的对应物,物理实体是实际存在的,而逻辑上对应物是用户感受到的------虚拟存储器技术

1、有时候程序同时运行需要的内存远大于4GB,为啥他们还可以在4GB内存的电脑上同时运行?yes,这就是虚拟存储技术,实际只有4GB内存,用户看来却远大于4GB
2、某单核cpu的计算机中,用户同时打开了好些软件。。为什么单核的能同时运行这么多?-----虚拟处理器技术,实际上只有一个cpu,微观上处理机在各个微小的时间段内交替为各个进程服务,让用户看起来有多个cpu在为自己服务(时分复用技术)

4、异步
异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一罐彻底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性(有并发性才可能导致异步)

没有共享和并发(2个最基本特征),就谈不上虚拟和异步

5、分时操作系统
计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。解决了人机交互问题。 允许多个用户同时使用一台计算机

2、操作系统的运行机制与体系结构

1、两种指令

  • 特权指令:如内存清零指令,不允许用户程序使用
  • 非特权指令:如普通的运算指令

2、两种处理器状态

  • 用户态:此时cpu只能执行非特权指令
  • 核心态:特权指令、非特权指令都可执行

3、两种程序

  • 内核程序:是系统的管理者,既可以执行特权指令,也可以执行非特权指令,运行在核心态
  • 应用程序:为了保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态

4、计算机系统的层次结构图
计算机操作系统(OS)知识点总结笔记(待完善)_第2张图片
内核是操作系统最基本最核心的部分,是计算机上配置的底层软件。实现操作系统内核功能的那些程序就是内核程序

5、OS的体系结构
计算机操作系统(OS)知识点总结笔记(待完善)_第3张图片

3、中断和异常

(1)中断的概念、作用

  • 当中断发生时,CPU立即进入核心态
  • 中断发生后,当前运行的进程暂停运行,并由OS内核对中断进行处理
  • 对于不同的中断信号,会进行不同的处理

发生中断就意味着需要操作系统介入,开展管理工作。cpu收到计时部件发出的中断信号,从用户态切换为核心态,对中断进行处理

Q:用户态、核心态之间的转换是怎么实现的?
A:用户态------>核心态 是通过中断 实现的,并且中断是唯一途径
核心态------>用户态 是通过执行一个特权指令,将程序状态字PSW标志位设置为“用户态”

(2)中断的分类

  • 内中断(也称异常、例外、陷入),包括自愿中断和强迫中断(硬件故障如缺页,软件中断如整数除0)
  • 外中断(狭义的中断),包括外设请求和人工干预

4、系统调用

用户接口分为命令接口(允许用户直接使用)和程序接口(允许用户通过程序间接使用)。程序接口就是由一组系统调用组成

1、系统调用的作用
应用程序通过系统调用请求OS的服务。系统中各种共享资源都由操作系统统一掌管,因此在用户程序中,凡事与资源有关的操作(如存储分配,I/O操作,文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由OS代为完成,这样可以保证系统稳定性和安全性
计算机操作系统(OS)知识点总结笔记(待完善)_第4张图片
2、系统调用的过程

传递系统调用参数---->执行陷入指令(用户态)---->执行系统调用相应服务程序(核心态)---->返回用户程序

注意:系统调用发生在用户态,对系统调用的处理发生在核心态

二、进程、线程

1、进程

1、进程实体:PCB(进程控制块,用来描述进程的各种信息)、程序段(存放要执行的代码)、数据段(存放程序运行过程中处理的各种数据)三部分构成。一般情况下,把进程实体就简称为进程。所谓创建/销毁进程,实质上就是创建/销毁进程实体中的PCB。PCB是进程存在的唯一标志

2、严格来说,进程(动态)是进程实体(静态)的运行过程,是具有独立功能的程序在数据集合上运行的过程,系统进行资源分配和调度的一个独立单位。

3、进程的组织------链接方式

  • 按照进程状态将PCB分为多个队列
  • 操作系统持有指向各个队列的指令
    计算机操作系统(OS)知识点总结笔记(待完善)_第5张图片
    4、进程的特征
  • 动态性:进程是程序的一次执行过程,是动态的产生、变化和消亡的
  • 并发性:内存中有多个进程实体,各进程可并发执行
  • 独立性:进程是能独立运行、独立获得资源、独立接收调度的基本单位
  • 异步性:各进程按各自独立的、不可预知的速度向前推进,OS要提供“进程同步机制”来解决异步问题
  • 结构性:每个进程都会配置一个PCB

5、进程的状态与转换

  • 运行态:占有CPU,并在运行(单核的话一个时刻最多只有一个进程处于运行态)
  • 就绪态:已具备运行条件,但没有空闲cpu所以暂时不能运行
  • 阻塞态:因等待某一事件而暂时不能运行

另外两种状态:

  • 创建态:进程正在被创建,OS为其分配资源、初始化PCB
  • 终止态:进程正在从OS中撤销,OS回收进程拥有的资源,撤销PCB

6、进程控制

进程控制,可以简单理解为,就是实现各个进程状态的转换
原语:用原语实现进程控制。原语的特点是不允许中断,只能一气呵成,采用“开中断指令”和“关中断指令”实现,即原子操作

无论哪个原语,要做的无非三件事情:更新PCB中的信息,将PCB插入合适的队列,分配/回收资源

7、进程通信
进程通信就是进程之间的信息交换。因为进程是分配系统资源的单位,因此各进程拥有相互独立的内存地址空间。为了保证安全,一个进程不能直接访问另一个进程的地址空间。
(1)共享内存
计算机操作系统(OS)知识点总结笔记(待完善)_第6张图片
共享内存分为:

  • 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种方式速度慢,限制多,是一种低级通信方式
  • 基于存储区的共享:在内存中划出一块共享存储区,数据的形式、存放位置,都由进程控制,而不是OS。这种方式速度更快,是一种高级通信方式

(2)管道通信

进程1-----写数据----->管道----读数据----->进程2

  • 管道是指用于连接读写进程的一个共享文件,其实就是在内存中开辟一个大小固定的缓冲区
  • 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道
  • 各进程要互斥地访问管道
  • 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞;当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞
  • 如果没写满,就不允许读,没读空,就不允许写
  • 数据一旦被读出,就从管道中抛弃,这意味着读进程最多只能有一个

(3)消息传递
进程间的数据以格式化的消息为单位,进程通过OS提供的“发送消息/接收消息”两个原语进行数据交换。

  • 直接通信方式:消息直接挂到接收进程的消息缓冲队列上
  • 间接通信方式:消息要先发送到中间实体(信箱)中,因此也称为“信箱通信方式”(eg., 计网中的电子邮件系统)

2、线程

1、有的进程可能需要同时做很多事,而传统的进程只能串行执行一系列程序,为此引入了线程,来提高并发度。可以把线程理解为轻量级进程

(1)线程是一个基本的CPU执行单元,也是程序执行流的最小单位
(2)引入线程之后,不仅进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提高系统的并发度,使得一个进程内也可以并发处理各种任务
(3)引入线程后,进程只作为资源分配的基本单位,而线程是调度的基本单位
(4)进程间并发需要切换进程的运行环境,系统开销大;线程间并发,如果在同一个进程内,则不需要切换进程,系统开销小

2、线程的一些属性:

  • 多CPU计算机中,各个线程可占用不同的CPU
  • 每个线程都有一个线程ID,线程控制块(TCB)
  • 线程也有就绪、阻塞、运行的基本状态
  • 线程几乎不拥有系统资源
  • 同一进程的不同线程之间共享进程的资源
  • 同一进程中的线程切换,不引起进程切换;不同进程中的线程切换会引起进程切换

3、线程的实现方式
(1)用户级线程
计算机操作系统(OS)知识点总结笔记(待完善)_第7张图片
(2)内核级线程
计算机操作系统(OS)知识点总结笔记(待完善)_第8张图片
操作系统只看得见内核级线程,因此只有内核级线程才是处理机分配的单位

3、调度

当有一堆任务要处理,但由于资源有限,这些事情没法同时处理,这就需要确定某种规则决定处理这些任务的顺序,这就是调度研究的问题。

1、调度的三个层次

(1)高级调度(作业调度)

高级调度按一定的原则从外存上处于后备队列的作业中挑选一个或多个作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),以使他们获得竞争处理机的权利。是内存与外存之间的调度。
高级调度对进程状态的影响:无—>创建态----->就绪态

(2)中级调度(内存调度)

  • 引入虚拟存储技术后,可将暂时不能运行的进程调至外存等待,等他重新具备了运行条件且内存又稍有空闲时,再重新调入内存。这么做是为了提高系统利用率和吞吐量
  • 暂时调到外存等待的进程状态称为挂起状态。值得注意的是,PCB并不会一起调到外存,而是会常驻内存
  • 中级调度(内存调度)就是要决定将哪个处于挂起状态的进程重新调入内存
  • 挂起状态又可分为就绪挂起和阻塞挂起

中级调度对进程状态的影响:挂起态----->就绪态

(3)低级调度(进程调度)

  • 低级调度的主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给他
  • 进程调度是OS最基本的一种调度,在一般的OS中都必须配置进程调度。进程调度频率很高,一般几十毫秒一次

低级调度对进程状态的影响:就绪态------>运行态

2、调度的时机
计算机操作系统(OS)知识点总结笔记(待完善)_第9张图片
不能进行进程调度与切换的情况:

  • 在处理中断时。中断处理过程复杂,很难做到进程切换
  • 进程在OS内核程序临界区中(临界区是访问临界资源的那段代码。临界资源:一个时间段内只允许一个进程使用的资源,各进程需要互斥地访临界资源)
  • 在原子操作过程中(原语)。原子操作不可中断,要一气呵成

3、进程调度的方式

  • 非剥夺调度方式,又称非抢占方式。即,只允许进程主动放弃处理机,在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机。
  • 剥夺调度方式,又称抢占方式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给那个更紧迫的进程。

广义的进程调度包含了选择一个进程和进程切换两个步骤。进程的切换过程主要完成了:

  • 对原来运行的进程各种数据的保存
  • 对新进程各种数据的恢复

4、调度算法的评价指标
(1)CPU利用率=忙碌的时间/总时间
(2)系统吞吐量:单位时间内完成作业的数量
=总共完成了多少道作业/完成作业的时间
(3)周转时间:指从作业被提交给系统开始,到作业完成为止的这段时间间隔。周转时间=作业完成时间-作业提交时间
(4)带权周转时间:=作业周转时间/作业实际运行的时间

5、调度算法
(1)FCFS

先来先服务(FCFS):
(1)主要从公平的角度考虑,按照作业/进程到达先后顺序进行服务
(2)非抢占式
(3)优点:公平,算法实现简单
(4)缺点:排在长进程/作业后的短进程需要等待很长时间,带权周转时间很大,对短作业来说体验不好。

计算机操作系统(OS)知识点总结笔记(待完善)_第10张图片
(2)SPF/SJF

短进程优先(SPF,shortest process first,SJF,job,短作业优先)
(1)追求最少的平均等待时间、最少的平均周转时间
(2)最短的作业/进程优先得到服务(最短是指服务时间最短)
(3)SPF是非抢占式算法,但也有抢占式版本------最短剩余时间优先,SRNT算法
(4)优点:“最短的”(这个最短是有前提的,下面有提到)平均等待时间、平均周转时间
(5)缺点:不公平。对短作业有利,长作业不利,可能产生饥饿现象

计算机操作系统(OS)知识点总结笔记(待完善)_第11张图片
在所有进程可同时运行时(或在所有进程几乎都同时到达时),采用SPF算法的平均等待时间、平均周转时间最少

(3)HRRN

高响应比优先(HRRN,highest response ratio next)
(1)要综合考虑作业/进程的等待时间和执行时间
(2)每次调度时先计算各个作业的响应比,选择响应比最高的进程为其服务
(3)非抢占

计算机操作系统(OS)知识点总结笔记(待完善)_第12张图片

-------------------------------进程调度-----------------------------------------

(4)时间片轮转RR算法

时间片轮转(RR,round-robin)
(1)公平的、轮流的为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片
(2)用于进程调度(只有作业放入内存建立相应的进程后,才能被分配处理机时间片)
(3)轮流让就绪队列中的进程一次执行一个时间片(每次选择排在就绪队列队头的进程)
(4)如果时间片太大,使得每个进程都可以在一个时间片内就完成,则RR算法退化为FCFS算法,并且会增大进程响应时间
(5)优点:公平,响应快,让各个进程得到及时的响应;缺点:不区分任务的紧急程度

(5)优先级调度算法

(1)算法思想:越来越多的应用场景需要根据任务的紧急程度来决定处理顺序
(2)每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程
(3)即可用于作业调度,也可用于进程调度
(4)抢占、非抢占式都有

(6)多级反馈队列算法

(1)对其他调度算法的折中权衡
(2)设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
(3)新景程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾
(4)只有第k级队列为空时,才会为k+1级队头的进程分配时间片
(5)抢占式算法
(6)用于进程调度

计算机操作系统(OS)知识点总结笔记(待完善)_第13张图片

4、进程同步和互斥

1、对临界资源的互斥访问,可以在逻辑上分为如下四个部分:

  • 进入区:负责检查是否可以进入临界区,若可进入,则“上锁”,以组织其它进程同时进入临界区
  • 临界区:访问临界资源的那段代码
  • 退出区:负责接触正在访问临界资源的标志(“解锁”)
  • 剩余区:作其他处理

注意:临界区是进程中访问临界资源的代码段,进入区和退出区负责实现互斥的代码段。

2、为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:

  • 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入
  • 忙则等待:当已有进程进入临界区时,其他视图进入临界区的进程必须等待
  • 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)
  • 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待

5、进程互斥的软件实现方法

1、单标志法
计算机操作系统(OS)知识点总结笔记(待完善)_第14张图片
在这种情况下,对临界区的访问,一定是按P0—>P1—>P0—>P1—>…这样轮流访问。单标志法主要问题是,违背“空闲让进”原则

2、双标志先检查法
计算机操作系统(OS)知识点总结笔记(待完善)_第15张图片
双标志先检查法违背“忙则等待”原则

3、双标志后检查法
计算机操作系统(OS)知识点总结笔记(待完善)_第16张图片
4、Peterson算法
计算机操作系统(OS)知识点总结笔记(待完善)_第17张图片
Peterson算法采用软件方法解决互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则

6、进程互斥的硬件实现

1、中断屏蔽方法

  • 利用“开/关中断指令”实现,与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止读不允许被中断,也就不能发生进程切换,因此不可能发生两个进程同时访问临界区。
  • 缺点:不适用于多处理机,只适用于OS内核进程,不适用于用户进程

2、TestAndSet指令
TSL指令是用硬件实现的,执行过程不允许被中断,只能一气呵成。
计算机操作系统(OS)知识点总结笔记(待完善)_第18张图片

7、信号量机制

  • 用户进程可以通过操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥和同步。
  • 信号量其实就是一个变量(可以是整数也可以是更复杂的),可以用一个信号量来表示系统中某种资源的数量
  • 可以用一对原语:wait(S)原语signal(S)原语,简称为P操作和V操作

1、整型信号量
用一个整数变量来作为信号量,表示系统中某种资源的数量。对信号量的操作只有三种:P操作、V操作、初始化。
计算机操作系统(OS)知识点总结笔记(待完善)_第19张图片
优点:检查和上锁一气呵成,避免了并发、异步导致的问题
缺点:不满足让权等待,会发生忙等

2、记录型信号量
即用记录型数据结构表示的信号量
计算机操作系统(OS)知识点总结笔记(待完善)_第20张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第21张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第22张图片
3、信号量机制实现进程互斥
计算机操作系统(OS)知识点总结笔记(待完善)_第23张图片

(1)分析并发进程的关键活动,划定临界区
(2)设置互斥信号量mutex,初值为1
(3)在临界区之前执行P
(4)在临界区之后执行V

  • 对不同的临界资源需要设置不同的互斥信号量
  • P、V操作必须成对出现

4、信号量机制实现进程同步
同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。同步其实已经实现了互斥,所以同步是一种更为复杂的互斥。

(1)分析什么地方需要实现“同步”,即必须保证“一前一后”执行的2个操作
(2)设置同步信号量S,初始为0
(3)在“前操作”之后执行V,在“后操作”之前执行P

计算机操作系统(OS)知识点总结笔记(待完善)_第24张图片
5、信号量机制实现前驱关系
计算机操作系统(OS)知识点总结笔记(待完善)_第25张图片

8、生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入一个缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(这里“产品”理解为某种数据)

  • 生产者、消费者共享一个初始为空、大小为n的缓冲区,否则必须等待
  • 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待(同步)
  • 只有缓冲区不空时,消费者才能从中取出产品,否则必须等待(同步)
  • 缓冲区是临界资源,各进程必须互斥地访问(互斥)
  • 生产者每次呀小号(P)一个空闲缓冲区,并生产(V)一个产品。消费者每次要消耗(P)一个产品,并释放一个空闲缓冲区(V)。往缓冲区放入/取走产品需要互斥
semaphore mutex=1;    //互斥信号量,实现对缓冲区的互斥访问
semaphone empty=n;    //同步信号量,表示空闲缓冲区的数量
semaphone full=0;     //同步信号量,表示产品的数量,也即非空缓冲区的数量

计算机操作系统(OS)知识点总结笔记(待完善)_第26张图片

能否改变相邻P、V操作的顺序
计算机操作系统(OS)知识点总结笔记(待完善)_第27张图片
因此,实现互斥的P操作一定要在实现同步的P操作之后
由于V操作不会导致进程阻塞,因此两个V操作顺序可以交换。

在多消费者,多生产者模型时,如果缓冲区大小大于1,那就必须专门设置一个互斥信号量mutex,来保证互斥访问缓冲区(等于1的时候视情况可以不用设置)

9、吸烟者问题

计算机操作系统(OS)知识点总结笔记(待完善)_第28张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第29张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第30张图片

10、读者写者问题

有读者和写着两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程同时访问共享数据时可能导致数据不一致的错误。因此要求:

  • 允许多个读者同时对文件进行读操作
  • 只允许一个写者往文件中写信息
  • 任一写者在写操作完成之前不允许其他读者或写者工作(两个同时写可能会导致数据错误覆盖)
  • 写者执行写操作之前,应让已有的读者和写者全部退出

互斥:写与写、写与读
计算机操作系统(OS)知识点总结笔记(待完善)_第31张图片
改进:
计算机操作系统(OS)知识点总结笔记(待完善)_第32张图片
如果需要实现“一气呵成”,应该想到用互斥信号量

三、死锁

1、死锁的概念

在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程阻塞,都无法向前推进的现象,就是“死锁”。发生死锁后,无外力干涉的话,这些进程都无法向前推进。

与饥饿和死循环的区别

  • 饥饿是由于长期得不到想要的资源,某进程无法推进;
  • 死循环是某进程执行过程中一直跳不出某个循环的现象(有时候是程序bug,有时候是程序员故意设计)

死锁产生的必要条件:
(1)互斥条件:只有对必须互斥使用的资源争抢才会导致死锁(像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的)
(2)不剥夺条件:进程所获得的资源在未使用完之前,不能由其它进程强行夺走,只能主动释放
(3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其它进程占有,此时请求进程被阻塞,但又对自己持有的资源保持不放
(4)循环等待条件:存在一种进程资源的循环等待链,链中的每个进程已获得的资源被下一个进程所请求
注意:死锁时一定循环等待,但循环等待未必死锁

何时会发生死锁?

  • 各进程对不可剥夺的资源的竞争
  • 请求和释放资源的顺序不当
  • 信号量的使用不当

2、死锁的处理策略----预防死锁

1、破坏互斥条件
把互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。

缺点:并不是所有的资源都可以改造成共享资源。为了系统安全,有时候需要保护这种互斥性。

/2、破坏不剥夺条件
方案一:当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时,再重新申请。
方案二:当某个进程需要的资源被其他进程所占的时候,可以由操作系统协助,将想要的资源强行剥夺。这种方式一般需要考虑各进程的优先级

缺点

  • 实现起来比较复杂;
  • 释放已获得的资源可能造成前一阶段工作的失效
  • 反复申请和释放资源会增加系统开销,降低系统吞吐量
  • 方案一的话,放弃之前所有的资源,以后再重新申请,如果一直发生这个情况,就会导致进程饥饿

3、破坏请求和保持条件
采用静态分配方法,即进程在运行前一次申请完他所需要的全部资源,在它的资源为满足前,不让它投入运行。

缺点:有些资源可能只需要用很短的时间,也被进程的整个运行期间一直保持着,就会造成严重资源浪费,资源利用率极低,也可能导致某些进程饥饿

4、破坏循环等待条件
采用顺序资源分配法。规定每个进程必须按编号递增的顺序请求资源,同类资源(编号相同的资源)一次申请完。
(拥有大编号资源的进程不可能逆向回来申请小编号资源)

缺点

  • 进程使用资源的顺序可能不是编号递增的顺序,导致资源浪费;
  • 不方便增加新的设备,因为或许要重新分配编号
  • 必须按规定次序申请资源,用户编程麻烦

3、死锁的处理策略----避免死锁

1、安全序列
就是指系统如果按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。如果系统处于安全状态,就一定不会发生死锁

因此,可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以决定是否答应资源分配请求。这就是“银行家算法”的核心思想

2、银行家算法
计算机操作系统(OS)知识点总结笔记(待完善)_第33张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第34张图片

4、死锁的检测和解除

1、死锁的检测
计算机操作系统(OS)知识点总结笔记(待完善)_第35张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第36张图片
2、死锁的解除
计算机操作系统(OS)知识点总结笔记(待完善)_第37张图片

四、内存

1、内存的基础知识

内存是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理

1、内存地址:内存地址从0开始,每个地址对应一个存储单元

  • 如果计算机“按字节编址”,则每个存储单元大小为1字节,即1B,8个二进制位
  • 如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字,即16个二进制位

相对地址:相对于内存起始地址的偏移量,又称为逻辑地址
绝对地址:内存中实际存放的位置,又称为逻辑地址

2、常用基本单位
2 10 2^{10} 210=1K , 2 20 2^{20} 220=1M, 2 30 2^{30} 230=1G

3、将模块装入内存的三种方式
计算机操作系统(OS)知识点总结笔记(待完善)_第38张图片

  • 绝对装入:如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。(只适用于单道程序环境
  • 静态重定位:又称为可重定位装入。编译、链接后装入模块的地址都是从0开始的,指令中使用的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到合适的位置,装入时对地址进行“重定位”,变逻辑地址为物理地址
    计算机操作系统(OS)知识点总结笔记(待完善)_第39张图片
  • 动态重定位:又称为运行时动态装入。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。(需要重定位寄存器)

2、覆盖与交换

1、覆盖技术:用来解决程序大小超过物理内存总和的问题

覆盖技术的思想:

  • 将程序分为多个段(多个模块),常用的段常驻内存,不常用的段在需要时调入内存
  • 内存中分为一个“固定区”若干个“覆盖区”。需要常驻内存的段放在“固定区”,调入后就不再调出;不常用的段放在“覆盖区”,需要用到时调入内存,用不到时调出内存
  • 可以让那些不可能被同时访问到的程序段共享一个覆盖区

2、交换技术
(1) 内存空间紧张时,系统将内存中某些进程暂时换出到外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)。暂时被换出到外存等待的进程处于挂起状态。

(2)交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如,许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。

(3)可以优先换出阻塞进程;可换出优先级低的进程;

ps:PCB会常驻内存,不会换出外存

3、内存管理

先讲一下内部碎片和外部碎片的概念。

  • 内部碎片:分配给进程的内存区域中,如果有些部分没有用上,就是内部碎片
  • 外部碎片:是指内存中的某些空闲分区由于太小而难以利用

1、连续分配管理方式

连续分配:指为用户进程分配的必须是一个连续的内存空间,分为单一连续分配、固定分区分配和动态分区分配

(1)单一连续分配
内存被分为系统区和用户区。内存中只能有一道用户程序,用户程序独占整个用户区空间。

  • 优点:实现简单,无外部碎片
  • 缺点:只能用于单用户、单任务的OS中,有内部碎片,存储器利用率低

(2)固定分区分配
为了能在内存中装入多道程序,且他们之间不互相干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区只装入一道作业。
固定分区分配可分为 分区大小相等(缺乏灵活性) 和 分区大小不等(小进程可分配小分区,大进程分配大分区)。

OS需要建立一个分区说明表,来实现各个分区的分配与回收。每个表项包括分区大小、起始地址、状态(是否已分配)。

  • 优点:实现简单,无外部碎片
  • 缺点:①用户程序太大时,可能所有分区都不能满足要求,不得不采用覆盖技术来解决;②会产生内部碎片,内存利用率低

(3)动态分区分配(可变分区分配)
不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,使分区的大小正好适合进程的需要。回收时,相邻的空闲分区要合并。

采用什么样的数据结构记录内存的使用情况?-----空闲分区表和空闲分区链

  • 空闲分区表:分区号、分区大小、分区起始地址
  • 空闲分区链:每个分区起始和末尾部分分别设置前向指针和后向指针

关于怎么分配,需要采用一定的动态分区分配算法,在下面会有介绍。)

动态分区分配没有内部碎片,但是有外部碎片。可以通过紧凑技术来解决外部碎片。

2、动态分区分配算法

(1)首次适应算法
思想:每次从低地址开始查找,找到第一个满足大小的空闲分区
实现:空闲分区以地址递增的次序排列。每次分配内存时查找空闲分区链。

(2)最佳适应算法
思想:优先使用更小的空闲区
实现:把空闲分区按容量递增的次序排列
缺点:每次都选最小的分区进行分配,会留下越来越多的、难以利用的小的内存块,因此会产生很多外部碎片

(3)最坏适应算法
思想:解决最佳适应算法的问题----太多难以利用的小碎片。在每次分配时优先使用最大的连续空闲区,合影分配后剩余的空闲区就不会太小。
实现:把空闲分区按容量递减的次序排列,每次顺序查找空闲分区链
缺点:导致较大的连续空闲区被迅速用完。之后如果有大进程到达,就没有内存分区可用了。

(4)邻近适应算法
思想:针对首次适应算法,不要每次都从链头开始查找,而是从上次查找结束的位置开始检索。
实现:空闲分区按按地址递增的次序排列。每次分配从按上次查找结束的位置开始查找空闲分区表
缺点:由于低地址和高地址部分的空闲分区有相同的概率被使用,导致高地址部分的大分区更可能被使用,划分为小分区,最后无大分区可用(最坏适应算法的缺点)

四种算法,反而首次适应算法效果最好

3、非连续分配管理方式-----分页存储管理

(1)基本概念

  • 把内存分为一个个相等的小分区(比如每个分区4KB),每个分区就是一个“页框”,或称“页帧”。每个页框有一个编号,即“页框号”。页框号从0开始。
  • 把用户进程的地址空间也分为与页框大小相等的一个个区域,称为“页”或“页面”。每个页面也有一个编号,即“页号”,编号也从0开始。
    (注意:进程的最后一个页面可能没有一个页框那么大,因此页框不能太大)
  • OS以页框为单位,为各个进程分配内存空间

Q:将进程地址空间分页后,OS如何实现逻辑地址到物理地址的转换?
①算出逻辑地址对应的页号(=逻辑地址/页面长度,取整数部分)
②要知道该页号对应的页面在内存中的起始地址
③算出逻辑地址在页面内的偏移量=(逻辑地址%页面长度)
④物理地址=页面起始地址+页内偏移量
计算机操作系统(OS)知识点总结笔记(待完善)_第40张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第41张图片
①如果有K位表示“页内偏移量”,则说明该系统中一个页面的大小是 2 K 2^K 2K个内存单元
②如果有M位表示“页号”,则说明在该系统中,一个进程最多允许有 2 M 2^M 2M个页面

(2)页表
为了知道进程的每个页面在内存中存放的位置,操作系统为每个进程建立一张页表。-----页表记录进程页面和实际存放的内存块之间的对应关系

(3)两级页表

单级页表存在的问题:
①页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
②没有必要让整个页表常驻内存,因为进程在有段时间内可能只需要访问几个特定个的页面(虚拟存储技术
计算机操作系统(OS)知识点总结笔记(待完善)_第42张图片
计算机操作系统(OS)知识点总结笔记(待完善)_第43张图片
采用多级页表,则各级页表的大小不能超过一个页面
。如果两级页表不够,可以分更多级
缺点:多级页表访问内存的次数变多

4、非连续分配管理方式-----分段存储管理

①与“分页”最大的区别-----离散时所分配地址空间的基本单位不同
②进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有个段名,每段从0开始编址。
③内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻
④分段系统的逻辑地址结构由段号(段名)+段内地址(偏移量)组成
⑤像页表一样,也需要建立一张段表(逻辑段到实际的物理内存的映射)

每个段对应一个段表项,记录了该段在内存中的起始位置(基址)段的长度。各个段表项长度相同。
计算机操作系统(OS)知识点总结笔记(待完善)_第44张图片
分页、分段管理对比:

  • 页是信息的物理单位。分页的主要目的是实现离散分配,提高内存利用率,分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的
  • 段是信息的逻辑单位。分段是为了更好地满足用户需求。分段对用户不可见的
  • 页的大小固定,由系统决定;段的长度不固定,决定于用户编写的程序
  • 分页的地址空间是一维的,而分段的地址空间是二维的
  • 分段比分页更容易实现信息的共享和保护

4、虚拟内存

传统内存管理:连续分配(单一连续、固定分区、动态分区),非连续分配(分页、分段、段页)
缺点:
一次性:作业必须全部一次性装入内存后才能开始运行
驻留性:作业一旦被装入内存,就会一直驻留在内存中

1、虚拟内存的定义和特征

  • 在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存
  • 在程序执行时,当所访问的信息不在内存时,由OS负责将所需信息从外存调入内存,然后继续执行程序
  • 若内存空间不够,由OS负责将内存中暂时用不到的信息换出到外存

在OS管理下,用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存

虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的
虚拟内存的实际容量=min(内存和外存容量之和,CPU寻址范围)

虚拟内存的三个特征:
多次性:无需作业运行时一次性全部装入内存,允许被分成多次调入内存(所以采用离散分配内存,这样比较方便)
对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中将其换入、换出
虚拟性:逻辑上扩充了内存容量,使用户看到的容量大于实际容量

你可能感兴趣的:(计算机)