存储系统- 计算机中一条指令的具体执行过程-含计算机组成原理与操作系统知识

157 阅读4分钟

存储系统- 计算机中一条指令的具体执行过程-含计算机组成原理与操作系统知识

存储系统-程序执行过程

程序=指令+数据
不断取指令---执行指令
指令存放在指令寄存器,pc指向下一条指令的起始地址
操作系统建立虚拟地址空间,cpu根据pc地址找到下一条指令,指令执行中可能访问数据
指令内部通过查页表把虚拟地址转换为物理地址 外存调入内存 当执行一条指令的时候,这个指令访问内存里的某一个数据。那CPU怎么知道这个数据的虚拟地址?
指令的基本格式包括操作码和地址码
操作字段指明了指令的功能,加减乘除; 地址码字段指明了这条指令要处理的数据存储在什么什么地方地址码字段又可以被拆分成寻址方式。

当你启动你的APP的时候,你的操作系统会给你的这个APP建立起一个完整的虚拟地址空间。 这个虚拟地址空间通常来说用不完, 虚拟地址空间也就是加载到内存里的数据只有1 GB这么多。 那么,这1 GB的数据放到内存里边,把它拆分成页 管理一个数据结构叫做页表。页表指明了这个进程的某一个虚拟地址和物理地址之间的对应关系
而什么时候需要把虚拟地址转换成物理地址呢?主要两大过程

一个是取指令执行指令,那具体来说就是CPU的PC程序计数器指向了下一条指令的虚拟地址,那要取这个指令的时候,就需要把虚拟地址转通过查页表操作转换成物理地址,再从内存把数据取到CPU

地址转换图

CPU中 有很多寄存器+MMU MAR MDR
CPU内-虚拟地址VA-MMU(memory management unit)(查TLB(快表))-物理地址PA

内存中-页表 CPU要去访问一个虚拟地址的时候。如果这个虚拟地址能够在CPU内部就完成转换,那么它可以直接得到最终的物理地址,不需要再去访存(快表命中 无需访存访问慢表)

CPU是如何判断当前正在运行的进程的页表在内存里存储在什么位置?CPU怎么知道它应该去哪查? --->页表寄存器

这次查到一个页表项之后,会把这个页表项的副本数据复制一份到TLB中。当我下一次想要再访问同一个页框,同一个页面的时候, 就可以直接从TLB当中命中了

页表(始址)寄存器-中已知页表 页表项 页号可以找到页表在内存中的位置

这个页表实质寄存器的值是PCB进程控制块中的一个变量记录
一个进程被调度或者说当这个进程即将上处理机运行时,操作系统会把PCB里边的页表实质给它挪到CPU的页表 那这样的话,当这个进程正在运行的时候,CPU就可以直接根据页表实质寄存器里的值找到它的页表存储在什么位置

cache

物理地址->Cache

image.png Cache行完整构成
Cache行完整构成包括 标记位 有效位 数据块 脏位(修改位)
不同的cache替换算法 标记位不同
cache和主存一致性 :比如cache被淘汰数据写回主存,保证数据一致性,替换信息位也就是修改位\

关键点: 前提: 已知物理地址序列
静态分析:物理地址拆分
动态分析: 给物理地址访问序列\

  1. 直接分析命中率\
  2. 结合数组元素,给 while /for 问访问数组是否发生cache替换(加马甲)\
  3. 给机器级指令

一类:cache地址结构

直接映射: Tag标记位 行号 块内地址
组相联: Tag标记位 组号 块内地址
全相联: Tag标记 位 块内地址\

image.png

关注条件: Cache数据区大小和Cache总容量

  1. 物理地址位数 ( PA位数
    无论是什么映射方式 都受到物理地址位数的影响
  2. cache总行数
  3. Cache块大小
  4. 映射方式 直接映射: Tag标记 行号 块内地址
    组相联: Tag标记 组号 块内地址
    全相联: Tag标记 块内地址
    ⑤写策略 直写法-不需要脏位 回写法-16bit脏位 ⑥替换算法

只写法: 修改cache 主存也同步改
随机替换和其他