1、进程上下文的组成部分
进程的物理实体(代码和数据等)和支持进程运行的环境合称为进程的上下文:由进程的程序块、数据块、运行时的堆和用户栈(两者通称为用户堆栈)等组成的用户空间信息被称为用户级上下文。
由进程标识信息、进程现场信息、进程控制信息和系统内核栈等组成的内核空间信息被称为系统级上下文。
处理器中各寄存器的内容被称为寄存器上下文(也称硬件上下文),即进程的现场信息。
2.进行进程切换的时机
下降进程自身造成切换(例如产生异常)或者外界强制下降进程和上升进程切换(例如cpu时间片用完)。
下降进程指的是当前即将被中断运行的进程。
上升进程指的是按照调度算法从就绪队列中选择的一个即将被运行的进程。
3.系统如何得知我们当前执行到那行代码?
寄存器中有一种叫做程序计数器:pc,eip:
记录当前进程正在执行指令的下一行指令的地址!!
寄存器的作用一般都是是为了提高效率
4、进程上下文切换具体流程
(1)保存当前进程的硬件上下文(PC/PSW/SP和通用寄存器等);
对linux系统而言,其硬件上下文大部分保存在struct thread_struct thread中,但通用寄存器(eax/ebx等保存在内核栈里)
(2)修改当前进程的PCB,比如将其状态由运行改为就绪或者阻塞,并将该进程PCB加入相关队列;
(3)调度另外一个进程(这涉及调度)
(4)修改被调度进程的PCB,将其状态改为运行(系统上下文)
(5)将“当前进程”的存储管理数据改为被调度进程的存储管理信息(如页表、TLB)(用户级上下文)
(6)恢复新进程的硬件上下文(即现场),让PC指向新进程代码
5.注意
进程从cpu上离开的时候,要将自己的上下文保存好,甚至带走。(它们一般保存在寄存器和自己的PCB上)
目的是为了自己被再次调度的时候,能够恢复。
进程被切换时候,
简单来说:保存上下文。
切换上下文。