专题1-MMU-lesson2-深入剖析地址转化

1、地址转化总体分析

level one fetch和level two fetch分为一级转换和二级转换。

由上图右边可以看出,首先通过TTB(Translation Table Base)寄存器找到转换表基地址,该表有4096项,然后用虚拟地址的[31:20]位来找该表里面的表项,再检查该表项最后两位如果为00,则无效转换,如果为01,则是粗页转换,为10为段转换,为11为细页转换。

关于转换表的简单描述

首先,转换表是存放在内存当中的;然后,这张表是由工程师来编写的,工程师然后把该表的首地址放到TTB中,然后把TTB的值写入cp15寄存器中的c2寄存器,那么在MMU工作的时候,会直接去cp15的c2寄存器当中去取该地址,那么就可以找到转换表的首地址了。

2、段转换方式

当找到转换表中的表项之后,会取出该表项的高12位,

3、细页转换

从转换表的表项中找到细页页表的基地址,然后从虚拟地址的[19:10]位来找到细页页表里面的表项,然后检测该表项的最后两位为00则无效,为01则找到大页基地址,然后用虚拟地址的[15:0]来找具体的表项,就是我们要找的物理内存;为10则找到小页基地址,然后用虚拟地址的[11:0]来找具体的表项,就是我们要找的物理内存,为11则找到极小页基地址,然后用虚拟地址的[9:0]来找具体的表项,就是我们要找的物理内存。

时间: 2024-08-03 10:59:58

专题1-MMU-lesson2-深入剖析地址转化的相关文章

点分十进制形式的ip地址转化为十六进制数

#include "csapp.h" /*本代码将点分十进制形式的ip地址转化为十六进制数并且输出*/ //返回一个字符串代表的整数 int str2int(char *str) {   //要注意变量的初始化   int value=0;   //字符串长度   int length = strlen(str);   //基数   int base=1;   while(--length!=0) {     base*=10;   }   while(*str!='\0') {   

vrrp ,网关冗余,浮动路由,pat地址转化,web服务器映射

实验名称:vrry ,网关冗余,浮动路由,pat地址转化,web服务器映射 实验拓扑图: 3.实验目的:1 .使内网可以访问web服务器 -server4 2. 配置vrrp使网关冗余备份,并且链路追踪 ,并且配置浮动静态路由 3 映射内网web服务器,使外网client5可以访问 4.                    ip地址规划 :  内网 :  vlan 1 0  : 192.168.10.1           192.168.10.2 vlan 10的网关: 192.168.10

深入剖析mmu地址转化

mmu(内存管理单元),是arm区别于单片机的标志之一,虚拟地址转化分为3种,常见的如下2种. 段式转化如下,由表像中的基地址加偏移地址,(细页转化跟段式转化类似,多了一个2级页表,把虚拟地址0-20中间又分割了下,作为2级页表)

IP地址转化为数字,charindex ,SUBSTRING

SET NOCOUNT ON; declare @I_PCity table ( IPStart nvarchar(255), Area nvarchar(255), CityID int, IPID int ) declare @IPStart nvarchar(255), @diana int, --存放点 @dianb int, @dianc int, @liea bigint, -- 存放列 @lieb bigint, @liec bigint, @lied bigint, @intlo

2.1MMU的知识

? Loop.c的代码是: Loop.c的代码是: 最后两个程序的运行结果: 我们看到两个程序里的地址是一样的.这是怎么回事呢!? 这就是我们今天的重点:MMU内存管理单元. ? ? ? ? ? MMU的作用:两个 上面是虚拟地址和物理地址的转化. 在上面的两个程序中,输出的都是虚拟地址,MMU会将虚拟地址转化为对应的物理地址.上面的两个虚拟地址是相同的.为什么转化后会变成不同的物理地址呢?这是因为我们的MMU对于不同的进程,他是有不同的转化和映射关系的.如上图. ? ? ? ? ? ? ? ?

域名转化到IP地址的实现

在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname().gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化.其中gethostbyname()是将主机名转化为IP地址,gethostbyaddr()则是逆操作,是将IP地址转化为主机名. 函数原型: 1 #include <netdb.h> 2 3 struct hostent* gethostbyname(const char* hostname); 4 5 st

怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结

最近一直在看全国计算机三级网络技术这本书,看到第二章的时候,不免会遇到计算机中最常用的进制转换问题.什么IP地址,什么子网掩码,什么网路地址,什么广播地址都会用到二进制和十进制的相互转化,而且最常用的是8位二进制数一组的转化,这就来总结相互转化最快的方法. 首先来认识标准分类的IP地址: IP地址是由网络号与主机号组成的,长度是32bit,用点分十进制方法表示,这样就构成了标准分类的IP地址.常用的A类.B类.C类IP地址采用包括"网络号-主机号"两层结构.通常采用x.x.x.x的方式

ARM 原理MMU

分类: 嵌入式 原文地址:嵌入式Linux之我行——ARM MMU工作原理剖析 作者:y307921462 一.MMU的产生       许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序.但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割

操作系统 内存地址(逻辑地址、线性地址、物理地址)概念

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分.例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干.只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换):逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段.数据段如果完全一样).应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是