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

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

    进程调度的时机

    •ntel定义的中断类型

    • 硬中断:CPU的两根引脚(可屏蔽中断和不可屏蔽中断)。若是高电平,则有中断请求。
    • 软中断:包括零错误、系统调用、调试断点等,在CPU执行指令过程中发生的各种特殊情况,也称为异常。异常可以分为3种:故障、退出、陷阱。

    •进程调度时机

    • linux内核通过schedule函数实现进程调度,schedule函数在运行队列中找到一个进程。把CPU分配给他。每调用一次schedule函数就实现一次进程调度,调用schedule函数就是进程调度的时机。调用schedule函数: ◦进程主动调用:进程调用阻塞的系统调用等待外设或主动睡眠,最终会在内核中调用到schedule函数。
    • 松散调用:内核代码中可以随时调用schedule函数使当前内核路径让出CPU;也会根据need_resched标记做进程调度,内核检测到need_resched决定是否调用schedule函数。

    •进程调度时机情况
    -用户进程通过特定的系统调用主动让出CPU;

    • 中断处理程序在内核返回用户态时进行调度;
    • 内核线程主动调用schedule函数让出CPU;
    • 中断处理程序主动调用schedule函数让出CPU(包括以上两点)。

    CPU在任何时刻都处于以下3种情况之一:

    • 运行于用户空间,执行用户进程上下文。
    • 运行于内核空间,处于进程上下文。
    • 运行于内核空间,处于中断上下文。

    调度策略与算法

    •调度策略要考虑这个算法的整体目标,是追求资源利用率最高还是追求响应最及时,或是其他的一些目标,然后找到对应的方法或机制作为对策,这就是调度策略。

    •CFS即为完全公平调度算法,其基本原理是基于权重的动态优先级调度算法。每个进程使用CPU的顺序由进程已使用的CPU虚拟时间(vruntime)决定,已使用的虚拟时间越少,进程排序越靠前,进程在此被调度执行的概率也就越高。

    进程上下文切换

    •为了控制进程的执行,内核必须有能力挂起正在CPU中运行的进程,并恢复执行以前挂起的进程,这个行为称为进程切换。
    •进程上下文包含了进程执行的所有信息:

    • 用户地址空间:进程代码、数据和用户堆栈等
    • 控制信息:进程描述符、内核堆栈
    • 硬件上下文:存储相关寄存器的值

    •实际代码中进程切换由两个步骤组成:

    • 切换页全局目录(RC3)以安装一个新的地址空间,这样不同的虚拟地址经过不同的页表转为不同的物理地址。
    • 切换内核态堆栈和硬件上下文

    实验

    本次实验是使用gdb跟踪分析schedule函数,总共设置了4个断点,schedule,context_switch,switch_to,pick_next_task.大致逻辑是,要发生进程调度时,首先会调用schedule函数,而schedule函数里有一个pick_next_task函数,字面意思是选择下一个进程,该函数负责根据调度策略和调度算法选择下一个进程,而context_switch函数也属于schedule函数,该函数用于实现进程切换,switch_to则属于context_switch函数,进行进程关键上下文切换。

    cd LinuxKernel
    rm menu -rf
    git clone https://github.com/mengning/menu.git
    cd menu
    ls
    make rootfs
    
    cd..
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    
    gdb
    file linux-3.18.6/vmlinux
    target remote:1234
    b schedule
    b context_switch
    b __switch_to
    b pick_next_task
    



  • 相关阅读:
    南邮NOJ没有被接待的童鞋
    南邮NOJ 1014 数据的插入与删除
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    南邮NOJ开灯问题
    南邮NOJ偷吃可耻
    【HDOJ】1166 敌兵布阵
    【HDOJ】1180 诡异的楼梯
  • 原文地址:https://www.cnblogs.com/Huyiming/p/11862729.html
Copyright © 2011-2022 走看看