内存管理的功能

           一个进程在计算机上运行,操作系统必须为其分配存储空间,使其部分或全部驻留在内存,因为CPU仅从内存中读取程序指令并执行,不论直接从外存上读取程序。不能何种操作系统的存储管理能够实现:内存分配、地址变换、存储保护、存储共享和存储扩充。

 

内存分配

        内存分配是为每道程序分配内存空间。分配的方式主要有三种:

       (1)直接指定方式:程序员在编写程序的时候,或编译器在编译程序的时候采用的是实际内存的地址。采用这种方式的前提是已知存储器的可用容量。

       (2)静态分配方式:用户或编译器编译的目标程序时都从0开始的编址方式。当把他们装入内存时,给他们分配存储空间,并确定他们在主存的实际位置。这种方式在一个作业装入内存时就必须分配其所要求的所有内存空间,如果没有足够的内存空间,则不能装入该进程。一旦进程装入内存,一直占用着分配给他的内存,在其运行过程中不能申请额外的内存空间。

       (3)动态分配方式:作业在内存中的位置也是在装入时确定,但是在进程执行过程中可以根据需要申请附加的内存空间。一个作业已占用的部分内存空间不需要可以归还给系统,这种方式能实现个别存储区域的动态分配和回收。

注:内存管理还包括内存空间的回收

 

地址变换

         地址变换是指逻辑地址到物理地址的变换,为此必须清楚这些概念:

          (1)地址空间:编译程序在对一个源程序时,总是从0号单元开始为其分配地址的,其他所有地址都是从这个地址开始地址顺序排下来的,所以地址空间中的所有地址都是相对于起始地址的,因此逻辑地址也叫相对地址。(虚的概念)

      (2)存储空间:一个数据在主存中的位置成为物理地址或绝对地址(实的概念)。一个编译好的程序存在于它自己的地址空间采用的逻辑地址空间,当装入内存运行时,转换成物理地址。

      (3)地址重定位:由于作业装入而进行的地址变换叫做地址重定位。

          任何实际程序都是由单独的模块组成,然后这些模块链接并加载到内存,这样程序才能运行。当编译器或汇编器编译一个单独的模块时,它不知道这个模块会被加载内存的何处,因此编译每个模块都是从地址0开始的。当这个模块真正装入内存时,它一般不可能是从0开始的,这样就需要一个地址转换,称之为重定位。重定位又可以分为静态重定位和动态重定位。

        (1)静态重定位:在程序被加载到内存之前已经知道了它将要加载到内存的起始地址,这样就可以事先进行地址转换,把相对地址转换成绝对地址。采用静态重定位方式,当一个程序加载到内存后,其地址固定不变。(对应于前面的静态分配方式)

      (2)动态重定位:作业装入内存后所有的地址仍是相对地址,将相对地址转换成绝对地址的过程被推迟到程序指令要真正执行时进行。动态重定位需要硬件---重定位寄存器的支持。在重定位寄存器存放程序内存的起始地址。相对地址与重定位寄存器的值相加就是程序要访问的内存地址。这样,当加载的模块要在内存移动,就只需要修改重定位寄存器的值就可以了,不需要对程序做任何改变。

存储保护

        每个进程都应受到保护,以免被其他程序有意或无意的干扰。因此一个进程以外的其他进程中的程序未经授权不能访问该进程的内存单元。

      (1)地址保护:通常用户不能访问操作系统的部分,一个进程通常也不能访问其他进程的地址上去。

      (2)权限保护:不同的进程有不同的存取权限,如果对一个只具有执行权限的进程进行写操作,这是违法的。内存保护的需求必须由处理器来满足而不是操作系统。

 

存储共享

             保护机制具有一定的灵活性,允许多个进程访问主存中的同一部分。例如许多进程在执行同一个程序,则允许进程访问该程序的同一个副本一比让每个进程拥有单独的副本效率更高。内存管理系统必须允许对内存共享区域受控访问。

 

存储扩充

            通过某种手段实现内存空间的逻辑扩充。使用户感觉好像有一个更大的内存,并不是实际扩大内存。满足如下功能:

      (1)请求调入功能:利用程序的局部性原理,把程序的一部分装入内存,使其先运行,在运行过程中如果需要访问的数据没有装入内存,可向操作系统提出申请,由操作系统从磁盘上把进程所需要的部分调入内存。

      (2)置换功能:若发现内存中已经没有空间装入需要的数据,系统应该把能将内存中暂时不用的程序和数据调出内存,存到磁盘上,以释放空间,来装入所需的进程部分。

       虚拟内存技术的雏形:交换和覆盖技术

      (1)交换技术:当内存中某些进程处于阻塞状态,但他们却占有大量的内存,甚至所有的进程都处于阻塞状态而使CPU被迫停止等待时,这时有许多作业在外存等待进入内存,造成资源浪费。引入“交换”的概念,把内存中暂时不用的程序和数据换出到外存上去,以释放内存空间,当换入到外存的数据再次使用时,把他们换入内存。进程的代码有时候在内存中是不会改变的,所以进程代码在换出的时候就不必要再次保存到硬盘,当再次装入的时候,只需要把原来的代码重新载入就可以了。为了保存内存换出的数据,操作系统会在外存上设置一个交换区。(交换区保存一些被进程修改的数据)

     (2)覆盖技术:覆盖技术是指把程序划分成若干个功能相对独立的程序段,按照自身的逻辑结构将那些不会同时执行的程序共享同一块内存区域。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值