Linux ファイル システムがどのように機能するかを知りたいですか?
Linux ファイル システムはオペレーティング システムのコア コンポーネントであり、そのオペレーティング メカニズムは私たちプログラマーが理解して習得する必要があるものです。ディスクはシステムに最も基本的な永続ストレージを提供し、ファイル システムはシステムにLinux ではすべてのファイルを管理するため、すべてがファイルであり、通常のファイルやディレクトリだけでなく、ブロックデバイス、ソケット、パイプなども統一されたファイルシステムで管理する必要があります。今日は、ディスクとファイル システムはどのように機能するのかについて一緒に話します。
ノードとディレクトリ エントリのインデックスを作成する
Linux ファイル システムでは、ファイルのメタデータには、ディレクトリ エントリ、インデックス ノード、データ ブロックが含まれます。
- ディレクトリ エントリ: dentry と呼ばれ、ファイルの名前、インデックス ノード ポインタ、および他のディレクトリ エントリとの関連付けを記録するために使用されます。複数の関連付けられたディレクトリ エントリがファイル システムのディレクトリ構造を構成します。ディレクトリ エントリはカーネルによって維持されるメモリ データ構造であるため、ディレクトリ エントリ キャッシュ (キャッシュ) と呼ばれることがよくあります。
- インデックス ノード: inode と呼ばれ、inode 番号、ファイル サイズ、アクセス許可、変更日、データの場所、リンク数などを含むファイルのメタデータを記録するために使用されます。インデックス ノード情報は永続化されます。ストレージ用のディスク。ディスク領域を占有します。
- データ ブロック: ブロックと呼ばれ、ファイル データが保存されます。ディスクの最小の記憶単位はセクタと呼ばれます。各セクタには 512 バイトが格納され、これは 0.5KB に相当します。オペレーティング システムがハードディスクを読み取るとき、セクタごとに読み取ることはなく、あまりにも非効率です。複数のセクターを一度に連続して読み取ります。つまり、一度に 1 つの「ブロック」を読み取ります。複数のセクターから構成されるこの「ブロック」がファイルアクセスの最小単位です。 「ブロック」サイズ、最も一般的なのは 4KB (8 セクター) です。
ファイルアクセスを高速化するために、通常、インデックスノードはメモリにロードされ、フォーマット時にハードディスクはスーパーブロック、インデックスノード領域、データブロック領域の3つの記憶領域に分割されます。
- スーパーブロックは、ブロック数、ブロックサイズ、空きブロックなど、ファイルシステムの詳細情報を保存するために使用されます。
- インデックス ノード領域。インデックス ノードを格納するために使用されます。
- データ ブロック領域。ファイルまたはディレクトリ データを保存するために使用されます。
仮想ファイル システム
Linux システムの仮想ファイル システム (VFS、仮想ファイル システム) は、ユーザーとアプリケーションに一貫したファイル システム インターフェイスを提供する重要な抽象化レイヤーであり、統一された方法でシステム内のさまざまな種類のファイルに安心してアクセスできるようにします。基礎となるファイル システムの実装の詳細について。
ユーザープログラムと glibc ライブラリは両方ともユーザー空間に属し、ファイル操作はシステム コール層 (SCI) の関数を呼び出すことによって完了します。これらの関数は、ユーザーがシステムに操作を要求するために Linux カーネルによって提供されるインターフェイスです。たとえば、システムの cat コマンドは、open() 関数を呼び出してファイルを開き、次に read() 関数を呼び出してファイルの内容を読み取り、最後に write() 関数を呼び出してファイルの内容をコンソールに出力します。 。一般的なファイル システムの種類は、いくつかの広いカテゴリに分類できます。
- ローカル ディスクに基づく: EXT3、EXT4、XFS、OverlayFS など。このタイプのファイル システムの特徴は、データがコンピュータにローカルにマウントされたディスクに直接保存され、優れたパフォーマンスとネットワーク IO アクセスの消費がないことです。
- ネットワーク ファイル システムに基づく: NFS、CIFS/SMB、CephFS、GlusterFS など。このタイプのファイルの特徴は、ユーザーがネットワーク経由でファイルにアクセスして管理できることです。分散、クロスプラットフォーム、柔軟性、拡張性が最大の利点です。
- メモリベースのファイル システム: tmpfs、ramfs、/proc など。これらのメモリベースのファイル システムは通常、一時ファイル ストレージ、キャッシュ、高速データ アクセスなどの特定の目的に使用されます。これらはメモリ内のファイルの読み取りと書き込みのための高性能ソリューションを提供しますが、メモリの制限とデータの揮発性にも注意する必要があります。
ファイル I/O
さまざまなタイプのファイル システムを作成するために、ディスクをパーティション分割してフォーマットします。これらのファイル システムは、システムで使用する前に、Linux の VFS 上の特定のディレクトリにマウントする必要があります。ファイルの読み取りおよび書き込み操作にはさまざまな I/O タイプがあり、アプリケーション プログラムはニーズに応じて適切な方法を選択します。
バッファ型 I/O とバッファなし I/O
- いわゆるバッファリングなしとは、カーネルがバッファリングを提供せず、単純なシステム コールのみを提供し、関数ライブラリの呼び出しを提供しないことを意味します。システム カーネルは、ディスクの読み取りおよび書き込み用のブロック バッファを提供します。write 関数を使用してデータを書き込む場合、システム コールが直接呼び出され、データがブロック バッファに書き込まれ、キューに入れられます。ブロック バッファが一定の値に達すると、システム コールが直接呼び出されます。一定量になると、データがディスクに書き込まれます。したがって、いわゆるバッファなし I/O は、プロセスがバッファリング機能を提供しないことを意味します。書き込みまたは読み取り関数が呼び出されるたびに、システムによって直接呼び出されます。 (カーネルによってバッファリングされます)。
- バッファリングされた I/O は、プロセスが入出力ストリームを改善し、ストリーム バッファーを提供することを意味します。 write関数でデータを書き込む場合、まずストリームバッファにデータを書き込み、ストリームバッファが一杯になるなど一定の条件が満たされると、カーネルが提供するブロックバッファに一括してデータを送信し、次に、ブロック バッファを介してディスクに書き込まれます。 (ダブルバッファリング)
- したがって、同じ量のデータをディスクに書き込む場合、バッファリングされた I/O はバッファリングされていない I/O よりも必要なシステム コールが少なくなります。
直接 I/O と間接 I/O
- ダイレクト I/O: アプリケーションはカーネル バッファを経由せずにディスク データに直接アクセスします。この目的は、カーネル バッファからユーザー プログラム キャッシュへのデータ コピーを減らすことです。
- 間接 I/O: ファイルの読み取りまたは書き込み時には、まずシステムのページ キャッシュを通過し、次にカーネルまたは追加のシステム コールによってディスクに書き込まれる必要があります。
- 直接 I/O の場合、アクセスされたデータがアプリケーション キャッシュにない場合、データは毎回ディスクから直接ロードされるため、この直接ロードの効率は遅くなります。ただし、データベース管理システムなどのアプリケーションの場合は、独自のキャッシュ メカニズムを選択する可能性が高くなります。これは、データベース管理システムはオペレーティング システムよりもデータベースに保存されているデータをよく知っていることが多く、直接 I/O の方が適切であるためです。
ブロッキング I/O とノンブロッキング I/O
- I/O のブロック: アプリケーション プロセスは、I/O 操作を呼び出すときにブロックします。操作対象のデータが準備でき、アプリケーション プロセスのバッファーにコピーされた場合にのみ戻ります。実装難易度が低く、アプリケーション開発が容易で、同時実行数の少ないネットワークアプリケーションの開発に適しているという特徴があります。
- ノンブロッキング I/O: アプリケーションが I/O 操作を実行した後、現在のスレッドをブロックせず、引き続き他のタスクを実行し、ポーリングまたはイベント通知を通じて呼び出しの結果を取得できることを意味します。 。特徴は次のとおりです。 比較的複雑です。同時実行量が少なく、タイムリーな応答を必要としないネットワーク アプリケーション開発に適しています
同期および非同期 I/O
- 同期 I/O: アプリケーションが I/O 操作を実行した後、I/O 応答を取得するには、I/O 全体が完了するまで待機する必要があることを意味します。
- 非同期 I/O: アプリケーションが I/O 操作を実行した後、完了や完了後の応答を待つ必要がなく、実行を続行できることを意味します。この I/O が完了すると、その応答がイベント通知の形式でアプリケーションに通知されます。
ファイルに関する一般的な知識
ディスクにはまだ多くのスペースが残っていますが、新しいファイルやディレクトリを保存するためのスペースが不足しています。
- トラブルシューティングのアイデア: 小さなファイルが多すぎて i ノードが使い果たされている可能性が高くなります。df -i を使用できます。
du と df の間のハード ディスク使用量統計に一貫性がありません。
- du は、ファイル システムによって記録された各ファイルのサイズをカウントし、ファイル システムを通じて取得される合計サイズを累積します。 df は主にスーパーブロック (スーパーブロック) からハードディスクの使用状況情報を読み取り、ディスク ブロックの使用状況を取得します。この状況は、ファイルが削除されているにもかかわらず、別のプロセスがそのファイルを使用している (ハンドルを所有している) ことが原因で発生する可能性が高く、lsof | grep delete で確認できます。プロセスが停止または強制終了されると、これらのスペースは解放されます。
ディスク容量をクエリすると、使用済みアベイルのサイズが常に総容量 (SIze) よりも小さいのはなぜですか。
- 緊急事態を防ぐために、Linux ext ファイル システムはハード ディスク領域を予約します。特定の予約値は、tune2fs -l [dev_name] | grep "予約ブロック数"、(dev_name) はデバイス名で確認できます。 , ここで、予約スペースは df によって使用スペースに計算され、その結果、df と du の間で統計が矛盾します。予約スペースのサイズを調整する必要がある場合は、tune2fs -m [size] [dev_name] を使用して調整できます。
以上がLinux ファイル システムがどのように機能するかを知りたいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

VSコード拡張機能のインストールの理由は、ネットワークの不安定性、許可不足、システム互換性の問題、VSコードバージョンが古すぎる、ウイルス対策ソフトウェアまたはファイアウォール干渉です。ネットワーク接続、許可、ログファイル、およびコードの更新、セキュリティソフトウェアの無効化、およびコードまたはコンピューターの再起動を確認することにより、問題を徐々にトラブルシューティングと解決できます。

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

VSコードは、Microsoftが開発した無料のオープンソースクロスプラットフォームコードエディターと開発環境であるフルネームVisual Studioコードです。幅広いプログラミング言語をサポートし、構文の強調表示、コード自動完了、コードスニペット、および開発効率を向上させるスマートプロンプトを提供します。リッチな拡張エコシステムを通じて、ユーザーは、デバッガー、コードフォーマットツール、GIT統合など、特定のニーズや言語に拡張機能を追加できます。 VSコードには、コードのバグをすばやく見つけて解決するのに役立つ直感的なデバッガーも含まれています。

VSコードはMacで利用できます。強力な拡張機能、GIT統合、ターミナル、デバッガーがあり、豊富なセットアップオプションも提供しています。ただし、特に大規模なプロジェクトまたは非常に専門的な開発の場合、コードと機能的な制限がある場合があります。

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。
