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 ...
随机推荐
- http-server
http-server是基于node.js的一个简单.零配置的命令行web服务器,可以方便实现跨域资源请求, #全局安装: npm install http-server -g: 全局安装后就可以通过 ...
- python第三十八课——面向对象(一)
1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...
- Java POI单元格使用心得
1: /** * Created by liuguangxin on 2018/5/16. * <p> * MergeRegion:表示excel中cell的信息,startRow与end ...
- MetaMask/eth-block-tracker
https://github.com/MetaMask/eth-block-tracker A JS module for keeping track of the latest Ethereum b ...
- 【转】Android7.0适配心得
本文出自:贾鹏辉的技术博客(http://www.devio.org) http://www.devio.org/2016/09/28/Android7.0%E9%80%82%E9%85%8D%E5% ...
- $.toJSON和eval的区别
1.$.toJSON是jquery的方法.eval是javascript的方法 2.eval兼容的浏览器多,$.toJSON有可能解析不了的json格式的数据,eval可以.
- Android Edittext聚焦时输入法挡住了EditText输入框的两种解决方案
方案一.把整个布局文件用ScrollView套住.这样当你聚焦时虽然输入法也能够挡住一些输入框,但是你可以通过手动滑动看被挡住的内容. 方案二.在Activity中设置android:windowSo ...
- day80
昨日回顾 上节回顾: 中间件: -django请求生命周期: -中间件:对全局请求的修改,和全局响应的修改 -process_request:从上往下执行 -process_response:从下往上 ...
- jquery mouseover与mouseenter区别
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Transaction Check Error:file /usr/libexec/getconf/default conflicts between attempted installs of gcc-6.4.1-1.fc25.i686 and gcc-6.4.1-1.fc25.x86_64
今天在我的ubuntu系统上使用yum来安装软件时出错了错误:Transaction Check Error:file /usr/libexec/getconf/default conflicts b ...