40、IPC(上):不同项目组之间抢资源,如何协调?我们前面讲了,如果项目组之间需要紧密合作,那就需要共享内存,这样就像把两个项目组放在一个会议室一起沟通,会非常高效。这一节,我们就来详细讲讲这个进程之间共享内存的机制。 有了这个机制,两个进程可以像访问自己内存中的变量一样,访问共享内存的变量。但是同...2025-10-31趣谈Linux操作系统
41、IPC(中):不同项目组之间抢资源,如何协调?了解了如何使用共享内存和信号量集合之后,今天我们来解析一下,内核里面都做了什么。 不知道你有没有注意到,咱们讲消息队列、共享内存、信号量的机制的时候,我们其实能够从中看到一些统一的规律:它们在使用之前都要生成key,然后通过key得到唯一的id,并且...2025-10-31趣谈Linux操作系统
42、IPC(下):不同项目组之间抢资源,如何协调?IPC这块的内容比较多,为了让你能够更好地理解,我分成了三节来讲。前面我们解析完了共享内存的内核机制后,今天我们来看最后一部分,信号量的内核机制。 首先,我们需要创建一个信号量,调用的是系统调用semget。代码如下: 123456789101112...2025-10-31趣谈Linux操作系统
43、预习:Socket通信之网络协议基本原理上一节我们讲的进程间通信,其实是通过内核的数据结构完成的,主要用于在一台Linux上两个进程之间的通信。但是,一旦超出一台机器的范畴,我们就需要一种跨机器的通信机制。 一台机器将自己想要表达的内容,按照某种约定好的格式发送出去,当另外一台机器收到这些...2025-10-31趣谈Linux操作系统
44、Socket通信:遇上特大项目,要学会和其他公司合作上一篇预习文章说了这么多,现在我们终于可以来看一下,在应用层,我们应该如何使用socket的接口来进行通信。 如果你对socket相关的网络协议原理不是非常了解,建议你先去看一看上一篇的预习文章,再来看这一篇的内容,就会比较轻松。 按照前一篇文章说的...2025-10-31趣谈Linux操作系统
45、Socket内核数据结构:如何成立特大项目合作部?上一节我们讲了Socket在TCP和UDP场景下的调用流程。这一节,我们就沿着这个流程到内核里面一探究竟,看看在内核里面,都创建了哪些数据结构,做了哪些事情。 解析socket函数我们从Socket系统调用开始。 123456789101112131...2025-10-31趣谈Linux操作系统
46、发送网络包(上):如何表达我们想让合作伙伴做什么?上一节,我们通过socket函数、bind函数、listen函数、accept函数以及connect函数,在内核建立好了数据结构,并完成了TCP连接建立的三次握手过程。 这一节,我们接着来分析,发送一个网络包的过程。 解析socket的Write操作...2025-10-31趣谈Linux操作系统
47、发送网络包(下):如何表达我们想让合作伙伴做什么?上一节我们讲网络包的发送,讲了上半部分,也即从VFS层一直到IP层,这一节我们接着看下去,看IP层和MAC层是如何发送数据的。 解析ip_queue_xmit函数从ip_queue_xmit函数开始,我们就要进入IP层的发送逻辑了。 12345678...2025-10-31趣谈Linux操作系统
48、接收网络包(上):如何搞明白合作伙伴让我们做什么?前面两节,我们分析了发送网络包的整个过程。这一节,我们来解析接收网络包的过程。 如果说网络包的发送是从应用层开始,层层调用,一直到网卡驱动程序的话,网络包的结束过程,就是一个反过来的过程,我们不能从应用层的读取开始,而应该从网卡接收到一个网络包开始。...2025-10-31趣谈Linux操作系统
49、接收网络包(下):如何搞明白合作伙伴让我们做什么?上一节,我们解析了网络包接收的上半部分,从硬件网卡到IP层。这一节,我们接着来解析TCP层和Socket层都做了哪些事情。 网络协议栈的TCP层从tcp_v4_rcv函数开始,我们的处理逻辑就从IP层到了TCP层。 12345678910111213...2025-10-31趣谈Linux操作系统