DMA(Direct Memory Access)简介

DMA(Direct Memory Access)是指在现代计算机系统上,外接设备可以不用CPU干预,直接把数据传输到内存的技术。

DMA控制器(controller)是一种特殊的硬件,它用来管理数据传输和总线仲裁。当要发起数据传输时,它会发一个申请使用系统总线的DMA请求信号给CPUCPU完成当前操作后,就会让出系统总线,同时会发一个DMA确认信号给DMA控制器。接下来,DMA控制器接管系统总线,开始数据传输。数据传输完毕后,DMA控制器会通知CPU重新接管总线。

正常情况下,CPU全权负责内存的读写操作,而DMA技术可以把CPU解放出来,这将使计算机性能得到显著改善。

参考资料:
DMA (Direct Memory Access)

硬件虚拟化(hardware virtualization)浅析

硬件虚拟化(hardware virtualization)可以创建出多个系统虚拟机实例(system virtual machine instance),这些虚拟机可以运行整个操作系统(包括它们的内核)。硬件虚拟化分为以下几种:

a)Full virtualization - binary translation:提供一个由虚拟化硬件部件组成完整的虚拟化系统,可以在上面安装一个不需修改的,完整的操作系统。这项技术结合了直接的处理器执行和必要时指令的二进制转化(binary translation)。

b)Full virtualization - hardware-assisted:提供一个由虚拟化硬件部件组成完整的虚拟化系统,可以在上面安装一个不需修改的,完整的操作系统。这项技术利用了处理器的支持,使得执行虚拟机更加有效率(比如AMD-VIntel-VT扩展)。

c)Paravirtualization:提供一个支持接口(interface)的虚拟系统,虚拟机操作系统(guest OS)利用这个接口就可以有效地利用宿主机(host)资源(通过hypercalls),而不需要所有组件的完全虚拟化。

还有一种hybrid virtualization,利用hardware-assisted virtualization加上一些高效的paravirtualization调用,可以提供更好的性能(performance)。

Hypervisor(或被称为Virtual Machine Monitor (VMM))是用来创建虚拟机的,它可以由软件(software),硬件(hardware)或固件(firmware)实现。有2种类型的hypervisor,请参考下图:

hypervisor

类型1)这种hypervisor直接运行在处理器上 (例如:hyper-VKVM ,也被称之为native hypervisorbare-metal hypervisorHypervisor的管理工作是通过一个享有特权模式的guest OS来进行(在上图中,为Guest OS #0),这个guest OS可以创建和启动其它的guest OS

类型2)这种hypervisor运行在宿主机操作系统上 (例如:VirtualBox 。由宿主机操作系统负责管理hypervisor和启动新的guest OS

参考资料:
Systems Performance: Enterprise and the Cloud

什么是coroutine(协程)?

Coroutine isn't thread!(协程不是线程!)

Coroutinethread有许多共同点:每个coroutine(或thread)都有一组指令执行序列,私有的栈,私有的局部变量,私有的程序计数器(program counter);同时各个coroutine(或thread)之间共享全局变量等等信息。

Coroutinethread的不同在于:在多核系统上,一个进程的多个thread是可以并行运行的(in parallel),即在一个时间点上,多个thread同时在运行。而coroutine之间是合作式的(collaborative),在任何一个时间点,只有一个coroutine在运行。Coroutine之间的调度是非抢占式的(non-preemptive):只有运行的coroutine主动地放弃执行权,其它coroutine才可以获得执行机会。

“Orthogonality”的含义

Orthogonality(正交性)的含义通俗来讲是指“改变A不会改变B”。一个“Orthogonality”系统的例子是收音机:换台不会改变音量;而不是“Orthogonality”系统的例子则是直升飞机:改变速度也会改变方向。

在编程语言中,Orthogonality指执行一条指令时,只有这条指令被执行,不会有其它任何副作用(side-effect)。

参考资料:
What is “Orthogonality”?

什么是JIT compiler?

JIT(Just-In-Time)Compiler是在程序开始运行以后,在执行过程中把代码(通常是字节码或虚拟机指令)转化成另外一种运行更快的指令,通常就是程序所在机器的CPU指令集。与之相比,传统的编译器则会在程序运行之前就把所有代码编译成机器指令。

参考资料:
What does a just-in-time (JIT) compiler do?

什么是big data?

Big data”(大数据)的称呼已经火了很长一段时间了。今天我查阅了一些资料,记录一下自己的理解。“Big data”应该包含以下两个方面的含义:

(1)数据量本身很庞大。现在一款几亿人使用的社交软件可以聊天,上传图片,推送文章,发语音信息,等等。一个人可能一天就要产生几M到几十M的信息,那么几亿人一年会产生多少?真是一个非常大数量级的数据。

(2)伴随处理这些大数量级的数据所产生的技术。我们传统处理数据的方法已不再适合处理这些大规模数据了,所以要不断探索和解决这些技术难题。例如:如何存储这些数据,如何寻找特定的数据,如何从这些数据中挖掘出一些有用的信息,等等。

但是,每个问题都有两面性,“Big data”也不例外。一个显著的问题就是用户的隐私。你的社交软件知道了你的太多信息:你的手机号码,你的联系人,你喜欢看什么,等等。也许它比你还了解你。。。

参考资料:
(1)big data
(2)A (very) short history of big data
(3)Big Data

什么是sandbox?

stackoverflow上的一个帖子很好地解释了在计算机领域出现频率较高的“sandbox”的含义:

Sandbox的来源:国外的家庭在自家院子里圈出个地方,堆上沙子,让孩子在里面玩。由于这个小圈子和外界环境隔离开来,所以小孩子不会受到外界环境干扰,比较安全。这个环境就被称之为“sandbox”或“sandpit”。

在计算机领域,sandbox也是同样的含义。可以把sandbox看做计算机内部运行的一个独立环境,sandbox会对在其内部运行的程序(可以看做小孩子)做一个限制,这样即使程序会对计算机系统有破坏,它也跑不出sandbox这个环境。

Concurrency(并发)和Parallelism(并行)的解释

今天看到一个对Concurrency(并发)和Parallelism(并行)这两个术语的一个解释,感觉很精确。记录在此,以供日后查阅(原文在这里):

Concurrency and parallelism are two related but distinct concepts.

Concurrency means, essentially, that task A and task B both need to happen independently of each other, and A starts running, and then B starts before A is finished.

There are various different ways of accomplishing concurrency. One of them is parallelism--having multiple CPUs working on the different tasks at the same time. But that's not the only way. Another is by task switching, which works like this: Task A works up to a certain point, then the CPU working on it stops and switches over to task B, works on it for a while, and then switches back to task A. If the time slices are small enough, it may appear to the user that both things are being run in parallel, even though they're actually being processed in serial by a multitasking CPU.  

Concurrency(并发)是指系统上的多个task(任务)之间由于没有任何依赖关系,所以可以同时运行。以两个taskAB),两核CPUAB)系统为例,如果在一个时间点上,task ACPU A上运行,而task BCPU B上运行,我们就可以称这两个taskParallelism(并行)运行的。对单核CPU来说,由于在一个时间点上只能执行一个task,所以这两个task只能是Sequential(串行)运行的。

一句话总结,Concurrency(并发)描述了task之间的逻辑关系(能否同时运行),而Parallelism则描述了task运行时的真正状态(是否真的在同时运行)。

“Retired Instruction”的含义

最近在读intel CPU相关文档时,看到一个词:“Retired Instruction”,不知道该作何解释。上网google到这篇网页,理解含义应该是:因为执行每个指令要花多个时钟周期,并且CPU存在流水线,乱序执行等问题,“Retired Instruction”就是指在一个时间点上,已经确定执行完成的指令。

MiB(Mebibyte)和 MB(Megabyte)

上周五和同事讨论问题时,自己才知道不仅有MBMegabyte),还有MiBMebibyte)。说来惭愧,以前看到同事ppt提到MiB,还以为是笔误呢。简单来讲,1MiB包含1024^2 bytes,自从MiB出现后,1MB更倾向于表示1000^2 bytes。同样道理,现在也有KibibyteGibibyte

参考资料:
What is the difference between 1 MiB and 1 MB and why should we care?
Mebibyte