您的位置:首页 > 其它

操作系统_精髓与设计原理_内存管理之需求

2014-08-21 23:49 405 查看
内容来源于:操作系统:精髓与设计原理(第七版)的内容整理,并非对原作者和翻译者的版权的侵犯。

内存管理

对于内存管理来说,在单道程序设计系统中,内存被分成了两个部分,一部分供操作系统使用即驻留程序,一部分供当前正在执行的程序使用。而在多道程序设计中,因为内存中同时存在多个进程,因此必须在内存中细分出“用户部分”,这个就称之为内存管理

对于操作系统来说,有效的内存管理是非常重要的,如果大量的进程都在等待I/O,此时处理器处于空闲状态,这样一来就要求分配合适数目的就绪进程来使用这些空闲的处理器时间。

内存管理术语

1.页框:内存中的一个固定长度的块。

2.页:一个固定长度的数据块,存储在二级存储器中(如磁盘),数据页可以临时复制到内存中的页框中。

3.段:一个变长的数据块,存储在二级存储器中。整个段可以临时复制到内存的一个可用的区域内(分段),或者可以将一个段分为许多页,将每个页单独复制到内存中(分段与分页的结合)。

当我们试图了解和理解内存管理时,明确对于内存管理的需求,对我们理解各种策略和技术有相当大的帮助,内存管理的需求如下:

重定位
保护
共享
逻辑组织
物理组织

对于上面的五个需求,解释如下:


重定位:由于在多道程序设计系统中,可用的内存空间可以被多个进程共享。通常情况下,程序员无法提前知道某个程序执行期间会有其他那些程序驻留在内存中。此外,还希望提供一个巨大的就绪进程池,能够把活动进程换入或者换出内存,以便使处理器的利用率最大化。一旦程序被换出到磁盘,当下一次换入时,如果必须放在和被换出前相同的内存区域,那么这将会是很大的限制。为了避免这种限制,需要把进程重定位到内存的不同区域。
                                                      
保护:每个进程都应该受到保护,以免被其他进程有意无意地干涉。因此,该进程外的其他进程中的程序不能未经授权地访问(读或写)该进程的内存单元。且,由于重定位的需求,增加了保护需求的难度,由于程序在内存中的位置是不可预测的,因此在编译时不可能通过检查绝对地址来确保保护。并且,大多数程序设计语言允许在运行时进行地址的动态计算。因此必须在运行时检查进程产生的所有内存访问,以确保它们只访问了分配给该进程的内存空间。既支持保护又支持重定位的机智已经存在。通常,用户进程不能访问操作系统的任何部分,不论是程序还是数据。并且,一个进程中的程序通常不能跳转到另一个进程的指令。如果没有特别的许可,一个进程中的程序也不能访问其他进程中的其他进程的数据区。处理器必须能够终止这样的指令。注:内存保护的需求必须有处理器硬件来满足,而不是操作系统(软件)来满足。这是因为操作系统不能够预测程序可能产生的所有的内存访问;即使可以预测,提前审查每个进程可能潜在的违法访问也是非常费时的,因此,只能在指令访问内存时来判断这个内存访问是否违法。
                                                                                                                                      
共享 :任何保护机制都必须具有一定的灵活性,以允许多个进程访问内存的同一部分。因为,如果多个进程在执行同一个程序,则允许每个进程访问该程序的同一个副本比每个进程都有自己的单独的副本更有优势。合作完成一个任务的进程可能需要共享访问相同的数据结构。因此内存管理系统必须允许对内存区域进行受控的访问,而不会损害基本的保护。(重定位机制亦支持共享)
                                                                                                                                                                                                                                                   
逻辑组织 :计算机系统中,内存总被组织成线性(或一维)的地址空间,并且地址空间是由一系列字节或者字组成的。外部存储器在物理层也按类似方式组织。这样的组织方式类似于实际的机器硬件,但是它不符合程序构造的典型方法。大多数程序被组织成模块,某些是不可修改的,某些可修改。使用某种模块的形式组织被称为了逻辑组织。这样组织的用户程序和数据有以下好处: 
                                                                               
  1、可以独立编写和编译模块,系统在运行时解析一个模块到其他模块的所有引用。                                                                                         
 2、通过适度的额外开销,可以在不同的模块以不同的保护级别(只读、只执行)。                                                                                           
 3、可以引入某种机制,使得模块被多个进程共享。模块级提供共享的有点在于,它符合用户看待问题的方式,因此可以很容易的指定需要的共享。  注:最易满足以上这些需求的是分段。
物理组织 :计算机存储器至少要分为两极,内存和外存。内存提供快速的访问,成本高,内存也是易失性的,不能提供永久存储。外存比内存慢且便宜,通常为非易失性的,因此,大容量的外村可以用于长期存储程序和数据,而较小额内存则用于保存当前使用的程序或数据。                           
在这样的两级方案中,系统主要关注的是内存和外存之间信息流的组织。可以由程序员负责组织这个信息流,但由于以下两个方面导致这种方式是不切实际的:                                                                                                                                      
                                                        
1、可供程序和数据使用的内存可能不足。在这种情况之下,程序员必须使用覆盖(overlaying)技术,来组织程序和数据。不同的模块被分配到内存的同一区域,主程序负责在需要的时间时换入、换出模块。即使有编译程序的帮助,覆盖技术的实现也是非常浪费程序员的时间的。                     
 2、多道程序设计环境中,程序员编写代码时,不能知道可用空间的大小和位置。                                                                                                
因此可知,二级存储器之间的信息移动的任务应该是一种系统责任,这一任务恰恰是存储管理的本质。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: