52、计算虚拟化之CPU(下):如何复用集团的人力资源?

上一节qemu初始化的main函数,我们解析了一个开头,得到了表示体系结构的MachineClass以及MachineState。 4.初始化块设备我们接着回到main函数,接下来初始化的是块设备,调用的是configure_blockdev。这里我...

趣谈Linux操作系统

51、计算虚拟化之CPU(上):如何复用集团的人力资源?

上一节,我们讲了一下虚拟化的基本原理,以及qemu、kvm之间的关系。这一节,我们就来看一下,用户态的qemu和内核态的kvm如何一起协作,来创建虚拟机,实现CPU和内存虚拟化。 这里是上一节我们讲的qemu启动时候的命令。 12qemu-syste...

趣谈Linux操作系统

50、虚拟机:如何成立子公司,让公司变集团?

我们前面所有章节涉及的Linux操作系统原理,都是在一台Linux服务器上工作的。在前面的原理阐述中,我们一直把Linux当作一家外包公司的老板来看待。想要管理这么复杂、这么大的一个公司,需要配备咱们前面讲过的所有机制。 Linux很强大,Linux...

趣谈Linux操作系统

49、接收网络包(下):如何搞明白合作伙伴让我们做什么?

上一节,我们解析了网络包接收的上半部分,从硬件网卡到IP层。这一节,我们接着来解析TCP层和Socket层都做了哪些事情。 网络协议栈的TCP层从tcp_v4_rcv函数开始,我们的处理逻辑就从IP层到了TCP层。 12345678910111213...

趣谈Linux操作系统

48、接收网络包(上):如何搞明白合作伙伴让我们做什么?

前面两节,我们分析了发送网络包的整个过程。这一节,我们来解析接收网络包的过程。 如果说网络包的发送是从应用层开始,层层调用,一直到网卡驱动程序的话,网络包的结束过程,就是一个反过来的过程,我们不能从应用层的读取开始,而应该从网卡接收到一个网络包开始。...

趣谈Linux操作系统

47、发送网络包(下):如何表达我们想让合作伙伴做什么?

上一节我们讲网络包的发送,讲了上半部分,也即从VFS层一直到IP层,这一节我们接着看下去,看IP层和MAC层是如何发送数据的。 解析ip_queue_xmit函数从ip_queue_xmit函数开始,我们就要进入IP层的发送逻辑了。 12345678...

趣谈Linux操作系统

46、发送网络包(上):如何表达我们想让合作伙伴做什么?

上一节,我们通过socket函数、bind函数、listen函数、accept函数以及connect函数,在内核建立好了数据结构,并完成了TCP连接建立的三次握手过程。 这一节,我们接着来分析,发送一个网络包的过程。 解析socket的Write操作...

趣谈Linux操作系统

45、Socket内核数据结构:如何成立特大项目合作部?

上一节我们讲了Socket在TCP和UDP场景下的调用流程。这一节,我们就沿着这个流程到内核里面一探究竟,看看在内核里面,都创建了哪些数据结构,做了哪些事情。 解析socket函数我们从Socket系统调用开始。 123456789101112131...

趣谈Linux操作系统

44、Socket通信:遇上特大项目,要学会和其他公司合作

上一篇预习文章说了这么多,现在我们终于可以来看一下,在应用层,我们应该如何使用socket的接口来进行通信。 如果你对socket相关的网络协议原理不是非常了解,建议你先去看一看上一篇的预习文章,再来看这一篇的内容,就会比较轻松。 按照前一篇文章说的...

趣谈Linux操作系统

43、预习:Socket通信之网络协议基本原理

上一节我们讲的进程间通信,其实是通过内核的数据结构完成的,主要用于在一台Linux上两个进程之间的通信。但是,一旦超出一台机器的范畴,我们就需要一种跨机器的通信机制。 一台机器将自己想要表达的内容,按照某种约定好的格式发送出去,当另外一台机器收到这些...

趣谈Linux操作系统