0%

收集

哀公问社于宰我,宰我对曰:“夏后氏以松,殷人以柏,周人以栗,曰:使民战栗。”子闻之,曰:“成事不说,遂事不谏,既往不咎。” —— 《论语·八佾》

一、各种技术

  1. 写实复制

    • 在Linux程序中,fork会产生一个和父进程完全相同的子进程,但子进程在此后大多会有exec系统调用。出于效率考虑,Linux中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才将父进程的内容复制一份给子进程。那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间。也就是说两者的虚拟空间不同,其对应的物理空间是一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者都有各自的进程空间,互不影响),而代码段继续共享父进程的物理空间(两者的代码完全相同)。而如果是因为exec,由于两者执行的代码不同,子进程的代码段也会分配单独的物理空间。在网上看到的还有个细节问题是:fork之后内核会将子进程排在队列的前面,以让子进程先执行,以免父进程执行导致写时复制,而后子进程执行exec系统调用,因无意义的复制而造成效率的下降。
    • 写时复制技术(copy on write):内核只为新生成的子进程创建虚拟空间结构,它们复制于父进程的虚拟空间结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,当父子进程中有更改相应的段的行为发生时,再为子进程相应的段分配物理空间。概括的说就是更新源数据卷中的原始数据时, 将原始数据 Copy 到快照卷中。
    • 写时重定向技术(redirect on write):使用指针指向protected entity的所有block。若一个block将被改写,存储系统将指向该block的指针指向一个新位置,然后将新数据写到该新位置。而快照系统知道在哪里找到原block内容,还是使用指针。概括的说就是更新源数据卷中的原始数据时, 将源数据卷数据指针表中的被更新原始数据指针重定向到新的存储空间。读取一个redirect-on-write快照没有任何的计算量。
  2. 零拷贝:零拷贝就是一种避免CPU将数据从一块存储拷贝到另外一块存储的技术。

    • 对java来说,零拷贝是sendfile和mmap2函数
  3. 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

    • 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

二、连接

  1. Linux写时拷贝技术
  2. COW技术初窥
  3. sendfile“零拷贝”、mmap内存映射、DMA
  4. 零拷贝mmap和sendFile
  5. 什么是零拷贝?mmap与sendFile的区别是什么?
  6. redis17- MMAP内存映射与零拷贝sendFile
  7. 虚拟机是怎么实现的?
  8. 操作系统面试题
  9. 查看Linux的CPU个数、核数
  10. iperf2/3
  11. 8张图搞懂零拷贝