CS537 P6管理信息 代写
该文档是关于CS537 P6项目的说明,包括截止日期、迟交惩罚、测试、协作、资源使用等规定。项目要求在Linux实验室机器上完成一个并发的键值(KV)存储服务器,实现线程安全的KV存储、Ring Buffer和通过共享内存区域的进程间通信,并理解和优化同步机制以提高性能。文档还提供了项目的详细信息、起始代码和实现细节,以及最佳实践的建议。 截止日期:2024年4月16日晚上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/P6中提供。该目录中有一个README.md文件,其中包含运行测试的说明。测试部分完成,您的项目可能会根据其他测试进行评分。 问题:我们将使用Piazza回答所有问题。 协作:作业可以自己完成或与一个伙伴一起完成。从其他任何人复制代码都被视为作弊。阅读此内容以获取更多关于什么是可以的和什么是不可以的信息。请不要这样做,以帮助我们大家度过一个愉快的学期。 这个项目将在Linux实验室机器上完成,这样您可以更多地了解在典型的基于UNIX的平台(Linux)上用C编程。您的解决方案将在这些机器上进行测试。 如果适用,一个名为resources.txt的描述在线资源使用情况的文档应包含在您的提交中。欢迎您使用在线资源来帮助您完成作业。我们不建议您使用大型语言模型,如ChatGPT。对于本课程,我们已经看到这些工具给出的示例或解释接近但不完全正确,如果学生不知道正确答案,会让他们更加困惑。请注意,当您向教学人员寻求帮助时,我们不会协助您使用这些LLM,并且我们希望您能够向教学人员介绍您的代码和逻辑。在线资源(例如stack overflow)和生成工具正在改变包括计算机科学和教育在内的许多行业。但是,如果您使用在线资源,您需要提交一份文档,描述您对这些资源的使用情况。在该文档中表明您的解决方案中有多少是完全由您自己完成的,有多少是利用这些工具完成的。请具体说明,指出使用的资源以及您与这些资源的交互方式。不给予外部资源信用是一种剽窃形式。在您的代码中对使用资源的地方进行注释是一种很好的做法。您不会因为使用LLM或阅读帖子而受到惩罚,但您不应该在在线论坛上发布关于本课程项目的帖子。您的大部分代码也应该是您自己努力编写的,并且您应该能够解释您提交的所有代码。 提交方式: 复制文件common.h、client.c、ring_buffer.h、ring_buffer.c、kv_store.c和Makefile(如果使用了kv_store.h也包括在内)。您的代码应该正确编译并运行。 小组项目提交:每个小组只需要提交一次。要提交,一个人应该将代码放在他们的提交目录中(另一个人应该为空)。 键值服务器 在这个项目中,您将在客户端 – 服务器模型中实现一个并发的键值(KV)存储作为服务器。有一个服务器进程和一个客户端进程;它们都是多线程进程。它们使用共享内存区域进行进程间通信。您需要在共享内存中实现一个并发的环形缓冲区和一个共享的请求状态板来处理请求。 目标 实现一个线程安全的并发KV存储。 实现一个线程安全的环形缓冲区。 理解通过共享内存区域的进程间通信。 理解并优化同步机制以提高性能。 项目细节 上图说明了这个项目的客户端 – 服务器模型。 服务器和客户端都是多线程进程。它们通过文件支持的共享内存映射进行通信,该映射分为两个区域:环形缓冲区和请求状态板。 – 客户端: 客户端通过环形缓冲区向服务器提交PUT/GET请求。 – 服务器: 服务器包含一个KV存储,用于处理这些请求。它从环形缓冲区读取客户端请求,处理它们;完成请求后,在请求状态板的预先指定窗口中更新其完成状态以及响应。因此,客户端可以读取特定窗口来检查特定请求的完成状态和响应。 在这个例子中,客户端有三个线程,服务器有两个。请求状态板中每个客户端线程有两个窗口。KV存储的初始哈希表大小设置为5。 服务器使用以下命令执行: ./server -n 2 -s 5 这里,-n是线程数量,-s是KV存储的初始哈希表大小。 客户端使用以下命令执行: ./client -n […]