网站大量收购闲置独家精品文档,联系QQ:2885784924

主存共享特征—空间分片.ppt

  1. 1、本文档共98页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
页表管理—x86系统 三类地址 逻辑地址(Virtual Address) 是指程序在编译连接后,变量名字等的符号地址,在JOS系统中的内核部分,该地址是以KERNBASE(默认等于0xF0000000,实际上可以根据具体的情况加以修改)开始的。 线性地址(Linear Address) 是指经过x86保护模式的段地址变换后的地址,该变换的过程是 逻辑地址+段首地址 物理地址(Physical Address) 是指内存存储单元的编址,如1GB的内存,它的物理编址是从00 页表管理—x86系统(续) 三类地址的关系 页表管理—x86系统(续) 段式地址转换 过程为程序的逻辑地址+段首地址 例如段首地址为-0xf000000时,一个逻辑地址为0xf0100000。经过转换后,得到线性地址0 分页机制需要经过设置CR3和CR0后才打开。 在未打开分页机制的情况下,段式地址转换得到的线性地址就是物理地址。 在打开分页机制之后,线性地址需要再次经过页式地址变换才能得到物理地址。 页表管理—x86系统(续) 页式地址转换 页表管理—x86系统(续) 对页式地址转换的说明 当启用了x86页式内存管理后,当处理器碰到一个线性地址后,它会把这个地址分成3部分:它们分别是页目录索引(Directory)、页表索引(Table)和页内偏移(Offset),这3个部分把原本32位的线性地址分成了10位、10位和12位的3个片段。既然页内偏移地址占12位,页的大小就自然为4KB了。 Code walk(JOS) Inc/mmu.h中,定义了宏PDX(la),用于取得线性地址la的页目录索引 定义了PTX(la),用于取得线性地址la中的页表索引 定义了PGOFF(la),用于取得页内偏移 同时注意该头文件中的其他宏定义,如PTE_P、PTE_U、PTE_W,它们用于定义页表项的权限 页表管理—x86系统(续) 页目录(表)项的格式 每个页目录或者页表都存储在单独的页面中 每个4KB的物理页面,实际上它在内部分成了1024个单元(10位有1024个可能的值),每个单元占4字节(32位,也就是保护模式下一个uint32_t类型所占的内存空间大小),它们称为页目录项(Page Directory Entry),这些单元与页表中包含的单元在格式上是一致的,不同的是页表中的单元称为页表项(Page Table Entry)。 页表管理—x86系统(续) 页目录(表)项的格式(续) 高20位存储的是一个地址,但因为只有高20位(使用的时候低位会被全部清零),所以只能寻址4KB对齐的地址空间(这就是为什么我们在为页目录分配空间时要寻找内核代码后第一个4KB对齐的地址的原因),同时,由于x86把所有物理内存分成了4KB大小的页,每个页的首地址必然是4KB对齐的!所以这个表项中的高20位地址能够定位到内存中任何一个物理页面的首地址。 P —— Present,该位用来判断对应物理页面是否存在,如果存在,该位置1,否则为0; R/W —— Read/Write,该位用来判断对所指向的物理页面的访问权限,如果为1,表示页面可写,否则,是只读页面; U/S —— User/Supervisor,该位用来定义页面的访问者应该具备的权限。如果为1,表示该页面是User权限的,大家都可以访问,如果为0,表示只能是Ring0中的程序能访问; D —— Dirty,是否被修改; A —— Accessed,最近是否被访问; AVAIL —— Available,可以被系统程序所使用; 0 —— 保留位,不能使用。 这些位系统在访问一个页面时就会自动地去判断,如果访问不符合规矩(如页面根本就不存在,或者权限不对的情况),系统就会产生异常,让系统去处理。 页表管理—x86系统(续) 页式地址转换的分析 该机制能够对0~4GB空间内的任何线性地址进行转换,这时,页目录的每个页目录项都将指向一个包含1024个页表项的页表(占用一个4KB的物理页面),整个页式转换机制将占用额外的1024+1=1025个4KB的物理页面,也就是大约4MB。然而,由于系统运行过程中可能不会用到这么大的地址空间,所以不会有那么多页表被创建。 为每个用户进程创建一个页目录,并将这个页目录保存到用户进程的上下文中,当该用户进程被切换过来执行的时候,就将该用户进程的页目录地址写入CR3,并重新启动一次页式内存管理。这样就能够实现每个用户进程的虚地址空间为4GB。当然如果采用这种方式,势必占用更多的内存用于页式地址变换。 对于老版本的Linux系统以及我们现在接触的JOS系统,为了避免太大的内存开销(另一个原因是因为还没有虚拟内存的支持),在整个系统中只使用

文档评论(0)

seunk + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档