【豆知識】
Firefoxのキャラは実はキツネではない。
インターネットブラウザでおなじみとなった「Firefox」。アドオンの拡張でユーザに合ったブラウザになるということで人気があります。このFirefoxのキャラ、日本では「フォクすけ」でおなじみのキツネのキャラですが、本来のFirefoxのキャラは「レッサーパンダ」です。レッサーパンダは別名Firefoxとも呼ばれています。しかし、なぜか日本では「火狐」と呼ばれ、キツネに変身しちゃいました。
|
▲大人気のフォクすけ
|
PR
ファイルのアクセス方法(読み込み方法)について
ファイルのアクセス方法は使用目的によって違います。 普段Windowsなどを使用していると「ファイルのアクセス方法」などは気にしたことがありません。
普段私たちが使用している場合、アイコンをダブルクリックしてファイルを開き、メニューから「保存」を選んで保存します。また「ドラック&ドロップ」を使用してファイルをコピーします。名簿作成などは「エクセル」を使用して表にして作成し、保存しております。
オペレーティングシステムのもう一つの役割として「データ管理」がありますが、オペレーティングシステムはWindowsだけではなく、いろいろなOSが存在します。
名簿やリストなどの「データ」を管理する場合、他のデータに影響を与えないように「新規保存」や「更新」・「削除」などを行わなければなりません。他のデータに影響を与えると「データの正確性」がなくなり大変なことになります。ここではオペレーテイングシステムがどのようにファイルの読み込みや書き込みを行っているか説明していきます。
ファイルのアクセス方法はOSが違っていてもアクセスできるように統一化されています。
ファイルのアクセス法については次の3種類があります。
1.順次アクセス(シーケンシャルアクセス)
保存されているデータを開始位置から順番に読み込んだり、データを保存する際に、先頭から順番に書き込む方法です。磁気テープなどの保存方法がこれにあたります。
(レコードとは1列のデータ項目です)
順次アクセスの場合、磁気テ−プや磁気ディスクなどすべての記憶媒体上に編成が可能ですが、更新や削除の場合すべてのデータを書き換えしなければならないといった欠点があります。
磁気テープの場合、元のマスターテープから読み込み、更新処理を行って新しいテープに書き込まなければなりません。
ハードディスクの場合、媒体は必要としませんが、磁気テープと同様に基のマスターから更新処理を行って新しいマスターを作成しなければなりません。
|
▲順編成ファイル |
|
▲順編成ファイルの更新処理 |
2.直接(ランダム)アクセス
「インデックス」と呼ばれる索引から位置情報を読み取り、データレコードに直接読み込む方式です。
必要な部分だけにアクセスできるため、平均所要時間は順次アクセスと比べて短くなります。ハードディスクなどに使用されており、現在主流となっています。
|
▲直接アクセス |
3.動的アクセス
レコードの位置づけは「直接アクセス」で行い、以降は「順次アクセス」で処理する方式です。
|
▲動的アクセス |
ファイル編成
使用目的により編成方法が違います。 上記はファイルのアクセス(読み込み)の方法でしたが、膨大なデータを使用目的により次の編成方法をとっています。この編成方法によって、後のプログラムの作成方法や管理方法などが大きく違ってきます。どういう用途で、どういう検索を行うかを十分考慮した上でファイル編成を考えなければなりませんのでよく理解してください。
ファイル編成には以下の6種類があります。
1.順編成ファイル
ファイル内のレコードを先頭から順番に記録する編成です。アクセス方式は順次アクセスしか出来ません。
通常、レコードはキー項目順に物理的に連続して並べます。キー項目順に並べることによってキー項目の順番に処理を行ったり、データを比較する場合キー項目からの検索が行いやすくなります。
例えば、名前のかな名がばらばらに並んでいるよりも、あいうえお順にならんでいる方が探しやすくコンピュータも同じです。
(キー項目とはデータの検索・並び替えなどを行う時に比較対象となる項目のことです。)
2.直接編成ファイル
各レコードが持つキーを使いデータの格納アドレスを算出して、データに直接アクセスできる形式です。
キー値からアドレスに変換する際、キー値をそのままアドレスに適用したり、キー値とアドレスの変換表などを用いて行う方式を、「直接アドレス方式」といいます。しかし、この直接アドレス方式はキー値から直接アドレスを導くので、大量のデータ処理には向いておりません。
そこで、各レコードのキーから下記の変換法を用いて格納アドレスを算出します。これらで計算してアドレスを導く方式を「間接アドレス方式」といいます。格納アドレスは補助記憶装置が持つシリンダやトラックの番号が対応しておます。
アドレスの変換法には、「除算法」「重ね合わせ法」「基数変換法」の3種類があります。
除算法はキー値をレコードの総数に最も近い最大の素数で割り、その余りから格納アドレスを求めます。
重ね合わせ法はキー値のいくつかの部分に分割し、それらの合計をアドレスにします。
基数変換法はキー値を10進数以外の基数に変換してその値をアドレスにします。
これらの方法を「ハッシュ法」と言い、これらの計算を行う課程を「ハッシュ関数」と言います。
また、「ハッシュ関数」で計算されたアドレスを「ホームアドレス」と言います。
|
▲除算法 |
|
▲重ね合わせ法 |
|
▲基数変換法 |
この方法で格納を行った場合、今まであったレコードと格納しようとするレコードが同じ格納アドレスとなる場合があります。これを「シノニム」といいます。またこの現象を「衝突」と言います。
今まであったレコードは「ホームレコード」と言い、格納しようつするレコードを「シノニムレコード」と言いますが、このままにしておく分けにはいきませんので、対処しなければなりません。
シノニムが発生した場合の対処方法には以下の2種類があります。
- 1.「シーケンシャル法」
- ホームレコードのそばに格納する方法です。
- 2.「チェーン法」
- ホームレコードの一部にシノニムレコードのアドレスを記録しておき、そのアドレスを利用してシノニムレコードを検索する方法です。
検索する場合、ホームレコードからポインタをたどることでシノニムレコードにたどりつくことが出来ます。
|
▲シノニムレコードの対処法 |
3.相対編成ファイル
直接編成の特別な編成です。各レコードの先頭に番号が付いており、その番号を指定してレコード内のデータを読み書きを行います。
そのため書き込みをおこなう場合、キー情報で書き込む位置が決まってしまいます。レコードに付いている番号を相対レコード番号といい、ファイル先頭から順番に付けられています。
|
▲相対編成ファイル |
4.索引編成ファイル
「索引(ファイルの場所の情報)」が入ったインデックスというファイルからレコードの位置を特定してアクセスを行う編成法です。
索引編成ファイルは次の構成になっています。
- 索引域(インデックス領域
- 索引情報が集められた領域です。
- 基本データ域(プライム領域)
- レコードが記録されている領域です。
- あふれ域(オーバフロー領域)
- 基本データ領域からあふれたレコードを記録する領域です。このあふれ域にはさらに2つの領域が存在します。
「シリンダあふれ域」 各トラックからあふれたレコードを格納します。
「独立あふれ域」 シリンダあふれ域が一杯になったら使用します。
索引の仕方は「マスタ索引」→「シリンダ索引」→「トラック索引」の順に索引し、レコードにたどりつきます。
「マスタ索引」「シリンダ索引」は索引域にあり、「トラック索引」は基本データ域にあります。
なぜ、このような索引方法かと言いますと、これはハードディスクの構造にあります。ハードディスクはヘッドが動作してで情報を読み書きする位置に移動しますが、ヘッドの初期の位置の1周を「シリンダ」と呼び、その他の周を「トラック」と呼びます。
「シリンダ」に「シリンダ索引」があり、そこからどこのトラック(周)にかるか特定します。トラックにたどりつくと、トラックのどこの場所にあるか「トラック索引」を行い、その場所へ読み込みに行きます。
「マスタ索引」はシリンダー索引が多くなった場合の処理効率を上げるために、どこのシリンダ索引を読みに行けばいいかという索引となります。そのため、一番最初に「マスタ索引」があり、その次に「シリンダ索引」があります。
この索引編成ファイルは構造が複雑なため、記録効率はあまりよくありません。
レコードの追加削除を繰り返すことで、あふれ領域のデータが増大し、実際の記憶領域よりもあふれ域のデータが多くなるといった場合もあります。
記録効率やアクセス時間が悪化した場合は、再編成を行いファイル構造を作り直す必要があります。
|
▲索引編成ファイル |
|
▲索引編成のあふれ処理 |
5.区分編成ファイル
順編成ファイルを「メンバ」という名称の区分でまとめた形式となります。メンバの区分内の構成は順編成ファイルとなりますが、名前と先頭アドレスをディレクトリに登録しておき、そのディレクトリの指定でアクセスします。
この方法はディレクトリがアルファベット順に並んでいて短時間で探せるといった利点がありますが、その反面、区分内のデータは順次アクセスしか出来ないため、通常のデータファイルとしては使用せず、プログラムの保存や管理のために使用されます。
|
▲区分編成ファイル |
6.VSAM編成ファイル
この編成方法は仮想記憶上で利用されます。VSAM編成ファイルは順編成、直接編成、索引順編成のアクセスが可能です。IBM社のSystem/370(汎用コンピュータ)で最初に採用されました。
VSAM編成の場合ファイルのことを「データセット」と呼び、レコードなどを記録する領域を「コンポーネント」と呼びます。VSAM編成の階層は
制御域「CA」-制御インターバル「CI」-レコードとなっています。
制御域「CA」は制御インターバル「CI」の集まったもので、制御インターバル「CI」は論理レコードの集まりとなっています。
アクセス方法としては
・入力順のデータセット(ESDS)は、「順編成ファイル」
・キー順データセットは、(KSDS)は「索引順編成ファイル」
・相対レコードデータセットは、(RRDS)「相対編成ファイル」
にそれぞれ対応します。
|
▲VSAM編成 |
階層型ファイル
私たちが普段使用しているファイル編成法です。 上記のファイル編成法は、主に汎用コンピュータに対する編成法であります。しかし、通常私たちが使用しているWindowsやLinuxなどパーソナルコンピュータで使用するファイルは「階層型」というアクセス方式をとっています。階層構造の最上位は「ルートディレクトリ」と呼ばれ、ドライブがCドライブであれば「C:」がルートディレクトリとなります。この「ルートディレクトリ」内にあるディレクトリを「サブディレクトリ」と言います。
コンピュータが立ち上がり、ログオンを行ったときにOSによって各ユーザーの起点となるディレクトリが位置づけられます。このディレクトリを「ホームディレクトリ」と言います。ログオンのユーザーが管理者の場合、「ルートディレクトリ」が「ホームディレクトリ」の場合もありますが、一般ユーザーの場合は専用の「サブディレクトリ」が「ホームディレクトリ」になります。
これはコンピュータの環境変更やシステム変更が各ユーザーは出来ないようにするためです。そのため各ユーザーは「ホームディレクトリ」から上位の階層にはOSの制御によりアクセスできないようになっています。
|
▲ルートディレクトリとホームディレクトリ |
階層型のファイルの指定には、絶対パスと相対パスの指定があります。
絶対パス指定はルートディレクトリから指定します。
Windowsで、Cドライブ内のabcフォルダ内のopqフォルダにあるxyz.exeファイルを指定する場合、
C:\abc\opq\xyz.exe
と指定します。
「¥」はディレクトリを意味します。
相対パス指定は今現在のカレントディレクトリから指定する方法です。
Windowsで、現在のカレントディレクトリがabcフォルダでopqフォルダにあるxyz.exeファイルを指定する場合、
opq\xyz.exe
となります。
ファイルの排他制御
各データが別々のプログラムで同時に実行された場合、同じレコードを同時に更新しようとすると、データの整合性が取れなくなる場合があります。どちらのプログラムのデータが正しいか、また新しいかが分からなくなります。そのため、今現在プログラムがデータを使用している場合、別のプログラムからのデータの更新作業を禁止(阻止)しなければなりません。この別のプログラムからのデータの更新作業を禁止させることを「排他制御」と言います。
排他制御の場合、レコード単位かファイル単位で行われます。
この排他制御になった場合、前のプログラムの処理が終了しないと更新は出来ないようになっています。
なお、ファイルの排他制御についての詳しい説明は「データベース」の章で記載いたします。