二,操作系统是如何工作的

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的一些相关知识,最后学习了一下时间片轮转的实验举例。总的来说内容不多也不算少,还是需要一些时间来消化和理解的。很不错的一次自学。

Linux内核分析 02的更多相关文章

  1. 《Linux内核分析》实践4

    <Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...

  2. Linux内核分析作业 NO.5

    拔掉系统调用的三层皮(下) 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  3. Linux内核分析作业 NO.4

    扒开系统调用的三层皮(上) 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  4. LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

    LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  5. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

  6. Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序

            1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...

  7. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  8. linux内核分析作业5:分析system_call中断处理过程

    1.增加 Menu 内核命令行 调试系统调用. 步骤:删除menu git clone        (tab) make rootfs 这就是我们将 fork 函数写入 Menu 系统内核后的效果, ...

  9. linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作

    一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...

随机推荐

  1. MQTT-SN协议乱翻之小结篇

    前言 这里简单做一些小结和对比,针对前面的协议翻译部分,一阶段的学习完结. MQTT-SN VS MQTT MQTT-SN基于MQTT原有语义,但做了很多的调整.比如: 一个CONNECT消息被拆分为 ...

  2. 【BZOJ3275】Number 最小割

    [BZOJ3275]Number Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c ...

  3. OneThink生成分类树方法(list_to_tree)使用!

    具体方法: Application / Common / Common / function.php 下的 224行: function list_to_tree($list, $pk='id', $ ...

  4. python range函数与numpy arange函数

    1.range()返回的是range object,而np.arange()返回的是numpy.ndarray() range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向 ...

  5. python2在安装pywin32后出现ImportError: DLL load failed 解决方法

    python2在安装pywin32后出现ImportError: DLL load failed 解决方法 在python2中有时候会出现: import win32api   ImportError ...

  6. 理论实践:循序渐进理解AWR细致入微分析性能报告

    1. AWR 概述 Automatic Workload Repository(AWR) 是10g引入的一个重要组件.在里面存贮着近期一段时间内(默认是7天)数据库活动状态的详细信息. AWR 报告是 ...

  7. mongoexport

    导数据 数据同步 mongodb无自增id 数据断点 mongoexport — MongoDB Manual https://docs.mongodb.com/manual/reference/pr ...

  8. Python开发【数据结构】:算法(二)

    堆排序 1.—树与二叉树简介 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果n=0,那这是一棵空树: 如果n>0,那存在1个节点作为树的根节点 ...

  9. Instagram 架构分析笔记(转)

    原文:http://dbanotes.net/?s=Instagram+%E6%9E%B6%E6%9E%84%E5%88%86%E6%9E%90%E7%AC%94%E8%AE%B0 作者:冯大辉 In ...

  10. display属性的表格布局相关属性

    基于CSS属性display:table的表格布局的使用   项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的tabl ...