项目组成

此次实验中,主要有如下一些需要关注的文件:

  1. .
  2. ├── boot
  3. ├── kern
  4. ├── driver
  5. ├── fs
  6. ├── init
  7. ├── libs
  8. ├── mm
  9. ├── ......
  10. ├── vmm.c
  11. └── vmm.h
  12. ├── process
  13. ├── proc.c
  14. ├── proc.h
  15. └──......
  16. ├── schedule
  17. ├── sync
  18. ├── check\_sync.c
  19. ├── monitor.c
  20. ├── monitor.h
  21. ├── sem.c
  22. ├── sem.h
  23. ├── sync.h
  24. ├── wait.c
  25. └── wait.h
  26. ├── syscall
  27. ├── syscall.c
  28. └──......
  29. └── trap
  30. ├── libs
  31. └── user
  32. ├── forktree.c
  33. ├── libs
  34. ├── syscall.c
  35. ├── syscall.h
  36. ├── ulib.c
  37. ├── ulib.h
  38. └── ......
  39. ├── priority.c
  40. ├── sleep.c
  41. ├── sleepkill.c
  42. ├── softint.c
  43. ├── spin.c
  44. └── ......

简单说明如下:

  • kern/schedule/{sched.h,sched.c}: 增加了定时器(timer)机制,用于进程/线程的do_sleep功能。
  • kern/sync/sync.h: 去除了lock实现(这对于不抢占内核没用)。
  • kern/sync/wait.[ch]:
    定义了等待队列wait_queue结构和等待entry的wait结构以及在此之上的函数,这是ucore中的信号量semophore机制和条件变量机制的基础,在本次实验中你需要了解其实现。
  • kern/sync/sem.[ch]:定义并实现了ucore中内核级信号量相关的数据结构和函数,本次试验中你需要了解其中的实现,并基于此完成内核级条件变量的设计与实现。
  • user/ libs/ {syscall.[ch],ulib.[ch]
    }与kern/sync/syscall.c:实现了进程sleep相关的系统调用的参数传递和调用关系。
  • user/{ sleep.c,sleepkill.c}: 进程睡眠相关的一些测试用户程序。
  • kern/sync/monitor.[ch]:基于管程的条件变量的实现程序,在本次实验中是练习的一部分,要求完成。
  • kern/sync/check_sync.c:实现了基于管程的哲学家就餐问题,在本次实验中是练习的一部分,要求完成基于管程的哲学家就餐问题。
  • kern/mm/vmm.[ch]:用信号量mm_sem取代mm_struct中原有的mm_lock。(本次实验不用管)