chengonghao的博客

Practice Makes Perfect

排序:
默认
按更新时间
按访问量
RSS订阅

7.switch_to到底干了啥?

第六讲(传送门:fork + execve:一个进程的诞生)我们介绍了进程的诞生,可是操作系统中有很多进程,进程之间怎么切换的,又有哪些奥秘?我们回到源码,细细阅读。 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已。 ...

2016-05-06 21:27:33

阅读数 2027

评论数 0

6.fork + execve:一个进程的诞生

前两讲我们介绍了fork()系统调用以及execve()内核函数(注:所有的库函数exec*都是execve的封装例程)。            简单回顾一下fork()系统调用(传送门:fork()到底干了啥?):          进程调用fork()创建一个新的进程,新进程复制了父进程...

2016-05-06 21:14:45

阅读数 1944

评论数 0

5.execve()到底干了啥?

导语 很多童鞋有分析阅读Linux源代码的强烈愿望,可是Linux内核代码量庞大,大部分人不知道如何下手,以下是我分析Linux源代码的一些经验,仅供参考,有不实之处请大神指正! 1.要想阅读内核首先要进入内核,其中用户态程序进入内核态的主要方式是int 0x80中断,搞懂这条指令的...

2016-05-04 11:37:56

阅读数 4034

评论数 0

4.可执行文件的格式(ELF格式)详解

下一讲介绍可执行程序的装载,也就是为可执行文件创建内存映像。在这之前我们要先了解可执行文件的格式,在Windows下可执行文件的格式一般为PE,而在Linux下可执行文件的格式为ELF。ELF文件的全称是Executable and Linkable Format,意为可执行的、可连接的格式。 ...

2016-05-03 10:08:22

阅读数 2660

评论数 0

3.fork()到底干了啥?

用户态创建进程的fork()、vfork()和clone()系统调用在内核中最终都是调用的do_fork(),故我们分析一下do_fork()的代码。我使用的是linux-3.18.6版本的内核~ 在linux-3.18.6\kernel目录下打开fork.c,找到do_fork()函数: /* ...

2016-04-30 22:16:46

阅读数 2617

评论数 0

2.一个奇怪的fork程序

进程起源:          道生一(start_kernel,内核启动函数),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三个进程),三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)。   fork.c #include #include ...

2016-04-30 22:05:36

阅读数 374

评论数 0

1.系统调用的过程

什么是系统调用?我的理解是系统调用是操作系统提供的一组函数,比如I/O读写磁盘等。由于是操作系统提供的,故只能在内核态中执行。用户编写的程序平时运行在用户态,需要用系统调用时只能通过特定的方式(int 0x80中断进入内核,eax寄存器指定具体的系统调用,用edi、esi等寄存器向系统调用传递参数...

2016-04-30 22:03:40

阅读数 4699

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭