linux源码分析(一)】的更多相关文章

linux源码分析 这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 的学习笔记. linux的启动过程有点像是小鱼吃大鱼,最后吃成一个胖子. 计算机中的PC寄存器是用来指示下个执行程序.最开始的时候,pc寄存器都是指向0xfffffff0.这个程序是指向BIOS的POST程序的.POST全称是Power On Self Test,意思是加点自检.过程包括内存检查,系…
之前写代码的时候一直有个疑问,malloc申请内存的时候指定了内存大小,但是free的时候却只指定要释放的内存地址,那么free是如何知道它要释放的内存空间大小呢? 源码之前,了无秘密,下面就从源码来扒一扒. 由上图可知,malloc和free分别调用了malloc_internal和free_internal来实现具体的操作. 在malloc_internal中,最需要注意的一行就是计算需要分配空间的大小,可以看到,计算该空间时还加了一个sizeof(allocation_header),该结…
前置:这里使用的linux版本是4.8,x86体系. 其实linux的内核启动的入口文件还是非常好找的,init/main.c. static 和 extern 首先理解的是static和extern的区别: static int kernel_init(void *); extern void init_IRQ(void); extern void fork_init(void); extern void radix_tree_init(void); 这个代码说的是kernel_init函数的…
前置:这里使用的linux版本是4.8,x86体系. local_irq_disable(); 这个函数是做了关闭中断操作.和后面的local_irq_enable相对应.说明启动的下面函数是不允许被中断抢占的.这个函数追下去会发现下面的代码: static inline void native_irq_disable(void) { asm volatile("cli": : :"memory"); } 这个写法是linux的内联汇编写法.在C语言中写汇编语言.实…
前置:这里使用的linux版本是4.8,x86体系. cgroup_init_early(); 聊这个函数就需要先了解cgroup. cgroup概念 这个函数就是初始化cgroup所需要的参数的.cgroup最初是在2006年由google的一名工程师提出的,目的是把一些共同目标的进程放在一个组里面,而这个组里面的进程能共享指定数额的资源.而后就有了cgroup这个概念了. 我们把每种资源叫做子系统,比如CPU子系统,内存子系统.为什么叫做子系统呢,因为它是从整个操作系统的资源衍生出来的.然后…
前置:这里使用的linux版本是4.8,x86体系. start_kernel是过了引导阶段,进入到了内核启动阶段的入口.函数在init/main.c中. set_task_stack_end_magic(&init_task); 这个函数是设置操作系统的第一个进程init. 这个init_task变量是怎么来的呢?从init/init_task.c中初始化的. struct task_struct init_task = INIT_TASK(init_task); EXPORT_SYMBOL(…
前置:这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 的学习笔记. linux的启动过程有点像是小鱼吃大鱼,最后吃成一个胖子. 计算机中的PC寄存器是用来指示下个执行程序.最开始的时候,pc寄存器都是指向0xfffffff0.这个程序是指向BIOS的POST程序的.POST全称是Power On Self Test,意思是加点自检.过程包括内存检查,系统总线检查等.…
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 最近在回想一些知识点的时候,觉得对进程这一块有些模糊,特别写一篇随笔对进程信息进行巩固和复习. 程序和进程 以我个人的理解就是,程序是一段二进制编码甚至是一个简单的可执行文件,而当程序这段二进制编码放入内存运行时,它就会产生一个或多个进程. CPU时间片 对于CPU来说,它的工作就是不停地执行指令,而由于CPU执行指令的速度非常快,它可以用5ms的时间专门用于执行进程A,5ms的时间专门用于执行进程B,5ms…
源码分析:动态分析 Linux 内核函数调用关系 时间 2015-04-22 23:56:07  泰晓科技 原文  http://www.tinylab.org/source-code-analysis-dynamic-analysis-of-linux-kernel-function-calls/ 主题 Linux源码分析 By Falcon ofTinyLab.org 2015/04/18 缘由 源码分析是程序员离不开的话题. 无论是研究开源项目,还是平时做各类移植.开发,都避免不了对源码的…
一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写.编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内.如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码.通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一般短…