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 – 复制

  • cat – 连接文件并在标准输出上打印

  • grep – 打印文件中匹配模式的行 如果你需要温习一下Linux命令行,我建议阅读在线短篇书籍The Linux Command Line。 除了你自己的主目录外,课程还有一个主目录。课程的主目录别名是~cs537 - 1(请注意,即使你注册的是第2部分,也是如此)。你需要熟悉这个目录,因为你将在这个目录中提交项目的解决方案,通过这个目录接收反馈,并在这个目录中找到并运行项目的测试。你可以使用其别名更改到该目录并列出内容:

oliphant@royal - 26:~$ cd ~cs537 - 1
oliphant@royal - 26:/home/cs537 - 1$ ls
handin private project - archive project - snapshots public tests xv6

你在handin下有一个子目录,你将在其中提交项目的解决方案,我们也将在其中为你提供反馈。tests目录包含你可以对你的项目解决方案运行的测试,以查看它是否正确。你还将使用xv6目录中的起始代码来完成一些项目。其他目录你无权访问。

克隆和启动你的项目

确保你可以登录到威斯康星大学麦迪逊分校DoIT的GitLab在线存储库https://git.doit.wisc.edu/。使用UW – Madison NetID按钮使用你的威斯康星大学麦迪逊分校凭据登录。在从命令行克隆存储库之前,你需要在网络上登录一次。 在终端窗口中,更改回你的主目录,为项目0创建一个子目录,并将存储库克隆到这个子目录中:

oliphant@royal - 26:/home/cs537 - 1$ cd ~
oliphant@royal - 26:~$ mkdir project0
oliphant@royal - 26:~$ cd project0
oliphant@royal - 26:~$ git clone https://git.doit.wisc.edu/cdis/cs/courses/cs537/spring24/public/p0

你将被提示输入你的GitLab用户名和密码,然后在线目录将被复制到你的本地目录。这是一个公共存储库,你将无法将你的更改推回到存储库。但是,你可以在本地添加和提交你的更改。如果你不熟悉git和存储库,我建议阅读在线Pro Git book的第1章和第2章。

使用micro创建和编辑代码

如果你计划远程工作,你将需要一个简单的编辑器在终端窗口中工作。该部门安装了micro,这是一个直观的基于终端的文本编辑器。它允许你同时打开多个窗口,使用标准命令快捷键(例如ctrl – cctrl – vctrl – f等)以及鼠标与编辑器进行交互。你可以通过在运行micro时输入alt – g来阅读有关基本快捷键绑定的更多信息,或者这里获取更完整的列表。 更改到p0存储库目录并创建和编辑文件“hw.c”:

oliphant@royal - 26:~/project0$ cd p0/
oliphant@royal - 26:~/project0/p0$ micro hw.c

这将打开micro,编辑文件hw.c。输入一个简单的“Hello World”程序的C代码: Hello World Program 保存代码(ctrl – s)并在micro中打开一个终端窗口来编译和运行你的程序。使用ctrl – e打开micro中的命令栏,输入命令“hsplit”以水平分割窗口。然后再次输入ctrl – e并输入命令“term”以在该窗格中启动一个终端。现在,你可以通过在两个窗格之间单击或按ctrl – w来交替编辑你的代码和编译并执行你的程序。 在终端窗格中,输入编译和执行你的程序的命令:

oliphant@royal - 26:~/project0/p0$ gcc hw.c
oliphant@royal - 26:~/project0/p0$./a.out
hello, world

C语言编码

你应该熟悉C语言的基础知识,包括使用gcc编译、使用gdb调试、创建和使用Makefile,以及使用man程序探索Linux中的C库和系统调用文档。如果你需要复习这些内容,教科书有一个Lab Tutorial来帮助你加快速度。

运行测试

与每个项目一起,将发布一系列测试(通常比初始项目发布的时间稍晚),你可以运行这些测试来验证你的解决方案是否正常工作。这些测试并不意味着是详尽无遗的。在你提交最终解决方案时,可能会运行超出这些测试的其他测试。随意打开并探索这些测试文件,以了解它们正在测试什么以及它们如何进行测试。它们是用shell脚本和python代码的组合编写的。 每个项目的测试脚本都有点不同。项目的测试目录中应该有一个README文件,解释如何运行测试。一般来说,你将希望在实验室机器上的项目目录中的终端窗口中,并从那里执行测试脚本。 例如,要测试你的hello world p0项目,请确保你在你的hw.c文件所在的目录中,并输入以下命令:

oliphant@royal - 26:~/project0/p0$ ~cs537 - 1/tests/P0/test - p0.csh
A.OUT...
TEST 0 - 干净构建(程序应该编译没有错误或警告)
RESULT 通过
TEST 1 - 查看输出是否为“hello world\n”
RESULT 通过
TEST 得分:1

提交你的项目解决方案

有一个目录~cs537 - 1/handin/<用户名>,其中<用户名>是你的用户名。在这个目录下,有本学期每个项目的子目录,你必须在其中提交你的解决方案。至关重要的是,这些项目目录内的文件组织必须完全正确,以便我们的自动评分脚本能够正常运行。确保你阅读并遵循每个项目关于项目提交目录结构的说明。 对于这个p0项目,你的p0提交目录中应该只有一个文件,hw.c。 在截止日期/时间,一个脚本将复制项目提交目录。如果你在那个时候没有将文件放在这个目录中,那么你将无法通过该项目。请记住,你有“延迟天数”来延迟提交项目。在截止日期/时间后的每24小时,目录将再次被复制,直到延迟期结束。如果目录在截止日期后发生了变化,那么最新版本将被测试,并根据延迟政策扣除分数。

项目结果

在延迟期结束后,你的代码将被测试,结果将被放回你的提交目录,让你知道你在项目中的表现。你项目的成绩将上传到Canvas。如果你对评分有任何问题,请按照请求重新评分你的项目的说明进行操作。