能想要编写一些新的用户级程序来帮助测试您对`getfilename`的实现。该文档是关于CS 537项目2的说明,主要内容是在xv6操作系统中创建一个新的系统调用`getfilename`,并创建一个新的用户级程序来调用该系统调用。此外,还介绍了项目的截止日期、提交方式、测试、协作等相关信息。 代写
CS 537项目2 – 创建一个xv6系统调用 管理信息 截止日期:2月6日,晚上11:59 项目最多可延迟3天提交,但每延迟一天将扣除10个百分点。 延迟天数: 如果您需要在项目上额外的时间,每个人将有2个个人项目的延迟天数和3个小组项目的延迟天数(本学期总共5个延迟天数)。在截止日期后,我们将为按时评分制作提交目录的副本。 要使用延迟天数或延迟提交作业,您将提交文件以及一个额外的文件,该文件仅包含一个数字,表示您的作业延迟的天数(例如1、2、3)。在每连续的一天,我们将制作任何包含这些slipdays.txt文件的目录的副本。在您提交最终提交时,此文件必须存在,否则我们将不知道对您的代码进行评分。 我们将在项目之间跟踪您的延迟天数和延迟提交,并在您用完延迟天数后开始扣除百分比。 在用完延迟天数后,如果延迟1天提交,您最多可以获得90%的分数;延迟2天提交,最多可以获得80%的分数;延迟3天提交,最多可以获得70%的分数,但对于任何单个作业,如果没有例外情况,我们在第三天后将不接受提交。这意味着如果您在单个作业上使用了两个个人延迟天数,您只能再额外提交一天,总共延迟3天,扣除10%的分数。 任何例外情况都需要向教师请求。 示例slipdays.txt 1 在~cs537 – 1/tests/P2提供了一些测试。该目录中有一个README.md文件,其中包含运行测试的说明。测试部分完成,鼓励您创建更多测试。 问题:我们将使用Piazza回答所有问题。 协作:作业必须自己完成。复制(他人的)代码被视为作弊。阅读此内容以获取更多关于哪些是可以的,哪些是不可以的信息。 请不要这样做,帮助我们大家度过一个愉快的学期。 这个项目将在Linux实验室机器上完成,这样您可以在一个典型的基于UNIX的平台(Linux)上学习更多关于C编程的知识。您的解决方案将在这些机器上进行测试。 提交方式:请参阅下面的详细提交说明。 目标 理解xv6操作系统,一个简单的UNIX操作系统。 学习构建和定制xv6操作系统 理解系统调用一般是如何工作的 理解如何实现一个新的系统调用 能够在更大的代码库中导航并找到进行更改所需的信息。 项目简介 创建一个新的系统调用 在这个项目中,您将向xv6操作系统添加一个新的系统调用。更具体地说,您必须实现一个名为getfilename的系统调用,其签名如下: int getfilename(int fd, char* buf, int n) 系统使用一个称为文件描述符的数字来跟踪进程的打开文件。open()系统调用向进程返回一个文件描述符。操作打开文件的系统调用,例如read()和write(),将文件描述符作为其参数之一。在xv6内部,对应用程序隐藏,在进程表中有一个数组,其中文件描述符是索引,数据是打开文件的指针。 您正在添加的新系统调用将一个整数文件描述符、一个字符指针和一个整数n作为其参数,n指定传递的缓冲区的长度。然后,它必须将与该文件描述符关联的文件的名称复制到第二个参数指向的字符缓冲区中。例如,假设一个程序打开一个名为helloworld.txt的文件,并且open()返回3作为分配给该文件的文件描述符。然后,程序使用3作为文件描述符(第一个参数)和一个名为message的字符缓冲区调用getfilename()。当getfilename()返回时,名称helloworld.txt应该被复制到message缓冲区中。此缓冲区的最大长度应为256,因为我们不会测试超过该长度的文件名。 – 如果文件描述符无效,或者没有与该文件描述符关联的打开文件,则getfilename()不需要将任何内容复制到字符指针中,只需返回-1。您可以使用函数argfd来验证这一点。 – 如果用户程序使用空指针作为字符缓冲区调用系统调用,则应返回-1表示失败。 – 如果系统调用成功,返回值应为0表示成功。 – 您可以假设我们将始终传递长度为256的字符缓冲区,并在测试您的系统调用时将第三个参数设置为256。 请注意,向系统调用传递参数和从系统调用返回值有点棘手,并且不遵循我们期望在用户空间中看到的正常参数和返回语义。一个好的起点是查看如何实现chdir系统调用,以及如何处理其参数。请记住,本作业的目标之一是能够在大型代码库中导航并找到您可以基于其工作的现有代码的示例。作为一个小提示,您可能想要在struct file(在file.h中)中创建一个缓冲区,该缓冲区将跟踪使用open系统调用打开的文件的名称。 创建一个新的用户级程序 您还将创建一个新的用户级程序,也称为getfilename,它将调用您的系统调用并以以下格式打印其输出XV6_TEST_OUTPUT Open filename: …