《操作系统》的实验代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
3.0 KiB

  1. ## 实验一
  2. ### 题目
  3. 利用uCore的中断机制,编程实现一个计时器( 秒表 ),可以实现正计时和倒计时。先选择计时模式,输入“A”为正计时,“B”为倒计时。若选择倒计时,则要先输入初始时间(秒数)。按“S”开始正(倒)计时,按“P”暂停正(倒)计时,按“C”继续正(倒)计时,按“E”停止正(倒)计时,暂停正(倒)计时或停止正(倒)计时时显示计时(剩余)时间值(秒数)。(时间精确到0.1秒)
  4. ### 效果
  5. ![](assets/实验一演示.gif)
  6. ### 原理
  7. 在trap.c文件中,在计时器中断(IRQ_OFFSET + IRQ_TIMER)和键盘中断(IRQ_OFFSET + IRQ_KBD)的部分添加状态转换、输入、输出。
  8. ## 实验二
  9. ### 题目
  10. 在现有的物理块分配首次适应算法基础上,实现循环首次适应算法。
  11. ### 效果
  12. ![](assets/实验二演示.gif)
  13. ### 原理
  14. 在default_pmm.c文件中,修改default_alloc_pages(或者新建一个函数),记录下循环首次适应算法的指针,每次从该指针的位置开始继续查找下一个空闲块。(原有的测试函数default_check、basic_check也需要略微更改)
  15. ## 实验三
  16. ### 题目
  17. 编程实现第二次机会页面置换算法。
  18. ### 效果
  19. ![](assets/实验三演示.gif)
  20. ### 原理
  21. 在swap_fifo.c文件中,修改_fifo_swap_out_victim(或者新建一个函数)。当需要换出页面时,从链表尾部取出一个页面,如果这个页面的访问位是1,那么将其访问位改为0,并放到链表头部。接着再从链表尾部检测下一个页面,直到找到一个访问位为0页面的作为换出的页面。(测试函数_fifo_check_swap也需要略微更改)
  22. ## 实验四
  23. 无编程作业。
  24. ## 实验五
  25. 无编程作业。
  26. ## 实验六
  27. ### 题目
  28. 编程实现理论课中的彩票进程调度算法。(算法的描述以及实现思路可以参考理论课教材和课程PPT)
  29. ### 效果
  30. ![](assets/实验六演示.gif)
  31. ### 原理
  32. 在default_sched.c文件中,新建彩票进程调度的几个函数。将进程的优先级作为彩票数量,在入队和出队时维护运行队列中的优先级总和,当需要选择下一个调度的进程时,从0到优先级总和的范围中选取一个随机数,之后把运行队列中进程优先级逐个相加,直到大于此随机数,这说明此随机数在这个进程拥有的彩票范围内。
  33. ## 实验七
  34. ### 题目
  35. 利用信号量机制实现读者写者问题的同步关系。(算法的描述以及实现思路可以参考理论课教材和课程PPT)
  36. ### 效果
  37. ![](assets/实验七演示.gif)
  38. ### 原理
  39. 读者和读者不需要互斥,读者和写者需要互斥,写者和写者需要互斥。维护当前读者数量的变量,当大于0时写者需要等待,当有写者在写时其他进程需要等待。在主进程中随机创建读者进程和写者进程,并随机延迟,这样就能体现出读者和写者在不同情况下的互斥与同步是否正确。