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. 实现一个可以在用户空间中使用的睡眠锁。 […]