一,快表
快表之所以快是因为它是一个cache,然后是一个CPU里面的寄存器,所以访问他不算访问内存一次,但是我们做题的那个页表,他就是在内存里面,这是一个要注意的地方!!!
所以如果快表命中了,只需要访问内存1次!!!
如果快表没命中,则到内存中访问页表,算一次,再通过页表得到的物理块号和页内地址得到的物理地址,根据这个物理地址再访问一次内存,所以又加上一次,一共2次。所以如果快表没有命中,则需要访问2次内存。
访问内存次数 | 快表命中 | 快表没命中 |
---|---|---|
快表 | 1 | 2 |
二,分段的地址访问
段号 | 段长 | 段基址 |
---|---|---|
0 | 1K | 6k |
1 | 600 | 4K |
2 | 500 | 8K |
3 | 200 | 9200 |
对于
<段号,段内地址>
< 0 , 500>
< 1 , 500>
< 2 , 500>
< 3 , 500>
< 4 , 500>
的地址访问
地址访问的检查如下:
1⃣️先检查段号是否越界
2⃣️查看要访问的段内地址是否超出了段的长度
< 0, 500>访问了0号段,段内地址是500,由于0号段段长是1000,比500大,所以没有越界
<1,500>访问了1号段,要段内地址是500,但是1号段段长是600>500,所以没有越界
<2,500>正常,
< 3,500>访问3号段,访问的是3号段的500的位置,就是9700的位置,
但是3号段有效的访问地址是9200~9399所以9700越界了,
<4,500>访问4号段,但是目前只有0~3号段,所以是段号越界了
三,请求分页
1.请求页表机制
页号 | 物理块号 | 状态位P | 访问字段A | 修改位M | 外存地址 |
---|
1⃣️状态位:判断该页是否在内存中
2⃣️访问字段A:记录本页在一段时间内被访问的次数或者本页最近已有多长时间未被访问
3⃣️修改位:标示该页调入内存中后是否被修改过。修改过就需要把内存上的页写回到外存,没修改过就不写回外存,避免重复的IO
4⃣️外存地址:指出该页在外存上的地址,通常是物理块号,我觉得这里就是表示位示图中是第几个内存块号
请求分页的困难之一是很难做动态增长,但是分段可以很好的解决这个问题。
2.缺页中断机构
缺页中断和普通中断的共同点:
产生中断时都需要经历“保护现场”,“分析原因,处理中断”,“恢复现场”
缺页中断和普通中断的区别
1⃣️普通中断就是执行完指令才检查是否有中断请求,否则执行下条指
令。但是缺页中断就是在指令执行期间,如果访问的指令或者数据不在内存中时,便立即产生和处理缺页中断信号,以便能及时把所缺页面调入内存
2⃣️一条指令在执行期间可能发生多次缺页中断。
3.地址映射(Address Map)
四,请求分段
1.请求段表机制
段名 | 段长 | 断基址 | 存取方式 | 访问字段A | 修改位M | 存在位P | 增补位 | 外存始址 |
---|
***存取方式:应用程序中段时信息的逻辑单位,可根据信息的属性对他实施保护,故增加存取方式字段,如果字段为2位,则存取属性是只执行,只读和允许读/写。
增补位,请求分段式管理中特有的字段,表示本段在运行程序中是否做过动态增长。***(这两个考试都考过)
外存始址:指示本段中在外存的起始地址,即起始盘块号。