linux 系统编程学习经验

简单写一下总结
(1)书籍的选择
个人推荐一下三本:
UNIX环境高级编程
https://book.douban.com/subject/1788421/
LINUX系统编程
https://book.douban.com/subject/3907181/
Unix/Linux编程实践教程
https://book.douban.com/subject/1219329/

新手入门建议从《Linux系统编程》入手:
优点是简单易懂,没有《UNIX环境高级编程》中关于unix的各种版本的细节,主干清晰,而且书里写了Linux系统内核的一些细节,比如:
第二章的虚拟文件系统,页缓存,页回写,第四章的IO调度器和IO性能,第六章的进程调度。

《UNIX环境高级编程》和《Unix/Linux编程实践教程》可以同时阅读,前者适合初学者向中高级进阶,后者为前者提供了很多系统编程实例,边学边实践有助于理解记忆。

(2)学习的思路
1.建立抽象的意识
操作系统提供了系统调用,系统调用用来控制系统的资源,而系统的资源是操作系统通过对硬件资源的抽象提供给开发者的。
学习系统编程就可以通过类似于数据结构中抽象数据类型的思路来记忆和总结,与某资源相关的系统调用。

2.ABI
ABI是应用程序二进制接口的缩写,由内核和工具链(编译器,连接器等)决定。
ABI决定了CPU指令集,可执行文件的格式,链接,库等。(参考《程序员的自我修养》)

3.提供新的间接层的目的是为了提高效率,比如:有了进程又提出线程,提出虚拟内存,页缓存等。

4.一切可读写的都是文件
Linux操作系统中将各种IO资源都抽象成文件,包括目录,设备,socke,管道等。
这种抽象是内核通过虚拟文件系统映射建立的,理解虚拟文件系统的结构(超级块,inode等)是理解文件系统及文件属性的关键。
I/O操作分为普通的I/O操作和缓冲I/O(C标准库提供),高级IO一般用于服务器网络编程和进程通信中。

5.shell和进程
shell是内核与用户交互的接口,要理解进程之间的关系需要理解shell的启动过程,fork和excu的执行,会话和进程组(前台,后台,守护进程)。

高级主题

6.进程之间的通信

7.socket编程

你可能感兴趣的:(Linux)