程序代写

能想要编写一些新的用户级程序来帮助测试您对`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: …

能想要编写一些新的用户级程序来帮助测试您对`getfilename`的实现。该文档是关于CS 537项目2的说明,主要内容是在xv6操作系统中创建一个新的系统调用`getfilename`,并创建一个新的用户级程序来调用该系统调用。此外,还介绍了项目的截止日期、提交方式、测试、协作等相关信息。 代写 Read More »

CS537操作系统项目0 代写

该文档是关于CS537操作系统项目0的介绍,旨在帮助学生复习C语言编码、熟悉威斯康星大学麦迪逊分校计算机科学系实验室机器的使用,包括远程连接实验室机器、使用终端基本命令、理解AFS上的文件目录结构、使用micro编辑、gcc编译和gdb调试、用C语言编写代码、运行测试以及提交解决方案等内容。文档还介绍了项目结构、远程连接实验室机器的方法、基本终端命令和文件目录结构、克隆和启动项目的步骤、使用micro创建和编辑代码、C语言编码相关知识、运行测试以及提交项目解决方案的注意事项等。 这是一个小小的“Hello World”项目,旨在刷新你对C语言编码的记忆,并教你或提醒你如何使用威斯康星大学麦迪逊分校计算机科学系的实验室机器。具体来说,你应该能够做到以下几点: 远程连接到该系的一台Linux实验室机器 在终端中使用基本命令 理解AFS上的文件目录结构(特别是针对CS537) 使用micro进行编辑,使用gcc进行编译,使用gdb进行调试 用C语言编写代码 运行测试(特别是针对CS537) 提交你的解决方案(特别是针对CS537) 项目结构 本学期的项目将通过DoIT的GitLab存储库提供给你。课程项目的URL是https://git.doit.wisc.edu/cdis/cs/courses/cs537/spring24/public。说明和任何起始代码都将在那里找到。 你需要克隆项目的存储库,按照说明完成你的解决方案,在CS实验室机器上运行任何提供的测试,以确保你的解决方案是正确的,并将你的解决方案提交到handin目录。这个项目0旨在确保你能够完成所有这些事情。 远程连接到CS实验室机器 你的项目解决方案将在CS系的Linux实验室机器上进行测试。因此,你可能想要克隆存储库并在那里完成所有工作。你可以亲自去labs或远程连接到这些机器。本文档将介绍如何远程连接到这些机器。 我建议使用SSH进行远程连接。PuTTY是Windows上流行的SSH客户端。对于Mac,你可以打开一个终端窗口并输入ssh命令进行连接。 要连接到一台Linux实验室机器,你可以输入以下命令: ssh <用户名>@best – linux.cs.wisc.edu 其中<用户名>是你的用户名。使用计算机名best – linux.cs.wisc.edu将连接到最不繁忙的Linux实验室计算机。你可能会被提示输入密码,并会收到Duo的双重身份验证推送。完成身份验证后,你将被放置在一个命令提示符下,该提示符应显示你的用户名、你连接的计算机的名称以及你当前所在的目录。例如: oliphant@royal – 26:~$ 这表明用户名为oliphant,在计算机royal – 26上,当前位于目录~(你的主目录)。 基本终端命令和CS系的文件目录结构 每个用户都有自己的主目录,你可以在其中创建文件和目录来完成你的工作。你的主目录别名是~。要查看你的主目录的实际位置,你可以输入命令pwd来查看当前工作目录。在我的例子中,它显示: oliphant@royal – 26:~$ pwd /home/oliphant 你应该熟悉几个终端命令,包括: pwd – 当前工作目录 ls – 列表 cd – 更改目录 mkdir – 创建目录 mv – 移动 cp – …

CS537操作系统项目0 代写 Read More »

CS 537项目3——Shell 辅导

该文档是关于CS 537项目3——Shell的说明,主要内容包括项目的截止日期、迟交政策、测试相关信息、协作要求、在Linux实验室机器上完成项目、提交方式(包括代码文件和README.md文件)以及对使用在线资源的要求等。此外,还详细介绍了该项目的具体内容,即构建一个简单的Unix Shell,包括基本Shell的功能、管道、环境变量和Shell变量、路径、历史记录以及内置命令等方面的规范和要求。 管理信息 截止日期:2月20日,晚上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/P3中提供。该目录中有一个README.md文件,其中包含运行测试的说明。测试部分完成,您的项目可能会根据其他测试进行评分,但是这些测试旨在尽可能完整地涵盖我们希望您处理的解析和边界情况。 问题:我们将使用Piazza回答所有问题。 协作:作业必须由您自己完成。复制代码(来自他人)被视为作弊。阅读此内容以获取更多关于哪些是可以的,哪些是不可以的信息。 请帮助我们所有人度过一个愉快的学期,不要这样做。 这个项目将在Linux实验室机器上完成, 因此您可以更多地了解在典型的基于UNIX的平台(Linux)上用C编程。您的解决方案将在这些机器上进行测试。 提交方式:将wsh.c和您可能编写的任何头文件复制到您的提交目录,~cs537 – 1/handin/<登录名>/P3/。请不要编写多个.c文件。您还应该创建一个README.md文件来描述您的实现。该文件应包括您的姓名、您的cs登录名、您的wisc ID和电子邮件,以及您的实现状态。如果一切正常,就这么说。如果有您知道不起作用的东西,请告诉我们。 如果适用,一个名为resources.txt的描述使用的在线资源的文档。欢迎您使用在线资源来帮助您完成作业。我们不建议您使用大型语言模型,如ChatGPT。对于本课程,我们已经看到这些工具给出的示例或解释接近但不完全正确,如果学生本身不知道正确答案,会让他们更加困惑。请注意,当您向教学人员寻求帮助时,我们不会协助您使用这些LLM,并且我们希望您能够向教学人员介绍您的代码和逻辑。在线资源(例如堆栈溢出)和生成工具正在改变包括计算机科学和教育在内的许多行业。但是,如果您使用在线资源,您需要提交一份文档,描述您对这些资源的使用。在该文档中指出您的解决方案中有多少是完全由您自己完成的,有多少是使用这些工具完成的。请具体说明,指出使用的资源以及您与这些资源的交互方式。不给予外部资源信用是一种剽窃形式。在您的代码中使用该资源的地方对其进行注释是一个好习惯。您不会因为使用LLM或阅读帖子而受到惩罚,但您不应该在在线论坛上发布关于本课程项目的帖子。您的大部分代码也应该由您自己努力编写,并且您应该能够解释您提交的所有代码。 Unix Shell 在这个项目中,您将构建一个简单的Unix Shell。Shell是命令行界面的核心,因此是Unix/C编程环境的核心。熟练掌握Shell的使用对于在这个领域变得精通是必要的;了解Shell本身是如何构建的是这个项目的重点。 这个作业有三个具体目标: 进一步熟悉Linux编程环境。 学习进程是如何创建、销毁和管理的。 接触Shell中必要的功能。 概述 在这个作业中,您将实现一个命令行解释器(CLI),或者更常见的叫法,一个Shell。Shell应该以这种基本方式运行:当您输入一个命令(响应其提示)时,Shell创建一个子进程来执行您输入的命令,然后在完成后等待更多用户输入时打印一个新的提示。这将重复进行,直到用户输入exit。您的可执行文件的名称应该是wsh。 Shell可以在没有参数或单个参数的情况下调用;其他任何情况都是错误的。这是没有参数的方式: prompt>./wsh wsh> 此时,wsh正在运行,并准备接受命令。尽情输入吧! 上面的模式称为交互模式,允许用户直接输入命令。Shell还支持批处理模式,它从批处理文件中读取输入并从其中执行命令。以下是如何使用名为script.wsh的批处理文件运行Shell: prompt>./wsh script.wsh 批处理模式和交互模式的一个区别是:在交互模式中,会打印一个提示(wsh>)。在批处理模式中,不应打印提示。 您应该构建您的Shell,使其为每个新命令创建一个进程(内置命令除外,如下所述)。您的基本Shell应该能够解析命令并运行与该命令对应的程序。例如,如果用户输入ls – la / tmp,您的Shell应该运行程序/ bin / ls,并带有给定的参数- la和/ tmp(Shell如何知道运行/ …

CS 537项目3——Shell 辅导 Read More »

CS 537项目5——调度器 代写

该文档是关于CS 537项目5——调度器的说明,介绍了项目的截止日期、提交方式、测试相关信息、协作要求等管理事项。项目基于扩展了多线程功能的xv6操作系统进行,目标是解决优先级反转问题,具体包括实现用户空间的睡眠锁、添加调整当前程序优先级的nice系统调用以及修改xv6调度器以考虑进程的优先级和优先级继承。文档还详细说明了新系统调用clone()的功能和工作原理,以及用户空间睡眠锁、nice系统调用和优先级继承在调度器中的实现细节和测试方法。 管理事项 截止日期:4月2日,晚上11:59。 项目最多可延迟3天提交,但每延迟一天将被扣10个百分点。 延迟天数: 如果您需要在项目上额外的时间,每个人将有2天的个人项目延迟天数和3天的小组项目延迟天数(本学期总共5天延迟天数)。在截止日期后,我们将为按时评分复制提交目录的副本。 要使用延迟天数,您需要在常规项目提交目录中提交一个额外的文件slipdays.txt。该文件应该只包含一件事,即一个数字,表示您想要使用的延迟天数(即1或2)。每天我们都会复制任何包含这些slipdays.txt文件的目录的副本。 在使用完延迟天数后,如果延迟1天提交,您最多可以获得90%的分数;延迟2天,最多可以获得80%的分数;延迟3天,最多可以获得70%的分数。3天后,我们将不再接受提交。 任何例外情况都需要向教师请求。 slipdays.txt的示例: 1 在~cs537 – 1/tests/P5提供了一些测试。该目录中有一个README.md文件,其中包含运行测试的说明。测试部分完成,鼓励您创建更多测试。 问题:我们将使用Piazza回答所有问题。 协作:作业可以自己完成,也可以与一个伙伴一起完成。复制代码(从他人处)被视为作弊。阅读此内容以了解更多关于什么是可以的,什么是不可以的信息。请不要这样做,帮助我们大家度过一个愉快的学期。 这个项目将在Linux实验室机器上完成,因此您可以在典型的基于UNIX的平台(Linux)上学习更多关于C编程的知识。您的解决方案将在这些机器上进行测试。 提交方式: 将所有xv6文件(不仅仅是您更改的文件)复制到~cs537 – 1/handin/<cslogin>/P5/ – 在运行make clean之后。目录结构应如下所示: handin/<cslogin>/P5/ |—- README.md |—- resources.txt |—- xv6 – public | —- 包含您修改的所有xv6内容 小组项目提交:每个小组只需要提交一次。要提交,一个人应该将代码放在他们的提交目录中(另一个人应该为空)。 注意:对于这个项目,提供了一个具有多线程功能的修改后的xv6。请不要在原始的xv6上工作。 介绍 在这个实验中,我们将深入研究xv6(一个简单的类Unix教学操作系统,已扩展为支持线程)上下文中的优先级反转的复杂性。您的任务是实现关键功能,以探索和减轻优先级反转的影响。这个实验包括创建一个用于用户空间的睡眠锁,引入一个nice系统调用来调整调用进程的nice值(从而间接调整其优先级),并修改xv6调度器,以根据其有效优先级(考虑其nice值和优先级反转的动态)来优先处理进程。通过这些练习,您将获得高级操作系统概念的实践经验,增强xv6调度器以更熟练地处理优先级反转并提高整体系统性能和公平性。 目标 理解优先级反转和优先级继承。 理解xv6中sleeplock的实现。 理解xv6中的上下文切换。 实现修改进程状态的系统调用。 背景:优先级反转和优先级继承 优先级反转发生在高优先级任务被迫等待低优先级任务释放共享资源时,导致执行顺序与基于优先级的计划相反的情况。 想象一个在多任务操作系统中的场景,一个低优先级任务,任务L,持有一个共享资源的锁。一个高优先级任务,任务H,最初不需要锁定的资源,最终尝试访问它并被阻塞,因为任务L持有锁。同时,不需要共享资源的中优先级任务继续运行,有效地进一步延迟任务H。这个场景说明了一种违反直觉的现象,即低优先级任务间接抢占了高优先级任务,导致任务管理效率低下和潜在的系统减速。 优先级继承是一种旨在减轻优先级反转影响的策略解决方案。通过此协议,当高优先级任务等待低优先级任务锁定的资源时,系统会暂时将低优先级任务的优先级提升到最高优先级等待任务的优先级。这种调整有助于确保低优先级任务能够更快地完成执行并释放资源,从而减少高优先级任务的等待时间。 一旦低优先级任务释放共享资源,其优先级将恢复到原始级别,高优先级任务可以继续执行,从而保留系统调度策略的整体完整性和效率。 项目细节 在这个项目中,您的任务是通过引入机制来减轻优先级反转来增强xv6操作系统。具体来说,您将: 1. 实现一个可以在用户空间中使用的睡眠锁。 …

CS 537项目5——调度器 代写 Read More »

CS537 P1 – Unix实用程序 – MADCounter 辅导

该文档是关于CS537课程项目1的说明,主要介绍了一个名为MADCounter的程序,它用于统计文件中字符、单词和行的相关信息。文档包括项目截止日期、提交方式、注意事项等信息,还详细说明了MADCounter的功能、运行方式、错误处理等内容,并提供了一些提示和链接。 ## 更新 我们将不会测试Ascii字符错误。您仍然应该只跟踪0 – 127的ASCII字符。 管理事项 截止日期:1月30日晚上11:59。 项目可以延迟最多3天提交,但每延迟一天将扣除10个百分点。 延期天数: 如果您需要在项目上额外的时间,每个人将有2天的个人项目延期天数和3天的小组项目延期天数(本学期总共5天延期天数)。在截止日期后,我们将为按时评分制作提交目录的副本。 要使用延期天数或延迟提交作业,您将提交文件时附带一个额外的文件,该文件仅包含一个数字,表示您的作业延迟的天数(例如1、2、3)。每连续一天,我们将制作任何包含这些slipdays.txt文件的目录的副本。在提交最终提交时,此文件必须存在,否则我们将不知道对您的代码进行评分。 我们将跟踪您在项目之间的延期天数和延迟提交情况,并在您用完延期天数后开始扣除百分比。 在用完延期天数后,如果延迟1天提交,您最多可以获得90%的分数,如果延迟2天提交,您可以获得80%的分数,如果延迟3天提交,您可以获得70%的分数,但对于任何单个作业,如果没有例外情况,我们不会在第三天后接受提交。这意味着如果您在单个作业上使用了两个个人延期天数,您只能再额外延迟一天提交,总共延迟3天,扣除10%。 任何例外情况都需要向教师请求。 示例slipdays.txt 1 问题:我们将使用Piazza回答所有问题。 开始前:阅读此实验教程;它包含了在C环境中编程的一些有用提示,包括使用makefiles、使用gdb调试器以及使用linux手册和信息系统。 协作:作业必须由您自己完成。复制代码(来自他人)被视为作弊。阅读此以获取更多关于什么是可以的和什么是不可以的信息。请不要这样做,帮助我们大家度过一个愉快的学期。 这个项目将在Linux实验室机器上完成,因此您可以在典型的基于UNIX的平台(Linux)上学习更多关于C编程的知识。您的解决方案将在这些机器上进行测试。 一些测试将在~cs537 – 1/tests/P1提供。通过在任何实验室机器上执行命令cat ~cs537 – 1/tests/P1/README,了解更多关于测试的信息,包括如何运行它们。请注意,这些测试用例并不完整,我们鼓励您自己创建更多的测试用例。 提交:将您的文件复制到~cs537 – 1/handin/login/P1,其中login是您的CS登录名。 Unix实用程序 在这个项目中,您将构建一个简单的用户级程序,很像各种UNIX命令行实用程序(例如man、zip、grep等)。您将实现一个工具,该工具将报告有关文件文本内容的一些各种统计信息(例如唯一字符的数量、字符的频率、单词的频率等)。我们将这个程序称为MADCounter.c(即Madison Counter)。 目标: 重新熟悉C编程语言,特别是: 处理字符串 读写文件 使用结构体 简单的动态内存分配 重新熟悉UNIX的shell/终端/命令行 虽然项目侧重于编写简单的C程序,但您可以从上面看到,即使这也需要一堆其他先前的知识,包括对shell是什么以及如何在一些基于UNIX的系统(例如Linux或macOS)上使用命令行的基本了解,当然还有对C编程的基本理解。如果您不已经具备这些技能,那么这里不是开始的正确地方。 总结要提交的内容: 一个.c文件:MADCounter.c。 每个文件在使用-Wall和-Werror标志编译时应成功编译。 它们应该(希望)通过我们提供的测试。 包括一个单独的README.md,描述实现。该文件应包括您的姓名、您的cs登录名、您的wisc ID和电子邮件,以及您的实现状态。如果一切正常,就说正常。如果有您知道不起作用的东西,请告诉我。 如果适用,一个名为resources.txt的文件,描述使用的在线资源。欢迎您使用在线资源来帮助您完成作业。我们不建议您使用大型语言模型,如ChatGPT。对于本课程,我们已经看到这些工具给出了接近但不完全正确的示例或解释,这会让学生更加困惑,如果他们不知道正确答案是什么。请注意,当您向教学人员寻求帮助时,我们不会协助使用这些LLM,我们希望您能够向教学人员介绍您的代码和逻辑。在线资源(例如stack overflow)和生成工具正在改变包括计算机科学和教育在内的许多行业。但是,如果您使用在线资源,您需要提交一份文件,描述您对这些资源的使用。在该文件中表明您的解决方案中有多少是严格由您自己完成的,有多少是使用这些工具完成的。具体说明使用的资源和您与这些资源的交互方式。不给予外部资源信用是一种剽窃行为。在您的代码中使用该资源的地方对资源进行注释是一个好习惯。您不会因为使用LLM或阅读帖子而受到惩罚,但您不应该在在线论坛上发布关于本课程项目的帖子。您的大部分代码也应该由您自己努力编写,并且您应该能够解释您提交的所有代码。 MADCounter 程序MADCounter.c是一个命令行文本工具,它从输入文件中收集有关字符、单词和文件行的统计信息,并将这些统计信息打印到命令行或输出文件中。您的工具还应该接受一个批处理文件,其中包含一系列统计请求,每个请求对不同的文本文件进行操作。 单次运行 让我们首先讨论这个实用程序的单次运行,从一个示例开始。 $ __welcome.txt__包含: …

CS537 P1 – Unix实用程序 – MADCounter 辅导 Read More »