cs61c Vm

multiprogramming和multiprocessing不一样。多处理是含有多个cpu,而多程序是在单一核上的算法。

多程序是通过时分复用实现,而时分复用是与上下文切换密切相关的。

如果你不仅要把cpu的东西全部换掉,而且还要把内存的东西全部更换掉。所以这不太可能了,因此对于cpu我们是替换,但是对于mem,我们得有一些不同做法。

只有一组寄存器时,将数据保存,具有两组寄存器时,可以假设有两个cpu。现在假设应用程序都是一个进程,一个程序。

内存具有物理限制。这就是虚拟内存。以及虚拟地址。

riscv5说你有4gb的访内存空间,但是主存(ranm)却只有1gb

这可能不行,第一种情况是如果程序的可用空间是4gb,但是实际上的ram是1gb,那么就无法完美填充。同样,如果是两个程序访问了同一个地址,那么最后也会出现冲突才对。

一个在这里写钱,43,一个写生命值,10000,最后我有了10000元钱。

还有一个是按需分页。程序将会运行并且逐渐增加ram的足迹。一开始可能在ram中没有信息,但是随着他们运行,他们将会把更多信息从磁盘加载到内存中。并且把更多信息从内存加载到磁盘。

我们实际上有两个空间,一个是虚拟空间,一个是物理空间。

虚拟内存就是那4个g,每个都觉得自己是4g;而物理空间就是那只有1g的ram。两个空间是通过

翻译的。

我们会看到这个特殊cpu信息。

现在我们先假设没有cache的存在。cpu必须去mem方寸(澳大利亚)。所以你只能要么去内存,要么一路向磁盘。

必须的三个职责,映射物理地址,使用所有空间,进行保护。

实际上虚拟内存概念比缓存早。

用12bit索引每一个元素,cache中我们不会使用某一位的,而只会使用某个块,但是vm中我们可能会具体到某个字节。

os就是这样偷偷翻译的。所以0xffffff实际上是ppn的#1.

因为这就是这个程序查找的空间。

vm不是cache,因为没有空间局部性。

有时可能不同进程映射到了相同页码,这是通过查询当前运行系统的用户这应该是两个用户都读取的某个系统数据。但是我们有写保护页。也就是不能写这个page

对于单个核心,系统上下文不会将东西在内存与磁盘交换。

由于他们其实很大,不能存在cache中,所以实际上,他们存储在内存中,我指的是页表。所以如果我们想要load,我们实际上是两次访存操作。

什么是page 错误。

当你查找一个page时,他其实不在内存中。这是通过给每个page设置一个标志位实现的。page falut说明页无效,说明这个数据不在内存,而是在磁盘中。所以os是预取。是试图将磁盘访问页加载到内存中。所以可以从mem读取数据到cpu。这意味这将页面从磁盘读取到dram,然后将数据写入。如果所有dram写满了,那么 他需要对一些进行驱逐。

我们希望只在内存中进行更新。我们会开启valid标志,如果我们load 信息,因为信息在磁盘中,我们会更新页表。  

如果有256个进程,那就是1gb的页表了。              

我们可以看到page table,一级页表在dram,而二级页表在disk中。只有当一级页表出错时,我们才会调用二级页表。

cpu有一个状态寄存器,sptbr,可以调用页表pagetable,他指向了一级页表。他有的是对于二级页表的ppn,也就是你需要去磁盘,因为磁盘本身地址也有状态位。     

然后我们可以根据他的指向指向level2页表的一些内容。level2页表是有一些在disk,而有一些在dram中的。

最后可以发现,其实数据页也是在内存和磁盘中都有的。注意所有一级页表必须在dram。

看一下页表的占用,其中页表偏移量为12位,vpn是2^20个,所以页表是2^20 x 4B = 2^22 B为什么,因为有20个vpn,而且每个vpn是一个4B的数字。

然后我们看到RAM是16 x 2^22

   

为什么不能把页表放在disk,因为没有一级页表,我们可能会有页表级别的损失,我们想知道是否起码我们的页面在内存中。我们只需要说物理页是否在内存中就行了。即或许我们无法知道每个数据的页信息,但起码可以知道页表的物理地址。

pagetable不储存offset,因为offset不会改变。

一个块可能在这么多位置。

页表和缓存的不同是,页表不会存储数据本身,而只是存储一个索引。实际上有可能的情况是,有一些在磁盘,有一些在内存,所以我们会按需分配。而页表跟踪所有状态,按需更新

cache和页表是独立设计的,而且是页表先设计出来的。

好的翻译应该足够快速,实际上每个指令都需要地址翻译。实际上我们每次都要先从内存中找到页表,然后再访问内存读取数据。而如果是二级页表,就要访存三次了。tlb也是一种缓存。

因为他很小,所以他是全相连的。random或者fifo的。

数据的缓存是通过物理内存,而页表的缓存试试通过vpn进行缓存的。(索引地址)

pc在执行指令,假设是lb指令,我们想得到的是虚拟地址

翻译可能会在的两个地址,一个是使用load指令时,第二是我们尝试访问数据内存时。

所以trap可以设置所有tlb条目无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值