ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:205.35KB ,
资源ID:15766125      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15766125.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第8章 内存Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第8章 内存Word格式.docx

1、)最大的差距体现在最后两个:RAM和磁盘上,它们又分别可被称作主存和辅存。额外附加的存储器空间总是十分诱人的,即使它们也很慢。如果在RAM被用完时,通过暂时把不用的代码和数据转移到磁盘上以腾出更多空间的方法来使用磁盘代替RAM的话,那将是很好的一件事情。正如读者可能已经知道的,Linux恰好能够做到这一点,这被称之为虚拟内存(virtual memory)。虚拟内存是一种对RAM和磁盘(或称之为:主存和辅存)进行无缝混合访问的技术。所有这些(虚拟)内存对于应用程序来说就好像它真的存在一样。当然我们知道它并非真的内存,这正是为什么它被称为是“虚拟的”,但是多亏了内核使得应用程序无法分辨出它们的区

2、别。对于应用程序来说,就好像真的有很大数量的RAM,只不过有时候比较慢而已。术语“虚拟内存”还有另外一层意思,从严格意义来讲是与前述的第一种意思没有关系的。这里的虚拟内存指的是对进程驻留地址进行欺骗的方法。每个进程都会有这样一种错觉,认为它的地址是从0开始并由此连续向上发展的。很明显,这一点同时对所有进程都成立是不可能的,但是在生成代码的时候这个假定(fiction)却能够带来很大方便,这是由于进程不必知道它们是否真正从0地址开始驻留,而且它们也不必去关心此事。这两种意思也不必相关,因为一个操作系统从理论上可以给每个进程分配一个独有的逻辑地址空间而不用混合使用主存和辅存。然而在所有我已经知道的

3、系统中(对这两种虚拟内存的实现方式)要么都采纳要么都不采纳,这一点可能会在开始时令人感到困惑。为了避免这种意义上的分歧,有人倾向于术语“虚拟内存”代表逻辑地址空间(logical- address-space)的意义,同时使用“分页(paging)”或“交换”表示磁盘作为内存使用(disk-as-memory)的含义。尽管这种严格的区分具有充足的理由,但是我更喜欢普通的用法。除非上下文要求,否则我很少花费精力对它们进行区分。Hard Disk10GB9 msRAM96MB70 nsOn-chip(L2)cache256K20 ns(L1)cache16K9 nsRegisters32 byte

4、s图8-1 具有速度和容量的存储级别交换和分页早期的虚拟内存(VM)系统仅能够把整个应用程序代码和数据,即完整的进程从磁盘上移出或移入磁盘。这种技术被称为交换(swapping),因为它是把一个进程同另一个进程进行了对调。出于这个原因,磁盘上为VM所保留的区域通常被称为交换空间(swap space),或简称为交换区(swap),尽管如我们所见,现代的系统已不再使用这种最初意义上的交换技术。与此类似,读者通常会见到的术语是交换设备(swap device)和交换分区(swap partition),它是磁盘分区的同义词,但是被专门作为交换空间使用,以及术语交换文件(swap file),这是一

5、个用于交换的规则的、有固定长度的文件。交换是很有用的,当然要比根本没有VM好的多,但是它也有一定局限性。首先,交换需要把整个进程同时调入内存,所以当运行一个需要比系统所有RAM还要大的存储空间的进程时,交换便于事无补了,即使磁盘有大量空间可供补充。其次,交换可能会很低效。交换就必须把整个进程同时调出,这就意味着为了2K的空间你不得不把一个8MB的进程整个调出。同样的道理,即使仅仅需要执行被调进的应用程序代码的一小部分,你也必须把整个进程同时调进。分页(paging)是把系统的内存划分成很小的块,即页面,每个页面可以独立的从磁盘调入或调出磁盘。分页与交换技术相似,但它使用更加细小的粒度(gran

6、ularity)。分页比交换有更多的登记(book-keeping)开销,这是因为页面数远比进程数要多,然而通过分页可以获得更多的灵活性。而且分页也更快一些,原因之一就是不再需要把整个进程调进调出,而只需要交换必要的页面就足够了。要记住前述的1000倍的速度差异,所以我们应该尽可能避免磁盘的I/O操作。传统上特定平台上页面的大小是固定的,比如x86平台为4K,这可以简化分页操作。不过,大多数CPU为可变大小的页面提供硬件支持,通常能够达到4M或者更大。可变大小页面可以使分页操作执行更快和更有效,不过要以复杂性为代价。标准发行的Linux内核不支持可变大小页面,所以我们仍然假定页面大小是4K。(

7、已经有支持Cyrix可变大小页面机制的补丁程序,但它们不是本书中官方发行版本的部分。而且据闻由此获得的性能增益也并不非常显著。)因为分页可以完成交换所能完成的所有工作,而且更加有效,所以类似于Linux一样的现代操作系统已不再使用交换,严格的说是只使用分页技术。但是术语“交换”已得到了广泛使用,以至于实际应用中术语“交换”和“分页”已经几乎可以通用;由于内核使用分页技术,所以本书就遵从这种用法。Linux能够交换到一个专用磁盘分区、或一个文件,或是分区和文件的不同组合。Linux甚至允许在系统运行时增加和移去交换空间,当你暂时需要额外大量的交换空间,或者假如你发现需要额外交换空间而又不想重启系

8、统的时候,这就会很有用了。另外,与一些Unix的风格(flavors)不同,Linux即使没有任何交换空间也能运行得很好。地址空间地址空间(address space)是一段表示内存位置的地址范围。地址空间有三种: 物理地址空间 线性地址空间 逻辑地址空间,也被称为虚拟地址空间(需要指出的是,I/O地址能够被看作是第四种地址空间,但是本书中对其不作讨论。物理地址是一个系统中可用的真实的硬件地址。假如一个系统有64M内存,它的合法地址范围是从0到0x4000000(以十六进制表示)。每个地址都对应于所安装的SIMMs中的一组晶体管,而且对应于处理器地址总线上的一组特定信号。分页可以在一个进程的生

9、存期里,把它或它的片段移入或者移出不同的物理内存区域(或不同物理地址)。这正是进程被分配一个逻辑地址空间的原因之一。就任何特定的进程来说,从0开始扩展到十六进制地址0xc0000000共3GB的地址空间是绰绰有余的。即使每个进程有相同的逻辑地址空间,相应进程的物理地址也都是不同的,因此它们不会彼此重叠。从内核的角度看来,逻辑和物理地址都被划分成页面。因此,就像我们所说的逻辑和物理地址一样,可以称它们为逻辑和物理页面:每个合法的逻辑地址恰好处于一个逻辑页面中,物理地址也是这样的。与之相反,线性地址通常不被认为是分页的。CPU(实际是下文中的MMU)会以一种体系结构特有的方式把进程使用的逻辑地址转

10、换成线性地址。在x86平台上,这种转换是简单地把虚拟地址与另一地址,即进程的段基址相加;因为每个任务的基址都被设置为0,所以在这种体系结构中,逻辑地址和线性地址是相同的。得到的线性地址接着被转换成物理地址并与系统的RAM直接作用。内存管理单元在逻辑地址和物理地址之间相互转换的工作是由内核和硬件内存管理单元(MMUmemory management unit)共同完成的。MMU是被集成进现代的CPU里的,它们都是同一块CPU芯片内的一个部分,但是把MMU当作一个独立的部分仍然非常有益。内核告诉MMU如何为每个进程把某逻辑页面映射到某特定物理页面,而MMU在进程提出内存请求时完成实际的转换工作。当

11、地址转换无法完成时,比如,由于给定的逻辑地址不合法或者由于逻辑页面没有对应的物理页面的时候,MMU就给内核发出信号。这种情况称为页面错误(page fault),本章后面会对此进行详细论述。MMU也负责增强内存保护,比如当一个应用程序试图在它的内存中对一个已标明是只读的页面进行写操作时,MMU就会通知OS。MMU的主要好处在于速度。缺少MMU时为了获得同样的效果,OS将不得不使用软件为每个进程的每一次内存引用进行校验,这种校验同时包括数据和指令在内,而这可能还包括要用为进程创建其生存所需的虚拟机。(Java所进行的一些工作与此类似。)这样做的结果将使系统慢得令人无法忍受。但是一个以这种内存访问

12、合法性检查方式集成在计算机硬件里的MMU却根本不会使系统变慢。在MMU建立起一个进程以后,内核就只是偶尔参与工作,例如在发生页面错误时,而这与全部内存引用数量相比是非常少的。除此而外,MMU还可以协助保护内存自身。没有MMU,内核可能不能够防止一个进程非法侵入它自己的内存空间或者是其它进程的内存空间。但是如何避免内核也会作同样的操作呢?在Intels 80486或更新的芯片上(不是80386),MMU的内存保护特性也适用于内核进程。页目录和页表在x86体系结构上,把线性地址(或者逻辑地址记住在Linux上,这二者具有相同的值)解析(resolving)到物理地址分为两个步骤,整个过程如图8-2

13、所示。提供给进程的线性地址被分为三个部分:一个页目录索引,一个页表索引和一个偏移量。页目录(page directory)是一个指向页表的指针数组,页表(page table)是一个指向页面的指针数组,因此地址解析就是一个跟踪指针链的过程。一个页目录使你能够确定一个页表,继而得到一个页面,然后页面中的偏移量(offset)能够指出该页面里的一个地址。为了进行更详细因而也会更准确的描述:给定页目录索引中的页目录项保存着贮存在物理内存上的一个页表地址;给定页表索引中的页表项保存着物理内存上相应物理页面的基地址;然后线性地址的偏移量加到这个物理地址上形成最终物理页面内的目的地址。其它CPU使用三级转

14、换方法,如图8-3所示。这在64位体系中尤其有用,以Alpha为例,其更大的64位的地址空间意味着类似于x86体系的地址转换将要求大量的页目录、大量页表、大量偏移量,或三者兼有。对于这种情况,Alpha的设计者们向线性地址模式中引入了另一层次,即Linux所称的页面中间目录(page middle directory),它位于页目录和页表之间。这个方案与以前实际是一样的,只不过多增加了一级。这种三级转换方法同样具有页目录,页目录的每一项包含一个页面中间目录的入口地址,页面中间目录的每一项包含一个页表的入口地址,而页表也同以前一样每一项包含物理内存中一个页面的地址,这个地址再加上偏移量就得到了最终的地址。而使情况更为复杂的是,通过进一步观察可知,三部分地址模式与两级地址转换是相关联的,而四部分地址模式则与三级地址转换相关联的,这是由于我们通常所说的“级(或层次levels)”不包括索引到页目录的第一步(我想是因为这一步没有进行转换的缘故)。令人奇怪的是内核开发者们决定只用其中一种模式来处理问

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1