CSAPP第九章 虚拟内存

news/2024/11/28 3:32:51/

概述

程序是存放在虚拟地址空间中,运行是在物理空间中,如何进行转换是虚拟内存需要研究的问题。 

 完成逻辑地址到虚拟地址再从虚拟地址到逻辑地址映射的机构叫MMU 

两个部件 段式管理和页式管理

之前有提到,cache的管理是通过cache映射表,但是虚拟内存到物理内存每一次映射都需要一次翻译的过程,如果每一次都查表的话,速度就会降下来,所以引入数据结构页表 页表是DRAM是放在内存里

 三种状态已缓存 未缓存 未分配  DRAM是全相联映射 ,页表是存放在内存中

 页命中 有效位是1

CPU内部使用的是虚拟地址 

 

几个基本概念 页表条目 PTE 有效位 页表 页表是存放在CPU中 存储芯片是DRAM 

又是程序局部性救了我们

每个进程可以共享物理空间

 程序运行时不用真正去执行,建立好映射,这样程序可以直接运行在虚拟空间上

 页面的保护

首先我们回顾之前的缓冲区溢出攻击

 这个函数的目的是读取缓冲区的数据将其存入栈中,地址在栈中是以小端法的方式储存

地址翻译过程

 命中地址翻译完成过程,因为都是由硬件来完成所以速度很快。

 PTEA是物理地址 知道PTA就知道PPN,又因为VPO和PPO是相等的 所以做一下拼接就变成乐物理地址

 利用TLB快表加速存储器的访问

通过上图可以知道 无论页面是否命中 都要访问两次MMU 也就说至少要访问两次缓存cache,而主存的速度显然没有cache中的L0速度快,为了加快访存速度,我们引入硬件结构快表,

 程序的局部性 页表存的数据是4K或者4M很大 所以命中率很高。

一个PTE是四个字节 一个页面是4K 一个页面可以放4KB/4个PTE

 根据映射计算页表条目数量 根据映射原理 第K级页表数量是2 ^ K次方

 虚拟内存-----系统

 一个小内存系统的例子

 采用四路组相联的方法 就是每个组有四个块 设计地址格式 有2个位置用于标记组号 5位标记块内地址,TAG位用于标记比对 Valid检查条目是否有效 TAG表示高位地址 

Cache 

 从虚拟内存到 物理地址cache 进而查找是否命中的例子 先划分地址的层次结构 ,因为是16组直接映射所以留下PPN中的四个位置标记,然后根据虚拟 地址的VPN查表得到是否命中  发现命中得到条目  得到条目之后和VPO或者是PPO拼接成物理地址 再对比cache 因为是组相联 查组是11 第三组  

 看第五组有没有tag是0D的块 然后读出第0个字节36

如果没有命中 他会上缓存中找 缓存中没有再去主存中找

Core i7的地址翻译过程

 进程的虚拟地址空间分配

 回忆我们第八章缺页异常的例子 他是一个当如果发现没有内存的时候 他会创建一个物理页面。


http://www.ppmy.cn/news/62873.html

相关文章

SIM800C模块AT指令测试(三)语音功能相关

1. 紧急呼叫操作 每个国家区域的紧急号码不同,客户可通过AT指令设置需要的号码,最多可以设置11个。 ATCEMNL? CEMNL: (0-1),(1-11),("0"-"999")... OK ATCEMNL1,3,“112”,“000”,“911” // 设置紧急号码 OK AT…

块状链表实现BigString大字符串操作(golang)

前言 块状链表是介于链表和数组之间的数据结构,能够在 O ( n ) O(\sqrt{n}) O(n ​)时间内完成插入、删除、访问操作。 数据结构如图所示。假设最大容量为 n n n, 则它有一个长度为 s n s\sqrt{n} sn ​的链表。链表中每个结点是一个长度为 2 n 2 \times \sqrt{…

配置本地Angular环境并使用VsCode调试Angular前端项目

配置本地Angular环境并使用VsCode调试Angular前端项目 配置本地Angular环境部署Node.Js本地环境配置一下环境变量 使用vscode调试Angular安装vscode 配置本地Angular环境 部署Node.Js本地环境 1 从官网下载node.js, 本文为(v16.13.0) 下载地址: https://nodejs.org/dist/v16.…

硬件设计 之 PCIe常用知识

以下是本人在自己在设计PCIe中常遇到的一些知识,对他们进行了简单整理一下,包括基本定义、传输速率、layout要求等。比如作为硬件工程师要了解芯片架构,哪些PCIe接口可以使用,使用这些PCIe要做什么,需要使用PCIe x1还是…

GRPC - JAVA笔记

GRPC - JAVA笔记 gRPC简介 由google开源的一个高性能的RPc框架,由google内部的Stubby框架演化而来。2015年正式开源。云原生时代的RPC标准,由Go语言开发 gRPC的核心设计思路 网络通信 ------> gRPC 自己封装了网络通信的部分,提供了多种…

为什么越来越多的 IT 人考软考?

近几年随着国家计算机与软件技术的发展,每年报名参加软考考试的人也越来越多。据工信部新闻发布会消息,计算机软件与通信专业技术人员职业资格考试累计报考人数超过485万,2022年报考人数129万人。 为什么越来越多的IT人考软考证书&#xff1…

代码随想录复习 707设计链表 翻转链表,两两交换节点

代码如下 type Node struct { //定义一个节点 ,包含一个数据变量一个指针 Val int Next *Node } type MyLinkedList struct { //定义一个链表 ,链表里面有一个虚拟头节点,和大小 Dummayhead *Node Size int } func Constructor(…

5月7日 2H55min|5月8日8H50min|时间轴复盘|14:00~14:30

5月8日 todo list list4 40min ✅ |实际上用了50+50 list6 40min ✅ |实际上用了30+60 阅读+听力连做 100min ✅ 口语 day01 ✅ 口语 day02 口语 day03