说明:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
QQ 群 号:513683159 【相互学习】
内容来源:
《Linux系统编程》
一、系统调用
什么是系统调用?
系统调用(system call):为从操作系统获得 服务/资源 从用户空间(文本编辑器等) 向内核发起的函数调用,即:操作系统给用户程序提供的调用接口。
不同架构之间的系统调用存在一定的区别,但90%以上系统调用在所有架构上都实现了。
为什么会有系统调用?
基于系统安全和稳定的考虑,用户空间程序禁止直接执行内核的代码或操作内核数据,故需要限制不同程序之间的访问能力,发明ring0-ring3的访问控制级别,其中ring0为内核态,ring3为用户态。
①内核态: CPU可访问内存所有数据,包括外围设备。
②用户态:只能受限访问内存,且不允许外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。
这便可防止不小心对重要内存数据访问导致的系统奔溃等。
故:用户空间应用程序不可直接访问内核,需通过一种机制能让应用程序能深入内核执行内核允许执行的代码,该机制即为系统调用。
常见的系统调用有哪些?
① 文件操作的系统调用:
create ,open,read,write,close,link,unlink,lseek,chmod,rename
②控制类系统调用:
fork,wait,exit,exec
③信号与时间的系统调用
kill,sigaction,sigreturn
④时间管理的系统调用
stime,time,times
二、API与ABI
都定义和描述了软件不同模块间的接口。
两者区别点击下面链接:
linux系统基础知识(ABI和API)
如何使用api_编程核心知识—API与ABI的区别
ABI 与 API 的区别
1️⃣什么是API?
API = 应用程序接口 = Application Programming Interface
源码级别接口:定义了源代码和库之间的接口,可在支持这个API的任何系统中编译运行。
由一组定义和协议组合而成,用于软件模块之间在源代码层交互的接口,实现不同组件之间相互通信。
表现形式:应用程序/库中公开的公共类型/变量/函数集,如:
HTTP 接口、RPC 接口、Web Service 接口等
为什么会有API(作用)?
①对软件提供商:形成生态,扩大品牌覆盖范围。
①创造新收入渠道,隐藏源码,保护商业机密。
②软件发挥最大价值,更有生命力。
③外部开发于协作,推动开放创新或提高效率。
②对应用开发者:节省开发时间,提高效率
无需理解内部工作机制细节。
直接调用接口,简单高效。
2️⃣什么是ABI?
ABI =应用程序二进制接口 = Application Binary Interface。
二进制层面的接口:定义特定架构上两个或多个软件木块之间的二进制接口,一段目标代码能够在任何具有同样ABI的系统上运行而不需重新编译。除非直接使用汇编语言,一般是不能直接拿来用。
ABI没有表面上的接口,而是通过工具链(编译器、链接器等)执行。
可帮助写出更优化的代码和编写汇编或研究工具链的绝好资料。
三、SDK
SDK = Software Development Kit = 软件开发工具包。
一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。
SDK可能包含:
①接口文件和库文件:
接口文件和库文件就是API,将底层的代码进行封装保护,提供给用户一个调用底层代码的接口;
②帮助文档:
帮助文档解释接口文件和库文件功能,以及介绍相关的开发工具,操作示例等等
③开发示例:
开发示例就是做出来的一个DEMO展示,也要包括源代码;
④实用工具:
用工具是用来协助用户进行二次开发的工具,比如二次开发向导、API 搜索工具、软件打包工具等。