Linux内核分析——进程描述与创建
20135125陈智威
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
实验内容:
1.可执行程序的执行环境
$ ls -l /usr/bin 列出/usr/bin下的目录信息
Shell本身不限制命令行参数的个数,命令行参数的个数受限于命令自身
例如,int main(int argc, char argv[])
又如, int main(int argc, char argv[], char envp[])
Shell会调用execve将命令行参数和环境参数传递给可执行程序的main函数
int execve(const char filename,char * const argv[ ],char * const envp[ ]);
命令行参数和环境串都放在用户态堆栈中,先函数调用参数传递,再系统调用参数传递。
2.
动态链接分为可执行程序装载是动态链接和运行时动态链接
gcc -shared shlibexample.c -o libshlibexample.so -m32
-L:库对应的接口头文件所在的目录
-l:库名
-ldl:动态加载器
3.
如果可执行文件需要依赖其他的动态链接的话,需要将CPU控制权交给ld来加载依赖库完成动态链接。对于静态链接的文件elf-entry是新程序执行的起点










s可以进入do-execve的内部
Po new-ip可以查看返回到用户态的第一条指令地址
4.对于ELF格式的可执行文件fmt->load-binary(bprm),执行的应该是load-elf-binary,其内部是和ELF文件格式解析的部分需要和ELF文件格式标准结合起来阅读。
Elf-format和inint-elf-binfmt是观察者模式中的观察者,解析模块是被观察者
Load-elf-binary->start-thread,系统调用返回用户态的起点,通过修改内核堆栈中EIP的值作为新程序的起点(int 0x80)。命令行参数和环境变量在栈顶。
实验总结:
当linux内核或程序(例如shell)用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。
当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。
因为调用exec并不创建新进程,所以前后的进程ID并未改变。
exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段。
Linux内核分析——进程描述与创建的更多相关文章
- 20135239益西拉姆 Linux内核分析 进程的描述和进程的创建
[益西拉姆 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] 第六周 进程的描述 ...
- 20135239 益西拉姆 linux内核分析 进程的切换和系统的一般执行过程
week 8 进程的切换和系统的一般执行过程 [ 20135239 原文请转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析--进程创建,执行,切换
学号:351 原创作品转载请注明出处本实验来源 https://github.com/mengning/linuxkernel/ 实验要求 从整理上理解进程创建.可执行文件的加载和进程执行进程切换,重 ...
- Linux内核分析——进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 (一)进程调度与进程调度的时机分析 1.不同类型的进程有不同的调度需求 第一种分类: (1)I/O-bound:频繁进行I ...
- Linux内核分析— —进程的切换和系统的一般执行过程
进程调度的时机 linux进程调度是基于分时和优先级的 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用s ...
- Linux内核分析——进程的描述和进程的创建
进程的描述和进程的创建 一. 进程的描述 (一)进程控制块PCB——task_struct 1.操作系统的三大管理功能包括: (1)进程管理 (2)内存管理 (3)文件系统 2.PCB task_st ...
- 《Linux内核分析》第六周 进程的描述与创建
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK SIX(3 ...
- Linux内核分析第六周学习总结:进程的描述和进程的创建
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的描述 ...
- LINUX内核分析第六周学习总结——进程的描述与创建
LINUX内核分析第六周学习总结--进程的描述与创建 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc ...
随机推荐
- [sqoop1.99.7] sqoop命令
官网文档:http://sqoop.apache.org/docs/1.99.7/user/CommandLineClient.html#delete-link-function 一.了解sqoop数 ...
- MAC OSX环境下cordova+Ionic的安装配置
一.简介 1.Ionic是什么 IONIC 是目前最有潜力的一款 HTML5 手机应用开发框架.通过 SASS 构建应用程序,它提供了很多 UI 组件来帮助开发者开发强大的应用. 它使用 JavaSc ...
- Window通过cmd查看端口占用、相应进程、杀死进程
在windows下启动程序时候经常出现端口占用, 修改本程序端口是一种解决思路,但是更多时候希望直接杀掉占用端口的程序: 一. 查看所有进程占用的端口 在开始-运行-cmd,输入: netsta ...
- VS2010 验证时出错。HRESULT = '8000000A'
验证时出错.HRESULT = '8000000A' 在VS2010中,当为Windows窗体应用程序添加一个安装项目后,如果项目生成时出现以下错误: 验证时发生错误.HRESULT = '80000 ...
- Jfreechart初案例--饼图
1.action @Controller(value = "pieAction") @Scope("prototype") public class PieAc ...
- Objective-C( Foundation框架 一 NSNumber(NSValue))
NSNumber: 是OC中处理数字的一个类 NSValue是NSNumber的子类 如何处理: 把int,float,double 包装成一个对象 使用NSNumber的好处: 可以把基本数据类型 ...
- C语言 多线程测试
1.CreateThread 在主线程的基础上创建一个新线程 2.WaitForMultipleObjects 主线程等待子线程 3.CloseHandle 关闭线程 // testThread.cp ...
- TabActivity 切换Activity界面
TAB切换先上图,tab标题没有添加样式,因为setIndicator可以直接接收View,所以可以自己编辑样式: 也可以实现OnTabChangeListener监听tab的点击,改变tab点击后的 ...
- Java自由块(静态和非静态)(转载)
java中的自由块分为两种: 静态块和非静态块 静态块: public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class文件装载的时候 ...
- N 皇后问题
#include <set> #include <iostream> #include <string> #include <vector> #incl ...