zoukankan      html  css  js  c++  java
  • Linux内核分析第四周学习总结——系统调用的工作机制

    Linux内核分析第四周学习总结——系统调用的工作机制

    内核态

    执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级。

    用户态

    执行级别低,只能访问0x00000000-0xbfffffff之间的逻辑地址,权限分级为3级。

    区分与切换

    CS:eip(代码段选择寄存器/偏移量寄存器)中,CS寄存器最低两位表示特权级。状态通过中断来切换,包括硬件中断和系统调用两种方式。

    寄存器上下文

    从用户态切换到内核态时,int指令会保存用户态的寄存器上下文到内核堆栈中,同时会把当前内核态的一些信息加载,例如cs:eip指向中断处理程序入口。

     用户态栈顶地址

     当时状态字

     当时cs:eip

    系统调用三层皮(以API xyz为例)

     API xyz

     中断向量system_call

     中断服务程序sys_xyz

    系统调用号通过eax寄存器传递,将API xyz和中断服务程序sys_xyz关联起来。

    Linux也可以通过int $128来执行系统调用

    实验过程:

    选用第2号调用fork

    1.使用库函数API()

    2.内嵌汇编

    原理分析:通过将调用号$0x2传入寄存器%eax,然后使用int指令执行系统调用。

    运行结果

    总结:

    对于系统调用的工作机制,我觉得我们可以将诸多系统调用视作按照序号排好顺序的黑箱,只要知道了一个系统调用的号,按照其API或者汇编格式的调用方法,我们就可以使用这个黑箱的功能,完成一定的任务,而黑箱的内容正是系统给我们提供的服务,帮我们从硬件操作中抽离出来,提高系统的安全性。

    zl + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

  • 相关阅读:
    sratookit
    转录组测序
    单菌基因组测序常见问题
    微生物测序样本准备方法总结
    Review:Microbiota, metagenome, microbiome傻傻分不清
    扩增子、宏基因组测序问题集锦
    扩增子图表解读8网络图:节点OTU或类Venn比较
    扩增子图片解读7三元图
    扩增子图表解读5火山图:差异OTU的数量及变化规律
    扩增子图表解读6韦恩图:比较组间共有和特有OTU或分类单元
  • 原文地址:https://www.cnblogs.com/20135319zl/p/5292048.html
Copyright © 2011-2022 走看看