2020-2021-1 20209314 《Linux内核原理与分析》第九周作业
作业信息
| 这个作业属于哪个课程 | <2020-2021-1Linux内核原理与分析)> |
|---|---|
| 这个作业要求在哪里 | <2020-2021-1Linux内核原理与分析第九周作业> |
| 这个作业的目标 | |
| 作业正文 | https://i.cnblogs.com/posts/edit;postId=13976926 |
第8章 进程的切换和系统的一般执行过程
实验:进程调度相关源代码跟踪和分析





无法对switch_to跟踪调试,因为其为内嵌汇编代码
硬中断和软中断
中断:中断在本质上都是软件或者硬件发生了某种情形而通知处理器的行为
中断处理程序:与进程无关的内核指令流。
进程切换:切换两个进程的内核堆栈。
硬中断:就是CPU两根引脚,检测电平高低,以确定有无中断请求。
软中断/异常:特殊情况导致的异常导致程序无法继续执行,而跳转到CPU预设的处理函数。
进程调用时机
schedule函数
Linux内核通过schedule函数实现进程调度,schedule函数在运行队列中找到一个进程,把cpu分配给他。所以调用schedule函数一次就是调度一次,调用schedule函数的时候就是进程调度的时机。调用schedule函数有两种方法,一是进程主动调用schedule(),二是松散调用。
上下文
一般来说,CPU在任何时刻都处于以下3种情况之一:
运行于用户空间,执行用户进程上下文。
运行于内核空间,处于进程上下文。
运行于内核空间,处于中断上下文。
内核线程以进程上下文的形式运行在内核空间中,本质上还是进程,但它有调用内核代码的权限,比如主动调用schedule()函数让出CPU等。
进程调度的时机
进程调度实际就是内核调用schedule函数的时机。简单总结如下:
用户进程通过特定的系统调用主动让出CPU
中断处理程序在内核返回用户态进行调度
内核线程主动调用schedule函数让出cpu
中断处理程序主动调用schedule函数让出CPU,涵盖以上第一种和第二种情况。
调度策略与算法
Linux内核常用的几种调度策略为SCHED_NORMAL,SCHED_FIFO,SCHED_RR
linux中优先级0-139,实时进程处于0-99,普通进程在100-139。子进程会继承父进程的优先级
实时进程:SCHED_FIFO SCHED_RR 优先级静态设定
普通进程:SCHED_NORMAL 按照优先级占不同比例来占用时间,CPU时间占比会根据系统负载的变化而变化。
CFS调度算法
基于权重的动态优先级调度算法
其核心思想
1、调度周期:进程越多,调度周期越长
2、理论运行时间:进程获取CPU后最长可占用时间为理论运行时间
3、虚拟运行时间:每次从运行队列中拥有最小虚拟运行时间的进程来执行

浙公网安备 33010602011771号