SSブログ

セクタ,FAT,疑似マルチタスク(月刊ASCII 1992年4月号9) [月刊アスキー廃棄(スクラップ)]

TBNから「セクタアドレスとFATの関係は?」とマルチタスクについての「どうして疑似と呼ばれるわけ?」をスクラップする。
セクタアドレスとFATの関係は?
Q よく,MS-DOS Ver.5.0では32bitセクタアドレスを使って最大2Gbytesの大容量ハードディスクに対応しているが.32bitFATを使っているわけではないという話を聞きます.これはどういうことなのか教えてください.
A PC-9801シリーズの場合を取り上げてみると,MS-DOS Ver.3.1まではドライブで確保できる最大ディスク容量は40Mbytesまでであり,FATは12bitFATが使われていました.一方,Ver.3.3以降では,最大ディスク容量は128Mbytesとなり(3.3A以降),FATは16bitFATを使うことができるようになりました。こうしたことから,「最大ディスク容量が増えた」→「FATのbit数が増えた」と短絡的に考えてしまう人がいるかもしれません。しかし,これは間違いです.実際,MS-DOS Ver.5.0でも従来と同じく16bitFATが使われています。しかもこれはドライブの容量が11Mbytes以上の場合で,10Mbytes以下のときは12bitFATが使われます(これはMS-DOS Ver.3.3でも同様).また,日本電気はPC-9801用のMS-DOS Ver.4.0はリリースしませんでしたが,実は32bitセクタアドレスはMS-DOS Ver.4.0から採用されており,それ以前のバージョンでは16bitセクタアドレス(あまりこういう言い方はしませんが)が使われていました.
 まとめると,MS-DOS Ver.3.xまでは16bitセクタアドレスが,Ver.4.0以降は32bitセクタアドレスが使われている.FATについては,バージョンに関わりなく12/16bitFATが使われている,となります. さて,ここまでなんの説明もなくFATやセクタアドレスといった用語を使ってきましたが,その具体的な意味を知るにはMS-DOSのディスク管理の仕組みを知らなければいけません。が,これは少し難しいので,一般のMS-DOSユーザーは上記の程度のことを覚えていればそれで十分でないかと思います。以下は,好奇心と忍耐力のある方だけお読みください。

セクタ
 まず「セクタ」について説明しましょう.MS-DOSアプリケーションは「ファイル」という概念を使ってディスクを1byte単位で読み書きしていますが,一方,MS-DOSのシステム自体は,最も低レベルなところでは,ディスク装置をセクタという単位で分割しこれを最小単位としてデータの読み書きを行なっています.セクタにはひとつひとつに番号が振られており,これをセクタアドレスと呼びます.16bitセクタアドレスはこのセクタの番号を16bitで表現するものであり,最大64K(65536)個のセクタを扱うことができます。32bitセクタアドレスの場合では,理論上は2^32*=4G個のセクタを扱うことができます(実際は4M個に制限されている).
* 2の32乗
 さて、ひとつのセクタの大きさ(セクタサイズ)は,IBM PC系のマシンでは,512bytesで統一されており,この大きさはディスク装置の物理上の読み書きの最小単位(物理セクタ)の大きさと一致しています.しかし,PC-9801の場合は事情は複雑で,256bytesまたは512bytesの物理セクタを数個集めた「論理セクタ」をMS-DOSレベルでの最小読み書き単位としています。この論理セクタの大きさは,1ドライブの容量が64Mbytes以下のときは1024bytes,65Mbytes以上のときは2048bytesとなっています。
 ドライブのディスク容量は(論理)セクタサイズとセクタの総数の積で計算できます。ドライブの最大ディスク容量は,16bitセクタアドレス(MS-DOS Ver.3.x以前)の場合,IBM PCでは,
 512(bytes)×64K(個)=32Mbytes
PC-9801では,
 2048(bytes)×64K(個)=128Mbytes
となります.一方,32bitセクタアドレス(MS-DOS Ver.4.0以降)では理論上は,
 512(bytes)×4G(個)=2Tbytes
となります.しかし,MS-DOSではクラスタサイズ(後述)が最大32Kbytesに制限されているため,実際の最大ドライブ容量は,
 32K(bytes)×64K(個)=2Gbytes
となります(16bitFATの場合).

クラスタ
 次に「クラスタ」について解説しましょう.MS-DOSは最も低レベルな部分では,セクタ単位でディスクを読み書きしていますが,それよりも高レベルなファイルシステムでは,セクタを数個集めた「クラスタ」を最小単位としてディスクの読み書きを行なっています。クラスタを構成するセクタの数は2のべき乗(1,2,4,8,16,...)となるように決められています.クラスタの大きさ(クラスタサイズ)は,ディスクの種類や容量によってさまざまです.クラスタがファイルシステムレベルのディスクの最小記憶単位なので,たとえ1byteしか内容のないファイルでも,実際には1クラスタ分だけのディスクが消費 されます.
ディスクの内容
 一般にディスクの中身の構成は,図1のようになっており,はじめに予約領域,FAT領域,ディレクトリ領域,データ領域に分けられています.予約領域には,MS-DOSを起動するためのIPLやそのドライブに関する情報が記述されています.FAT領域には,ファイルが使用しているクラスタを調べるための情報が書かれています。ディレクトリ領域には,ルートディレクトリにあるファイルの情報(ディレクトリエントリ,図2参照)が記述されています.ルートディレクトリ領域の大きさは固定されているため,ディレクトリエントリの数,つまりルートに作成できるファイルの数は制限されています.そして最後にデータ領域です.データ領域にはもちろんファイルの中身のデータが記録されます.またサブディレクトリも通常のファイルとして扱われ,その中身にはディレクトリエントリが記録されています。

ASCII1992(04)g04TBNセクタとFAT図1-2_W520.jpg
FATによるMS-DOSのファイルシステム
 さて,これでやっとMS-DOSのファイルアクセスを理解するための材料が整いました.
 たとえばルートディレクトリにあるCOMMAND.COMをアクセスする方法を考えてみましょう。まず,ディレクトリ領域からファイル名がCOMMAND.COMとなっているディレクトリエントリを探します。そして先頭のクラスタ番号の情報を調べます。たとえばその番号がxxxであるとしましょう.一般に大きなファイルは複数のクラスタに分割されているので,その次のクラスタがどこにあるか知らなければいけません.実はそれ知るためにFATが用意されています.クラスタ番号xxxに続くクラスタを知るには,FAT領域のxxx番目のデータ(yyy)を読めばいいのです.そして,さらにその次のクラスタを知るには,再びFAT領域のyyy番目のデータを読み出せばよいわけです。最後に,もうこれ以上クラスタが続かないというときには,そのFATの位置にこれが最後であることを表わす特別な値が書き込まれます。すこし大ざっぱでありますが,以上のようにしてMS-DOSはファイルの管理を行なっているわけです.

12bitFATと16bitFAT
 さてMS-DOSが採用しているFATによるファイルシステムが分かったところで,12bitFATと16bitFATの違いを見てみましょう.簡単に言ってしまえば,12bitFATFATに記録するデータ(クラスタ番号)を12bitで表現するものであり,16bitFATはクラスタ番号を16bitで表現するものです.別の言い方をすれば,12bitFATでは4096個までのクラスタが管理できたのが,16bitFATでは64K(65336)個に増えるわけです。
 クラスタはファイルレベルでのディスクの最小記憶単位なので,扱えるクラスタの数が多いほど,クラスタのサイズが小さくなってディスクを無駄に消費する部分が少なくなります。標準ではPC-9801は,SASIタイプのハードディスクでは12bitFATしか利用できませんが,この場合,標準フォーマットで20Mbytesの容量を確保すると,クラスタサイズは8Kbytesになります.また拡張フォーマットでは,容量が15Mbytesまではクラスタサイズは4Kbytes,30Mbytesまでは8Kbytes,40Mbytesまでは16Kbytesと,容量が増えるほどクラスタサイズは大きくなります.一方,SCSIタイプのハードディスクの場合は,容量が10Mbytes以下の場合は12bitFATを使って一クラスタが4Kbytesに,それを超える場合は16bitFATを使って,容量が64Mbytes以下のときは1クラスタが2Kbytes,65Mbytes以上のときは4Kbytesとなっています。
 このように12bitFATと16bitFATではディスクの利用効率から言って断然16bitFATのほうが有利ですが,16bitFATでは,ファイルがこま切れになる分,FATを頻繁にアクセスしなければいけないので,ディスクアクセスに時間がかかるという欠点もあります。もっとも,ディスクキャッシュを使ったり,マイクロデータ社のノストラダムスやアドミラルシステム社のNewton-98などのディスク最適化ツールなどによって不連続クラスタを少なくするなどすれば,この欠点は容易にカバーすることができます。
 以上,32bitセクタアドレスと12/16bitFATの仕組みを見てきましたが,これらは同じ「bit」という言葉を使うだけあって,よく理解されないまま誤用されているのではないかと思います。今回の回答を参考にして,正しい認識を持っていただけたらと思います.
(笹川)

 今は無頓着にHDDを使っていたが、この当時はHDDに制限があり、○○の壁とかいう容量の問題があった。FATやクラスタの知識があるかどうかがパソコンを趣味にしている人かどうか区別できた。

どうして疑似と呼ばれるわけ?
Q MS-WindowsマシンやMacintoshでのマルチタスクは「疑似マルチタスク」で,OS/2マシンやAmigaは「本当のマルチタスク」だという話をよく聞きます.「疑似マルチタスク」と「本当のマルチタスク」はどのように違っているのでしょうか.
A 現在では,マルチタスクというと複数のアプリケーションを同時に利用するための機能と考えられています.しかし,もともとマルチタスク,あるいはマルチプログラミングと呼ばれる技術は,高価な大型コンピュータのCPUを効率的に利用するための技術として開発されたものでした。初期のマルチタスクの目的は,あるプログラムを実行中にCPUが待ち状態になると,主記憶にロードされた別のプログラムを実行するというものだったといわれています.
 つまり,初期のマルチタスクは,CPUに対して速度が遅い周辺機器などの制御で発生するCPUの待ち時間を有効に利用することが主な目的で,複数のプログラムを動かすこと自体が目的だったのではなかったということができるでしょう.ちなみに,当時はまだタスクという考え方がなかったため,マルチタスクではなくマルチプログラミングと呼ばれていました。
 大型コンピュータの世界では,その後,1台のコンピュータを同時に複数のユーザー(つまり複数のプログラム)で利用できるタイムシェアリングシステムが開発され,さらに1960年代にMULTICSというシステムでマルチユーザー,マルチタスクのオペレーティングシステムの基礎が完成しました。この時代のタイムスライスによるマルチタスクの技術が,現在のいわゆる「本物」のマルチタスクの基本になっています。
 タイムスライスによるマルチタスクの原理は、複数のプログラムの実行に割り当てられるCPU時間を細かく分割し,ディスパッチャと呼ばれるメカニズムでそれらのプロセスの実行を切り替えることで,見かけ上,同時に複数のプログラムを実行できるようにするものです.たとえば,プロセスAを1/100秒間実行し,次にプロセスBを1/100秒間実行し,またプロセスAに戻る,というサイクルを繰り返せば,コンピュータを操作する人間にとってはプロセスAとプロセスBを同時に動作させているのと同じように利用できるわけです.
 もっとも、実際のシステムでは,単純にCPU時間を分割するだけではさまざまな問題が発生する可能性があります。たとえば,複数のプロセスが同時にプリンタに文字を出力したり,同時に同じファイルを変更した場合,プリントアウトが乱れたり,ファイルが壊れてしまうかもしれません。そのようなトラブルを防ぐために,マルチタスクのシステムではセマフォなどで資源の排他制御を行なっています.
 また、多くの情報を短時間で処理しなければならないようなプロセスと,緊急な処理が必要ではないプロセスがある場合,ただ順番に複数のプログラムを次々と起動するだけでは、システム全体の能力が十分に発揮できなくなってしまいます。そこで,プロセスごとに優先順位を付けて優先プロセスにはCPU時間を長く割り当てるプリエンプションなどが行なわれます。本格的なマルチタスクを「プリエンプティブマルチタスク」と呼ぶことがあるのは,プリエンプションによるプロセスの切り替えが行なわれているからです.
 UNIXやOS/2,AmigaDOSなどのオペレーティングシステムでは,こうした本格的なマルチタスクが行なわれているので,これらを「本物」のマルチタスクと呼ぶわけです。ちなみに,MS-Windows 3.0のエンハンスドモードでは,複数のMS-DOSのプロセスをタイムスライスで切り替えながら同時に実行できます.タイムスライスによるマルチタスクという意味で,MS-DOSウィンドウのマルチタスクが「本物」のマルチタスクと呼ばれることがありますが,排他制御などが完全ではないため、必ずしも「本物」とはいえないでしょう.
 さて,このような由緒正しいマルチタスクに対して,MacintoshやMS-Windowsでのマルチタスクは,基本的な排他制御は行なわれますが,タイムスライスやプリエンプションが行なわれません。
 CPUの性能が向上したとはいえ,構造が簡単でオペレーティングシステムも小規模なパソコンレベルでは,大型機で行なっているような本格的なマルチタスクは荷が重いようです.つまり,シングルタスクのコンピュータと違って資源の管理や適切なプロセスの切り替えをしなければならないため,CPUの負担が大きくなってしまうのです.このような負担をオーバーヘッドと呼びますが,厳密にプロセスを制御しようとするとオーバーへッドが大きくなりすぎて,ユーザーにとって一番重要なアプリケーションの実行効率が低下してしまいます。かといって,簡単な制御ですませてしまえば,システムの信頼性が低下します.
 MS-WindowsやMacintoshのマルチタスクは,このようなオーバーヘッドが小さくてすむイベント駆動という方法で複数のプロセスを切り替えています。
 イベント駆動方式では,入力や出力の要求など、何かのイベント(事象)が発生したときに,そのイベントに対応したプロセスに制御が渡されます。いつ必要になるか分からない入力を,できるだけ高速に処理するリアルタイム処理のために開発された方式です.
 もっとも,MacintoshやMS-Windowsのマルチタスクでは,リアルタイム処理は考えられていません。これらのシステムでは,リアルタイム処理のために考案されたイベント駆動という考え方をパーソナルコンピュータのマルチタスク用にアレンジすることで,CPUの処理能力が低いパソコンでも利用できるようにしたものです.
 このタイプのマルチタスクでは,オペレーティングシステムがマウスやキーボード,プロセスなどが発生するすべてのイベントを管理し,それぞれのプロセスは受け取ったイベントに応じて必要な動作を行ないます。タイムシェアによる微妙なタイミングの処理が不要になるため,オペレーティングシステムは比較的シンプルなものとなります。
 しかし,このタイプのマルチタスクでは,プロセスがイベントを無視してCPUを独占することも可能です.たとえば,一般にプリエンプティブなマルチタスクでは,フロッピーディスクをフォーマットしている間でも,アプリケーションが利用できます.しかし,MS-Windows上でフロッピーディスクをフォーマットしている間は,一切のイベントが無視されるため、ほかのアプリケーションを利用したり,バックグラウンドでの処理ができません(図3).
 このように,オペレーティングシステムによる強制的な切り替えが行なわれないところが,MS-WindowsやMacintoshのマルチタスクが「疑似」マルチタスクと呼ばれるゆえんでしょう.
(安田 幸宏)


ASCII1992(04)g05TBNマルチタスク図3_W299.jpg
 MacもWindowsも良く固まった。ちょっと重たい処理をさせるとてきめんだった。また、パッパと複数のアプリを使うとこれも良く固まった。パソコンが人間についていけなかった。この当時のマルチタスクは一呼吸も二呼吸も空けて慎重に使わなければならなかった。Windowsは98SEのころからか安定しだした。それでもちょくちょくブルースクリーンが出たが。




nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。