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

    实验二

    1. 实验步骤

    1.搭建一个虚拟的硬件平台

    2.进入kernel文件夹添加mypcb.h并修改另外两个文件

    3.修改代码后需要 make 重新编译之后才能生效

    4.使用qemu -kernel arch/x86/boot/bzImage运行内核结果

    2.实验分析

    1.执行进程0的关键汇编代码分析如下:

    asm volatile(
        	"movl %1,%%esp
    	" 	/* 将进程原堆栈栈顶的地址存入ESP寄存器 */
        	"pushl %1
    	" 	        /* 将当前EBP寄存器值入栈 */
        	"pushl %0
    	" 	        /* 将当前进程的EIP入栈 */
        	"ret
    	" 	            /* 此命令正好可以让入栈的进程EIP保存到EIP寄存器中 */
        	: 
        	: "c" (task[pid].thread.ip),"d" (task[pid].thread.sp)	/* 输入值c或d意味着放入寄存器ecx/edx*/
    	);
    

    2.进程0启动,开始执行my_process(void)函数代码

     if(next->state == 0)/* -1 unrunnable, 0 runnable, >0 stopped */
        {        
        	my_current_task = next; 
        	printk(KERN_NOTICE ">>>switch %d to %d<<<
    ",prev->pid,next->pid);  
        	/* switch to next process */
        	asm volatile(	
            	"pushl %%ebp
    	" 	    /* save rbp of prev */
            	"movl %%esp,%0
    	" 	/* save rsp of prev */
            	"movl %2,%%esp
    	"     /* restore  rsp of next */
            	"movl $1f,%1
    	"       /* save rip of prev */	
            	"pushl %3
    	" 
            	"ret
    	" 	            /* restore  rip of next */
            	"1:	"                  /* next process start here */
            	"popl %%ebp
    	"
            	: "=m" (prev->thread.sp),"=m" (prev->thread.ip)
            	: "m" (next->thread.sp),"m" (next->thread.ip)
        	); 
        }  
    

    3.实验总结

    操作系统的正常工作需要用到计算机的三个法宝,即存储程序计算机、函数调用堆栈以及中断机制。首先得有存储程序的机制,才能自由实现进程的切换。进程在执行过程中,当时间片用完需要进行进程切换时,需要先保存当前的进程执行的上下文环境,下次进程被 调度时,需要恢复进程的上下文环境,这里堆栈就起到了关键作用。而保存环境到堆栈这个任务就是由中断机制完成的。当一个中断信号发生时,CPU把当前正在执行的程序的CS:EIP寄存器和ESP寄存器等都压到了一个叫内核堆栈的地方,然后把CS:EIP指向一个中断处理程序的入口,做保存现场的工作,之后执行其他程序,等回来时再恢复现场,恢复CS:EIP寄存器和ESP寄存器等,继续执行程序。这就实现了多道程序的并发执行。

  • 相关阅读:
    基于spark-streaming实时推荐系统
    xgb
    FM算法解析及Python实现
    FM算法
    计算广告
    转发推荐系统文章
    【spark】dataframe常见操作
    VS Code WSL 2 配置 Spring Boot 2
    Makefile
    Paper English
  • 原文地址:https://www.cnblogs.com/hyuxin/p/13870135.html
Copyright © 2011-2022 走看看