linux内存管理的基本框架,Linux内存管理的基本框架⭐⭐

本文深入探讨Linux内核的内存管理机制,包括虚拟地址与物理地址的映射、页面目录、中间目录和页面表的三层结构、系统空间与用户空间的划分以及内存分配算法。通过理解这些核心概念,读者可以更好地掌握Linux内存管理的基础知识。
摘要由CSDN通过智能技术生成

Linux内核的映射机制设计成三层,在页面目录和页面表中间增设了一层“中间目录”。

在代码中,页面目录称为PGD,中间目录称为PMD,而页面表称为PT。

PT中的表项称为PTE,PTE是“Page Table Entry”的缩写。

PGD、PMD和PT均为数组。

在逻辑上也把线性地址从高位到低位划分成4个位段。

4G字节虚存空间

Linux内核将这4G字节的空间分成两部分:

将最高的1G字节(从虚地址0xC0000000至0xFFFFFFFF)用于内核本身,称为“系统空间”。

将较低的3G字节(从虚地址0x0至0xBFFFFFFFF)用作各个进程的“用户空间”。

系统空间由所有进程共享。

每当一个进程通过系统调用进入了内核,该进程就在共享的系统空间中运行,不再有其自己的独立空间。

虽然系统空间占据了每个虚存空间中最高的1G字节,在物理的内存中却总是从最低的地址(0)开始。

对于内核来说,其地址的映射是很简单的线性映射,0xC0000000就是两者之间的位移量。

此位移称为PAGE_OFFSET,定义于文件include/asm-i386/page.h中。

PAGE_OFFSET也代表着用户空间的上限,常数TASK_SIZE就是通过它定义的。

对于系统空间而言,给定一个虚地址x,其物理地址是从x中减去PAGE_OFFSET;相对应地,给定一个物理地址x,其虚地址是x+PAGE_OFFSET。

_pa()只是为内核代码中当需要知道与一个虚地址对应的物理地址时提供方便。

例如,在切换进程的时候要将寄存器CR3设置成指向新进程的页面目录PGD,而该目录的起始地址在内核代码中是虚地址,但CR3所需要的是物理地址,这时候就要用到_pa()。

每个进程的局部段描述表LDT都作为一个独立的段而存在,在全局段描述表GDT中要有一个表项指向这个段的起始地址,并说明该段的长度以及其他一些参数。

每个进程还有一个TSS结构(任务状态段)

每个进程都要在全局段描述表GDT中占据两个表项。

段寄存器中用作GDT表下标的位段宽度是13位,所以GDT中可以有8192个描述项。

一些系统开销:(GDT中的第2项和第3项分别用于内核的代码段和数据段,第4项和第5项永远用于当前进程的代码段和数据段,第1项永远是0,等等)

有8180个表项可供使用,所以系统中最大的进程数量是4090。

①物理内存管理:

Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构(切记是linux系统不是uboot,也就是物理内存的管理肯定是在linux系统上的),操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些地址会在使用时建立page结构。

②进程内存管理:

Linux进程通过vma进行管理,每个进程都有一个task_struct结构体进行维护,其中的mm_struct结构体管理这进程的所有内存。Mm_struct中维护者一个vma链表,其中的每一个vma节点对应着一段连续的进程内存。这里的连续是指在进程空间中连续,物理空间中不一定连续。如果使用malloc等申请一段内存,则内核会给进程增加vma节点。

--

linux内存管理之全局框架

讲解复杂繁琐的机制原理,最通俗的方法就是用模型架构的方式向读者呈现,先要在整体上了解大方向大架构,再根据大方向大架构来进行分支深入,犹如毛主席那句话“战略上蔑视敌人,战术上重视敌人”.下面我也以这种方 ...

Linux内存管理解析(二) : 关于Linux内存管理的大体框架

什么是内存管理 ? 首先内存管理管理的主要对象是虚拟内存,但是虚拟内存对应的映射主要为物理内存,其次也可能通过交换空间把虚拟内存与硬盘映射起来,既然如此,那我们先了解物理内存的管理. 对于物理内存而言 ...

Linux内存管理专题

Linux的内存管理涉及到的内容非常庞杂,而且与内核的方方面面耦合在一起,想要理解透彻非常困难. 在开始学习之前进行了一些准备工作

伙伴系统之避免碎片--Linux内存管理(十六)

1 前景提要 1.1 碎片化问题 分页与分段 页是信息的物理单位, 分页是为了实现非连续分配, 以便解决内存碎片问题, 或者说分页是由于系统管理的需要. 段是信息的逻辑单位,它含有一组意义相对完整的信 ...

伙伴系统之伙伴系统概述--Linux内存管理(十五)

在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Knowlton设计, ...

启动期间的内存管理之bootmem_init初始化内存管理–Linux内存管理(十二)

1. 启动过程中的内存初始化 首先我们来看看start_kernel是如何初始化系统的, start_kerne定义在init/main.c?v=4.7, line 479 其代码很复杂, 我们只截取 ...

启动期间的内存管理之初始化过程概述----Linux内存管理(九)

在内存管理的上下文中, 初始化(initialization)可以有多种含义. 在许多CPU上, 必须显式设置适用于Linux内核的内存模型. 例如在x86_32上需要切换到保护模式, 然后内核才能检 ...

Linux内存管理 (16)内存规整

专题:Linux内存管理专题 关键词:内存规整.页面迁移.pageblock.MIGRATE_TYPES. 内存碎片的产生:伙伴系统以页为单位进行管理,经过大量申请释放,造成大量离散且不连续的页面.这 ...

Linux内存管理(一)

Linux内存管理之一:基本概念篇 物理地址.线性地址(虚拟地址)和逻辑地址:阐述段式管理和页式管理基本概念:Linux操作系统内存管理和虚拟内存概念:为内核开发做一个基础铺垫. 内存是linux内核 ...

随机推荐

如何修改geditor的配置文件 -好像geditor没有文本格式的配置文件? 要使用dconf-editor来配置- geditor自己配置编码格式

好像geditor没有文本格式的配置文件? 好像是通过一个程序, 叫 dconf-editor 来配置geditor的? 以前是通过gconf-editor来配置的, 但是gconf-editor的配 ...

hadoop2.7下载mirror

http://mirror.bit.edu.cn/apache/hadoop/common/

cod-hw

COD hw 4 Xinglu Wang 3140102282 2016-12-27 21:28:01 COD hw 45.35.3.15.3.35.3.45.3.55.3.65.45.4.15.4. ...

leetcode 1_2_3_7

来自lknny.com,欢迎交流学习!点击 tags: [leetcode,algorithm] categories: algorithm --- Two Sum Given an array of ...

gdb篇

转自:http://www.cnblogs.com/ypchenry/p/3668572.html 1.gdb的原理 熟悉linux的同学面试官会问你用过gdb么?那好用过,知道gdb是怎么工作的么? ...

GitHub客户端发布托管代码

初试GitHub及客户端使用 突然想分享代码,于是记起来曾几何时有人提到过GitHub这个东西,于是便各种百度,注册申请了一个账号,下载了windows客户端,全英文网站就连新手教程也是全英的,现在想 ...

Linux系列教程(五)——Linux链接命令和权限管理命令

前一篇博客我们讲解了Linux文件和目录处理命令,还是老生常淡,对于新手而言,我们不需要完全记住命令的详细语法,记住该命令能完成什么功能,然后需要的时候去查就好了,用的多了我们就自然记住了.这篇博客我 ...

决策树--ID3 算法(一)

Contents      1. 决策树的基本认识      2. ID3算法介绍      3. 信息熵与信息增益      4. ID3算法的C++实现 1. 决策树的基本认识    决策树是一种 ...

堡垒机-teleport的安装以及常见问题解决办法

teleport是一款简单易用的堡垒机系统,运用在企业对windows.linux服务器的安全使用管理以及审计. 官网网址:http://teleport.eomsoft.net/ github地址: ...

从Docker 到Jenkins 到Ansible的部署经验

从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作.我从频繁的部署工作中,逐渐找到了一些偷懒的方法.从传统的Java -jar命令启动服务,到通过 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值