当前课程知识点:Linux操作系统分析 > 第八周:进程的切换和系统的一般执行过程 > 2 Linux系统的一般执行过程 > 外部链接
最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程
正在运行的用户态进程X
发生中断——save cs:eip/esp/eflags(current) to kernel stack,then load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack).
SAVE_ALL //保存现场
中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换
标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)
restore_all //恢复现场
iret - pop cs:eip/ss:esp/eflags from kernel stack
继续运行用户态进程Y
几种特殊情况
通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;
内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;
创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;
加载一个新的可执行程序后返回到用户态的情况,如execve;
-1 存储程序计算机工作模型
--Video
-1 存储程序计算机工作模型--作业
-2 32位X86汇编基础
--Video
--Video
--Video
--Video
--外部链接
--Video
--外部链接
-2 32位X86汇编基础--作业
-3 汇编一个简单的C程序
--Video
--外部链接
--Video
--Video
--外部链接
-单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-1 函数调用堆栈
--Video
--html
--Video
--Video
--外部链接
-2 借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
--Video
--外部链接
--Video
--外部链接
-3 构造一个简单的操作系统内核
--Video
--Video
--Video
-4 单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-1 Linux内核源代码导读
--Video
--外部链接
-2 构造一个简单的Linux系统
--Video
--外部链接
-3 跟踪调试Linux内核的启动过程
--Video
--外部链接
--Video
--外部链接
-4 单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-1 使用库函数触发一个系统调用
--Video
--Video
--Video
-2 C代码中嵌入汇编代码的写法
--Video
-3 使用嵌入式汇编代码触发同一个系统调用
--Video
-单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-给MenuOS增加time和time-asm命令
--Video
-使用gdb跟踪系统调用内核函数sys_time
--Video
-系统调用在内核代码中的处理过程
--Video
--Video
--Video
-单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-1.进程的描述
--Video
--外部链接
--Video
--外部链接
-2.进程的创建
--Video
--外部链接
--Video
--Video
--Video
--Video
-单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-1 预处理、编译、链接和目标文件的格式
--Video
--外部链接
--Video
--外部链接
--Video
--外部链接
-2 可执行程序、共享库和动态链接
--Video
--外部链接
--Video
--外部链接
-3 可执行程序的装载
--Video
--外部链接
--Video
--外部链接
--Video
--Video
--Video
-单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-1 进程切换的关键代码switch_to分析
--Video
--外部链接
--Video
--外部链接
-2 Linux系统的一般执行过程
--Video
--外部链接
--Video
--外部链接
--Video
-3 Linux系统架构和执行过程概览
--Video
--Video
--Video
-单元测验--作业
-实验作业
--外部链接
-随堂小测--作业
-客观题部分--作业
-主观题部分
--外部链接
-主观题部分--作业