首页 > 其他分享 >CSci 4061 增强型自动平地机

CSci 4061 增强型自动平地机

时间:2024-03-28 18:55:44浏览次数:13  
标签:可执行文件 文件 平地机 4061 autorader CSci 自动 使用 make

CSci 4061:操作系统简介2024年春季
项目2:增强型自动平地机中间到期时间:3/15午夜
1.目标
在这个项目中,你将通过多种方式扩展/增强你的自动标记。你将使用管道(管道)在自动转换器及其子级(可执行文件)之间通信信息,2)使用I/O
重定向(dup2)和随机I/O(seek),3)使用消息传递队列来实现差异,并使用警报来实现真正的超时,以检测无限/阻塞的情况(警报、sigaction、setitimer和sigfillset)。你会还可以找到一些方便的字符串函数(sprintf、strchr、strrchr、strlen),以及
几个I/O函数(unlink、getline、fgets、fseek)。阅读所有这些系统调用。为了简化问题,我们将删除“慢速”事件,因此只有正确、不正确、崩溃、无限或检测到阻塞。您还将在运行时通过将其设置为CPU计数,可以使用/proc/cpuinfo获取。具体来说,计算次数
处理器出现在文件中(在src的get_batch_size()函数中实现您的代码/utils.c)。这意味着新的autorader不会将B作为命令行参数。相反,它1
将接收包含要分级的可执行文件的目录作为第一个参数。新用法将如下所示:“./autorader<testdir><p1><p2>…<pn>”。
我们在utils.h/utils.c中提供了许多有用的代码,您可以使用(或忽略)这些代码。不管怎样,
您必须在utils.c中填写一些函数。
限制1:如果可能的话,请尝试在负载较轻的机器上运行测试(键入uptime
shell获取CPU负载;如果它很高,请等待或选择另一台机器)。
约束2:必须清除程序中的任何无限/阻塞进程
自动执行,但也可以在出现错误时在程序外的shell中执行。你可以使用“ps-u”
”和“pkill-9”来终止延迟进程。实际上pkill函数
允许模式匹配,因此您可能会发现以下命令很有用:pkill-9“sol_
”。
一些源代码、目标代码和测试用例将根据需要在可下载的tar文件中提供
来自Canvas。您可以使用自己的P1解决方案作为起点,也可以使用我们的解决方案。
2.改变信息传递方式
您将对您的autorader解决方案进行一些更改。在P2中,您不仅要修改
autorader,但模板代码也是如此。
更改1:当前模板使用return语句返回答案。答案是
限制为8位或0。。255由于系统调用限制。这可能会限制一个“真正的”同志
其中实际答案可能远远超过将被返回的8比特值。要解决此问题,您将修改
将其答案输出到STDOUT的模板。您还将修改autorader以重定向
child的STDOUT转换为名为output/的文件<参数>(例如输出/sol.4)。到
这样做,你会在自动标记器中使用dup2。小心打开具有写访问权限的文件,并调用
dup2只在孩子身上。一旦autorader通过读取输出文件从每个孩子那里得到答案
(或确定子级的问题),它应该使用:int删除批处理中的输出文件
unlink(const-charpathname),例如unlink(“output/sol.4”)。
通过将get_batch_size()函数与“grep processor/proc/cpuinfo|wc-l”1进行比较,可以仔细检查它是否正常工作2.如果您有错误,您可能需要删除shell中的输出文件。我们强烈建议为每个(可执行文件,参数)对,即使事件已崩溃、无限或被阻止,对于一致性但这取决于你。输出内容将在中为您定义
提供的代码。在转到更改2之前,请确保更改1有效!2:当前的autorader在exec接口中传递了一个测试参数。你创建三个“版本”的模板(以及相应的)autorader。三者都更改输入
仅限位置。
(i) 像以前一样使用exec传递每个输入参数(在这种情况下,没有对Change1进行新的更改。)
(ii)使模板通过STDIN读取其参数;为此,您将通过dup2将STDIN重定向到一个文件在类似于更改1的自动标记中。注意不要只在孩子身上叫dup2。您要的文件使用首先由autorader:input/.in为每个参数创建(例如input/4.in、input/7.in等)。最简单的方法是使用autorader命令行创建文件argv[]。您还必须在dup2之前的子级中打开输入文件以进行读取访问。使用取消链接后删除输入文件。如果你有bug,代 写CSci 4061你可能需要删除shell中的输入文件(make clean也会清除这些文件)
(iii)使用自动分级器和每个子级之间的管道来传递输入参数。
对于所有三个版本,请使用Change 1的输出机制。在相同的源文件中创建所有三个版本(就像真正的C系统程序员所做的那样)。使用#ifdef,#eliftemplate.c和autorader.c中的#endif以选择特定代码。您可能需要在多个地方执行此操作。请使用EXEC、REDIR和PIPE作为版本姓名。(例如#ifdef EXEC….#endif、#elif REDIR…、#elif-PIPE…#endif)。要编译特定版本的模板和/或autorader:您可以运行“make”。这些目标使用-D标志来指定版本(EXEC、REDIR或PIPE)。
3.使用警报进行时间检测的更好方法
更改3:现在检测一个子进程运行时间过长超时。为此,请修改autograder.c仅)通过sigaction创建报警处理程序,并使用setitimer启动计时器(将其设置为过期
IMEOUT_SECS秒之后)。删除检测到运行时间过长的旧代码。当计时器熄灭时,仍在奔跑的孩子被归类为无限/被阻挡,所以你应该杀死
它们使用int kill(pidt-pid,int sig)。记住仍然要等待每个过程。然而由于每个过程最终都会结束,现在不需要将WNOHANG传递给waitpid。所以,把它取下来。
相反,您将使用来自WEXITSTATUS(状态)和WTERMSIG(状态)的信息确定每个子进程的结果。可能出现的一个问题是,警报可能会中断
呼叫waitpid。在这种情况下,您应该重试对waitpid的调用。提示:使用errno的值EINTR以确定waitpid是否被中断。您将创建的单独版本
autorader,mq_autograder.c,以及本部分中的模板template_mq.c。
4.使用消息队列重新发布autorader范例更改4:您将实现另一种传递信息的样式,即Linux消息队列。这个分配工作的方法将遵循master worker模型。要做到这一点,你的亲笔签名将把一组[标记可执行参数]形式的“任务”写入消息队列,其中标记
对应于特定的工作进程。首先,自动标记器将启动所有B工人并发送给工作进程的消息,指示它将接收多少条消息以便初始化数据用于存储信息的结构。然后,自动标记器应该生成所有任务并将其插入消息队列。工人们将阅读所有发给他们的信息,并发送确认消息到自动标记程序。收到自动标记程序后
来自每个工作人员的确认,它将向每个工作人员发送一条消息,告诉他们开始测试3.可执行文件。此时,所有工作程序将开始批量运行它们的(可执行文件,参数)对
8,在每批之后将结果发送到自动标记程序,直到所有配对都经过测试。过程确定每个可执行文件的结果的方法应该与src/autorader.c中的相同。记住
让worker中的每个子进程为创建一个输出文件output/sol.4、output/sol.7等每个(可执行文件、参数)对,并将输出重定向到这些文件。别忘了删除消息队列。对于所有版本,最后一步是创建一个名为results.txt的输出文件。我们有提供了一个函数:src/utils.c中的write_results_to_file。
5.学生在提交的材料上做得怎么样?
最后一个“任务”是实现一个名为doubleget_score(char
results_file,charexecutable_name),它使用随机I/O返回给定的分数
results.txt中的executable_name(学生)。给定可执行文件的分数是结果为“正确”的参数除以测试的参数总数。您必须使用随机I/O(
seek)以使其高效。请参阅include/utils.h中对此函数的描述,以获取
更多的信息和约束。
6.测试
为了进行测试,请观察Makefile中的目标。有编译autograder.c/template.c的选项对于EXEC、REDIR和PIPE,它们对应于make-EXEC、make-REDIR和make-PIPE。这个用于制作测试可执行文件的方法类似于P1。常见的工作流可能看起来像下列的
$make-exec N=20#回想一下,N设置编译的template.c文件的数量
$ ./自动交易解决方案1 3 5
$make clean#这将清理输入/输出/解决方案目录
对于测试更改4(消息队列),常见的工作流可能如下所示:
$make mqueue N=20#mq_autograder现在将使用sol_X文件,而不是mq_sol_X
$ ./mq_自动平地机解决方案1 3 5
$make clean
随着分配截止日期的临近,我们将尝试发布更多的测试用例,但目前有一个
Makefile中的单个测试用例,即目标“test1_exec”。此测试的预期输出
results.txt和scores.txt的case位于预期的/文件夹中。它使用EXEC模式,但
无论使用EXEC、REDIR还是PIPE,结果都应该相同。

标签:可执行文件,文件,平地机,4061,autorader,CSci,自动,使用,make
From: https://www.cnblogs.com/simplesky/p/18102384

相关文章

  • CSCI 2122实现二进制翻译器
    CSCI2122任务4截止日期:2024年3月22日星期五晚上11:59,通过git提交目标本课业的目的是练习用C进行编码,并强化中讨论的概念关于程序表示的类。在这个任务1中,您将实现一个二进制翻译器2,如Rosetta3。您的程序将从翻译一个简单的指令集(比x86简单得多)到x86并生成x86汇编代码。代码将......
  • CSCI 5708移动计算
    CSCI4176/CSCI5708移动计算截止日期:2023年11月14日星期日下午11点59分提交:在Brightspace请阅读-所有课业的一般重要说明:•对于要求您进行在线搜索的研究类型ques/ons或ques/ons,请确保您的答案中正确引用了所有参考文献。使用IEEE参考样式。•请记住,不能仅仅因为引用了参考文......
  • CSCI 2122 C语言进行编码
    CSCI2122任务4截止日期:2024年3月22日星期五晚上11:59,通过git提交目标本作业的目的是练习用C语言进行编码,并强化课堂上讨论的程序表示概念。在这个任务1中,您将实现一个类似Rosetta3的二进制翻译器2。您的程序将从一个简单的指令集(比x86简单得多)转换为x86,并生成x86汇编代码。然......
  • CSCI316 大数据挖掘
    CSCI316(SIM)2023Session3IndividualAssignment2CSCI316–BigDataMiningTechniquesandImplementationIndividualAssignment22023Session3(SIM)15MarksDeadline:RefertothesubmissionlinkofthisassignmentonMoodleThree(3)tasksareincludedi......
  • CSCI 1110: 算法问题
    CSCI1110:Assignment0Due:11:59pm,Friday,May12,2023Thepurposeofthisassignmentistoallowyoutoself-assessyourreadinessforthiscourse.Ifyouarestrugglingtocompletethisassignment,andhavenottakenCSCI1100orCSCI1105,pleasecon......
  • CSCI561 算法解析
    CSCI561CSCI561FirstOrderLogicResolutioGuidelinesThisisaprogrammingassignment.Youwillbeprovidedwithsampleinputsandoutputs(seebelow).Pleaseunderstandthatthegoalofthesamplesistocheckthatyoucancorrectlyparsetheproblemdefi......
  • CSCI-1200 Simplified B+ Trees
    CSCI-1200DataStructures—Spring2023Homework8—SimplifiedB+TreesInthisassignmentwewillbeimplementingapartialandmodifiedversionofB+trees.......
  • Haskell CSCI3136 Ripple Effect
    HaskellCSCI3136RippleEffectProblemDescriptionRippleEffectorHakyuuisalogicpuzzlesomewhatsimilartoSudoku.Thepuzzleconsistsofarectangulargri......
  • csci 体系结构设计怎么写
    ComputerSoftwareConfigurationItem 计算机软件配置项  参考文献:计算机软件配置项csci-百度文库(baidu.com)说人话:软件产品的各个组成部分,细分到xx模块 ......