第 17 部
オペレーティングシステム

671

第

1章

はじめに
WIDE プロジェクトでは、1990 年から BSD Unix を生んだカリフォルニア大学バー

CSRG (Computer Systems Research Group)

クレイ校のとの共同研究を行ってきた。主たる目的は、プロジェクト内の様々な研究開発のプラットフォームとしてを利用していくためである。
は、多くの大学や研究機関において、長い間研究開発のプラットフォームとして利用されきた。もちろん、それはがオペレーティングシステムとして優れた機能を持っていたからであるが 、それ以外に、すべてのユーザがシステム全体に関するす
べてのソースを持ち、それを自由に改変し 、情報交換を行うことが可能であったという
点は忘れてはならない。多くのユーザの研究成果は、によって正式リリースに取り入れられ、自体を改良するために貢献するという再生産の機構がうまく働いていたのである。
しかし、のリリース後、をサポートするワークステーションが市場に現れてきた。これらはがサポートするよりも安価で高性能であったため、ワー
クステーションを開発の対象として使うユーザの数が圧倒的に多くなった。また、メーカが独自にサポートした機能にも優れたものがあり、もはや通常のには戻れなくなってしまった部分もある。たとえばのなどがそれである。しかし 、メーカのサポートするにはソースコードは当然付いていない。
ワークステーションの普及は、文化を広めるという意味では成果を上げたが 、反面、すべてのユーザがソースコード を共有するというの大きな特徴を失わせてしまったのである。
までの
は、
社の
を対象にしていた。しかし、によってアーキテクチャと呼ばれるシリーズがサポートされ、という名前でリリースされたのを皮切りに、複数のアーキクテチャがサポートされるようになった。
WIDE プロジェクトでは開発ベースとして多くの国産
ワークステーションを利用しているが、これらはすべてメーカサポートのオペレーティングシステム上で動作しているため、ソースコードを参照することはできない。場合によってはメーカの協力によってソースコードを提供してもらえることもあるが、それをベースとして研究の成果を一般に配布することは困難である。そのため、が正式にサポートする機種として国産のワークステーションを加えることは、これからの開発環境を整備す

BSD Unix

BSD Unix

BSD

CSRG

BSD

4.2BSD

BSD

BSD

BSD Unix
Sun Microsystems NFS (Network File System)
Unix
Unix
Unix

Unix

4.3BSD
BSD Unix
Tahoe
Tahoe

VAX-11

DEC

VAX-11
CCI Power

CSRG
4.3BSD-Unix

BSD Unix

Unix

673

674

1992 年度 WIDE 報告書

る上で大きな意味を持っている。
また、国産のワークステーションのオペレーティングシステムのバージョンアップは、元となるの新バージョンがリリースされてから 年以上経過してからになることが多かった。正式サポートに組み入れることによって、リリースと同時に国内でも利用が可能になり、常に最先端の技術が利用できるという点でも効果が期待できる。

Unix
BSD Unix

12章
WIDE における BSD Unix のサポート
第2.1 4.3BSD-Reno
Sony

OS

NWS-3800
NEWS-OS
NEWS-3800

4.3BSD-Reno

90

4.3BSD-Reno
Sony
NEWS4.3BSD-Reno

作業開始当初は社のシリーズ上にリリースを移植する作業をおこなった。これは上のクロス環境で行い、の協力を得てのコード を流用することでシリーズで動作する
を作成
した。
に関しては
年度 WIDE プロジェクト報告書に報告されている。

[189]

2.2 4.4BSD
4.3BSD-Reno の実装を基にして 4.4BSD の実現を行う予定であったが、これにはいく
つかの問題点があった。

1. 4.4BSD では、仮想記憶システムが Mach のそれに全面的に入れ替えられた [190]。
NEWS-OS は、古い 4.3BSD の仮想記憶システムを基に作られているので、仮想記憶に関するほとんどの部分は使用できなくなった。

2. NEWS-OS は MIPS 社のプログラムを基に作られている。そのため、それを 4.4BSDに組み入れるためには、Sony だけではなく MIPS 社の了解を得なければならない。
その手続きが難航することが予想された。

MIPS R2000/R3000 CPU
Sony NEWSDEC-MIPS CPUSony Big Endian
Little Endian, Big Endian
pmax NEWS
4.4BSD
NEWS

Little

このような問題があったため、同じ
の
の
を使用する
と呼ばれる のコードを基にして、用のコードを全面的に書き換えることにした。
のコードは、完全にライセンスフリーのものであり、配布するためにライセンス上の問題が生じる可能性はない。
問題は
が 、同じ
の
を使うとはいうものの、バイトオーダがであり、それに対しはを使用しているということであった。そこでのコードを基にして、それをのどちらでも動作するものにして、できるだけ多くのファイルをとの間で共有できるよう努力をした。その結果
では、のコードの機種に依存しない大部分のファイ
ルはのファイルへのシンボリックリンクとして実現することができた。

station (pmaxpmaxEndian
pmax

pmax

)
pmax

675

676

1992 年度 WIDE 報告書

4.4BSD の作業は、I/O プロセッサを持つ NWS-3800 シリーズではなく、シングル CPUの NWS-3400 シリーズで行った。現在は NWS-3400 シリーズと、同じアーキテクチャを持つ NWS-3200 (ラップトップ機) の上で動作している。機種異存の部分や、デバイスドライバなどには、Sony から提供されたコードを利用している。
現在は 4.4BSD 上で vmunix や、コマンド 類を再構築することが可能である。コンパ
イラには GNU cc (バージョン 2.3.3) を使用している。ただし 、アセンブラとローダはNEWS-OS に付属のものを利用している。これはオブジェクトフォーマットに MIPS のECOFF フォーマットを利用しているためである。ECOFF フォーマットを用いていることにより、BSD a.out フォーマットを用いる他のアーキテクチャとのコード の共有性がいくぶん落ちている。今後、GCC と GNU アセンブラ (GAS) の新バージョンへの移行を行うと共に、BSD a.out フォーマットへの対応を行うことで、この問題は解決される予定である。新しい GAS は、 ECOFF フォーマットもサポートするようになったため、
ECOFF フォーマットを利用しながら NEWS-OS のコンパイラキットへの依存性をなくすことも可能である。
WIDE プロジェクトによる作業の成果は、
年 月にリリースされたのプレリリースであるに含まれている。また、の最終リリースは、
年 月現在、最終フリーズを行おうとしている段階にある。これは年夏以前にはリリースされることになるだろう。
なお、
およびでは、日本の国産ワークステーションとしてだけではなく、のシリーズもサポートされる。

1993 5

4.4BSD-Encumbered1992 7

4.4BSD-Encumbered
4.4BSD
Sony NEWSOMRON Luna

4.4BSD

4.4BSD1993

3章
4.4BSD の概要
第4.4BSD

ここでは 、がどのような特徴と機能を持つかということについて説明する。
の最終リリースはまだ行われていないため、
年 月現在の時点での情報である。
に関する解説は文献からも得られる。

4.4BSD
4.4BSD

1993 5[191]

3.1 4.3BSD 以降の BSD Unix の歴史
BSD Unix に由来するオペレーティングシステムを持つ多くのワークステーションは、
4.3BSD をそのベースとしている。その後も、いくつかの BSD Unix がリリースされているが、市販のシステムにはあまり反映されていないため、その詳細について知る機会は意外に少ない。まず、以降に、どのようなリリースがされたかを簡単に紹介する。

4.3BSD1986 4.3BSD
1988 4.3BSD-Tahoe それまでの VAX に加えて Tahoe アーキテクチャ 1 をサポート

4.3BSD から変化していない

したリリース。オペレーティングシステムの大部分はが 、ネットワークコードに関しては改良が施されている。

1988 BSD Networking Software 4.3BSD-Tahoe から、ライセンスフリーの部分のみ

BSD Networking Software という名前でリリースされた。
1990 4.3BSD-Reno NFS や OSI などの新機能の追加、HP や 386 などの新アーキテ
クチャのサポートなど 、大幅な変更を施されたバージョンである [189][192]。機能的には 4.4BSD と呼んでもいいほどの大きな変更が加えられているが、4.4BSD で実現すべきいくつかの大きな機能が含まれていないため 4.3BSD-Reno という名前でを抜き出したものが呼ばれた。以下のような特徴がある。

1. DEC VAX 8600/8650, VAX 8200/8250, MicroVAX II, III サポート
2. HP, i386 サポート
3. ISO/OSI ネットワークプロトコル
1

CCI Power 6/32, 6/32SX の開発コード 名。

677

678

1992 年度 WIDE 報告書

4. VFS 仮想ファイルシステム
5. NFS ネットワークファイルシステム
6. MFS メモリファイルシステム
7. FFFS (Fat Fast File System)
8. Kerberos 認証システム
9. カーネル内汎用メモリアロケータ
10. tsleep
11. IEEE 1003.1 system interface
12. TCP/IP Header Prediction
 CSLIP 階層的経路制御
13. NEW QUOTA
1991 BSD Networking Software II (NET/2) 1988 年の BSD Networking Softwareと同様に、ライセンスフリーの部分だけを抜き出したリリースであるが、仮想記憶システムを完全にオペレーティングシステムのものに置き換えるなど 、大幅な機能変更が施されている。

Mach

AT&T のライセンスに抵触するために、カーネル内のコードに一部省略された部分がある未完成なリリースであったが、ライセンスに縛られずに自由に配布できるということから、以外でを改造して使用可能なオペレーティングシス
テムとしてサポートする活動が始まった。この中には、次のようなものが含まれる。

CSRG

NET/2

 Berkeley Software Design, Inc. の BSD/386
 William Jolitz による 386BSD
 Mach の BSD サーバである BNR2SS
 NetBSD
1992 4.4BSD-Encumbered 4.4BSD のアルファリリースである。当初の計画では、少AT&T (USL) のライセンスからフリーに なる予定で
4.3BSD
32V 以上のライセンスを必要とする。
リリース時のアナウンスでは、4.4BSD-Encumbered からフリー部分を取り出したものを 4.4BSD-Lite という名前で NET/2 と同様の扱いでリリースする予定であった

なく ともカーネルの部分はあったが、などと同様にが 、これは未だ果たされていない。

第 17 部

オペレーティングシステム

679

1993 4.4BSD 4.4BSD の最終リリースは、1993 年の夏頃になりそうな見通しである。

4.4BSD-Encumbered に比べて、大きな機能変更はほとんどない。CSRG は、4.4BSDのリリースの後解散することを宣言しているので、これが最後の BSD Unix になる
可能性は非常に高い。

4.4BSD-Encumbered および 4.4BSD では、以下のような機能が追加されている。
 NEWS, Luna, DECstation, SPARC サポート
 LFS (Log-Structured File System) Stackable Filesystem 64 ビットファイルサイズ (o t) 32 ビットデバイスタイプ (dev t)
 IEEE 1003.2 shell and application utility interface
 新 con g 機構
これらについては、この後の部分で詳しく説明する。

3.2

サポート アーキテクチャ

4.3BSD の対象だった VAX と Tahoe は、新しい仮想記憶システムが採用された時点でサポートが打ち切られ、代わって HP 9000/300 シリーズが CSRG の主力開発機種となった。NET/2 では、これ以外に i386 が加わっている。
4.4BSD では、さらにいくつかの機種が加わり、次のようなアーキテクチャをサポートしている。

 HP 9000/300 68000-based workstations{ 68030 と 68040 の CPU をサポート
 Intel 386/486-based machines (ISA/AT or EISA bus のみ){ コードは入っているが、実際には動作しない

 Sony NEWS MIPS-based workstations{ MIPS R3000 (big-endian), シングルプロセッサマシン
 Omron LUNA 68000-based workstations{ Luna-I と Luna-II がサポートされる予定
 DECstation 3100/5000 MIPS-based workstation

680

1992 年度 WIDE 報告書{ MIPS R2000/R3000 (little-endian) SPARCstation I & II SPARC-based workstations

3.3 4.4BSD に含まれるコマンド 類
4.4BSD に含まれる、主なコマンド 類の一覧を挙げる。4.4BSD では、/usr/src の下のサブデ ィレクトリの下には、各コマンドが 1 つのディレクトリとして収められるようになっている。したがって、各ディレクトリの下のリストによって、そこにどのようなコマンドが置かれているかを知ることができる。

3.3.1 /sbin
Makefile
Makefile.inc
XNSrouted/
badsect/clri/
disklabel/dmesg/
dump/
dumpfs/dumplfs/

fastboot/
fsck/
fsdb/
icheck/ifconfig/
init/mknod/
mount/
mount_fdesc/
mount_kernfs/

mount_lofs/
mount_nfs/
mount_null/
mount_portal/
mount_umap/
mountd/ncheck/newfs/
newlfs/nfsd/

nfsiod/nologin/ping/
quotacheck/reboot/restore/route/
routed/savecore/
scsiformat/

shutdown/slattach/startslip/
swapon/tunefs/umount/config/config.new/cron/
dev_mkdb/
diskpart/
edquota/
eeprom/inetd/
iostat/kgmon/
kvm_mkdb/
lpr/
mkproto/mtree/
named/
nvi.recover/portmap/
pstat/

pwd_mkdb/
quot/
quotaon/repquota/rmt/
rwhod/
sa/sendmail/
sliplogin/sysctl/syslogd/
timed/
traceroute/
trpt/
trsp/
update/
vipw/

date/
dd/
df/
echo/
ed/
expr/

hostname/
kill/
ln/
ls/
mkdir/
mv/

pax/
ps/
pwd/
rcp/
rm/
rmail/

rmdir/
sh/sleep/
stty/
sync/
test/

3.3.2 usr.sbin
Makefile
Makefile.incac/accton/amd/
arp/
bad144/chown/
chroot/3.3.3 bin
Makefile
Makefile.inccat/chmod/cp/csh/

第 17 部

オペレーティングシステム

681

3.3.4 usr.bin
Makefile
Makefile.inc
apply/
ar/at/banner/basename/
bc/
bdes/
biff/
cal/
calendar/
cap_mkdb/
checknr/chflags/
chpass/cksum/
cmp/
col/colcrt/colrm/
column/comm/compress/cpp/
ctags/
cut/dc/
deroff/diction/diff/
dirname/du/env/
error/
ex/expand/f77/
false/
file/find/finger/
fmt/
fold/
fpr/
from/
fsplit/fstat/
ftp/
gcore/
gprof/
graph/
grep/
head/
hexdump/id/
indent/join/
jot/
kdump/
ktrace/lam/
last/lastcomm/
ld/learn/
leave/
lex/
locate/lock/logger/login/

logname/look/lorder/
m4/
mail/
make/
man/
mesg/
mkdep/
mkfifo/mklocale/mkstr/
more/
msgs/
mt/
netstat/nfsstat/nice/
nm/
nohup/
nvi/
pagesize/
pascal/passwd/paste/
patch/
plot/
pr/printenv/
printf/ptx/
quota/
ranlib/ratfor/rdist/
renice/rev/
rlogin/rs/
rsh/
ruptime/
rwho/
sccs/
script/sed/
shar/
showmount/size/soelim/sort/
spell/
spline/split/
strings/
strip/
struct/su/systat/tail/
talk/tcopy/
tee/telnet/
tftp/
time/
tip/
tn3270/touch/
tput/
tr/
true/
tset/

libcurses/
libedit/libkvm/libm/

libmp/
libplot/
libresolv/
librpc/libtelnet/
libterm/
libutil/liby/

3.3.5 lib
lib:
Makefile
csu/
libc/
libcompat/

tsort/
tty/ul/uname/
unexpand/
unifdef/
uniq/
units/
unvis/
users/
uucp/
uudecode/
uuencode/vacation/vgrind/vis/
vmstat/vmstat.sparc/
w/
wall/
wc/
what/
whereis/who/
whois/
window/
write/
xargs/
xinstall/xsend/
xstr/
yacc/
yes/

682

1992 年度 WIDE 報告書

lib/libc:
Makefile
gmon/
compat-43/ hp300/
db/
i386/
gen/
locale/luna68k@
mips/
net/
obj@

quad/
regex/
sparc/
stdio/

stdlib/string/sys/tahoe/

kpasswdd/
lfs_cleanerd/
mail.local/
makekey/rbootd/rexecd/rlogind/
rshd/

vax/

3.3.6 libexec
Makefile
Makefile.incbugfiler/comsat/3.4

fingerd/ftpd/
getNAME/getty/

talkd/
telnetd/
tftpd/
uucpd/

バージョンによるコマンド の比較

4.3BSD-Reno, NET/2, 4.4BSD-Encumbered, 4.4BSD に含まれるコマンドを比較し 、コ
マンドやシステムがそれぞれのリリースの中で、どのソースディレクトリに含まれるかを一覧で示す。
この表から、捨て去られたコマンド や、新しくリリースに組み入れらたコマンド の様
子を見ることができる。
の項目だけにというディレクトリが存在す
るが、これは、では言語処理系をというディレクトリに集めていたためである。
では、このディレクトリは無くなって元の構造に戻ったために属するコマンドは無くなっている。
このリストの中には、すべてのリリースを通じて共通のコマンドは含まれていない。また、以外の つのリリースでディレクトリにあるコマンドも省いた。
あるいはで初めて導入されたコマンドはイタリック体で表示されている。

4.4BSD

NET/2
Encumbered

Reno
3

4.3BSD-Reno

4.4BSD

prgm

old

pgrm

prgm

4.4BSD-

第 17 部

オペレーティングシステム

Commandacadb
adventure
apply
ar
ar
as.hpux
as.tahoeas.vax
at
awk
bc

Reno
usr.sbinbin
games
usr.binpgrm
usr.sbin

bogglegames

cassette
cc

sys
pgrm

ching
cksum

games

bdes

cap mkdb
ch agscon g.new

pgrm
pgrm
usr.binusr.binusr.bin

NET/2

Alpha
usr.sbinbin
games
usr.binusr.bin usr.bin
usr.sbin
old
old
old
usr.binold,usr.bin
usr.binusr.bingames

4.4BSDusr.sbinoldgames
usr.binusr.bin
old
old
old
old
usr.binoldusr.binusr.bingames
usr.binusr.bingames
usr.binusr.bingames
usr.binusr.sbinusr.binconsolerl
sys
cpio
usr.bin usr.bin usr.bin
old
cpp
pgrm
old
old,usr.bin
cron
usr.sbinusr.sbinusr.sbin
old
old
crypt
ctags
pgrm
usr.bin usr.bin
usr.bindbconv
old
old
pgrm
old
old
dbx
usr.binusr.binusr.bin
dc
bin
bin
bin
dd
delivermail libexec
derousr.binusr.binusr.binkerberosIV
kerberosIV kerberosIV
des
dev
sys
sys
usr.sbin usr.sbin
usr.sbindev mkdb
usr.binusr.binusr.bindictionusr.binusr.binusr.bindidlmpccusr.sbin usr.sbin usr.sbin
olddumplfssbin
sbin
dungeon
games
games
ed
bin
bin
bin,old
eepromusr.sbin
sbin
sbin
sbin
old
enploadusr.bin
old
old
eqn
error
pgrm
usr.bin usr.bin
usr.bin
etc
etc
etc
etc.i386
etc
etc.luna68k
etc
etc
etc.pmaxexusr.binusr.binusr.bin
expr
bin
bin
bin
f77
pgrm
usr.binusr.bin

683

684

1992 年度 WIDE 報告書

Command
le
copy
oppy
fpr
fsdb
fsplit
g++
gas
gcc
gcore
gdb
gettable
gprof
graph
grep
gro
groupshalt
htablehunticheckid
implogimplogd
indent
init
join
jot

Reno
usr.binusr.sbin
sys
pgrm
sbin
pgrm
libexec
pgrm
usr.sbinpgrm
usr.binusr.binusr.binsbin
usr.sbingames
sbin
usr.sbinusr.sbin
pgrm
sbin
usr.bin

NET/2
usr.sbinusr.binusr.binusr.binusr.binusr.binusr.binusr.binusr.sbinusr.binusr.binusr.binsbin
usr.sbinusr.binusr.sbinusr.sbinusr.binAlpha
usr.binusr.sbin

4.4BSDusr.binoldusr.binsbin
usr.binusr.binusr.binusr.binusr.binusr.binusr.sbinusr.binusr.binusr.binusr.binoldusr.binsbin
usr.binusr.sbinoldsbin
usr.binusr.sbinusr.sbinusr.binold,sbinusr.binsbin
usr.binold
old
usr.binold,sbinusr.binusr.binkerberosIV
usr.binkerberosIV
usr.binold,usr.bin
usr.binold,usr.bin
libexec

kdb

kerberosIV,sys kerberosIV kerberosIV

kerberos

etc,kerberosIV kerberosIV kerberosIV

kdump
lam

ld
learn
lex

pgrm
usr.binold,pgrm

libF77
libI77
libU77
libcompat
libdbm

lib
lib
lib
lib
lib,old

lfs cleanerd

libeditlibg++
libkern
libkvmlibm
libmp
libndbm
libpc
libplot
libtelnet
lint

usr.binusr.binlib
lib,old
lib
lib
lib
pgrm

lib
lib

old,usr.bin
usr.binold,usr.bin
liblib,old
lib
lib
sys
lib
lib,old
lib
lib
lib

usr.binoldusr.binusr.binusr.bin
old

lib
old
lib
sys
lib
lib,old
lib
old
lib
lib

第 17 部

オペレーティングシステム

Reno
pgrm
usr.bin

NET/2
usr.binbin
usr.binCommandlisp
lnlognamelooklorderm4
machinemail.local
make
man
mdec

usr.binusr.binusr.binlibexec
old,usr.bin usr.bin
old,usr.bin usr.bin
sys

mkdep
mkhostspgrm
usr.sbinmkpasswd
mkprotomkstr
more

usr.sbinusr.sbinpgrm
usr.binms
nchecknetccitt
netrmp

share
sbin

nm

pgrm

miscfsmklocalemount fdesc
mount kernfs
mount lofs
mount nfs
mount null
mount portal
mount umap

newlfsnologinusr.binpgrm
pgrm
usr.bin

sys

np100

nvi
nvi.recoverpascalpgrm

pcc
phantasia

libexec
games

plot
portmap
pr
pstat
ptx
pwd mkdb
quiz
quot
ranlibratforusr.bin

patch
pax
pig

usr.binusr.sbinusr.bingames
usr.sbin
pgrm
pgrm

Alpha
4.4BSDusr.binoldbinbin
usr.binusr.binusr.binusr.binusr.binusr.binusr.binusr.binusr.binoldlibexec
libexec
old,usr.bin old,usr.bin
old,usr.bin usr.bin
sys
usr.binoldsys
usr.binusr.binoldusr.binold
old
usr.sbin usr.sbin
usr.bin usr.bin
usr.binusr.bin old,usr.bin old,usr.bin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
old
old
sbin
sbin
sys
sys
sys
sys
sbin
sbin
usr.bin usr.bin
usr.bin
sbin
sbin
old
usr.binusr.sbinusr.bin usr.bin
usr.binusr.bin
bin
old
old
games
games
games
usr.binusr.binusr.sbin usr.sbin usr.sbin
usr.bin old,usr.bin
usr.sbin usr.sbin
usr.binusr.binusr.sbin usr.sbin usr.sbin
games
games
usr.sbin usr.sbin
usr.bin usr.bin
usr.binusr.binusr.bin

685

686

1992 年度 WIDE 報告書

Command

Reno

NET/2

refer
rev
ro
rogue

usr.binoldusr.bingames,oldgames

rxformatsa

usr.sbinusr.sbin

sed
sh
size
sort
spell
splineusr.binbin
pgrm
usr.binusr.binusr.binstrings
strip
structsum
symorder

pgrm
pgrm
pgrm
usr.binpgrm

syslinesystat
tail
talk
tar
tbl
test

usr.binusr.binusr.binold,usr.bin usr.binbin
usr.bin
bin

tmac
tsort

share
pgrm

share
usr.binunifdefunits
uucp
v lters
vgrind
vipw
vm

pgrm
usr.binusr.binusr.binpgrm
sbin

usr.binusr.sbinsys

warp
whereiswhich
whoamixinstallgames
usr.binusr.binusr.binpgrm

usr.binusr.binusr.binusr.bin

xstr
yacc

pgrm
old,pgrm

usr.binusr.binrbootdrs

scripts
scsiformat

startslip

sysctltetrisuname

vmstat.sparc

xneko
xroachxsend

usr.sbinbin
usr.binusr.binusr.binusr.binAlpha
4.4BSD
libexec
libexecold
oldusr.binusr.binold
oldgames,old games,old
usr.binusr.sbinoldusr.sbin usr.sbin
sys
sbin
sbin
usr.bin old,usr.bin
bin,old
bin,old
usr.binusr.binusr.bin old,usr.bin
usr.binusr.binusr.binusr.binsbin
sbin
usr.binusr.binusr.binusr.binusr.binusr.bin
old
old
old
old
usr.sbinoldoldusr.binusr.binusr.binusr.binold,usr.bin old,usr.bin
bin
old
old
old
bin,old
bin,old
games
old,share old,shareusr.binusr.binusr.binusr.binusr.binusr.binusr.binusr.binusr.binold
old
usr.binusr.binusr.sbin usr.sbin
syssys
usr.bingames
old
old,usr.bin
old
old
old
old
usr.binusr.bin
games
games
games
usr.binusr.binusr.binusr.binold,usr.bin old,usr.bin

第 17 部

687

オペレーティングシステム

3.5 64 ビットファイルサイズ
Unix

(o t)

32

従来の
では、ファイル内のオフセットを表すためのデータ構造には、
ビット符号付き整数が用いられてきた。しかし 、昨今のハードディスク技術の進歩により、 ビット符号付き整数で表すことができる最大値以上の容量を持つハードディスクも現れてきた。そのため、ではとしてビット符号付き整数を使用するように変更された。
現在のコードではは実際には型であり、これをサポートするコンパイ
ラでしかのシステムを構築することはできない。ただし 、型が直接使用されているわけではなく、 ビット整数を表す型としてはが使用されている。
コンパイラによる違いは、を指定する部分で吸収できる。
ファイル内のオフセットを指定するためのデータ構造が変化したことにより、いくつかのシステムコールがその影響を受ける。たとえば 、
システムコールは次のような呼びだし形式を持つ。

32

4.4BSD

4.4BSD

o t

o t

64

long long(quad t)long longquoad t64
quoad tlseeko t lseek(int fdes, o t o , int sbase)
この呼びだし形式は変わらないが、o t が表すデータの大きさが変わるので、不用意に long 型などを用いているソースコードは、再コンパイルにより動作しなくなってしまう。ただし 、バイナリ互換性は保たれているので、4.3BSD のシステムで作成されたバイナリコードは、そのまま 4.4BSD 上で動作することが出来る。
また、以下のようなデータ構造が影響を受ける。

 struct ock (l start, l len) struct le (f o set) struct stat (st size)
 struct uio (uio o set)
64 ビット整数が導入されたことにより、その影響受けないはずの変数にも影響が現れる。それは、gcc 2.0 では 64 ビット変数は 64 ビットのデータ境界に置かれるようになっているからである。構造体のメンバの中に 64 ビット変数があると、その変数が 64 ビット境界に置くように配置される。これにより大きさがあらかじめ決まっている構造体のサイズが思ったものと異なってしまうからである。多くの構造体のメンバの再配置が必要とされた。

3.6

仮想記憶システム

4.3BSD の仮想記憶システムは 1979 年頃に設計されたものである。当時、メモリのコ
ストはハードディスクの約 1000 倍であり、仮想記憶機構の主な目的は、限られたメモリ

688

1992 年度 WIDE 報告書を使っていかに広い仮想空間を提供できるかということにあった。メモリのコストが下がり、当時と比べものにならないほどのメモリを搭載することが一般的になってくると、
ハードウェアの技術レベルと仮想記憶システムの間のギャップが表面化してきた。このため、
仮想記憶システムの見直しの必要性が以前から指摘されてきた。
の仮想記憶システムを実現するうえで、解決すべき課題であると考えられていたのは次のような点である。

BSD Unix
4.4BSD 豊富にあるメモリを効率よく使用する スワップ空間より大きなメモリをサポート
 高い移植性 広大で、離散的な空間をサポート
 バッファキャッシュとメモリプールの統合

CMU Mach
BSD Unix

実装はユタ大学によって行われた。
のオペレーティングシステムの仮想記
憶管理システムを全面的に採用し 、それにの仮想記憶インタフェースの皮を被せるような形で実現されている。
従来のでは、プログラムの仮想空間はの つの領域から成り立っていた。しかし 、新しい仮想記憶システムにより任意の数の領域を持つことができるようになった。これを使って、離散的なアドレス空間や、プロセス間での共有メモ
リを実現することができる。

Unix

3.7

text, data, bss, stack 4

ファイルシステム

4.3BSD では、ハードディスクを利用した通常のローカルファイルシステムしかサポートされていなかったが 、NET/2 で NFS (Network File System) をサポートするために
VFS (Virtual File System) のインタフェースが取り入れられ、複数の種類のファイルシ
ステムをサポートすることが可能になった。
では、さらにスタッカブルファイルシステム
が採用さ
れ 、ファイルシステムを階層的に積み重ね、あるファイルシステムの機能を使って、別の種類のファイルシステムを実現することが可能になった。この機構により、新しいファイルシステムの開発が容易になり、いくつもの種類のファイルシステムがサポートされている。

4.4BSD(stackable le system)

3.7.1 MFS

MFS (Memory based le system) は 4.3BSD-Reno からサポートされているファイルシ

ステムである。単なるメモリディスクとは異なり、仮想空間上にファイルシステムを実

第 17 部

689

オペレーティングシステム

[193]

現する
。このため、メモリの量に制限されずにファイルシステムの大きさを設定することが可能で、メモリが不足してくると、アクセスされていない部分はスワップデバ
イスに書き出される。
はテンポラリディレクトリ
に対して利用されることが多く、短時間しか存在しないテンポラリファイルはメモリ上作成されすぐに消去されるのに対し 、長時間存在するファイルはスワップデバイスに待避され、メモリを圧迫しないという特長を持つ。
はソースコードで行程度と非常に単純な機構で実現されている。
の作成はコマンドによって行い、このコマンドは実行を終了せずデーモンとして実際の入出力の処理を行う。入出力を行うプロセスは、デーモンとして待機しているをすることで、デーモンに対して処理を依頼する。
現在のは、メモリとのデータ転送と比較して約程度の速度を実現している。
メモリに比べ約半分の速度しか実現されていないのは、ユーザ空間からカーネルバッファと、カーネルバッファからが管理する空間への 回のメモリ間コピーが必要とされていることによる。将来的には、 度のコピーで実現することを目標としている。

MFS

MFS
newfs

(/tmp)

560

MFS

newfs

newfs wakeup
MFS

45%

newfs

1

2

3.7.2 NQNFS

NFS (Network File System) もまた、4.3BSD-Reno からサポートされた。Sun Microsystems 社の NFS と互換性があるが、独自の拡張機能も持っているため NQNFS (Not Quite
NFS) と呼ばれる [194]。実装はカナダ Guelph 大学の Rick Macklem が行い、NFS の仕様を元にして独自に実装された。RPC/XDR の部分については Sun の提供するコードを利用しているが、カーネル内では RPC/XDR のメカニズムは使用せず、直接データ構造を操作する構造になっている。
では 、
や
にはない
というキャッシュ管理の機構が実装されている。
というのは、サーバがクライアントに対してと呼ばれる短時間だけ有効なアクセス権を発行するメカニズムである。あるクライアントにを与えている最中に、別のクライアントからそのファイルに対するアクセスがあった場合、サーバはただちにその要求に答えるのではなく、を持っているクライア
ントに対して、キャッシュを書き出す要求を出し 、その応答を受け取ってから、 番目のクライアントに対してデータを送る。
が応答しなければ 、の有効期限が終り、そのは効力を無くしてしまうので、その後で 番目のクライアントの要求に答えることが出来る。このように、はステートレスなのプロトコル上でも有効に動作するキャッシュ管理のメカニズムである。

4.4BSD

4.3BSD-Reno
Lease

NET/2

[195]

Lease

(Lease Holder)
2
Lease

Lease

Lease

Lease

Lease

3.7.3 Stackable Filesystem

Lease Holder
Lease

2

NFS

Stackabel Filesystem は 、UCLA の Ficus プロジェクトの中の活動として 、John S.
Heidemann によって実現された機能である [196][197]。この目的は次のような点である。
 システムから独立したファイルシステム

690

1992 年度 WIDE 報告書

 再利用性の向上
 開発の容易性
 拡張性の向上/sys/miscfs の下には、次のようなサブディレクトリが存在する。
deadfs umount されたファイルが属する
fdesc プロセスのファイルディスクリプタをアクセスする
fofs FIFO を実現する
kernfs カーネルに関する情報
lofs ループバックファイルシステム
nullfs Stackable Filesystem のスケルトン
portal Portal Filesystemspecfs スペシャルファイル
umapfs uid のマッピングを行う Stackable Filesystem のサンプル

3.8 LFS
LFS (Log-Structured File System) は、UCB Sprite プロジェクトの成果であり、Mendel
Rosenblum, John K. Ousterhout 等によって実装された。
LFS は、現在のファイルシステムが持つ次のような問題点を解決するために考案されたファイルシステムである。

 ディスクのスループットは向上してもアクセス速度は変わらない read の効率はキャッシュにより解決されるので write が問題となる
 FFS では小さなファイルに書き込みを行う時には、ディスクのバンド 幅の 5% 以下
しか利用されなていない

LFS は 、以上のような問題点を解決するために、ディスクアクセスのためのヘッド のシークを極力排除するという方針をとっている。そのため、ディスクに書き出すべきデー
タは連続したブロックに更新情報として書き込まれていく。これがと呼ばれる所以である。
では、小さいファイルの作成と消去を繰り返す処理が非常に多い。この処理はデータの更新を伴うため、物理的に離れた場所にあるデータを更新しなければならず、ディスクヘッドのオーバーヘッドが大きなコストを持ってくる。
は主に、小さなファイルの作成とデータの書き込みに焦点を当てたファイルシステムで
ある。

Unix
inode

Log-Structured

LFS第 17 部

オペレーティングシステム

691

また、ディスクの中で最近更新したデータが局所化されているので、システムがクラッシュした際の復旧の点からも有利である。定期的にチェックポイント情報を更新し 、クラッシュした際には、最後のチェックポイントより後に更新されたデータだけを検査すればよい。従来のファイルシステムでは、ファイルシステム全体を走査して整合性の確認をしなければならなかったの対して、検査するデータ量が非常に少なくなっている。

3.9

残された課題4.4BSD の最終リリースにも実現することのできなかった大きな機能がいくつか残っている。

3.9.1 BStreams

AT&T ベル研究所の 8th Edition Unix の Streams の考えと、BSD の socket を統合して BStreams と呼ぶ機構を実装する予定であったが、4.4BSD には未サポートのままリリースされる。

3.9.2

ネット ワークコード の高速化

LBL (Lawrence Berkeley Laboratory) の Van Jaconson によって、TCP/IP のネット

ワークコード の大幅な改良が試みられている。実装上の階層をできる限り排除することと、ネットワークハード ウェアからの割り込み処理がなるべく起こらないようにするというのが基本的なアプローチである。大幅な構造の改造を伴う変更であり、現時点ではには取り入れられない。

4.4BSD
3.9.3

バッファキャッシュと仮想記憶の統合

現在はファイルシステムのバッファキャッシュと仮想記憶システムでは、別々のメモリ
プールを管理している。この つを統合して、互いのメモリを単一のインタフェースで管理するという計画が以前から存在したが、これもでは実現されていない。

2

4.4BSD

692

1992 年度 WIDE 報告書