Skip to content

lab2

:material-circle-edit-outline: 约 533 个字 :material-clock-time-two-outline: 预计阅读时间 2 分钟

背景知识

进程就是正在运行并使用计算机资源的程序。进程程序的不同之处在于,进程是一个动态的概念,其不仅需要将其运行的程序的代码 / 数据等加载到内存空间中,还需要拥有自己的运行栈

线程相关属性

每个线程会包括:

  • 线程 ID:用于唯一确认一个线程;
  • 运行栈:每个线程都必须有一个独立的运行栈,保存运行时的数据;
  • 执行上下文:当线程不在执行状态时,我们需要保存其上下文(其实就是状态寄存器的值),这样之后才能够将其恢复,继续运行;
  • 运行时间片:为每个线程分配的运行时间;
  • 优先级:在优先级相关调度时,配合调度算法,来选出下一个执行的线程。

线程切换流程

  1. 在每次处理时钟中断时
    1. 操作系统首先会将当前线程的运行剩余时间减少一个单位
    2. 之后根据调度算法来确定是继续运行还是调度其他线程来执行;
  2. 在进程调度时
    1. 操作系统会遍历所有可运行的线程
    2. 按照一定的调度算法选出下一个执行的线程,最终将选择得到的线程与当前线程切换;
  3. 在切换的过程中
    1. 首先我们需要保存当前线程的执行上下文
    2. 再将要执行线程的上下文载入到相关寄存器中

至此我们就完成了线程的调度与切换。

           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

函数栈帧(详细图解)_函数调用栈帧过程(带图详解)-CSDN博客