前言
《深入理解计算机操作系统》这本书是操作系统领域内非常经典的书,只要在网上搜索操作系统的书籍,必然会有人推荐这一本书,这本书也被各路大牛所推荐。虽然之前在图书馆借过这本书,但是匆匆看了一遍,只是记住了皮毛,最近下决心买了本纸质版的书,准备重读经典,顺便写下读书的收获与思考。
这本书的中文名字感觉有些“吓人”,初学者一看到深入理解往往会有些畏惧。其实英文名是“computer systems a programmer’s perspective ”可以理解为从一个程序员的角度看操作系统,这样听起来就接地气多了。
系统级I/O
为什么要学习系统级I/O(Unix I/O)
虽然高级别的IO封装好了很多函数例如printf,scanf,我们不用关心Unix IO,直接就可以使用,但是学习Unix IO还有很多好处,例如:
- 理解Unix I0可以帮助理解其他的系统概念,因为IO和其他系统概念之间经常是相互依赖的。IO在进程的创建中有关键作用,进程的创建在不同进程之间的文件共享起到重要作用;
Unix I/O
在linux中,所有的IO设备都被映射成文件,输入和输出被当成是对文件的读写操作,这样,linux内核就可以提供一个应用接口,来统一地处理处理输入和输出,这个应用接口就是Unix IO。
文件
常见的文件有两类:
- 普通文件(regular file)包含任意的数据,应用程序通常要区分文本文件text file和二进制文件binary file,而linux内核认为文本文件和二进制都一样。
- 目录directory:目录包含一组链接link的文件,其中每一个链接都把一个文件名filename映射到一个文件上。
- 套接字Socket:socket也是一个文件,用来警醒进程之间的网络通信
系统中的每一个文件都是根目录的后代,所有文件的关系类似于一个数结构,文件的根节点就是根目录。在目录的层次结构里,位置是用路径名来表示。路径名分为两种:
- 绝对路径名:是以一个斜杠
/
开始的,表示从根节点开始。 - 相对路径名:是以文件名开始的,表示从当前所在的工作目录开始。