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 ...
随机推荐
- 【Alpha Go】Day 1 !
[Alpha Go]Day 1 ! Part 0 · 简要目录 Part 1 · 任务分配 Part 2 · 他日安排 Part 3 · 预期任务量 Part 4 · 团队贡献值计算原则 Part 1 ...
- Kafka安装及使用
zookeeper安装 下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ 我这里下载的是zookeeper-3.4.13版本,下载后解压在E: ...
- 小程序push数组,渲染不出来解决办法
1.在data中,定义一个空数组: zhou_time:[] 2.声明: var zhou_time = this.data.zhou_time; 3.PUSH赋值: zhou_time.push({ ...
- FastDFS分布文件系统Java客户端使用
原文链接:http://blog.csdn.net/xyang81/article/details/52847311 Java客户端源代码和jar:链接:http://pan.baidu.com/s/ ...
- ES6标准入门之字符串的拓展讲解
在开始讲解ES6中字符串拓展之前,我们先来看一下ES5中字符串的一些方法. 获取字符串长度 str.length 分割字符串 str.split() 拼接字符串 str1+str2 或 str1.co ...
- OpenCV——图像的载入、显示、输出到文件和滑动条、鼠标操作
图像的载入.显示.输出到文件和滑动条 滑动条 示例: 鼠标操作
- kubernetes 资源请求和限制
1. spec: containers: - name: example resources: requests: ...
- PHP设计模式——訪问者模式
声明:本系列博客參考资料<大话设计模式>,作者程杰. 訪问者模式表示一个作用于某对象结构中的各元素的操作. 它使你能够在不改变各元素类的前提下定义作用于这些元素的新操作. UML类图: w ...
- 20155234 Exp3 免杀原理与实践
使用msf编码器生成jar包 使用指令:msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.157.141 lport=5234 x> ...
- 20155320《网络对抗》MSF基础应用
20155320<网络对抗>MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode 于exploit,我觉得exploit是利用一些工具和方法,通过 ...