Linux段式管理与页式管理
内存管理有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段式管理与页式管理的更多相关文章
- c模拟 页式管理页面置换算法之FIFO
写的操作系统作业.... 放上来给需要的小伙伴 需要注意的地方: 1.该算法只涉及单进程 2.只是用c模拟FIFO的思想 FIFO思想:选择在内存中存活时间最久的页面淘汰 关于该算法我的理解: 一个进 ...
- 【av68676164(p54)】段式和段页式虚拟存储
段式存储管理 进程分段 把进程按逻辑意义划分为多个段,每段有段名,长度不定,进程由多段组成 例:一个具有代码段.数据段和堆栈段的进程 段式内存管理系统的内存分配 以段为的单位装入,每段分配连续的内存 ...
- 【转帖】linux内存管理原理深入理解段式页式
linux内存管理原理深入理解段式页式 https://blog.csdn.net/h674174380/article/details/75453750 其实一直没弄明白 linux 到底是 段页式 ...
- x86-3-段式管理(segmentation)
x86-3-段式管理(segmentation) 3.1 段式管理概述: 从8086CPU开始,为了让程序在内存中能自由浮动而又不影响它的正常执行,CPU将内存划分成逻辑上的段来给程序使用. x86继 ...
- linux内核源码——内存管理:段页式内存及swap
os的内存管理大概可以分成两块:1.段页式管理(虚存)2.swap in 和 swap out 段页式管理 段式管理的图像:运行时重定位 多级页表的管理图像 块表加速 用户(程序员)希望用段,物理内 ...
- x86-7-页式管理(Paging)
x86-7-页式管理(Paging) 页式管理是重中之重! 在段式管理下操作系统的运作出现了很多问题,因为段的长度不定,在分配内存时,可能会发生内存中的空闲区域小于要加载的段,或者空闲区域远远大于要加 ...
- 操作系统之cache、伙伴系统、内存碎片、段式页式存储管理
存储管理是操作系统非常重要的功能之一,本文主要介绍操作系统存储管理的基础知识,包括缓存相关知识.连续内存分配.伙伴系统.非连续内存分配.内存碎片等,并结合linux系统对这些知识进行简单的验证.文章内 ...
- 寄存器,cache、伙伴系统、内存碎片、段式页式存储管理
cache.伙伴系统.内存碎片.段式页式存储管理 目录 分层的存储管理 cache 局部性原理 置换算法 写回策略 linux环境下的cache 连续内存分配与内存碎片 内部碎片与外部碎片 动态分区分 ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
随机推荐
- 用户“Michael-PC\Michael”不具有所需的权限。请验证授予了足够的权限并且解决了 Windows 用户帐户控制(UAC)限制问题。
解决方法:在注册表增加键值 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] 新建-选择“D ...
- 在vs2010使用EF出现CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义
网上查了一通都是在web.config中配置 System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56 ...
- BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...
- DOM 事件冒泡
1.什么是事件冒泡? 事件冒泡就是从具体到不具体, 例如:当你给了一个button按钮一个点击事件,再给他的父级相同的事件,就会按照,button,body,document,window,继续向上冒 ...
- Mvc过滤器的使用【转载】
前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发人员去关心和写类似身份验证,日志,异常,行为截取等这部分重复的代码 ...
- linux下搭建svn并同步更新至web目录
安装svn 使用yum安装 yum install subversion -y 安装成功后查看版本库 svnserve --version 生成目录 cd /var mkdir svn cd svn ...
- ui.datepicker的回显问题
应用场景: 页面上有一些现有的输入框,需要调用日期插件,同时还要clone一份,动态添加到页面中,动态生成的输入框在调用datepicker的时候,click事件有效,但是选择的时间无法回显到对应的输 ...
- MYSQL:随机抽取一条数据库记录
今天我们要实现从随机抽取一条数据库记录的功能,并且抽取出来的数据记录不能重复: 1.首先我们看文章表中的数据: 2.实现功能代码如下: 1 /** * 获取随机的N篇文篇 * @param int $ ...
- To my dear friends in SFAE
To my dear friends in SFAE, 这不是farewell,我还在西门子大家庭.2018年1月份我会转到SLC MCBU.在SFAE十年,一些敢想,唠叨唠叨~ 十年弹指一挥间.记得 ...
- POJ-1509 Glass Beads---最小表示法模板
题目链接: https://vjudge.net/problem/POJ-1509 题目大意: 给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小. 解题思路: 最小表示法模板 注 ...