Linux内核分析 02
二,操作系统是如何工作的
1、函数调用堆栈
三大法宝:存储程序计算机 函数调用堆栈 中断机制
堆栈:是C语言程序运行时必须的一个记录调用路径和参数的空间。是计算机内部现成的东西,我们直接使用。
包括函数调用框架、传递参数、保存返回地址、提供局部变量的空间等等。
堆栈相关寄存器:esp堆栈指针(栈顶)、ebp基址指针(栈底) * ebp在C语言中用作记录当前函数调用基址。
堆栈操作:push(栈顶地址减少四个字节)、pop(栈顶地址增加四个字节)(32位)
其他关键寄存器:cs:eip,总是指向下一条指令的地址。(call、ret)
//建立被调用函数的堆栈框架
pushl %ebp
movl %esp,%ebp
//被调用者函数体
//do sth
//拆除被调用者函数的堆栈框架
movl %ebp,%esp
popl %ebp
ret
call指令是将eip中下一条指令的地址保存在栈顶,设置eip指向被调用程序的代码开始处。
ret将该地址恢复到eip中
* 举例应用:首先,使用gcc -g 生成test.c的可执行文件test;然后再使用objdump -s获得test的反汇编文件。
有压栈必有出栈,有生必有死。
函数的返回值通过eax寄存器传递。
2,借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断
中断机制如何工作:CPU和内核代码共同实现保存现场和恢复现场。
mykernel的实验,诸如下图:
3,在mykernel基础上构造一个简单的操作系统内核
C语言代码中嵌入汇编代码: asm("statements" : output_regs :inout_regs :clobbered_regs); 输入、输出、破会描述、编译器优化、不允许编译器优化等等。
mysceh的具体内容
两个正在运行的进程之间做进程上下文转换
* 操作系统的两把剑:中断上下文和进程上下文的切换
时间片轮转的例子,时间片可以改小一点。
4,学习心得体会
基本了解了函数调用堆栈的过程和原理,中断机制的工作原理,以及mykernel的一些相关知识,最后学习了一下时间片轮转的实验举例。总的来说内容不多也不算少,还是需要一些时间来消化和理解的。很不错的一次自学。
转载于:https://www.cnblogs.com/KG35/p/5247310.html
Linux内核分析 02相关推荐
- 《Linux内核分析》实践4
<Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...
- linux 内核 核心代码,8分钟掌握Linux内核分析的核心科技
原标题:8分钟掌握Linux内核分析的核心科技 作者: OUYANG_LINUX007 来源: http://blog.csdn.net/ouyang_linux007/article/details ...
- linux内核分析(转自某位大哥网上的笔记)
启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...
- Linux内核分析——可执行程序的装载
链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...
- LINUX内核分析第二周学习总结——操作系统是如何工作的
LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- 《Linux内核分析》实验一
陈智威,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课堂学习笔记: 作业截图: 汇编代码堆栈分析: ...
- Linux 内核分析 之一:How Computer Works 实验
说明 欧长坤 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操 ...
- linux内核分析 网络九,“Linux内核分析”实验报告(九)
一 Linux内核分析博客简介及其索引 本次实验简单的分析了计算机如何进行工作,并通过简单的汇编实例进行解释分析 在本次实验中 通过听老师的视频分析,和自己的学习,初步了解了进程切换的原理.操作系统通 ...
- Linux内核分析作业第二周
操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...
最新文章
- Espresso小试
- php web开发应用教程,PHP-Web 应用程序开发:使用模板_PHP
- 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
- java obix_obix协议在java中的配置和使用详解
- python实用的几个脚本程序(自己在用)
- Android mc怎么和win10联机,我的世界手机版与win10版联机可完美互通
- 实现原理 扫描枪_条码扫描枪原理
- 2017年国家公务员考试行测错题集(省级)
- linux如何用命令进入u盘,linux 下如何打开u盘
- 解决flex布局的space-evenly兼容性问题
- 1-5、PS基础操作
- python制作会动的表情包_Python自动生产表情包
- 【视线估计】Realtime and Accurate 3D Eye Gaze Capturewith DCNN-based Iris and Pupil Segmentation
- Notes from Google Play | Google Play 持续助力您的应用和游戏
- 挚爱家乡五常大米的味道
- 杰理之优化电脑长时间播放没声音【篇】
- 一个高性能服务器需要关注的地方
- 1024程序员节来喽
- categories与set_categories
- JetBrains PyCharm 设置显示行号
热门文章
- nyoj239 月老的难题 二分图 匈牙利算法
- Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...
- 用 .NET 3.5 创建 ToJSON() 扩展方法
- webpackjsonp 还原_具有催化CO2还原性能的非贵金属配合物的配体设计
- matlab里插入行和列
- win7链接html线到屏幕上,为你解决win7系统html文件图标变成空白的具体技巧 - win7吧...
- linux系统查看当前安装字库,linux下怎样安装中文字体?
- 王者荣耀服务器维护啥时候结束,王者荣耀维护几点结束今天?11月10日维护公告...
- java arraylist 重复_Java中ArrayList去除重复元素
- xshell 秘钥连接_如何使用PuTTY和xshell 分别远程连接linux,并配置秘钥认证