2011年4月26日

自己对分页机制的认识

摘要: 终于有点搞明白分页机制:其实32位组成的线性地址是虚拟地址,范围是从00000000H~FFFFFFFFH一共4Gcr3决定了页目录基址,线性地址的高十位是页目录项索引值,然后读取页目录项的高20位,得到页表的基址。在与线性地址的中10位形成的偏移值,找到页表项,然后读取页表项的高20位形成页基址,再加上线性地址的低12位形成物理地址。启动分页时,先要建立含有PDE,PTE的表格。这个表格含有1024个PDE,1024*1024个PTE。cr3寄存器的低12位都是0,不起作用,高20位是页目录基址。它保存的是当前活动进程的页目录地址。这张图片结合http://www.cnblogs.com/w 阅读全文

posted @ 2011-04-26 08:52 wanghj_dz 阅读(623) 评论(0) 推荐(0) 编辑

2011年4月25日

WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程(转载)

摘要: 转载于飞天舞者 http://www.cnblogs.com/winston/archive/2009/04/12/1434225.html我们知道,从386开始,IA-32 CPU开始支持Paging。在启用Paging之后,OS将线性地址空间划分为固定大小的Page(通常为4KB或4MB)。本文演示了如何通过WinDbg展示windows paging中的virtual address向physical address转换过程。在现代OS中,涉及到Paging的几个概念如下(以32-bit IA CPU&Microsoft Windows OS为例):Page Directory 阅读全文

posted @ 2011-04-25 23:37 wanghj_dz 阅读(1003) 评论(0) 推荐(0) 编辑

物理地址和虚拟地址1 (MMU)(转载)

摘要: 转载与海天的博客 http://www.cnblogs.com/leaven/archive/2011/04/18/2019696.html原文:http://blogold.chinaunix.net/u3/94700/showart_2434792.htmlMMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。(它具有虚拟地址和物理地址转换,内存访问权限保护等功能,这使得Linux操作系统能单独为系统的每个用户进程分配独立的内存空 阅读全文

posted @ 2011-04-25 23:05 wanghj_dz 阅读(1659) 评论(0) 推荐(0) 编辑

windows内存管理(转载)

摘要: 转载与Kratos的博文:http://www.cnblogs.com/kratos/archive/2009/09/09/1563624.html<<这不是原创,是老文,Pankaj Garg写的,看后翻译了一下,原文可以在http://www.intellectualheaven.com/找到。>>1 介绍Windows 32位 x86 操作系统最多能访问4GB的物理内存。这是因为处理器的寻址总线是32条(我们常说32位),能够访问的存储单位的范围是从0x00000000到0xFFFFFFFF,即4GB。Windows同样允许每个进程拥有自己的4GB逻辑地址空间。4 阅读全文

posted @ 2011-04-25 22:44 wanghj_dz 阅读(882) 评论(0) 推荐(0) 编辑

2011年4月24日

分页机制

摘要: 分页机制使用两级转换表,第一级叫做页目录(Page Directory),存储在一个物理页中.大小为4KB,每个表项4字节,共有1024个表项(Page Directory Entry).每个表项对应第二级的一个页表(Page Table),每个页表也有1024项(Page Table Entry),每个表项对应一个物理页。页目录 顾名思义就是页目录项的组合(1024个页目录项PDE),一个页目录项PDE是4Bety。 整个页目录占据一个4k物理页。 项可以理解为Entry页表 顾名思义就是页表项组合(1024个页表项PTE),一个页表项PTE是4字节,一个PTE对应一个真实物理页,一页是4K 阅读全文

posted @ 2011-04-24 20:31 wanghj_dz 阅读(1733) 评论(0) 推荐(0) 编辑

自己动手写操作系统pmtest1.asm 详细解释

摘要: 段机制轻松体验 内存寻址: 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物理地址 为什么要×16?因为在8086CPU中,地址线是20位,但寄存器是16位的,最高寻址64KB,它无法寻址到1M内存。于是,Intel设计了这种寻址方式,先缩小4位成16位放入到段寄存器,用到时候,再将其扩大到20位,这也造成了段的首地址必须是16的倍数的限制。 公式:xxxx:yyyy 保护模式下分段机制的内存寻址: 分段机制是利用一个称作段选择符的偏移量,从而到描述符表找到需要的段描述符,而这个段描述符中就存放着真正的段的物理首地址,再加上偏移量 一 阅读全文

posted @ 2011-04-24 19:32 wanghj_dz 阅读(1074) 评论(0) 推荐(0) 编辑

retf,call 指令运行的详细情况

摘要: retf,call 指令运行的详细情况call指令的运行情况:(代码段只能从低到高如:ring3到ring0(这时特权级转换了,在不同级之间跳转,这是一致代码段情况)) //call也可以实现同级跳转,这是非一致代码段情况。1、根据目标代码段的DPL,从Tss中选择应该切换至哪个ss和esp //上例中目标代码段为ring0级的LABEL_SEG_CODE_DEST:2、从Tss中读取新的ss和esp,在这过程中如果发现ss,esp或者Tss界限错误都会导致Tss异常(#TS)3、对ss描述符进行校验,如果发生错误,同样产生#TS异常4、暂时性地保存当前ss和esp的值//系统自动完成把rin 阅读全文

posted @ 2011-04-24 13:05 wanghj_dz 阅读(1874) 评论(0) 推荐(0) 编辑

2011年4月23日

从ring0到ring3再到ring0(pmtest5.asm)

摘要: ; ==========================================; pmtest5.asm; 编译方法:nasm pmtest5.asm -o pmtest5.com; ==========================================%include"pm... 阅读全文

posted @ 2011-04-23 20:01 wanghj_dz 阅读(2537) 评论(0) 推荐(0) 编辑

2011年4月22日

3.2.3节:特权级(转载)

摘要: 转载与晨星的博客 http://blog.sina.com.cn/s/blog_56dee71a01009z3i.html原来看第3.2.3节的时候,感觉很难的。为什么会感觉难呢? 因为这一节谈到的特权级别关系比较复杂,不容易弄清楚。这次重看一次这一节后,进行了一点小结,这才感觉比较清楚了。这一节的主要内容可以用下面这个表格来描述。目标代码段Jmp指令Call指令直接调用通过调用门一致码段CPL>=DPL,不检查RPL可以跳转到相同或者更高特权级别执行CPL<=DPL_G,RPL<=DPL_GCPL>=DPL访问调用门的规则同访问数据段,即调用门只能被特权级别不低于其D 阅读全文

posted @ 2011-04-22 22:25 wanghj_dz 阅读(522) 评论(0) 推荐(0) 编辑

2011年4月21日

对pmtest2中两段代码的理解(转载)

摘要: 转载于:http://wenku.baidu.com/view/57a589d249649b6648d74727.html注意一.在由保护模式切换到实模式之前,用normal选择子对段寄存器进行填充。原因: 在切换到实模式之前,把一个指向似乎没有用的数据段的描述符Normal的选择子装载到DS和ES。这是为什么呢?实模式下段描述符高速缓冲寄存器的内容 段寄存器 段基地址 段界限(固定) 段属性(固定) 存在性 特权级 已存取 粒度 扩展方向 可读性 可写性 可执行 堆栈大小 一致特权 CS 当前CS*16 0000FFFFHY 0 Y B U Y Y Y - N SS 当前SS*16 0000 阅读全文

posted @ 2011-04-21 23:31 wanghj_dz 阅读(958) 评论(1) 推荐(0) 编辑

导航