操作系统内存管理原理

合集下载

计算机操作系统存储管理

计算机操作系统存储管理

计算机操作系统存储管理计算机操作系统存储管理是指操作系统在运行过程中管理和控制计算机的存储资源的一种机制。

它负责分配和回收内存,以及保护和管理进程的内存访问权限。

存储管理是操作系统中的一个重要子系统,对系统的性能和稳定性具有重要影响。

本文将介绍计算机操作系统存储管理的基本原理、常见的存储管理技术以及其在实际应用中的作用。

一、存储管理的基本原理在计算机系统中,存储器扮演着重要的角色,它用于存储程序、数据和系统状态。

计算机操作系统存储管理的基本原理是将物理内存划分为多个逻辑区域,每个区域被分配给不同的程序或进程使用。

操作系统维护一个内存分配表,记录每个逻辑区域的使用情况,并根据请求进行内存分配与回收。

当进程创建时,操作系统将为其分配一定大小的内存,当进程终止时,操作系统会回收这些内存资源。

同时,存储管理还负责处理内存碎片问题,通过内存的动态分配与合并来最大化利用内存资源。

二、常见的存储管理技术1. 基于固定分区的存储管理技术基于固定分区的存储管理技术是最早的一种存储管理方法。

它将物理内存划分为若干固定大小的分区,每个分区只能分配给一个进程使用。

该方法简单直观,但由于分区的固定大小,会产生很多内存碎片,不利于内存的高效利用。

2. 基于可变分区的存储管理技术为了解决内存碎片问题,出现了基于可变分区的存储管理技术。

这种技术允许每个进程动态地申请和释放内存空间,分区的大小可以根据进程的需要进行调整。

它相对于固定分区的方法更加灵活,能够提高内存利用率,但也存在内存碎片问题。

3. 页式存储管理技术页式存储管理技术将物理内存和逻辑内存划分为固定大小的页块,进程的地址空间也被划分为相同大小的页。

通过将逻辑地址转换为物理地址,实现了逻辑内存与物理内存的映射。

该技术可以很好地解决内存碎片问题,并且方便创建和销毁进程,但需要额外的地址转换开销。

4. 段式存储管理技术段式存储管理技术将进程的逻辑地址空间划分为若干段,每个段具有不同的长度和属性。

ram的应用举例及原理

ram的应用举例及原理

RAM的应用举例及原理RAM简介RAM (Random Access Memory) 是计算机中一种常见的内存类型,用于临时存储数据和指令。

与ROM (Read-Only Memory) 不同,RAM可以读取和写入数据,其内容随电源关闭而丢失。

RAM可以快速访问,因此在计算机系统中扮演着重要的角色。

RAM的原理RAM的原理是基于电子存储单元来存储数据。

每个存储单元都由一个开关和一个电容器组成,用于表示一个位 (0或1)。

通过充电和放电来表示位的状态,电容器充满时表示位为1,电容器不充满时表示位为0。

RAM通过读取和写入电容器的状态来存储和检索数据。

RAM的应用举例1. 操作系统内存管理在操作系统中,RAM被广泛用于存储操作系统本身和运行的应用程序。

操作系统通过内存管理技术将可用的RAM划分成不同的区域,并为每个应用程序分配一定的内存空间。

这样可以保证每个应用程序都有足够的RAM来执行任务,同时避免应用程序之间的干扰。

•列点1:RAM在操作系统中用于存储操作系统本身和运行的应用程序。

•列点2:操作系统通过内存管理技术将可用的RAM划分成不同的区域。

•列点3:每个应用程序分配一定的内存空间,以保证它们能够正常运行。

2. 数据库管理系统在数据库管理系统中,RAM用于存储数据库的缓存。

由于RAM具有高速访问的特点,将数据库的常用数据存储在RAM中可以极大地提高数据库的访问性能。

通过RAM缓存,数据库系统可以在快速地检索和更新数据。

•列点1:RAM用于存储数据库的缓存。

•列点2:将常用数据存储在RAM中可以提高数据库的访问性能。

•列点3:通过RAM缓存,数据库系统可以在快速地检索和更新数据。

3. 图形处理在图像和视频处理应用中,RAM用于存储图像数据。

图像处理程序可以将图像读取到RAM中,进行处理和操作,然后将结果写回到RAM中或输出到显示器。

高速的RAM可以保证图像处理过程的流畅性和快速响应。

•列点1:RAM用于存储图像数据。

操作系统的工作原理

操作系统的工作原理

操作系统的工作原理操作系统是计算机系统中的一个重要组成部分,它负责管理和协调计算机的硬件和软件资源,为用户提供方便、高效和稳定的计算环境。

操作系统通常通过以下几个方面来实现其工作原理。

1. 进程管理:操作系统将计算机的内存空间划分为若干个进程,每个进程都有自己的地址空间和执行状态。

操作系统通过进程调度算法,控制进程的创建、终止、挂起和恢复操作,实现进程的合理运行和资源的分配。

2. 内存管理:操作系统负责管理计算机的物理内存和虚拟内存空间。

物理内存管理涉及内存的分配和回收,以及页面置换算法的选择和实现。

虚拟内存管理利用辅存作为缓存区域,将进程的内存分为若干页,并进行页面的映射,提供了更大的地址空间和更高的内存利用率。

3. 文件系统:操作系统通过文件系统为用户提供对文件和目录的管理。

文件系统包括文件的创建、删除、读取和写入等操作,通过目录结构和文件控制块来维护文件的元信息。

操作系统还提供了文件权限管理和数据备份等功能,保证文件的安全性和可靠性。

4. 设备管理:操作系统用于管理和控制各种硬件设备,包括输入输出设备、存储设备和网络设备。

设备管理涉及设备的初始化、分配和释放,以及设备的中断处理和驱动程序的调度。

操作系统通过设备驱动程序和中断处理程序,完成与硬件设备的交互。

5. 用户界面:操作系统为用户提供了不同的用户界面,包括命令行界面和图形界面等。

命令行界面通过命令解释器解析用户的命令,并执行相应的操作。

图形界面通过窗口系统和图形用户界面库,提供了更加直观、友好和多样化的操作方式。

操作系统的工作原理可以总结为对计算机资源的有效管理和合理调度,以提高计算机的性能和可靠性。

通过进程管理、内存管理、文件系统、设备管理和用户界面等功能的实现,操作系统为用户提供了一个良好的计算环境,使其能够方便地利用计算机完成各种任务。

操作系统原理第5章 存储管理

操作系统原理第5章 存储管理

• ⑶最佳适应算法
• 最佳适应算法的空闲链是按空闲区从小到大顺序排 列。为进程选择分区时总是寻找其大小最接近进程 所要求的存储区域。所谓“最佳”是指每次为进程 分配内存时,总是把能满足要求、又是最小的空闲 分区分配给进程,避免“大材小用”。
• 因为每次分配后所切割下来的剩余部分总是最小的, 这样将加速碎片的形成。
• ①如果被回收空闲分区没有空闲伙伴分区,那么保留该分区为一 个独立的空闲分区,否则执行②;
• ②合并回收分区及其伙伴分区,从而得到一个尺寸(2I+1)更大的 回收空闲分区,转移到①;
一个伙伴系统内存分配与回收的例子
• 伙伴系统克服了固定分区和动态分区存储管理技术的缺陷。但是伙伴 系统存在一个问题,即内存空间需要不断地进行分裂和合并,频繁的 伙伴分区合并操作会浪费很多时间。
• ③内存分配原则,以页帧为单位来分配内存,将进程若干个逻辑上连续的 页面装入若干个离散的页帧中,由页表提供进程的页号到存储空间帧号的 映射。
5.2.4伙伴系统
• 其实现原理如下: • 一个伙伴系统内存的用户可用空间为2U。进程申请存储空间时,
系统总是为其分配大小为2I的一个空闲分区。其中S≤I≤U,2S是系 统允许的最小分区尺寸。在实际操作系统中,最小分区尺寸一般 为212。 • 如果进程申请的存储空间大小为K,且2I-1<K≤2I,则将整个2I大小的 分区分配给该进程;否则,该分区被分割成两个大小相等的伙伴 分区,大小为2I-1;再判断K是否满足条件:2I-2<K≤2I-1,若满足条件, 则将两个伙伴中的任何一个分配给该进程。否则,将其中一个伙 伴又分成两个大小相等的伙伴分区;此过程一直继续进行,直到 产生的分区满足条件I-J≥S并2I-J-1<K≤2I-J,将2I-J大小的分区分配给该 进程;当I-J-1<S时,系统不再分割成两个大小相等的伙伴分区,将 2S大小的分区分配给该进程。 • 当进程执行完毕,释放一个尺寸为2I的分区时,系统用下面的算法 回收该分区。

计算机操作系统内存管理了解内存分配和回收的原理

计算机操作系统内存管理了解内存分配和回收的原理

计算机操作系统内存管理了解内存分配和回收的原理计算机操作系统内存管理是操作系统中极为重要的一部分,它负责管理计算机主存(内存)的分配和回收。

内存分配和回收的原理对于了解计算机系统的运行机制至关重要。

本文将从内存管理的基本概念开始,介绍内存的分配和回收原理。

一、内存管理基本概念内存管理是操作系统中的一个重要功能,其主要任务是将有限的内存资源分配给各个进程,并及时回收不再使用的内存。

内存管理的核心是虚拟内存技术,它将计算机的内存空间划分为若干个固定大小的页或块,每个进程都认为自己拥有整个内存空间。

二、内存分配原理1. 连续分配在早期的操作系统中,内存分配采用的是连续分配原理。

系统将内存分为固定大小的分区,并为每个进程分配连续的内存空间。

这种分配方法简单高效,但会导致内存碎片问题,进而影响系统性能。

2. 非连续分配为解决内存碎片问题,后来的操作系统引入了非连续分配原理。

非连续分配可以分为分页式和分段式两种方式。

- 分页式:将物理内存划分为固定大小的页框,逻辑地址空间也被划分为相同大小的页。

通过页表实现逻辑地址到物理地址的映射。

- 分段式:将逻辑地址空间划分为若干个段,每个段的大小可以不同。

通过段表实现逻辑地址到物理地址的映射。

三、内存回收原理内存回收是指在进程不再使用某块内存时,及时将其释放,使其成为可供其他进程使用的空闲内存。

内存回收涉及到的主要原理有以下几种:1. 清除位图操作系统通过使用一张位图,来记录内存中的空闲块和已分配块的状态。

当一个进程释放内存时,系统会将相应的位图标记为空闲,以便后续进程可以使用。

2. 空闲链表操作系统通过维护一个空闲链表来管理空闲内存块。

当一个进程释放内存时,系统会将该内存块插入空闲链表,使其成为可供其他进程分配的空闲内存。

3. 垃圾回收垃圾回收是指当进程释放内存后,操作系统自动检测并回收无法访问到的对象所占用的内存。

垃圾回收可以通过引用计数和标记清除等算法实现。

四、内存管理策略为了提高内存利用率和系统性能,操作系统采用了一系列内存管理策略:1. 内存分配策略- 最先适应算法:从空闲链表中选择第一个足够大的内存块分配给进程。

操作系统工作原理

操作系统工作原理

操作系统工作原理操作系统是计算机系统的核心软件,负责协调和管理计算机硬件、软件和用户之间的交互。

操作系统的工作原理主要包括以下几个方面:1.进程管理:操作系统通过进程管理来实现对计算机中运行的各个程序的控制和调度。

操作系统为每个程序创建一个进程,并分配资源给进程。

它通过调度算法来决定进程的执行顺序,保证资源的合理利用和进程的公平竞争。

2.内存管理:操作系统负责管理计算机的内存资源。

它通过内存管理单元(MMU)将物理地址转换为逻辑地址,并进行地址映射和页表管理。

操作系统还负责内存的分配和回收,保证进程之间的内存隔离和互不干扰。

3.文件系统:操作系统提供文件系统来管理计算机中的文件和文件夹。

文件系统通过文件描述符和目录结构来组织文件,并提供文件的创建、读取、写入、删除等操作。

它还负责文件的保护和安全性管理,实现对文件的共享和访问控制。

4.设备驱动程序:操作系统通过设备驱动程序来管理计算机中的硬件设备。

设备驱动程序负责与硬件之间的交互,并提供统一的接口供应用程序进行访问。

操作系统通过设备驱动程序对硬件进行控制和管理,保证硬件的正常运行。

5.用户界面:操作系统提供用户界面供用户与计算机进行交互。

用户界面可以分为命令行界面和图形用户界面两种形式,用户可以通过输入命令或者操作图形界面来进行与计算机的交互。

操作系统负责解析用户的输入,并将指令传递给相应的模块进行处理。

6.系统调用:操作系统通过系统调用来提供一系列的服务供应用程序调用。

系统调用是操作系统与应用程序之间的纽带,它提供了一组接口,供应用程序进行文件操作、进程控制、内存管理等操作。

应用程序通过系统调用请求操作系统提供的服务,从而完成各种功能。

7.中断处理:操作系统通过中断处理来响应外部硬件的请求。

中断是一种特殊的事件,例如硬件故障、时钟中断等,当发生这些事件时,操作系统会立即响应并进行相应的处理。

中断处理程序会保存当前进程的状态,切换到中断服务例程进行处理,然后恢复中断之前的状态。

操作系统内存管理机制

操作系统内存管理机制

操作系统内存管理机制操作系统内存管理是操作系统的一个重要功能,它负责管理计算机的物理内存资源,以便为进程提供必要的内存空间。

在现代计算机系统中,内存管理是操作系统中最重要的子系统之一,它直接影响到系统的性能和稳定性。

内存管理的主要任务是将计算机的内存划分为多个逻辑区域,为每个进程分配合适的内存空间,并跟踪和管理这些内存空间的使用情况。

操作系统通过内存管理机制来实现这些任务,下面我们就来了解一下常见的内存管理机制。

1. 内存分配内存分配是内存管理的核心任务之一,它负责为进程分配内存空间。

常见的内存分配方式有静态分配和动态分配两种。

静态分配是指在进程创建时,为其分配固定大小的内存空间。

这种分配方式简单直接,但会造成内存的浪费,因为分配的内存大小通常是根据进程的最大需求来确定的。

动态分配是指根据进程的实际需要,动态地分配内存空间。

常见的动态分配方式有分区分配和页式分配两种。

分区分配是将内存分成若干个固定大小的分区,每个分区只能分配给一个进程使用。

分区分配可以采用首次适应、最佳适应或最坏适应等算法来选择合适的分区进行分配。

页式分配是将内存划分成固定大小的页框,并将进程的内存空间划分为若干个固定大小的页面,然后将页面与页框进行映射。

这种分配方式可以灵活地满足进程的内存需求,但会带来一定的内存碎片问题。

2. 内存保护内存保护是指操作系统通过权限管理机制,对进程的内存空间进行保护,防止非法访问和越界访问。

常见的内存保护方式有基址限制和段式管理两种。

基址限制是通过为每个进程分配一个基址和限长来限制进程对内存的访问范围。

当进程访问内存时,操作系统会检查访问地址是否在进程的访问范围内,从而保证内存的安全性。

段式管理是将进程的内存空间划分为若干个逻辑段,每个段具有不同的访问权限。

操作系统通过段表来跟踪每个段的基址和限长,并在访问内存时进行权限检查,从而实现对内存的保护。

3. 内存映射内存映射是指操作系统将外部设备的地址空间映射到进程的内存空间,使得进程可以直接访问外部设备。

操作系统实验-存储管理

操作系统实验-存储管理

操作系统实验-存储管理操作系统实验-存储管理1、引言1.1 概述在操作系统中,存储管理是一个关键的任务。

它负责将程序和数据加载到内存中,管理内存的分配和回收,并确保不同进程之间的内存互不干扰。

本实验旨在深入了解并实践存储管理的相关概念和算法。

1.2 目的本实验的目的是让学生通过实际操作,了解存储管理的基本原理和常用算法,包括分页、分段和虚拟内存等。

通过实验,学生将学会如何实现内存分配和回收,以及处理内存碎片等问题。

1.3 实验环境- 操作系统:Windows、Linux、MacOS等- 编程语言:C、C++等2、实验步骤2.1 实验准备- 安装相应的开发环境和工具- 创建一个空白的项目文件夹,用于存放实验代码和相关文件2.2 实验一、分页存储管理- 理解分页存储管理的概念和原理- 实现一个简单的分页存储管理系统- 设计测试用例,验证分页存储管理的正确性和有效性2.3 实验二、分段存储管理- 理解分段存储管理的概念和原理- 实现一个简单的分段存储管理系统- 设计测试用例,验证分段存储管理的正确性和有效性2.4 实验三、虚拟存储管理- 理解虚拟存储管理的概念和原理- 实现一个简单的虚拟存储管理系统- 设计测试用例,验证虚拟存储管理的正确性和有效性3、实验结果分析3.1 分页存储管理结果分析- 分析分页存储管理系统的性能优缺点- 比较不同页面大小对系统性能的影响3.2 分段存储管理结果分析- 分析分段存储管理系统的性能优缺点- 比较不同段大小对系统性能的影响3.3 虚拟存储管理结果分析- 分析虚拟存储管理系统的性能优缺点- 比较不同页面置换算法对系统性能的影响4、总结与展望4.1 实验总结- 总结本次实验的收获和体会- 分析实验中遇到的问题和解决方法4.2 实验展望- 探讨存储管理领域的未来发展方向- 提出对本实验的改进意见和建议附件:无法律名词及注释:- 存储管理:操作系统中负责管理内存的任务,包括内存分配、回收和管理等功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内存分段和请求式分页在深入i386架构的技术细节之前,让我们先返回1978年,那一年Intel 发布了PC处理器之母:8086。

我想将讨论限制到这个有重大意义的里程碑上。

如果你打算知道更多,阅读Robert L.的80486程序员参考(Hummel 1992)将是一个很棒的开始。

现在看来这有些过时了,因为它没有涵盖Pentium处理器家族的新特性;不过,该参考手册中仍保留了大量i386架构的基本信息。

尽管8086能够访问1MB RAM的地址空间,但应用程序还是无法“看到”整个的物理地址空间,这是因为CPU寄存器的地址仅有16位。

这就意味着应用程序可访问的连续线性地址空间仅有64KB,但是通过16位段寄存器的帮助,这个64KB大小的内存窗口就可以在整个物理空间中上下移动,64KB逻辑空间中的线性地址作为偏移量和基地址(由16位的段寄存器给处)相加,从而构成有效的20位地址。

这种古老的内存模型仍然被最新的Pentium CPU支持,它被称为:实地址模式,通常叫做:实模式。

80286 CPU引入了另一种模式,称为:受保护的虚拟地址模式,或者简单的称之为:保护模式。

该模式提供的内存模型中使用的物理地址不再是简单的将线性地址和段基址相加。

为了保持与8086和80186的向后兼容,80286仍然使用段寄存器,但是在切换到保护模式后,它们将不再包含物理段的地址。

替代的是,它们提供了一个选择器(selector),该选择器由一个描述符表的索引构成。

描述符表中的每一项都定义了一个24位的物理基址,允许访问16MB RAM,在当时这是一个很不可思议的数量。

不过,80286仍然是16位CPU,因此线性地址空间仍然被限制在64KB。

1985年的80386 CPU突破了这一限制。

该芯片最终砍断了16位寻址的锁链,将线性地址空间推到了4GB,并在引入32位线性地址的同时保留了基本的选择器/描述符架构。

幸运的是,80286的描述符结构中还有一些剩余的位可以拿来使用。

从16位迁移到32位地址后,CPU的数据寄存器的大小也相应的增加了两倍,并同时增加了一个新的强大的寻址模型。

真正的32位的数据和地址为程序员带了实际的便利。

事实上,在微软的Windows平台真正完全支持32位模型是在好几年之后。

Windows NT的第一个版本在1993年7月26日发布,实现了真正意义上的Win32 API。

但是Windows 3.x程序员仍然要处理由独立的代码和数据段构成的64KB内存片,Windows NT提供了平坦的4GB地址空间,在那儿可以使用简单的32位指针来寻址所有的代码和数据,而不需要分段。

在内部,当然,分段仍然在起作用,就像我在前面提及的那样。

不过管理段的所有责任都被移给了操作系统。

80386的另一个新特性是在硬件上支持分页,确切的来说是:请求式分页的虚拟内存。

这种技术允许一个不同于RAM的存储介质----硬盘来为内存提供支持,例如,在允许分页时,CPU通过将最近最少访问的内存数据置换到备份存储器中,从而为新的数据腾出空间,这样就能访问比可用物理内存更大的内存空间。

理论上来说,可以使用此种方式访问4GB的连续线性地址空间,提供的备份介质必须足够的大---即使只安装了非常少的物理内存。

当然,分页并不是访问内存的最快方式,最好还是能提供尽可能多的物理内存。

但是,这是处理大量数据的最好办法,即使这些数据超过了可用物理内存。

例如,图形和数据库程序都需要一大块工作内存,如果没有分页机制的话,其中的某些程序就无法在低档的PC系统中运行。

80386分页的模式是将内存划分为4KB或4MB大小的页。

操作系统的设计者可以在二者之间自由的选择,也可混合使用这两个大小的页面。

稍后,我会介绍Windows 2000采用的混合大小方案:由操作系统使用4MB的页面,而4KB页面由剩余的代码和数据使用。

这些页面由分层结构的页表树管理,该页表树记录当前位于物理内存中的页,同时还记录了每个页是否实际的位于物理内存中。

如果指定页已被置换到了硬盘上,而某些模块触及了位于这些页中的地址,CPU就会产生一个缺页中断(这与外围硬件产生的中断类似)。

接下来,位于操作系统内核中的缺页中断处理例程会试图将该页再次调入物理内存,这可能需要将另一块内存中的数据写入硬盘以腾出空间。

通常,系统采用最近最少(LRU)算法来确定哪个页可以被置换出去。

现在可以很清楚地看到为什么有时将这个过程称为----请求式分页(demand paging):即,由软件提出请求,然后根据操作系统和应用程序使用的内存的统计数据,将物理内存中的数据移动到后备存储设备中。

由页表提供的间接寻址方式蕴含着很有趣的两件事。

第一,程序所使用的地址和CPU使用的物理地址总线上的地址之间并没有预设的关系。

如果你知道你的程序所使用的数据结构位于某一地址,如,0x00140000,你可能仍然不想知道任何有关这些数据的物理地址的信息,除非你要检查页表树(page-table tree)。

这需要操作系统来决定这些地址之间的映射关系。

甚至当前有效的地址转换都是无法预测的,部分的来看,这是分页机制所固有的随机性导致的。

幸运的是,在大多数应用程序中,并不需要有关物理地址的知识。

不过,对于开发硬件驱动程序的人员来说还是需要某些这方面的知识。

分页的另一个隐晦之处是:地址空间并不必须是连续的。

实际上,根据页表的内容,4GB的空间可以包含大量的“空洞”,这些“空洞”既没有映射到物理内存也没有映射到后备存储器中。

如果一个应用程序试图读取或写入这样的一个地址,它将立即被系统中止掉。

稍后,我会详细的说明Windows 2000是如何将可用内存扩展到4GB地址空间的。

80486和Pentium CPU使用的分段和分页机制与80386很相似,但一些特殊的寻址特性除外,如Pentium Pro采用的物理地址扩展(Physical Address Extension, PAE)机制。

随同更高的时钟频率一起,Pentium CPU的另一特性就是其采用的双重指令流水线,这一特性允许它在同一时刻执行两个操作(只要这两个指令不互相依赖)。

例如,如果指令A修改一个寄存器的值,而与其相邻的指令B需要这个修改后的值来进行计算,在A完成之前,B将无法执行。

但是如果指令B使用另一个寄存器,CPU就可同时执行这两个指令。

Pentium系列CPU 采用的多种优化方式为编译器的优化提供了广阔的空间。

如果你对这方面的话题很感兴趣,请参考Rick的《Inner Loops》(Booth 1997)。

在i386的内存管理中,有三类地址非常有名,它们的术语---逻辑、线性和物理地址出现在Intel的系统编程手册(Intel 1999c)。

1.逻辑地址:这是内存地址的精确描述,通常表示为16进制:xxxx:YYYYYYYY,这里xxxx为selector,而YYYYYYYY是针对selector所选择的段地址的线性偏移量。

除了指定xxxx的具体数值外,还可使用具体的段寄存器的名字来替代之,如CS(代码段),DS(数据段),ES(扩展段),FS(附加数据段#1),GS(附加数据段#2)和SS(堆栈段)。

这些符号都来自旧的“段:偏移量”风格,在8086实模式下使用此种方式来指定“farpointers”(远指针)。

2.线性地址:大多数应用程序和内核驱动程序都忽略虚拟地址。

它们只对虚拟地址的偏移量部分感兴趣,而这一部分通常称为线性地址。

此种类型的地址假定了一种默认的分段模型,这种模型由CPU的当前段寄存器确定。

Windows 2000使用flat segmentation(平滑段),此时CS、DS、ES和SS寄存器都指向相同的线性地址空间;因此,程序可以认为所有的代码、数据和堆栈指针都可安全的相互转化。

例如,在任何时候,堆栈中的一个地址都可以转化为一个数据指针,而不需要关心相应段寄存器的值。

3.物理地址:仅当CPU工作于分页模式时,此种类型的地址才会变得非常“有趣”。

本质上,一个物理地址是CPU插脚上可测量的电压。

操作系统通过设立页表将线性地址映射为物理地址。

Windows 2000所用页表的布局的某些属性,对于调试软件开发人员非常有用,本章稍后将讨论之。

图4-1. i386的内存分段图4-2给出的内存模型被Windows 2000作为标准的代码、数据和堆栈段,这意味着,所有的逻辑地址将包括CS、DS、ES和SS段寄存器。

FS和GS的处理方式有所不同。

Windows 2000并不使用GS寄存器,而FS寄存器被专门用来保存位于线性地址空间中的系统数据区域的基地址。

因此,FS的基地址远大于0,其大小不会超过4GB。

有趣的是,Windows 2000为用户模式和内核模式分别维护两个不同的FS段。

稍后我们将详细讨论这一问题。

图4-2. 平滑的4GB内存段在图4-1和图4-2中,逻辑地址的selector指向描述符表,该描述符表由名为GDTR的寄存器指定。

这是CPU的全局描述符表寄存器,该寄存器可由操作系统设置为任何适当的线性地址。

GDT(全局描述符表)的第一项是保留的,该项对应的selector叫做“null segment selector”。

Windows 2000将其GDT 保存在0x80036000。

GDT可容纳多达8,19264位的条目,即其最大值为64KB。

Windows 2000仅使用开始的128个项,并将GDT的大小限制为1,024字节。

随GDT一起,i386 CPU还提供了一个本地描述符表(Local Descriptor Table,LDT)和一个中断描述符表(Interrupt Descriptor Table,IDT),这两个表的起始地址分别保存在LDTR和IDTR这两个寄存器中。

GDTR和IDTR的值是唯一的,CPU 执行的每个任务都采用相同的值,而LDTR的值则是任务相关的,LDTR可容纳一个16位的selector。

图4-3示范了复杂的线性地址与物理地址的转换机制,如果在4KB分页模式下,并允许请求式分页,i386的内存管理单元就会采用此种转换机制。

图中左上角的页目录基址寄存器(Page-Directory Base Register,PDBR)包含页目录的物理地址。

PDBR由i386的CR3寄存器保存。

仅用该寄存器的高20位来寻址。

因此,页目录也是以页为边界的。

PDBR的剩余位作为标志位或保留以便将来扩展使用。

页目录占用一个完整的4KB页,由包含1024个页目录项(Page-Directory Entry)的数组构成,每个页目录项均为32位。

和PDBR类似,每个PDE被划分为一个20位的页帧号(Page-Frame Number,PFN)和一个标志数组。

相关文档
最新文档