2019-2020-1 20199325《Linux内核原理与分析》第九周作业

第九周作业要求:


  1. 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确;
  2. 使用gdb跟踪分析一个schedule()函数 ,验证您对Linux系统进程调度与进程切换过程的理解;推荐在实验楼Linux虚拟机环境下完成实验。
  3. 特别关注并仔细分析switch_to中的汇编代码,理解进程上下文的切换机制,以及与中断上下文切换的关系;

一. 进程调度的时机

  1. 进程调度:就是按照某种特定算法从就绪队列中挑选出一个进程为其分配处理机
  2. 需要进行进程调度和切换的情况:

(1)、当前正在运行的进程主动放弃处理机:

进程正常终止
进程运行中发生异常终止
进程请求阻塞,如I/O请求

(2)、当前运行的进程被动放弃处理机:

分配给进程的时间片用完
有更紧急的事要处理,比如有输入输出
有更高优先级的进程进入队列

3、不能进行进程调度与切换的情况:

在处理中断的过程中
在操作系统内核程序临界区中
在原语中

4、临界资源和临界区:

临界资源: 在一个时间段内只允许一个进程访问的资源,互斥访问
临界区: 访问临界资源的那段代码,不会影响到操作系统的管理工作,如打印机
内核程序临界区: 访问某种内核数据结构的,比如就绪队列,如果不及时释放会影响到操作系统的管理工作

二、进程调度的方式

1、非强占式: 除非主动放弃,否则直到执行完成才能轮到下一个进程

优点: 实现简单,系统开销小
缺点: 不能优先处理紧急任务,适合早期的批处理系统
2、抢占式: 可以让紧急的任务优先处理
可以优先处理紧急任务,也可以以时间片轮流执行,适用于分时系统和实时系统

三、进程的切换与过程
1、狭义的进程调度与进程切换的区别:

狭义的进程调度: 从就绪队列中选出一个进程并给它分配处理机(选出的进程可以是原来暂停的进程也可以是 另一个新的进程,后者叫进程切换);进程切换是指一个进程让出处理机,另一个进程占用处理机的过程
广义的进程调度包括进程调度和进程切换两个步骤
进程切换 主要完成了对原来运行进程各种数据的保存和对新的进程的各种数据的恢复,如PC、PSW和各种寄存器的信息,这些信息都保存到PCB中

注意:进程切换时需要代价的,过于频繁的进行进程切换和进程调度会降低系统的效率

原文地址:https://www.cnblogs.com/buhery/p/11866755.html