项目组成

  1. ├── boot
  2. ├── kern
  3. ├── debug
  4. ├── driver
  5. ├── fs
  6. ├── init
  7. ├── libs
  8. ├── mm
  9. ├── process
  10. ├── .....
  11. ├── proc.c
  12. ├── proc.h
  13. └── switch.S
  14. ├── schedule
  15. ├── default\_sched.c
  16. ├── default\_sched.h
  17. ├── default\_sched\_stride\_c
  18. ├── sched.c
  19. └── sched.h
  20. ├── syscall
  21. ├── syscall.c
  22. └── syscall.h

相对与实验五,实验六主要增加的文件如上表红色部分所示,主要修改的文件如上表紫色部分所示。主要改动如下:
简单说明如下:

  • libs/skew_heap.h:
    提供了基本的优先队列数据结构,为本次实验提供了抽象数据结构方面的支持。
  • kern/process/proc.[ch]:proc.h中扩展了proc_struct的成员变量,用于RR和stride调度算法。proc.c中实现了lab6_set_priority,用于设置进程的优先级。
  • kern/schedule/{sched.h,sched.c}: 定义了 ucore 的调度器框架,其中包括相关的数据结构(包括调度器的接口和运行队列的结构),和具体的运行时机制。
  • kern/schedule/{default_sched.h,default_sched.c}: 具体的 round-robin 算法,在本次实验中你需要了解其实现。
  • kern/schedule/default_sched_stride_c: Stride Scheduling调度器的基本框架,在此次实验中你需要填充其中的空白部分以实现一个完整的 Stride 调度器。
  • kern/syscall/syscall.[ch]: 增加了sys_gettime系统调用,便于用户进程获取当前时钟值;增加了sys_lab6_set_priority系统调用,便于用户进程设置进程优先级(给priority.c用)
  • user/{matrix.c,priority.c,. . . }: 相关的一些测试用户程序,测试调度算法的正确性,user目录下包含但不限于这些程序。在完成实验过程中,建议阅读这些测试程序,以了解这些程序的行为,便于进行调试。