zoukankan      html  css  js  c++  java
  • 20135202闫佳歆--week2 操作系统是如何工作的--学习笔记

    此为个人学习笔记存档

    week 2 操作系统是怎么工作的

    一、计算机是如何工作的?——三个法宝

    (一)三个法宝

    1.存储程序计算机

    所有计算机的基础性的逻辑框架。

    2.函数调用堆栈

    在低级语言中并不很重要,但是堆栈技术是高级语言可以运行的基础。

    3.中断机制

    有了中断后,就有了多道程序设计
    每个程序有自己的执行流。
    中断发生时,cpu把当前的eip等压入内核堆栈中,然后把eip指向中断处理程序的入口。

    (二)深入理解函数调用堆栈

    1.堆栈

    堆栈是c语言程序运行时必须的一个记录调用路径和参数的空间

    • 函数调用框架
    • 传递参数(32位x86)
    • 保存返回地址
    • 提供局部变量空间
    • ……

    2.堆栈相关寄存器

    esp 堆栈指针
    ebp 基址指针(在c语言中用作记录当前函数调用基址)

    3.堆栈操作

    push 栈顶地址减少4个字节(32位)
    pop 栈顶地址增加4个字节

    4.其他关键寄存器

    1. 代码段寄存器cs

      cs:eip:总是指向下一条指令的地址。
      更改?

      • call:将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址
      • ret:从栈顶弹出原来保存在这里的cs:eip的值,放入cs:eip中

    5.函数的堆栈框架

    1. 建立被调用函数的堆栈框架
      在该函数的函数体前加:

      pushl %ebp
      movl %esp, %ebp

    2. 拆除被调用函数的堆栈框架
      在该函数的函数体后加:

      movl %ebp, %esp
      popl %ebp
      ret

    (三)参数传递与局部变量

    在例子中,参数传递?
    z = p2(x,y);

    pushl 0xfffffff8(%ebp)
    pushl 0xfffffff4(%ebp)  ;先把y压入栈,再把x压入栈。因为都存在栈里,所以可以变址寻址
    call 804839b<p2>
    add $0x8,%esp   ;把之前压进来的取消掉
    mov %eax,0xfffffffc(%ebp)   ;赋给z
    

    二、借助linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

    1.利用mykernel实验模拟计算机硬件平台

    三、在mykernerl基础上构造一个简单的操作系统内核

    (一)C语言中嵌入汇编代码的写法

    注意事项:

    1. movl $0,%%eax 中,第一个百分号是转义字符,第二个是%eax
    2. addl %1,%%eax 中,%1是指下文中输出和输入的编号,编号从0开始。
    3. "c"(val1)表示用ecx寄存器存储val1的值。同理,"d"(val2)表示用edx寄存器存储val2的值。
    4. "=m"(val3)表示把val3的值写入内存变量。=只写,m指内存。
    5. 具体见修饰符。

    (二)一个简单的操作系统内核源代码

    操作系统的“两把剑”:

    1.中断上下文,即中断处理程序。
    2.进程上下文的切换

    两个情况:
    1.下一个进程next->state == 0 即正在执行时。
    2.进程是一个新进程,还从未执行过。

  • 相关阅读:
    抽象代数学习笔记
    WC2021 游记
    简单的数学题
    前缀和公式
    杜教筛
    [模板]BZOJ4756线段树合并
    SPOJ 694
    bzoj1367 可并堆
    莫比乌斯反演(理论)
    es6 Set数据结构
  • 原文地址:https://www.cnblogs.com/20135202yjx/p/5246401.html
Copyright © 2011-2022 走看看