操作系统 2.6-操作系统的初步实现
以下是操作系统一步一步实现CPU管理的概述,以及在此过程中遇到的问题和解决方案:
也是对前面章节的一个总结
1. 单任务执行
-
问题:早期的计算机系统只能顺序执行程序,导致CPU利用率低下。
-
解决方案:引入多任务概念,允许多个程序并发执行。
2. 多任务和多进程
-
问题:需要在多个任务间有效切换,实现资源共享和隔离。
-
解决方案:引入进程概念,每个进程拥有独立的地址空间和资源。
3. 进程切换(Context Switching)
-
问题:如何保存和恢复进程状态,以便在多个进程间切换。
-
解决方案:使用任务状态段(TSS)和线程控制块(TCB)保存进程状态。
4. 用户级线程和内核级线程
-
问题:用户级线程切换不涉及内核,而内核级线程需要内核参与。
-
解决方案:内核级线程通过内核进行切换,涉及修改TSS和TCB。
5. 栈的使用
-
问题:进程切换时需要保存和恢复CPU寄存器状态。
-
解决方案:使用栈来保存和恢复寄存器状态,特别是栈指针(ESP/SS)。
6. 系统调用和中断
-
问题:用户程序如何请求操作系统服务,如创建进程。
-
解决方案:通过系统调用(如
fork()
)和中断(如int 0x80
)触发内核操作。
7. 调度算法
-
问题:如何决定哪个进程应该获得CPU时间片。
-
解决方案:实现调度算法(如轮转、优先级、多级反馈队列)来选择下一个要执行的进程。
8. 内存管理
-
问题:如何有效管理内存,确保进程间内存隔离和有效利用。
-
解决方案:引入内存管理单元(MMU),实现虚拟内存和分页。
9. 时钟中断和定时器
-
问题:如何实现进程的时间片轮转和定时调度。
-
解决方案:使用时钟中断和定时器,定期触发调度程序。
10. 内核数据结构
-
问题:如何组织内核数据结构以支持进程管理。
-
解决方案:设计和实现全局描述符表(GDT)、任务状态段(TSS)、进程控制块(PCB)等数据结构。