内存管理有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. js动态控制导航栏样式

    导航栏一般做为母版页,为了使增加用户体验,往往在用户进入某个页面给予导航栏相应的样式,这里可以用js动态添加 <div class="box_left fl"> < ...

  2. IntelliJ IDEA实时模板变量

    返回由当前方法返回的值的类型IntelliJ IDEA 实时模板中的模板变量允许用户输入.扩展模板后,变量将作为输入字段显示在编辑器中. IntelliJ IDEA 声明实时模板变量 模板中的变量以下 ...

  3. hdu 4123 树形DP+单调队列

    http://acm.hust.edu.cn/vjudge/problem/25790 这题基本同poj 3162 要注意mx,mx2,vx,vx2每次都要初始化 #include <iostr ...

  4. u-boot分析(七)----内存初始化

    u-boot分析(七) 上篇博文我们按照210的启动流程,分析到了时钟初始化,今天我们继续按照u-boot的启动流程对内存的初始化进行分析. 今天我们会用到的文档: 1.        2440芯片手 ...

  5. [SVN]TortoiseSVN工具培训2─SVN的基本概念和工作模式

    1.SVN是什么? TortoiseSVN,属于集中式版本控制工具,是Subversion版本控制系统的一个免费SVN开源客户端,可以对文件版本进行统一管理和控制:文件保存在中央版本库,您可以将文件恢 ...

  6. springboot:ajax跨域请求解决方案

    Cors详细介绍请看阮一峰的跨域资源共享 CORS 详解:http://www.ruanyifeng.com/blog/2016/04/cors.html SpringBoot使用CROS解决跨域问题 ...

  7. HTML入门2—HTML常用标签

    HTML常用标签练习 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  8. Android(java)学习笔记66:Android Studio中build.gradle简介

    1.首先我们直接上代码介绍: // Top-level build file where you can add configuration options common to all sub-pro ...

  9. CORS跨域请求的限制和解决

    我们模拟一个跨域的请求,一个是8888,一个是8887 //server.js const http = require('http'); const fs = require('fs'); http ...

  10. UIView设置阴影无效的原因之一

    本想在底部的按钮设置个阴影, 代码如下: self.layer.shadowColor = [UIColor blackColor].CGColor; self.layer.shadowOffset ...