第四章 内存管理

4.1 内存的基本知识

4.1.1 知识总览

4.1.2、内存的作用

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

4.1.3、内存的存放

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

补充1:计算机的字长

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

计算机字长的介绍:

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

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

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

 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是数据传送指令,后面两个码是干这个操作必要的参数

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

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

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

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

基址 + 偏移

4.1.4、装入的三种方式

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

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

 (2)可重定位装入

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

(3)动态运行时装入

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

4、从写程序到程序运行

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

4.2 内存管理的概念

4.2.1 知识总览

4.2.2 内存空间的分配与回收

4.2.3 内存空间的扩展

4.2.4 地址转换

        

4.2.5 内存保护 

 

4.2.6 知识回顾与重要考点

4.3 覆盖与交换

4.3.1  知识总览

4.3.2 覆盖技术

4.3.3 交换技术

4.3.4 知识回顾与重要考点

4.4 连续分配管理方式

4.4.1 知识总览

4.4.2 单一连续分配

4.4.3 固定分区分配

4.4.4 动态分区分配

4.4.5 知识回顾与重要考点

4.5 动态分区分配算法

4.5.1 知识总览

4.5.2 首次适应算法

4.5.3 最佳适应算法

4.5.4 最坏适应算法

4.5.5 邻近适应算法

4.5.6 知识回顾与重要考点

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

4.6.1 知识总览

4.6.2 什么是“地址空间”

4.6.3 什么是分页存储

写在前面: 

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

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

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

4.6.6 问题二:如何实现地址的转换?

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

 

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

4.6.9 逻辑地址结构

4.6.10 知识回顾与重要考点

4.7 基本地址变换机构

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

4.8.1 知识总览

4.8.2 什么是快表(TLB)

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

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

4.8.5 局部性原理

4.8.6 知识回顾与重要考点

4.9 两级页表

4.10 基本分段存储管理方式

4.11 段页式管理方式

4.12 请求分页管理方式

4.13 页面置换算法

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

4.15 内存映射文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21RGHLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值