💬

【OS】ファイルの読み書きの流れと仕組み

に公開

はじめに

私たちが普段、意識することなく行っている「ファイルの保存」や「ファイルの読み込み」。
これらの動作の背後では、OS(オペレーティングシステム)が見えないところで多くの作業をこなしています。
たとえるなら、舞台で演じている役者の後ろで、照明や音響を支えるスタッフのような存在。それがOSです。
本記事では、「ファイルを開く」「保存する」といった操作の舞台裏を、なるべくわかりやすく解説していきます。

ファイル読み込み:本を図書館から借りるプロセス

ファイルを開くとは、実は図書館で本を探して借りるような一連の手順とよく似ています。
順を追って見ていきましょう。

1. アプリケーションからのリクエスト

まず、あなたが何かのアプリケーション(たとえばテキストエディタ)でファイル「example.txt」を開こうとすると、アプリ自体がOSに「このファイルを開きたいんだけど」とリクエストを送ります。これはまるで、図書館で「この本を読みたいです」と司書にお願いする場面です。

2. パス解決:ファイルの住所を調べる

OSはそのリクエストを受け取ると、まずファイルの“住所”を調べます。ファイルパスのことです。
たとえば「/Users/Documents/example.txt」といったような場所のことです。

このパスを解釈して、「どこに保管されているか?」を特定します。
まるで図書館の書架番号を探すようなステップです。

3. ファイルシステムとの対話

住所がわかったら、次はファイルシステムに問い合わせます。
ファイルシステムは、ハードディスクやSSDの上で「何がどこにあるか?」を管理している仕組みです。

OSはこの仕組みを通して、「そのファイルは、物理的にディスクのどこにあるのか?」という情報を手に入れます。

4. メタデータの取得

ファイルシステムからは、ファイルの中身だけでなく、「いつ作られたか」「サイズはどれくらいか」「誰がアクセスできるか」といったメタデータも一緒に取得されます。
これらは図書館でいうと、本の貸出カードやカタログの情報にあたります。

5. アクセス権の確認

次に、OSは「このユーザーは本当にこのファイルを読んでもいいのか?」という確認を行ないます。
図書館で会員証を見せて、利用資格をチェックされるのと同じです。

もしアクセス権がなければ、ファイルは開けません。

6. 物理的なデータの読み込み

権限が確認されると、ファイルの実際の中身を読み込みます。OSはディスクからデータを探し、それをメモリ(RAM)へと転送します。

このとき、OSは「キャッシュ」という一時的な保存場所にもデータをコピーしておきます。次に同じファイルを開いたときに素早くアクセスできるようにするためです。

7. アプリケーションへのデータ引き渡し

最後に、読み込まれたデータはアプリケーションへ渡されます。これでようやく、「example.txt」の内容を画面で見ることができるようになります。

ファイル書き込み:変更を図書館に返却するプロセス

今度は、ファイルの編集や保存時に裏側で行われている処理を見てみましょう。
これも、図書館で本を返却し、修正メモを残すような流れに似ています。

1. アプリケーションからの変更リクエスト

ファイルを編集し、「保存する」ボタンを押すと、アプリケーションはその変更をOSに依頼します。
ここでもOSが仲介役になります。

2. 変更データの一時保存

すぐにディスクに書き込むのではなく、まずは変更内容を「バッファ」と呼ばれるメモリ上の仮置き場に保存します。

これは、毎回ディスクにアクセスしていたら時間がかかるため、ある程度まとめて処理するための工夫です。

3. ジャーナリング(変更の記録)

現代の多くのファイルシステムでは、書き込み前に変更内容を「ジャーナル(=日誌)」に記録する仕組みがあります。突然停電しても、何がどう変更されようとしていたかを記録しておけば、後で復旧できるからです。

4. ディスクへの実際の書き込み

タイミングを見て、OSは変更内容を実際にディスクへと書き込みます。書き込み先は必ずしも元の場所とは限らず、別の空いている場所に新しく書いてから、参照ポインタを更新することもあります。

5. メタデータの更新

ファイルのサイズや更新日時などのメタデータも、変更と一緒に更新されます。これにより、ファイルシステムが最新の情報を把握し続けられるようになります。

6. キャッシュの更新

ディスクへの書き込みが終わったら、メモリ上のキャッシュにも最新状態を反映させます。次にそのファイルを開いたときに、古い情報が出てこないようにするためです。

7. アプリケーションへの完了通知

すべての作業が無事に終わると、OSはアプリケーションに「保存完了」と知らせます。これで、安心して作業を終えることができるようになります。

OSが気を付けている3つの重要なポイント

ファイル操作はただの読み書きではありません。OSは次のようなポイントを常に意識しています。

1. 原子性(Atomicity)

「途中まで保存されていたけど中断された」という状態を防ぐために、ファイル操作は「全部成功するか、まったくしないか」のどちらかになるよう設計されています。

2. 一貫性(Consistency)

ファイルの実体と、そのファイルに関する情報(名前やサイズなど)が常に整合している必要があります。たとえば、ファイルを削除したら、その参照情報も同時に削除されないと、システムが混乱してしまいます。

3. 分離性(Isolation)

複数のアプリケーションが同じファイルに同時にアクセスしようとすることがあります。そんなときに内容が壊れたり混在したりしないよう、OSはアクセスをうまく制御しています。

パフォーマンス向上のための工夫

ファイル操作は頻繁に行われるため、OSは以下のような工夫で処理を高速化しています。

  • ディスクキャッシュ:最近アクセスしたデータをメモリに残しておくことで、次回の読み込みを高速化
  • プリフェッチ:ユーザーが次にアクセスしそうなデータを予測して先に読み込んでおく
  • 非同期I/O:ファイル操作中もアプリケーションが止まらないよう、裏で処理を進める
  • ライトバックキャッシュ:一時的にメモリに変更内容をためておき、後からまとめて書き込むことで効率化

まとめ

普段何気なく行っている「ファイルを開く」「保存する」といった操作の裏側では、OSが非常に多くのことを黙々とこなしています。
それはまるで、舞台裏で働くプロのスタッフのように、表に出ることなく、安全性や速度、正確性を支える存在です。OSのこうした働きを知ることで、日々使っているコンピュータへの見方が少し変わるかもしれません。
最後までお読みいただき、ありがとうございました。

参考URL

https://xtech.nikkei.com/atcl/nxt/column/18/00206/031300004/
https://applied-programming.github.io/Operating-Systems-Notes/8-IO-Management/
https://www.scaler.com/topics/file-systems-in-os/
https://xtech.nikkei.com/atcl/nxt/column/18/00206/031300005/

Discussion