
linux内核 情景分析之存储管理
stillvxx
这个作者很懒,什么都没留下…
展开
-
之四:页面映射中的结构体
备注:本文中引用的内核代码的版本是2.4.0。 在前面的文章中,我们介绍了linux页式内存管理,讲到了页面目录PGD、中间目录PMD以及页表PT,本文来看下内核中对应的结构体定义。 一、 页表项pte_t以及相关操作 PGD、PMD以及PT分别是由pgd_t(页面目录项)、pmd_t(中检目录项)以及pte_t(页表项)构成的数组,这些表项(虽然只有32位)被定义成结构体,定义在中:原创 2014-11-14 21:21:17 · 2256 阅读 · 0 评论 -
之六:虚存管理中的抽象
虚存管理中的抽象 在软件设计时,我们一般要从需求中提取出抽象(类或者数据结构),然后围绕这些抽象设计相关的算法。内存管理自然也不能例外,这一节我们来看看为了管理为了内存以及整个虚存空间,linux提取哪些抽象,提取这些抽象背后的动机是什么?这些抽象之间的关联是什么? 注:本文展示的结构体定义来自2.4.0版本的内核。 1. 4G虚存空间的划分 前面讲过,linux的页式存储管理为虚存地址原创 2014-11-14 22:05:45 · 1195 阅读 · 0 评论 -
之三:linux的页式内存管理
linux的页式内存管理 备注:本文中引用的内核代码的版本是3.14。 当地址的宽度是32位时,页面目录表+页面表的两级映射合情合理,但如果地址总线的宽度超过32位,比如64位时,两级映射就不合理了。linux要设计一套适用于所有地址宽度的页式内存管理机制,就不能不考虑这个问题。linux的页式管理将映射分成三层,在页面目录表和页面表之间加入一层“中间目录”。在代码中,页面目录称为PGD,中间原创 2014-11-02 11:04:36 · 1252 阅读 · 0 评论 -
之二:X86页式内存管理
X86页式内存管理 内存管理的目的是什么?内存管理本身就像一个外观模式,它隐藏底层细节而给应用程序提供一个统一易用的访问内存的接口。程序可以访问4G空间中的任意地址,但实际上物理内存可能只有几百M,这之间的矛盾该怎么解决?关键时刻,还是得抱硬盘的大腿。当可用内存不足时,将内存中不紧急的内容从内存中换出到磁盘上,从而腾出内存给更紧急的程序使用。当需要访问之前的内容时,再将磁盘中数据读入到内存中。内原创 2014-11-02 10:50:48 · 752 阅读 · 0 评论 -
之一:X86段式内存管理与保护模式
X86段式内存管理与保护模式 我们说一个CPU是16位的或32位的或64位的,指定是CPU中的ALU单元(算术逻辑单元)的宽度,通常也就是数据总线的宽度。那么地址总线呢?自然的,从程序设计的角度我们希望其与数据总线的宽度一致,这样一个地址也就是一个指针,其与整数同宽,在进行指针运算时,直接拿整数运算指令就可了,不需要专门的“指针运算指令”。 在80286时代,当时数据总线的宽度是16位的,不出原创 2014-11-02 10:46:15 · 1473 阅读 · 0 评论 -
之五:物理内存管理中的抽象
在软件设计时,我们一般要从需求中提取出抽象(类或者数据结构),然后围绕这些抽象设计相关的算法。内存管理自然也不能例外,这两节我们来看看为了管理为了物理内存以及整个虚存空间,linux提取哪些抽象,提取这些抽象背后的动机是什么?这些抽象之间的关联是什么? 注:本文展示的结构体定义来自2.6.24版本的内核。 1.最顶层——节点 Node Node(内存节点)是因为NUMA的出现而产生的原创 2014-11-14 21:45:04 · 1570 阅读 · 0 评论 -
之七:.情景分析之越界访问
情景分析之越界访问 注:本文展示的代码来自2.4.0版本的内核,入口函数do_page_fault定义在中。 总体处理流程: 备注: ①读取CR2寄存器获取出错地址 CPU在发出页面异常时,会将对应的地址存到CR2寄存器中,在页面异常的处理程序中就可以从CR2中读取到出错地址。因为要读取CR2寄存器,C语言无法做到,只能通过嵌入式汇编实现。 ②当前进程的用户空间尚未建立 前面讲原创 2014-11-20 15:57:28 · 660 阅读 · 0 评论 -
之八:情景分析之堆栈扩展
注:本文展示的代码来自2.4.0版本的内核,入口函数do_page_fault定义在中。 总体处理流程: 备注: ①do_page_fault前半部分流程请参考“越界访问”的情景分析。 ②虚存区间结构vm_area中包含一个vm_operations_struct类型的指针vm_ops。vm_operations_struct定义了一组函数指针,其中的nopage函数指针指定了当该区原创 2014-11-23 12:39:54 · 1004 阅读 · 0 评论 -
之九:磁盘页面的抽象
在讲《X86页式内存管理》中提到过“页面交换”。一个系统的物理内存总是有限的,但是运行在其上的进程却不敢不顾的一味“索取”,为了解决这种困境,在计算机的发展史上很早就有将内存中的内容与一个专用的磁盘空间交换的技术,即把内存中暂时不用的内容存到磁盘上,为其他急用的内容腾出内存空间,到需要时再将磁盘上的内容读到内存中。 在继续之前,要明确几个概念。首先“虚存页面”指虚拟地址空间中一个固定大小,边界与原创 2014-11-23 12:49:15 · 1975 阅读 · 0 评论