Linux进程源码阅读笔记
文章平均质量分 81
chengonghao
这个作者很懒,什么都没留下…
展开
-
1.系统调用的过程
什么是系统调用?我的理解是系统调用是操作系统提供的一组函数,比如I/O读写磁盘等。由于是操作系统提供的,故只能在内核态中执行。用户编写的程序平时运行在用户态,需要用系统调用时只能通过特定的方式(int 0x80中断进入内核,eax寄存器指定具体的系统调用,用edi、esi等寄存器向系统调用传递参数)来使用系统调用。 大致的执行逻辑如下所示: 应用原创 2016-04-30 22:03:40 · 15759 阅读 · 0 评论 -
2.一个奇怪的fork程序
进程起源: 道生一(start_kernel,内核启动函数),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三个进程),三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)。 fork.c#include#include#includeint main(int argc,char * argv[]){原创 2016-04-30 22:05:36 · 582 阅读 · 0 评论 -
4.可执行文件的格式(ELF格式)详解
下一讲介绍可执行程序的装载,也就是为可执行文件创建内存映像。在这之前我们要先了解可执行文件的格式,在Windows下可执行文件的格式一般为PE,而在Linux下可执行文件的格式为ELF。ELF文件的全称是Executable and Linkable Format,意为可执行的、可连接的格式。ELF文件分为三类:1.可重定位(relocabtable)文件,保存着代码和适当的数据,用来转载 2016-05-03 10:08:22 · 6179 阅读 · 0 评论 -
6.fork + execve:一个进程的诞生
前两讲我们介绍了fork()系统调用以及execve()内核函数(注:所有的库函数exec*都是execve的封装例程)。 简单回顾一下fork()系统调用(传送门:fork()到底干了啥?): 进程调用fork()创建一个新的进程,新进程复制了父进程的task_struct(PCB,process control block,进程控制块),以及tas原创 2016-05-06 21:14:45 · 5757 阅读 · 0 评论 -
5.execve()到底干了啥?
导语很多童鞋有分析阅读Linux源代码的强烈愿望,可是Linux内核代码量庞大,大部分人不知道如何下手,以下是我分析Linux源代码的一些经验,仅供参考,有不实之处请大神指正!1.要想阅读内核首先要进入内核,其中用户态程序进入内核态的主要方式是int 0x80中断,搞懂这条指令的执行过程是我们学习内核的第一步;2.Linux中原创 2016-05-04 11:37:56 · 8497 阅读 · 0 评论 -
7.switch_to到底干了啥?
第六讲(传送门:fork + execve:一个进程的诞生)我们介绍了进程的诞生,可是操作系统中有很多进程,进程之间怎么切换的,又有哪些奥秘?我们回到源码,细细阅读。操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已。对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制更为关键。进程调度的时机:原创 2016-05-06 21:27:33 · 4618 阅读 · 0 评论 -
3.fork()到底干了啥?
用户态创建进程的fork()、vfork()和clone()系统调用在内核中最终都是调用的do_fork(),故我们分析一下do_fork()的代码。我使用的是linux-3.18.6版本的内核~在linux-3.18.6\kernel目录下打开fork.c,找到do_fork()函数:/* * Ok,this is the main fork-routine. * * It co原创 2016-04-30 22:16:46 · 3681 阅读 · 0 评论