内存寻址.ppt

上传人:sccc 文档编号:5360557 上传时间:2023-06-29 格式:PPT 页数:42 大小:517.04KB
返回 下载 相关 举报
内存寻址.ppt_第1页
第1页 / 共42页
内存寻址.ppt_第2页
第2页 / 共42页
内存寻址.ppt_第3页
第3页 / 共42页
内存寻址.ppt_第4页
第4页 / 共42页
内存寻址.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《内存寻址.ppt》由会员分享,可在线阅读,更多相关《内存寻址.ppt(42页珍藏版)》请在三一办公上搜索。

1、内存寻址,xlanchen2007.6.11,xlanchen2007.6.11,Embedded Operating Systems,2,在intelx86处理器下,有三种不同的地址逻辑地址:每个逻辑地址由一个段(segment)和偏移量(offset)组成线性地址:32位无符号整数,可以表示4G的地址空间物理地址:用于芯片级内存单元寻址。它们与从CPU的地址引脚发送到内存总线上的电信号相对应地址转换过程,xlanchen2007.6.11,Embedded Operating Systems,3,为什么需要内存寻址机制?,保护内核不受恶意或者无意的破坏隔离各个用户进程方便程序的编写,使程序

2、员可以抛开对物理内存的考虑,而且理论上可以使用任意大小的空间,xlanchen2007.6.11,Embedded Operating Systems,4,硬件的分段单元(1)段寄存器(segment register),I386体系结构采用分段机制逻辑地址=段:段内偏移使用段寄存器指明当前使用的段16位的段寄存器,有六个:cs,ss,ds,es,fs和gs其中3个寄存器CPU规定了专门的用途cs代码段寄存器,指向存放程序指令的段ss堆栈段寄存器,指向存放当前程序栈的段ds数据段寄存器,指向存放数据的段,xlanchen2007.6.11,Embedded Operating Systems,

3、5,在实模式中(20位)段寄存器记录段基址的高16位不采用虚拟地址空间,直接采用物理地址空间物理地址=段寄存器值*16+段内偏移在保护模式(32位)采用基于分页技术的虚拟地址空间段寄存器无法直接记录段的信息,因此需要与GDT表配合使用GDT中记录了每个段的信息(段描述符),段寄存器只需记录段在GDT中的序号,xlanchen2007.6.11,Embedded Operating Systems,6,注意:cs寄存器还有一个很重要的功能:它含有一个两位的域,用以指明CPU当前特权级(current privilege level,CPL),值为0代表最高优先级,值为3代表最低优先级虚拟地址=段

4、基地址+段内偏移其中,段基地址是根据段寄存器所指明的GDT中的段描述符中的信息得到的物理地址:根据页表对虚拟地址进行转换而得到,xlanchen2007.6.11,Embedded Operating Systems,7,段描述符(segment descriptor),每个段由一个段描述符来表示,一个段描述符长度为8个字节全局描述符表(global description table,GDT)就用来存放段描述符GDTR寄存器用来存放GDT的起始地址(物理地址),xlanchen2007.6.11,Embedded Operating Systems,8,段描述符的格式,段基址、段长度、其他属

5、性,xlanchen2007.6.11,Embedded Operating Systems,9,段选择子,段寄存器中值称为段选择子,长度为16位13位的索引,指定GDT表中的相应的段描述符1位的TI(Table Indicator)(跟LDT表有关,Linux中基本未使用)2位RPL(request privilege level)当相应的段选择符装入到cs寄存器中时,表明了CPU的当前特权级(用户/内核),index,TI,RPL,2 1 0,15,Segment selector,xlanchen2007.6.11,Embedded Operating Systems,10,段选择子的使

6、用,xlanchen2007.6.11,Embedded Operating Systems,11,逻辑地址到线性地址的转换,xlanchen2007.6.11,Embedded Operating Systems,12,Linux中的段,基于下面两个原因,linux中只使用了几个段段和页的同时存在在一定程度上有点多余。因为两者都可以划分进程的物理空间所有的进程希望使用同样的0-4G的逻辑空间。这样程序员不必考虑进程地址的问题,也让内核的内存管理变得简单一些,xlanchen2007.6.11,Embedded Operating Systems,13,Linux下的全局描述符表(部分),xl

7、anchen2007.6.11,Embedded Operating Systems,14,_KERNEL_CS,0 x10=0000 0000 0001 0000b内核代码段,在GDT中相应的段描述符各个域有如下值,Index=2,RPL=0,特权级,xlanchen2007.6.11,Embedded Operating Systems,15,_KERNEL_DS,0 x18=0000 0000 0001 1000b内核数据段,在GDT中相应的段描述符各个域有如下值,Index=3,RPL=0,特权级,xlanchen2007.6.11,Embedded Operating Systems

8、,16,_USER_CS,用户代码段,用户态下所有进程共享,xlanchen2007.6.11,Embedded Operating Systems,17,_USER_DS,用户数据段,用户态下所有进程共享,xlanchen2007.6.11,Embedded Operating Systems,18,硬件的分页单元,分页单元把线性地址转换成物理地址为了效率起见,线性地址被分成以固定长度为单位的组,称为页。页内连续的线性地址被映射到连续的物理地址中。把线性地址映射到物理地址的数据结构叫做页表(page table)。页表存放在内存中,并在启用分页单元以前由内核对之进行初始化Intel处理器中,

9、通过设置CR0寄存器的一个标志位来启用分页单元。,xlanchen2007.6.11,Embedded Operating Systems,19,硬件的分页单元,区分一下页和页框的概念一页指一系列的线性地址和包含于其中的数据页框(page frame)分页单元认为所有的RAM被分成了固定长度的页框每个页框可以包含一页,也就是说一个页框的长度和一个页的长度是一样的页框是内存的一部分,是一个实际的存储区域。而页只是一组数据块,可以存放在任何页框中,xlanchen2007.6.11,Embedded Operating Systems,20,常规分页,从i386起,intel处理器的分页单元处理4

10、KB的页32位的线性地址被分成3个域目录(directory)最高的10位页表(Table)中间的10位偏移量(offset)最低的12位线性地址的转换分两步完成,每一步都基于一种转换表第一种称为页目录表(page directory)第二种称为页表(page table)正在使用的页目录表的物理地址存放在CPU的CR3寄存器中,xlanchen2007.6.11,Embedded Operating Systems,21,Intel 80 x86处理器的分页,xlanchen2007.6.11,Embedded Operating Systems,22,页目录表项和页表项,页目录表项和页表项

11、存储的都是页框的基址页目录表项存储对应页表的物理地址页表项存储对应物理页面的起始地址4KB,12位对齐,因此最后12位被用来存放该页的标志位,包括:Present标志、Accessed标志、Dirty标志、Read/Write标志、User/Supervisor标志、如果present标志为0,分页单元就把这个线性地址存放在处理器的CR2寄存器中,并产生一个14号异常(缺页异常),xlanchen2007.6.11,Embedded Operating Systems,23,硬件的分页单元,扩展分页pentium处理器引进了扩展分页,允许页框的大小为4K或者4M,xlanchen2007.6.

12、11,Embedded Operating Systems,24,硬件保护方案,级别由前面提到的User/Spuervisor标志控制若这个标志为0,只有当CPL小于3(对linux来说,即处理器处于内核态)时才能对此页寻址;若这个标志为1,则总能对此页寻址存取权限由Read/Write标志控制标志为0,页是只读的标志为1,则是可读写的,xlanchen2007.6.11,Embedded Operating Systems,25,0 x20000000:0010 0000 0000 0000 0000 0000 0000 0000b,分页举例,假设内核给一个正在运行的进程p1分配的线性地址空

13、间是0 x20000000到0 x2003ffff这段空间大小为0 x40000,即0 x40个页(64页)线性地址,页目录索引(0 x80=128),页表索引(0 x0=0),0 x20003ffff:0010 0000 0000 0011 1111 1111 1111 1111b,页目录索引(0 x80=128),页表索引(0 x3f=63),xlanchen2007.6.11,Embedded Operating Systems,26,p1的页表和虚拟空间,0,1023,128,0,63,1023,p1的页目录,p1的页表,p1的页,p1的页,xlanchen2007.6.11,Embe

14、dded Operating Systems,27,分页举例,假设进程需要读取0 x20021406中的字节。分页单元将该地址划分为3个部分:0 x20021406=0010 0000 0000 0010 0001 0100 0000 0110b当进程无论何时试图访问0 x20000000到0 x2003ffff范围之外的线性地址时,都将产生一个保护错误,页目录索引(0 x80=128),页表索引(0 x21),页内偏移(0 x406),CR3,+,p1的页目录,p1的页表,+,Present=0,缺页异常,XxxxxxXxxxxXxxx,xxxx,xlanchen2007.6.11,Embe

15、dded Operating Systems,28,Linux的分页,Linux采用3级分页模式页全局目录(Page Global Directory)页中间目录(Page Middle Directory)页表(Page Table),xlanchen2007.6.11,Embedded Operating Systems,29,Linux 的分页模式,xlanchen2007.6.11,Embedded Operating Systems,30,Linux进程的分页,Linux对进程的处理很大程度上依赖于分页。实际上,由硬件提供的MMU将线性地址自动转换为物理地址使的下面的设计目标变得可行

16、:给每个进程分配一块不同的物理地址空间,这种机制确保了对寻址错误提供有效的保护区别页(即一组数据)和页框(实际的物理空间)之间的不同。这是虚拟存储器机制的基本因素,xlanchen2007.6.11,Embedded Operating Systems,31,每个进程都有它自己的页全局目录和自己的页表集合,当进程切换发生时,linux把CR3寄存器的值保存在跟进程相关的一个数据结构中,然后用另外一个进程相应的值填充CR3寄存器。因此,当新进程恢复在CPU上执行时,分页单元将使用一组与新进程对应的页表,xlanchen2007.6.11,Embedded Operating Systems,32

17、,Linux对页表的处理函数硬件提供了这种转换机制,而软件所要做的就是准备好正确的数据,使得硬件能够准确无误的执行Linux中实现很多对页表进行设置,操作和处理的函数,xlanchen2007.6.11,Embedded Operating Systems,33,保留的页框内核代码和静态数据结构存放在一组保留的页框中。这些页框所含的页从不被动态的分配或者交换到磁盘上作为一条常规,linux内核被安装在物理地址0 x00100000开始的地方。所需要的页框数依赖于内核的配置方案。典型的配置所得到的内核可以被安装在小于2MB的RAM中,xlanchen2007.6.11,Embedded Oper

18、ating Systems,34,Linux2.4内核的前512个页框,xlanchen2007.6.11,Embedded Operating Systems,35,进程页表,一个进程的线性地址空间被分成两部分03G:用户态和内核态都可以访问3G4G:只有内核态可以访问进程的页全局目录前768项:用来映射低于0 xc0000000的线性地址,具体内容与进程相关。剩余的表项:用来映射内核空间,对所有进程都一样,xlanchen2007.6.11,Embedded Operating Systems,36,内核空间,Linux把内核代码映射到了0 xc0000000以上的空间,xlanchen2

19、007.6.11,Embedded Operating Systems,37,内核页表,实际上,内核映象在被装入内存以后,CPU仍然运行于实模式下,分页单元还没有被启动内核分两个阶段初始化自己的页表一,仅创建够自己使用的8MB空间二,利用剩余的RAM并恰当的建立映射整个物理内存的页表,xlanchen2007.6.11,Embedded Operating Systems,38,Linux的临时内核页表,此阶段的目标是在实模式和保护模式下都能很容易的对前8MB进行寻址。即创建一个映射,把以下两组线性地址都映射到物理地址0 x00000000至0 x007fffff范围上这两组线性地址是:0 x

20、00000000至0 x007fffff0 xc0000000至0 xc007fffff,xlanchen2007.6.11,Embedded Operating Systems,39,页全局目录,映射前8MB的页表,物理:04MB-1虚拟:04MB-1以及3GB3GB+4MB-1,物理:4MB8MB-1虚拟:4MB8MB-1以及3GB+4MB3GB+8MB-1,xlanchen2007.6.11,Embedded Operating Systems,40,Linux的分页,开启分页单元,xlanchen2007.6.11,Embedded Operating Systems,41,最终内核页表,最终内核页全局目录仍然保留在变量swapper_pg_dir中。它由函数paging_init()初始化,设置一个页目录表项,每个页目录表项对应4MB大小的空间,xlanchen2007.6.11,Embedded Operating Systems,42,作业6:,_USER_CS、_USER_DS的值分别是多少?它们分别对应GDT表中的哪一项?RPL分别是多少,对应Linux的哪个级别(用户级还是内核级)?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号