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

  • 相关阅读:
    canvas小球动画
    JS闭包
    视图&&事务&&索引&&触发器&&流程控制
    多表关系和查询
    表操作和mysql支持的数据类型
    models模型层进阶
    模型层之聚合查询&&分组查询&&查询&&Q查询&&事务&&查询优化
    models模型层环境配置和表查询
    模型层之orm介绍
    views视图层
  • 原文地址:https://www.cnblogs.com/KG35/p/5247310.html
Copyright © 2011-2022 走看看