lab2
:material-circle-edit-outline: 约 533 个字 :material-clock-time-two-outline: 预计阅读时间 2 分钟
背景知识
进程就是正在运行并使用计算机资源的程序。进程与程序的不同之处在于,进程是一个动态的概念,其不仅需要将其运行的程序的代码 / 数据等加载到内存空间中,还需要拥有自己的运行栈
线程相关属性
每个线程会包括:
- 线程 ID:用于唯一确认一个线程;
- 运行栈:每个线程都必须有一个独立的运行栈,保存运行时的数据;
- 执行上下文:当线程不在执行状态时,我们需要保存其上下文(其实就是状态寄存器的值),这样之后才能够将其恢复,继续运行;
- 运行时间片:为每个线程分配的运行时间;
- 优先级:在优先级相关调度时,配合调度算法,来选出下一个执行的线程。
线程切换流程
- 在每次处理时钟中断时
- 操作系统首先会将当前线程的运行剩余时间减少一个单位
- 之后根据调度算法来确定是继续运行还是调度其他线程来执行;
- 在进程调度时
- 操作系统会遍历所有可运行的线程
- 按照一定的调度算法选出下一个执行的线程,最终将选择得到的线程与当前线程切换;
- 在切换的过程中
- 首先我们需要保存当前线程的执行上下文
- 再将要执行线程的上下文载入到相关寄存器中
至此我们就完成了线程的调度与切换。
Process 1 Operating System Process 2
+
| X
P1 executing | X
| X
v Timer Interrupt Trap X
+----------------------> X
+ X
X do_timer() X
X + X
X schedule() X
X + X
X save state to PCB1 X
X + X
X restore state from PCB2 X
X + X
X | X
X v Timer Interrupt Ret
X +--------------------->
X |
X | P2 executing
X |
X Timer Interrupt Trap v
X <---------------------+
X +
X do_timer()
X +
X schedule()
X +
X save state to PCB2
X +
X restore state from PCB1
X +
X |
Timer Interrupt Ret v
<----------------------+
|
P1 executing |
|
v