![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内存管理
谁不小心的
过于复杂,无法简介
展开
-
ERR_PTR,PTR_ERR还有IS_ERR函数详解
内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。 总体来说,如果内核返回一个指针,那么有三种情况:合法指针,NULL指针和非法指针。1)合法指针:内核返回的指针一般是指向页面的边界(4K边界),即 ptr & 0xfff == 02)非法指针:这样ptr的值不可能落在(0xfffff000,0xffffffff)之间(这个区间是内核高端内存所在的原创 2013-07-11 10:24:20 · 3091 阅读 · 0 评论 -
linux 高端内存页框管理:永久内核映射、临时内核映射以及非连续内存分配
摘要:高端内存页框的内核映射分为三种情况:永久内核映射、临时内核映射和非连续内存映射。那么这三者有什么区别和联系呢?临时内核映射如何保证不会被阻塞呢?本文主要为你解答这些疑问,并详细探讨高端内存映射的前两种方式。1.高端内存的区域划分内核将高端内存划分为3部分:VMALLOC_START~VMALLOC_END、KMAP_BASE~FIXADDR_START原创 2013-10-25 10:41:53 · 6099 阅读 · 0 评论 -
保护模式编程之(一)——分段机制与GDT/LDT
概述:若想理解操作系统程序中的启动相关的部分,必须要理解保护模式下的编程,而分段机制是保护模式编程下的基础。另外,由于实模式与保护模式的不同,对保护模式下的分段机制更需要注意。同时,这一部分的基本数据结构是以后理解代码跳转的基础,必须要熟练。1.段的定义 段是虚拟地址到线性地址转换的基础,段的特征有以下三个:段基址,段限长,段属性。这三个特征存储在段描述符(s原创 2013-05-24 10:51:31 · 4298 阅读 · 0 评论 -
实模式与保护模式解惑之(一)——二者的起源与区别
概述:实模式和保护模式是处理器发展的两个非常重要的阶段。这两个模式下的编程也有着显著的不同,弄明实模式与保护模式的区别是理解操作系统运行原理和编写操作系统的基础。本文主要讲解了实模式和保护模式的区别和保护模式的起源,侧重点在二者寻址方式上的差异。1.保护模式的起源 最开始的程序寻址是直接的“段:偏移”模式,这样的好处是所见即所得,程序员指定的地址就是物理地址,物理地址对程原创 2013-05-21 11:42:18 · 13147 阅读 · 2 评论 -
内存寻址(二):linux中的分段与分页机制
摘要:本文主要为你讲解linux中的分段和分页机制的实现原理,相关的宏定义和函数功能。1.linux中的分段除了用来模拟80286的模式以外,段式基地址总是0(也就是说linux并没有真实地实现分段机制),所以线性地址和虚拟地址总是一样的。运行在所有用户态的linux进程都使用一对相同的段进行数据和指令的寻址,它们就是用户数据段和代码段;同理,存在内核数据段和代码段。这四个重要的段描述符的值是:原创 2013-10-22 22:35:59 · 2931 阅读 · 0 评论 -
linux 源码arch目录下的处理器介绍与处理器架构总结 与 32/64位操作系统和CPU
摘要:在平时安装操作系统的过程中,我们经常碰到镜像文件i386,X86_64这样的关键字,二者有什么主要区别?研究linux源码的时候,同样的函数在arch目录下不同的文件中定义,有什么区别,这些处理器代表什么?等等。本文主要为你简介linux arch目录下的相关处理器,然后总结和对比一下现有的处理的其架构,最后简要分析一下i386,X86_64这些典型架构的区别,还有32/64位操作系统与CP原创 2013-10-24 23:40:16 · 3932 阅读 · 0 评论 -
进程页表与内核页表:页表的初始化
linux刚刚加电启动时,如何从实模式进入保护模式?启动分页机制的前提是什么?如何保证分页机制之前和之后通过实地址和虚拟地址都能访问到同一个物理地址呢?内核页表是如何进行初始化的?用户进程不能访问内核的数据是在初始化的哪个阶段决定的?这些内容,都牵扯到 linu的进程页表和内核页表,以及内核页表的初始化。本文也主要为你解答这些疑问.原创 2013-10-24 20:10:44 · 6966 阅读 · 0 评论 -
linux 用户空间与内核空间——高端内存详解
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存转载 2013-07-11 09:52:26 · 5658 阅读 · 2 评论 -
内存寻址(一)硬件寻址的基本原理:硬件中的分段和分页机制,控制寄存器CR0与CR3
摘要:本文讲述8086怎样进行芯片级别的内存寻址,linux又是如何在这些硬件的基础上进行寻址的。本文主要讨论硬件和linux寻址的基本原理,后续将讨论分页机制的具体实现,内核如何给自己分配主存,怎样给进程分配线性地址。一、寻址流程逻辑地址经过分段单元形成线性地址,然后经过分页单元形成物理地址。二、硬件中的分段1.段选择符和段寄存器2.段描述符GDT在主存中的地址和大小放在原创 2013-10-18 15:11:26 · 4465 阅读 · 0 评论 -
内存管理:物理地址扩展(PAE)分页机制
摘要: Intel通过在处理器上把管脚数从32增加到36,以提高处理器的寻址能力,使其达到2^36=64GB,然而线性地址的位数仍然是32位,为此,需引入一种新的分页机制。从pentium pro处理器开始,intel引入一种PAE机制,另外一种叫做页大小扩展机制(PSE)在pentium III中引入,但是linux没有采用,本文不讨论它。本文来源:内存管理:物理地址扩展(PAE)分页机制原创 2013-10-18 14:31:31 · 7745 阅读 · 1 评论 -
内存管理(一)页框管理概论
摘要:对内存管理涉及两个大的方面,一个是物理内存的管理,另一个是虚拟内存的管理,前者是“RAM管理”,后者是进程地址空间的管理,它们二者使用page fault联系起来。在RAM管理这一节,我们主要讲解页框管理和内存区管理,分别介绍对连续物理内存处理的两种不同技术。而“非连续内存区管理”分别介绍处理非连续内存区的第三种技术。内存管理这个系列,我们将讲到“内存管理区、内核映射、伙伴系统、slab和内原创 2013-10-25 10:48:13 · 2663 阅读 · 0 评论