`
eriol
  • 浏览: 408995 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CPU段式内存管理

    博客分类:
  • OS
阅读更多

逻辑地址如何转换为线性地址

 

 

一个逻辑地址由两部份组成,段标识符: 段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。后面3位包含一些硬件细节,最后两位涉及权限检查。如图:

 

 

 

 

 

索引号就是“段描述符(segment descriptor)”。段描述符描述了一个段。这样,很多个段描述符,就组了一个数组,叫“段描述符表”。然后可以通过段标识符的前13位,直接在段描述符表中找到一个具体的段描述符,这个描述符就描述了一个段。每一个段描述符由8个字节组成,如下图:

 

 

 

这里我们只关心Base字段,它描述了一个段的开始位置的线性地址。

 

 

Intel设计的本意是,一些全局的段描述符,就放在“全局段描述符表(GDT)”中。一些局部的,例如每个进程自己的,就放在所谓的“局部段描述符表(LDT)”中。那究竟什么时候该用GDT,什么时候该用LDT呢?这是由段选择符中的T1字段表示的,=0,表示用GDT,=1表示用LDT。

 

GDT在内存中的地址和大小存放在CPU的gdtr控制寄存器中,而LDT则在ldtr寄存器中。

 

下面是一个例子:

 

 

     首先,给定一个完整的逻辑地址[段选择符:段内偏移地址]

  1. 看段选择符的T1=0还是1,知道当前要转换是GDT中的段,还是LDT中的段,再根据相应寄存器,得到其地址和大小。我们就有了一个数组了。
  2. 拿出段选择符中前13位,可以在这个数组中,查找到对应的段描述符,这样,它了Base,即基地址就知道了。
  3. 把Base + offset,就是要转换的线性地址了。

Linux的段式管理

按照Intel的本意,全局的用GDT,每个进程自己的用LDT——不过Linux则对所有的进程都使用了相同的段来对指令和数据寻址。即用户数据段,用户代码段,对应的,内核中的是内核数据段和内核代码段。

在Linux下,逻辑地址与线性地址总是一致(是一致,不是有些人说的相同)的,即逻辑地址的偏移量字段的值与线性地址的值总是相同的。在Linux中,绝大部份进程并不例用LDT。

 

分享到:
评论

相关推荐

    X86 CPU在段式管理下的地址形成机制

    总的来说,X86 CPU的地址形成机制是其复杂性的一个体现,特别是段式管理和A20 Gate的控制,它们在实模式和保护模式下扮演着至关重要的角色,直接影响着系统对内存的访问和管理。理解这些机制对于系统开发者和硬件...

    基本段式存储管理的模拟实现

    在操作系统领域,段式存储管理是一种重要的内存管理方式,它为进程提供了逻辑上连续的、独立的内存区域,便于程序的编写和维护。本项目旨在模拟实现基本的段式存储管理,通过用户友好的界面展示内存分配与回收的过程...

    操作系统课程设计 c#版(cpu,内存,磁盘)

    在这个“操作系统课程设计 c#版(cpu,内存,磁盘)”中,我们将探讨如何使用C#编程语言来模拟操作系统的几个关键组件:CPU调度、内存管理、磁盘管理和I/O管理。以下是对这些主题的详细说明: 1. **CPU管理**: - ...

    内存的存储管理 段式和页式管理的区别.doc

    本文主要探讨的是段式和页式管理这两种常见的内存管理方式,以及它们之间的区别。 1. 连续分配存储管理 连续分配是指为一个用户程序分配一段连续的内存空间。这种管理方式分为单一连续存储管理和分区式存储管理。 ...

    自己整理的linux内存管理子系统.pdf

    在 Linux 操作系统中,内存管理子系统主要由 CPU 的寻址方式、段式内存管理和页式内存管理两部分组成。 1. 寻址方式 在 Linux 操作系统中,CPU 的寻址方式可以分为物理地址、逻辑地址和线性地址三种。 物理地址是...

    段页式存储管理地址转换

    在多任务和多用户的环境下,操作系统采用各种内存管理技术来确保高效、安全地使用内存资源。其中,段页式存储管理是一种常见的虚拟内存机制,它结合了段式和页式存储管理的优点。在本文中,我们将深入探讨段页式存储...

    Linux内存管理笔记.doc

    地址转换是CPU将一个逻辑地址转换为物理地址的过程,需要两步:首先CPU利用段式内存管理单元,将逻辑地址转换成线性地址,在利用页式内存管理单元,把线性地址最终转换为物理地址。 二、段式管理 段式管理是一种...

    Linux操作系统内存管理.pdf

    Linux操作系统的段式分布机制可以用图7来表示。图7显示了逻辑地址、线性地址与物理地址的关系。Linux操作系统通过段机制把逻辑地址转换为虚拟地址(就是线性地址),再通过页机制把虚拟地址转换为物理地址。 最后,...

    JAVASCRIPT实现的CPU内存监控

    JavaScript运行在浏览器环境中,其执行效率和内存管理受到浏览器沙箱机制的限制。每个浏览器对JavaScript的实现可能存在差异,因此在进行CPU和内存监控时,需要考虑兼容性问题。 2. **性能API**: 浏览器提供了`...

    Window s 中段页式内存管理硬件实现剖析

    段页式内存管理方式下的寻址过程中,操作系统为某任务建立了任务状态段(TSS)并将当前使用的程序段调入内存时,可以执行该任务。代码段寄存器(CS:EIP)的赋值不能由用户在程序中实现,而是由操作系统给定初值;...

    内存管理.pdf

    ### 内存管理知识点概述 #### 一、内存的基本概念 - **主存**:即物理内存,是我们常说的RAM的大小,它直接与CPU通信,用于存储正在运行的程序和数据。 - **虚拟内存**:通过操作系统的技术,将硬盘的一部分空间...

    段页式管理

    **段页式管理**是一种操作系统内存管理的方式,它结合了段式管理和页式管理...通过这样的实验,学生可以深入理解段页式内存管理的工作原理,学习如何在实际编程中实现这一机制,同时也能锻炼解决问题和调试代码的能力。

    fusionchart做的实时监控cpu,内存变化曲线及柱状图

    CPU使用率通常表示CPU在一段时间内被占用的百分比,而内存占用量则指系统当前分配给各个进程的内存总量。这种实时监控功能对于系统管理员来说非常重要,可以帮助他们了解系统的运行状况,及时发现并处理可能导致性能...

    操作系统学位大纲进程管理、处理机调度、内存管理、文件管理、I/O设备管理、页式管理

    页式、段式和段页式管理是常见的内存管理策略,其中页式管理通过页表进行地址转换,段式管理按逻辑单元分配内存,段页式结合了两者的优点。 4. **文件管理**:文件系统管理文件的创建、删除、读写和检索,以及存储...

    操作系统课程设计..段页式存储器

    段页式存储管理是一种高级的内存管理方式,结合了段式存储和页式存储的优点。在传统的单一地址空间模型中,程序的逻辑地址直接映射到物理地址,而在段页式存储管理中,这个过程被分为了两个阶段:先由段地址找到对应...

    arm内存管理单元

    "ARM 内存管理单元" ARM 内存管理单元(Memory Management Unit,MMU)是存储器管理单元的缩写,是用来管理虚拟内存系统的器件。MMU 通常是 CPU 的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表,此...

Global site tag (gtag.js) - Google Analytics