zoukankan      html  css  js  c++  java
  • Linux第九周作业

    学习笔记
    不同类型的进程有不同的调度需求,其中分为两类
    第一类:I/O-bound(频繁进行I/O,花费长时间等待I/O操作的完成)CPU-bound(计算密集型,需要大量的CPU时间进行运算)
    第二类:批处理进程、实时进程、交互式进程(例如:shell)。
    进程调度时机
    1 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule();
    2 内核线程可以直接调用schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度;
    3 用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度,即在中断处理过程中进行调度。
    进程上下文切换
    为控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行。
    挂起正在CPU上执行的进程,与中断时保存现场不同。中断前后是在同一个进程上下文中,只是由用户态转向内核态执行。
    进程上下文包含了进程执行需要的所有信息
    1)用户地址空间:包括程序代码,数据,用户堆栈等
    2)控制信息:进程描述符,内核堆栈等
    3)硬件上下文(与中断保存硬件上下文的方式不同)
    schedule() 函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,context_switch中的一个关键宏switch_to来进行关键上下文切换。
    next=pick_next_task(rq.prev); 进程调度算法都封装在这个函数内部
    context_switch(rq.prev.next); j进程上下文切换
    switch_to利用prev和next两个参数:prev指向当前进程next指向被调度进程。
    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做了关键的进程上下文切换 //将x进程的内核堆栈切换到next进程的内核堆栈,再切换eip
    5 标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)
    6 restore_all 恢复现场
    7 iret - pop cs:eip/ss:esp/eflags from kernel stack //把y进程在发生中断时保存在内核堆栈里面的cs:eip/ss:esp/eflags pop出来
    8 继续运行用户态进程y。

    实验过程
    和前一个实验一样先使用以下命令
    cd LinuxKernel
    rm menu -rf
    git clone https://github.com/mengning/menu.git
    cd menu
    mv test_exec.c test
    make rootfs

    返回上一级
    cd..
    可以通过增加-s -S启动参数打开调试模式
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S

    打开gdb进行远程调试
    gdb
    file linux-3.18.6/vmlinux
    target remote:1234
    设置断点
    b schedule
    b_context switch
    b_switch
    b_switch_to
    b pick_next_task

  • 相关阅读:
    线段树时间分治
    CDQ分治
    并查集练习
    hihocoder 1513 小Hi的烦恼 (bitset优化)
    线段树维护哈希
    使用swift语言进行IOS应用开发
    用jquery+Asp.Net实现省市二级联动
    苹果IOS与谷歌 android系统的UI设计原则
    优秀设计师应当知道的20大UI设计原则
    JQuery Easy Ui dataGrid 数据表格
  • 原文地址:https://www.cnblogs.com/2017yaya/p/7900802.html
Copyright © 2011-2022 走看看