CPU

内存-Cache-寄存器(CPU里)
(1)计算对位进行操作的函数的组合逻辑(ALU);
(2)存储位的存储器元素(寄存器);[貌似速度比cache还快?]
(3)控制存储器元素更新的时钟信号。
(4)cache :Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
至少有哪些寄存器:(3R2C1PWS)

  1. 数据寄存器
    数据寄存器(Data Register,DR)
    数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。

  2. 指令寄存器
    指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令。

  3. 程序计数器
    程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的地址。

  4. 地址寄存器
    地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。

  5. 累加寄存器
    累加寄存器通常简称累加器(AC),是一个通用寄存器。
    累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。

  6. 程序状态字寄存器
    程序状态字(Program Status Word,PSW)用来表征当前运算的状态及程序的工作方式。
    程序状态字寄存器用来保存由算术/逻辑指令运行或测试的结果所建立起来的各种条件码内容,如运算结果进/借位标志(C)、运算结果溢出标志(O)、运算结果为零标志(Z)、运算结果为负标志(N)、运算结果符号标志(S)等,这些标志位通常用1位触发器来保存。
    除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。

MMU:内存管理单元,用于将逻辑地址转化为物理地址【带有TLB】

反转页表

原因:传统页表,因为虚拟空间大于物理空间为什么要虚拟空间大于物理空间?因为虚拟空间=物理空间的话 虚拟内存就没用了hhhh
所以如果每一个虚拟空间设立一个页表,页表会很长。
所以采用反转页表,给物理空间制成制作页表,一个页表。页表项含Index ,PID,v*n,根据虚拟地址和进程的PID和v*n得到index,index的值就为PPN
高级操作系统——第七周【页表置换】
为了增加效率,采用hash查找。设置Table Index,通过pid和v*n对应Table Index上某一项具体怎么对应我也没想清楚。这一项的值即为反置页表的index。又因为可能会有冲突,则在反置页表的每一项增加Next。当查找到某一项时,比对pid和v*n如果相同则该项的index就为PPN,如果不同则根据next找到下一个Index
高级操作系统——第七周【页表置换】

快表

TLB是MMU中的一块高速缓存,也是一种Cache.
TLB的刷新是通过装入处理器中的CR3寄存器来完成.

TLB:特点:按内容并行查找
查找页时,查找TLB与页表同时进行,TLB如果成功则查找页表停止

CR0 是系统内的控制寄存器之一
CR1是未定义的控制寄存器,供将来的处理器使用。
CR2是页故障线性地址寄存器,保存最后一次出现页故障的全32位线性地址。【缺页异常处理
CR3是页目录基址寄存器,保存页目录表的物理地址,页目录表总是放在以4K字节为单位的存储器边界上,因此,它的地址的低12位总为0,不起作用,即使写上内容,也不会被理会。
CR4在Pentium系列(包括486的后期版本)处理器中才实现,它处理的事务包括诸如何时启用虚拟8086模式等

置换方法

v*n=虚拟页表号
VPO=虚拟页表偏移=PPO 物理页表偏移
PPN=物理页表号

页框锁定

为什么要锁定页面?对重要页进行保护不让其换出内存
给每一页框增加一个锁定位
通过设置相应的锁定位,不让操作系统将进程使用的页面换出内存,避免产生由交换过程带来的不确定的延迟
例如: 操作系统核心代码、关键数据结构、I/O 缓冲区

地址查询

例子一:高级操作系统——第七周【页表置换】
查找时间,TLB——页表——CACHE——内存
高级操作系统——第七周【页表置换】
首先查看TLB的结构,虚拟地址由v*n(8位)+VPO(6位)构成,又将v*n划分为TLBT和TLBI。TLBI代表2^TLBI行,图中TLBI占两位,代表TLB表有两行。TLBT代表TAG值,所以根据TLBT和TLBI就可以查看TLB是否有v*n volid

高级操作系统——第七周【页表置换】
再看L1-d-cache。得到的PPN(占6位),PPO(占6位),一共12位,又分为CT,CI,CO。CO代表?,CI代表行数,CT代表Tag值。同样根据其可以得到是否存在B0B1B2B3,三个构成32位地址,即物理地址

例子二:
高级操作系统——第七周【页表置换】
前提字节byte,比特bit位
对于32系统,将虚拟地址0x9fd28c10转换为物理地址
前提明白两点,
第一点:32位系统是二级页表,分别是10 10 12【页目录项 页表项 偏移量】(64位一般是48位 9 9 9 9 12)
第二点:页表一般为4KB,所以对应32位系统,一个页表可以有1024个页表项。
所以在这里的页目录表有两种表示方法【注意实际上两种表示都不会写入页表,页表中只有32位地址,是页表的地址】,
一种根据index作为行号,比如第一项页目录项,第二项页目录项。
另一种是将页目录项具体的地址表示,因为页目录表的地址为0x0045d000,所以第一项页目录项是0x0045d000,第二项是0x0045d0040(一项站64bit)当然上图其实既不是页表也不是页目录表,而是物理地址实际的存储
1:将0x9fd28c10转化为比特 1001 1111 11 01 0010 1000 1100 0001 0000
2:首先查找 页目录项 1001 1111 11(前十位),这里表示的是第1001 1111 11项,因为页表项开始于0x0045d000,那么对应的物理地址应该是 基地址+1001 1111 11*64bit=0x0045d9fc
3:查找页表项,得到页表的地址基地址0x0df2a237。查找页表项(0x9fd28c10中间十位)01 0010 1000 同样,需要转化,得到0x0df2a237+0x4a0=

清除策略

placement:分配页框
replacement置换页框
分页系统工作的最佳状态:发生缺页异常时,系统中有大量的空闲页框
结论:保存一定数目的页框供给比使用所有内存并在需要时搜索一个页框有更好的性能
作法:
设计一个分页守护进程(paging daemon),多数时间处于睡眠状态,可定期唤醒以检查内存状态
如果空闲页框过少,分页守护进程通过预设的页面置换算法选择页面换出内存【实际只是将有效位由1置为0,其他不变】
如果页面被修改过,则将它们写回磁盘
这样,分页守护进程可保证所有的空闲页框是“干净”的 当需要使用一个已置换出的页框时,如果该页框还没有被新内容覆盖,则将它从空闲页框缓冲池中移出即可恢复该页面【直接将0置为1就好】

页缓冲技术

• 目的:提高性能
• 思路
◼ 对于换出的页,不丢弃置换出的页,将它们放入两个表之一:如果未被修改,则放到 空闲页链表 中,如果修改了,则放到 修改页链表 中
◼ 被修改的页以簇方式写回磁盘(不是一次只写一个,减少I/O操作的数量,从而减少了磁盘访问时间)
◼ 被置换的页仍然保留在内存中,一旦进程又要访问该页,可以迅速将它加入该进程的驻留集合(代价很小)

相关文章:

  • 2021-06-23
  • 2021-04-27
  • 2021-05-02
  • 2021-05-27
  • 2021-12-26
  • 2021-10-09
  • 2021-05-21
  • 2021-12-16
猜你喜欢
  • 2021-09-22
  • 2021-09-24
  • 2021-04-22
  • 2021-07-08
  • 2021-10-01
  • 2021-04-12
相关资源
相似解决方案