- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch4-4.6-x86存储机制-4.7Linux虚存
4.6 Intel x86分段和分页存储结构 Intel x86系列CPU提供三种工作模式:实地址模式、保护模式、虚拟8086模式 Intel x86上虚拟存储管理核心表 :LDT和GDT 段寄存器和虚拟地址 虚拟地址空间大小 虚拟地址空间共包含16K个存储器分段,其中GDT映射一半(8192个)全局虚拟地址空间,由LDT映射另一半(8192个)局部虚拟地址空间, 发生进程切换时,LDT更新为待执行进程的LDT,而GDT保持不变。 由于每段偏移量32位、即=4GB,整个虚存地址空间=16K×4GB=64TB。 段页式地址转换过程 4.7 Linux虚拟存储管理 4.7.1 Linux虚拟存储管理概述 在Linux中,进程可访问4GB虚拟地址空间,其中,从0到3GB被用户进程独占并可直接进行访问;从3GB到4GB是内核空间,由所有核心态进程共享,存放系统代码和数据。 进程有一个页目录,大小为一个页,页目录的起始地址存放在进程mm_struct结构中,工作时被装入寄存器CR3。页目录项为4字节,共有1024项,用来保存页表的起始地址。每张页表也用一个页面存储,每项为4字节,共有1024项,用来保存页框基地址。 页表项的格式 0位为页面在/不在主存;1位若置位,页面可读可写,否则只读;2位为选择用户级访问许可/内核级访问许可;3位为若置位表示页面cache采用“直写”,否则回写缓存;4位为若置位,禁用高速缓存;5位为置位表示该页面最近曾被访问过;6位为被置位,表示页面在上次该位被清除之后页面内容被改变过;7位为页面大小;8位为全局页面;12至31位是页框基地址。 4.7.2 存储管理数据结构 1 物理主存数据结构 物理主存分三个层次管理: 1)存储节点 2)管理区 3)页框 1) 页框管理 物理主存划分成页框,其长度与页面相等,系统中所有页框都由mem_map表描述,它在初始化时通过free_area_init( )函数创建。 mem_map本身是由mem_map_t组成的数组,每个mem_map_t描述一个页框,整个数组就代表系统中的全部页框,数组下标就是物理页框的序号,用于对页框进行管理。 mem_map_t typedef struct page { /*page数据结构*/ struct list_head list;/*list_head是通用双向链队列结构,链接page*/ struct page *next_ hash;/* page cache的hash表中的后继指针*/ atomic_t count; /*访问此页框的进程个数*/ unsigned long flags; /*标志位*/ unsigned dirty; /*修改标志*/ struct list_head lru; /*页面换出链表或活跃链表*/ unsigned long age; /*页面的年龄,越小越先换出*/ unsigned long map_nr; /*页框在mem_map表中的下标*/ struct page **pprev_hash;/*page cache的hash表中的前向指针*/ struct buffer_head *buffers;/*若该页框用做缓冲区,指示缓冲区地址*/ struct inode *inode;/*页框主存放代码或数据所属文件的inode*/ unsigned long offset; /*页框主存放代码或数据所属文件的位移*/ struct zone_struct zone;/*页框所在管理区*/ }mem_map_t; 2) 管理区管理 主存被划分成三个区: ZONE_DMA区,专供DMA使用; ZONE_NORMAL区,被常规使用;ZONE_HIGHMEM区,内核不能直接映射区。 设置ZONE_DMA是保证磁盘I/O所需的连续物理页框,ZONE_NORMAL里的页框用作通常的主存分配。 管理区数据结构zone_struct 含有一组空闲区队列, typedef struct free_area_struct{ /*空闲区队列头部结构*/ struct list_head free_list; /*指向空闲区队列*/ unsigned int *map;/*指向bitmap表*/ } free_area_t; zone_struct描述: typedef struct zone_struct { s
您可能关注的文档
最近下载
- 基于LabVIEW的远程心电信号采集系统.doc
- T_SCS 000015-2023 氧化锆固体电解质 相含量的测定 全谱拟合法.docx VIP
- SN∕T 3131-2012 自行车车闸闸皮中石棉含量的测定 偏光显微镜-X射线衍射光谱法.docx VIP
- 大迈X7 DCT360C众泰培训.pdf
- SN_T 5499-2023 矿产品中滑石含量的测定 X射线衍射全谱拟合法.docx
- SN_T 3514-2013电工钢晶粒取向与无取向鉴定方法X射线衍射测定织构法.docx VIP
- (三模)新疆维吾尔自治区2025年高考第三次适应性检测 理科综合试卷(含答案).pdf
- 大学生志愿服务西部计划服务鉴定表.doc
- 体育馆落地式钢管脚手架施工方案.pdf VIP
- 中国职业教育发展白皮书.pdf VIP
文档评论(0)