操作系统--linux系统调用.doc

操作系统--linux系统调用.doc

ID:53253439

大小:2.62 MB

页数:6页

时间:2020-04-02

操作系统--linux系统调用.doc_第1页
操作系统--linux系统调用.doc_第2页
操作系统--linux系统调用.doc_第3页
操作系统--linux系统调用.doc_第4页
操作系统--linux系统调用.doc_第5页
资源描述:

《操作系统--linux系统调用.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、西安电子科技大学《操作系统原理》实验报告实验报告一、理论分析(分值:20%)【从操作系统原理(理论)的角度阐述系统功能调用的过程】1、函数声明中都有asmlinkage限定词,用于通知编译器仅从栈中提取该函数的参数。2、系统调用getXXX()在内核中被定义为sys_getXXX()。西安电子科技大学《操作系统原理》实验报告系统调用号:在linux中,每个系统调用都赋予一个系统调用号,通过这个独一无二的号就可以关联系统调用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就被用来指明到底要执行哪个系统调用;进程不会提及系统调用的名称。系统

2、调用号一旦分配就不能再有任何变更(否则编译好的应用程序就会崩溃),如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用。Linux有一个"未使用"系统调用sys_ni_syscall(),它除了返回-ENOSYS外不做任何其他工作,这个错误号就是专门针对无效的系统调用而设的。 内核记录了系统调用表中所有已注册过的系统调用的列表,存储在sys_call_table中。它与体系结构有关,一般在entry.s中定义。这个表中为每一个有效的系统调用指定了唯一的系统调用号。1、Makefile控制着整个内核的编译,在每个子目录下调用编译.c文件

3、,生成.o文件,生成新的内核。会把新编译的sys_hello内核加入到系统调用中。系统调用表geditsyscall_32.tbl中加入354i386hellosys_hello,当系统调用时可以在调用表中找到系统调用的号。2、在syscalls.h中添加定义的内容的引用函数。3、编译执行结果。二、设计与实现(分值:30%)【阐述在Linux中添加系统功能调用的方法】1、在内核目录下创建hello文件夹mkdirhello2、进入hello文件夹cdhello3、创建hello.c的文件vimhello.c4、加入代码#include

4、x/kernel.h>asmlinkagelongsys_hello(void){printk(“Helloworld”);return0;}5、在hello文件夹下添加Makefile文件vimMakefile西安电子科技大学《操作系统原理》实验报告在文件里添加obj-y:=hello.o1、返回内核的根目录中,打开Makefile文件,在842行添加代码vimMakefile将core-y+=kernel/mm/fs/ipc/security/crypto/block/改为core-y+=kernel/mm/fs/ipc/securit

5、y/crypto/block/hello/2、打开系统调用表cdarch/x86/syscallsVimsyscall_32.tbl在文件最后一行添加354i386hellosys_hello3、在调用函数名的文件中加入添加的函数cdinclude/linux/Vimsyscalls.hasmlinkagelongsys_hello(void);4、进行编译cd/usr/src/linux-3.16/sudomakemenuconfigsudomakeoldconfigmake-j45、安装编译好的内核sudomakemodules_insta

6、llinstallshutdown-rnow重启后选择新的内核载入测试uname-r6、编写测试文件hello.c西安电子科技大学《操作系统原理》实验报告#include#include#include#includeintmain(){printf("%ld",syscall(354));return0;}1、编译测试gcc-ohello.chello./hello.outdmesg三、实验结果(分值:10%)【对实验结果进行简要分析和说明

7、】测试文件调用系统调用号354,并且将返回结果0输出,dmesg可以将开机显示结果输出查看。四、心得与收获(分值:40%)【本部分内容应至少包括如下部分:(1)从代码层面阐述Linux系统调用的整个过程;(2)应用程序调用Linux系统功能的方式以及你采用的方式。以及任何你想表达的内容】西安电子科技大学《操作系统原理》实验报告1、在系统启动的时候start_kernel会调用trap_init来初始化异常向量表。设置0x80号软中断的服务程序为system_call,system_call是所有系统调用的总入口。当进程执行到用户程序的系统调用命

8、令时,实际上执行了由宏命令_syscallN()展开的函数。系统调用的参数由各通用寄存器传递,比如通过eax寄存器传递系统调用号和系统调用返回值,通过

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。