基于时间片轮转多道程序内核代码分析操作系统的工作过程
来源:互联网 发布:淘宝外卖网页版 编辑:程序博客网 时间:2024/05/14 02:19
一、计算机利用堆栈实现函数调用时堆栈的变化:
1.函数的堆栈框架:
建立:push %ebp
movl %esp,%ebp
拆除:movl %ebp,%esp
popl %ebp,%ebp
ret
二、分析简单的时间片轮转多道程序内核代码,理解操作系统的运行:
1.一个简单的时间片轮转多道程序内核代码:
(1)mypcb.h:
代码分析:
Thread:定义ip和sp
struct PCB:定义进程的id,状态(state),堆栈,入口,链表(next),进程(my_schedule)
(2)mymain.c:
代码分析:
1)#inclede "mypcb.h":申明了当前pcb的数组,指针;
2)my_start_kernel:初始化了0号进程,正在运行;入口;栈顶;next是指向自己,因为此时只有0进程;
同理建立更多的进程,并把新的进程加到进程列表的尾部;
start process 0 by task[0]:从0进程开始运行。此处用到嵌入式汇编代码(完成了从0号进程设定的堆栈和0号进程的入口的cpu
运行环境的构建)。
此时my_start_kernel(内存的初始化)已经执行完毕并且将0号进程启动起来。
3)void my_process(void):0号进程的工作——主动调度输出,实现一千万次循环之后才调度一次。
(3).myinterrupt.c:
代码分析:
1).my_timer_handel(void):设置时间片的大小;my_need_sched不等于1000,设其为1;执行my_schedule。
2).my_schedule:把当前进程赋给next,如果下个进程为0(正在进行),则切换到volatile。
3).volatile:(此段代码即为进程切换的关键所在)把当前进程的ebp保存起来。把当前进程的esp赋给0,把next进程的sp放到esp里,
把eip保存起来,把next进程的eippush到堆栈里,执行下个进程。
三、基于时间片轮转多道程序内核代码的运行实验:
代码分析:
qemu -kernel arch/x86/boot/bzImage即为运行进程调度的指令代码。可以主观的去改动时间片的大小,从而改变调度的频率大小。
vi mymain.c ;vi myinterrupt.c是用于查看程序的指令。
三、实验的结果和其截图:
四、实验总结:
通过该实验,理解了计算机在工作的时候是如何调用堆栈以及堆栈的具体变化过程;对于一个简单的时间片轮转多道程序内核的代码有了深刻的理解,对于进程的启动和切换有了更深的理解。
庄华健
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
- 基于时间片轮转多道程序内核代码分析操作系统的工作过程
- 操作系统是如何工作的-------通过一个简单的时间片轮转多道程序内核代码分析
- 简单的时间片轮转多道程序内核代码分析
- 通过一个简单的时间片轮转多道程序内核代码,分析linux操作系统系统
- 基于mykernel的一个简单的时间片轮转多道程序内核代码分析
- Linux内核分析课程--完成一个简单的时间片轮转多道程序内核代码,理解操作系统是如何工作的
- 一个简单的时间片轮转多道程序内核操作系统工作流程
- Linux内核分析2:一个简单的时间片轮转多道程序内核代码分析
- 一个简单的时间片轮转多道程序内核代码
- 一个简单的时间片轮转多道程序内核代码
- 一个简单的时间片轮转多道程序内核代码
- 简单的时间片轮转多道程序内核代码
- 一个简单的时间片轮转多道程序内核代码
- 一个简单的时间片轮转多道程序内核代码
- 简单的时间片轮转多道程序内核代码
- 操作系统是如何运行的(时间片轮转多道程序内核代码)
- 从一个简单的时间片轮转多道程序内核代码看操作系统如何运行
- Linux内核分析(二) 一个简单的时间片轮转多道程序内核代码
- java 类加载后不一定会对类进行初始化
- AngularJS 入门4
- hdu 1847 Nim博弈
- Leetcode #3 Longest Substring Without Repeating Characters 解题小结
- BestCoder Round #74 (div.2) A.LCP Array & B.Shortest Path
- 基于时间片轮转多道程序内核代码分析操作系统的工作过程
- atexit函数示例
- threejs使用概述
- Codis 高可用负载均衡群集的搭建与使用
- 书生妄言,就聊聊eclipse安装问题吧
- Java 自己补充知识(3)逻辑运算 Switch String三者 异常
- Latex批注功能实现
- jqGride 插件使用简介
- 位运算及其应用详解