2023开源操作系统夏令营-课后练习实验环境

21 人学过

2023开源操作系统夏令营-在线实验环境

课程内容
共11个章节 51个实验
1 在线实验环境

实验1 开源操作系统夏令营-在线实验环境
在这里尽情实验吧!
2 第零章实验

实验1 实验0-1
在你日常使用的操作系统环境中安装并配置好实验环境,填写你的关键代码并简要描述实现方法和遇到的关键问题。
实验2 实验0-2
在Linux环境下编写一个会产生异常的应用程序,并简要解释操作系统的处理结果。填写你的关键代码并简要描述实现方法和遇到的关键问题。
实验3 实验0-3
在Linux环境下编写一个可以睡眠5秒后打印出一个字符串,并把字符串内容存入一个文件中的应用程序A。(基于C或Rust语言)
实验4 实验0-4
在Linux环境下编写一个应用程序B,简要说明此程序能够体现操作系统的并发性、异步性、共享性和持久性。(基于C或Rust语言)
3 第一章实验

实验1 实验1-1
实现一个linux应用程序A,显示当前目录下的文件名。(用C或Rust编程)
实验2 实验1-2
实现一个linux应用程序B,能打印出调用栈链信息。(用C或Rust编程)
实验3 实验1-3
实现一个基于rcore/ucore tutorial的应用程序C,用sleep系统调用睡眠5秒(in rcore/ucore tutorial v3: Branch ch1)
4 第二章实验

实验1 实验2-1
实现一个裸机应用程序A,能打印调用栈。
实验2 实验2-2
扩展内核,实现新系统调用get_taskinfo,能显示当前task的id和task name;实现一个裸机应用程序B,能访问get_taskinfo系统调用。
实验3 实验2-3
扩展内核,能够统计多个应用的执行过程中系统调用编号和访问此系统调用的次数。
实验4 实验2-4
扩展内核,能够统计每个应用执行后的完成时间。
实验5 实验2-5
扩展内核,统计执行异常的程序的异常情况(主要是各种特权级涉及的异常),能够打印异常程序的出错的地址和指令等信息。
5 第三章实验

实验1 实验3-1
扩展内核,能够显示操作系统切换任务的过程。
实验2 实验3-2
扩展内核,能够统计每个应用执行后的完成时间:用户态完成时间和内核态完成时间。
实验3 实验3-3
编写浮点应用程序A,并扩展内核,支持面向浮点应用的正常切换与抢占。
实验4 实验3-4
编写应用程序或扩展内核,能够统计任务切换的大致开销。
实验5 实验3-5
扩展内核,支持在内核态响应中断。
实验6 实验3-6
扩展内核,支持在内核运行的任务(简称内核任务),并支持内核任务的抢占式切换。
6 第四章实验

实验1 实验4-1
使用sbrk,mmap,munmap,mprotect内存相关系统调用的linux应用程序。
实验2 实验4-2
修改本章操作系统内核,实现任务和操作系统内核共用同一张页表的单页表机制。
实验3 实验4-3
扩展内核,支持基于缺页异常机制,具有Lazy 策略的按需分页机制。
实验4 实验4-4
扩展内核,支持基于缺页异常的COW机制。(初始时,两个任务共享一个只读物理页。当一个任务执行写操作后,两个任务拥有各自的可写物理页)
实验5 实验4-5
扩展内核,实现swap in/out机制,并实现Clock置换算法或二次机会置换算法。
实验6 实验4-6
扩展内核,实现自映射机制。
7 第五章实验

实验1 实验5-1
实现一个使用nice,fork,exec,spawn等与进程管理相关的系统调用的linux应用程序。
实验2 实验5-2
扩展操作系统内核,能够显示操作系统切换进程的过程。
实验3 实验5-3
请阅读下列代码,分析程序的输出 A 的数量:( 已知 && 的优先级比 || 高)
int main() {
    fork() && fork() && fork() || fork() && fork() || fork() && fork();
    printf("A");
    return 0;
}
如果给出一个 && || 的序列,如何设计一个程序来得到答案?

实验4 实验5-4
在本章操作系统中实现本章提出的某一种调度算法(RR调度除外)。
实验5 实验5-5
扩展操作系统内核,支持多核处理器。
实验6 实验5-6
扩展操作系统内核,支持在内核态响应并处理中断。
8 第六章实验

实验1 实验6-1
扩展easy-fs文件系统功能,扩大单个文件的大小,支持三重间接inode。
实验2 实验6-2
扩展内核功能,支持stat系统调用,能显示文件的inode元数据信息。
实验3 实验6-3
扩展内核功能,支持mmap系统调用,支持对文件的映射,实现基于内存读写方式的文件读写功能。
实验4 实验6-5
扩展easy-fs文件系统功能,通过日志机制支持crash一致性。
实验5 实验6-4
扩展easy-fs文件系统功能,支持二级目录结构。可扩展:支持N级目录结构。
9 第七章实验

实验1 实验7-1
分别编写基于UNIX System V IPC的管道、共享内存、信号量和消息队列的Linux应用程序,实现进程间的数据交换。
实验2 实验7-2
分别编写基于UNIX的signal机制的Linux应用程序,实现进程间异步通知。
实验3 实验7-3
参考rCore Tutorial 中的shell应用程序,在Linux环境下,编写一个简单的shell应用程序,通过管道相关的系统调用,能够支持管道功能。
实验4 实验7-4
扩展内核,实现共享内存机制。
实验5 实验7-5
扩展内核,实现signal机制。
10 第八章实验

实验1 实验8-1
在Linux环境下,请用信号量实现哲学家就餐的多线程应用程序。
实验2 实验8-2
在Linux环境下,请用互斥锁和条件变量实现哲学家就餐的多线程应用程序。
实验3 实验8-3
在Linux环境下,请建立一个多线程的模拟资源分配管理库,可通过银行家算法来避免死锁。
实验4 实验8-4
扩展内核功能,实现读者优先的读写信号量。
实验5 实验8-5
扩展内核功能,实现写者优先的读写信号量。
实验6 实验8-6
扩展内核功能,在内核中支持内核线程。
实验7 实验8-7
进一步扩展内核功能,在内核线程中支持同步互斥机制,实现内核线程用的mutex, semaphore, cond-var。
实验8 实验8-8
扩展内核功能,实现多核支持下的同步互斥机制。
实验9 实验8-9
解决优先级反转问题:实现RM实时调度算法,设计优先级反转的实例,实现优先级天花板和优先级继承方法。
11 第九章实验

实验1 实验9-1
在Linux的字符(命令行)模式下,编写贪吃蛇小游戏应用程序。
2023开源操作系统夏令营-课后练习实验环境

共51个实验

参加本课程