摘要: 假定一条程序已经运行,整个映射机制都已建立好,并且cpu正在执行main()中的:call 08048368 这条指令,要转移到虚拟地址0x08048368去。接下来我们分析整个地址映射的过程:首先是段式映射阶段。由于地址0x08048368是一个程序的入口,更重要的是在执行的过程中是由cpu中的“指令指针寄存器(用于存储下次将要执行的指令在代码段中的偏移量)”EIP所指向的代码段中。因此i386 CPU使用代码段寄存器CS的当前值来作为段式映射的“选择码”,也就是用它作为在段描述表中的下标。什么是段描述表呢?什么是全局段描述表GDT?什么是局部段描述表LDT?我们先回顾一下保护模式下段寄存器 阅读全文
posted @ 2013-05-20 19:46 长烟慢慢 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 1、MMU(内存管理单元)MMU是怎么将逻辑地址转换成物理地址?MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件,通过分段机制(把一个逻辑地址转换为线性地址,线性地址也是32位,其地址取值范围为0x00000000~0xffffffff)和分页机制(把一个线性地址转换为物理地址),最终将逻辑地址映射为物理地址。如下图:1.1 分段机制在操作系统原理关于分段的说明:段的分配时为了更好的满足用户,段的长度不固定,由用户定义,每个段都有自己的地址空间(通过基址包含某物理内存的地址,和长度值来表示段的长度),表示一个地址需要给出段部分(选择符)和偏移部分。如下图,如果没有分页的话, 阅读全文
posted @ 2013-05-20 15:29 长烟慢慢 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符 选择器:存储段描述符的索引 PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器,同时提供6个段左右机器当前运行的地址空间。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段 ( -----------------------------------------------我是分割线------------------------ 段描述符: P,present位,1表示所描述的段存在(... 阅读全文
posted @ 2013-05-20 12:09 长烟慢慢 阅读(914) 评论(0) 推荐(0) 编辑