操作系统第八章-内存管理分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Intel x86的内存管理硬件! 操作系统课讲硬件,大家可能觉得奇怪 段页结合时,进行一次地址翻译需要: (1)找到段表;(2)查段表;(3)找TLB;(4)找到页目录表;(5)查找页目录项;(6)找到页表;(7)查找页表;(8)形成物理地址;(9)需要段越界检查;(10)需要进行段保护权限检查;(11)需要进行页保护权限检查… 如此多的事情都用软件实现,其效率会很低 物理地址 CPU MMU 逻辑地址 Intel x86的分段硬件 选择符 偏移值 : 逻辑地址 0 31 0 15 选择符: CS, SS, DS, ES, FS, GS(16位寄存器) 全局段描述符表(GDT) 局部段描述符表(LDT) GDTR LDTR 偏移值: EIP, ESP, ESI, EDI(32位寄存器) GDT: 全局段表(所有进程共享,描述OS各段) LDT: 局部段表(各进程独有,描述进程各段) GDTR和LDTR: 32位段表基址(线性地址)+16位段表长度。需用特权指令LLDT和SLDT等。 Intel x86的分段硬件 ? LDT、GDT GDT LDT2 Data2 Code2 进程2 LDT1 Data1 Code1 进程1 Codeos 段描述符: LDT(GDT)中的表项 段基址15..0 段限长15..0 0 4 段基址31..24 段基址23..16 段限长19..16 P DPL G Intel x86的分页硬件 页目录基址: PDBR, Intel x86称为CR3 0 线性地址 31 10 bits 10 bits 12 bits 页内偏移 页面 页目录 页目录 CR3 页表 0 31 12 11 页目录表基地址 保留 页目录基址需是4K的倍数 页目录(页表)表项格式 0 31 12 11 页框(frame)地址 1 P RW 页表占1页内存,连续排放 Intel x86上的Linux内存管理! Linux物理内存的分配 内核模块 0 end 640K 1M 显存和BIOS ROM 主内存区 16M 在linux/init/main.c中 mem_init(main_memory_start, memeory_end); memory_end=(120)+(EXT_MEM_K10) if(memory_end16*1024*1024) memory_end16*1024*1024; main_memory_start = 1*1024*1024; setup.s获取的硬件参数! 在linux/mm/memory.c中 void mem_init(long start_mem, long end_mem){ int i; for(i=0;iPAGING_PAGES;i++)mem_map[i]=USED; //设为100 i=MAP_NR(start_mem);end_mem-=start_mem;end_mem =12; while(end_mem--0) mem_map[i++] = 0;} 进程0和进程1的地址空间 16M 物理内存空间 线性地址空间 0 0 4G GDT LDT LDT 内核 进程0 进程1 80M 64M 16M 进程0页表 进程1页表 内存页 两页表项指向同一页面:只读(写时复制) 内核可以访问所有物理内存 线性地址=物理地址 内存管理总结 内存的根本目的 ? 把程序放在内存并让其执行 程序执行需要重定位 ? 编译、载入和运行三种定位时刻 运行时重定位最成熟 ? 从逻辑地址到物理地址的翻译 内存如何管理 ? 连续内存分配(分区)最直观 程序由若干段组成 ? 以段为单位的内存分区策略 ? 分段 分段对程序员自然,但会造成内存碎片? 分页 ? 段页结合 翻译、保护、内存分配是内存管理的三个核心词! Intel+Linux的漫长内存管理之旅?内存如何给进程提供空间 是逻辑地址到物理地址变换之间的中间层。程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。 * 最佳适配产生更多很小的内存块,更需要内存压缩(移动)。 * (4)分区分配算法 ? 找到合适的空闲分区 进程1 操作系统 空闲分区表 始址 长度 350K 150K 200K 50K 0K 100K 200K 250K 500K 进程3 空闲 350K 空闲 发起请求reqSize=40K怎么办? 首次适配(first-fit):首次找到的满足要求的空 闲分区 (350,1

文档评论(0)

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

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档