首页 技术 正文
技术 2022年11月21日
0 收藏 348 点赞 3,139 浏览 1153 个字

—恢复内容开始—

20135125陈智威

原创作品转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”

实验要求:

mykernel实验指导(操作系统是如何工作的)

运行并分析一个精简的操作系统内核,理解操作系统是如何工作的

使用实验楼的虚拟机打开shell

  1. cd LinuxKernel/linux-3.9.4
  2. qemu -kernel arch/x86/boot/bzImage

然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c

使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码

实验过程:

1.使用实验楼的虚拟机打开shell,输入

  1. cd LinuxKernel/linux-3.9.4
  2. qemu -kernel arch/x86/boot/bzImage

2.观察内核运行的程序:

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

3.查看mykernel中所包含的文件:

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

4.运行mymain.c并查看其中的内核启动代码:

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

5.运行myinterrupt.c并查看其中的时间中断函数代码:

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

实验分析:

这是内核代码的启动函数,C语言编写,循环部分是每执行100000次,输出一条语句。

void __init my_start_kernel(void)
{
    int i = 0;
    while(1)
    {
        i++;
        if(i%100000 == 0)             /*这里的10000次根据每台机器系统运行的快慢可以自行调节*/
            printk(KERN_NOTICE “my_start_kernel here  %d \n”,i);
            
    }
}

这段代码是被时间中断时调用,每次被调用的时候输出一条语句。

void my_timer_handler(void)
{
printk(KERN_NOTICE “\n>>>>>>>>>>>>>>>>>my_timer_handler here<<<<<<<<<<<<<<<<<<\n\n”);
}

这里我们能够看出比之前的更加简单,每一次输出的时候均调用printk,只需要在中断发生时做中断的处理即可

然后我对Github上的代码添加了一些自己的注解,见下图:

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

最后是之前课上我觉得有必要知道的一些小tips,见下图:

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

实验感悟:

此次实验我了解到三个非常重要的寄存器,ebp、esp和eip,而在课上可以知道我们定义的Thread即是用来保存eip和esp的。对于tPcb,我知道了他是用来表示进程的,即是用来对堆栈进行初始化的。现在我对时间中断的过程和原理比之前了解了许多。CPU每过一个时间点就产生一个时间中断。

—恢复内容结束—

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849