内存管理有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. hdu 3586 最小代价切断根与叶子联系

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 http://blog.csdn.net/woshi250hua/article/details ...

  2. better-scroll 遇到的问题 2

    问题的描述: 在歌曲列表页面使用了scroll插件,搜索了很多歌曲,页面出现滚动,选择播放一首歌曲,弹出播放器,将播放器最小化,页面回到歌曲列表,并且页面的底部出播放歌曲的信息(在没有播放歌曲的时候是 ...

  3. 处理移动端自适应布局的方法- calc()与vw

    在处理移动端自适应布局时,目前前端最流行的方法应该就是使用媒体查询,来设置HTML的字体大小,然后用rem为单位对Dom的宽高进行设置,这个方法的优势在于兼容性方面很好,劣势则在于当前市场上不同的机型 ...

  4. Android 接入支付宝支付实现

    接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...

  5. SpringCloud的学习记录(5)

    这一章节讲如何使用ribbon和hystrix. 在我们生成的Demo项目上右键点击New->Module->spring Initializr, 然后next, 填写Group和Arti ...

  6. Stuts2的 "struts.devMode" 设置成true后,不起作用,仍需要重启tomcat

    不要用 <constant name="struts.devMode" value="true" />改成: <constant name=& ...

  7. sharepoint 查阅项SPFieldLookup 赋值 .

    在项目中,经常会涉及列表或者文档库之间的相互引用,而这个时候我们用的更多的就是查阅项(lookup),以前没有去关注取值或者赋值的问题,今天正好碰到一个Case,就顺道总结一下.我们知道链接和图片的字 ...

  8. 监控系统 - pnp4nagios

    pnp4nagios是nagios的一个插件,用于将perfdata数据写入rrd,用于展示流量图,目前最高版本0.6.25. 我用官方下载的tar.gz打rpm包,官方提供的pnp4nagios.s ...

  9. Linux学习_按时间顺序解压多个文件,搜索文件中的内容

    ls的结果按时间数据先排序,再取末尾5个文件,再调用tar命令 ls -1 | sort -u | tail -5 |xargs -n1 tar xzvf 利用grep命令从文件中搜索. grep - ...

  10. Linux安装 NTFS 支持

    my system kernel Version is 2.6.18-128.el5 在这个地址下载了 kernel-module-ntfs-2.6.18-128.el5-2.1.27-0.rr.10 ...