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

知识点梳理

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

1.级别、如何区分

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

3.保护现场和恢复现场

二、系统调用概述

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

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

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

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

3.Libc库

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

4.返回值

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

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

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

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

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

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

寄存器传递参数的限制

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

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

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

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

2.获取系统当前时间

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

系统调用号如:

具体系统调用号参见: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. Python3编写网络爬虫03-正则表达式的使用

    一.正则表达式(处理字符串强大的工具,有特定的语法结构)功能:实现字符串的检索,替换,匹配验证实例: 地址:http://tool.oschina.net/regex/ #测试文本Hello,my p ...

  2. 解决Windows Server2008 R2中IE开网页时弹出阻止框

    使用Windows Server2008,用IE打开网站时会弹出“Internet Explorer增强安全配置正在阻止来自下列网站的此应用程序中的内容”的对话框.如下图所示: 2011-10-14_ ...

  3. python string.md

    string 包含用于处理文本的常量和类.string模块始于Python的最早版本. 2.0版本中, 许多之前只在模块中实现的函数被转移为string对象的方法. 之后的版本中, 虽然这些函数仍然可 ...

  4. Android开发之自定义局部导航菜单

    如今,要实现导航功能方案有很多.比如: 1.用3.0+自带的Toolbar + Fragment导航. 2.用Tabhost实现导航.小弟学浅,就只用过这两种方案实现导航. 但是这两种方案都有一个很明 ...

  5. pycharm同步

    只有专业版的才能同步服务器 按照这个来:https://zhuanlan.zhihu.com/p/35067462 3.然后配置映射信息 local path是自己的工程的本地目录路径, Deploy ...

  6. Android 在ScrollView中嵌入ViewPage后ViewPage不能很好的工作的问题解决

    解决办法:重写ScrollView,如下代码所示: public class MyScrollView extends ScrollView{ private GestureDetector mGes ...

  7. DQN(Deep Reiforcement Learning) 发展历程(五)

    目录 值函数的近似 DQN Nature DQN DDQN Prioritized Replay DQN Dueling DQN 参考 DQN发展历程(一) DQN发展历程(二) DQN发展历程(三) ...

  8. day47

    高级布局 一.文档流(normal flow) 1.概念 本质为normal flow(普通流.常规流)将窗体自上而下分成一行一行,块级元素从上至下.行内元素在每行中从左至右的顺序依次排放元素. v_ ...

  9. 微信小程序开发 [02] 页面注册和基本组件

    1.页面注册 既然我们希望跳转到新的页面,那自然要新建页面相关的文件才行.在开篇已经讲过,一个小程序页面由四个文件组成,假如我们的页面名为welcome,那么这四个文件则是: welcome.js w ...

  10. SelectObject函数

    SelectObject 函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的同样类型的对象. 函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ ...