中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011

Slides:



Advertisements
Similar presentations
© 2001 孟静制作 版权所有 第二章 CPU 管理和进程、线程管理 2.1 CPU 管理概述 2.2 进程管理 2.3 进程模型实例分析 :UNIX 早期版本的 CPU 管理 子系统 ( 进程模型 ) 2.4 处理机管理实例分析 (2):linux CPU 管理(进程 模型) 2.5 线程模型.
Advertisements

牛熊證簡介.
南山中學 102學年度 性別平等教育週性別教育 性騷擾防治.
歷史報告 自強運動 指 導 老 師: 盧雨芯 製 作 簡 報: 第三組
組員:何浚壟4990Y031 詹昀蓉4990Y052 林怡汝4990Y053 黃亦雯4990Y055 王宜珺4990Y056
第一章 十六世紀中葉以前的臺灣與原住民 第一節 考古發掘與史前文化.
党的十八届四中全会 依法治国精神解读. 党的十八届四中全会 依法治国精神解读 一、十八届四中全会概况 中国共产党第十八届中央委员会第四次全体会议,于2014年10月20日至23日在北京举行。 全会审议通过了《中共中央关于全面推进依法治国若干重大问题的决定》。
学习情境三 桥梁下部结构的构造与施工 桥梁墩台的构造.
行政法 之 行政救济篇.
2015高考试题分析 及高三第一轮复习心得 ----余江一中物理组
证券市场法律制度与监督管理 作者:张学亮.
量化vs質性研究分析 量化vs質性研究分析 報告人:王秀民.
返本归原在课文,精讲多练会高考 ——2012届高三语文复习的几点做法.
第1单元 操作系统概论 第一节 绪论 操作系统定义.
外国短篇小说——契科夫笔下的女性形象分析
劳动与工作.
学龄前儿童(3-6)行为与社会环境 组长:吾尔克西 讲述人:张紫桓 ppt制作:管吉 熊萌 资料收集:徐琰 李捷羚.
我怀念的乡村记忆 陈秀华 社会工作0841.
唐宋傳奇、筆記小品和史書、論著中的寓言 中碩二 吳佳樺.
兒童期 7 青春期 兩性圓舞曲 乘客:七年級同學 司機:張立杰老師.
沟通技巧 主讲:涂育俊.
指導老師:黃怡瑾老師 組員:喻紹嫻、蔡穎邵、邱韋竣、 吳燿明、陳俊宏、林雅婷
星星知我心 談古話今….. ……..觀星望斗 主講人: 陽光青春美少男.
反垃圾掩埋場相關報告 組長:文煊 組員:鄭侃文 李浩暐 胡育睿 李瑞耘 朱祐賢 林承宇.
第八課 蓼莪.
关于绘本 深圳市第十二幼儿园 ——何雅秋.
大学生常见心理问题 及其原因分析 09本日2班.
"性"不"性"由你 性別平等之探討 北屯國小 張文陵.
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
操作系统原理 Principles of Operating System
組員: 洪暐翔、 賴峻毅 侯家豪、 賴琦穎 指導老師: 王惠鈴 老師
菜市場巡禮 四財三A 4980S030 王靖智 4980S070 陳婉莉 4980S071 蘇可芸 4980S075 陳惠卿
提升“三率”争做“五活” PPT交流 ——上余镇残联 徐俊俊.
♔乙武洋匡♔.
动画分镜头技巧 梁思平.
第7章 行政监督.
小组成员及分工: 高婉清(PPT制作) 曲莹(实地拍照) 邱露瑶(编辑整理) 刘长安(PPT讲解) 罗春海(搜集网上资料)
主題:轉換時刻 班 級:四進幼保三A 指導教授:葉雅惠 老師 組 別:第一組 組 員: 劉婉瑜 王美能
婚姻與家庭-田野調查 音樂二 第一組 S 沈蝶衣(組長) S 林長欣 S 余俐瑾
基于操作系统的编程复习 张玉宏
浅谈吉林省建筑采暖用能现有问题及解决方案
大 纲 一、备案系统数据迁移方案 二、备案系统过程数据处理方案 三、备案系统内存量数据核验方案 四、新备案系统信息真实性核验方案※
走自立自强之路 自己的事情自己做.
人類的循環系統.
2015学年第一学期 探究型课程专题培训 社会实践阅读领航 教育处
《三国演义》 之司马懿和诸葛亮的性格差异.
台中市不動產經紀人職業工會 不動產經紀營業員 複訓班
第七章. 文件系统 (lab5).
第三章 系统的启动和初始化 (include lab1)
第 5 章、連結與載入 作者:陳鍾誠 旗標出版社.
进程操作.
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
中国科学技术大学计算机系 陈香兰(0512- ) 助教:孟宁 Fall 2009
第六章 安全衛生工作守則 6-1 前 言  6-2 訂定依據相關法令規定  6-3 工作守則製作程序及製作前應注意事項  6-4 如何訂定適合需要之安全衛生工作守則  6-5 結 論.
第 23 讲 操作系统接口与UNIX系统内核结构 李元金 计算机与信息工程学院 1.
作業系統 第三章 作業系統結構.
操作系统的结构和硬件支持 第2章 操作系统的结构和硬件支持.
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
主讲:陈香兰 助教:贾永泉、毛熠璐 (西区电三421) Autumn 2007
高山草原生態系 分布於臺灣3000公尺以上高山,如中央山脈.玉山山脈.雪山山脈 分為玉山箭竹草原,高山芒草原及兩者混生林三種
第三章 水资源的形成 PPT制作人:李秀丽 华北水利水电学院.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
挑戰C++程式語言 ──第9章 函數.
实验二:添加Linux系统调用及熟悉常见系统调用
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab4.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
第6章 嵌入式软件开发基础.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
《操作系统设计与实现》 Linux系统编程.
Presentation transcript:

中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn Spring 2011 Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn Spring 2011

程序的执行

操作系统是如何通过可执行文件的内容建立进程的执行上下文的? 可执行文件的格式 程序以可执行文件的形式存放在磁盘上 库 可供很多程序使用的一些例程的集合 静态库 vs 共享库 命令行参数、环境变量等 Shell提示符下输入 从shell继承而来,用户可修改

提纲 可执行文件 可执行格式 Exec函数

可执行文件 可执行文件是一个普通的文件,它描述了如何初始化一个新的进程上下文 Fork + execve

命令行参数和shell环境 用户使用shell来执行某个程序时,可以指定命令行参数 例如:$ ls -l /usr/bin 列出/usr/bin下的目录信息 Shell本身不限制命令行参数的个数, 命令行参数的个数受限于命令自身 例如,int main(int argc, char *argv[]) 又如, int main(int argc, char *argv[], char *envp[])

命令行参数和环境串都放在用户态堆栈中

库 源文件目标文件可执行文件 最小的程序也会利用到C库 例如:void main(void) {} 其他库 在进程结束时,杀死进程(在main的最后插入exit()) 其他库 libm,包含浮点操作的基本函数 libX11,所有X11窗口系统图形接口的基本底层函数

静态链接 vs 动态链接 静态库 动态链接:共享库 Gcc的-static选项指明使用静态库

程序段和进程的线性区 在逻辑上,Unix程序的线性地址空间被划分为各种段(segment) 在mm_struct中都有对应的字段 正文段,text 数据段,data Bss段 堆栈段 在mm_struct中都有对应的字段

此外,还有共享库和文件的映射,他们映射在其他线性区 参阅/proc/1/maps了解init进程的线性区

可执行格式 Linux标准的可执行格式 旧版的可执行文件格式 其他 ELF:Executable and Linking Format a.out:Assembler OUT put format 其他 MS-DOS的exe文件 UNIX BSD的COFF文件

Linux对可执行文件格式的处理 在系统启动时,所有编译进内核的可执行格式都被注册 在系统运行过程中,也可以注册一个新的可执行文件格式 使用linux_binfmt对象管理

linux_binfmt 链表,连接所有linux_binfmt对象 通过读存放在可执行文件中的信息为当前进程建立一个新的进程上下文 动态的把一个共享库绑定到一个已经在运行的进程 将当前进程的上下文保存到名为core的文件中 例如

Linux 2.6.26中看到的可执行文件格式

Linux通过可执行文件的扩展名或者存放在文件前128字节的magic数来识别文件格式 文件扩展名 Exe Bat …

Exec函数家族 用一个指定的可执行文件所描述的上下文代替进程的上 下文 系统调用:execve sys_execve 指定被执行文件的路径名 用一个指定的可执行文件所描述的上下文代替进程的上 下文 系统调用:execve sys_execve

do_execve open_exec bprm_mm_init search_binary_handler copy_strings_kernel & copy_strings mm_alloc __bprm_mm_init 初始化栈线性区 load_binary 对于elf格式的文件: 找到load_elf_binary 并调用它加载可执行 文件 set_brk 、elf_map、do_mmap 建立各线性区

举例 void main(void) {} 使用gcc –g –static参数编译 使用readelf –h获得可执行文件头,查看可执行程序的入口地址 使用objdump –D反汇编 查看入口地址所对应的程序是什么(_start) 查看从入口到main的调用路径 使用gdb来跟踪执行 在_start处设置断点,查看esp的值(验证堆栈位置在3G附近) 环境Kubuntu9.10 _start:main入口地址被压入栈中 调用__libc_start_main call *0x8(%ebp) mov %eax,(%esp) call 8048ab0 <exit> _start:0xbffff3f0 _main:0xbffff348

do_execve:调用kzalloc分配struct linux_binprm数据结构,即bprm bprm->p最开始在 __bprm_mm_init中初始化, 指向堆栈线性区的顶端相关位置 bprm->p = vma->vm_end - sizeof(void *); 此时, vma->vm_end为3G copy_strings中,会留出参数空间,例如arg,env bprm->p -= len; 关于用户态堆栈 的建立 setup_arg_pages中,继续调整 bprm->p -= stack_shift; mm->arg_start = bprm->p; remove_arg_zero中,继续调整 bprm->p++; bprm->argc--; create_elf_tables中,继续调整 bprm->p = STACK_ROUND(sp, items); start_thread中, bprm->p 传递到regs中的sp上下文中,与此同时 ip上下文指向入口地址

作业 什么是线性区?列举4种最常见的线性区。 Linux如何描述进程的地址空间? 按照ppt中所举的例子void main(void) {},查看反汇编代码, 若main函数有参数,则参数是如何传递给main的?

Thanks! The end.