@ -1,17 +1,21 @@ | |||||
challenge1: 实现内核态与用户态之间的来回切换 | challenge1: 实现内核态与用户态之间的来回切换 | ||||
=================================================== | |||||
状态:已完成,在branch master中的labcodes_answer/lab1_result | 状态:已完成,在branch master中的labcodes_answer/lab1_result | ||||
完成人:王乃铮 | 完成人:王乃铮 | ||||
challenge2: 用敲键盘实现用户模式内核模式切换 | challenge2: 用敲键盘实现用户模式内核模式切换 | ||||
=================================================== | |||||
状态:已完成,在branch lab1_X中的labcodes_answer/lab1_result | 状态:已完成,在branch lab1_X中的labcodes_answer/lab1_result | ||||
完成人:尹治宏 (yinzhihong12@msn.com) | 完成人:尹治宏 (yinzhihong12@msn.com) | ||||
challenge3: 可以在真实x86机器上用grub bootloader引导ucore kernel | challenge3: 可以在真实x86机器上用grub bootloader引导ucore kernel | ||||
=================================================== | |||||
状态:已完成 在branch lab1_X中的labcodes_answer/lab1_result | 状态:已完成 在branch lab1_X中的labcodes_answer/lab1_result | ||||
完成人:王欢 (mikewang.exe@gmail.com) | 完成人:王欢 (mikewang.exe@gmail.com) | ||||
challenge4: 可以在真实x86机器上通过u盘启动,用grub bootloader引导ucore kernel | challenge4: 可以在真实x86机器上通过u盘启动,用grub bootloader引导ucore kernel | ||||
=================================================== | |||||
状态:已完成 在branch lab1_X中的labcodes_answer/lab1_result。说明文档在 | 状态:已完成 在branch lab1_X中的labcodes_answer/lab1_result。说明文档在 | ||||
https://github.com/chyyuu/ucore_lab/blob/master/related_info/lab1/lab1-boot-with-grub2-in-udisk.md | https://github.com/chyyuu/ucore_lab/blob/master/related_info/lab1/lab1-boot-with-grub2-in-udisk.md | ||||
完成人:陈渝(yuchen@tsinghua.edu.cn) | 完成人:陈渝(yuchen@tsinghua.edu.cn) |
@ -1,22 +1,28 @@ | |||||
challenge1: buddy system(伙伴系统)的page分配算法 | challenge1: buddy system(伙伴系统)的page分配算法 | ||||
=================================================== | |||||
提示:参考“http://coolshell.cn/articles/10427.html | 提示:参考“http://coolshell.cn/articles/10427.html | ||||
状态: | 状态: | ||||
基本完成 (有bug) | 基本完成 (有bug) | ||||
https://github.com/chyyuu/ucore_lab/tree/lab2_X/labcodes_answer/lab2_result | https://github.com/chyyuu/ucore_lab/tree/lab2_X/labcodes_answer/lab2_result | ||||
请阅读设计报告 | |||||
labx2_buddysystem.md | |||||
完成人: | 完成人: | ||||
黄杰 2012011272 huangjie_cpp@163.com | 黄杰 2012011272 huangjie_cpp@163.com | ||||
袁源 2012011294 thuyuany12@163.com | 袁源 2012011294 thuyuany12@163.com | ||||
杜鹃 2012011354 duj09225@gmail.com | 杜鹃 2012011354 duj09225@gmail.com | ||||
challenge2: slub分配算法(任意大小的内存单元) | challenge2: slub分配算法(任意大小的内存单元) | ||||
=================================================== | |||||
提示:参考 http://www.ibm.com/developerworks/cn/linux/l-cn-slub/ | 提示:参考 http://www.ibm.com/developerworks/cn/linux/l-cn-slub/ | ||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
challenge3: 设计一种更加简单的方法,可以不用多次切换段表,修改页表内容等,就完成同样的段页式机制 | challenge3: 设计一种更加简单的方法,可以不用多次切换段表,修改页表内容等,就完成同样的段页式机制 | ||||
=================================================== | |||||
提示:xv6? | 提示:xv6? | ||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: |
@ -1,15 +1,53 @@ | |||||
challenge1:实现识别dirty bit的 extended clock页替换算法 | challenge1:实现识别dirty bit的 extended clock页替换算法 | ||||
状态:未完成 | =================================================== | ||||
状态:完成 | |||||
lab3x-extend-clock-readme.md为报告,里面简要描述了设计思路,解释了测试用例。主要增加了extend_clock_swap.c这个类,并修改了swap.c等原有的程序。 | |||||
https://github.com/chyyuu/ucore_lab/tree/lab3_X/labcodes_answer/lab3_result | |||||
完成人: | 完成人: | ||||
黄杰 2012011272 huangjie_cpp@163.com | |||||
袁源 2012011294 thuyuany12@163.com | |||||
杜鹃 2012011354 duj09225@gmail.com | |||||
challenge2:实现工作集页替换算法 | challenge2:实现工作集页替换算法 | ||||
状态:未完成 | =================================================== | ||||
提示: | |||||
对于 工作集置换算法和缺页率置换算法,一个难点是如何精确记录页访问的时间先后顺序。我理解这是做不到的。 | |||||
对于工作集置换算法,我的大致思路如下:工作集页面置换算法是全局页面置换算法。 | |||||
有了工作集的定义并不意味着存在一种有效的方法能够在程序运行期间及时地计算出工作集。 | |||||
作为替代,一种近似方法是基于执行时间片段统计工作集。 | |||||
例如,按照以前的方法,我们定义工作集为前100万次内存访问所使用过的页面集合, | |||||
那么现在就可以这样定义:工作集即是过去100ms中的内存访问所用到的页面集合。 | |||||
实际上,这样的模型很合适且更容易实现。每个进程只计算它自己的执行时间。 | |||||
这里假定CPU会在访问某页后,会置对应的页表项的Dirty位和Access位。时钟中断10ms产生一次。 | |||||
如果一个进程在T时刻开始,在(T+100)ms的时刻使用了40ms CPU时间, | |||||
对工作集而言,它的时间就是40ms,有大约4次中断。 | |||||
一个进程从它开始执行到当前所实际使用的CPU时间总数通常称作当前实际运行时间。 | |||||
通过这个近似的方法,进程的工作集可以被称为在过去的40ms(t值)实际运行时间中它所访问过的页面的集合。 | |||||
问题0:何时统计页是否在工作集? | |||||
一定数量的时钟中断产生后,会进行统计。即会基于当前进程/线程的页表项,对页表项进行统计, | |||||
如果发现某些页表项的access bit设置为1,则在全局的物理页管理的数据结构(Page 结构需要扩展一下)中记录其访问时间(近似值)。 | |||||
并吧access bit清零。这样就可以形成一个全局的物理页的工作集。 | |||||
问题1:何时开始进行工作集替换算法? | |||||
(当系统内存小于一定下限 lower bound)后,有一个内核线程会被激活, | |||||
开始进行工作集置换算法,查找的是Page 结构的全局页表。我觉得这样比随时把页换出去效率更高一些。 | |||||
状态:未完成 有小组在做 | |||||
完成人: | 完成人: | ||||
challenge3:实现缺页率页替换算法 | challenge3:实现缺页率页替换算法 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
challenge4:实现LIRS页替换算法 | challenge4:实现LIRS页替换算法 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: |
@ -1,12 +1,20 @@ | |||||
challenge1: 实现精简版内核线程管理与切换(分有中断和没中两种实现) | challenge1: 实现精简版内核线程管理与切换(分有中断和没中两种实现) | ||||
=================================================== | |||||
要求: | 要求: | ||||
(step1) 去掉页表的管理,中断,分配内存功能,只保留段机制,内核线程切换,print功能。看看代码规模会小到什么程度。 | (step1) 去掉页表的管理,中断,分配内存功能,只保留段机制,内核线程切换,print功能。看看代码规模会小到什么程度。 | ||||
(step2) 去掉页表的管理,只保留段机制,中断,分配内存功能,内核线程切换,print功能。看看代码规模会小到什么程度。 | (step2) 去掉页表的管理,只保留段机制,中断,分配内存功能,内核线程切换,print功能。看看代码规模会小到什么程度。 | ||||
状态:未完成 | 状态:基本完成 | ||||
目前去掉了页表的管理和内存分配,需要分配的内存通过编译时就定义好的数组代替,没有考虑回收的问题。 | |||||
但是进一步裁剪中断处理遇到了问题,kdebug中包含了trap.h,因为打印调试信息时需要trapframe结构。 | |||||
https://github.com/chyyuu/ucore_lab/tree/lab4_X/labcodes_answer/lab4_result | |||||
完成人: | 完成人: | ||||
yhy13@mails.tsinghua.edu.cn | |||||
challenge2: 实现内核线程的按需分页(demanding page)机制 | challenge2: 实现内核线程的按需分页(demanding page)机制 | ||||
状态:未完成 | =================================================== | ||||
状态:未完成 有小组在询问,可能在做 | |||||
完成人: | 完成人: |
@ -1,19 +1,23 @@ | |||||
challenge1: 参考Linux 的CFS,实现简化的CFS调度算法(基于红黑树) | challenge1: 参考Linux 的CFS,实现简化的CFS调度算法(基于红黑树) | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
challenge2: 参考Linux2.6的O(1)调度器,实现简化的O(1)调度算法 | challenge2: 参考Linux2.6的O(1)调度器,实现简化的O(1)调度算法 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
challenge3: 实现面向Real-time系统的RM/EDF调度算法 | challenge3: 实现面向Real-time系统的RM/EDF调度算法 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
challenge4: 短作业优先(SJF)调度算法/高响应比优先调度算法 | challenge4: 短作业优先(SJF)调度算法/高响应比优先调度算法 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
@ -1,8 +1,10 @@ | |||||
challenge1 参考unix的pipe/fifo机制,实现基于VFS接口的pipe/fifo机制 | challenge1 参考unix的pipe/fifo机制,实现基于VFS接口的pipe/fifo机制 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: | ||||
challenge 支持现有文件系统之外的其他文件系统的读写 | challenge 支持现有文件系统之外的其他文件系统的读写 | ||||
=================================================== | |||||
状态:未完成 | 状态:未完成 | ||||
完成人: | 完成人: |
@ -1,24 +1,29 @@ | |||||
challenge1:完善ucore lab smp实现,扩展ticket lock机制(参考linux的ticket lock实现),能够在真实机器上把lab8跑起来,并能看出出smp 调度和同步互斥的特点 | challenge1:完善ucore lab smp实现,扩展ticket lock机制(参考linux的ticket lock实现),能够在真实机器上把lab8跑起来,并能看出出smp 调度和同步互斥的特点 | ||||
=================================================== | |||||
状态:可基于田博的ucore lab smp当前实现(完成大部分) | 状态:可基于田博的ucore lab smp当前实现(完成大部分) | ||||
完成人: | 完成人: | ||||
challenge2:改进并简化一个简化的CPU模拟器(这个简化CPU的目的就是为了支持ucore OS的进一步简化),把ucore lab8移植到此简化CPU上。 | challenge2:改进并简化一个简化的CPU模拟器(这个简化CPU的目的就是为了支持ucore OS的进一步简化),把ucore lab8移植到此简化CPU上。 | ||||
=================================================== | |||||
状态:已有一个简化的CPU模拟器ex,一个简化的C子集编译器4c,一个基于此C子集的简化的xv6,4c编译的xv6可以运行在ex上。ex,4c,xv6的源码都在2000行以内。 | 状态:已有一个简化的CPU模拟器ex,一个简化的C子集编译器4c,一个基于此C子集的简化的xv6,4c编译的xv6可以运行在ex上。ex,4c,xv6的源码都在2000行以内。 | ||||
要求:改进简化CPU模拟器ex,使得它像一个稍微扩展一点的Y86,修改C子集编译器4c,支持改进的ex,把xv6改成lab1~lab8的code.体现lab1~lab8的特点。此项目比较有意思,有一定的综合性,给分也会偏多一些。 | 要求:改进简化CPU模拟器ex,使得它像一个稍微扩展一点的Y86,修改C子集编译器4c,支持改进的ex,把xv6改成lab1~lab8的code.体现lab1~lab8的特点。此项目比较有意思,有一定的综合性,给分也会偏多一些。 | ||||
完成人: | 完成人: | ||||
challenge3:理解ucore lab,基于ucore lab源码,给ucore lab生成参考文档。 | challenge3:理解ucore lab,基于ucore lab源码,给ucore lab生成参考文档。 | ||||
=================================================== | |||||
状态:类似 http://pdos.csail.mit.edu/6.828/2011/xv6/xv6-rev6.pdf 和它自动生成方式 | 状态:类似 http://pdos.csail.mit.edu/6.828/2011/xv6/xv6-rev6.pdf 和它自动生成方式 | ||||
要求:添加对于ucore lab的函数和重要数据结构的说明(中文注释,基于doxygen的格式),能对函数进行分类(比如memory::pmm....),这样可以采用doxygen自动生成ucore lab参考文档。lab1~lab8的很多注释内容应该可以复用。 | 要求:添加对于ucore lab的函数和重要数据结构的说明(中文注释,基于doxygen的格式),能对函数进行分类(比如memory::pmm....),这样可以采用doxygen自动生成ucore lab参考文档。lab1~lab8的很多注释内容应该可以复用。 | ||||
完成人: | 完成人: | ||||
challenge4: porting ucore labs 在Intel galieo gen2开发板上(板子可到FIT楼3-124找助教要,需要留下小组的个人信息) | challenge4: porting ucore labs 在Intel galieo gen2开发板上(板子可到FIT楼3-124找助教要,需要留下小组的个人信息) | ||||
=================================================== | |||||
状态:Intel galieo gen2开发板有详细的软硬件文档和linux软件,且Intel galieo gen2开发板采用的是本质是intel pentium5的intel Quark SoC X1000处理器。系统采用的是grub bootloader. | 状态:Intel galieo gen2开发板有详细的软硬件文档和linux软件,且Intel galieo gen2开发板采用的是本质是intel pentium5的intel Quark SoC X1000处理器。系统采用的是grub bootloader. | ||||
要求:lab1~lab8可以在Intel galieo gen2开发板上跑起来。需要写出移植报告,说明移植的过程等。 | 要求:lab1~lab8可以在Intel galieo gen2开发板上跑起来。需要写出移植报告,说明移植的过程等。 | ||||
完成人: | 完成人: | ||||
challenge4: porting ucore labs 1~8在x86的笔记本电脑上,可以通过u盘启动并在grub bootloader上选择执行lab1~lab8 | challenge4: porting ucore labs 1~8在x86的笔记本电脑上,可以通过u盘启动并在grub bootloader上选择执行lab1~lab8 | ||||
=================================================== | |||||
状态:lab1已经完成了,可以作为参考 | 状态:lab1已经完成了,可以作为参考 | ||||
要求:lab1~lab8可以在x86的笔记本电脑上跑起来。需要写出移植报告,说明移植的过程等。 | 要求:lab1~lab8可以在x86的笔记本电脑上跑起来。需要写出移植报告,说明移植的过程等。 | ||||
完成人: | 完成人: |