差分

移動先: 案内検索

カーネルの構造と機能

418 バイト追加, 2008年11月6日 (木) 15:57
/* ファイルシステム */
=== ファイルシステム ===
UNIXのファイルの特徴はファイルがバイト単位のデータストリームであることです。ファイルの中身というのは最初から最後に向かって1バイトづつのデータの列であるだけでそれ以上でもそれ以下でもありません。カーネルでは、そこまでしか関知しません。データの扱いに関してはプログラム側が決めます。UNIXのファイルの特徴はファイルがバイト単位のデータストリームであることです。ファイルの中身というのは最初から最後に向かって1バイトづつのデータの列であるだけでそれ以上でもそれ以下でもありません。カーネルでは、そこまでしか関知しません。データの扱いに関してはプログラム側が決めます。
;補足: デバイスの観点からファイルをみるとブロックデバイスかキャラクタデバイスかの違いはあります。デバイスの観点からファイルをみるとブロックデバイスなのか、あるいはキャラクタデバイスなのかの違いはあります。
次にファイルシステムで大切な点は、"/"を先頭に木構造になっており/foo/bar.txtといった具合にファイルパスとしてアクセスできることです。ファイルの情報はディレクトリと呼ばれる場所に記録されていることです。この名前でアクセスできる名前の空間のことをネームスペースtxt といった具合にファイルパスとしてアクセスできることです。ファイルの情報はディレクトリと呼ばれる場所に記録されていることです。この名前でアクセスできる名前の空間のことをネームスペース(name space)といいます。これも多くの人は不思議でもなんでもなく、またディレクトリがフォルダというのと同じような意味ですよ、というとなるほどと判る人もいるでしょう。といいます。今日ではこの木構造の名前空間を持ったファイルシステムは一般的になっていますが、これはUNIX以降に一般化していったことは覚えておいても損はないと思います。
バイト単位のデータストリームや、あるいはファイルをファイルパスで探すというのは、今やあたりまえのような気がしますが、UNIX以前では物理的な場所をまずプログラムを稼働させるための前準備の段階で形式や場所を定義しておいて、そこを参照する形を取っていました。大型汎用機ではいまでもそうです。バイト単位のデータストリームや、あるいはファイルをファイルパスで探すというのは、今やあたりまえのような気がしますが、UNIX以前では物理的な場所をまずプログラムを稼働させるための前準備の段階で形式や場所を定義しておいて、そこを参照する形を取っていました。大型汎用機のファイルシステムではいまでもそのような方式があります。
Windows NT以降のNTFSの持つファイルシステムの機能はUNIX系と遜色はありませんがC;調べてみよう:とかD 大型汎用機<ref>http:といった場所はドライブと呼び、ハードウェアとファイルシステムが直結していた頃の名残を残しています。ちなみにWindows系の世界でもMS-DOS時代の名残でフォルダのことをディレクトリと呼ぶ場合もあります。//www.hitachi.co.jp/Prod/comp/soft1/VOS3FS/v3ga0226.htm</ref>ではどのようにファイルを扱うのか調べてみよう。
;調べてみようWindows NT以降のNTFSの持つファイルシステムの機能はUNIX系と遜色ありません。しかし、C: 大型汎用機ではどのようにファイルを扱うのか調べてみよう。 httpとかD://www.hitachi.co.jp/Prod/comp/soft1/VOS3FS/v3ga0226.htmといった場所はドライブと呼び、ハードウェアとファイルシステムが直結していた頃の名残を残しています。ちなみにWindows系の世界でもMS-DOS時代の名残でフォルダのことをディレクトリと呼ぶ場合もあります。
プログラム側から見た場合、ファイルには同じようにアクセスできるのですが、最終的な記憶装置、あるいはオブジェクトへの読み書きをする部分にはext2やext3あるいはReiserFS、XFS、JFSなどの種類のファイルシステムが用意されています。ファイルシステムの部分でも、このようにレイヤ化されています。また名前付きパイプ(FIFO)はプログラム間でデータを"流す"ために使われる見かけ上のファイルです。あるいは/procなどのファイルは、実際にはファイルではなくファイルのように見せかけたカーネルとのAPIになっています。
プログラム側から見た場合、ファイルには同じようにアクセスできるのですが、最終的な記憶装置、あるいはオブジェクトへの読み書きをする部分には
[http://e2fsprogs.sourceforge.net/ext2.html ext2]、
[http://e2fsprogs.sourceforge.net/ext2.html ext3]、
[http://oss.sgi.com/projects/xfs/ XFS]、
[http://jfs.sourceforge.net/ JFS]、
[http://oss.oracle.com/projects/ocfs2/ OCFS2]
などいろいろな種類のファイルシステム<ref>ReiserFSは、まだカーネルに入っているが、あえて抜いた。</ref>が用意されています。ファイルシステムの部分でも、このようにレイヤ化されています。また名前付きパイプ(FIFO)はプログラム間でデータを"流す"ために使われる見かけ上のファイルです。あるいは/procなどのファイルは、実際にはファイルではなくファイルのように見せかけたカーネルとのAPIになっています。
唯一の共通点は、ファイルシステム上の名前空間に存在し、統一的なファイルへのアクセスが提供されているということです。そのためプログラム側はファイルを介すという形でのデータの入出力のためのアクセス方法がシンプルにな:ります。
唯一の共通点は、ファイルシステム上の名前空間に存在し、統一的なファイルへのアクセスが提供されているということです。そのためプログラム側はファイルを介すという形でのデータの入出力のためのアクセス方法がシンプルにな:ります。
;補足: /p/tcp/www.sample.com/wwwというファイルをアクセスするとwww.sample.comのwwwポートがアクセスできるというファイルシステムPortalsを4.4BSDに対して実装した人もいます。http://www.usenix.org/publications/library/proceedings/neworl/stevens.html
;補足: /p/tcp/www.sample.com/wwwというファイルをアクセスするとwww.sample.com の www ポートがアクセスできるというファイルシステム [http://www.usenix.org/publications/library/proceedings/neworl/stevens.html Portalsを4.4BSDに対して実装]した人もいます。
=== プロセス間通信 ===
匿名利用者