提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、进程的组成部分
进程由进程控制块PCB(process control block)和程序组成。
- 进程控制块
- 建立进程会创建一个PCB
- 回收进程会撤销对应的PCB
- 程序又由代码、数据、堆和栈组成。
- 栈:保存返回点、参数、返回值、局部变量
- 堆:动态变量
二、进程上下文的组成部分
进程的物理实体(代码和数据等)和支持进程运行的环境合称为进程的上下文。
- 由进程的程序块、数据块、运行时的堆和用户栈(两者通称为用户堆栈)等组成的用户空间信息被称为用户级上下文。
- 由进程标识信息、进程现场信息、进程控制信息和系统内核栈等组成的内核空间信息被称为系统级上下文。
- 处理器中各寄存器的内容被称为寄存器上下文(也称硬件上下文),即进程的现场信息。
三、何时发生上下文切换
下降进程自身造成切换(例如产生异常)或者外界强制下降进程和上升进程切换(例如cpu时间片用完)。
下降进程指的是当前即将被中断运行的进程。
上升进程指的是按照调度算法从就绪队列中选择的一个即将被运行的进程。
四、进程上下文切换具体流程
(1)保存当前进程的硬件上下文(PC/PSW/SP和通用寄存器等);
- 对linux系统而言,其硬件上下文大部分保存在struct thread_struct thread中,但通用寄存器(eax/ebx等保存在内核栈里)
(2)修改当前进程的PCB,比如将其状态由运行改为就绪或者阻塞,并将该进程PCB加入相关队列;
(3)调度另外一个进程(这涉及调度)
(4)修改被调度进程的PCB,将其状态改为运行(系统上下文)
(5)将“当前进程”的存储管理数据改为被调度进程的存储管理信息(如页表、TLB)(用户级上下文)
(6)恢复新进程的硬件上下文(即现场),让PC指向新进程代码
2567

被折叠的 条评论
为什么被折叠?



