用户空间的程序无法直接执行内核代码。它们不能直接调用内核空间中的函数,因为内核驻留在受保护的地址空间上。如果进程可以直接在内核的地址空间上读写的话,系统的安全性和稳定性将不复存在。

      所以,应用程序应该以某种方式通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态,这样内核就可以代表应用程序在内核空间执行系统调用。

      通知内核的机制是靠软中断实现的:通过引发一个异常来促使系统切换到内核态去执行异常处理程序。此时的异常处理程序实际上就是系统调用处理程序。在X86系统上预定义的软中断是中断号128,通过 int $%0x80 指令触发该中断。这条指令会触发一个异常导致系统切换到内核态并执行第128号异常处理程序,而该程序正是系统调用处理程序。这个异常处理程序名字起得很贴切,叫 system_call() .它与硬件体系结构密切相关。

      不管系统调用处理程序被如何调用,用户空间引起异常或陷入内核就是一个重要的概念。

      下面我们以 read()系统调用说明陷入内核的过程,如图所示:


      我们可以看到,在用户空间使用 read函数,接着在C库中进行封装,接下来就触发异常,陷入内核,首先调用的是 system_call 函数,在该函数中进行非常重要的任务,如参数检查合法性,权限合法性检查等,最后,通过了检查之后,正式调用 sys_read() ,这就是 read 在内核中的实现。

      由于Linux内核中系统调用的过程都是相似的,所以,执行过程类似于 read 系统函数的调用。

Linux2.6 --系统调用处理程序相关推荐

  1. Linux系统调用FAQ

    1. Linux系统调用的作用? 系统调用是操作系统为用户态运行的进程与系统内核.硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,在应用程序和硬件之间设置一个额外层的优点包括: 1.    ...

  2. Linux系统调用相关概念

    目录: 1. Linux系统调用原理 2. 系统调用的实现 3. Linux系统调用分类及列表 4.系统调用.用户编程接口(API).系统命令和内核函数的关系 5. Linux系统调用实例 6. Li ...

  3. Linux系统调用详解(实现机制分析)--linux内核剖析(六)

    本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系.然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递 ...

  4. linux中swi指令,Arm Linux系统调用流程详细解析SWI

    Unix系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口.系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行 ...

  5. Linux系统调用详解(实现机制分析)

    为什么需要系统调用   linux内核中设置了一组用于实现系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于内核态,而普通的函数调用由函数库或用户 ...

  6. linux 系统调用详解

    转载自:http://blog.csdn.net/orange_os/article/details/7485069 目录: 1. Linux系统调用原理 2. 系统调用的实现 3. Linux系统调 ...

  7. linux内核剖析---Linux系统调用详解(实现机制分析)

    原文博客 http://blog.csdn.net/gatieme/article/details/50779184 本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序 ...

  8. Linux内核之旅/张凯捷——系统调用分析(2)

    在<系统调用分析(1)>Linux内核之旅/张凯捷--系统调用分析(1)中,首先介绍了系统调用的概念,并对早期通过软中断(int 80)来进行系统调用的相关过程进行了分析,最后分析和介绍了 ...

  9. Linux内核分析——第五章 系统调用

    第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...

最新文章

  1. static slice是什么呢?
  2. 基于socket的简单p2p聊天项目
  3. SpringBoot用JdbcTemplates访问Mysql
  4. 手语识别_如何使用转移学习进行手语识别
  5. Visual Studio 2008 SP1 安装失败的解决方法
  6. ubuntu 安装postgresql 客户端 psql 以及运行相关命令
  7. [CTF] 攻防世界MISC高手区部分题目WriteUp
  8. ZEMAX | 使用 Project Directory 组织 OpticStudio文件
  9. 解读SPSS多元方差分析中的多因素多变量的相互影响
  10. “沉浸式”住宿体验——酒店的新瓶,民宿的老酒
  11. ad中按钮开关的符号_SAST Weekly | Word中的公式语法
  12. 网络硬件常识:光模块
  13. 基于word2vec+TextCNN 实现中文文本分类
  14. 学生党直呼哇塞的几个超好用工具
  15. 在移动硬盘安装操作系统
  16. sin函数对照表_常见三角函数值对照表
  17. unordered_map详细介绍
  18. Android性能优化之图片压缩综合解决方案
  19. 雷大了,Google和Baidu都成SB了!!!!
  20. 今日头条张一鸣:30亿估值之后怎么玩?

热门文章

  1. RecyclerView的滚动事件OnScrollListener研究
  2. 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1
  3. 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
  4. activeMq 安装
  5. 简介Gulp, Grunt, Bower, 和 Npm 对Visual Studio的支持
  6. 编写更好的 Java 单元测试的 7 个技巧
  7. Android Studio导入Fresco
  8. httpd中工作模型的比较
  9. 勘误表《网络规划设计师考试考点分析与真题详解》
  10. printf-小代码,大问题