操作系统学习总结(上)

目录

第一章操作系统引论

操作系统的目标

操作系统的作用

作为用户与计算机硬件系统之间的接口

 作为计算机系统资源的管理者

OS对计算机资源的抽象

 思维导图

操作系统的五个主要发展历程(不全)

未配置操作系统的计算机系统

 脱机I/O技术(用于单道批处理系统)

单道批操作系统

多道批操作系统

分时系统 

实时系统

思维导图

操作系统的四大基本特性

1并发

2共享

3虚拟

4异步

思维导图

操作系统内核(最核心,接近硬件,是计算机配置的底层软件)

大内核

微内核

处理机的双重工作模式

用户态

核心态 

中断的简要介绍 

系统调用 

第一章思维导图

第二章进程的描述与控制

进程的描述

进程的概念

进程与程序的区别

进程的组成

1PCB  操作系统通过PCB来控制管理进程,因此PCB中应该含有系统控制管理进程所需要的全部信息 

2数据段

3程序段

进程的定义

进程的特征

进程(PCB)的组织方式

线性方式

链接方式

索引方式

进程的状态及状态转换 

进程的五种种基本状态

总结 

引入挂起状态(挂起就是中级调度)        

 进程控制

进程控制的定义

 进程的创建

进程的终止

进程的唤醒和阻塞 

进程的切换

进程控制的大概图解

进程通信

什么是进程通信

 共享存储器系统

管道通信系统

消息传递系统

客户机-服务器系统

线程的引入

为什么要引入线程

什么是线程

引入线程的变化和线程和进程的比较

线程的状态和线程控制块

线程的实现方式

两种线程的组合方式

第三章处理机调度与死锁

为什么处理机需要调度

调度的三个层次 

高级调度(作业调度)

中级调度 (内存调度)

低级调度(进程调度)

 三种调入的对比

总结

作业与作用调度 

进程调度 

什么时候发生进程调度

什么时候不能发生进程调度与切换

进程调度方式

进程调度和进程切换的区别 

 总结

处理机调度算法的衡量

处理级调度算法的目标

注意点

总结

调度算法

 先来先服务(FCFS)

 短作业优先调度算法(SJF)

高响应比算法(HRRN)

总结 

轮转调度算法(RR算法)

优先级调度算法 

多级反馈队列调度算法

具有交互性的三种算法比较

死锁 

理解

死锁的定义

产生死锁的四个必要条件

什么时候会发生死锁呢

死锁的解决 

 死锁的预防

避免死锁(银行家算法)

 死锁的检测与解除 

总结

第四章进程的同步

进程的同步与互斥

为什么要引入同步机制

进程同步概念

两种形式的制约关系

临界区

实现临界区的四个原则

总结

软件同步机制

实现方法的思想

单标准法

 双标志法​​​​​​   (为了解决空闲让进的问题)

双标志后检查法(为了解决忙则等待)

Peterson算法

总结

硬件同步机制 

中断隐藏法

TestAndSet指令

Swap指令

总结

信号量机制 

为什么引入信号量机制

什么是信号量机制

几种信号量形式 

总结

信号量机制的应用 

实现进程互斥

实现同步操作

实现进程的进制实现前驱的关系

 总结

进程互斥和同步的几种经典关系

生产者-消费者问题

多生产者消费者问题

读写者问题

管程机制 

第五章 存储器管理 

存储器的多层结构

基础的三层 

存储单元

指令运行的基本原理

(1)指令的工作原理

逻辑地址和物理地址

编译 链接和装入 

 编译

 三种链接方式

 三种装入

 总结

操作系统对存储器有哪些管理 

内存空间的分配与回收

内存空间的扩充(实现虚拟性)​

地址转换

内存保护

 总结

对换和覆盖技术 

覆盖技术

对换技术 

总结

连续分配存储管理方式

​​​单一连续分配

固定分区分配

动态分区分配(可变分区分配)

 动态分区算法

首次适应算法

 最佳适应算法

最坏(大)适应算法

临近适应算法(循环首次适应)

四种算法归纳比较

分区的分配和回收操作

内部碎片与外部碎片

紧凑技术 

分页存储管理方式

非连续分配管理方式

为什么要分页存储方式

 如何进行地址转换

 分页存储的逻辑结构

总结

分页存储管理的地址变化机构 

页表寄存器

地址变换过程

总结

具有快表的地址变化机构

二级页表

为什么引入二级页表?

二级页表的原理和地址结构

总结

分段存储管理方式 

分段的目的

什么是分段

分段的逻辑地址结构

段表

地址变换

分段分页管理的对比

分段实现信息共享共享

总结

段页式存储管理方式 

分页、分段的优缺点分析

分段+分页=段页式管理

段页式管理的逻辑地址结构

段页式存储的段表、页表

段页式管理的地址转换过程 三次访存



第一章操作系统引论

操作系统的目标

1方便性,os的创建是为了方便用户去使用计算机硬件,没有os的计算机是非常难用的

2有效性,两层含义,第一层是为了提高系统的资源利用率,第二层是为了提高系统吞吐量

3可扩充性,os需要不停的进行更新,去满足更高的要求

4开放性,就是os的设计要满足国际的标准,有利于互联

操作系统的作用

作为用户与计算机硬件系统之间的接口

用户有三种方式通过os使用计算机

1命令方式

命令方式是允许用户直接使用

1联机命令接口(用户说一句,计算机做一句)

2脱机命令接口(用户说一堆,计算机做一堆)

2系统调用

程序接口是用通过程序间接使用

程序接口=系统调用=广义指令

3图像/窗口

例子比如我们将桌面文件拖入回收站就删除了

 作为计算机系统资源的管理者

拿一个我们使用qq来举例

1文件管理负责文件的存取,共享 和保护(我们使用QQ必须先去找到QQ安装包的位置)

2存储器管理负责内存的分配与回收(我们要去打开QQ.exe,将改程序的相关数据放入内存,一个进程的运行,必须先放入内存,然后才能让CPU处理)

3处理机管理负责处理机的分配和控制(QQ程序正常运行,此时QQ进程在CPU运行)

4I/O管理负责I/O的设备的管理和分配(我们用QQ打视频电话,CPU将摄像头分配给QQ)

OS对计算机资源的抽象

对硬件的扩展,硬件的工具,OS是工匠

 思维导图

操作系统的五个主要发展历程(不全)

未配置操作系统的计算机系统

人工操作方式

早期的操作方式将实现已穿孔的纸袋,装入纸袋输入机,再将纸袋上的程序和数据输入计算机,然后启动计算机运行

特点

1用户独占全机,全机的资源都由上机用户独占

2CPU等待人工操作(CPU需要等待用户去装纸袋,下纸袋,严重浪费CPU资源)这是人机矛盾,为了解决CPU处理速度远高于I/O设备,提出了脱机I/O技术

 脱机I/O技术(用于单道批处理系统)

将输入设备的数据和程序通过外围机输入到磁带,把很多数据和程序放到磁带上,然后再将数据和程序进入处理机处理,处理好得到的数据先放入磁带,然后再通过外围机,放到输出设备

特点

1减少CPU的空闲时间(因为装带和卸带和从低俗I/O设备送到高速磁带上的时间都在脱机情况下完成,不占用CPU的时间)

2提高了I/O速度

单道批操作系统

为什么引入单道批处理系统,为了代替人工操作,实现对作业的连续处理,将脱机方式加上一个监督程序,就形成最简单的单道批处理系统,

为什么叫单道批处理系统。因为内存内只有一道程序运行,只有一道程序结束才能调入下一道程序,CPU有大量时间是在空闲的时候(比如一个程序在调用I/O资源的时候,也会占用着CPU,所以单道批的系统资源不能充分利用。 

多道批操作系统

为了进一步得去提高资源的利用率和系统吞吐量

在该系统中,用户所提交的作业会先被存放到外存中,并排成一个队列,然后作业调度程序会按照一定的算法从后备队列中选择若干个作业调入内存,使他们共享CPU和系统的资源,使之并发工作(宏观上并行运行,微观上串行运行,交替使用CPU)

特点

资源利用率高,因为多道程序在系统中并发运行共享系统资源

系统吞吐量大  因为CPU和其他系统资源一直处于忙碌状态,只有作业完成或者运行不下去才进行切换,系统开销小

平均周转时间长

无交互能力,因为都是由系统自己完成,用户不能进行控制

多道批会遇到的问题

1争用处理机问题

2内存分配和保护问题

3I/O设备分配问题

4文件的组织和管理

5作业管理问题

6用户和系统接口的问题

为了解决这些问题,所以引入了操作系统,所以OS是一组有效组织和管理计算机硬件和软件资源,合理对各类作业进行调度,以方便用户使用的程序集合

分时系统 

分时系统的引用是为了解决多道批处理系统的无人机交互功能的问题

分时系统的概念就是计算机以时间片为单位为各个用户/作业服务,但是他不能优先处理一些紧急任务

功能

1人机交互,能够去人为去控制计算机,去修改一些数据和错误

2共享主机,多个终端共享主机,但是各用户直接不能感受其他用户的存在

实现的条件

1及时接收,要做到能够及时接收多个用户键入的命令和数据

2及时处理,1采用作业直接进入内存的方式 2采用每个采用轮转运行的方法,为了防止一个作业长期占用主机,所以引入时间片的概念,系统规定每个程序每次只能运行一个时间片

特点

多路性,指多台终端连接到一台主机,并按分时原则为每个用户服务

独立性  指系统提供一种用户环境,每个用户在各自的终端上进行操作,彼此不相互干扰

及时性 指用户的请求能在很短的时间内去获得响应,这段时间是由用户的接收的等待时间决定

交互性 指用户可以通过终端与系统进行宽泛的人机对话,如去请求系统的服务,如进行文件的编辑和数据处理,访问系统中的文件系统,和请求打印运行结果

实时系统

实时系统的引入是为了解决分时系统中不能优先处理一些紧急任务

实时系统的最主要的特征是将时间作为关键参数,为其接收的某些信号作出及时和实时的处理,就是指系统能及时响应外部事件的请求,在规定时间内完成对该事件的处理,并控制所以实时任务协调一致地运行

两种实时任务类型

1硬实时任务,必须要在严格的时间内完成任务,比如工业控制和武器控制系统

2软实时任务,能偶尔接收违反时间,如12306订票系统

特点

1多路性,与分时系统不同,系统周期性地对多路现场进行采集,并对多个对象或多个执行机构进行控制

2独立性,在实时系统中对信息的采集和对象的控制也是不会相互影响

3及时性,实时控制系统的实时性则是以控制对象要求的截至时间来确定

4交互性  要查书

5可靠性

思维导图

操作系统的四大基本特性

1并发

OS的并发性指计算机系统中同时存在多个运行的程序

并行和并发的区别,并行是指两个或多个事件在同一个时刻发生,而并发是指两个或多个事件在同一时间间隔内发生。

计算机的多个程序在宏观上是同时进行,而在微观上是交替进行

在并发的前提下引入了进程的概念

  • 一个单核(CPU)同一时刻只能执行一个程序,因此操作系统会协调多个程序使他们交替进行(这些程序在宏观上是同时发生的,在微观上是交替进行的)
  • 操作系统是伴随着“多道程序技术出现的”,因此操作系统和并发是一同诞生的

2共享

指系统中的资源可供内存中的多个并发执行的进程共同使用

两种共享方式

1互斥共享方式 系统中某些资源在一段时间内只允许一个进程使用(临界资源)    QQ与微信同一时间,摄像头只能被一个进程使用

2同时共享方式  系统中一类资源,允许多个进程能"同时"对其访问,这里的同时在宏观上是同时进行,而微观上是交替访问,比如使用qq和微信同时发送文件B

没有并发和共享,则没有虚拟和异步,并发和共享是互为对方存在的条件

3虚拟

在OS上,通过某种技术将一个物理实体变成诺干个逻辑上对应的功能,比如一个CPU能够同时处理几个进程,4GB的运行内存能运行超过4GB的应用

时分复用技术(提高资源利用率的根本原因是,他会在为一个用户服务的空闲时间去转去服务其他用户)

1虚拟处理机技术2虚拟设备技术

空分复用技术

4异步

只有拥有并发性,才能导致异步性

由于资源等因素的限制,进程通常不能一气呵成,而是会停停走走

比如A进程正在占用CPU计算,B进程这时也想占用CPU计算,B进程只有等,等A进程算完了,A进程去访问磁盘资源了,这时B进程再占用CPU进行计算,B进程还没计算完,A进程从磁盘取出资源了,A进程发现B这时在占用CPU,这时A进程就需要等待,等B算完后再继续到CPU中进行计算。由于每个进程占用资源的时间不固定,所以进程的执行以不可预知的速度前进
 

思维导图

操作系统内核(最核心,接近硬件,是计算机配置的底层软件)

大内核

大内核代码宏大,结构混乱,难以维护,但性能高

包含的功能

1时钟管理

实现记时功能,比如时间片轮转调度,实时系统的截至时间控制,批处理的最长运行时间的控制都会要依赖时钟管理

2中断管理

负责实现中断机制,如各种类型的系统调用,键盘的命令输入,进程调度,设备驱动等

3原语操作

所谓原子操作就是一个操作中所有的动作要么全做,要么全不做,在实现进程同步时用到了原子操作

4进程管理

5存储器管理

6设备管理等

微内核

功能少,但结构清晰,但需要频繁地在用户态和核心切换,性能低

1时钟管理

2原语操作

3中断管理

处理机的双重工作模式

用户态

用户态只能执行非特权指令

核心态 

核心态特权和非特权都能执行

特权指令比如启动外部设备,设置系统时钟时间,关中断的等,切换到用户态的指令也是特权指令

中断的简要介绍 

发生中断意味着需要操作系统接入,开展管理工作,实现并发执行

用户态到核心态是通过中断实现

1中断发生后,CPU进入核心态

2当中断发生后,当前进程暂停运行,并由操作系统内核对中断进行处理

3不同的中断信号,进行不同的处理

核心态到用户态执行一次特权指令

系统调用 

系统调用是操作系统留给应用程序的接口,应用程序可以通过系统调用来请求操作系统的服务

 系统调用在核心态进行

 1陷入指令是在用户态执行,执行陷入指令后立即引发一个内中断,使CPU进入核心态

2发出系统调用的请求是在用户态,而对系统调用的相应处理是在核心态进行

3陷入指令是唯一一个只能在用户态执行,而不能在核心态执行的指令

系统调用的类型

1设备管理

2文件管理

3进程控制

4进程通信

5内存管理

第一章思维导图

第二章进程的描述与控制

进程的描述

进程的概念

程序就是一个指令序列,程序的代码放在程序段中,而程序的需要的数据和输出的数据让在数据段中,在单道处理机的时候,只有一个程序,所以不需要去找程序的程序段的和数据段。

但是在引入了多道程序技术后,在内存中放入了多个程序,不同的程序的程序段和数据段,所以OS需要怎么样去找到每个程序对应的数据段和程序段,在此条件下,引入了进程的概念

为了使程序可以并发的执行,并且可以对并发执行的程序加以描述和控制

进程与程序的区别

1进程是动态的,程序是静态的

2进程具有独立性,可以并发执行,但程序不行

3二者无一一对应的关系

4进程能异步执行且相互制约,但程序不行)进程异步运行,会相互制约;程序不具备此特征。
但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
5组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码。
6程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。
7进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
8一个程序可以启动多个进程来共同完成。
联系:进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。

 

进程的组成

1PCB  操作系统通过PCB来控制管理进程,因此PCB中应该含有系统控制管理进程所需要的全部信息 

作用 PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。

1作为独立运行基本单位的标志

2实现间断性运行方式

3提供进程管理所需的信息

4提高进程调度的信息

5实现与其他进程的同步和通信

PCB是进程存在的唯一标志

每一个进程配置一个PCB

 例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
        进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;
        当进程由于某种原因而暂停执行时,又须将器断点的处理机环境保存在PCB中。
        可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。
 

内容

1进程描述信息

2进程控制和管理信息

3资源分配清单

4处理机相关信息

2数据段

该程序所需数据和输出数据的存放地

3程序段

该程序代码的存储地

进程的定义

进程是程序(进程实体)的执行过程,是系统进行资源分配和调度的一个独立单位 (定义强调了进程的动态性)

程序段,数据段,PCB三者组成了进程实体,一般将进程实体也称为进程,如创建进程就是创建进程实体中的PCB,而撤销进程则是撤销进程实体的PCB

严格来说进程与进程实体是不一样的,进程实体是静态的,而进程是动态的

进程的特征

动态性  动态性是最基本的特征  进程是程序的一次执行过程,进程由创建而执行,由撤销而消亡,进程是具有一定的生命周期,而程序只是一组有序的指令集合

并发性 内存中有多个进程实体,可以并发执行

独立性 进程是进行独立运行,独立获得资源,独立接收调度的单位,所以没有建立PCB的程序都不能作为一个独立的单位进行并发执行

异步性 各进程都是独立的,以不可预知的速度进行,所以操作系统要用同步机制去完成进程的同步

结构性 一个进程对应一个PCB,而一个进程有程序段,数据段,PCB组成

进程(PCB)的组织方式

线性方式

将系统中所有的PCB都组织在一张线性表中,实现简单,但是每次查找都要扫描整张表,因此适合进程数码不多的系统

链接方式

通过PCB中的链接字,将具有相同状态的进程的PCB分别链接成一个队列,会形成就绪队列若干个阻塞队列和空闲队列,单CPU执行指针队列只有一个进程,因为一个CPU在一个时刻只能运行一个进程

索引方式

系统根据所有进程状态不同,建立几张索引表,就如就绪索引表,阻塞索引表,并把各索引表在内存的起止地址记录在内存的一些专用单元中,每个索引表的表项中,记录着相应专题某个PCB的地址

进程的状态及状态转换 

进程的五种种基本状态

就绪状态 指进程已经处于准备好执行的状态,即除拥有CPU之外的所有需要的资源(万事俱备,只差CPU)

阻塞状态 正在执行的进程由于发生某事件如I/O请求,申请缓冲区而无法继续执行,此时发生进程调度,OS将CPU分配给其他进程,此进程处于阻塞状态,只有运行态才能变成阻塞态

执行状态 指形成获得CPU后其程序正在执行这一状态,在单个处理机状态只有一个执行进程,而多处理机则有多各执行状态

三种状态的转换

 创建态  进程正在被创建,初始化PCB,然后OS为其分配资源,最后将该进程的资源转换为就绪状态并将其插入就绪队列

终止状态 进程正在从系统中撤销,OS回收其资源,撤销PCB

 


阻塞到就绪是一种被动行为

运行到阻塞是一种主动行为

不能由阻塞态直接到运行态,必须经过就绪状态

也不能由就绪态到阻塞态,因为阻塞是进程主动要求的行为,必须要处于运行态

总结 

引入挂起状态(挂起就是中级调度)        

为了满足系统和用户对进程观察和分析进程的需要,引入了挂起,当进程被挂起,这意味着此时进程处于静止态,如进程如果正在被执行,就会暂停进程执行,如果进程处于就绪状态,其暂时不接受调度,挂起是将进程由内存放到外存

为什么要引入挂起

1终段用户的需要,终端用户发现自己运行的程序有可疑的问题,希望暂停程序,以别修改和研究

2父进程的需要 有时父进程希望挂其子程序,以便考察和修改子进程或协调各子进程的活动

3负荷调节的需要 当实时系统中的工作负荷较大,就将一些不重要的进程挂起,以保自身能正常运行

4OS的需要,OS有时候希望挂起某些进程,以便检查进程在运行过程中资源的使用情况或进行记账

5对换需要,存储器那章会讲到      

引入挂起操作后进程五个基本状态的转换

挂起原语Suspend和激活Active

假如一个静止的阻塞的等待的事件完成则会变成静止就绪

执行中的进程被挂起后变成了静止就绪 

 进程控制

进程控制的定义

进程控制是进程管理中最基本的功能,其负责创建新进程,终止已完成的进程,和实现进程状态转换的功能,一般进程控制是由OS内核中的原语来实现

用原语实现进程控制

原语的操作是必须一气合成,不能中断,这种操作被称为原子操作,而原子操作的是由开中断和关中断实现的,

开中断和关中断的权利非常大,所以应该在内核中运行

 进程的创建

进程的创建原语

1申请空白的PCB (为新进程申请一个唯一的数字标识符)补充 数字标识符就是内部标识符,是方便系统对进程的使用,而外部标识符也是进程标识符的一种,是为了方便用户对进程的使用,为了描述进程的家族关系,还应该设置父进程标识符和子进程标识符,也可以设置用户标识符,以指出该进程拥有的用户

2为新进程分配其运行所需的资源 这里的资源包括了物理和逻辑资源,如内存,文件,I/O设备和CPU的时间等

3初始化PCB 初始化标准信息,初始化处理机状态信息,初始化处理机控制信息

4如果进程就绪队列能够接纳新程序,就将新进程插入就绪队列

引起进程创建的事件

用户登录 在分时系统中,若登录成功,则系统会为该用户创建一个进程,并把插入就绪队列

作业调度 在多道批处理系统中,当作业调度按应当的算法调度到某些作业时,将程序装入内存,然后为其创建进程,并将之插入就绪队列

提供服务  当运行的用户程序提出某种请求后,系统将专门创建一个进程来为用户提供服务,如用户进程要打印输出结果,则创建一个打印进程为之服务

应用请求 由用户进程自己主动创建子进程,以使子进程和父进程并发执行的方式完成特点任务。比如某用户进程需要不断地先从键盘终端读入数据,再对输入数据进行相应的处理,最后将处理结果比表格的方式显示在屏幕,为了并发快速完成用户进程,可以创建键盘输入进程,数据处理进程和表格输出进程

进程的终止

进程终止原语

1根据被终止进程的标识符,从PCB集合中索引出该进程的PCB

2若该进程正在处于执行状态,则立即终止该进程的执行,并置调度标志为真,以指示该进程被终止后应该重新调度

3终止该进程所有的子孙进程,防止使他们成为不可控的进程

4将终止的进程的全部资源归还其父进程或者操作系统

5删除PCB

引发进程终止的事件

1正常结束

表示该进程正常运行结束,准备退出运行

2异常结束

越界错 程序所访问的存储区已经超过该进程所占的存储区域的范围

保护错 进程试图区访问应该该进程不允许访问的资源或文件,或者不正确的方式访问,比如进程试图去写一个只读文件

指令错 程序试图去执行一条不存在的指令(出现这种现象的原因可能程序抽哟五的转移到数据区,把数据当作指令)

特权指令错 进程试图去执行一条只允许OS内核执行的指令

运行超时 运行时间超过了设定的最大值

等待超时 进程等待某事件的事件超过了指定的最大值

算数运算错 进程试图去运算一个被禁止的运算,比如除零

I/O错误,指在I/O设备过程中发生了错误

3外界干预

操作员或者OS干预 比如计算机如果发生了死锁,那么操作员或者OS会采取终止的方法来解除死锁

父进程请求 当子进程完成了父进程要求的工作,父进程可以要求终止此子进程

父进程终止 当父进程终止后,所有子进程也应该被终止

进程的唤醒和阻塞 

进程的阻塞和唤醒是要成对出现的,必须要在一起使用

阻塞原语是被阻塞进程自我调用的结果,是一种主动行为

唤醒原语是由一个被唤醒进程合作或被其他相关的进程调用实现的

引起进程阻塞和唤醒的事件

1向系统请求共享资源失败 如一个进程请求打印机,但是系统已经将打印机分配给其他进程,这是请求进程被阻塞,仅在其他进程释放了打印机之后,进程才会被唤醒

2等待某种操作的完成 如一个进程启动了I/O设备,如果只有在I/O设备操作任务后进程才能被继续执行,则该进程在启动了I/O设备后,进程自动进入阻塞状态去等待,I/O操作完成后由中断处理程序将进程唤醒

3新数据未到达 如两个进程AB,A用于输入数据,B用于对输入数据加工,假如A没有将数据输入完毕,则B会因为没有所需的数据而阻塞

4等待新任务的到达 如网络环境中的发送进程,其任务是发送数据包,如果已有的数据包已经发送完成,且没有新的数据包需要发送,则发送进程会将自己堵塞起来,只有新的数据包到达是,才会将发送进程唤醒

阻塞原语过程

1正在运行的进程,如果发生了会引起阻塞的事件,找到要被阻塞的进程的PCB然后会用阻塞原语Block将自己阻塞,阻塞进程是一种主动行为

2进入Block后,首先保存进程运行的现场环境存入PCB,然后立即暂停该进程的运行,然后将PCB中的现行状态由运行转为阻塞

3将PCB插入相应的阻塞队列中

唤醒原语过程 

1其他进程调用了Wakeup原语 在事件阻塞等待队列中找到该进程的PCB

2将PCB从阻塞队列移走,将状态改为就绪态

3将PCB插入就绪队列,等待进程被调度

进程的切换

运行态到阻塞态/就绪态 带由一个进程会由就绪态到运行态

将运行环境的参数存入PCB

PCB移入相应的队列

选择另一个进程PCB,并执行该进程

根据要运行的进程的PCB,恢复现场

进程的阻塞是只管把运行态的进程变成阻塞态,不会去安排另一个进程去占用PCB,而进程的切换不仅要将进程变成阻塞态或者就绪态,而还要安排其他的进程来使用CPU,因为引起进程阻塞和进程到就绪态的条件不一样

调度是指决定资源分配给哪个进程的行为,是一种决策行为
切换是指实际分配的行为,是执行行为
一般来说现有资源调度,后有进程切换 

   进程控制的共同点

进程控制的大概图解

总结

进程通信

为什么要引入进程通信

进程是分配系统资源的基本单位,因此各进程用于内存的地址空间相互独立(如,我们要把相册里的图片通过QQ分享给别人,则QQ进程要去访问相册进程,但是并不能直接访问,所以要使用进程通信)

什么是进程通信

进程通信就是指进程之间的信息交换,有高级和低级之分

 共享存储器系统

定义 相互通信的进程共享某些数据结构或存储器,以实现各进程间的信息交换

1基于共享数据结构的通信方式

要求各进程共享某些数据结构,以实现各进程间的信息交换,如生产者消费者问题中的有界缓冲区,OS负责提供共享存储器,要有程序员去对共享数据结构进行设置和对进程同步进行处理,这是一种低级进程通信,适合传送少量数据,比如共享数据结构是长度为10的数组

2基于共享存储器的通信方式

为了传送大量数据,在内存中划出一块共享存储区,各进程可通过对共享存储区的读/写来交换信息,实现通信,数据的形式和位置都由进程负责,而非OS,这是高级通信方式

 共享一块大家都可以访问的空间,一次只能有一个进程进行读或写操作,是互斥得对共享空间的使用

管道通信系统

定义 管道(Pipe)是用于连接一个读进程和一个写进程以实现他们通信的一个共享文件。

注意点

一根管道只能实现半双工通信(某一时间段只能实现单向传输),想要实现双向同时传输,则需要两个管道

1互斥 进程要互斥得去访问通道

2同步 写进程把一定数量的数据把管道写满,则写进程阻塞,然后读进程去读通道的数据,将通道的数据读完(管道为空),然后读进程阻塞

3确定对方是否存在,只有确定对方存在才能进行通信

4如果没写满,就不能读,不为空就不能写。

5数据一旦被读出,就会被从管道中丢弃,说明读进程只能有一个,否则会出现读错数据的可能

消息传递系统

定义 在该机制中,进程不需要借助任何数据结构或者存储器,而是以格式化的消息为单位,将通信的数据封装在消息李,并利用OS提供的一组通信命令(原语),在进程间进行信息传递,完成进程间的数据交换。

直接通信方式

定义 发送进程利用OS所提供的发送原语,直接把消息发送给目标进程

直接通信原语

对称寻址方式  该方式要求发送进程和接收进程都必须以显式方式提供对方的标识符

通常有两条通信命令

1send(receiver,message)     2receive(sender,message)

send(P2,m1)表示将信息m1发送给接收进程P2  receive(P1,m1) 表示接收P1发来的消息m1

不足 一旦改变了进程的名称,就要检查其他所有进程的定义

非对称寻址方式

有些进程需要与多个进程通信,无法事先确定对方进程的名称。在该方式下,在接收进程的原语中不需要命名发送进程,而只需要填写表示源进,既完成通信后的返回值,发送方还需要命名接收进程

send(P,message) 发送一个消息给进程P

receive(id,message),接收任何进程的消息,id变量可设置通信发送方进程ID或者名称

进程的同步方式

当进程之间进行通信时,同样需要进程同步机制,以时各进程能协调通信

三种可能

1发送进程阻塞,接收进程阻塞  这种用于进程之间紧密同步,之间无缓冲区

2发送进程不阻塞,接收进程阻塞 这种用的最多,发送方不阻塞,所以可以尽快把一个或者多个消息发送给多个目标,而接收进程处于阻塞状态,直到有消息才会被唤醒

3发送进程和接收进程都不阻塞 这种只会在它们无法运行时,才会把之间阻塞起来

通信链路

1单向通信链路,只允许发送进程向接收进程发送消息,或者反之

2双向通信链路 ,允许A向B发送信息的同时,B也能向A发送信息

间接通信方式

p59

发送进程和接收进程都通过共享中间实体(信箱)的方式进行消息的发送和接收

客户机-服务器系统

总结

线程的引入

为什么要引入线程

有些进程可能需要“同时”做很多事,但是传统的进程只能串行得与执行一系列程序(比如你在使用QQ时,你登陆了账号,相当于创建了一个进程,你可以一边打字,一边视频聊天,这些是“同时”进行的,但是传统的进程是不能实现这样的功能,所以引入线程,加快并发的速度)

如果说在OS中引入进程的目的是为了使多个程序能够并发执行,比提高资源利用率和系统吞吐量,那么在OS中引入线程,是为了减少程序在并发执行时所付出的时间和空间开销,让OS具有更好的并发性(让进程并发得完成多种功能)

什么是线程

可以把线程理解为轻量级的进程(这里体现了计算机的终级原理--套娃)

线程是一个基本的CPU执行单位也是程序执行流的最小单位

引入了线程之后,不仅程序能够并发执行了,进程也能并发执行了,从而提高了系统并发度

引入了线程之后,进程是除CPU之外系统资源的分配单元,如打印机,内存空间都是分配给进程的

引入线程的变化和线程和进程的比较

资源分配和调度

在未引入线程时,进程是调度和资源分配的基本单位,引入线程以后,进程是资源(CPU除外)的分配单位,线程是调度的基本单位。

并发性

在传统OS中,只有进程间能并发运行,引入线程后,允许一个进程间的线程之间也能并发执行。

拥有资源

进程可以拥有资源,并可作为系统中拥有资源的一个基本单位,但是线程可以说基本不拥有资源,其拥有的一点资源也是为了确保自身能够独立允许,但是线程可以去共享他们所属的进程所拥有的资源,因为属于同一进程的所有线程都具有相同的地址空间,意味着线程可以随意访问地址空间的每一个虚地址,而且可以访问所属进程的全部资源

独立性

线程的独立性比进程低得多,因为为了防止进程之间的相互干扰,所以每个进程拥有独立的地址空间和其他资源,它们除了共享全局变量外,不允许自身以外的进程访问主机地址空间的地址,但一个进程的线程可以共享地址空间和资源,线程的创建就是为了提高并发性和满足进程间的合作

系统开销

在撤销(创建)进程时,系统要为它撤销(分配)的PCB和其他资源,系统开销比线程大,进程切换时,涉及上下文的切换,同一个进程的线程的切换代价是比较小的,因为拥有的资源较少,但是不同进程的线程切换开销大,因为会导致进程的切换,由于同一个线程的线程同步和通信比进程简单,因为共享一个地址空间和资源。在一些os中线程的切换和同步及通信无需OS内核的干涉

线程的属性

进程已经是一个不可在执行的实体,因为引入线程后,把线程作为独立运行的基本单位,一个进程在“执行”其实是该进程的某线程在执行 ,此外对进程所施加的与进程状态有关的操作,也会对线程起作用,比如把某个进程挂起,则该进程的所以线程都会被挂起。

线程的状态和线程控制块

各进程之间也存在着共享资源和相互合作的制约关系,所以也会有间断性

三个状态(这三个状态和进程状态的切换差不多,但线程的切换不需要内核的操作)

1执行状态

2就绪状态

3阻塞状态

线程控制块

系统为每个线程配置一个TCB,所有控制和管理线程的信息都放入TCB

含有1线程标识符

2一组寄存器

3线程执行状态

4优先级

5线程专有存储器,用于在线程切换时存放现场保护信息和该线程相关的统计信息

6信号屏蔽器

7堆栈指针

线程的实现方式

用户级线程

从用户视角可以看见的线程

ULT是在用户空间实现,其对线程的一系列操作都是无需内核的支持,因为内核不知道其用户线程的存在

对于设置ULT的系统,其调度还以进程为单位的(因为在内核看来,这些进程都是单线程的,),比如在采用时间轮转调度算法时,各进程轮流使用执行一个时间片,貌似对每个进程是公平的,但是进程A若只有一个线程,而进程B有100个线程,那实际上A的运行速度是B的100倍,但如果设置KST的系统则调度会以线程为单位,B获得的时间是A的199倍,且进程B可使100个线程并发执行

优点

1 线程切换不需要转换到内核空间

2调度算法可以是进程专用的,在不干扰OS系统调度的情况下,不同的进程可以选择不同的调度算法,对之间的线程进行管理,而与os的低级算法无关

3用户线程的实现与OS平台无关

缺点

1系统调用的阻塞问题,当一个线程阻塞了,该线程属于进程内的所有线程都会被阻塞

2在单纯的ULT实现方式中,多线程应用不能利用多处理机进行多重处理这一优点,因为内核每次分给一个进程只有一个CPU,所有只有一个线程能执行

 

 

内核级线程(内核级线程才是系统分配CPU的单位)

从操作系统内核系统视角能看到的线程

在OS中,用户进程和系统进程,都是在OS内核的支持下运行的,是与内核紧密联系的,同样内核级线程(KST)也是在内核的支持下运行的,它们的创建,阻塞,撤销,切换都是在内核空间实现

 

 

 优点

1在多处理机的系统中,内核能够同时调度同一进程的多个线程并行运行

2如果一个进程中的一个线程被阻塞,则内核可以调度该进程中其他线程来来占用处理机并运行,也可以运行其他进程中的线程

3内核支持线程具有很小的数据结构和堆栈,所有切换速度快,开销小

4内核本身也可以采用多线程技术,提高系统的执行速度

缺点

对于用户的线程来说,其模式切换的开销较大,在同一个进程中,从一个线程切换到另一个线程需要从用户态到内核态执行

两种线程的组合方式

多对多的线程方式

总结

第三章处理机调度与死锁

为什么处理机需要调度

调度的本质实际是对资源的分配,处理机调度就是对CPU资源的分配,而当资源有限时,有大量的任务,这么多任务无法去同时处理,就需要去安排处理这些任务的顺序,这就是调度需要研究的问题

调度的三个层次 

高级调度(作业调度)

他的操作对象是作业(作业包含了程序),按照某种算法,从后备队列中选择适合的作业将其调入内存,并为其创建进程,分配必要的资源,并将其放入就绪队列,高级调度主要用于多道批处理系统,而分时系统和实时系统不设置高级调度 是将作业从外存调入内存 

只会将作业调入内存一次,调出一次,发生频率较低

中级调度 (内存调度)

引入中级调度的目的是为了提高内存利用率和系统吞吐量,将那些暂时不能运行的进程调值外存等待,此时的状态就叫做挂起状态,当具备运行条件且内存稍有空闲时,利用中级调度从外存调入内存。中级调度就相当于存储器管理中的对换功能

定义 按照某种规则,从挂起队列中选择中选择合适的进程,将其进程调入内存,但是进程的PCB不会被调入外存

中级调度的频率比高级调度高

低级调度(进程调度)

按照某种规则,从就绪队列中选择一个进程为其分配处理机,是最基本的调度,在多道批,分时,实时系统中都存在 ,是将进程从内存放入处理机,发生的频率也是最高的

 三种调入的对比

总结

作业与作用调度 

作业是一个比程序更为广泛的概念,它不仅包含了程序和数据,而且配有一个作业说明书,系统根据该说明书对程序的运行进行控制,在多道批处理系统中,会将作业作为基本单位从外存调入内存

作业控制块(JCB)

他说作业在系统中存在的标志,保存了管理和调度作业的全部信息,包含了作业标志,用户名称,用户账户,作业类型,作业状态,调度信息,资源需求情况,资源使用情况

每次在做出作业调度时,需要做出两个决定,接纳多少个作业,接纳哪些作业

进程调度 

什么时候发生进程调度

1主动放弃CPU 

进程正常终止 运行过程中发生异常而终止 进程主动请求阻塞

2被动放弃CPU

分给进程的时间片用完 有更紧急的事需要处理 有更高级的进程进入就绪队列

什么时候不能发生进程调度与切换

1处理中断的过程中 2操作系统内核程序临界区,但是临界区可以 3 在原子操作过程中

OS内核程序临界区与普通临界区的进程调度情况

进程调度方式

在进程在处理机上运行的时候,有更紧急的进程需要处理,即具有更高优先级的进程进入就绪队列,此时如何分配处理机

1非抢占式调度方式

一旦处理机分配给某个进程,就会让他一直执行下去,不会因为时钟中断或者其他原因来抢占该进程的处理机 就是不能被动强迫放弃CPU

引起进程调度的原因 1正在执行的进程正常运行完毕 2 正在运行的进程提出I/O请求而暂停

3在进程通信或者同步过程中执行某种原语操作,如BLOCK原语

2抢占式调度方式

允许调度程序根据某种原则去暂停某个正在运行的进程, 并将已分配给该进程的CPU分配给另一个进程

遵循的原则 优先级原则 2短进程原则 3 时间片原则

进程调度和进程切换的区别 

 所以广义进程调度包括1保存CPU现场信息,就是各种CPU内部寄存器的信息 2按某种算法选择进程  就是按照某种算法从就绪队列中选取一个进程,将其状态改为运行状态 3把CPU分配给进程 将选中的进程的PCB中有关CPU现场信息装入CPU各个寄存器中,并把CPU的控制权交给该进程。以是其能够从上次的断点处恢复运行

 总结

处理机调度算法的衡量

处理级调度算法的目标

1CPU利用率

2系统吞吐量(批处理)

 在批处理时还要考虑周转时间

1平均周转时间

周转时间=作业在外存后备队列等待的时间+进程在就绪队列上等待被调度的时间+进程在CPU上执行所耗费的时间+等待I/O设备完成操作的时间(阻塞)

2平均带权周转时间

I/O设备运行的时间也算是作业实际运行的时间

 等待时间

在被I/O设备服务时,虽然是处于阻塞状态,但是进程是被服务的,所以不算入等待时间 

作业和进程的等待时间是不同的
响应时间(分时实时系统中要求——及时性)

 有三部分组成 1请求信息从键盘输入开始直至传送到处理机的时间2处理机对请求处理的时间3所形成的响应信息回到终端显示器的时间

注意点

1. cpu利用率=忙碌时间/总时间
2. 周转时间= 完成时间-到达时间
3. 带权周转时间= (完成时间-到达时间)/运行时间
4. 等待时间=开始运行时间-到达时间
5. 响应比=(等待时间+运行时间)/运行时间
=1+(等待时间/运行时间

(考点)响应时间与周转时间的区别:
响应时间:就是这个进程得到响应了。
例如:RR算法:
=等待时间(例如:前面进程)+(第一次)运行时间。(不是RR算法中该进程的运行完时间。)
周转时间=RR算法中,该进程的最后运行完成时间-到达时间。

在批处理OS下:响应时间=周转时间。(非抢占式的嘛)
响应时间一般情况下用来评价分时OS性能指标。
截止时间一般情况下用来评价实时OS。

总结

调度算法

 先来先服务(FCFS)

用于作业时,系统是以作业到达后备队列的时间为调度的标准,FCFS算法从后备队列中选择几个最先进入该队列的作业,将他们调入内存,并为之创建进程和分配资源,最后将其放入就绪队列

用于进程时  系统是以进程到达就绪队列的先后顺序为调度的标准,FCFS算法从就绪队列中选择一个最先进入该队列的进程,将CPU分配给该进程,使之运行,直到该进程一直运行结束或者发了某事件而阻塞,进程调度才会把CPU分配给其他进程

 短作业优先调度算法(SJF)

 必须事先知道作业的运行时间  每次调度选择当前已经到达且运行时间最短的

非抢占式SJF

抢占式SJF

 SJF算法注意点

高响应比算法(HRRN)

因为FCFS算法对短作业不友好只考虑作业等待时间,SJF对长作业不友好只考虑作业运行时间,而且可能发生饥饿现象,所以发明了 HRRN算法考虑了作业等待时间和作业运行时间,实现相对公平

 

总结 

 

 以上的算法是用于早期的批处理系统,因为他们不能区分任务的紧急性,对用户来说交互性很差

轮转调度算法(RR算法)

原理 就是设置一个时间片让各个进程运行,一个进程执行完了一个时间片的时间,CPU就会被剥夺,若一个时间片尚未用完正在运行的进程便完成,则立即将进程从就绪队列删除,再调度就绪队列的首进程进行运行,并启动一个新的时间片,若一个时间片用完了,计时器中中断处理程序会被激活,此时进程没有运行完,调度程序将它送到就绪队列的末尾。

 其重点是时间片大小的安排

 

优先级调度算法 

抢占型

非抢占型 

 

优先级的类型 

静态优先级 (优先级一直不变)g

依据 1 进程类型  系统进程优先级高于一般用户进程2 进程对资源的需求  对资源要求少的进程应该赋予高的优先级3用户要求 根据进程的紧迫程度以及用户所付出费用的多少

态优先级 

会根据情况调整优先级,比如可以规定就绪队列的进程会随着等待时间的增长而提高

多级反馈队列调度算法

以上的算法都有自己的优点和缺点,FCFS的优点的公平,SJF的优点尽快处理短作业平均周转时间和等待时间比较优秀,RR算法能让各个进程得到及时的响应,优先级算法可以灵活的调整进程服务的顺序,可以先处理比较紧急的任务,而多级队列反馈算法是将上面的算法中和一下得出优秀的算法

例子

 

具有交互性的三种算法比较

 

死锁 

理解

 

死锁的定义

如果一组进程的每个进程都是再等待仅由该组进程的其他进程才能引发的事件发生,那么该组进程是死锁的,一组进程相互等待对方手里等待资源,导致各进程都无法向前推进。

死锁、饥饿、死循环的区别

产生死锁的四个必要条件

 1互斥条件,进程对所分配到的资源是排他性使用的,在一段时间内,某资源只能被一个进程占用

2 请求和保持条件 进程已经占用了一个资源,但又提出了新的资源请求,但是被请求的资源已经被其他进程占用,此时请求进程被阻塞,但是又不会去释放自己已经拥有的资源(吃着自己碗里的,还看着别人的)

3不可抢占条件 进程已经获得的资源在未使用完之前不能被其他进程所抢占,只能自己完成任务后释放

4循环等待条件 就如上面的哲学家进餐问题一样,发生死锁时,必定会存在一个“进程-资源循环链” 但是存在死锁必定存在循环等待链,但是存在循环等待链不一定存在死锁,可能同类的资源不止一个

什么时候会发生死锁呢

几种资源的介绍

可重用资源 是一种可供用户重复使用多次的资源 有以下性质

1 每个可重用资源中的单元,只能分配给一个进程使用,而不允许多个进程共享 

2若进程想请求可重用资源,首先请求资源,若请求失败,则进程会阻塞或循环等待,然后会使用资源,进程对资源操作,最后释放资源

3系统中可重用资源的单元数相对固定,进程在运行期间不能创建资源也不能删除资源

可消耗资源  可消耗资源又称为临时性资源,它是在进程运行期间由进程动态创建和消耗的

可抢占资源 表示获得这类资源后,这类资源可以再被其他进程或系统抢占 处理机和内存均属于可抢占资源,是不会引起死锁的

不可抢占资源 不可抢占资源指把这类资源分配给某进程后,就不能强行收回了,而只能再进程用完之后等待其自行释放,磁带机,打印机等属于不可抢占资源

竞争可消耗资源也会引起死锁

死锁的解决 

 死锁的预防

破坏互斥条件

重点是互斥条件是非共享设备所必须具备的条件,不仅不能改变,还应该加以保证 ,因此预防死锁时注意破坏产生死锁后三种条件

破坏请求和保持条件

第一种协议 所有进程在开始运行之前,必须一次性地申请在整个运行过程中所需的全部资源

这种方式会将资源严重浪费资源,1严重地降低了资源的利用率 2进程会发生饥饿现象

第二种协议 它只允许一个进程只获得运行初期所需的资源后,便开始运行,进程运行过程种再逐步释放已分配给自己的,且已经用毕的全部资源,然后再去申请新的资源

破坏不可抢占的条件

方案一 当一个已经保存了某些不可抢占资源的进程提出新的资源请求而不能得到满足时,它必须释放保持的所有资源,待以后需要时再重新申请

方案二 当某个进程需要的资源被占之后,可以在操作系统的协助下,强行占用需要的资源

 

 破坏循环队列条件

可采用顺序资源分配法对系统中所有资源类型进行线性排序,赋予他们不同,并且规定每个进程只能按序号递增的顺序去请求资源。 

假如某进程已经申请了一些序号较高的资源,后来想访问一些序号较低的资源,此时必须去释放所具有相同或者更高序号的资源,才能去申请序号低的资源

避免死锁(银行家算法)

什么是安全状态

 将系统的一种资源的多少当作银行有多少钱,每个客户的需求相当于每个进程所占资源的大小,只要能找到像上面一条可以安全借钱的方法就叫安全状态,借钱的方法就叫安全序列,系统的资源不止一种,所以实现银行家算法要将一维的资源表变成多维

, 

 如果系统处于安全状态,则不会发生死锁,但是如果处于不安全状态,有可能发生死锁

银行家算法的实现 

 

 死锁的检测与解除 

 死锁的检测

如果能把所有边消除,就是安全状态,此时肯定不会发生死锁

 如果图中所有的边不能消除,则说明发生了死锁,既然发现了死锁,就要想办法去实现消除死锁

 死锁的解除

1抢占资源 

2终止死锁进程  

1终止所有资源

2逐个终止死锁进程(每次终止的进程代价应该最小)

1进程优先级 2进程已经执行的时间 3进程已经使用的资源数量 4进程的性质是交互式还是批处理式 5还需要多少时间结束

3进程回退法

总结

第四章进程的同步

进程的同步与互斥

为什么要引入同步机制

因为进程的引入,可以使系统中的多道程序可以并发执行,由于并发执行导致程序的异步,所以引入同步机制使多个进程能有条不紊的运行,如果不采取同步机制那么这些并发的进程会对系统资源的无序争夺,给系统造成混乱

进程同步概念

我们把异步环境下一组能够并发进程直接制约而互相发送消息,相互合作,相互等待,使一组进程按一定的速度执行的过程叫做进程同步(进程同步的概念是一个大的范畴,协作进程之间的制约关系可以称为进程同步,根据形式的不同,又可划分为同步关系和互斥关系,互斥是同步的一个特例,同步强调的是进程操作之间的先后关系,而互斥强调的是对临界资源的互斥访问),

进程同步的任务是在执行次序上对多个协作进程进行协调,使并发执行的诸多协作进程之间按照一定的规则或时序去共享系统资源,并且能够很好地相互合作,从而使进程的执行具有可再现性

两种形式的制约关系

直接制约关系(同步关系)

某应用程序为了完成某些任务,会建立两个或者多个进程,这些进程为了完成同一个任务而相互合作,进程间的直接制约关系源于它们之间的合作,故该关系也可称为同步关系

同步也称为直接制约关系。
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
一个简单的例子来理解这个概念。
例如,让系统计算1 + 2x3,假设系统产生两个进程: 一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。
 

间接相互制约关系(互斥关系)

多个程序在并发地执行,由于共享系统资源,如CPU,I/O设备等,这些并发执行的程序之间会形成相互制约的关系,对于打印机和磁带机这种系统资源,必须保证多个进程对其进行互斥访问,由此在这些进程中,形成了对该类资源共享所谓间接相互制约关系,就称为了互斥关系

互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。

临界区

在这里需复习一下临界资源的概念。
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。
对临界资源的访问,必须互斥地进行。
 

临界区是进程访问临界资源的代码段

实现临界区的四个原则

空闲让进

如果无进程在临界区,则表明临界资源处于空闲状态,一个进程立即进入临界区并可以使用临界资源

忙则等待

如果已经有进程在临界区使用资源,则其他试图进入临界区的进程必须等待使用的进程结束对临界区资源的访问才能进入临界区,以保证临界资源的互斥访问

有限等待

要求等待进入临界区的进程的,应该保证在有限时间内进入自己的临界区,以免陷入死等

让权等待(原则上要遵循,但非必要)

要求当进程不能进入自己的临界区时,应该立即释放CPU,以免进程陷入忙等的状态

总结

软件同步机制

实现方法的思想

  • 软件实现方法的思想:在进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

单标准法

违背了空闲让进

 双标志法​​​​​​   (为了解决空闲让进的问题)

                                                     但是会违背忙则等待

双标志后检查法(为了解决忙则等待)

                                                    违背了空闲让进和有限等待

Peterson算法

违背了让权等待的原则 

 按照123678 的顺序是1 表示了自己P0有意愿进入临界区,

2表示自己可以让P1先进入临界区

3由于表示了可以让对方先进的意愿但是对方没有进去的意愿所以P0进入临界区

6P1有进入临界区的意愿

7表示可以让对方先进的意愿

8 由于对方有进去的意愿并且自己也有让对方先进的意愿 所以一直循环

按照 1623 的顺序  1 表示P0自己想进入临界区的资源

6 P1也表示自己想进入临界区的资源

2P0表示可以让对方P1先进

3由于对方有进临界区的意愿并且自己也有让对方先进的意愿,所以一直循环等待,等P0的时间片用光,然后执行了P1

  7表示可以让P0先进

8 由于对方有进入临界区的意愿并且自己也表示能让对方先进,所以一直循环,等时间片耗尽,

然后执行3由于进程turn=0,进程P0没有了让对方先进的意愿,所以跳出循环,进入临界区

总结

硬件同步机制 

中断隐藏法

利用开中断和关中断实现


缺点 

1这种方法不适用于多CPU系统,因为一个CPU上进行关中断并不能防止其他CPU上执行相同的临界区代码 

2只适用于系统内核进程,(因为中断这种机制是特权功能只能在内核态实现)

3关中断时间过长会影响系统效率,进而影响CPU交叉执行的能力

TestAndSet指令

执行TSL指令时,它的内部运转逻辑:
假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。

 TS指令用硬件完成,是一气呵成的,执行过程不能中断,但是还是不满足让权等待,会出现忙等现象

Swap指令

old是每个进程都要进行的一步,都必须将old=true
分析一下这样做的原因:
因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源。

 因为Swap也是由硬件完成,所以也是一气呵成,不能中断,但是还是会出现不满足让权等待的现象

总结

信号量机制 

为什么引入信号量机制

因为上述方法都不能完美的地解决临界区问题 

什么是信号量机制

几种信号量形式 

整形信号量

wait(s)和signal(s)是原子操作,不可中断 

记录型信号量

如何实现

举例

 梳理一下记录型信号量的知识点(P、V)

这个是最好的方法实现进程同步 

总结

信号量机制的应用 

实现进程互斥

进程互斥就是为了实现各进程互斥的访问临界资源,为什么叫临界资源呢,就是这种资源只能一个时间段只能让一个进程使用,相当于资源的数量为1,所以将互斥信号量mutex的数值设为1.

步骤

1设mutex为互斥信号量,其初值为1,mutex的范围是(-1,0,1)当为1时,表示临界区资源无人访问,可以直接进入使用 当为0时,说明有一个进程在临界区运行,另一个必须等待,挂入阻塞队列 当为-1时,表示有一个进程正在临界区运行,而另一个进程因此等到而阻塞在信号量队列中,需要被当前已经在临界区运行的进程退出时唤醒

2在进入临界区之间要执行P操作

3出临界区之后要执行V操作

对于不同的临界区资源要设置不同的互斥信号量

 缺少P操作后,资源数不会减少,相当于不能给临界区上锁,所以无法保证对临界区的互斥访问

缺少V操作,没有将资源数归1,相当于没有给临界区解锁,所以因此进入阻塞状态的进程无法唤醒。

实现同步操作

实现同步操作就是多个进程为了实现同一个任务(程序的),让各进程有序的推进

同步就是实现进程之间需要有先后实现顺序的操作 

步骤 

1设置同步信号量S,并将初值设为0

2在前操作之后,实现V操作

3在后操作之前,完成P操作

实现进程的进制实现前驱的关系

为每一个前驱关系设置一个同步变量

 总结

进程互斥和同步的几种经典关系

生产者-消费者问题

1)问题描述

  • 系统中有一组生产者进程一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注: 这里的“产品”理解为某种数据)
  • 生产者、消费者共享一个初始为空、大小为n的缓冲区
  • 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
  • 只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。
  • 缓冲区是临界资源,各进程必须互斥地访问。

分析 

1找出各个进程,分析他们之间的同步和互斥关系

2整理思路

3设置信号量

同步关系 生产者进程要在消费者进程之前

互斥关系 生产者和消费者必须互斥地访问缓冲区

空闲缓冲区的数量是有限的 同步

产品数量有限 同步

缓冲区的数量有限 互斥

实现方法 

实现互斥的P操作一定要在实现同步的P操作之后 

 但是互斥和同步的V操作的顺序并不会导致进程阻塞,所以可以顺序可以交换。

多生产者消费者问题

问题描述

 (2)问题分析

 3有互斥量

 无互斥量

③ 为什么有mutex和没有mutex一样呢?

  • 原因在于:本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…

 

(4)知识总结与重要考点

  • 总结:在生产者_消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现互斥访问缓冲区的功能。当然,这不是绝对的,要具体问题具体分析。
  • 建议:在考试中如果来不及仔细分析,可以加上互斥信号量,保证各进程一定会互斥地访问缓冲区。但需要注意的是,·实现互斥的P操作一定要在实现同步的P操作之后·,否则可能引起·“死锁”·。

读写者问题

在这里插入图片描述

(2)问题分析

在这里插入图片描述 核心问题 解决读与读之间不互斥,但读与写之间互斥 引入count计数器

(3)实现方法

① 给count加mutex互斥访问

  • 这里说一下为什么要加mutex。
  • 比如:当count=0时,第一个读者进程执行到p(rw),rw=0,假设此时时间片到了,切换到第二个读者进程,第二个进程发现count=0,则执行p(rw),但是此时rw=0,于是第二个进程被堵在p(rw)这里,同理,后面的可能会有多个进程堵在p(rw),只有当第一个进程再次获得时间片,执行count++,让count不为0,然后其他进程就可以直接绕过if直接进行count++来访问文件,但是第三个读者进程和后面的几个可能堵在p(rw)的多个读者进程则必须得等count–为0后才可以再次和写进程竞争来访问文件,对count的访问没有做到一气呵成,会导致本来一些进程一直堵在p(rw)。

在这里插入图片描述

 ② 加一个w实现“读写公平法”

  • 在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有 一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程“饿死”的情况。
  • 若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。
  • 4)知识回顾与重要考点

管程机制 

为什么引入管程

虽然信号量是一种方便,又有效的进程同步机制,但是每个要访问临界资源的进程必须要自卑同步操作P和S,这样大量的同步操作操作分散在各个进程中,这不仅给进程的管理带来麻烦,还会可能同步操作不当导致系统死锁所以引入了封装思想的管程

 管程的组成

定义 一个管程定义了一个数据结构和能够被并发进程(在该数据结构上),所执行的一组操作,这组操作能够同步进程和改变管程中的数据。

3.管程实现生产者消费者问题
在这里插入图片描述

在这里插入图片描述

 管程的特点在这里插入图片描述

Java中管程思想

1

 总结

在这里插入图片描述

第五章 存储器管理 

存储器的多层结构

基础的三层 

1CPU寄存器

2主寄存器

3辅助寄存器

 可执行寄存器                

在计算机存储器系统中,寄存器和主存储器被称为可执行寄存器,对于放在里面的信息,与放在辅存中的信息采用的访问方式不同,所耗费的时间也不同,对于贮存和存储器中的信息可在很短的时钟周期内使用一条load和store指令就可对可执行存储器进行访问,但是对辅存的信息要通过I/O设备来进行访问                                                                                                 

主存储器             

也称主存和内存,也称为可执行存储器,是计算机系统的主要部件,用于保存进程运行时的程序和数据。通常处理机都会从内存中取出指令和数据,在将相应的数据放入数据寄存器,将所读取的指令放入指令寄存器,或者进行相反的操纵。但是内存的访存速度远远小于CPU执行指令的速度,基于这一矛盾,引入了高速缓存和寄存器       

寄存器

寄存器是CPU内部一个小型的存储区域,用于暂时存放参与运算的指令和数据和运算结果等,寄存器的和CPU有相同的速度,完全能够跟CPU协调工作。 

 高速缓存       

它是介于寄存器和内存之间的存储器,运用了程序的局部性原理,主要去备份一些常用的数据,以减少处理机对内存的访问次数,这样可大大提高程序的执行速度         

磁盘缓存

由于目前I/O速度远远低于对内存的访问速度,为了缓和两者在速度不匹配的问题,特设了磁盘缓存,主要用于暂时存放频繁使用的一部分磁盘数据,以减少访问磁盘的次数,但是磁盘缓存和高速缓存不同,它不是一种实际存在的存储器,而是利用内存中的部分存储空间,暂时存放磁盘中读出或者写入的信息 

存储单元

在这里插入图片描述

程序必须先放入内存才能被CPU处理

 几个常用数量单位&内存地址在这里插入图片描述

 OS对存储器系统有哪些管理

1负责内存空间的分配和回收 2 需要提供某些技术从逻辑上对内存空间进行扩充 3 地址转换 4内存保护

指令运行的基本原理

(1)指令的工作原理

—操作码+若干参数(可能包含地址参数)

从X=X+1大致看一下指令的执行过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

逻辑地址和物理地址

在这里插入图片描述

编译 链接和装入 

在这里插入图片描述

 编译

将我们写的代码变成指令(变为机器语言)计算机能够理解的语言 ,形成若干个目标模块

链接

由链接程序将编译后的形成的一组模块以及它所需要的库函数链接在一起,链接形成完整的逻辑

三种链接方式

1静态链接

在程序运行之前就将各个模块和库函数链接成一个完整的装配模块,以后不再拆开

修改相对地址和变换外部调用符号

在这里插入图片描述

2装入时动态链接

运行时边装入边链接,直接在内存中链接,在装入内存,若发生一个外部模块调用事件,则将引入装入程序找出相应的外部目标模块,并将它装入内存

便于修改和更新 便于实现对目标模块的共享

在这里插入图片描述

3运行时动态链接

应用程序在运行时,每次要运行的模块可能是不同的,但是由于事先无法知道本次要运行哪些模块,故只能将所有可能要运行的模块装入内存,并装入时全部链接在一起,这是低效的

所以运用了运行时动态链接 这种链接方式对某些模块的链接推迟到程序执行时才进行

在这里插入图片描述

 三种装入

也称加载,由装入程序将装入模块装入内存,装入后形成物理地址

装入内存的注意

不修改装入模块中的指令地址就直接装入内存的话:
在这里插入图片描述
在这里插入图片描述

三种装入方式

1绝对装入

在这里插入图片描述

2静态重定位装入方式 

指令中使用的地址,数据存放的地址都是相对于起止地址而言的逻辑地址

绝对装入只能将目标模块装入内存中的指定的位置,这只适用单道程序环境,而在多道装程序环境下,编译程序不可能预先知道将编译后所得到的目标模块放在内存何处,所以用静态重定位装入方式

在这里插入图片描述

3动态重定位 

它的实现依靠了一个重定位寄存器(里面存放装入模块的起始位置)

静态重定位装入方式可将装入模块装入到内存所有的位置,可用于多道程序环境,但是该方式并不允许程序允许时在内存中移动位置,为了解决这个问题所以采用了动态运行重定位方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 总结

在这里插入图片描述

操作系统对存储器有哪些管理 

内存空间的分配与回收

在这里插入图片描述

内存空间的扩充(实现虚拟性)在这里插入图片描述

地址转换

在这里插入图片描述

三种方式

在这里插入图片描述

内存保护

保证每个进程都有一个单独的内存空间

在这里插入图片描述

 两种方式

第一种设置上下限寄存器

在这里插入图片描述

 设置基地址寄存器和界限寄存器

在这里插入图片描述

 总结

在这里插入图片描述

对换和覆盖技术 

覆盖技术

为了能让进程的大小比它所分配的内存空间大,可以使用覆盖技术,他的思想就是在任何时候只在内存中存放所需的指令和数据,当需要其他指令和数据时,它们就会被装入刚刚不需要的指令和数据所占的内存空间

在这里插入图片描述

 在这里插入图片描述

对换技术 

对换的引入

在多道程序环境下,内存中的某些进程,可能由于某些事件尚未发生而被阻塞运行,但是它们会占用大量的内存,为了解决这种问题,引入对换技术,就是对应的挂起状态

思想

是指把内存中暂时不能运行的进程或者暂时不用的程序和数据,转移到外存,以便腾出足够的内存空间,再把已经具备运行条件的进程或者进程所需要的程序和数据存入内存,进而实现对换

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 对换的类型

 整体对换  处理机的中级调度其实就是存储器的对换功能,目的是为解决内存紧张问题,提高内存的利用率和系统吞吐量,再中级调度中,对换是以整个进程为单位的,所以也称为进程对换

页面(分段对换 如果对换是以进程的一个页面或者分段的单位,是实现请求分页和分段存储管理的基础

在具有对换功能中磁盘空间分为

文件区

文件区占了磁盘空间的大部分空间,用于存放各类文件,由于文件会较长时间存放在外存,系统访问的频率较低,所以对文件区的管理是提高文件存储空间的利用率,然后才是提高对文件的访存速度,所以应该采取离散分配的存取管理方法

对换区

对换区只占用了磁盘空间的小部分区域,用于存放从内存换出的进程,由于这些进程在外存的时间是短暂的,所以对换操作的频率较高,所以对换区的主要目的是为了提高访存速度,其次才是提高文件的存储空间利用率,因此对换区的管理采用连续分配存储管理方式

进程换出与换入

选择进程的换出 1首先选择哪些处于阻塞状态或睡眠状态的进程2当有多个这样的进程,选择优先级最低的进程作为换出进程 3为了低优先级进程在被调入内存后很快就会被调入内存很快又被调出 4如果无阻塞进程,而内存空间仍不满足需要,则选择优先级最低的就绪进程换出

换出进程的步骤 只会换出进程非共享的程序和数据段,而对共享的程序和数据,只要有进程需要就不会换出,而且进程PCB不会被换出,会常驻内存

进程的换入 

1找到处于就绪状态但已经被换出的进程2当有很多这样的进程,选择在磁盘中时间最长的进程作为换入进程,为它申请内存空间

启动对换的时机

在处理机正常运行时并不会启动对换程序,但是如果发现很多进程在运行时会发生缺页,且出现内存紧张的情况,就会启动对换程序,直到所有的进程缺页率都已经明显减少,系统吞吐量下降时,就可暂停对换程序

总结

在这里插入图片描述

 在这里插入图片描述

连续分配存储管理方式

连续分配存储管理方式

该方式是为一个用户进程分配一个连续的内存空间,即程序中的代码和数据在逻辑上相邻,在物理上也相邻

​​​单一连续分配

用于单道批处理阶段,只有一个进程在运行

在这里插入图片描述

 固定分区分配

将整个用户空间划分为若干个固定大小的分区,在每个分区只转入一道作业,是为了在内存中装入多个作业

两种方式划分 分区大小相等  分区大小不等

在这里插入图片描述

固定分区的数据结构----固定分区使用表  

在这里插入图片描述

3.动态分区分配(可变分区分配)

根据进程的实际需要去动态地分配内存空间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

系统要用怎样的数据结构记录内存的使用情况呢?----动态分配的数据结构

在这里插入图片描述

 动态分区算法

当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?--动态分区算法

在这里插入图片描述

首次适应算法

每次从低地址开始找,找到第一个能满足大小的空闲分区

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 最佳适应算法

空闲分区安容量递增次序链接,每次分配内存时顺序查找空闲分区链或空闲分区表,找到一个能满足的空闲分区

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.最坏(大)适应算法

空闲分区按照容量递减次序链接,每次分配内存时顺序查找空闲分区链或空闲分区表,找到一个大小满足的第一个空闲分区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.临近适应算法(循环首次适应)

为进程分配内存空间时,不再每次都从链首开始查找,而是从上次空闲分区的下一个空闲分区开始查找,直到能找到满足要求的空闲分区

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四种算法归纳比较

在这里插入图片描述

分区的分配和回收操作

如何分配?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何回收?对应四种回收情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.内部碎片与外部碎片

 在这里插入图片描述

 在这里插入图片描述

紧凑技术 

解决外部碎片问题,把原来分散的很多个小分区拼接成一个大分区,这样就可以把作业装入分区,每次紧凑后需要对移动的数据和程序进行重定位

动态重定位 用重定位寄存器实现 真正的地址是相对地址加上重定位中的数据 重定位寄存器中存放程序在内存中的起始地址

动态重定位分区分配算法

就是原来动态重定位算法中加入了紧凑功能,当算法时不能找到一个足够大的空闲分区以满足需求,如果所有的小的空闲分区容量总和大于或者等于用户的要求,就进行紧凑,如果小于,就返回失败信息。

分页存储管理方式

非连续分配管理方式

在这里插入图片描述

为什么要分页存储方式

为了解决外部和内部碎片 ,充分利用内存在这里插入图片描述

 基本思想

分页存储管理方式将进程的地址空间分为若干个页,叫做页面,并为每个页面编号,从0开始,相应的也将内存空间分为若干个块,叫做页框也称物理块,并也从0开始编号,为进程分配内存,以块为单位

在这里插入图片描述

 一些注意点

名称 

页面大小的设定

在这里插入图片描述

 如何进行地址转换

知道页号所对应的物理块号和页内偏移量  物理块号的起始地址加页内偏移量就是实际地址

在这里插入图片描述

 在这里插入图片描述

在这里插入图片描述

 如何计算页号和页偏移量

 在这里插入图片描述

为什么页面大小一般设为2的整数次幂? 

方便计算 很容易将二进制转换出页号和页内偏移量

页面大小的设定 太大的话,虽然可以减少页表的长度,以及提高页面换入换出的效率,但是选择太大的页面大小,会使页内碎片过大。也不能太小,虽然小可以减少页面碎片大小,有利于内存利用率的提高,但是会造成每个进程占用太大的页面,导致页表过长,占用大量内存,还会降低页面换入换出的效率

在这里插入图片描述

在这里插入图片描述

 分页存储的逻辑结构

在这里插入图片描述

 如何知道页面在内存中的起始地址

分页管理的数据结构----页表在这里插入图片描述

在这里插入图片描述

 进程页表通常是存放在连续的内存块,对于页表项大小的设定,通常会让一个页表项占更多的字节,使每个页面刚好装下整数个页表项

总结

在这里插入图片描述

分页存储管理的地址变化机构 

在这里插入图片描述

 基本地址变化机构是由硬件实现的

1.页表寄存器

在这里插入图片描述

地址变换过程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一道例题加深印象:
在这里插入图片描述

页表项的进一步讨论

在这里插入图片描述

总结

在这里插入图片描述

 具有快表的地址变化机构

在这里插入图片描述

局部性原理引入快表机制

在这里插入图片描述 就是相当于运用了Cache高速缓存器

2.快表(TLB)

在这里插入图片描述

一个例图了解基于快表的地址变换结构

在这里插入图片描述
引入快表后,地址变换的过程的文字描述:
在这里插入图片描述

引入快表的有效访问时间

3.基本地址变换与快表地址变换的比较

在这里插入图片描述

二级页表

原理就是计算机的终极原理  套娃思想

为什么引入二级页表?

因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题:

1为了解决页表需要连续存放的问题,有时候页表太大,一个物理块存不下,所有采用二级页表

2根据局部性原理,没有必要让整个页表都在内存中,因为一个进程一段时间内只会访问几个特定页面

在这里插入图片描述
在这里插入图片描述
上面提到了这两个问题,那么总结一下,并提出解决思想,引入二级页表的概念。
在这里插入图片描述

2.二级页表的原理和地址结构

  • 对页表再次分组  相对于一级分页 多了一个页目录表 也叫顶级页表,用来存放页表的逻辑地址对应物理的地址
    在这里插入图片描述
  • 二级页表的地址结构及对应关系
    在这里插入图片描述
  • 3.如何实现二级页表的地址变换?

    在这里插入图片描述
    上面的部分我们解决了问题一,接下来是问题二,这里简单叙述一下,后面的文章会继续深入剖析。解决第二个问题就是虚拟存储器的要解决的
    在这里插入图片描述

  • 几个小细节

  • 在这里插入图片描述

    总结

  • 在这里插入图片描述

分段存储管理方式 

在这里插入图片描述

 分段的段是一种逻辑单位,而分页是一种物理单位  分页的地址是一维的 而分段的地址是二维的

分段的目的

1方便编程 用户可按照自己作业的逻辑关系划分为多个段,每个段以0开始编址,并且拥有自己的名字和长度,因此,程序员们都迫切需要访问逻辑地址是由段名和段内地址偏移量决定,这样不仅方便程序员编程,也使程序具有更高的可读性和直观

2信息共享 实现程序和数据的共享是要以信息的逻辑单位为基础的,分页系统中的页只是一个物理单位,并无完整的逻辑关系,所以一个可被共享的过程可能会占数个页面,这增加了共享的难度,而分段是以信息的逻辑单位,所以共享的数据是一个段,非常方便共享

3信息保护 信息保护同样是以信息的逻辑为单位的,所有分段更容易实现信息保护

4动态链接 为了提高内存的利用率,系统只将真正要运行的目标程序装入内存,也就是说,动态链接在作业运行之前,并不是把所有的目标程序都链接起来,只要在运行时需要这个目标程序,才会把该段调入到内存中链接,可见动态链接的单位是段

5动态增长 在实际运用中,往往会存着一些段,尤其是数据段,由于数据不断增长,数据段会动态的增长,相应的存储空间也会动态增长,分段的管理方式会很顺利得解决这一问题

1.什么是分段?

在这里插入图片描述

分段的逻辑地址结构

在这里插入图片描述

2.段表

在这里插入图片描述

3.地址变换

在这里插入图片描述

在这里插入图片描述

这里的越界中断需要注意一下,因为段号是从零开始编号的,所以段表长度至少为1,当段号小于段长时才为越界

.分段、分页管理的对比

在这里插入图片描述
在这里插入图片描述

分段实现信息共享共享

只需要让各进程的段表项指向同一个段就可以实现共享

在这里插入图片描述

为什么分页不方便实现信息共享和保护?在这里插入图片描述

总结

在这里插入图片描述

段页式存储管理方式 

在这里插入图片描述

1.分页、分段的优缺点分析

在这里插入图片描述
在这里插入图片描述

2.分段+分页=段页式管理

先将用户程序分为若干个段,然后将每个段分为若干个页,并为每个段赋予一个段名

在这里插入图片描述

段页式管理的逻辑地址结构

段页式任然是二维的,分段是对用户可见的,但是页号和页内地址是由硬件自动将段内地址划分出来的

在这里插入图片描述

段页式存储的段表、页表

在这里插入图片描述

3.段页式管理的地址转换过程 三次访存

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_50985215/article/details/122120354
今日推荐