/dev/zero

/dev/zero はどういった経緯で考え出されたのだろう。FreeBSD の man によると 4.4 BSD かららしい。BSD が起源なのだろうか。/usr/share/misc/bsd-family-tree によると 4.4BSD は1993年。割りと新しい。今では Solaris, Linux にもあることを考えると、それほど有用性が明らかなデバイスなのだろうか。
ソースは /usr/src/sys/dev/null/null.c のようだ。

static int
zero_read(struct cdev *dev __unused, struct uio *uio, int flags __unused)
{
	int error = 0;

	while (uio->uio_resid > 0 && error == 0)
		error = uiomove(zbuf, MIN(uio->uio_resid, PAGE_SIZE), uio);

	return (error);
}

zbuf は M_ZERO つきで malloc(カーネル用)されているから、ゼロで初期化されていて、これを書き込んでいるのだろうか。
man には uiomove の引数の意味が書いていないのでよくわからない。

zbuf = (void *)malloc(PAGE_SIZE, M_TEMP, M_WAITOK | M_ZERO);