博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个简单的时间片轮转多道程序内核代码分析--20135334赵阳林
阅读量:6515 次
发布时间:2019-06-24

本文共 1436 字,大约阅读时间需要 4 分钟。

实验目的:

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

实验过程:

登陆实验楼虚拟机http://www.shiyanlou.com/courses/195

打开终端shell,输入以下命令:

cd LinuxKernel/linux-3.9.4

qemu -kernel arch/x86/boot/bzImage

会弹出一个QEMU终端窗口

mykernel

里面会不停的交错输出“my_start_kernel here”和“my_timer_handler here”

这其实分别来自两个不程序产生的进程,一个来自程序mymain.c,另一个来自myinterrupt.c

mymain.c源码如下(省略了引用头部分,下同):

void __init my_start_kernel(void)

{

int i = 0;

while(1)

{

i++;

if(i%100000 == 0)

printk(KERN_NOTICE "my_start_kernel here  %d \n",i);

}

}

可以看出在做一个无限循环,每100000次循环向终端输出1次“my_start_kernel here”+累计循环次数。

myinterrupt.c源码如下:

void my_timer_handler(void)

{

printk(KERN_NOTICE "\n>>>>>>>>>>>>>>>>>my_timer_handler here<<<<<<<<<<<<<<<<<<\n\n");

}

当时钟中断被调用时,该程序向终端输出“>>>>>>>>>>>>>>>>>my_timer_handler here<<<<<<<<<<<<<<<<<<”信息。

实验分析:

当mykernel自制操作系统启动后,即qemu命令执行后,系统会首先调用mymain产生一个进程,该进程内while循环条件恒为1所以永远执行输出“my_start_kernel here”+累计循环次数,没有结束的时候。此时由系统时钟中断触发调用myinterrupt产生一个新进程,并输出“my_timer_handler here”,结束后返回mymain产生的进程继续执行,等待下一次系统时钟中断触发调用myinterrupt产生一个新进程,myinterrupt产生的新进程和上一次的属于不同的进程,而mymain由于循环没有终止的时候,所以永远是原来的那个进程。

通过观察可以发现,当执行myinterrupt后返回mymain时,终端输出的累计循环次数是连续的,并没有中断或重置,说明CPU和内核代码共同实现了保存现场和恢复现场的功能,会将一些重要的寄存器,比如eip、ebp、esp等保存下来,等待切换回来的时候继续执行。

实验总结:

通过该实验操作,成功实现了一个简单的时间片轮转多道程序,通过一个精简的操作系统内核,完成了一个简单的操作系统功能。

计算机有三个法宝:存储程序计算机、函数调用堆栈、中断

操作系统有两把宝剑:中断上下文、进程上下文切换

由于CPU只有一套寄存器,同一时间只能处理一个进程(暂且只考虑单核CPU),所以理论上只能单任务顺序执行,但基于三个法宝和两把宝剑,操作系统得以实现多任务操作。

转载于:https://www.cnblogs.com/EliteDci/p/5247040.html

你可能感兴趣的文章
软考 2018年下半年卷 错题知识点记录
查看>>
仿网易邮箱5.0版UI
查看>>
winsow xp不能安装软件, 提示"中断" 是因为设置了 软件限制策略
查看>>
as3调用外部应用程序 as调用外部exe文件as3调用bat文件 未测试
查看>>
jQuery清空标签内容--防止内存泄露
查看>>
关于 HandlerMethodArgumentResolver 类 以及 WebArgumentResolver 类 自定义解析参数
查看>>
30个php操作redis常用方法代码例子
查看>>
阿里PB级Kubernetes日志平台建设实践
查看>>
监听者模式实践-java事件和事件监听器
查看>>
比RBAC更好的权限认证方式(Auth类认证)
查看>>
httpd之编译安装详解
查看>>
服务器磁盘采购分析
查看>>
Java IO 之 InputStream源码
查看>>
PHP中is_callable()函数的用法详解
查看>>
Node.js股票模拟交易后台
查看>>
android动画
查看>>
新书试读_信息系统项目管理师考试考点分析与真题详解
查看>>
LVS Nginx HAProxy 优缺点
查看>>
images对象实现图片幻灯片
查看>>
Oracle 12c 日常维护
查看>>