CYueblog

导航

内存

1.什么是内存:可以理解为在计算机里一个一个的小欧房子 里面存储一个一个数据 字编址和字节编址 就是多人间跟单人间的区别

2.指令的工作原理其实就是操作码加若干参数 你在idea写的软件经过编译成为机器指令 就是把参数放在那里 进行什么操作得出结果

在这里就有三个步骤要看 1.放入地址 任何一个进程分为三个快 pcb 程序块 和数据块 程序块和数据块排序总得有个规律这就涉及到了相对地址 我说我的指令在100处命令x放在80 其实是想放在180 怎么处理呢 三个办法 

1.进来的时候自己判断在180,2装入时算法判断直接加100 3.cpu里有一个重定位寄存器 他来判断

还有就是 我来装入时代码块一定分成很多细碎的块 怎么判断他们链接呢 三种办法

 

 内存管理的概念:

1.内存你要咋分配 分配完了要回收 2.你要进行一个虚拟内存 运行一个比你的时间大得多的东西 3.你要内存保护 就是一个指令只能访问它本身 不能越界

.内存空间的扩充 覆盖技术不常用主要是交换技术 

交换技术 在内存紧张时 把一些阻塞或者优先级低的进程挂到外存的交换去中 外存由交换区和文件区组成 文件区慢 但是一定要注意 pcb留在内存里 等待进程唤醒 一般放在挂起队列里

 

 

 

 块表:空间局部性时间局部性 就是有些程序总会频繁访问一个进程

这样我们可以设计一个速度高的块表 把频繁访问的数据放在里面

 

 

 

 节省时间

两级页表:单机页表存在的问题:我的一个页面大小是4k 页表项长度书4b  我的逻辑地址有32位 也就是说 我的页内偏移量要记录2的12次方 12位 那么还剩下20位是记录进程的 长度为22位 而也变长素是12位 也就是说我要有2的10次方个连续地址 这显然是不合理的

所以提出了多级页表 就是把单机页表在拆分成页表大小的样子 分散放 由二级页表统一管理

分段:

 

 分段跟分页类似 只不过分段把分页的分成整个区间变成了 按照每个函数区分 在段表出设立了段长 和之前一样

段页式:分段的缺点是会有碎片 分页的缺点是 会把完整的程序分开 那么我们可以先分段 后分页

 

 先利用段表查找页表的位置 然后查找页表找到位置

虚拟内存:

 

 虚拟内存中的页面操作:

1.和之前不同的是 因为虚拟内存需要换入换出 所以应该在页表项里加入几个新的标志位 1.外存的地址调入时好找 2.是否被修改 3.

 
 在不在内存里标志位4.最近访问过几次?
要注意 :当我想访问但是没有的时候 产生缺页中断 这事可修复的 所以叫内中断 幻夜的过程是 1.需要 看看标志位 两种情况 内存够直接调 掉完记得更改标识符 2.内存不够先换出一个 出的那个看看是不是修改了 修改了要重新写入 改变两个的页表标识符
页面置换算法:
1.最佳置换 把最近一段时间醉酒没访问的页面置换 这个算法像开了上帝视角 根本没法实现
2.先进先出 就是把放入内存的看成是一个栈 每次缺页都是栈顶先出去
3.最久未访问,就是缺页时候倒着查询 看看上一次最晚访问了谁 把谁拿掉

 

 

4改进的时钟 因为你再写入的时候 修改位置被动了 你也访问了 所以要是能考虑一下是不是被访问就完美了 我们用一个坐标来表示(1.1)表示最近访问过 修改过 第一次找0.0 找不到第二次找 0.1 找不到完美的就退而求其次 把所有第一个1改成0
页面分配策略:
1.驻留集:就是我的内存为你的进程分配空间的大小
有几种分配 1.固定分配:我只给你分配固定的大小2.可变分配:我给你分的大仙可以改变  置换开始先看看内存有空吗1.局部置换 你要是缺页还没空只能从你自己的进程里置换2全局置换 要是缺页还没空 还能抢别人的
固定分配没有全局变量 那么只有三种组合 固定局部 这个没啥好说的 可变全局 弊端是 你抢了别人的 别人咋办 可变局部 最好 你自己先换着 太频繁我就帮你扩大驻留集
2何时调入?
1.在作业一开始的时候利用局部性原理 把想要的邻近的调入内存
2.调入之后 缺水调谁
3哪里调入?外存一般有两个区 交换区和文件区 交换区快但是小 
1交换区够 都交换区
2.交换区不够两个办法
 1.不修改的放文件区 只要有修改放入交换区然后交换
 2.第一次调入文件区 在文件区 调出的都写会交换区
抖动颠簸现象 驻留集不够大 频繁换页
 
 

posted on 2022-05-10 20:08  唱月CY  阅读(91)  评论(0编辑  收藏  举报