端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)

【0】写在前面-为什么需要虚拟存储器?

0.1)定义:虚拟存储器其实就是借用了磁盘地址空间,还记得当初我们安装CentOS,划分的swap 文件系统吗?

0.2)VM简化了链接和加载、代码和数据共享,以及应用程序的存储器分配:(摘自CSAPP)

  • (1) 简化链接: 每个进程都拥有独立的虚拟地址空间, 且空间范围一致;(它是可重定向目标文件使用相对物理地址的前提)
  • (2) 简化加载: 加载器从不实际拷贝任何数据从磁盘到存储器。每个页初次被调用哦时, 要么是CPU取指时引用, 要么是一条正在执行的指令引用一个存储器位置时引用,VM系统会按需自动调入数据页;
  • (3) 简化共享: 多个虚拟页面可以映射到同一个共享物理页面上;
  • (4) 简化存储器分配: 当需要额外的堆空间, os分配连续的虚拟存储器页面,这些VP可以映射都任意的物理页面,这些物理页面可以任意分散在存储器中;

0.3)我还想多问一句,为什么有了高速缓存,还需要TLB-translation lookaside buffer,翻译后备缓冲器呢?

Reason:

引入局部性原则:

局部性原则保证了在任意时刻, 程序将往往在一个较小的活动页面集合上工作,这个集合
叫做工作集(working set)或者常驻集(resident set)。

换句话说, 局部性原则揭示了一个现象:在一段时间内,我们会反复调入或调入同一个或
几个虚拟页页面;而且,每次CPU产生一个VA时, MMU就必须查阅PTE,
以便将VA翻译为PA, 注意是每次,所以开销很大;

解决方法: 为了消除这样的开销,在MMU中包括了一个关于PTE的小缓存,称为翻译后备缓冲器;

关键点: 所有的地址翻译步骤都是在芯片上的MMU中执行的, 因此执行速度非常快;

你要知道计算机中共有7级存储结构,访问CPU中的存储空间(MMU)的速度比访问缓存的速度可是快了几个数量级的。

【1】说了这么多,看个荔枝(以下TLB + 页表 + 高速缓存 是我们手动模拟的):

【2】题目:说有虚拟地址 0x03d7, 虚拟存储器系统如何将其翻译成物理地址和访问缓存的。

【3】解答:将以上虚拟地址用二进制表示,如下:

我们看到:
VPN=bit13~bit6 =0x0f;
VPO=bit5~bit0 = 0x17;
TLBT(行索引or标记)=bit13~bit8=0x03; 

(这里,为什么我管标记叫做行索引,说到本质,叫其行索引,并没有什么不妥,
因为本实例中,cache采用的是直接映射,即每个组就只有一行,所以行索引在此处无意;
但若cache是采用组相联映射或全相联映射的话,每组就有多行,行索引就起到作用了);

TLBI(组索引)=bit7~bit6=0x3;

相关声明declaration写在前面:

  • d1) 我们这里是考虑命中的情况,当然,如果不命中, MMU需要从主存中取出相应的PTE;
  • d2) PS: 命中与否,是看TLB中是否有请求的PTE;
  • d3)虚拟地址14位,而物理地址12位;

翻译过程: (干货)

  • (1) MMU(MMU存在于CPU中,是硬件)从虚拟地址中抽取VPN=0x0f;
  • (2) 再从VPN中抽取出TLBT(行索引)=0x03, TLBI(组索引)=0x3,用于索引翻译后备存储器TLB;
  • (3) 带着TLBT和TLBI 查看TLB,发现第3组, 有标记位03(当然,这是手动设置的,便于模拟),且有效位=1,故命中;
  • (4) 命中后,将PPN=0D返回给MMU;
  • (5) MMU将PPN=0x0D=bit11~bit6 和 虚拟地址的VPO=0x17=bit5~bit0 连接起来,形成物理地址PA 》》 0x357

  • (6) 如上图所示:我们得到了CT-Cache Tag=0x0D, CI-Cache Index=0x5, CO-Cache Offset=0x3;即得到了缓存标记CT=0x0d,缓存组索引CI=0x5,缓存偏移CO=0x3;
  • (7) 依据CT、CI、CO,查询高速缓存(c图), 第5组的标记位-0x0D, 故命中;
  • (8) 在看缓存偏移是0x3,所以取出块3字节0x1D;

(Attention)

对于CT + CI + CO, 我再说的明白一点: CT就是行索引, CI就是组索引, CO就是块索引;

Bingo!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 08-10

端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)的相关文章

虚拟存储器(2)——端到端地址翻译与多级页表

一.端到端地址翻译示例 上节我们刚把TLB开了个头,多说无益,还是具体来玩个实际例子吧,具体来做一个端到端(虚拟地址到物理地址)的地址翻译示例,来统筹下之前讲的知识点.先来做如下约定: 1.老规矩,存储器按字节寻址,访问也按一字节访问: 2.虚拟地址14位长(n=14),物理地址12位长(m=12),位数上点玩起来方便: 3.页面大小是64字节(P=64),也就是说(p=6) 4.TLB是四路组相联,总共16个条目: 5.L1 d-cache是物理寻址.直接映射的,行大小为4字节,总共有16个组

端到端的数据

端到端的数据 第七章 从网络的观点看,应用程序间彼此发送信息.每个消息只是一个未解释的字符串.然而,从应用程序的观点看,这些消息包含各种类型的数据--整型数组,视频帧,文本行,数字图像等.因此,我们需要考虑如何更好地对应用程序要转换成字符串的各种不同类型数据进行编码. 编码实质上涉及两个问题.第一是接收方能从信号中提取出于传送方发送的消息相同的消息,这就是组帧的问题.第二是尽可能地提高编码效率. 第一个问题,在发送方和接收方看到同样的数据时,就出现了发送方和接收方要统一消息格式的问题,通常称为表

汉诺威现场直击 | 端到端的工业互联网整合展示的七大看点

本文作者:彭俊松博士 今天,SAP天天事继续邀请到SAP中国区副总裁.首席数字官彭俊松博士,为大家带来汉诺威现场速递与展会观察. 在工业互联网红透中国市场的当下,众多的制造企业面临着两个问题: 从业务的角度:如何用工业互联网的理念,帮助企业建立一个完整的业务系统.对于制造企业来说,通常要涵盖从产品的设计一直到产品的销售和服务的整个阶段. 从 IT 的角度:如何为企业搭建一个工业互联网系统,能够不断地根据外部市场和内部需求的变化,在企业可承受的成本范围内,可持续地进行调整和优化? 对于工业互联网平

Kafka端到端审计

概述 Kafka端到端审计是指生产者生产的消息存入至broker,以及消费者从broker中消费消息这个过程之间消息个数及延迟的审计,以此可以检测是否有数据丢失,是否有数据重复以及端到端的延迟等. 目前主要调研了3个产品: Chaperone (Uber) Confluent Control Center(非开源,收费) Kafka Monitor (LinkedIn) 对于Kafka端到端的审计主要通过: 消息payload中内嵌时间戳timestamp 消息payload中内嵌全局index

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的人工智能技术的发展,传统的字符验证已经形同虚设. 所以,大家一方面研究和学习此代码时,另外一方面也要警惕自己的互联网系统的web安全问题. Keywords: 人工智能,Python,字符验证码,CAPTCHA,识别,tensorflow,CNN,深度学习 2   Introduction 全自动区

Android ListView分页加载(服务端+android端)Demo

Android ListView分页加载功能 在实际开发中经常用到,是每个开发者必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了测试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源代码: 服务端: 需要导入图中这几个jar包. 在运行Android端代码前,需要开启服务端: 下面先给出服务端的代码: 类EmpDataSource: package com.android

Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键?

本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). callstats是一家做实时通讯性能测量的公司,他们博客里面提到了实时通讯过程中性能的重要性,下面是博客内容: 性能监控是系统和服务开发的一个重要方面,它可以帮助我们检测和诊断性能问题,并有助于维护系统的高可用性.现如今工程团队都基于数据

Android ListView分页载入(服务端+android端)Demo

Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源码: 服务端: 须要导入图中这几个jar包. 在执行Android端代码前,须要开启服务端: 以下先给出服务端的代码: 类EmpDataSource: package com.andr

Microsoft和Ascend提出的端到端VPN解决方案

尽管Cisco提出的VPN解决方案很吸引人, 但由于它是Cisco公司专有的,当网络中有非Cisco公司的路由器时,显然不能互通.为了解决这个问题,Microsoft和Ascend公司在PPP协议基础上开发了PPTP协议(Point to Point Tunneling Protocol). PPTP协议是在PPP基础上开发的.基于GRE封装的协议,增加了流控制机制. PPTP协议是一个真正的端到端技术,它可建立用户到服务器的直接端到端隧道连接,对于接入路由器NAS和Internet网络来说,这