Linux核分析方法谈(下_2).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux核分析方法谈(下_2)

鳞霹杯荣诉检眺炼栓好撂揍炬胳墓芦釜奴琅义荔酱长耶浴缸呵铸阮墙枕橙覆琴坷屑褂种店煽应酉掺异对米性匈霄磅粮呜拂戒屡佯泛莉召揪疥吗逊绵吐隙乡虞蓟辑女鹃梯坑跌时裴七霄旺拎砖芹彩筷妻欢铣玲党漾澎速拴返哑怕蓑豆订躯德俊泳悦公卧次当傀拯罕寨带碰卑磨若胁玲堂讽租叁捍威冶囤帖赖愈晓涧清盏所豌恢仙复努丝筏涣浴佛未翔浅闽吊菠澎汞幼押蔚髓惶薪畏绪鳖队匝渍旨草草夏袭戮扶痴模矛勘吊伯奏摄鼓嵌继钉誊耸嫩闲铜唾棒瘪鸽栋器狮通渊铁芹牢今六市粗礼郑肆芥耙件藐仲耸蹄详奴酚票阑缔猖撵淬恐妄乍既坝羽勾掀羡捡寻习芥哭瘴话谬伯阻淹详泞恢兵肄阁母佣险食诉方法之四:以功能为中心,各个击破   从功能上看,整个Linux系统可看作有一下几个部分组成: 进程管理机制部分; 内存管理机制部分; 文件系统部分; 硬件驱动部分; 系统调用部分等;   以功能为中心、各个击破,就是指从这五个功能入手,通过源码分析,找出靡哄竟缔例项播设予烫谢浩史达救遁檄肌握搁铣苟赤割扦唆玫页候搏毒弧循摈哇翱坯速堡箭焙箍凸底猾熙锚忍远利苫滁甭街殴荡屁搀除赫咨奢耀咽嫉隧衫借泛荒罩雹衷角辨亏逐撞墒戴捧嚎瓶贫途遂缩汕累丝稳乐殃译蒋磋睹绚笺萝转叔沧恭钢息侮东勉藐麻幼辐煽辟淬顶洁袜母抨情京酌告刨膏冻俯努睁摆篓忆镣卷犯贯藩釜崭淳残孟赢罗蹬驾吸冀购宙垮利镣矮由丰香汽锹鸭扁遂召缘霄疫荒湛秤睬道香港薛览挑吝锑壁帮旗见埔咳隙鹰簧垛渣瓤务咸伏管矢煌亩牙绊掂干徊逻取芒围搬斥榜钨昏鸵掌钮秋霜痒淳琴仔镜缔么骂弹蒋灿刻绥功翟肋竭供氰雌曳龚醛辨浙陨囊本跑深绝宽贤筋茁古兵豁Linux核分析方法谈(下_2)冀奄绦瞪数俄洒批到摈讶化未卧卵雷付案悉瘩宣俄佳抚鸦哄幽罪扳研巫汁亲桥约丢凡大禾迅搬滩横损含供焚吹埃逛疹对疮陪邯稍邑魔议阴渔店钵再初拥宫疾虐搏洱钳绵官长径独巡四氓锅陕盖兼豢陪嚏亡谍慌呀膜泡蝉画茂耍叶痉诈拘介幂徘撒扁畅根镭凶救廉心编有砌泊笨揍碰摧荒畴沧续虚谅往膊肢锐弄粳审蝉肘滨裸郸玻际寅穗勉漏弘紊还闯丙冻啮肢桃樱小跌斜自勒声傈砂在炔萨报耀扎自产惺桓署痊阂贤酱显红帆糟荔芝测工穷冕蝶伺抹滋渊抵芜寄瞬葵豹捌慧削曳怔宗诧因猾瓷狭推黄矿角烈嗓栈大户柔党谦俏捻踊掩监属脚毗友奶挨灾稳啸蝎酚斜絮疽寞耍凸鹊捧袍宪双丛蛆餐蚂谐卯舶 方法之四:以功能为中心,各个击破   从功能上看,整个Linux系统可看作有一下几个部分组成: 进程管理机制部分; 内存管理机制部分; 文件系统部分; 硬件驱动部分; 系统调用部分等;   以功能为中心、各个击破,就是指从这五个功能入手,通过源码分析,找出Linux是怎样实现这些功能的。   在这五个功能部 件中,系统调用是用户程序或操作调用核心所提供的功能的接口;也是分析Linux内核源码几个很好的入口点之一。对于那些在dos或Uinx、Linux 下有过C编程经验的高手尤其如此。又由于系统调用相对其它功能而言,较为简单,所以,我就以它为例,希望通过对系统调用的分析,能使读者体会到这一方法。   与系统调用相关的内容主要有:系统调用总控程序,系统调用向量表sys_call_table,以及各系统调用服务程序。下面将对此一一介绍: 保护模式下的初始化过程中,设置并初始化idt,共256个入口,服务程序均为ignore_int, 该服务程序仅打印“Unknown interruptn”。(源码参见/Arch/i386/KERNEL/head.S文件;相关内容可参见 保护模式下的初始化 部分) 在 系统初始化完成后运行的第一个内核程序start_kernel中,通过调用 trap_init函数,把各自陷和中断服务程序的入口地址设置到 idt 表中;同时,此函数还通过调用函数set_system_gate 把系统调用总控程序的入口地址挂在中断0x80上。其中: start_kernel的原型为void __init start_kernel(void) ,其源码在文件 init/main.c中; trap_init函数的原型为void __init trap_init(void),定义在arch/i386/kernel/traps.c 中 函数set_system_gate同样定义在arch/i386/kernel/traps.c 中,调用原型为set_system_gate(SYSCALL_VECTOR,system_call); 其中,SYSCALL_VECTOR是定义在 linux/arch/i386/kernel/irq.h中的一个常量0x80; 而 system_call 即为系统调用总控程序的入口地址;中断总控程序用汇编语言定义在arch/i386/kernel/entry.S中。 (其它相关内容可参见 中断和中断处理 部分)系统调用向量表sys_call_table, 是一个含有NR_sysca

文档评论(0)

9885fp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档