Linux0.11系统调用实验:iam()与whoami()

需积分: 0 0 下载量 36 浏览量 更新于2024-08-05 收藏 274KB PDF 举报
"该实验旨在让学习者了解系统调用的工作原理,通过在Linux0.11上添加iam()和whoami()两个自定义系统调用来实现字符的传递和拷贝功能。实验要求编写测试程序进行验证,并在实验报告中探讨系统调用参数的数量限制以及添加新系统调用的步骤。" 在Linux操作系统中,系统调用是用户空间与内核空间交互的主要途径,用于执行只有内核才能完成的任务。在描述中提到的实验中,学生需要理解Linux0.11的系统调用接口,并添加两个新的系统调用。 iam()系统调用接收一个字符串参数,将其拷贝到内核空间并返回拷贝的字符数。如果字符串长度超过23个字符,系统调用返回-1并设置errno为EINVAL,表示无效参数。这个系统调用的实现位于kernal/who.c文件中。 whoami()系统调用则负责将iam()保存的字符串拷贝回用户空间,同时检查是否越界。如果用户提供的缓冲区大小不足,也会返回-1并设置errno为EINVAL。同样,这个系统调用也在kernal/who.c中实现。 测试程序iam.c和whoami.c将用于验证这两个新系统调用的功能。iam.c会调用iam()并将一个字符串传入,whoami.c则调用whoami()将内核中的字符串读回用户空间。 在实验报告中,学生需要思考Linux0.11当前系统调用机制对参数数量的限制,以及可能的扩展方法。通常,Linux系统调用通过寄存器传递参数,数量有限,但可以通过增加系统调用接口的复杂性或者利用内存映射等技术来扩展。 添加新系统调用foo()的一般步骤包括: 1. 定义系统调用号:每个系统调用都有一个唯一的编号,需要在syscalls.h中添加新的编号。 2. 实现系统调用函数:在内核相应的源代码文件中编写foo()的实现。 3. 更新系统调用表:更新sys_call_table数组,将新系统调用的入口地址添加进去。 4. 编译和链接内核:重新编译并链接整个内核。 5. 验证和测试:在操作系统中运行测试程序,确保系统调用工作正常。 实验的评分标准基于两个部分:一是测试程序的运行结果,显示内核和应用程序的得分;二是实验报告的质量,包括对系统调用参数限制的理解和添加新系统调用的步骤描述。 通过这个实验,学生不仅可以掌握系统调用的基本概念,还能深入了解Linux内核的工作原理,增强实际操作和问题解决的能力。