存储器层次 链接到标题

这个在微机原理里面已经反复学了,相信应该已经背下来了。 这里记一些当时没有提到的细节

快速缓存(Cache) 链接到标题

信息
缓存的依据:程序执行的局部性原理

时间局部性 链接到标题

最近访问的数据很可能会被再次访问 ∴保持最近访问过的内存内容靠近处理器

空间局部性 链接到标题

最近被访问过的内容的附近内容很可能马上还会被访问到 ∴保持最近访问过的内存内容的附近内容也靠近处理器

操作 链接到标题

地址转换与存储保护 链接到标题

警告
没有太看懂ppt中的程序截图部分,猜测这部分内容将在实验课细讲,到时候说不定会清晰起来。

程序的装入 链接到标题

信息
重定位装入方式:在程序装入过程中,将作业中的逻辑地址转换为物理地址的过程
那么我们就来看看三种地址都是什么:

逻辑地址 链接到标题

  • 程序员编写程序时所“看到的” 地址空间
  • 由编译器,汇编器和链接器产生一段从0到N的连续地址空间,程序独占

虚拟地址 链接到标题

  • 程序装入内存时使用的地址空间
  • 加载器使用的一段连续地址空间,进程独占

物理地址 链接到标题

  • 程序运行时实际使用的物理内存地址
  • 通常不连续,多进程共享
    提示

    下面是我对三种地址以及之间关系自己的理解

    • 逻辑地址是在程序编译时产生的,想爱你大纲与是对于一个程序内部产生的,虚拟地址是在程序加载到内存准备执行时使用的地址。也就是说是对于一堆程序产生的可执行文件的一个排队。
    • 上面的两种地址人理论上都能看懂的,CPU也能理解看懂,都是连续的。
    • 物理地址是实际的内存地址,通常是不连续的。也就是说,物理地址是由操作系统分配给进程的内存地址。
    • 一般情况下,虚拟地址是大于物理地址的,通过分时进入实现了“虚拟”地址的幻觉。

分页存储管理 链接到标题

基本架构 链接到标题

主要解决逻辑地址(虚拟地址)连续使用与物理地址非连续分配之间的矛盾。

信息
从数学的角度去理解就是建立了一种映射关系,从而对物理地址起到翻译的作用,从而能从逻辑地址快速定位到物理地址。
因此这个映射结构应该有三个部件:

  • 页面:表示的是虚拟的逻辑地址空间被划分为固定大小的单位,虚拟地址是CPU直接提供的。
  • 页表:表示的是逻辑地址与响应的物理地址之间的映射关系,相当于就是函数关系
  • 页框:表示的是物理地址空间,是数据以及命令真正存在的地方。
    警告
    注意,因此上面的三种架构都只是架构,不是实际的内容,是一种对虚拟地址以及物理地址的划分。

逻辑地址的划分 链接到标题

但也正是由于有了这样的划分,逻辑地址可以写成页的形式(更加好调控),比如下面的三个地址

页号p 页内偏移地址d
0 0x0000
1 0x0124
2 0x03FF

若页面大小为L,计算逻辑地址A的公式为 $$ A=pL+d $$

物理地址的划分 链接到标题

同样的,在页框系统区的物理地址也可以划分为页框号和页内偏移地址两部分

页框号p' 页内偏移地址d
注释
逻辑地址的页内偏移地址d和物理地址的页内偏移地址d是相同的!

映射过程 链接到标题

从上面的知识,从抽象上来说逻辑地址A和物理地址P应该有一个直接的映射关系,然而在分页管理中这种管理是未知的,知道的事根据页表所得到的偏移量之间的关系,

所以映射过程应是这样的:

  • 已知逻辑地址$A=pL+d$,
  • 已知页表$T[p]$,即知一个函数关系$p’=T[p]$
  • 获得物理地址$P=p’L+d$

来一道题巩固实践一下(题目来自于ppt)

例子

在1个16位的分页存储管理系统中,页面大小为4096B,有64KB物理内存,现有逻辑地址2F6AH,且第0、1、2页依次放在第10、12、14号物理块中,试问相应的物理地址是多少?

解:

  • 页面大小:$2^{12}B$
  • 逻辑地址总量:$2^{16}B$(由16位可知)
  • 页数:$\frac{2^{16}}{2^{12}}=2^4=16$页
页号p 页内偏移地址d
2 0xF6A
  • 页表为:
页号p 页框号p'
0 10
1 12
2 14

由此读出物理地址的页框号为14,页内偏移地址不变为0xF6A

物理地址p' 页内偏移地址d
14 0xF6A
  • 物理地址为:$P=p’L+d=14*2^{12}+\text{0x}F6A=\text{0x}3A6A$

理解了上面的例题,这一块应该就没有问题了。

快表 链接到标题

相当于是一个个性化设置,将最近常用快页表直接放在CPU中,加快存取速率,但如果没有命中则仍然需产生缺页中断调来页表, $$ \text{平均访问次数}=\text{命中率}\text{快表访问次数}+\text{缺页率}\text{缺页处理时间} $$

具体的算法很快就要讲到。

页面装入、分配、清楚、替换策略 链接到标题

有兴趣自己看ppt。

分段存储管理 链接到标题

  • 按程序的逻辑关系划分为若干个程序段
  • 一个程序占据多个虚拟地址空间,那么不同的段可能有同样的虚拟地址空间
  • 段表比页表丰富。
段号 段基址 段长
0 0x0000 0x100

也就是对于逻辑地址(段号,段内偏移地址)来说,映射出两个量

分段VS分页 链接到标题

分段 链接到标题

  • 分段是信息的逻辑单位,由源程序的逻辑结构所决定,用户可见
    提示
    也就是说分段将严格讲数据和指令分开,分页则不一定
  • 段长可根据用户需要来规定,段起始地址可从任何主存地址开始
  • 分段方式中,源程序(段号,段内位移)经连结装配后地址仍保持二维地址结构

分页 链接到标题

  • 分页是信息的物理单位,与源程序的逻辑结构无关,用户不可见
  • 页长由系统确定,页面只能以页大小的整倍数地址开始
  • 分页方式中,源程序(页号,页内位移)经连结装配后地址变成了一维地址结构

页面替换算法 链接到标题

OPT 链接到标题

  • 这完全就是上帝算法,即完全已知之后每一次调度将要用到那一个页面,从而精准替换掉最久不用的页面。
  • 因此这个算法可远观而不可亵玩焉,无法实现,但可以作为一个参考来衡量比较其他算法的优劣以及在这一种调度情况下最优调度情况。

FIFO 链接到标题

很简单的一个思路,就是先进先出,最早进入内存的页面最先被替换掉。

SCR 链接到标题

  • “第二次机会页面”,在FIFO的基础上加入“引用位”。
  • 至于效率是否能较FIFO有所提高呢?不一定,具体情况具体分析。

LRU 链接到标题

每一次调用都会将页面刷新到最前面

Clock 链接到标题

时钟页面替换算法,相当于建立了一个循环,

警告
除了OPT算法外,其他算法都没有完全的优劣之分,具体情况具体分析。