
(以下内容全部出自上述课程)
目录
- 内存的基础知识
-
- [1. 什么是内存,有何作用](#1. 什么是内存,有何作用)
- [2. 指令的工作原理](#2. 指令的工作原理)
- [3. 装入的三种方式](#3. 装入的三种方式)
-
- [3.1 绝对装入](#3.1 绝对装入)
- [3.2 可重定位装入](#3.2 可重定位装入)
- [3.3 动态重定位](#3.3 动态重定位)
- [4. 从写程序到程序运行](#4. 从写程序到程序运行)
- [5. 链接的三种方式](#5. 链接的三种方式)
- [6. 小结](#6. 小结)
- 内存管理的概念(熟悉)
-
- [1. 内存空间的分配与回收](#1. 内存空间的分配与回收)
- [2. 内存空间的扩展](#2. 内存空间的扩展)
- [3. 地址转换](#3. 地址转换)
- [4. 内存保护](#4. 内存保护)
- [5. 小结](#5. 小结)
- 进程的内存映像
- 连续分配管理方式
-
- [1. 单一连续分配](#1. 单一连续分配)
- [2. 固定分区分配](#2. 固定分区分配)
- [3. 动态分区分配](#3. 动态分区分配)
- [4. 小结](#4. 小结)
- 动态分区分配算法
-
- [1. 首次适应算法](#1. 首次适应算法)
- [2. 最佳适应算法](#2. 最佳适应算法)
- [3. 最坏适应算法](#3. 最坏适应算法)
- [4. 邻近适应算法](#4. 邻近适应算法)
- [5. 小结](#5. 小结)
内存的基础知识

1. 什么是内存,有何作用
例子:
8GB-->内存 64GB-->外存
房屋是人类的家,那么,内存就是数据的家。
1个存储单元=(存储单元是房子,下面的就是房子的大小)
- 1个字节=8个字(按字节编址)-->有钱人,按栋买房子
- 1个字=XX字长=XX个二进制(按字编址)-->普通人,按个买房子

按字节编址,最后就需要用字节表示存储单元的大小。
按字编址,最后就需要用字或者多少位的二进制表示存储单元的大小。

2. 指令的工作原理
准备工作:先把所有指令全部存入内存的程序段中,将需要的数据存入数据段中
指令1 --传入--> CPU --执行--> 将10赋值给寄存器中的存储单元(注意地址编号)

指令2 --传入--> CPU --执行--> 寄存器中的10进行加1操作

指令3 --传入--> CPU --执行--> 将寄存器中的数字传回地址为...的存储单元内。

如上图所说,我们进行指令操作时,都是直接用的给出的固定地址,那如果地址是随便儿分配的,指令还能正常执行么?
这里就引出了逻辑地址,也叫做相对地址,比如小明坐在一排一位、小红坐在一排二位,有具体编号的,这是绝对地址 。
如果我们说,小红坐在小明的右边,和别人比对了一下,通过别人找到这个人,这就是相对地址 ,也就是逻辑地址 。
将上述的指令的地址转换为逻辑地址的话,我们的思路就是,将这个数值放在某某指令下面,距离这个指令多少多少距离。

但是在内存中我们只能存放物理地址,不能存放逻辑地址,所以我们就要考虑怎样才能把左侧的可执行文件(就是上面的所有指令打包起来,类似于带main的可执行Java代码,纯类比,逻辑并不严谨)中的逻辑地址,在装入内存后转换为内存中的物理地址。

3. 装入的三种方式
3.1 绝对装入
这个是提前知道自己的位置,然后在装入前直接改好 ,再进行装入。

3.2 可重定位装入
这个是在装入过程中直接边装入边修改 地址。

3.3 动态重定位
这个是装入就直接装入,装入的还是逻辑地址,等到运行的时候 才会修改,转换为物理地址。

4. 从写程序到程序运行

5. 链接的三种方式
和装入的三种方式类似,都是前中的分类。
静态:运行前连接。
动态:边XX边连接。

6. 小结

内存管理的概念(熟悉)
1. 内存空间的分配与回收

2. 内存空间的扩展

3. 地址转换
就是上面的装入的三种方式。


4. 内存保护



5. 小结

进程的内存映像


连续分配管理方式

1. 单一连续分配
内存-->一个小区
系统区-->物业
用户区-->可以住人的地方
进程-->买房的客户
内部碎片-->好比我这个房子买来收租的,有个房间没租出去,这就是内部碎片
外部碎片-->这个小区有房子一直没卖出去
单一连续分配就是,这个小区每次只卖给一个人一个房子,这个人走了才会卖给另外一个人。
怎么这么像招了一个小区门卫(误)

2. 固定分区分配
就是这个小区里的房子的大小都一模一样。
想要小房子的人只能买这个适中大小的房子,想要大房子的也只能买这个大小的房子。


3. 动态分区分配
定制化卖房,户主想要多大的房子到时候就直接定制化施工。










4. 小结

动态分区分配算法

1. 首次适应算法
顺序:地址从低到高,找第一个。

2. 最佳适应算法
顺序:容量从低到高,找第一个。

3. 最坏适应算法
顺序:容量由高到低,找第一个。

4. 邻近适应算法
变为循环链表,依次查找。

5. 小结


