内存分段与分页机制

1.物理地址和逻辑地址

逻辑地址->线性地址->物理地址

    8086CPU:

物理地址:段地址*16+偏移量 (20位总线地址)

逻辑地址:页码*16+偏移量  (16位寄存器地址)

8086CPU以后总线寻址和CPU位数趋于一致,操作系统结构向下兼容,线性地址基址置0:

虚拟地址(线性地址):每个进程的虚拟地址空间32位操作系统为4G,其中1G内核页面,3G用户页面  (32位CPU寄存器地址)

个人认为:线性地址,段描述符对物理内存空间地址加以限制,使内存被充分利用

物理内存划分:帧(Frame)               逻辑内存划分:页(Page)

地址总线:intel早期CPU20位(内存1M);286的地址总线24位(内存64M);386的地址总线32位(内存4G

总线:地址总线、数据总线、控制总线

2.页表的软硬件实现

页表:段寄存与页码对应表,如下page table

实现方式:硬件使用TLB(Translation look-aside buffer翻译后备缓冲区)+内存存储

3.段表硬件结构

段表:基地址+界限寄存器(限制偏移量大小)

4.逻辑地址结构

逻辑地址 =
段选择符+段内偏移量

段选择符中,索引号对应段描述符

 
            

段描述符存放在:

GDT(Global Descriptor Table,全局描述表),GDTR寄存器保存段描述符

                      LDT(Local Descriptor Table,本地描述表),LDTR寄存器保存段描述符,如单个进程

5.逻辑地址转线性地址

段选择符:TI=0使用GDT,TI=1使用LDT

6.页表数据结构(如:段描述符和段选择符)

a.层次划分页(Hierarchical Paging)

b.Hashed Page Tables 哈希页表

本文参考以下资料,图片引用来源于此,本文只做归纳总结:

http://www.cnblogs.com/felixfang/p/3420462.html

http://blog.csdn.net/drshenlei/article/details/4261909

http://wenku.baidu.com/link?url=6vkfCHh2LeGvc6PfxmmrqKXkv4oM3S6PujD_mdBDiyBjvi5bY5YyCRYdVAqO7T13wECaeBj9CubE6AqRC6ct_rJT6zfkkxJb8armQGgBuZ_

http://blog.chinaunix.net/uid-22683402-id-1771372.html

http://bbs.chinaunix.net/thread-2083672-1-1.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 07:40:41

内存分段与分页机制的相关文章

Linux内存寻址之分页机制

http://blog.xiaohansong.com/2015/10/05/Linux内存寻址之分页机制/ 在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性-物理地址的转换过程.段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址. 硬件中的分页 分页机制由CR0中的PG位启用.如PG=1,启用分页机制,并使用本节要描述的机制,把线性地址转换为物

Linux的分段和分页机制

1 基于80x86的Linux分段机制 80386的两种工作模式:80386的工作模式包括实地址模式和虚地址模式(保护模式).Linux主要工作在保护模式下. 在保护模式下,80386虚地址空间可达16K个段,每段大小可变,最大达4GB.逻辑地址到线性地址的转换由80386分段机制管理.段寄存器CS.DS.ES.SS.FS或GS各标识一个段.这些段寄存器作为段选择器,用来选择该段的描述符. 分段逻辑地址到线性地址转换图: Linux对80386的分段机制使用得很有限,因为Linux的设计目标是支

[Linux内存]linux内存学习(二)——分段和分页

一:内存分段和分页.点击打开链接 每个用户空间的linux进程都有3G的地址空间,(虚拟地址空间3G-4G空间是linux内核使用的),用户空间看到的进程地址都是指虚拟地址空间,然后操作系统通过MMU再将虚拟地址映射到实际的物理地址. 分段:就是将整个程序映射到linux内存的物理地址,假设有两个进程 A 和 B ,进程 A 所需内存大小为 10M ,其虚拟地址空间分布在 0x00000000 到 0x00A00000 ,进程 B 所需内存为 100M ,其虚拟地址空间分布为 0x0000000

操作系统篇-浅析分页机制

|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在我们进行程序开发的时候,一般情况下,是不需要管理内存的,也不需要操心内存够不够用,其实,这就是分页机制给我们带来的好处.它是实现虚拟存储的关键,位于线性地址与物理地址之间,在使用这种内存分页管理方法时,每个执行中的进程(任务)可以使用比实际内存容量大得多的连续地址空间.而且当系统内存实际上被分成很多凌乱的块时,它可以建立一个大而连续的内存空间的映象,好让程序不用操心和管理这些分散的内存块.分页机制增强了分段机制的性能.页地址

linux中的分段和分页

觉得这篇文章写分段和分页机制还是挺清晰的,在此转载一下. 前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识. 我比较喜欢搞清楚一个技术本身的发展历程,简而言之就是这个技术是怎么发展而来的,在这个技术之前存在哪些技术,这些技术有哪些特点,为什么会被目前的技术所取代,而目前的技术又解决了之前的技术所存在的哪些问题.弄清楚了这些,我们才能比较清晰的把握某

一个操作系统的实现(6)-初识分页机制

这节仍然是从实现的角度来讲述分页机制. 为什么要引入分页机制.我们都知道分段机制是为了提供保护机制,那么为什么还要引入分页机制呢? 为什么引入分页机制 想象一下这样一种情况:假设我们用的计算机物理内存是4GB,但是我们的程序大小是5GB.那么这个时候我们无法将程序全部放到内存中,也就无法运行程序.分页机制引入的原因之一就是为了解决这个问题.分页机制的引入实现了虚拟存储器的机制. 另外,程序执行具有局部性,也就是说一段时间内,只需要程序代码中的一小部分(相对于整个程序)就可以实现程序的执行.那么我

Linux内存管理3---分页机制

1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本文将主要以X86架构为例来介绍Linux内存管理的分页机制. 2.分页机制 5. Linux中的汇编 6.Linux系统地址映射示例

[转帖]Linux分页机制之分页机制的演变--Linux内存管理(七)

Linux分页机制之分页机制的演变--Linux内存管理(七) 2016年09月01日 20:01:31 JeanCheng 阅读数:4543 https://blog.csdn.net/gatieme/article/details/52402967 ~ 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme https://blog.csdn.net/gatieme/article/details/52402967 日期 内核版

实模式与保护模式下的分段分页机制

1. 实模式 在实模式下,CPU不会为任务提供任务的保护机制,代码任意运行.8086处理器是学习实模式的常用例子.它内部大致有以下寄存器: 8个16位的通用寄存器: AX (可以拆分成两个AH/AL的8位寄存器) BX (BH,BL) CX (CH,CL) DX (DH,DL) SI (source index, 源索引寄存器) DI (destination index, 目的索引寄存器) BP (base pointer, 基数指针寄存器) SP (stack pointer, 堆栈指针寄存