物理地址、虚拟地址、逻辑地址、线性地址、虚拟内存

来源:互联网 发布:反转链表 非递归 java 编辑:程序博客网 时间:2024/05/21 14:54

1.物理地址

用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。

在实地址模式(因为实模式没有分段或分页机制,Cpu不进行自动地址转换),程序员操作的就是物理地址,所谓的物理地址就是物理内存上的32位地址,物理地址可以直接定位到物理内存上的位置,无论任何操作,最终都必须要得到物理地址才能在物理内存上进行操作.

2.虚拟地址
操作系统都提供了虚拟内存virtual memory管理抽象进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它转换成真正的物理地址

有了虚拟内存,一个程序就可以使用比真实物理地址大得多的地址空间。所谓的虚拟地址,从广义上讲,不是物理的就是虚拟的,因为不是物理地址的地址是无法在物理内存上定位的,所以他们都可以被称为虚拟地址”,从这个意义上讲,逻辑地址和线性地址都可以被称为虚拟地址而从狭义上讲,虚拟地址指的是没有经过分页机制和分段机制转换的地址,也就是段寄存器和变址寄存器内容的组合,从这个意义上来说,虚拟地址就是类似于CS:SI这样形式的地址.

3.逻辑地址Logical Address

逻辑地址就是上层程序员可以操作的地址,和段相关的偏移地址部分也就是变址寄存器中存储的32偏移地址,而其他寄存器上的地址往往对于上层程序员来说是不可更改甚至是不可见的只有在实模式下,逻辑地址才和物理地址一致(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑地址也就是在保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样).应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及.应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作.

4.线性地址

对狭义上的虚拟地址通过分段机制以后,可以得到段基址段界限以及段偏移地址(即逻辑地址),段基址与段偏移地址的组合就是线性地址,线性地址可以在虚拟内存上完成定位如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址.若没有启用分页机制,那么线性地址直接就是物理地址.对于程序员来说,他们并不关注MMU如何工作以及其得到的结果,他们只需要关心线性地址或者逻辑地址就可以完成全部工作了.

5.虚拟内存

是指计算机呈现出要比实际拥有的内存大得多的内存量.因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序.这使得许多大型项目也能够在具有有限内存资源的系统上实现.

很多内存管理策略都需要同时将多个进程放在内存中,以便执行这些进程,这些策略都需要在进程执行之前将整个进程放在内存中。而虚拟内存技术允许执行进程不必完全放在内存中,这样我们就可以运行比物理内存大的程序,使得程序员不受内存存储的限制。

    比如说异常处理、错误处理可能不经常执行或者就不执行,这些程序使得我们可以只需要加载需要执行的部分,从而减少了内存使用。

    从而,构造一个大的虚拟内存空间,将其映射到较小的物理内存。这个大的虚拟内存空间存储我们进程的所有信息,而当执行进程时,我们只加载需要执行的部分,。这里就需要采用一定的技术,比如按需调页、页面置换、帧分配等,使得进程的执行可以在虚拟内存和物理内存之间进行协调,完成整个程序的执行。

    优点:虚拟内存可以大于物理内存,一般为物理内存的1.5倍到3倍,从而可以运行比物理内存大的程序,进而使得更多的程序可以同时执行,提高了多道程序的程度,增加了CPU的使用率,并且使得进程之间的独立性得到了更好的体现。

6.内存的基本管理(页  段  段页)

    1通常将逻辑内存进行分页,将逻辑内存分成很多小的页面,然后通过页表,映射到物理内存,而物理内存则划分为很多成为帧的块,从而和页对应起来,页和帧的对应关系主要是通过页表来保存的,页表中有很多条目,较为详细地保存了这些信息。进程都有自己的内存空间(虚拟内存),上面所说的虚拟内存技术就是指进程的虚拟内存空间存储了所有的进程信息,然后虚拟内存空间分成很多页,这些页并不是在进程执行时全部换入到物理内存,而是按照需要进行换入,这需要一定的算法管理

    虚拟内存(虚拟存储器)是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,

    虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过程包括6个步骤:

  1CPU访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主存内。
  2)如该组号已在主存内,则转而执行;如果该组号不在主存内,则检查主存中是否有空闲区,如果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。
  3)从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。
  4)从地址变换表读出与逻辑组号a对应的物理组号a
  5)从物理组号a和组内字节地址b得到物理地址。
  6)根据物理地址从主存中存取必要的信息。
    调度方式有分页式、段式、段页式3种。

页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。页式调度的优点没有外碎片只有内碎片,页表对程序员来说是透明的,地址变换快,调入操作简单;缺点各页不是程序的独立模块不便于实现程序和数据的保护

段式调度是按程序的逻辑结构划分地址空间,段的长度不等的,并且允许伸长,它的优点是消除了内碎片有外碎片易于实现存储保护,便于程序动态装配;缺点是调入操作复杂

段页式调度中把物理空间分成页程序按模块分段,每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本,软件也较复杂。大型通用计算机系统多数采用段页式调度。

 

 


0 0