- 0
- 0
- 约 9页
- 2016-10-11 发布于浙江
- 举报
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_syscalls=256个单元的数组。它的每个单元存放着一个系统调用服务程序的入口地址。该数组定义在 /arch/i386/kernel/entry.S中;而NR_syscalls则是一个等于256的宏,定义在 include/linux/sys.h中。 各系统调用服务程序则分别定义在各个模块的相应文件中;例如asmlinkage int sys_time(int * tloc)就定义在kerneltime.c中;另外,在kernelsys.c中也有不少服务程序; II、系统调用过程 ∥颐侵溃低车饔檬怯没С绦蚧虿僮鞯饔煤诵乃峁┑墓δ艿慕涌冢凰韵低车粲玫墓叹褪谴佑没С绦虻较低衬诤耍缓笥只氐接没С绦虻墓蹋辉贚inux中,此过程大体过程可描述如下: 系统调用过程示意图: 整个系统调用进入过程客表示如下: 用户程序 系统调用总控程序(system_call) 各个服务程序 可见,系统调用的进入课分为“用户程序 系统调用总控程序”和“系统调用总控程序各个服务程序”两部分;下边将分别对这两个部分进行详细说明: “用户程序 系统调用总控程序”的实现:在前面已经说过,Linux的系统调用使用第0x80号中断向量项作为总的入口,也即,系统调用总控程序的入口地址system_call就挂在中断0x80上。也就是说,只要用户程序执行0x80中断 ( int 0x80 ),就可实现“用户程序 系统调用总控程序”的进入;事实上,在Linux中,也是这么做的。只是0x80中断的执行语句int 0x80 被封装在标准C库中,用户程序只需用标准系统调用函数就可以了,而不需要在用户程序中直接写0x80中断的执行语句int 0x80。至于中断的进入的详细过程可参见前面的“中断和中断处理”部分。“系统调用总控程序 各个服务程序” 的实现:在系 统调用总控程序中通过语句“call * SYMBOL_NAME(sys_call_table)(,%eax,4)”来调用各个服务程序(SYMBOL_NAME是定义在 /include/linux/linkage.h中的宏:#define SYMBOL_NAME_LABEL(
您可能关注的文档
最近下载
- DB2302T 063-2023 红小豆绿色优质高产栽培技术规程.pdf VIP
- 山东省“两高”项目管理目录(2025年版).pdf VIP
- 2.《化工和危险化学品生产经营企业重大生产安全事故隐患判定标准(征求意见稿)》编制说明.pdf VIP
- 排污许可应知应会手册-排污单位篇.pdf VIP
- 化工企业消防设施安全管理-中国化学品安全协会.pptx VIP
- 废止《导轨式胶轮系统设计要求》等377项山东省地方标准.pdf VIP
- DB12_T 1427-2025 玉米机收减损作业技术规范.pdf VIP
- 加油新学期新气象主题班会PPT新学期新起点新计划PPT课件(带内容).pptx VIP
- 2023年南昌航空大学计算机科学与技术专业《操作系统》科目期末试卷B(有答案).docx VIP
- 餐饮品牌手册 -蜜雪冰城品牌手册-冰淇淋 奶茶.pdf
原创力文档

文档评论(0)