码迷,mamicode.com
首页 > 系统相关 > 详细

linux内核分析第八次实验

时间:2016-04-17 11:43:16      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

20135118 罗鹏越

      本周学习的是linux内核中的进程调度,之前我们在操作系统中有讲解进程调度的分类,以及一些调度算法。而linux中的进程调度有所不同,首先老师讲解了进程调度和进程调度的时机,所有的用户态进程都只能被调度,而内核线程可以主动调度,而进程调度的实现都是通过schedule函数,然后讲解了进程上下文所包含的信息,然后讲解了切换寄存器状态所使用的switch to函数,每一个部分都单独分析了。然后讲解了LINUX架构和执行过程。虽然在操作系统中讲解过了进程调度,但是这个讲解得更加深入,是从内核的角度讲解了调度的原理,和执行过程。

开始实验:

 

技术分享

技术分享
技术分享

按c继续,可以发现core.c里面调用了schedule()。

技术分享

单步执行发现__schedule()
技术分享

继续单步执行,直到发现context_switch:

技术分享

之后继续执行,可以进入context_switch()函数并发现了switch_to()和__switch_to()
技术分享

linux系统的一般执行过程

  • 正在运行
  • 发生中断,可能陷入内核,CPU自动保存加载
  • SAVE_ALL保存现场
  • 调用schedule,switch_to进程上下文切换
  • 标号1之后运行Y(之前有进行准备动作)
  • restore_all恢复现场
  • 继续运行用户态进程Y

 

 

 

 

 

linux内核分析第八次实验

标签:

原文地址:http://www.cnblogs.com/20135118lpy/p/5400419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!