关于地址重定位

  http://blog.csdn.net/tanliyoung/article/details/1258653

6.1 存储器的基本概念

       主存储器管理仍然是今天操作系统十分重要的内容;能否合理而有效的使用主存,在很大成度上反映了操作系统的性能,并直接影响到整个计算机系统作用的发挥。

6.1.1 存储器的层次

      目前在许多计算机系统中,采用三级存储器结构,即高速缓冲存储器、主存储器和外部存储器。

三级存储器的比较

     从高速缓存到外存,其容量愈来愈大,一般每级之间相差几个数量级。而访问数据的速度则愈来愈慢,价格也愈来愈便宜。

6.1.2 地址重定位

    为了弄清什么是重定位,我们首先介绍相对地址、绝对地址和逻辑地址空间、存储空间的概念。

1.逻辑地址空间

名空间

       用户在编程或编辑源程序时,不考虑作业之间的存储空间分配,而是将其源程序存于程序员建立的符号名字空间(简称名空间)内,如图6-1(a)所示。

逻辑地址空间

      当对源程序进行编译时,编译后一个目标程序所限定的地址范围称为该作业的逻辑地址空间。

图6-1 名空间、地址空间和存储空间

如图6-1(b)所示。

2.物理空间

       所谓物理空间(也称存储空间)是指主存中物理单元的集合。这些单元的编号称为物理地址或绝对地址。因此,物理空间的大小,是由主存的实际容量决定的。如图6-1(c)。

3.地址重定位

需要地址重定位的例子

        如图6-2(a)是一个简单的程序段。第一条指令是把数据A取到1号寄存器中,第二条指令是把数据B同1号寄存中的内容相加,结果放在1号寄存器中,第三 条指令是把1号寄存器的内容送入相对地址10中去。如果这个程序原封不动地装入主存自100号单元起的存储区中(如图6-2(b)),就无法正确执行。

地址重定位

       由于一个作业装入到与其地址空间不一致的存储空间所引起的,对有关地址部分的调整过程称为地址的重定位。这个调整过程就是把作业地址空间中使用的逻辑地址变换成主存中物理地址的过程。这种地址变换也称为地址映射.

图6-2 程序装入举例

4.重定位类型

     根据对地址变换进行的时间及采用的技术手段的不同,可把地址重定位分为静态重定位和动态重定位两类。

静态重定位

(1)含义

     静态重定位是在程序运行之前由装配程序完成的。例图5-2(a)中的情况,只需将与地址有关的项都加上100就可以了,见图5-2(c)。

(2)优点

    它的主要优点是,无需增加硬件地址变换机构,因而可在一般计算机上实现。

(3)缺点

    主要缺点有:
       ①要求给每个作业分配一个连续的存储空间,且在作业的整个执行期间不能再移动,因而也就不能实现重新分配主存。
       ②用户必须事先确定所需的存储量,若所需的存储量超过可用存储空间时,用户必须考虑覆盖结构。
       ③用户之间难以共享主存中的同一程序副本。

动态重定位

(1)含义

       动态重定位是在程序执行过程中由硬件地址变换机构实现的。

(2)例子

        最简单的办法是利用一个重定位寄存器。该寄存器的值由调度程序根据作业分配到的存储空间的起始地址来设定。在具有这种地址变换机构的计算机系统中,当作业 执行时,不是根据CPU给出的逻辑地址去访问主存,而是将逻辑地址与重定位寄存器中的内容相加后得到的地址作为访问主存的地址。其地址变换过程

如图6-3所示重定位类型

Adblock

图6-3 动态重定位

(3)动态重定位的主要优点有:

        ①用户作业不要求分配连续的存储空间。
        ②用户作业在执行过程中,可以动态申请存储空间和在主存中移动。
        ③有利于程序段的共享。

(4)动态重定位的主要缺点有:

       ①需要附加的硬件支持。
       ②实现存储管理的软件算法比较复杂。



bbs.pediy.com/showthread.php?t=76876

地址重定位

  在这之前我一直对地址重定位的细节不是很了解。以下文章摘自《操作系统原理DOS篇(第二版)》。是我目前看过的关于重定位的最好的文章。与大家分享一下。
  以下介绍程序是如何装入内存,从而变成在计算机内可执行的形式的。
  在用汇编语言或高级语言编写的程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名的集合叫做“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序经过编译,得到的目标程序是以“0”作为参考地址的模块,然后多个目标模块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执行。我们把目标模块中的地址称为相对地址(或逻辑地址),而把相对地址的集合叫做“相对地址空间”或简单地叫做“地址空间”。
  装配模块虽然具有统一的地址空间,但它仍是以“0”作为参考地址,即是浮动的。要把它装入内存执行,就要确定装入内存的实际物理地址,并修改程序中与地址有关的代码,这一过程叫做地址重定位。
  地址空间的程序和数据经过地址重定位处理后,就变成了可由CPU直接执行的绝对地址程序。我们把这一地址集合称为“绝对地址空间”或“存储空间”。
  地址重定位完成的相对地址转换成内存的绝对地址工作又称为地址映射(map)、按照重定位的时机,可分为静态重定位和动态重定位。
一、静态重定位
  静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始位置,直接修改装配模块中的有关使用地址的指令。
  例如,一个以“0”作为参考地址的装配模块,要装入以100为起始地址的存储空间。显然,在装入之前要做某些修改,程序才能正确执行。例如,MOV EAX,[500]这条指令的意义,是把相对地址为500的存储单元内容1234装入EAX号累器。现在内容为1234的存储单元的实际地址为1500,即为相对地址(500)加上装入的地址(1000),因此,MOV EAX,[500]这条指令中的直接地址码也要相应地加上起始地址,而成为MOV EAX,[1500]。
  程序中涉及直接地址的每条指令都要进行这样的修改。需要修改的位置称为重定位项,所做的加实际装入模块起始地址修改中的块起始地址称为重定位因子。
  为支持静态重定位,连接程序在生成统一地址空间和装配模块时, 应产生一个重定位项表,连接程序此时还不知道装配模块将要装入的实际位置,故重定位表所给出的需修改位置是相对地址所表示的位置。
  操作系统的装入程序要把装配模块和重定位项表一起装入内存。由装配模块的实际装入起始地址得到重定位因子,然后实施如下两步:
  (1)、取重定位项,加上重定位因子而得到欲修改位置的实际地址;
  (2)、对实际地址中的内容再做加重定位因子的修改,从而完成指令代码的修改。
  对所有的重定位项实施上述两步操作后,静态重定位才完成,尔后可启动程序执行。使用过的重定位项表内存副本随即被废弃。
  静态重定位有着无需硬件支持的优点,但存在着如下的缺点:一是程序重定位之后就不能在内存中搬动了;二是要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域内。

二、动态重定位
  动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切地说,是在每次访问内存单元前才进行地址变换。动态重定位可使装配模块不加任何修改而装入内存,但是它需要硬件——定位寄存器的支持。
  程序的目标模块装入内存时,与地址有关的各项均保持原来的相对地址不进行任何修改。如MOV 1,[500]这条指令仍是相对地址500。当此模块被操作系统调度到处理机上执行时,操作系统将把此模块装入的实际起始起始地址减去目标模块的相对基地址,然后将其差值装入定位寄存器中。当CPU取得一条访问内存的指令时,地址变换硬件逻辑自动将指令中的相对地址与定位寄存器中的值相加,再依此和值作为内存绝对地址去访问该单元中的数据。
  由此可见,进行动态重定位的时机是在指令执行过程中,每次访问内存前动态地进行。采取动态重定位可带来两个好处:
  (1)、目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;
  (2)、一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储吉尔吉斯可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。
  动态重定位技术所付出的代价是需要硬件支持
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
页式地址重定位操作系统是一种常见的内存管理技术,通常用于将虚拟内存地址转换为物理内存地址。在这种系统,内存被划分为大小相等的页框,而程序使用的内存也被划分为相同大小的页面。每个页面都有一个唯一的页号,而每个页号都映射到一个特定的页框。 当程序引用一个虚拟地址,操作系统将虚拟地址分解为页号和页内偏移量,并将页号映射到相应的页框。然后,操作系统将页内偏移量添加到页框的物理地址,从而获得物理地址。 但是,当操作系统将进程从一个物理地址空间移动到另一个物理地址空间,所有的虚拟地址都必须被重新映射到新的物理地址。这个过程就被称为页表重定位。 在页式地址重定位系统,页表存储在主存储器,并通过页表寄存器来访问。当一个程序引用一个虚拟地址,处理器将虚拟地址的页号发送到页表寄存器,并获取与该页号相关联的页表项。页表项包括该页号所映射的物理页框号。然后,处理器将物理页框号与虚拟地址的页内偏移量组合,从而计算出物理地址。 当操作系统需要将一个进程从一个地址空间移动到另一个地址空间,页表必须被更新,以便将旧的物理页框号映射到新的物理页框号。这个过程通常涉及到页表基址寄存器和页表长度寄存器的更新,以及所有虚拟地址的重新映射。 总之,页式地址重定位操作系统是一个基于分页内存管理的系统,它通过将虚拟地址映射到物理地址来管理内存。在这个系统,页表被用来存储虚拟页号和物理页框号之间的映射关系,并且在地址空间移动需要进行重定位操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值