CSAPP阅读笔记(4)-进程间通信

  前段时间结束了一些比较琐碎的事情,也因此拖到现在都没继续写小结。这次简单总结下书中第三部分,在我看来也是相对来说比较不重要的一部分哈。
  要说明的是,这部分共分三章,分别从系统级IO(第11章)、网络编程(第12章)、并发编程(第13章)。分别从三个程序员经常会用到的方面进行讨论,当然文中是以Unix操作系统为前提的。
  首先来看看系统级IO。这部分主要关注一下文件描述字的复制问题。在Unix中,与文件操作相关的结构有三种,如下图所示:
  图左侧的表是文件描述符表,每个进程对应一张该表,表项指向打开文件表的某项;中间是已经打开的文件表,每一项维护一个打开文件的文件指针位置,文件引用数,以及对应文件的i-node表项;右侧是i-node表项,这是对应到磁盘上的真实文件的,每个文件对应一个i-node数据结构,该结构描述文件的大小权限等属性。
  好,现在让我们来看第一种情况,左侧是同一张表,中间表项file A和file B结构体均指向同一个i-node表项,这样对同一个进程来说,相当于对同一个文件做了两次open操作,得到的两个文件描述字互相独立,可以分别操作同一个文件的不同位置的数据。
  第二种情况,即I/O重定向,有了前面的图,很好理解了,就是把左侧表的某项修改为映射到别的打开文件表项。当然,实际操作的时候,还需要关注被去引用的那个打开文件的引用数值,这个值也要更新,减一。当值为0时,对应的打开文件表和i-node表项从内存中删除。
  第三种情况,即fork操作调用,子进程在创建之初,复制了主进程的全部内容,所以它们的文件描述符表完全一样。这也就是为什么fork返回的子进程/主进程,第一步操作经常会考虑关闭某些文件描述字的原因。
  
  再来看下网络编程,这部分介绍了一些基本内容,个人建议是基本没啥用,不如看TCP/IP详解(当然没看过的,用这个粗略了解下也可以)。这里就不赘述了。
  最后看下并发编程,这部分介绍了并发编程的基础,还是不赘述呵呵。
原文地址:https://www.cnblogs.com/peteryj/p/1944893.html