本文是个人分析《Linux内核设计与实现》而写的总结,欢迎转载,请注明出处:

                                                                              http://blog.csdn.net/dlutbrucezhang/article/details/12207851

      第三章 --系统调用

      系统调用就是指当前的用户进程处于进程上下文中,由内核执行函数负责执行。是用户进程和内核交互的一组接口。提供这些接口的目的是使得用户进程可以和硬件设备通信。
      普通的用户进程是不能直接和硬件通信的,这是出于保护的目的,当然,也是为了方便用户的操作。毕竟硬件是和体系结构相关的。

1.与内核通信

      在很多时候,用户需要与内核通信,请求内核帮助当前进程完成一些操作。比如读文件和写文件的操作,进程不可能只是在用户空间中完成这些功能。
      现在举一个例子。我们需要写文件时会用到 write 函数,我们用到的函数其实是函数库中的库函数,其内部实现其实是系统调用。

2.系统调用状态

      通常,系统调用成功时,会返回 0 ,如果返回的是一个负数,那么基本可以认为,调用失败了。同时,为了让我们知道为什么会失败,C库会把一个错误码写入全局变量 errno 中。这个被称作是错误码。我们可以利用 perror() 函数查看出错原因。
      系统调用在内核中的实现是统一的形式:
      asmlinkage long sys_xxx(...);这里对这个形式不多做解释说明。

3.系统调用号

      在Linux中,每个系统调用都被赋予一个数值,这个数值被称为系统调用号。内核识别系统调用并不是通过系统调用的名称,而是通过这个数值。
      在内核中存储着一张系统调用表--sys_call_table ,内核根据这样的一一对应关系调用相关的函数。
      注意:即使是我们删除了一个系统调用,它的系统调用号仍然需要保留,因为当内核发现进程调用一个不存在的系统调用时,它会返回一个错误标识,但是,如果我们删除了那个系统调用号,有可能其他的系统调用会重复利用这个号,这样,我们产生的可是大错误啊。

4.系统调用处理程序

      用户空间的程序利用软中断进入内核,并由内核代替进程的执行,此时,进程处于进程上下文中。
      通知内核的机制是利用软中断实现的。在X86的架构中,软中断的中断号是128,表示为 int $0x80。这个处理程序的名字是 sys_call()。
      这个函数通过用户指定的系统调用号寻找合适的系统调用程序,并处理它。
      我们常常会传递一些参数给系统调用,这些参数是放在寄存器中的。当然,如果参数是很多个,那个就需要在寄存器中存储指向参数的内存地址了。

5.系统调用的实现

      由于这一部分的内容是固定的,都是需要按照一定的模式,所以,这里,对这一部分不多做介绍。

Linux内核探讨-- 第三章相关推荐

  1. Linux内核探讨-- 第五章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/123 ...

  2. Linux内核探讨-- 第七章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/136 ...

  3. Linux内核探讨-- 第六章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/130 ...

  4. Linux内核探讨-- 第四章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/122 ...

  5. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

  6. linux内核测试指南 第一章

    linux内核测试指南 第一章 内核,补丁,内核树 和 编译 1.1 内核 Linux内核的当前版本通常可以从linux内核档案网站(http://www.kernel.org/)以一个大的压缩文件的 ...

  7. Linux内核学习(三):Bootloader的特种兵-Uboot(一)

    Linux内核学习(三):Bootloader的特种兵-Uboot(一) 内容全部来自–><嵌入式应用开发完全手册> 1.什么是U-Boot U-Boot,全称为Universal ...

  8. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  9. 《深入理解Linux内核中文第三版》学习笔记——第7章 进程调度

    文章目录 第7章 进程调度 7.1. 调度策略 7.1.1. 进程的抢占 7.1.2. 一个时间片必须持续多长? 7.2. 调度算法 7.2.1. 普通进程的调度 基本时间片 动态优先级和平均睡眠时间 ...

最新文章

  1. 天天用事务,但是你知道MySQL事务的实现原理吗?
  2. 自定义Seekbar拖动条式样
  3. mysql 分区表 归档_MySQL分区表
  4. C语言嵌入式系统编程修炼
  5. Linux下常见文件解压方法及命令
  6. 判别测试字段怎么算它的位数_心理测试 | 成人依恋量表-亲密关系经历量表ECR...
  7. 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法...
  8. C++类模板中的static成员
  9. P4068-[SDOI2016]数字配对【二分,费用流】
  10. 3皮卡丘眨眼代码_活见久,皮卡丘居然是一门编程语言
  11. 另一个flutter-go
  12. ios开发网络学习AFN框架的使用一:get和post请求
  13. MATLAB SMRF点云滤波算法
  14. 怎样实习才能成长最快
  15. Java学习总结与反思
  16. Excel2007中文显示乱码的解决方法(亲自实践)
  17. SQOOP学习笔记-报错怎么办?打就完了!
  18. 统一社会信用代码及其校验规则
  19. 网红书店的“关门潮”与场景阅读的“科技浪”
  20. VSCode的常用快捷键

热门文章

  1. 转载 React.createClass 对决 extends React.Component
  2. 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用
  3. 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础
  4. SSH-KeyGen 的用法 【转载】
  5. SimplifiedHibernate:简化了的Hibernate
  6. HTML+JS弹出可移动DIV遮罩层
  7. Python核心编程学习日记之错误处理
  8. MOSS 权限管理总结
  9. 云计算究竟能帮你具体做些什么事?
  10. Idea(二) 解决IDEA卡顿问题及相关基本配置(转)