当前课程知识点:Linux 内核分析与应用 >  第6章 系统调用 >  6.1 Linux中的各种API >  Video

返回《Linux 内核分析与应用》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《Linux 内核分析与应用》慕课在线视频列表

Video课程教案、知识点、字幕

大家好 今天我们来讲第六章——系统调用

那么第一讲呢 我们先介绍一下Linux中的各种接口

那么这张图呢给出了Linux中各种接口

如果把内核比作一个工厂的话 那么Linux中

众多的接口就是通往这个工厂的高速公路

这条路要足够坚固 经得起各种破坏

要能跑得了卡车又能升降飞机

当然了 这条路要越宽越好 如图所示

Linux中有四种类型的接口 应用编程接口API和应用二进制接口ABI

内核内部的API和ABI 下面我们逐一的来看看这些接口

首先我们介绍一个标准叫LSB

为什么要介绍这个标准呢 图中在ABI提到LSB

那么是什么LSB 目前Linux 的发行版非常繁多

为了促进Linux 不同发行版间的兼容性 LSB开发了一系列标准

使各种软件可以很好地在兼容LSB 标准的系统上运行

从而可以帮助软件供应商更好的在Linux 系统上开发产品

或将已有的产品移植到Linux系统上

LSB 是Linux 标准化领域中事实上的标准

它的图标非常形象地阐述了自己的使命

对代表自由的企鹅制定标准

给定企鹅的体形和三维标准之后 软件开发者就可以设计并裁减出

各色花样的衣服 也就是应用程序

这样不管穿在哪只企鹅身上 都会非常的合适

首先我们看下Linux的API

那么Linux API是Linux内核与用户空间的API

也就是让用户空间的程序呢

能够通过这个接口访问系统资源和内核提供的服务

Linux API由两部分组成 第一部分呢是Linux内核的系统调用接口

第二呢是GNU C库

那么第二部分我们介绍Linux内核的系统调用接口

系统调用接口是内核中所有已实现和可用系统调用的集合 这是本章重点要介绍的

那么第三部分就是C的标准库

GNU C库是Linux内核系统调用接口的封装

下面进一步介绍

那么Linux内核系统调用接口和glibc库合在一起就构成了Linux API

下面我们对GNU C库做一个简要概述

从这张图我们可以看出 GNU C库是Linux内核系统调用接口的封装

它其中包括POSIX兼容应用函数调用和Linux 专用应用的函数调用

目前最新Linux内核5.0系统调用大约有380个系统调用

而GNU C库大约有2000个左右的函数

下面我们来看下Linux API和POSIX API

这张图我们看起来比较复杂 我们从最底下往上来介绍

最下面是研发人员所占的比重

这个图我们可以看出 Linux内核占比最高95% 其他占比就很少了

第二层是C库和OS的内核

那么不同的内核都有遵循POSIX的接口

但是就像Linux内核中cgroups udev这些就不属于POSIX的功能

这其中呢就包括cgroups udev等等

我们还看到 POSIX-API和Linux kernel-API

连接着Linux Kernel 并向上提供服务

并且就glibc而言 glibc把Linux系统调用

封装进相应API中提供给上层的

那么第三层呢是用户栈的底层

在这曾呢我们看到像systemd IPC QT都不是直接的应用程序

它们依靠胶水函数把上一层提供的API呢

整合成平台工具供用户来使用

那么最上层呢就是用户栈的高层

到这层呢也就到了应用软件层了

这一层可以直接调用Linux内核的API和POSIX API完成

也可以依托用户栈底层的这些平台工具来构建

在这里呢我们对POSIX做一个简单的介绍

POSIX表示可移植操作系统接口 缩写呢是POSIX

POSIX标准定义了操作系统应该为应用程序提供的接口标准

是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称

其正式称呼为IEEE 1003

那么最后我们来看一下Linux的ABI

ABI是什么呢 它是一系列约定的集合

可以说调用惯例就是ABI

因此呢ABI是和具体CPU架构和OS相关的

具体而言 ABI包含以下内容

第一一个特定的处理器指令集

第二函数调用惯例 第三系统调用方式

第四可执行文件的格式 比如说ELF PE等

那么 我们为什么要纠结于ABI这个概念呢 答案是为了兼容

只要OS遵守相同的ABI规范 那么不同的应用就可以实现向前兼容

再也不用担心版本升级后 旧版本的应用不能运行了

下面我们来看一下什么是内核的API

内核API主要是内核中标记为“EXPORT_SYMBOL”的函数

那么这组函数呢主要是为了内核模块的编写而提供的

这些函数呢它受到内核版本迭代的影响

比如说内核3.0版本的API

那么到了4.0上呢就可能无法使用

所以在驱动程序的编写中呢

我们就要根据不同的内核版本对API进行移植

那么再介绍下什么是抽象API 那么这张图看起来比较丰富

我们来介绍一下 在某些情况下内核的设计过于底层

开发者需要更高一层的抽象

于是出现了类似Mesa 3D的为图形驱动开发而生的API

那么关于Linux的各种接口在这里我们做了简单介绍

这方面的资料是非常丰富的 也需要大家课后深入的阅读

在这里我们看到的这些图主要来自于维基百科

关于系统调用的内容我们可以参考《深入理解Linux内核》第三版的第十章

最后呢我们着思考离开

前面我们给了API和ABI

那么大家思考一个问题

保持一个稳定的ABI和保持一个稳定的API相比呢谁更困难 为什么

这章就讲到这里了 谢谢大家

Linux 内核分析与应用课程列表:

第1章 概述

-1.1 Linux操作系统概述

--1.1 Linux 操作系统概述

-1.2 Linux内核结构以及内核模块编程

--Video

-1.3 Linux内核源码中的双链表结构

--Video

-1.4 源码分析-内核中的哈希表

--Video

-1.5 动手实践-Linux内核模块的插入和删除

--Video

-第1章 概述--章节测验

-第1章导学--引领你进入Linux内核的大门

第2章 内存寻址

-2.1 内存管理之内存寻址

--Video

-2.2 段机制

--Video

-2.3分页机制

--Video

-2.4 动手实践-把虚拟地址转换成物理地址

--Video

-第2章 内存寻址--章节测验

-第二章导学-从零打造自己的操作系统

第3章 进程管理

-3.1 进程概述

--Video

-3.2 Linux进程创建

--Video

-3.3 Linux进程调度

--Video

-3.4 动手实践-打印进程描述符task_struct中的字段

--Video

-3.5工程实践-基于内核模块的负载监控

--Video

-第3章 进程管理--章节测验

-第三章导学-进程背后琳琅满目的宝贝到哪里挖?

第4章 内存管理

-4.1 Linux内存管理机制

--Video

-4.2 进程用户空间管理机制

--Video

-4.3 物理内存分配与回收机制(上)

--Video

-4.4 物理内存分配与回收机制(下)

--Video

-4.5 动手实践-Linux内存映射基础(上)

--Video

-4.6 动手实践-Linux内存映射实现(中)

--Video

-4.7 动手实践-Linux内存映射测试(下)

--Video

-4.8 初学者对内存管理的常见疑惑

--初学者对内存管理的常见疑惑(一)

--初学者对内存管理的常见疑惑(二)

--初学者对内存管理的常见疑惑(三)

-第4章 内存管理--章节测验

第5章 中断

-5.1 中断机制概述

--Video

-5.2 中断处理机制

--Video

-5.3 中断下半部处理机制

--Video

-5.4 时钟中断机制

--Video

-5.5 动手实践-中断上半部的代码分析及应用

--Video

-5.6 动手实践-中断下半部的代码分析及应用

--Video

-第5章 中断--章节测验

第6章 系统调用

-6.1 Linux中的各种API

--Video

-6.2 系统调用机制

--Video

-6.3 动手实践-添加系统调用(系统调用日志收集系统)

--Video

-第6章 系统调用--章节测验

第7章 内核同步

-7.1 内核同步概述

--Video

-7.2 内核同步机制

--Video

-7.3 动手实践-内核多任务并发实例(上)

--Video

-7.4 动手实践-内核多任务并发实例(下)

--Video

-第7章 内核同步--章节测验

第8章 文件系统

-8.1 虚拟文件系统的引入

--Video

-8.2 虚拟文件系统的主要数据结构

--Video

-8.3 文件系统中的各种缓存

--Video

-8.4 页高速缓存机制以及读写

--Video

-8.5 动手实践-编写一个文件系统(上)

--Video

-8.6 动手实践-编写一个文件系统(中)

--Video

-8.7 动手实践-编写一个文件系统(下)

--Video

-第8章 文件系统--章节测验

第9章 设备驱动

-9.1 设备驱动概述

--Video

-9.2 I/O空间管理

--Video

-9.3 设备驱动模型

--Video

-9.4 字符设备驱动程序简介

--Video

-9.5 块设备驱动程序简介

--Video

-9.6 动手实践-编写字符设备驱动程序

--Video

-9.7工程实践-编写块设备驱动的基础(上)

--Video

-9.8 工程实践-块设备驱动程序分析(中)

--Video

-9.9 工程实践-块设备驱动程序实现(下)

--Video

-第9章 设备驱动--章节测验

致谢与说明

-致谢与说明

--Video

直播视频:从Linux内核学习到自主操作系统研发

-从Linux内核学习到自主操作系统研发

附录:实验代码、课件以及相关素材

-各章实验代码

-《Linux内核分析与应用》课件

-《Linux操作系统原理与应用》教材课堂视频

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。