- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * 30 系统调用表格式如下 ENTRY(sys_call_table) .long sys_restart_syscall /* 0 */ .long sys_exit /* 1 */ .long sys_fork /* 2 */ .long sys_read /* 3 */ .long sys_write /* 4 */ .long sys_open /* 5 */ ………… ………… .long sys_mq_getsetattr /* 282 */ 操作系统的用户接口——Linux系统功能调用 31 系统调用处理程序 系统调用处理程序是system_call(),主要工作如下 宏SAVE_ALL保护现场; 正确性检查 ; 依eax中所包含的系统调用号,调用其对应的服务例 程; 系统服务例程结束时,通过宏RESTORE_ALL恢复寄 存器; 最后通过iret指令返回。 操作系统的用户接口——Linux系统功能调用 32 3. 增加一个新的系统功能调用的方法 添加新的服务例程 在/usr/src/linux/kernel/sys.c文件中增加一个新的函数, 该函数的名字是sys_mysyscall 例:一个简单的系统调用,其功能是返回一个整型值 asmlinkage int sys_mycall(int number) { return number; } 操作系统的用户接口——Linux系统功能调用 33 增加新的系统功能调用号 在文件include/asm-i386/unistd.h中添加一项 #define __NR_mysyscall XX XX为新增加的系统调用号,此数字选一未用值。 例: #define __NR_restart_syscall 0 #define __NR_exit 1 ………… ………… #define __NR_mq_getsetattr 282 #define __NR_mysyscall 283 操作系统的用户接口——Linux系统功能调用 34 修改系统调用表 在文件/arch/i386/kernel/entry.S中的系统调用表 sys_call_table中添加新增的系统调用 sys_call_table数组包含指向内核中每个系统调用的指针 例: ENTRY(sys_call_table) .long sys_restart_syscall /* 0 */ .long sys_exit /* 1 */ ………… ………… .long sys_mq_getsetattr /* 282 */ .long sys_mysyscall /*283*/ 操作系统的用户接口——Linux系统功能调用 35 重新编译内核并启动新内核 为使新的系统调用生效,需要重建Linux的内核。 这需要以超级用户身份登录后重新编译内核。 操作系统的用户接口——Linux系统功能调用 在用户程序中访问新的系统调用 在用户程序中,测试新增加的系统调用是否能正确使用。 36 作业、作业步的概念 用户程序的步骤以及个步骤之间的关系 静态连接和动态链接的区别 操作系统提供哪两个接口,使用场合 举例说明实际操作系统的用户界面 系统调用的概念及实现方法 Linux系统功能调用的过程 在Linux系统中增加一个新的系统功能调用需做的工作 操作系统的用户接口——小结 * * * * * * * * * * * * * * * * * * * * * * * * * 操作系统的用户接口 操作系统的用户接口 用户工作环境 运行一个应用程序的过程 操作系统用户界面 系统功能调用
文档评论(0)