comp1521-虚拟内存

网友投稿 708 2022-11-16

comp1521-虚拟内存

comp1521-虚拟内存

0 理解虚拟内存

0.1 RAM中运行一个进程

0.2 RAM只能运行一个进程,部分RAM作为内核空间,可运行操作系统,只有特权模式下能访问kernel space

0.2 RAM运行多个进程 + 操作系统

如果多个进程驻留在RAM中,O/S可以快速地在它们之间交换执行。

属于其他进程的RAM &内核必须受到保护,也就是说用户进程和内核进程的地址,只有自己能访问,其他进程无法访问。硬件支持可以限制进程访问RAM的特定段(区域) 但是!​​​程序可以加载在RAM中的任何地方来运行​​​,也就是说,上一次指令加载在0开始的地址,下一次加载到了100开始的地址。 所以,使用绝对地址的指令,会报错。 解决方法:

要么程序不能使用绝对内存地址(可重定位代码)要么代码必须在运行前修改(重定位)-有些代码不支持执行前修改

主要限制-如果程序可以假设总是有相同的地址空间,那就更好了,这种模式在现代计算中很少使用。

0.3 RAM运行多个进程 + 操作系统 + 虚拟内存

程序真正使用的地址,是逻辑地址。每个程序执行时,都认为从0地址开始。 逻辑地址需要翻译成真正的物理地址。

1 虚拟内存和页表

​​虚拟地址​​​的每一个代码段叫页Page 所有的页都相同大小P 第I页放置的地址是:[I * P, (I + 1) * p] 这样的情况,可以使用数组来翻译地址(虚拟-》到物理)。

每一个进程都有一个这样的翻译数组,叫页表。page table 每一个数组元素是页所对应的物理地址 对于虚拟地址V, page_table[V / P] 存放的就是V的物理地址那一段的起始地址。V / P相当与页的编号。 V 的物理地址是:page_table[V / P] + V % P

页码和帧码做一个映射,偏移量直接对应。

2 懒惰加载

这种类型的虚拟内存有副作用:虚拟→物理地址映射不需要加载进程的所有页面。 根据需要加载进程的页,对应的物理内存的size可以增加。 这种: 将进程的内存空间分为多个固定大小的页, 根据需要加载页到物理内存的机制 叫做虚拟内存。

页表

工作集working sets

通过观察,每一个进程任一(时间窗口,比如100ms内)真正访问的地址都是比较少的一些页,这种所有页的子集叫工作集。

所以,进程的地址空间可以更大,因为其实只有一部分在物理内存中,剩下的在哪里?就在swap的磁盘空间里。

加载页面

处理页错误

访问没有被加载到内存中的页,被称为页错误。

页替换 LRU

只读页 (库代码在只读页)

翻译查找缓冲区TLB = translation lookaside buffer

缓存

高速缓存使内存访问(例如lw, sw)更快 完全在硅上实现的高速缓存内存,通常与CPU在同一芯片上 独立于虚拟内存(适用于物理地址) 保存最近使用过的小块RAM 高速缓存块也称为高速缓存线 缓存块的典型大小(行)64字节 CPU硬件(硅)加载或存储地址时首先在缓存中查找

如果块包含地址在那里,缓存被使用

对于加载操作,使用缓存中的值对于存储操作,缓存中的值会改变在这两种情况下,都比访问RAM快得多

如果不是,则将包含地址的块从RAM中取出到缓存中可能会移除现有的缓存块可能需要将其内容写入(刷新)到RAM缓存替换策略与虚拟内存有类似的问题现代CPU可能有多个(3+)级别的缓存

随着多核的发展, CPU Cache分成了三个级别: L1, L2, L3. 级别越小越接近CPU, 所以速度也更快, 同时也代表着容量越小. L1是最接近CPU的, 它容量最小, 例如32K, 速度最快,每个核上都有一个L1 Cache(准确地说每个核上有两个L1 Cache, 一个存数据 L1d Cache, 一个存指令 L1i Cache). L2 Cache 更大一些,例如256K, 速度要慢一些, 一般情况下每个核上都有一个独立的L2 Cache; L3 Cache是三级缓存中最大的一级,例如12MB,同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个L3 Cache.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ByteArrayOutputStream与InputStream互相转换方式
下一篇:poj 1088 记忆化搜索||动态规划
相关文章

 发表评论

暂时没有评论,来抢沙发吧~