olaris で擬似ファイルシステムをつくろう/其の1

目次

ご注意

ここで紹介しているプログラムは、カーネルモジュールを含んでいます。そのため、プログラム上に問題があった場合(可能性大)にはシステムが PANIC し、場合によってはファイルシステムに重大な障害を引き起こす可能性があります。以下のプログラムはテストプログラムで、十分な検証を行ってはいません。したがってあくまで個人の検証ためにお使いいただき、重要なシステム上では動作させないでください。本プログラムの使用により発生したトラブルなど、いかなる損害についても一切の責任を負いかねます。ご利用は自己責任にてお願いいたします。

概要

今回は Solaris 上でマウントが可能な自作の擬似ファイルシステムを作成します。
擬似ファイルシステムとは、ハードディスクなどの実際のストレージデバイスを持たないファイルシステム のことで、Solaris 上では NFS、procfs、tmpfs などがあります。中でも一番身近な擬似ファイルシステムとして は NFS(Network File System)ではないかと思います。NFS はリモートシステムのハードディスク上のファイルを あたかもローカルディスクにあるよう見せ、読み込み、書き込み等の操作することができるファイルシステムで、 擬似ファイルシステムのひとつです。(これに対して対して UFS 等のストレージデバイスを持つファイルシステムを ディスクファイルシステム、レギュラーファイルシステムと呼びます)
ここでご紹介する擬似ファイルシステム IUMFS も実際のストレージデバイスを持たず、このファイルシステム 上のファイルはメモリに保持されます。そのため、システムがリブートされてしまうとこのファイルシステム 上のファイルは全てなくなってしまいます。そういった意味では、/tmp に使われている tmpfs に近いもの かと思います。
現時点ではほとんど使い道の無いファイルシステムですが、今後はこれを利用して各種ネットワーク上のリソース をマウントしてローカルファイルのようにして利用できるファイルシステムを作成できればと考えています。

ソースファイルとダウンロード

ソースファイル: iumfs-tmpfs.tar.gz(2010/04/29 更新 - OpenSolaris に対応しました)

tar ファイルに含まれるファイル
iumfs.cIUMFS ファイルシステムモジュール
iumfs_vnode.ciumfs の vnode オペレーションが記述されたコード
iumfs.hヘッダーファイル
iumfs_mount.cIUMFS ファイルシステム用の mount コマンド
Makefile.inMakefile の雛形
configure.inconfigure の雛形
configureconfigure スクリプト
fstest.ciumfs の機能テスト用プログラム
test.shテストを実行するスクリプト(マウントとfstestの実行)
install-shインストールスクリプト

各ソースコードはこちらから参照していただけます

http://github.com/kaizawa/iumfs-tmpfs

動作確認済み Solaris バージョン

OpenSolaris 対応の変更を行った後(2010/4/29) の iumfs ファイルシステム の動作確認状況は以下のようになっています。
Solaris9 以前はテストしてません。Soalris 10 も sparc のみのテストです。

プラットフォーム
Solarisバージョン
Sparc
(32bit)
Sparc
(64bit)
x86x64
Solaris9以前????
Solaris10-??
OpenSolaris-?

○:動作確認済み ×:動作不可 ?:未確認 -:該当なし

プログラムの解説

IUMFS ファイルシステムモジュール

カーネルインターフェース

Solaris 上のファイルシステムは、デバイスドライバや、STREAMS モジュールのように、ロード可能な カーネルモジュールとして実装されています。ローダブルなカーネルモジュールである以上、カーネル とのインターフェースさえ実装していれば、デバイスドライバのように後からシステムにインストール し、カーネルにロードすることが可能になるはずです。 しかし問題となるのがこの「カーネルとのインターフェース」という部分なのです。
デバイスドライバや、STREAMS モジュールについては Sun のドキュメントに カーネルインターフェースが文書化されており、開発者はカーネルにロード可能なドライバ・モジュール に必要な要件を得ることができます。(英語しか無いですがそれでも無いよりはましです)しかし、 ファイルシステムについてはそのインターフェースが公開されておらず、ファイルシステムとして どのような要件を満たさなければならないのかがまったくわかりません。
このように、ファイルシステムを自作するには厳しい状況なのですが救いの手はあります。それが 「UNIX カーネルの魔法」と「SOLARIS インターナル」という 2 つの書籍です。
「UNIX カーネルの魔法」は Solaris に特化したものでは無いのですが、Solaris の元にもなっている SVR4(System V Release 4) について説明した本で、実際のコードは書いていないものの、ファイルシステム の実装方法について書かれており、SVR4 システム上のファイルシステムに必要な要件(実装すべき関数や、 その機能)について知ることができます。
「SOLARIS インターナル」は名前のとおり、Solaris のカーネルの実装について解説している本で、 ファイルシステムを含めた実際の Solaris カーネルのコードに近い情報を知ることができます。
これ以外にも、以下に示す各種ヘッダーファイルから、カーネルからファイルシステムモジュールのへの エントリポイント等を推測することもできます。

sys/modctl.hファイルシステムモジュール用リンケージ構造体等
sys/vfs.hVFS オペレーション
sys/vnode.hVNODE オペレーション

このファイルシステムを作成しようと思い立った時は、Solaris でロード可能なファイルシステムで、 コードが参照可能なものとしては XFS ぐらいしかなかったのですが、現在は オープン Solarisで Solairs 10 相当のコード(実際には次期バージョン Solaris であ る Nevada ベースですが)を参照することができます。これは大きなアドバンテージです。

コンフィギュレーションエントリポイント

Solaris でファイアーウォールを作ろうや、Solaris で SoftEther もどきを動かそうにて デバイスドライバや、STREAM モジュールのコードをご紹介してきましたが、ローダブルモジュールである ファイルシステムモジュールも、カーネルからのエントリポイントはこれらのカーネルモジュールと同様に _init(9E), _info(9E), _fini(9E) になります。

_init(9E)モジュールの初期化ルーチン
_info(9E)モジュール情報取得ルーチン
_fini(9E)モジュール終了処理ルーチン

カーネルが、ロードしようとしているモジュールがドライバなのか、ファイルシステムなのかを判断して いるのが、_init(9E) 内で mod_install(9F) に渡している modlinkage 構造体です。 カーネルは、この modlinkage 構造体からリンクされている modlfs 構造体(システムモジュール用の リンケージ構造体 sys/modctl.h参照)からモジュールがファイルシステムモジュールであることがわかり、 またそのファイルシステムモジュールでサポートされている操作を知ることができます。

_init() 
{ 
   int err;
   
   err = mod_install(&modlinkage);
         ^^^^^^^^^^^^^^^^^^^^^^^^^
   return (err);
}

・・・と、ここまでの流れは Solaris 9 と Solaris 10 で同じなのですが、実はここから Solaris10 とそれ以前の Solaris(少なくとも Solaris 9)の実装が異なっています。正直私も最初は Solaris 9 上でファイルシステムを書けば、それを Solaris 10 でも動かせるだろうと思っていたのですが、 Solaris 10 のヘッダーファイル(sys/vfs.h、sys/vnode.h)を見て愕然としました。先に書いた modlfs 構造体が変更されていて、この構造体から参照されるデータ構造体も一新されていたのです。Solaris 10 のヘッダーファイルのコメントを見る限り、これらの変更は、各ファイルシステムからカーネル側の 構造体への依存性を無くし、カーネル側が変更されてもファイルシステムの再コンパイル が必要ないようにすることが目的のようです。(具体的には vfsops 構造体、vnode 構造体等の ファイルシステムからの直接の確保・開放を禁止し、カーネルが提供しているインターフェースを介して のみ確保・開放 を行い、またこれらの構造体のメンバーの参照も一部に限定し、万一構造体が patch などで変更された 場合にもファイルシステム側に影響ないようになっているようです)
以下に Solaris 9 と Solaris 10 での modlinkage 構造体からリンクされている構造体群の違いを示します。

Solaris 9 の場合

 modlinkage (modlinkage 構造体)
     |
   +--- modlfs (modlfs 構造体)
            |
            +--- mod_fsops (mod_ops 構造体)
            |
            +--- iumfs_vfssw (vfssw 構造体)
		       |
		       +--- iumfs_init (初期化ルーチン)
		       |
		       +--- iumfs_vfsops (vfsops 構造体)
			        |
				+--- iumfs_mount(MOUNT オペレーション)
				|
				+--- iumfs_unmount(UMOUNT オペレーション)
				|
				...

Solaris 10 の場合

 modlinkage (modlinkage 構造体)
     |
   +--- modlfs (modlfs 構造体)
            |
            +--- mod_fsops (mod_ops 構造体)
            |
            +--- iumfs_vfsdef (vfsdef 構造体)
		       |
		       +--- iumfs_init (初期化ルーチン)

Solaris 9 の場合、modlfs 構造体に vfsops 構造体がメンバーとして含まれており、この vfsops 構造体 のなかに、VFS オペレーション(mount や umount など)へのポインターがセットされています。
これに対して、Solaris 10 では modlinkage 構造体からは VFS オペレーションのポインターがリンクされて いません。それでは、Solaris 10 ではどうやってカーネルがこのファイルシステムの VFS オペレーション へのポインターを知るのでしょう?実は Solaris 10 では初期化ルーチン(IUMFS の場合 iumfs_init 関数) の中でvfs_setfsops() という関数に iumfs_vfs_ops_def_array という配列を渡すことによって、VFS オペレーションのリストををカーネルに伝え、カーネル自身が vfsops 構造体を生成し、ファイルシステム 側にのそのポインタを返しているのです。

       err = vfs_setfsops(fstype, iumfs_vfs_ops_def_array, &iumfs_vfsops);
                                  ~~~~~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~
				   カーネルに渡す VFS        カーネルが作成した
				   オペレーションがリスト    vfsops構造体のポインタ
				   された配列                がセットされる

ここで紹介している IUMFS ファイルシステムでは 「SOL10」が define されているかどうかによってビルドする モジュールが Solaris 10 用か Solaris 用9 かを判断しこれらのコードが変更されるようにしています。

VFS オペレーションと VNODE オペレーション

概要のところでお話したように、Solaris には大きく分けて「擬似ファイルシステム」と 「ディスクファイルシステム」の2種類のファイルシステムがあり、UFS, NFS, PCFS, TMPFS, PROCFS ・・などさまざまなファイルシステムが存在します。これらのファイルシステムはそれぞれ別々の ファイルシステムモジュールとして存在し、それぞれ独自に実装されています。
各ファイルシステム独自の実装をカーネルから隠蔽するため、VFS(仮想ファイルシステム)という というレイヤが設けられており、ファイルシステムへの操作はこの VFS のフレームワークを通じて行います。 各ファイルシステムもVFS のフレームワークにのっとって、VFS のインターフェースを実装し、内部については 独自に実装しています。たとえば、ユーザプロセスからあるファイルシステムの mount(2) 要求があった 場合、カーネルは VFS のフレームワークを介してファイルシステム依存の mount ルーチンを呼び出します。
VFS インターフェースはファイルシステム自体を操作(mount/umount 等)するためのインターフェース ですが、同様にファイルシステム上に存在するファイルへの操作(open/read/write 等)にも、 VNODE というインターフェースが存在し、各ファイルシステム独自の実装がカーネルから隠蔽されています。

以下に本 IUMFS ファイルシステムが現在サポートしている VFS および VNODE のインターフェースのオペレーション をリストします。(比較のため、UFS でサポートしているオペレーションについても載せます。)

VFS オペレーション

VFS オペレーション説明IUMFSUFS
vfs_mountファイルシステムをマウントする。mount(2)システムコールに対応。
vfs_umountファイルシステムをアンマウントする。umount(2)システムコールに対応。
vfs_rootファイルシステムのルートの vnode を得る。
vfs_statvfsファイルシステムの統計情報を得る。
vfs_vgetファイルIDから vnode を得る。
vfs_syncファイルシステムをキャッシュをストレージデバイスに書き込む
vfs_mountrootシステムのルートファイルシステムをマウントする。

○: サポート, △: 一部サポート、無印:未サポート

VNODE オペレーション

VNODE オペレーション説明IUMFSUFS
vop_openファイルをオープンする。open(2)に対応
vop_closeファイルをクローズする。close(2)に対応
vop_readファイルから読み込む。read(2)に対応
vop_writeファイルに書き込む。write(2)に対応
vop_ioctlioctl処理を行う。ioctl(2)に対応
vop_setflファイルロックを設定する
vop_getattrファイルの属性値をを得る
vop_setattrファイルの属性値を設定する
vop_accessファイルのアクセス可能性をチェックする
vop_lookupファイル名を検索する
vop_createファイルを作成する。create(2) に対応
vop_removeファイルを削除する. unlink(2) に対応
vop_linkリンクを作成する。link(2) に対応
vop_renameファイル名を変更する。rename(2)に対応
vop_mkdirディレクトリを作成。mkdir(2)に対応
vop_rmdirデイレクトリを削除する。rmdir(2)に対応
vop_readdirディレクトリエントリを読む。getdents(2)に対応
vop_symlinkシンボリックリンクを作成する。symlink(2)に対応
vop_readlinkシンボリックリンクを得る。readlink(2)に対応
vop_fsyncキャッシュをストレージデバイスに書き込む。fsync(2)に対応
vop_inactive利用されていないvnodeの処理を行う。
vop_fidファイルIDを得る。
vop_rwlockvnode の Read/Write ロックを設定する
vop_rwunlockvnode の Read/Write ロックを解除する
vop_seekファイルのシーク処理を行う。lseek(2)に対応
vop_cmp二つのvnodeの比較を行う
vop_frlockファイルへのロック操作を行う
vop_spacevnode に関連する領域を開放する
vop_realvpvnode が指す真のvnode を得る
vop_getpagevnode に関連するページを得る
vop_putpage変更されたページをストレージデバイスに書き込む
vop_mapファイルをアドレス空間にマップする
vop_addmapマップ数を増やす
vop_delmapマップ数を減らす
vop_pollファイルのイベントの発生を待つ。poll(2)システムコールに対応
vop_dumpメモリデータをダンプする
vop_pathconfファイルシステムパラメータの設定を行う。pathconf(2)に対応?
vop_pageioスワップファイルに対するページ入出力処理を行う?
vop_dumpctlダンプ処理に関するファイルシステムの処理を行う?
vop_dispose指定されたページをvnodeから開放する?
vop_setsecattrACL の設定を行う
vop_getsecattrACL を得る
vop_shrlock共有ロックの処理を行う?

○: サポート, △: 一部サポート、無印:未サポート、?: 不明

全部が必須では無いとはいえ、ファイルシステムとしてサポートすべき操作があまりにも多すぎます・・ とても全てをサポートするファイルシステムを書くことはできないので、とりあえず「最低限」の操作を ができるようにすることにしました。簡単に言うと・・

できること

  • ファイルシステムのマウント・アンマウント
  • ファイルシステム上でファイルを作成・削除すること
  • ファイルシステム上でディレクトリを作成・削除すること
  • ファイルシステム上のファイルのオープン・クローズ
  • ファイルシステム上のファイルの読み込み・書き込み

できないこと

  • ファイルのメモリへのマップ(mmap)
  • ファイルシステム上のプログラムの実行
  • ページアウト
  • パーミッションによるアクセス制御(だれにでも、何でも許可されてしまう)
  • ファイルのオーナーの変更(常に root)
  • シンボリックリンクの作成
  • ACL の設定
  • などなどなど・・

IUMFS ファイルシステム用 mount コマンド

IUMFS ファイルシステム専用の mount コマンドです。
まず一般的なお話しをすると、mount(1M) コマンド実行時に、-F オプションを使ってファイルシステムタイプを 指定すると mount(1M) コマンドはそのファイルシステム固有の mount コマンドを探して、それを実行します。 具体的には /usr/lib/fs/<ファイルシステムタイプ>/ というディレクトリの中から mount という名前の ファイルを探し、それを実行します。
mount(1M) コマンドは渡された引数をファイルシステム固有の mount コマンドに渡し、ファイル システム固有の mount コマンドは渡された引数を独自に解釈し、最終的には mount(2) システムコールを呼び出します。
IUMFS ファイルシステムでは、インストール時に /usr/lib/fs/iumfs/ というディレクトリを作成し、 その中に mount という実行ファイルをコピーします。mount(1M)コマンドに -F iumfs というオプションを指定した 場合、最終的にはこのコマンドが実行されまることになります。
ソースコードを見ていただくとわかりますが、中身は mount(2) システムコールを呼び出しているだけです。

iumfs_mount.c

main(int argc, char *argv[])
{
   if (argc != 3){
       printf("Usage: %s -F iumfs strings mount_point\n", argv[0]);
       exit(0);
   }
   
   if ( mount(argv[1], argv[2], MS_DATA, "iumfs", NULL, 0) < 0 ){        
	perror("mount");
       exit(0);
   }
   return(0);    
}

"iumfs" という文字列がファイルシステムタイプとして渡されるので、mount(2) システムコールは IUMFS ファイルシステムモジュール固有の VFS_MOUNT オペレーション (=iumfs_mount) を呼び出し、実際のマウント処理は この iumfs_mount() という関数内にて行われます。

インストール

コンパイル&インストール

configure, make 実行すると環境に応じて 64bit/32bit のファイルシステムモジュールである iumfs と mount コマンドが作成されます。
コンパイル終了後、make install にてファイルのコピーと、ファイルシステムモジュールのカーネルへのロードが行われます

OpenSolaris での例)

$ ./configure
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for a BSD-compatible install... /bin/ginstall -c
checking for isainfo... yes
configure: creating ./config.status
config.status: creating Makefile

# make
gcc -c -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" 
-DPACKAGE_BUGREPORT=\"\" -g -O2 -Wall -DOPENSOLARIS -DSOL10 -m64 -mcmodel=kernel -mno-red-zone 
-D_KERNEL -I. iumfs.c -o iumfs.o
gcc -c -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" 
-DPACKAGE_BUGREPORT=\"\" -g -O2 -Wall -DOPENSOLARIS -DSOL10 -m64 -mcmodel=kernel -mno-red-zone 
-D_KERNEL -I. iumfs_vnode.c -o iumfs_vnode.o
ld -dn -r iumfs.o iumfs_vnode.o -o iumfs
gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" 
-DPACKAGE_BUGREPORT=\"\" -g -O2 -Wall -DOPENSOLARIS -DSOL10 -m64 iumfs_mount.c -o mount
gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" 
-DPACKAGE_BUGREPORT=\"\" -g -O2 -Wall -DOPENSOLARIS -DSOL10 -m64 fstest.c -o fstest

# make install
/bin/ginstall -c -m 0644 -o root -g sys iumfs /kernel/fs/amd64
/usr/sbin/modload iumfs
/bin/ginstall -c -d -m 0755 -o root -g bin /usr/lib/fs/iumfs
/bin/ginstall -c -m 0755 -o root -g bin mount /usr/lib/fs/iumfs

アンインストール

ファイルシステムモジュールおよびコマンドのアンインストールは make uninstall で行います。

# make uninstall
/usr/sbin/modunload -i `modinfo |grep iumfs | awk '{print }'`
rm /kernel/fs/amd64/iumfs
rm /usr/lib/fs/iumfs/mount
rm -rf /usr/lib/fs/iumfs

IUMFS ファイルシステムが利用中(マウントされている)の場合、ファイルの削除は可能ですが、モジュール のアンロードは失敗します。この場合システムのリブート後に完全に削除されます。

# make uninstall
/usr/sbin/modunload -i `modinfo |grep iumfs | awk '{print }'`
can't unload the module: Device busy
*** Error code 16 (ignored)
rm /kernel/fs/amd64/iumfs
rm /usr/lib/fs/iumfs/mount
rm -rf /usr/lib/fs/iumfs

使い方

IUMFS ファイルシステムの利用方法についてご説明します。

ファイルシステムのマウント

IUMFS ファイルシステムのマウントには通常の mount(1M) コマンドを利用します。

Usage: mount -F iumfs strings mount_point

      strings : 任意の文字列
  mount_point : IUMFS ファイルシステムをマウントするマウントポイント

strings は空白を含まなければどのような文字列でもかまいません。ただし、省略はできません。

以下に /mnt ディレクトリに IUMFS ファイルシステムをマウントする例を示します。

# /usr/sbin/mount -F iumfs hoge /mnt
#

確認

# mount
...
...
/mnt on hoge read/write/setuid/devices/dev=ffffffff on Thu Nov 10 00:20:14 2005
        ^^^^

ファイル・ディレクトリの作成・削除

あえて実行例を書くことも無いのですが、ファイルやディレクトリの作成・削除が行えます。もちろん、他の ファイルシステム上のファイルをコピーしてくることもできます。

ディレクトリ情報の表示

# cd /mnt
# ls -lai
合計 3
         1 drwxr-xr-x   1 root     root          64 11月 10日  00:37 .
      1514 drwxr-xr-x  26 root     root        1024 10月  9日  13:40 ..

新規ファイルと新規ディレクトリの作成

# echo "sample text" > file.txt
# mkdir dir
# ls -lai
合計 4
         1 drwxr-xr-x   1 root     root         128 11月 10日  00:38 .
      1514 drwxr-xr-x  26 root     root        1024 10月  9日  13:40 ..
         4 drwxr-xr-x   1 root     root          64 11月 10日  00:38 dir
         3 -rw-r--r--   1 root     root          12 11月 10日  00:38 file.txt

ファイルのオープン、読み込み

# cat file.txt
sample text

ファイルとディレクトリの削除

# rm file.txt
# rm -r dir
# ls -lia
合計 3
        1 drwxr-xr-x   1 root     root          64 11月 10日  00:39 .
     1514 drwxr-xr-x  26 root     root        1024 10月  9日  13:40 ..

他のファイルシステムからのファイルのコピー

# cp /etc/motd /mnt
# ls -lai
合計 3
        1 drwxr-xr-x   1 root     root          96 11月 10日  00:48 .
     1514 drwxr-xr-x  26 root     root        1024 10月  9日  13:40 ..
        2 -rw-r--r--   1 root     root          54 11月 10日  00:48 motd
# cat motd
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005

ファイルの属性変更

touch コマンドや、chmod コマンドを使って、ファイルシステム上のファイルの更新日や、アクセス権を 変更できます。ただし、アクセス権を変更しても実際にはアクセスの可否の判定には利用されていませんので、 権限のない一般ユーザでもファイルに対する全ての操作が可能です。また、ファイルのオーナーの変更はサポートされていません。

# cd /mnt
# touch file.txt
# ls -li file.txt
        3 -rw-r--r--   1 root     root           0 11月 10日  00:53 file.txt

ファイルのアクセス権の変更

# chmod 777 file.txt
# ls -li file.txt
        3 -rwxrwxrwx   1 root     root           0 11月 10日  00:53 file.txt

ファイルの更新日時を変更

# touch file.txt
# ls -li file.txt
        3 -rwxrwxrwx   1 root     root           0 11月 10日  00:54 file.txt

ファイルのオーナーを変更

# chown nobody file.txt
chown: file.txt: サポートしていない操作です。
#

ファイルシステムのアンマウント

IUMFS ファイルシステムのアンマウントには通常の umount(1M) コマンドを利用します。

Usage: umount mount_point

    mount_point : ファイルシステムがマウントされているマウントポイント

他のファイルシステムでもおなじですが、だれかがそのファイルシステム上のファイルを 利用中の場合には BUSY が返り、umount(1M) は失敗します。

アンマウントの成功例)

# umount /mnt
#

ファイルシステムが利用中である為にアンマウントが失敗する例)

# pwd
/mnt
# umount /mnt
umount: /mnt 使用中です。

ファイルシステムのアンマウント後は、ファイルシステム上に作成されたファイル・ディレクトリは 自動的に削除されます。(カーネル空間内でファイルやディレクトリ用に確保されていた メモリの開放が行われます。)

今後の課題

  1. これを応用して、ネットワーク上のリソースを利用できる擬似ファイルシステムを作る。
    Linux 上ではいろいろあるみたいですが、Web や FTP サーバ上のファイルをマウントできれば 面白いなと考えています。

  2. 対応するシステムコールを増やす
    未対応のシステムコールは多いのですが、一番痛いのは mmap(2) のみ対応でしょうか・・対応 しているものも、中途半端な実装のものが多いので(とくにアクセス制御がらみ)、それらも 改善したいです。

  3. 32 bit kernel 環境のサポート
    32bit Kernel 対応しました。OpenSolaris x86(32bit) で確認してます。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-01-03 (月) 20:22:35