电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

操作系统--linux系统调用

6页
  • 卖家[上传人]:101****457
  • 文档编号:100132461
  • 上传时间:2019-09-22
  • 文档格式:DOC
  • 文档大小:2.62MB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、西安电子科技大学操作系统原理实验报告实验报告 一、理论分析(分值:20%)【从操作系统原理(理论)的角度阐述系统功能调用的过程】1、 函数声明中都有asmlinkage限定词,用于通知编译器仅从栈中提取该函数的参数。2、 系统调用getXXX()在内核中被定义为sys_getXXX()。系统调用号:在linux中,每个系统调用都赋予一个系统调用号,通过这个独一无二的号就可以关联系统调用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就被用来指明到底要执行哪个系统调用;进程不会提及系统调用的名称。系统调用号一旦分配就不能再有任何变更(否则编译好的应用程序就会崩溃),如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用。Linux有一个未使用系统调用sys_ni_syscall(),它除了返回-ENOSYS外不做任何其他工作,这个错误号就是专门针对无效的系统调用而设的。内核记录了系统调用表中所有已注册过的系统调用的列表,存储在sys_call_table中。它与体系结构有关,一般在entry.s中定义。这个表中为每一个有效的系统调用指定了唯一的系统调用号。3、 Makef

      2、ile控制着整个内核的编译,在每个子目录下调用编译.c 文件,生成.o文件,生成新的内核。会把新编译的sys_hello内核加入到系统调用中。系统调用表gedit syscall_32.tbl中加入354 i386 hello sys_hello,当系统调用时可以在调用表中找到系统调用的号。4、 在syscalls.h中添加定义的内容的引用函数。5、 编译执行结果。二、设计与实现(分值:30%)【阐述在Linux中添加系统功能调用的方法】1、 在内核目录下创建hello文件夹 mkdir hello2、 进入hello文件夹 cd hello3、 创建hello.c的文件 vim hello.c4、 加入代码#include asmlinkage long sys_hello(void)printk(“Hello worldn”);return 0;5、 在hello文件夹下添加Makefile文件 vim Makefile在文件里添加 obj-y := hello.o6、 返回内核的根目录中,打开Makefile文件,在842行添加代码 vim Makefile将core-y +=

      3、kernel/ mm/ fs/ ipc/ security/ crypto/ block/ 改为core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/7、 打开系统调用表 cd arch/x86/syscallsVim syscall_32.tbl在文件最后一行添加354 i386 hello sys_hello8、 在调用函数名的文件中加入添加的函数cd include/linux/Vim syscalls.hasmlinkage long sys_hello(void);9、 进行编译cd /usr/src/linux-3.16/sudo make menuconfigsudo make oldconfigmake -j410、 安装编译好的内核sudo make modules_install installshutdown -r now重启后选择新的内核载入测试uname -r11、 编写测试文件hello.c#include #include #include #include int main() pri

      4、ntf(%ldn, syscall(354); return 0; 12、 编译测试gcc -o hello.c hello./hello.outdmesg三、实验结果(分值:10%)【对实验结果进行简要分析和说明】测试文件调用系统调用号354,并且将返回结果0输出,dmesg可以将开机显示结果输出查看。四、心得与收获(分值:40%)【本部分内容应至少包括如下部分:(1)从代码层面阐述Linux系统调用的整个过程;(2)应用程序调用Linux系统功能的方式以及你采用的方式。以及任何你想表达的内容】1、在系统启动的时候start_kernel会调用trap_init来初始化异常向量表。设置0x80号软中断的服务程序为system_call, system_call是所有系统调用的总入口。当进程执行到用户程序的系统调用命令时,实际上执行了由宏命令_syscallN()展开的函数。系统调用的参数由各通用寄存器传递,比如通过eax寄存器传递系统调用号和系统调用返回值,通过ebx/ecx/edx/esi/edi传递系统调用参数,然后执行INT 0x80,以内核态进入入口地址system_call

      5、。start_kernel trap_init set_system_trap_gate(SYSCALL_VECTOR, &system_call); . memcpy(&idtentry, gate, sizeof(*gate);2、 在arch/x86/kernel/entry_32.S文件中定义了system_call,在system_call里面调用了sys_call_table3、 编译内核的时候,当执行到文件/usr/src/Linux-3.10.21/arch/x86/syscalls/Makefile时,该文件会执行/usr/src/linux-3.10.21/arch/x86/syscalls/目录下的shell脚本syscalltbl.sh,该脚本将同目录下的syscall_32.tbl文件作为输入,然后生成文件/usr/src/linux-3.10.21/arch/x86/include/generated/asm/syscalls_32.h,这个文件正是sys_call_table定义中包含的文件asm/syscalls_32.h。所以sys_call_table的定义中包含了asm/syscall_32.h4、 应用程序调用系统函数可以有三种方式,通过 glibc 提供的库函数、使用 syscall 直接调用、通过 int 指令陷入,本人采用syscall调用系统调用号的形式调用系统函数。5、 感受:由于之前很少接触Linux系统,从最初的基本指令学起,自己用的系统是64位最新的Ubuntu系统,所以很多方法在网上没有现成的学习材料,很多是通过多次重装Linux,改变内核版本,后来慢慢理解了一些内核中的调用方法,虽然版本不同,修改的文件、方式、位置不一样,但最终的原理是不变的,而且调用的方法有很多种,可以自己重新添加,也可以修改原来的内核添加代码实现。由于自己尝试多次并未实际解决版本带来的文件和改的内容不同无法实现的问题,在同学的帮助下,采用Ubuntu14.04版本,内核Linux-3.16,重新自己添加系统调用文件,最后经过多次修改和调试,终于成功调用了自己添加的系统函数。虽然前前后后自己花了一周多时间,可能比别人花的时间长很多,但通过这些问题学到的也更加深刻,对Linux内核的理解也有了进一步的认识。

      《操作系统--linux系统调用》由会员101****457分享,可在线阅读,更多相关《操作系统--linux系统调用》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.