I-8-10. メモリ管理、ファイル管理とデータベースの利用

OSが管理するメモリの動的な利用方法、ファイルの排他処理として行うロックの方法、Berkeleyデータベースの利用など、システムプログラムから大規模なデータを管理する方法について解説する。

【学習の要点】

* 多くのデータ構造では、処理の都合で動的にメモリを確保する必要がある。

* ファイルのロックは、マルチプロセス環境においてデータの安全性確保のために重要な操作である。

* データベースを使用すると、ファイルのロックを気にせずにデータのアクセスが可能となる。

図I-8-10. メモリ管理とファイル管理

【解説】

1) メモリの管理

アプリケーションプログラムで確保可能なメモリ領域は、事前に決まっている。処理の都合で定められたサイズ以上の領域が必要な場合は、malloc関数を利用してメモリの確保を行う。

* 確保されたブロックは、初期化されない。

* 使用後には必ずfree関数などで解放する。

2) ファイルのロック

マルチプロセス環境では、複数のプロセスから1つのファイルへのアクセスを集中させることも可能であるため、データの安全性確保のためにロックファイルの作成が重要となる。

* ロックファイルの作成

使用するリソースのロックファイルを作成すると、他プロセスからはアクセスできなくなる

- ロックファイルの作成に、open関数を利用する。引数にはO_CREATとO_EXCLを指定。

- ロックファイルが新規に作成されれば、そのリソースの専有が可能となる。

- ロックファイルが存在すれば、エラーとなるため、リソースへのアクセスは不可能となる。

* リージョンのロック

目的とするリソースの特定の部分のみをロックする。別プロセスからはロックされていない部分へのアクセスが可能。

- リージョンのロックは、fcntl関数、もしくはlockf関数を使う。以下はfcntl関数の引数。

- F_GETLK引数:オープン済みリソースのロック情報を取得。

- F_SETLK引数:オープン済みリソースの一部をロックする。もしくは解除する。

- F_SETLKW引数:ロックできるまで待機する。

- 実際の読み書きはread関数とwrite関数を使用する。

3) データベース

データベースを利用すれば、ファイルのロックやリージョンのロックなどは気にせずに、データのアクセスが可能となる。さらに、サイズの異なるデータ書込みや索引機能を使ってのデータ管理も可能となる。

* dbmデータベース

滅多に書き換えられることはないのだが、頻繁に読み込みが行われるデータなどの管理には、dbmデータベースなどがソリューションとなる。dbmへのアクセスは、以下の関数を利用する。

- dbm_open : データベースのオープン。または新規作成。クローズはdbm_closeを使用。

- dbm_store : データベースにデータを入力する。

- dbm_fetch : データベースからデータを取得する。

- dbm_delete : データベースからデータを削除する。

- dbm_firstkeyとdbm_nextkey : 一緒に設定する。全項目のキー走査を行う。

* その他のデータベースには、ndbm、gdbmなどがある。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン