zoukankan      html  css  js  c++  java
  • 2020-2021-1 Linux 《内核原理与分析》第九周作业

    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
    这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业>
    这个作业的目标 <进程调度的时机,进程的分类,进程上下文切换,Linux系统的运行过程,Linux系统执行过程,进程调度相关源代码跟踪和分析>
    作业正文 ... 本博客链接

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

    1.进程调度的时机

    • 硬中断和软中断

    (1)中断在本质上是软件或硬件发生了某种情形而通知处理器的行为,处理器进而停止正在运行的指令流(当前进程),对这些通知做出相应反应,即转去执行预定义的中断处理程序(内核代码)。

    (2)硬中断主要是一些外部设备,比如打印机,外设来通知CPU外部有中断信号产生。软中断又称为异常,软中断分为故障(比如除0错误、缺页中断),退出(不可恢复的严重故障,导致程序无法继续运行),陷阱(系统调用)。

    • 进程调度时机

    (1)linux内核通过schedule函数实现进程调度,schedule函数在运行队列中找到一个进程,把CPU分给它。调用schedule函数一次就是调度一次,调用schedule函数的时候就是进程调度时机。

    (2)进程调度时机如下
    用户进程通过特定的系统调用主动让出CPU。

    中断处理程序在内核返回用户态时进行调度。

    内核线程主动调用schedule函数让出CPU。

    中断处理程序主动调用schedule函数让出CPU,涵盖第一和第二种情况。

    2.进程的分类

    • 进程的分类1

    I/O消耗型进程:CPU负载不高,大量时间都在等待读写数据。

    处理器消耗型进程:典型的像视频编码转换、加解密算法等。CPU占用率为100%,但没有太多硬件进行读写操作。

    • 进程的分类2

    交互式进程:有大量的人机交互,对系统响应时间要求比较高。

    批处理进程:此类进程不需要人机交互,在后台运行,需要占用大量的系统资源。

    实时进程:对调度延迟的要求最高,这些进程往往执行非常最要的操作,要求立即响应并执行。

    3.进程上下文切换

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

    用户地址空间:包括程序代码、数据、用户堆栈等。

    控制信息:进程描述符、内核堆栈等。

    硬件上下文,相关寄存器的值。

    • 进程切换就是变更进程上下文,最核心的是几个关键寄存器的保存与变换

    CR3寄存器代表进程页目录表,即地址空间,数据。

    ESP寄存器(内核态时)代表进程内核堆栈(保存函数调用历史),struct thread、进程控制块、内核堆栈存储于连续8KB区域中,通过ESP获取地址。

    EIP寄存器及其它寄存器代表进程硬件上下文,即要执行的下条指令(代码)及环境。

    4.Linux系统的运行过程

    正在运行的用户态进程X切换到用户态进程Y的过程,具体表述如下:

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

    (2)发生中断,包括异常、系统调用等

    (3)保存现场,此时从进程X的用户态到进程X的内核态

    (4)中断处理过程中或中断返回前调用了schedule(),完成了进程上下文所需的EIP等寄存器状态切换

    (5)开始运行用户态进程Y

    (6)恢复现场,与(3)中保存现场相对应

    (7)从Y进程的内核堆栈中弹出(2)中硬件完成的压栈内容

    (8)继续运行用户态进程Y

    5.Linux系统执行过程

    从CPU的视角来看这一过程

    • CPU在运行其他进程时,shell进程在等待获取用户输入,处于阻塞等待状态。当用户输入ls并按Enter键后导致键盘产生中断信号。

    • CPU检测到键盘中断信号,转去中断处理程序,中断处理程序将shell进程由等待状态转为就绪状态,被唤醒置于就绪队列。

    • CPU从键盘中断处理程序返回时,也就是中断处理结束前会检测是否需要进行调度,交互式进程被唤醒后vruntime较低,被优先调度的shell进程很可能会恢复执行,其中会调用fork系统调用和exec系统调用.

    • CPU执行shell进程调用fork系统调用,结果是创建了一个子进程,并在子进程中调用exec系统调用加载了ls命令(也是一个程序),这期间进程调度shell进程被挂起,CPU执行子进程,也就是ls进程。

    • CPU执行ls进程的效果就是输出当前目录下的目录和文件,这时ls进程终止,shell进程又进入等待用户输入的状态,系统发生进程调度CPU去执行其他进程。

    6.进程调度相关源代码跟踪和分析

  • 相关阅读:
    每日一练leetcode
    每日一练leetcode
    每日一练 leetcode
    每日一练leetcode
    每日一练leetcode
    leetcode每日一练
    BigDecimal类 定义及用法
    每日一练leetcode
    每日一练leetcode
    字符串表达式校验&求值(C#实现) 附代码
  • 原文地址:https://www.cnblogs.com/traceurli/p/14087171.html
Copyright © 2011-2022 走看看