内存管理和分配
文章平均质量分 71
斐然成章
这个作者很懒,什么都没留下…
展开
-
Linux Kernel —— 学习经典书籍及网络资源推荐
待到山花烂漫时,还是那些经典在微笑。 有关内核的书籍可以用汗牛充栋来形容,不过只有一些经典的神作经住了考验。首先是5本久经考验的神作(个人概括为“2+1+2”,第一个2是指2本全面讲 解内核的书,中间的1指1本讲解驱动开发的书,后面的2则指2本有关内核具体子系统的书,你是否想到了某某广告里三个人突然站起单臂齐举高呼“1比1比1”的场景?)。 《Linux内核设计转载 2014-07-17 15:27:47 · 2999 阅读 · 0 评论 -
神奇的系统请求键SysRq
什么是SysRqIt is a 'magical' key combo you can hit which the kernel will respond toregardless of whatever else it is doing, unless it is completely locked up.如何使能SysRq?内核配置SysRq若使用SysRq,需原创 2016-05-08 09:27:29 · 4628 阅读 · 0 评论 -
linux下逻辑地址-线性地址-物理地址图解
一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能转载 2016-04-19 10:44:04 · 3434 阅读 · 0 评论 -
Linux内存管理之三 页的分配和释放
Linux对内存区内的页框的分配和释放,采用的算法是伙伴系统。如上图,Linux分配页时,只能分配2^n个页。内核维护MAX_ORDER个链表,每个链表记录着连续的空闲页。第一个链表中的每一项为1个空闲页,第二个链表中的每一项为2个空闲页,第三个链表中的每一项为4个空闲页。。。,依次类推。分配页时,从对应的链表上摘除空闲页;释放页时,将对应的页归还到对应的链表。分配释放页的过程中,可能转载 2016-04-18 16:02:29 · 604 阅读 · 0 评论 -
Linux内存管理之二 内存节点和内存分区
UMA和NUMA:UMA(Uniform Memory Access),即一致性内存访问。这种情况下,CPU访问内存的任何位置,代价都是一样的。NUMA)(Non Uniform Memory Access),即非一致性内存访问。这种情况下,CPU访问不同位置的内存,代价是不一样的。在多CPU情况下,对每个CPU来说有本地内存和远端内存,访问本地内存的代价比访问远端内存的代价小。确保CPU转载 2016-04-18 16:01:30 · 1026 阅读 · 0 评论 -
Linux内存管理之一 分段与分页
现代操作系统的内存管理机制有两种:段式管理和页式管理。段式内存管理,就是将内存分成段,每个段的起始地址就是段基地址。地址映射的时候,由逻辑地址加上段基地址而得到物理地址。纯粹的段式内存管理的缺点很明显,就是灵活性和效率比较差。首先是段的长度是可变的,这给内存的换入换出带来诸多不便,如何选择一个段的长度是一个棘手的问题;其次进程在运行过程中,可能会扩充地址空间,这就要增加段,从而造成进程的地转载 2016-04-18 15:59:07 · 1414 阅读 · 0 评论 -
Linux Kernel 学习路线
看了下各位大神的推荐路线,总结如下: 0. 跟着项目走;1. 学会用、熟练用linux系统;2. Linux Kernel Development.3. Understanding the Linux Kernel.4. Linux Device Driver.5. 找一个感兴趣的子系统研究,认真研究代码,这里的建议是可以看提交的每个change。比如网络子系统:Und转载 2016-03-17 23:02:39 · 1987 阅读 · 0 评论 -
cat proc/version在内核中是如何实现的?
平时的时候我们都在用cat /proc/version来获得我们内核的版本号,但是是如何产生的呢?let's see see fs/proc/version.c。 static int version_proc_show(struct seq_file *m, void *v) { seq_printf(m, linux_proc_banner,转载 2015-09-01 21:15:15 · 1497 阅读 · 0 评论 -
Linux Kernel —— DebugFS介绍
DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据。类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上,而是Linux内核运行起来后才建立起来。通常情况下,最常用的内核调试手段是printk。但printk并不是所有情况都好用,比如打印的数据可能过多,我们真正关心的数据在大量的输出里不是那么一目转载 2014-07-30 23:28:16 · 981 阅读 · 0 评论 -
使用 ftrace 调试 Linux 内核 —— 第 1 部分
概述转载 2014-07-21 11:16:07 · 1007 阅读 · 0 评论 -
使用 ftrace 调试 Linux 内核 —— 第 2 部分
ftrace 使用ftrace 是 Linux 内核中提供的一种调试工具。使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用。本系列文章对 ftrace 进行了介绍,分为三部分。本文是第二部分,通过示例介绍了如何使用 ftrace 中的跟踪器,并对不同格式的跟踪信息进行了描述,同时还对如何使用 ftrace 调试指定内核模块进行了介绍。通过对本文的学习转载 2014-07-21 14:48:28 · 2526 阅读 · 0 评论 -
分支声明likely()/unlikely()
分支声明 对于条件语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支进行优化。内核把这条指令封装成了宏,比如likely()和unlikely(),这样使用起来比较方便。 例如,下面是一个条件选择语句: if (error) { /* ... */ }原创 2014-05-26 09:50:38 · 1181 阅读 · 0 评论 -
Cache与主存之间的全相联映射、直接映射和组相联映射的区别
Cache与主存之间的全相联映射、直接映射和组相联映射的区别高速缓冲存储器的功能、结构与工作原理高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换; 二是按一定原转载 2017-12-24 11:04:50 · 42011 阅读 · 5 评论