Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn 助教:裴建国、冯晓静 Autumn 2008
程序的执行 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn 助教:裴建国、冯晓静 Autumn 2008
操作系统是如何通过可执行文件的内容建立进程的执行上下文的? 可执行文件的格式 程序以可执行文件的形式存放在磁盘上 库 可供很多程序使用的一些例程的集合 静态库 vs 共享库 命令行参数、环境变量等 Shell提示符下输入 从shell继承而来,用户可修改 2019/1/1 Linux OS Analysis
提纲 可执行文件 可执行格式 Exec函数 2019/1/1 Linux OS Analysis
可执行文件 可执行文件是一个普通的文件,它描述了如何初始化一个新的进程上下文 Fork + execve 2019/1/1 Linux OS Analysis
命令行参数和shell环境 用户使用shell来执行某个程序时,可以指定命令行参数 Shell本身不限制命令行参数的个数,但它受限于命令自身 例如:$ ls -l /usr/bin 列出/usr/bin下的目录信息 Shell本身不限制命令行参数的个数,但它受限于命令自身 例如,int main(int argc, char *argv[]) 又如, int main(int argc, char *argv[], char *envp[]) 2019/1/1 Linux OS Analysis
命令行参数和环境串都放在用户态堆栈中 2019/1/1 Linux OS Analysis
库 源文件目标文件可执行文件 最小的程序也会利用到C库 其他库 例如:void main(void) {} 在进程结束时,杀死进程(在main的最后插入exit()) 其他库 libm,包含浮点操作的基本函数 libX11,所有X11窗口系统图形接口的基本底层函数 2019/1/1 Linux OS Analysis
静态链接 vs 动态链接 静态库 动态链接:共享库 Gcc的-static选项指明使用静态库 2019/1/1 Linux OS Analysis
程序段和进程的线性区 在逻辑上,Unix程序的线性地址空间被划分为各种段(segment) 在mm_struct中都有对应的字段 正文段,text 数据段,data Bss段 堆栈段 在mm_struct中都有对应的字段 start_code/end_code、start_data/end_data、start_brk/brk、start_stack、arg_start/arg_end、env_start/env_end 2019/1/1 Linux OS Analysis
此外,还有共享库和文件的映射,他们映射在其他线性区 参阅/proc/1/maps了解init进程的线性区 2019/1/1 Linux OS Analysis
可执行格式 Linux标准的可执行格式 旧版的可执行文件格式 其他 ELF:Executable and Linking Format a.out:Assembler OUT put format 其他 MS-DOS的exe文件 UNIX BSD的COFF文件 2019/1/1 Linux OS Analysis
Linux对可执行文件格式的处理 在系统启动时,所有编译进内核的可执行格式都被注册 在系统运行过程中,也可以注册一个新的可执行文件格式 使用linux_binfmt对象管理 2019/1/1 Linux OS Analysis
linux_binfmt 链表,连接所有linux_binfmt对象 通过读存放在可执行文件中的信息为当前进程建立一个新的进程上下文 动态的把一个共享库绑定到一个已经在运行的进程 将当前进程的上下文保存到名为core的文件中 2019/1/1 Linux OS Analysis
Linux通过可执行文件的扩展名或者存放在文件前128字节的magic数来识别文件格式 文件扩展名 Exe Bat … 2019/1/1 Linux OS Analysis
Exec函数家族 用一个指定的可执行文件所描述的上下文代替进程的上下文 系统调用:execve sys_execve 指定被执行文件的路径名 用一个指定的可执行文件所描述的上下文代替进程的上下文 系统调用:execve sys_execve 2019/1/1 Linux OS Analysis
作业 什么是线性区?列举4种最常见的线性区。 Linux如何描述进程的地址空间? 2019/1/1 Linux OS Analysis