第四章 内存管理

4.1 内存的基本知识

4.1.1 知识总览

第四章 内存管理_第1张图片

第四章 内存管理_第2张图片

4.1.2、内存的作用

内存可存放数据。程序执行前需要先放到内存中才能被CPU处理--->缓和CPU与硬盘之前的速度矛盾

4.1.3、内存的存放

内存的存放类似于酒店,给内存的每个存储单元都编号。(在多道程序环境下,系统中会有很多个程序并发执行,也就是说会有多个程序的数据需要同时放到内存中,所以要给内存的存储单元编址:如果每个计算机“按字节编址”,则每个存储单元大小为1字节,即1B,即8个二进制位;如果字长为16为16位的计算机“按字编址”,则每个存储单元大小为1个字,每个字的大小为16个二进制位

第四章 内存管理_第3张图片第四章 内存管理_第4张图片

补充1:计算机的字长

计算机字长就是计算机中CPU在一次操作中能处理的单位字的长度,即运算器能够并行处理和存储器每次读写操作时能包含的二进制码的位数

计算机字长的介绍:

计算机字长是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干字长段,各段的编码表示不同的含义。

例如某台计算机字长为16位,即有16个二进制数合成一条指令或其它信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。

补充2:几个常用的数量单位

第四章 内存管理_第5张图片

 G只是表示个数量而已,B有实际意义,是一个数据,指的是字节(Byte),小写的b是bit,是一个比特位,一个二进制位,1Byte = 8 bit。

补充3:

bit是位,在计算机中bit也就是比特,是最小的数据单位。

位:

位英语是bit,表示计算机内部最小数据存储单位,表示二进制。

字节:

字节也就是Byte,简称为B,是计算机处理数据的基本单位。

补充4:指令的工作原理

下面举C语言语句x = x + 1在计算机是怎么运作的例子:

计算机会先编译x = x + 1此语句,编译完成之后,生成一些指令,然后计算机依次执行这些指令

 当这个C语言程序运行的时候,系统会为它建立相应的进程,一个进程在内存当中占有一片区域,叫程序段(用于存放与进程相关的代码、指令),另外改进程还有一个部分,叫做数据段,用于放置该程序所要处理的一些变量之类的一些数据(例如x变量就存放在数据段里),下面介绍上边的三个指令:

CPU在执行这三个指令的时候,首先它取出了指令1(由这三个部分组成,第一个部分叫做操作码,指明了这条指令要干一件什么事情, 指令1是数据传送指令,后面两个码是干这个操作必要的参数

第四章 内存管理_第6张图片

例如,指令1就是让CPU从内存地址01001111(对应十进制为79)内存单元中存放的数据取到00000011(对应十进制为3)编号为3的寄存器当中)

可以看出,我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。在这个例子中,我们默认这个进程的相关内容从地址#0开始连续存放,指令的地址参数直接给出了变量x的实际存放地址(物理地址)。

综上可以看出,指令的工作是基于“地址”的,每个地址对应一个数据的存储单元

第四章 内存管理_第7张图片

课程的引入:(引入装入的三种方式)

基址 + 偏移

第四章 内存管理_第8张图片

4.1.4、装入的三种方式

(1)绝对装入(从根本上解决问题,暴力办法)

绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

第四章 内存管理_第9张图片

 (2)可重定位装入

静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。

第四章 内存管理_第10张图片

(3)动态运行时装入

动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。

第四章 内存管理_第11张图片

第四章 内存管理_第12张图片

4、从写程序到程序运行

第四章 内存管理_第13张图片

编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入(装载):由装入程序将装入模块装入内存运行
5、链接的三种方式
第四章 内存管理_第14张图片

4.2 内存管理的概念

4.2.1 知识总览

第四章 内存管理_第15张图片

4.2.2 内存空间的分配与回收

第四章 内存管理_第16张图片

4.2.3 内存空间的扩展

第四章 内存管理_第17张图片

4.2.4 地址转换

第四章 内存管理_第18张图片

第四章 内存管理_第19张图片        

4.2.5 内存保护 

 第四章 内存管理_第20张图片

第四章 内存管理_第21张图片

4.2.6 知识回顾与重要考点

第四章 内存管理_第22张图片

4.3 覆盖与交换

4.3.1  知识总览

第四章 内存管理_第23张图片

4.3.2 覆盖技术

第四章 内存管理_第24张图片

第四章 内存管理_第25张图片

4.3.3 交换技术

第四章 内存管理_第26张图片

第四章 内存管理_第27张图片

第四章 内存管理_第28张图片

4.3.4 知识回顾与重要考点

第四章 内存管理_第29张图片

4.4 连续分配管理方式

4.4.1 知识总览

第四章 内存管理_第30张图片

4.4.2 单一连续分配

第四章 内存管理_第31张图片

4.4.3 固定分区分配

第四章 内存管理_第32张图片

第四章 内存管理_第33张图片

4.4.4 动态分区分配

第四章 内存管理_第34张图片

第四章 内存管理_第35张图片

第四章 内存管理_第36张图片

第四章 内存管理_第37张图片

第四章 内存管理_第38张图片

第四章 内存管理_第39张图片

第四章 内存管理_第40张图片

第四章 内存管理_第41张图片

第四章 内存管理_第42张图片

第四章 内存管理_第43张图片

4.4.5 知识回顾与重要考点

第四章 内存管理_第44张图片

4.5 动态分区分配算法

4.5.1 知识总览

第四章 内存管理_第45张图片

4.5.2 首次适应算法

第四章 内存管理_第46张图片

4.5.3 最佳适应算法

第四章 内存管理_第47张图片

4.5.4 最坏适应算法

第四章 内存管理_第48张图片

4.5.5 邻近适应算法

4.5.6 知识回顾与重要考点

第四章 内存管理_第49张图片

4.6 基本分页存储管理的概念

4.6.1 知识总览

第四章 内存管理_第50张图片

4.6.2 什么是“地址空间”

第四章 内存管理_第51张图片

4.6.3 什么是分页存储

写在前面: 

内存中的块叫做页框,进程中的块叫做页面,内存中每个页面对应的物理块号叫做页表,页表由页表项组成。

第四章 内存管理_第52张图片

4.6.4 重要的数据结构---页表

第四章 内存管理_第53张图片

第四章 内存管理_第54张图片

4.6.5 问题一:每一个页表项占多少字节?

第四章 内存管理_第55张图片

第四章 内存管理_第56张图片

第四章 内存管理_第57张图片

4.6.6 问题二:如何实现地址的转换?第四章 内存管理_第58张图片

第四章 内存管理_第59张图片

4.6.7 子问题:如何确定一个逻辑地址对应的页号、页内偏移量

第四章 内存管理_第60张图片

第四章 内存管理_第61张图片 第四章 内存管理_第62张图片

4.6.8 子问题:为何页面大小要取2的整数次幂?

第四章 内存管理_第63张图片

4.6.9 逻辑地址结构

第四章 内存管理_第64张图片

4.6.10 知识回顾与重要考点

第四章 内存管理_第65张图片

4.7 基本地址变换机构

4.8 具有快表的地址变换机构

4.8.1 知识总览

第四章 内存管理_第66张图片

4.8.2 什么是快表(TLB)

第四章 内存管理_第67张图片

第四章 内存管理_第68张图片

4.8.3 引入快表后,地址的变换过程

第四章 内存管理_第69张图片

第四章 内存管理_第70张图片

4.8.4 思考:能否把整个页表都放在TLB中?

第四章 内存管理_第71张图片

4.8.5 局部性原理

第四章 内存管理_第72张图片

4.8.6 知识回顾与重要考点

第四章 内存管理_第73张图片

4.9 两级页表

4.10 基本分段存储管理方式

4.11 段页式管理方式

4.12 请求分页管理方式

4.13 页面置换算法

4.14 页面分配策略、抖动、工作集

4.15 内存映射文件

你可能感兴趣的:(操作系统,java)