《第二章虚拟内存管理的硬件机制PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第二章虚拟内存管理的硬件机制PPT讲稿.ppt(43页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第二章虚拟内存管理的硬件机制第1页,共43页,编辑于2022年,星期二内存寻址操作系统设计的硬件基础之一内存寻址操作系统设计的硬件基础之一操作系统横跨软件和硬件的桥梁内存寻址操作系统设计的硬件基础之一 操作系统的设计者必须在硬件相关的代码与硬件无关的代码之间划出清楚的界限,以便于一个操作系统很容易地移植到不同的平台。在这众多的平台中,大家最熟悉的就是i386,即Intel80386体系结构。因此,我们所介绍的内存寻址也是以此为背景。第2页,共43页,编辑于2022年,星期二内存寻址的不同时期内存寻址的不同时期石器时期8位 青铜时期16位白银时期24位 黄金时期32位 第3页,共43页,编辑于2
2、022年,星期二石器时期石器时期8 8位寻址位寻址在微处理器的历史上,第一款微处理器芯片4004是由Intel推出的,4位。在4004之后,intel推出了一款8位处理器叫8080,它有1个主累加器(寄存器A)和6个次累加器(寄存器B,C,D,E,H和L)那时没有段的概念,访问内存都要通过绝对地址,因此程序中的地址必须进行硬编码(给出具体地址),而且也难以重定位第4页,共43页,编辑于2022年,星期二青铜时期青铜时期“段段”的引入的引入intel开发出的16位的处理器叫8086,标志着Intel X86王朝的开始,同时引入了“段”概念。段描述了一块有限的内存区域,区域的起始位置存在专门的寄存
3、器(段寄存器)中。8086处理器地址线扩展到了20位,寻址空间到了1M也就是把1M大的空间分成数个64k的段来管理(化整为零了)。把16位的段地址左移动4位后,再与16位的偏移量相加便可获得一个20位的内存地址,第5页,共43页,编辑于2022年,星期二白银时期白银时期“保护模式保护模式”的引入的引入intel的80286处理器于1982年问世。地址总线位数增加到了24位。从此开始引进了一个全新理念保护模式保护模式 访问内存时不能直接从段寄存器中获得段的起始地址了,而需要经过额外转换和检查。80286处理器一些致命的缺陷注定不能长久,它很快被天资卓越的兄弟80386代替了 第6页,共43页,编
4、辑于2022年,星期二黄金时期内存寻址的飞跃黄金时期内存寻址的飞跃80386是一个32位的CPU,其寻址能力达到4GB Intel选择了在段寄存器的基础上构筑保护模式,并且保留段寄存器16位 在保护模式下,它的段范围不再受限于64K,可以达到4G这真正解放了软件工程师,他们不必再费尽心思去压缩程序规模,软件功能也因此迅速提升 从80386以后,Intel的CPU经历了80486、Pentium、PentiumII、PentiumIII等型号,但基本上属于同一种系统结构的改进与加强,而无本质的变化,所以我们把80386以后的处理器统称为IA32IA32(32 Bit Intel Architec
5、ture)。第7页,共43页,编辑于2022年,星期二IA32IA32寄存器简介寄存器简介 把16位的通用寄存器、标志寄存器以及指令指针寄存器扩充为32位的寄存器 段寄存器仍然为16位。增加4个32位的控制寄存器 增加4个系统地址寄存器 增加8个调式寄存器 增加2个测试寄存器第8页,共43页,编辑于2022年,星期二常用寄存器简介常用寄存器简介 通用寄存器v8 8个通用寄存器是个通用寄存器是80868086寄存器的超集,它们分别为:寄存器的超集,它们分别为:EAX EAX,EBX EBX,ECX ECX,EDX EDX,EBP EBP,EBPEBP,ESI ESI及及 EDI EDI 段寄存器
6、v8086中有4个16位的段寄存器:CS、DS、SS、ES,分别用于存放可执行代码的代码段、数据段、堆栈段和其他段的基地址。v这些段寄存器中存放的不再是某个段的基地址,而是某个这些段寄存器中存放的不再是某个段的基地址,而是某个段的段的选择符选择符(SelectorSelector)v段基地址存放在段段基地址存放在段描述符表描述符表(Descriptor Descriptor)中,)中,表的表的索引就是索引就是选择符选择符 第9页,共43页,编辑于2022年,星期二常用寄存器简介常用寄存器简介 指令指针寄存器指令指针寄存器 v指令指针寄存器指令指针寄存器EIPEIP中存放下一条将要执行指令的偏中
7、存放下一条将要执行指令的偏移量(移量(offset offset),这个偏移量是相对于目前正在运),这个偏移量是相对于目前正在运行的代码段寄存器行的代码段寄存器CSCS而言的。偏移量加上当前代码段而言的。偏移量加上当前代码段的基地址,就形成了下一条指令的地址。的基地址,就形成了下一条指令的地址。vEIPEIP中的低中的低1616位可以被单独访问,给它起名叫指令指位可以被单独访问,给它起名叫指令指针针IPIP寄存器,用于寄存器,用于1616位寻址。位寻址。标志寄存器 v标志寄存器EFLAGS存放有关处理器的控制标志,很多标志与16位FLAGS中的标志含义一样。第10页,共43页,编辑于2022年
8、,星期二标志寄存器简介标志寄存器简介 第11页,共43页,编辑于2022年,星期二用于分页机制的控制寄存器用于分页机制的控制寄存器 第12页,共43页,编辑于2022年,星期二物理地址、虚拟地址及线性地址物理地址、虚拟地址及线性地址 将主板上的物理内存条所提供的内存空间定义为将主板上的物理内存条所提供的内存空间定义为物理内存空间物理内存空间,其中每个内存单元的实际地址,其中每个内存单元的实际地址就是就是物理地址物理地址将应用程序员看到的内存空间定义为虚拟地将应用程序员看到的内存空间定义为虚拟地址空间址空间(或地址空间或地址空间),其中的地址就叫,其中的地址就叫虚拟地虚拟地址址(或虚地址或虚地址
9、),一般用一般用“段:偏移量段:偏移量”的形式的形式来描述来描述 线性地址空间线性地址空间是指一段连续的,不分段的,范围为是指一段连续的,不分段的,范围为0 0到到4GB4GB的地址空间,一个的地址空间,一个线性地址线性地址就是线性地址就是线性地址空间的一个绝对地址。空间的一个绝对地址。第13页,共43页,编辑于2022年,星期二地址之间的转换保护模式下的寻址地址之间的转换保护模式下的寻址 CPUMMU内存内存磁盘磁盘控制器控制器总线总线CPU把虚地址送给把虚地址送给MMU MMU把物理地址送给存储器把物理地址送给存储器第14页,共43页,编辑于2022年,星期二地址之间的转换地址之间的转换M
10、MUMMU机制机制虚拟地址虚拟地址第15页,共43页,编辑于2022年,星期二段机制段机制 段段是虚拟地址空间的基本单位,段机制必须把虚拟是虚拟地址空间的基本单位,段机制必须把虚拟地址空间的一个地址转换为线性地址空间的一个线地址空间的一个地址转换为线性地址空间的一个线性地址。性地址。用三个方面来描述段用三个方面来描述段 v段的段的基地址基地址(Base Address)(Base Address):在线性地址空间中段的:在线性地址空间中段的起始地址。起始地址。v段的段的界限界限(Limit)(Limit):在虚拟地址空间中,段内可以使:在虚拟地址空间中,段内可以使用的最大偏移量。用的最大偏移量
11、。v段的段的保护属性保护属性(Attribute)(Attribute):表示段的特性。例如,表示段的特性。例如,该段是否可被读出或写入,或者该段是否作为一个该段是否可被读出或写入,或者该段是否作为一个程序来执行,以及段的特权级等等。程序来执行,以及段的特权级等等。第16页,共43页,编辑于2022年,星期二虚拟线性地址的转换虚拟线性地址的转换 虚拟地址空间虚拟地址空间第17页,共43页,编辑于2022年,星期二段描述符表段表段描述符表段表 如图所示的段描述符表(或叫段表)来描述转换关系。段号描述的是虚拟地址空间段的编号,基地址是线性地址空间段的起始地址。段描述符表中的每一个表项叫做段描述符0
12、12 索引(段号)基地址 界限 属性 Baseb Limitb Attributeb Basea Limita Attributea Basec LimitcAttributec第18页,共43页,编辑于2022年,星期二段描述符的一般格式段描述符的一般格式 第19页,共43页,编辑于2022年,星期二保护模式下的其他描述符表简介保护模式下的其他描述符表简介 全局描述符表全局描述符表GDTGDT(Gloabal Descriptor Gloabal Descriptor TableTable)中断描述符表中断描述符表IDTIDT(Interrupt Descriptor Interrupt D
13、escriptor TableTable)局部描述符表局部描述符表LDTLDT(Local Descriptor Local Descriptor TableTable)为了加快对这些表的访问,为了加快对这些表的访问,IntelIntel设计了专门的设计了专门的寄存器,以存放这些表的基地址及表的长度界限寄存器,以存放这些表的基地址及表的长度界限 。这些寄存器只供操作系统使用。这些寄存器只供操作系统使用。有关这些表的详细内容请参看有关保护模式的有关这些表的详细内容请参看有关保护模式的参考书。参考书。第20页,共43页,编辑于2022年,星期二保护模式下段寄存器中存放什么保护模式下段寄存器中存放什
14、么 存放存放索引索引或叫或叫段号,段号,因此,这里的段寄存器也因此,这里的段寄存器也叫选择符,即从描述符表中选择某个段。叫选择符,即从描述符表中选择某个段。选择符(段寄存器)的结构:选择符(段寄存器)的结构:RPL表示请求者的特权级(Requestor Privilege Level)第21页,共43页,编辑于2022年,星期二保护模式下的特权级保护模式下的特权级 保护模式提供了四个保护模式提供了四个特权级特权级,用,用0303四个数字表四个数字表示示 很多操作系统(包括很多操作系统(包括Linux,WindwosLinux,Windwos)只使用)只使用了其中的最低和最高两个,即了其中的最低
15、和最高两个,即0 0表示最高特权表示最高特权级,对应级,对应内核态内核态;3 3表示最低特权级,对应表示最低特权级,对应用用户态户态。保护模式规定,高特权级可以访问低特权级,保护模式规定,高特权级可以访问低特权级,而低特权级不能随便访问高特权级。而低特权级不能随便访问高特权级。第22页,共43页,编辑于2022年,星期二地址转换及保护地址转换及保护 第23页,共43页,编辑于2022年,星期二LinuxLinux中的段中的段LinuxLinux是怎样处理段机制?是怎样处理段机制?第24页,共43页,编辑于2022年,星期二分页机制页分页机制页将线性地址空间划分成若干大小相等的片,称为页(页(P
16、agePage)物理地址空间分成与页大小页大小相等相等的若干存储块,称为(物理)块或页面(物理)块或页面(Page Page FrameFrame)页的大小应该为多少?由谁确定?第25页,共43页,编辑于2022年,星期二分页机制页表分页机制页表页表页表是把线性地址映射到物理地址的一种数据结构。页表中应当包含如下内容:v物理页面基地址:线性地址空间中的一个页装入内存后所对应的物理页面的起始地址。v页的属性:表示页的特性。例如该页是否在内存,页的属性:表示页的特性。例如该页是否在内存,是否可被读出或写入等。是否可被读出或写入等。页面的大小为4KB,物理页面基地址需要多少位就可以?第26页,共43
17、页,编辑于2022年,星期二分页机制页表项结构分页机制页表项结构物理页面基地址:指的是页所对应的物理页面在内存的起始物理地址。相当于物理块号(为什么?)其最低12位全部为0,因此用高20位来描述32位的地址。属性见书 物理页面基地址物理页面基地址 属性属性31 11 0 第27页,共43页,编辑于2022年,星期二分页机制两级页表分页机制两级页表为什么要采用两级页表?页目录页目录页表页表物理页面物理页面第28页,共43页,编辑于2022年,星期二分页机制线性地址结构分页机制线性地址结构这个结构的伪代码描述如下 typedef struct unsigned int dir:10;/*用作页目录
18、中的下标,对应的 目录项指向一个页表*/unsigned int page:10 /*用作页表的下标,对应的页表 项指向一个物理页面*/unsigned int offset:12 /*在4K字物理页面内的偏移量*/LinearAddr 页目录页目录 页页 页内偏移量页内偏移量31 22 12 0 第29页,共43页,编辑于2022年,星期二分页机制硬件保护机制分页机制硬件保护机制对于页表,页的保护是由属性部分的U/S标志和R/W标志来控制的。当U/S标志为0时,只有处于内核态的操作系统才能对此页或页表进行寻址。当这个标志为1时,则不管在内核态还是用户态,总能对此页进行寻址。此外,与段的三种存
19、取权限(读、写、执行)不同,页的存取权限只有两种(读、写)。如果页目录项或页表项的读写标志为0,说明相应的页表或页是只读的,否则是可读写的。第30页,共43页,编辑于2022年,星期二分页机制线性地址到物理地址的转换分页机制线性地址到物理地址的转换 第31页,共43页,编辑于2022年,星期二分页机制分页示例分页机制分页示例假如操作系统给一个正在运行的进程分配的线性地址空间范围是0 x20000000 到 0 x2003ffff。这个空间由64页组成。我们从分配给进程的线性地址的最高10位(分页硬件机制把它自动解释成页目录域)开始。这两个地址都以2开头,后面跟着0,因此高10位有相同的值,即十
20、六进制的0 x080或十进制的128。因此,这两个地址的页目录域都指向进程页目录的第129项。相应的目录项中必须包含分配给进程的页表的物理地址,如图2.13。如果给这个进程没有分配其它的线性地址,则页目录的其余1023项都为0,也就是这个进程在页目录中只占一项。第32页,共43页,编辑于2022年,星期二分页机制分页示例分页机制分页示例1023(0 x3ff)1023(0 x3ff)128(0 x80)128(0 x80)10231023(0 x3ff0 x3ff)64(0 x040)64(0 x040)63(0 x03f)63(0 x03f)页目录页目录页表页表假设进程需要读线性地址0 x2
21、0021406中的内容。这个地址由分页机制如何进行处理?第33页,共43页,编辑于2022年,星期二分页机制页面高速缓存分页机制页面高速缓存 第34页,共43页,编辑于2022年,星期二分页机制分页机制LinuxLinux中的分页中的分页 Linux主要采用分页机制来实现虚拟存储器管理,因为:vLinuxLinux的分段机制使得所有的进程都使用相同的段的分段机制使得所有的进程都使用相同的段寄存器值,这就使得内存管理变得简单,也就是说,寄存器值,这就使得内存管理变得简单,也就是说,所有的进程都使用同样的线性地址空间(所有的进程都使用同样的线性地址空间(04G04G)。)。vLinux设计目标之一
22、就是能够把自己移植到绝大多数流行的处理器平台。但是,许多RISC处理器支持的段功能非常有限。为了保持可移植性,Linux采用三级分页模式而不是两级 第35页,共43页,编辑于2022年,星期二分页机制分页机制LinuxLinux中的分页中的分页 第36页,共43页,编辑于2022年,星期二LinuxLinux中的中的C C语言和汇编语言语言和汇编语言 GNU GNU 的的C C语言语言 http:/www.faqs.org/docs/learnc/http:/www.faqs.org/docs/learnc/AT&TAT&T的汇编的汇编:参见书参见书 第37页,共43页,编辑于2022年,星期
23、二LinuxLinux系统地址映射示例系统地址映射示例LinuxLinux采用分页存储管理。虚拟地址空间划分成固定采用分页存储管理。虚拟地址空间划分成固定大小的大小的“页页”,由,由MMUMMU在运行时将虚拟地址映射(变在运行时将虚拟地址映射(变换)成某个物理页面中的地址换)成某个物理页面中的地址 IA32的MMU对程序中的虚拟地址先进行段式映射(虚拟地址转换为线性地址),然后才能进行页式映射(线性地址转换为物理地址)Linux巧妙地使段式映射实际上不起什么作用 第38页,共43页,编辑于2022年,星期二LinuxLinux系统地址映射示例系统地址映射示例 假定我们有一个简单的假定我们有一个
24、简单的C C程序程序Hello.cHello.c#include#include greeting()greeting()printf(“Hello,world!n”);printf(“Hello,world!n”);main()main()greeting();greeting();第39页,共43页,编辑于2022年,星期二LinuxLinux系统地址映射示例系统地址映射示例用用LinuxLinux的实用程序的实用程序objdumpobjdump对其可执行代码进行反汇编:对其可执行代码进行反汇编:%objdump d hello%objdump d hello08048568:080485
25、68:8048568:pushl%ebp 8048568:pushl%ebp 8048569:movl%esp,%ebp 8048569:movl%esp,%ebp 804856b:pushl$0 x809404 804856b:pushl$0 x809404 8048570:call 8048474 8048570:call 8048474 8048575:addl$0 x4,%esp 8048575:addl$0 x4,%esp 8048578:leave 8048578:leave 8048579:ret 8048579:ret 804857a:movl%esi,%esi 804857a
26、:movl%esi,%esi 0804857c:0804857c:804857c:pushl%ebp 804857c:pushl%ebp 804857d:movl%esp,%ebp 804857d:movl%esp,%ebp 804857f:call 8048568 804857f:call 8048568 8048584:leave 8048584:leave 8048585:ret 8048585:ret 8048586:nop 8048586:nop 8048587:nop 8048587:nop第40页,共43页,编辑于2022年,星期二LinuxLinux系统地址映射示例系统地址映射
27、示例LinuxLinux最常见的可执行文件格式为最常见的可执行文件格式为elf(Executable elf(Executable a and Linkable Formatnd Linkable Format)。在elf格式的可执行代码中,ld总是从0 x8000000开始安排程序的“代码段”,这个地址就是虚地址程序执行时在物理内存中的实际地址,则由内核为其建立内存映射时临时分配,具体地址取决于当时所分配的物理内存页面。0 x08048568 如何转化为物理地址?第41页,共43页,编辑于2022年,星期二本章小节本章小节内存寻址的演变 段机制分页机制 Linux中的汇编语言 Linux系统地址映射示例 第42页,共43页,编辑于2022年,星期二“内核之旅内核之旅”网站网站http:/ 第二期第二期“i386i386体系结构分两部分,上半部分让大家体系结构分两部分,上半部分让大家认识一下认识一下IntelIntel系统中的内存寻址和虚拟内存的来龙去脉。系统中的内存寻址和虚拟内存的来龙去脉。下半部分将实现一个最短小的可启动内核,一是加深对下半部分将实现一个最短小的可启动内核,一是加深对i386i386体系的了解,再就是演示系统开发的原始过程。体系的了解,再就是演示系统开发的原始过程。下载代码进行调试下载代码进行调试第43页,共43页,编辑于2022年,星期二
限制150内