2022-2023-1 20222801《Linux内核原理与分析》第九周作业

Linux系统内核第九周作业


实验八 理解进程调度时机跟踪分析进程调度与进程切换的过程

进程调度的时机

(一)进程调动
1.中断处理过程(包括时钟中断、I/O 中断、系统调用和异常)中,直接调用schedule,或者返回用户态时根据 need_resched 标记调用 schedule。
2.内核线程可以直接调用 schedule 进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度。
3.用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。

(二)进程切换
为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换,即进程上下文切换。挂起正在CPU上执行的进程,与中断时保存现场是不同的,中断前后是在同一个进程上下文中,只是由用户态转向内核态执行。进程上下文包含了进程执行需要的所有信息

cd ~/LinuxKernel
qemu –kernel linux-3.18.6/arch/x86/boot/bzImage –initrd rootfs.img –S –s 

在这里插入图片描述

2.另开一个终端进行gdb调试,分别在schedule:进程调度的主体函数,context_switch:实现进程切换的函数,pick_next_task:负责根据调度策略和调度算法选择下一个进程,switch_to:其中switch_to为宏定义,不能设置断点,需到context_switch函数中单步执行查看调用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验总结:

通过实验可知schedule()函数用来选择一个新的进程来运行,并调用context_switch()进行上下文的切换,这个宏调用switch_to()来进行关键上下文切换,其中pick_next_task()函数封装了进程调度算法。结合本科学习的操作系统的知识,通过动手实验能够使自己对于进程切换的过程有更深的认识,在linux中,进程主动调度的时机可以在中断处理过程中、内核线程中,但用户态进程无法实现主动调度,仅能通过陷入内核态的新时机点进行调度,即在中断处理过程中进行调度。中断在本质上都是软件或某些硬件发生了某情形的而通知处理器的行为,处理器进而停止正在运行的指令流,对这些通知做出相应的反应,级转去执行预定义的中断处理程序。除了主动让出CPU外,进程调度都需要在进程外进行,这就需要从进程的指令流里切换出来,中断能起到切出进程指令流的作用,中断处理程序是与进程无关的内核指令流。

20222801 余酋龙

2022 年 11月 13日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值