Linux内核及分析 第八周 进程的切换和系统的一般执行过程

学习笔记:

一、进程调度与进程调度的时机分析

1.不同类型的进程有不同需求的调度需求:

第一种分类:

—I/O-bound:频繁的进行I/O,通常会花费很多时间等待I/O操作的完成

—CPU-bound:计算密集型,需要大量的CPU时间进行运算

第二种分类:

—批处理进程:不必与用户交互,通常在后台运行;不必响应很快;

—实时进程:有实时需求,不被低优先级的进程阻塞;响应时间短,稳定;

—交互式进程:需要经常与用户交互;响应时间要快

2.调度策略:一组规则,决定什么时候以怎样的方式选择一个新的进程运行。

3.Linux进程根据优先级排序,用特定的算法计算出进程优先级,用一个值表示把进程如何适当地分配给CPU。优先级是动态的,根据进程的行为周期性调整,较长时间未分配到CPU的通常提高优先级;已经在CPU上运行较长时间的降低优先级。

4.Schedule函数用来实现调度,在队列中找到一个进程,把CPU分配给他。

—直接调用schedule

—松散调用,根据need-resched标记进程调度的时机

5.进程调度时机

中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();

内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;

用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。

用户态进程只能被动调度;内核进程是只有内核态没有用户态的特殊进程,可以主动调度也可以被动调度。

二、进程上下文切换相关代码分析

1.为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换;

2.挂起正在CPU上执行的进程,与中断时保存现场是不同的,中断前后是在同一个进程上下文中,只是由用户态转向内核态执行;

3.进程上下文包含了进程执行需要的所有信息

4.用户地址空间:包括程序代码,数据,用户堆栈等

5.控制信息:进程描述符,内核堆栈等

6.硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同)

7.schedule()函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,这个宏调用switch_to来进行关键上下文切换

next = pick_next_task(rq, prev);//进程调度算法都封装这个函数内部

context_switch(rq, prev, next);//进程上下文切换

switch_to利用了prev和next两个参数:prev指向当前进程,next指向被调度的进程

8.next-ip一般是$1f,对于新创建的子进程是ret-from-fork

三、Linux系统的一般执行过程

最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程

1.正在运行的用户态进程X

2.发生中断——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).

3.SAVE_ALL //保存现场

4.中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换

5.标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)

6.restore_all //恢复现场

7.iret - pop cs:eip/ss:esp/eflags from kernel stack

8.继续运行用户态进程Y

实验过程:

1.进入虚拟机环境,启动内核,并进入调试状态

2.在schedule处设置断点,运行,用list展开函数

3.单步运行,直至_schedule()

4.在pick_next_task处设立断点,执行

5.在context_switch处设立断点,执行

总结:

进程的调度时机等还是有一般情况和具体情况的,我们要根据情况的不同具体的分析问题。

调度算法中最基本的一类就是基于优先级的调度——根据进程的价值和其对处理器时间的需求来对进程分级。

调度程序总是选择时间片未用尽而且优先级最高的进程运行。

作者: 王雪铖

原创作品转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

时间: 2024-10-12 07:14:42

Linux内核及分析 第八周 进程的切换和系统的一般执行过程的相关文章

Linux内核设计第八周 ——进程的切换和系统的一般执行过程

Linux内核设计第八周 ——进程的切换和系统的一般执行过程 第一部分 知识点总结

20135201李辰希 《Linux内核分析》第八周 进程的切换和系统的一般执行过程

李辰希 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一. 进程切换的关键代码switch_to的分析 1.进程调度与进程调度的时机分析 进程分类 I/O-bound:等待I/O CPU-bound:大量占用CPU进行计算 2. 交互式进程(shell) 实时进程 批处理进程 进程调度策略 一组决定何时以何种方式选择进程的规则 Linux的调度基于分时和优先级策略: 进程根据优先级(系

《Linux内核分析》第八周 进程的切换和系统的一般执行过程

张文俊 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关键代码switch_to的分析 1.进程调度与进程调度的时机分析 进程分类 分类1 I/O-bound:等待I/O CPU-bound:大量占用CPU进行计算 分类2 交互式进程(shell) 实时进程 批处理进程 进程调度策略 一组决定何时以何种方式选择进程的规则 Linux的调度基于分时和优先级策略: 进程根据优

第八周 进程的切换和系统的一般执行过程

钱自强 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 进程切换在内核中的实现 linux中进程切换是很常见的一个操作,而这个操作是在内核中实现的.这里我们来分析下内核中是如何实现这个操作的. linux内核中的线程切换主要通过schedule()这个函数实现.实现的时机有以下三个时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule()

《Linux内核》第七周 进程的切换和系统的一般执行过程 20135311傅冬菁

进程的切换和系统的一般执行过程 一.内容总结与分析 进程调度与进程调度时机 进程调度需求的分类: 第一种分类方式: I/O -bound(频繁进行I/O,通常会花很多时间等待I/O操作) CPU-bound(计算密集型.需要花大量CPU时间进行运算) 第二种分类方式: 批处理进程(后台进行,典型:编译程序.科学计算) 实时进程(有实时需求响应时间短.稳,典型:视频.音频.机械控制) 交互式进程(与用户交互多,响应时间要快,典型:shell.文本编辑程序.图形应用程序) Linux调度基于分时和优

《Linux内核分析》 第八节 进程的切换和系统的一般执行过程

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

第八节 进程的切换和系统的一般执行过程

第八周 进程的切换和系统的一般执行过程 By 135217孙小博 本周的主要内容: Linux中进程调度的基本概念与相关知识 schedule函数如何实现进程调度 Linux进程的执行过程(一般情况与特殊情况) 宏观描述Linux系统执行 进程切换的主要代码switch_to 进程的调度时机与进程的切换 不同类型进程的不同调度需求 第一种分类: I/O-bound:频繁进行I/O,并且需要花费很多时间等待I/O完成 CPU-bound:计算密集,需要大量的CPU时间进行运算 第二种分类: 批处理

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 黄韧(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识概要 Linux中进程调度的基本概念与相关知识 schedule函数如何实现进程调度 Linux进程的执行过程(一般情况与特殊情况) 宏观描述Linux系统执行 二.学习笔记 (一)进程切换的关键代码switch_to分析 进程进度与进程调度的时机分析 1.

《Linux内核分析》第八周学习小结 进程的切换和系统的一般执行过程

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