朱荟潼 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课http://mooc.study.163.com/course/USTC 1000029000

知识点梳理

一、用户态、内核态和中断处理过程

1.级别、如何区分

2.中断处理,用户态到内核态

3.保护现场和恢复现场

二、系统调用概述

1.操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用

  1. 1.把用户从底层硬件编程中解放;
  2. 2.提高系统安全性;
  3. 3.用户程序具有可移植性;

2.API(应用编程接口)和系统调用关系

  1. 1.API是函数定义;
  2. 2.系统调用时通过软中断向内核发出明确请求;
  1. 3.a.API可直接提供用户态服务(如:数学函数);b.一个API调用几个系统调用;c.不同API可调用同一个系统调用;

3.Libc库

  1. 1.定义了一些API引用了封装例程;
  2. 2.目的发布系统调用;
  3. 3.一般每个系统调用对应一个封装例程,库再用这些封装例程定义出给用户的API

4.返回值

  1. 1.大多封装例程返回一个整数,其值依赖于相应的系统调用;
  2. 2.-1表示内核不能满足进程的请求;
  3. 3.Libc定义的errorno变量包含特定出错码;

5.处理应用程序、封装例程、系统及系统调用服务例程关系

三层皮:API xyz,中断向量system_call,中断服务程序sys_xyz

6.系统调用号将xyz和sys_xyz关联起来;用eax寄存器来传递参数;

7.系统调用的传递参数方法

  1. 1.实际的值;
  2. 2.用户态进程地址空间的变量的地址;
  3. 3.包含指向用户态函数的指针的数据结构的地址;

寄存器传递参数的限制

8.system_call是linux所以系统调用的入口

三、使用库函数API和C代码中嵌入汇编代码

1.C代码中嵌入汇编代码

详细见第二周学习总结 (http://www.cnblogs.com/zzzz5/p/5232145.html)

2.获取系统当前时间

  1. asm volatile(
  2. "mov $0,%%ebx\n\t" ;系统调用传递第一个参数使用ebx,把ebx清零
  3. "mov $0xd,%%eax\n\t" time的系统调用号是13
  4. "int $0x80\n\t"
  5. "mov %%eax,$0\n\t" eax放入tt变量中,返回值
  6. :"=m"(tt)
  7. );

系统调用号如:

具体系统调用号参见:http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl

3.实践(11号——fork)

源代码fork.c



嵌入式汇编代码fork_asm.c



总结

1.API是一个函数概念,它可能会使用系统调用(系统调用是用户态程序操作硬件的接口)。每次系统调用都会向内核请求软中断,即执行int $0x80指令。

2.int 0x80该指令的作用是找到系统调用处理程序(中断处理程序)。

3.使用iret指令返回到用户态。

4.系统是通过中断的方式将用户态转换为内核态,并通过调用系统函数来实现系统功能。当系统中断出现时,CPU保护现场和上下文切换来保护目前用户态所运行的状态,并通过返回系统调用函数的值来让用户判断是否已经有效地调用,结果如何。

5.系统调用是一个软中断,中断号是0x80,它是上层应用程序与Linux系统内核进行交互通信的唯一接口。通过int 0x80,触发系统调用。

20135337朱荟潼 Linux第四周学习总结——扒开系统调用的三层皮(上)的更多相关文章

  1. #Linux第四周学习总结——扒开系统调用的三层皮(上)

    Linux第四周学习总结--扒开系统调用的三层皮(上) 一.用户态.内核态和中断 系统调用通过库函数. 1.用户态和内核态 区分(不同的指令执行级别): 用户态:在相应的低执行状态下,代码的掌控范围受 ...

  2. LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”

    LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ...

  3. 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...

  4. 20135337朱荟潼 Linux第二周学习总结——操作系统是如何工作的

    一.计算机是如何工作的--总结 三个法宝 存储程序计算机.函数调用堆栈.中断机制 二.堆栈 1.是c语言程序运行时必须的一个记录调用路径和参数的空间. 函数调用框架.传递参数.保存返回地址.提供局部变 ...

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

    LINUX内核分析第五周学习总结--扒开系统调用的"三层皮"(下) 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>M ...

  6. Linux第五周学习总结——扒开系统调用的三层皮(下

    Linux第五周学习总结--扒开系统调用的三层皮(下) 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

  7. 2013337朱荟潼 Linux第五章读书笔记——系统调用

    摘要: [20135337朱荟潼]原创作品转载请注明出处 第五章 系统调用 5.1 与内核通信 中间层 作用三个:1.为用户空间提供一种硬件的抽象接口:2.保证系统稳定和安全:3.除异常和陷入,是内核 ...

  8. 《Linux内核分析》第五周学习总结 扒开系统调用的三层皮(下)

    扒开系统调用的三层皮(下) 郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给Men ...

  9. linux 内核 第四周 扒开系统调用的三层皮 上

    姬梦馨 原创作品 http://mooc.study.163.com/course/USTC-1000029000 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来:库函数帮我们把系 ...

随机推荐

  1. Math.min() / Math.max() 使用方法

    首先弄懂apply 和 call 都是js函数自带的方法.区别如下: apply和call的用法只有一个地方不一样,除此之外,其他地方基本一模一样 1. a.call(b,arg1,arg2…) 2. ...

  2. FreeChart柱状图中如何取消柱子的倒影

    JFreeChart柱状图中如何取消柱子的倒影,让柱子显示为一个平面图 Render 该怎么设置呢? 问题补充:已解决 intervalBarRender.setShadowVisible(false ...

  3. [NOIP2016 DAY1 T2]天天爱跑步-[差分+线段树合并][解题报告]

    [NOIP2016 DAY1 T2]天天爱跑步 题面: B[NOIP2016 DAY1]天天爱跑步 时间限制 : - MS 空间限制 : 565536 KB 评测说明 : 2s Description ...

  4. Netty入门(八)构建Netty HTTP/HTTPS应用

    HTTP/HTTPS 是最常见的一种协议,这节主要是看一下 Netty 提供的 ChannelHaandler. 一.HTTP Decoder,Encoder 和 Codec HTTP 是请求-响应模 ...

  5. java读写properties配置文件不改变属性的顺序和注释

    先贴代码 import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java ...

  6. VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 _GetRegistrySysColors@8 中被引用

    一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符 ...

  7. day25

    今日内容 1.组合 2.多态与多态性 3.封装 4.property 组合: 什么是组合? 是指某一对象拥有的一个属性,该属性的值是另一个类的对象 为何用组合? 就是通过为某个对象添加一个新的属性(另 ...

  8. #20155232《网络对抗》Exp9 Web安全基础

    20155232<网络对抗>Exp9 Web安全基础 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 WebGoat Webgoat是OWASP组织研 ...

  9. 20155330 《网络对抗》 Exp5 MSF基础应用

    20155330 <网络对抗> Exp5 MSF基础应用 实践过程记录 主动攻击实践:MS08_067漏洞攻击 攻击机:kali IP地址:192.168.124.132 靶机:windo ...

  10. 【第十三课】监控Linux系统状态

    目录 1.查看系统负载命令:w.uptime 2.vmstat详解 3.top动态查看负载 4.sar命令(监控网卡流量) 5.nload命令(监控网卡流量) 6.iostat iotop(监控IO性 ...