• 20169210《Linux内核原理与分析》第四周作业


    网易云课堂学习:

    在实验楼的学习中,这次的实验是利用mykernel实验模拟计算机硬件平台

    首先进入linux-3.9.4,

    $cd LinuxKernel/linux-3.9.4 
    

    如下图所示

    接下来是利用如下命令执行

    $qemn -kernel arch/x86/boot/bzImage
    

    结果如图所示

    进入mykernel,查看文件,结果如图所示

    进入mymain.c,如图所示

    前面是头文件,该函数是整个操作系统的入口,my-start-kernel,之前都是硬件初始化的操作,if循环是执行10万次打印一次,也可以修改if的条件使打印更慢一些

    接下来进入myinterrupt.c

    同样前面是头文件,每次时钟中断都调用一次printk()输出,进入时钟中断的处理入口都由linux内核代码处理好了,这里只需要在时钟中断的中断发生时进行操作

    模拟硬件平台的工作包括初始化的动作就完成了。

    进程切换:

    处理器总处于以下状态中的一种:
    1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
    2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
    3、用户态,运行于用户空间。

    所谓的“进程上下文”,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

    一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。
    用户级上下文: 正文、数据、用户堆栈以及共享存储区;
    寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
    系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈

    内核可以处于两种上下文:进程上下文和中断上下文。在系统调用之后,用户应用程序进入内核空间,此后内核空间针对用户空间相应进程的代表就运行于进程上下文。异步发生的中断会引发中断处理程序被调用,中断处理程序就运行于中断上下文。中断上下文和进程上下文不可能同时发生。

    当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的是模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。

    参见:http://blog.csdn.net/yapian8/article/details/41809837

    进程管理:

    下图是进程状态转换图

    TASK_RUNNING(运行)—进程是可执行的。
    TASK_INTERRURUPTIBLE(可中断)—进程正在睡眠(也就是说它被阻塞),等待某些条件的达成。
    TASK_UNINTERRUPTIBLE(不可中断)—除了就算是接收信号也不会被唤醒或准备投入运行外,这个状态与可打断状态相同。
    TASK_TRACED—被其他进程跟踪的进程。
    TASK_STOPPED(停止)—进程停止执行。

  • 相关阅读:
    URL中编码问题
    java得到当前时间
    java 集合类详解
    java String 详解
    java context 讲解
    java代码优化
    oracle 面试题
    查找算法总结
    10个经典的排序算法
    时间复杂度,相关排序算法时间复杂度的比较
  • 原文地址:https://www.cnblogs.com/crisgy/p/5966766.html
Copyright © 2020-2023  润新知