zoukankan      html  css  js  c++  java
  • 20135316王剑桥Linux内核学习笔记第四周

    20135316王剑桥 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC 1000029000
    1、内核态:在高执行级别,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动。从而保证真个系统更稳定。
    2、Intel x86的CPU有四种不同执行级别0—3,Linux只使用其中的0和3来分别表示内核态和用户态。
    3、Cs寄存器的最低两位表示当前代码的特权级别。
    4、0xc0000000以上的地址空间只能在内核态下被访问;0x00000000-0xbfffffff的地址空间在两种状态下都能被访问。(逻辑地址)
    5、中断处理是从用户态进入内核态的主要方式。
    6、系统调用是一种特殊的中断。
    7、从用户态切换到内核态时必须保存用户态的寄存器上下文。中断/int指令会在堆栈寄存器上保存一些寄存器的值。(用户态栈顶地址、当时的状态字、当时的cs:eip的值)
    8、中断发生之后第一件事就是保存现场。保护现场就是进入中断程序,保存需要用到的寄存器的值,恢复现场就是退出中断程序,回复保存寄存器的数据。中断处理结束最后一件事就是恢复现场。
    9、操作系统为用户态进程与硬件设备进行交互提供了一组接口—系统调用:把用户从底层的硬件编程中解放出来;极大地提高了系统的安全性;使用户程序具有可移植性。
    10、应用编程接口API(一个函数),不是每一个API都对应一个系统调用。
    11、系统调用的三层皮:xyz,system-call和sys-xyz。
    12、当用户态进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数
    13、系统调用号使用eax寄存器。每个系统调用至少有一个参数。
    14、寄存器传递参数的限制:每个参数的长度不能超过寄存器的长度(32位)、在系统调用号(eax)之外,参数的个数不能超过六个(ebx,ecx,edx,esi,edi,ebp)。如果超过六个则将某一个寄存器参数作为一个指针,指向一块内存。
    实验过程:
    1、库函数API使用系统调用

    2、C代码中嵌入汇编代码使用系统调用

    3、实验结果

    总结:通过这次课的学习以及对实验的操作,使我认识到,系统调用大大致过程:应用程序在用户态调用API函数,该函数将对应的系统调用号及参数保存,触发软中断,然后陷入内核态,system_call根据系统调用号调用对应的内核函数,内核函数执行完毕后将结果存放的eax中并返回给程序,程序返回的用户态。

  • 相关阅读:
    asp.net 网页标题、关键字、描述
    星级评分jQuery插件
    以jquery为基础的星星评分
    投票系统显示结果jQuery插件
    JAVASCRIPT模拟模式对话窗口
    Repeater 嵌套代码
    window服务程序安装卸载批处理文件
    c#window程序开发入门系列自学笔记
    jquery 模式对话框改进版
    php的正则表达式完全手册
  • 原文地址:https://www.cnblogs.com/20135316wjq/p/5294961.html
Copyright © 2011-2022 走看看