Linux内核分析第二周总结
计算机是如何工作的?
计算机的“三大法宝”:
- 存储程序计算机
- 函数调用堆栈
- 中断机制
堆栈是计算机运行高级语言的基础
函数调用堆栈:
32位X86通过函数调用堆栈来传递参数
使用eax保存返回地址

堆栈寄存器和堆栈操作:
ebp仅记录当前函数的调用基址
堆栈相关寄存器:

其他关键寄存器:

函数调用堆栈的工作机制:
call指令:将eip中下一条指令的地址保存在栈顶
函数调用时堆栈的变化:


生成反汇编文件:
- gcc -g
- objbump –S
Mykernel实验模拟计算机硬件平台:
- 中断机制为多道程序设计打下基础
- 当一个中断信号发生的时候,CPU把当前的eip,esp,ebp都压到内核堆栈中
- CPU和内核代码共同实现了保存现场和恢复现场
- Mykernel实验模拟计算机硬件平台模拟了时钟中断
实验:

分析:
1.mypcb.h

- 14行:定义thread用于存储eip和esp
- 20、21、22行:定义pid就是进程的ID;进程状态;内核堆栈(进程管理相关的数据结构)
- 25行:程序入口
- 26行:用链表连接起来
- 29行:调度器
2.mymain.c



- 20行:设定是需要调度的标准
- 30、31、32行:初始化0号进程的数据结构;状态是正在运行;入口是myprocess
- 33行:堆栈的栈顶
- 35行:创建更多的进程。
- 42行:指向下一个进程。
- 46行:启动0号进程。
- 48行-56行:汇编代码,内核初始化工作
- 52行:ret之后0号进程正式启动。
3.myinterrupt.c



- 22-25行:my_timer_handler 函数会被内核周期性的调用,每调用1000次,就去将全局变量my_need_sched的值修改为1,通知正在执行的进程执行调度程序my_schedule
- 57-71行:两个正在运行的进程之间进行上下文切换
- 58行:把当前进行的ebp保存起来
- 59行:把当前进程的esp赋给%0(指的是thread.sp)
- 60行:把%2(指下一个进程的sp)放入esp中
- 61行:$1f是接下来的标号1:的位置,把eip保存
- 62行:把下一个进程eip压栈
- 63行:下一个进程开始执行
- 66、67行:将该进程置为执行状态,作为当前进程
- 71-79行:内嵌汇编
总结:
进程是动态执行的实体,内核是进程的管理者。进程不但包括程序的指令和数据,而且包括程序计数器和CPU的所有寄存器以及存储临时数据的进程堆栈。所以,正在执行的进程包括处理器当前的一切活动。
进程既可以在用户态下运行,也能在内核下运行,只是内核提供了一些用户态没有的核心服务,因此进程在访问这些服务时会产生中断,必须进行用户态与内核态的切换。
掌握了函数调用堆栈、进程上下文切换方法。
Linux内核分析第二周总结的更多相关文章
- linux内核分析第二周
网易云课堂linux内核分析第二周 20135103 王海宁 <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- LINUX内核分析第二周学习总结——操作系统是如何工作的
LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第二周--操作系统是如何工作的
Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析第二周学习博客——完成一个简单的时间片轮转多道程序内核代码
Linux内核分析第二周学习博客 本周,通过实现一个简单的操作系统内核,我大致了解了操作系统运行的过程. 实验主要步骤如下: 代码分析: void my_process(void) { int i = ...
- linux内核分析第二周-完成一个简单的时间片轮转多道程序内核代码
中断时计算机运行的一个非常重要的功能.之所以重要,是因为由于种种原因,计算机不能将一个程序从头执行到尾不间断,而是可能会出现很多像等待输入设备输出设备的过程,如果没有中断系统,CPU只能等待,造成资源 ...
- Linux内核分析第二周学习总结:操作系统是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 ...
- Linux内核分析第二周:操作系统是如何工作的
第一讲 函数调用堆栈 计算机是如何工作的? (总结)——三个法宝 1,存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 2,函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆 ...
- linux内核分析 第二周 操作系统是如何工作的
银雪纯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 ...
- Linux内核分析 第二周
Linux内核分析——完成一个简单的时间片轮转多道程序内核代码 张潇月+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100 ...
随机推荐
- Beta阶段第四次冲刺
Beta阶段第四次冲刺 严格按照Git标准来,组员有上传Git的才有贡献分没有的为0 代码签入图 1.part1 -站立式会议照片 2.part2 -项目燃尽图 3.part3 -项目进展 1.正在进 ...
- myeclipse10无法weblogic10.3的问题解决方案
在完成了myec与wl10的基本配置后,启动报如下错误 Parsing Failure in config.xml: java.lang.AssertionError: java.lang.Class ...
- javascript实现百度地图鼠标滑动事件显示、隐藏
其实现思路是给label设置样式,我们来看下具体做法吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var label = new BMap.Labe ...
- App常见产品问题及预防方法
01界面适配 a:手机分辨率为1920x7080的高分辨率手机,在调整手机字体大小时,会导致页面显示出现变形: b:因用户设置的特殊字体导致列表的字母条不显示: c:某些banner 图片在部分机型只 ...
- OpenCV——KAZE、AKAZE特征检测、匹配与对象查找
AKAZE是KAZE的加速版 特征点查找和绘制:把surf中的surf改成KAZE或AKAZE即可 #include <opencv2/opencv.hpp> #include < ...
- JAVA框架 Spring junit整合单元测试
一.准备工作 1:Junit的需要的jar包: 2.spring的整合的jar包:spring-test-4.2.4.RELEASE.jar 3.代码实现 1) //导入整合的类,帮我们加载对应的配置 ...
- odoo 打印单
<td style="word-wrap:break-word;width:20%;font-size:16"> <t t-foreach="l.pro ...
- [HAOI2010]订货 BZOJ2424
分析: 能看出来,这是一个费用流的题,建图很朴实,i连i+1,费用为存储费用,流量为仓库容量,之后S连i,费用为单价,流量为inf,之后i连T,流量为a[i],费用为0,之后裸上费用流... 附上代码 ...
- python_基础硬件知识
通过学习这一篇章的内容,回顾了<数字逻辑><计算机组成原理><操作系统> 这几门课的相关知识 有时候,总是要了解一些基本,才能更容易理解程序 以下是我的一些听课记录 ...
- 2017-2018 Exp7 网络欺诈技术防范 20155214
目录 Exp7 网络欺诈技术防范 实验内容 信息收集 知识点 Exp7 网络欺诈技术防范 实验内容 实验环境 主机 Kali 靶机 Windows 10 实验工具 平台 Metaploit 信息收集 ...