内存管理有2种机制:1、段式管理;2、页式管理

在80386CPU中增加了2个寄存器:1、全局性的段描述表寄存器GDTR

2、局部性的段描述表寄存器LDTR

段寄存器的高13位用于在全局或局部描述表项中选择一个描述符;

第2为选择全局或者局部段描述寄存器;

低2位决定特权级别,一般LINUX中0表示系统状态,1表示用户状态。

每个描述表项8个字节,将段寄存器的高13位加上指定的段描述表寄存器的基地址就得到了描述表项的起始地址;

每个描述表项含有段的基地址和段的大小;而段的基地址高8位和低24位没有连在一起,这也是因为Intel刚开始的意图本来是想用24位的地址空间,后来发现不够用,所以改为了32位地址。但此时80286CPU已经发布出去了,无奈只能修修补补,以兼容80286。

所以,段寄存器 + GDTR/LDTR = 描述表项,描述表项指定了段的基地址和段的大小;

如果将段的基地址设为0,段的大小设置为最大,此时物理地址就与逻辑地址一致,Intel称其为平面地址。

段描述表寄存器只能在系统状态使用,用户程序不能改变GDTR和LDTR的内容

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

连续的逻辑地址经过映射后的线性地址还是连续的

32位的线性地址:dir:10字节;page:10Byte; offset:10Byte

段式管理:逻辑地址到物理地址一步到位;

页式管理:先找到目录项,再找到页面描述符。这样做是出于空间效率的考虑,线性地址空间可以表示4G的地址空间,但一个进程很难会用到4G的空间,但数组中即使是空着的表项也占用空间,所以分成2层可以视需要来设置页表,如果目录中某项为空,就不必设置页表,从而省下存储空间。

在linux内核中使用了gcc对C的扩充,所以linux内核只能用gcc编译,Linux内核与gcc平行的发展,所以每个Linux内核版本都有对应的gcc版本。

在i386CPU中,地址为32位时,2层映射比较合理,但考虑到64位的CPU,为了通用性,页式管理设计了3层映射。对于32位地址采用2层设计,大于32位的地址采用3层设计。

对于32位的4G虚拟内存空间,最高的1G内存用于内核本身,称为“系统空间”,而较低的3G字节,用作各个进程的“用户空间”,这样理论上每个进程可以使用3G的用户空间。

虽然系统空间位于虚拟内存空间的最高部分,但对应的物理地址却是从0地址开始的。

就我的理解,历史上先出现了段式管理,很多老式芯片都支持段式管理,后来出现了页式管理,Linux为了兼容或者通用,采用了先段式管理后页式管理的方法,现在的大多数芯片一般采用的都是页式管理,段式管理其实形同虚设。

Linux段式管理与页式管理的更多相关文章

  1. c模拟 页式管理页面置换算法之FIFO

    写的操作系统作业.... 放上来给需要的小伙伴 需要注意的地方: 1.该算法只涉及单进程 2.只是用c模拟FIFO的思想 FIFO思想:选择在内存中存活时间最久的页面淘汰 关于该算法我的理解: 一个进 ...

  2. 【av68676164(p54)】段式和段页式虚拟存储

    段式存储管理 进程分段 把进程按逻辑意义划分为多个段,每段有段名,长度不定,进程由多段组成 例:一个具有代码段.数据段和堆栈段的进程 段式内存管理系统的内存分配 以段为的单位装入,每段分配连续的内存 ...

  3. 【转帖】linux内存管理原理深入理解段式页式

    linux内存管理原理深入理解段式页式 https://blog.csdn.net/h674174380/article/details/75453750 其实一直没弄明白 linux 到底是 段页式 ...

  4. x86-3-段式管理(segmentation)

    x86-3-段式管理(segmentation) 3.1 段式管理概述: 从8086CPU开始,为了让程序在内存中能自由浮动而又不影响它的正常执行,CPU将内存划分成逻辑上的段来给程序使用. x86继 ...

  5. linux内核源码——内存管理:段页式内存及swap

    os的内存管理大概可以分成两块:1.段页式管理(虚存)2.swap in 和 swap out 段页式管理 段式管理的图像:运行时重定位 多级页表的管理图像  块表加速 用户(程序员)希望用段,物理内 ...

  6. x86-7-页式管理(Paging)

    x86-7-页式管理(Paging) 页式管理是重中之重! 在段式管理下操作系统的运作出现了很多问题,因为段的长度不定,在分配内存时,可能会发生内存中的空闲区域小于要加载的段,或者空闲区域远远大于要加 ...

  7. 操作系统之cache、伙伴系统、内存碎片、段式页式存储管理

    存储管理是操作系统非常重要的功能之一,本文主要介绍操作系统存储管理的基础知识,包括缓存相关知识.连续内存分配.伙伴系统.非连续内存分配.内存碎片等,并结合linux系统对这些知识进行简单的验证.文章内 ...

  8. 寄存器,cache、伙伴系统、内存碎片、段式页式存储管理

    cache.伙伴系统.内存碎片.段式页式存储管理 目录 分层的存储管理 cache 局部性原理 置换算法 写回策略 linux环境下的cache 连续内存分配与内存碎片 内部碎片与外部碎片 动态分区分 ...

  9. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

随机推荐

  1. ios 开发常用函数

    rand() ----随机数 abs() / labs() ----整数绝对值 fabs() / fabsf() / fabsl() ----浮点数绝对值 floor() / floorf() / f ...

  2. python面试题——爬虫相关

    1.接触过几种爬虫模块 urllib.requests这两种爬虫模块. 2.robots协议是什么? 它就是一个防君子不防小人的协议,网站有一些数据不想被爬虫程序爬取,可以编写robots协议文件,明 ...

  3. BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)

    题意 题目链接 Sol 挺套路的一道题 首先把式子移一下项 \(x \oplus 2x = 3x\) 有一件显然的事情:\(a \oplus b \leqslant c\) 又因为\(a \oplus ...

  4. 企业工商营业执照副本模板PSD源文件素材下载

    企业工商营业执照副本PSD模板下载地址: http://www.qijieworld.com/thread-1911181-1-1.html 模板为psd格式内容可编辑修改,需使用 Photoshop ...

  5. Lua相关函数整理

    1.asset(a==b,tipmsg);错误处理 2.pcall,xpcall,debug,保护函数执行,并且查看相关信息 3.collectgarbage()函数相关: collectgarbag ...

  6. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

  7. SAP ECC6.0-中建信息版

    平台: SUSE Enterprise Server 类型: 虚拟机镜像 软件包: sap ecc 6.0 ehp7 sps10 commercial erp sap 服务优惠价: 按服务商许可协议 ...

  8. Azure进阶攻略 | 应用流畅运行杜绝超载,自有一套好方法

    世界上很多东西,无论交通工具.房屋建筑,甚至计算机程序,在容量方面都存在设计上的理论最大值. 比如火车,正常情况下是这样的.舒适地坐着,安静地读一本书,时不时抬头若有所思地远眺车窗外风景,满满的文艺范 ...

  9. 2016 Multi-University Training Contest 2 - 1005 (hdu5738)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5738 题目大意:给定平面上的n个点,一个集合合法当且仅当集合中存在一对点u,v,对于集合中任意点w,均 ...

  10. window下编译ffmpeg

    网上关于编译ffmpeg的帖子很多,我也尝试了很多次,但是很多都过不了,一部分原因是版本问题,还有就是有的路劲没说的太明白导致的,经过一天的摸索,最终编译好了,下面把编译方式写下来,希望对看到帖子的人 ...