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

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

趣谈Linux操作系统

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

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

趣谈Linux操作系统

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

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

趣谈Linux操作系统

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

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

趣谈Linux操作系统

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

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

趣谈Linux操作系统

53、计算虚拟化之内存:如何建立独立的办公室?

上一节,我们解析了计算虚拟化之CPU。可以看到,CPU的虚拟化是用户态的qemu和内核态的KVM共同配合完成的。它们二者通过ioctl进行通信。对于内存管理来讲,也是需要这两者配合完成的。 咱们在内存管理的时候讲过,操作系统给每个进程分配的内存都是虚...

趣谈Linux操作系统