5.1 内核通信

系统调用在用户空间和硬件设备之间添加了一个中间层.

该层主要作用:

1.为用户空间提供了一种硬件的抽象接口.

2.保证了系统的稳定和安全.

3.每个进程都运行在虚拟系统中.

在Linux中,系统调用是用户空间访问内核的唯一手段;除异常和陷入外,它们是内核唯一的合法入口。

5.2 API、POSIX和C库

一般情况下,应用程序通过在用户空间实现的应用编程接口,而不是直接通过系统调用来编程。

一个API定义了一组应用程序使用的编程接口。

1.在Unix世界中,最流行的应用编程接口是基于POSIX标准的。

POSIX是由IEEE的一组标准组成。

2.C库实现了Unix系统的主要API,包括标准C库函数和系统调用接口。所有的C程序都可以使用C库,而其他语言也可以把他们封装起来使用。

3.Unix接口设计中,“提供机制而不是策略”,Unix系统调用抽象出了完成某种确定目的的函数。

5.3系统调用

要访问系统调用,通常通过C库中定义的函数调用来进行。它们通常都需要定义零个、一个或几个参数(输入)而且可能产生一些副作用。

系统调用还会通过一个long类型的返回值来表示成功或者错误。

通常,也不绝对,用一个负的返回值来表明错误。返回一个0值通常表明成功。

系统调用在出现错误的时候C库会把错误码写入error全局变量。通过调用perror()库函数,可以把该量编译成用户可以理解的错误字符串。

如何定义系统调用?

1.限定词。

2.函数返回。注意返回值类型。

3.系统调用在内核中被定义时有命名规则。Get_pid()为sys_getpid()。

5.3.1 系统调用号

指明要执行哪个系统调用,进程不会提及系统调用的名称。

一旦分配就不能再有变更,否则编译好的程序就会崩溃。

如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用。

Sys_ni_syscall():除了返回-ENOSYS外不做任何其他工作,这个错误号专门针对无效的系统调用而设的。

5.3.2 系统调用的性能

为什么Linux系统调用执行快?

1.Linux的上下文切换时间很短。

2.系统调用处理程序和每个系统调用本身也非常简洁。

5.4 系统调用处理程序

用户空间的程序无法直接执行内核代码。

软中断:应用程序通知系统的机制。通过引发一个异常来促使系统切换到内核态去执行异常处理程序。

5.4.1 指定恰当的系统调用

X86中,系统调用号是通过eax寄存器传递给内核的。

5.4.2 参数传递

在x86-32系统上,ebx\ecx\edx\esi和edi按照顺序存放前五个参数。

给用户空间的返回值存放在eax寄存器中。

5.5 系统调用的实现

5.5.2 参数验证

在接受一个用户空间的指针之前,内核必须保证:

内核无论何时都不能轻率的接受来自用户空间的指针!

5.6 系统调用上下文

在进程上下文中,内核可以休眠,也可以被抢占。

【读书笔记】Linux内核设计与实现(第五章)的更多相关文章

  1. Linux内核设计与实现 第五章

    1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备 ...

  2. linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍

    <linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...

  3. 2013337朱荟潼 Linux第一章读书笔记——Linux内核简介

    一.Unix历史 二.Linux足迹 类Linux系统.非商业化产品.用途广泛 三.操作系统和Linux内核简介 1.操作系统 (1)是指在整个最基本功能系统中负责完成最基本功能和系统管理的部分. ( ...

  4. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

  5. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. — ...

  6. Linux内核设计与实现 第三章

    1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...

  7. linux及安全《Linux内核设计与实现》第二章——20135227黄晓妍

    第二章:从内核出发 2.1获取源代码 2.1.1使用git Git:内核开发者们用来管理Linux内核源代码的控制系统. 我们使用git来下载和管理Linux源代码. 2.1.2安装内核源代码(如果使 ...

  8. Linux内核设计与实现第五周读书笔记

    第十八章 调试 18.1准备开始 需要的只是: 一个确定的bug.大部分bug通常都不是行为可靠而且定义明确的. 一个藏匿bug的内核版本. 相关的内核代码的知识和运气. 18.2内核中的bug 内核 ...

  9. 【读书笔记】Linux内核设计与实现(第一章&第二章)

    http://pan.baidu.com/s/1hqYAZNQ OneNote做的笔记没法儿带着格式一起导进来.所以上传到百度云,麻烦老师下载一下了. 下次不再用OneNote.

  10. Linux内核设计与实现 第四章

    1. 什么是调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程). 这个管理程序就是调度程序,功能: 决定哪些进 ...

随机推荐

  1. Alpha- 事后诸葛亮(麻瓜制造者)

    目录 预期计划 现实进展 团队体会 成员分工及工作量比例 会议总结 预期计划 在Alpha阶段开始之前,我们的预期计划是:从用户登录,发布商品.发布求购信息的基本功能开始做起.用户登录使用输入教务处的 ...

  2. css选择器补充

    前面文章总结了常用的8种选择器,今天再来补充5中选择器,其中一部分是css3中新加入的. 1.相邻选择器 E+F { sRules } 相邻选择符只会命中符合条件的相邻的兄弟元素. 2.兄弟选择器 E ...

  3. 3.Dubbo2.5.3快速启动Hello World

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.服务提供者 (1)工程目录 (2)接口代码 HelloService.java package cn.lj ...

  4. apache配置文件:http.conf配置详解

    Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改.主站点的配置(基本配置) (1) 基本配 ...

  5. 写脚本时出现: Permission denied

    例如对文件 remove.sh sudo chmod -R 777 remove.sh

  6. 利尔达推出工控解决方式 串口转以太网模块LSD1ES-W5500_S2E0

    利尔达最近推出工控解决方式,串口转以太网模块LSD1ES-W5500_S2E0,模块基于WIZnet-W5500. 同一时候,这也是利尔达科技集团成为WIZnet代理商后,自行推出的第一款基于WIZn ...

  7. 详细解读大数据分析引擎Pig&PigLatin语句

    Pig 一.Pig的介绍: Pig由Yahoo开发,主要应用于数据分析,Twitter公司大量使用Pig处理海量数据,Pig之所以是数据分析引擎,是因为Pig相当于一个翻译器,将PigLatin语句翻 ...

  8. SAP函数 LAST_DAY_OF_MONTHS 获取月末最后一天日期

    DATA LAST_DATE TYPE SY-DATUM. CALL FUNCTION 'LAST_DAY_OF_MONTHS' EXPORTING day_in = sy-datum IMPORTI ...

  9. 20155330 《网络对抗》 Exp2 后门原理与实践

    20155330 <网络对抗> 实验二 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 在网站上下载非官方软件,所下载的软件中携带伪装过的后门程序. 例举你 ...

  10. BERT总结:最先进的NLP预训练技术

    BERT(Bidirectional Encoder Representations from Transformers)是谷歌AI研究人员最近发表的一篇论文:BERT: Pre-training o ...