3分日間練習攻略オペレーティングシステム(13)と、二つのバッファ空間カーネルバッファIOバッファ

私はポイントのシリアル攻略を参照してください

二つのバッファ容量:カーネルバッファとIOバッファ

マップを見て、この図は、後で拡大説明の周りになります。図中のファイル記述子FD(例えばFD = 3:図のFdテーブル、オープン・ファイル・テーブルと2つのiノードテーブルを理解することができない、唯一のファイル・ディスクリプタとその反射ディスクファイルとの対応関係を知る必要があります。 )ディスク上の対応するファイルです。

Linuxのは、ファイル記述子を介して行われるので、Linuxでは、我々しばしば避けられない、それはファイルディスクリプタに来るすべてでIO、IO操作で動作します。しかし、ファイル記述子が操作データはバイナリデータであるを通して非常に底概念であり、ファイル記述子モードによってIO完了はまた、一般的に呼ばれる裸IO(IO生を)。\ nは、\ nは\ rは:直接それはバイナリデータであるため、多くのトラブルになり、プログラミングの基礎となるファイルディスクリプタ経由さらに、それは、エンコーディングを指定しないと、あなたは改行(改行品種を指定することはできませんように、多くの機能が欠けている \、 R)、そして上のようにします。注fdはユーザ空間で、それだけで、ちょうどより多くの基盤となるカーネル空間を感じて想像だけではなく、数値です。

したがって、(例えばCやPython、Java(登録商標)、Golangなど)現代の高水準言語は、ファイルディスクリプタよりも高いレベルを提供標準IOライブラリーを、標準C IOライブラリとして、標準入出力であり、Pythonの標準ライブラリ等、IO IOモジュールでありますように。これらの標準関数ライブラリは、IO IOオペレーションた、例えばIOストリームC(IOストリーム)と呼ばれる、ファイル記述子オブジェクトよりも高いレベルを使用するを使用する場合、他のオブジェクト指向言語は、一般的に、IOオブジェクトをいいます便宜上、まとめIOオブジェクトと呼びます。Fは、上記ファイルオブジェクト画像です。

標準IOライブラリファイル記述子の操作は、IO機能より提供、パッケージファイル記述子のより高いレベルと見なすことができます。例えば、オブジェクトは、符号IOに指定改行を指定し、ユーザは、バッファ空間を空間標準IOライブラリを提供され、通常呼ばれてもよい標準入出力バッファIOバッファを、これらの機能は、ファイルディスクリプタにありませんA。それは高レベルの標準IOライブラリパッケージであるため、また、当然のことながら、これは、ターゲットはファイルディスクリプタファイルに相当し、この時間ので、ユーザーは、(例えばIOバッファを使用していないとして)これらの機能を使用していますが、ファイルディスクリプタを直接使用していない提供します操作のIOモードは、裸のIOモードがあるとき。

すべてのデータの読み出しやハードウェアからハードウェアに書き込まれ、デフォルトのオペレーティングシステムは、このカーネルバッファを介して保持されます。図形データ上記の方法を読み取ります。

例えば、猫a.logプロセスがファイルを読みたい、猫のプロセスは、それだけでデータを読み取るヘルプへのオペレーティングシステムを要求し、システムコールを通じてカーネルに分類することができ、それ自体がファイルを開くと、データファイルの読み取り権限を持たないユーザ空間のプロセスです、オペレーティングシステムの後に(カーネルのための一般的なファイルのメンテナンスがページキャッシュと呼ばれるか、バッファキャッシュバッファ、ちょうど説明した)データがページキャッシュに入れられます読み込みます。そして、我々は、IOバッファスペースバッファユーザ空間にカーネル空間でデータ・ページ・キャッシュをコピーする必要があり(標準IOライブラリの標準入出力に使用される猫のプログラムのソースコードがあるため)、その後、猫プロセスは、内に独自のIOバッファからデータを読み出します。これは、データを読み取る全体のプロセスです。

カーネルのメモリ空間へのアクセスを持っていないこれら二つは、ユーザ・プロセスのカーネルメモリ空間と仮想メモリ空​​間はユーザ空間のプロセスから隔離されているので、メモリ内のスペースをバッファリングするが、それでもコピー操作を持っているが、ことに留意すべきですしかし、コアは、任意のメモリアドレスへのアクセスを許可し、最高の権威を持っています。言い換えれば、カーネルバッファは、カーネルに分類する必要性、プロセス内のIOバッファ空間に制御CPUへのOSの必要性をデータをコピーします。

また、Linuxは、いわゆる提供ダイレクトIOモードを、単に使用O_DIRECTのマーク缶を、その後、カーネルバッファをバイパスし、ハードウェアが直接ユーザ空間にデータをコピーします。それがより良いパフォーマンスフィーリングへの参加の少ないダイレクトIOレベルを思われるが、実際ではない場合には、オペレーティングシステムが減少し、パフォーマンスをされることはありませんカーネルバッファスペースの最適化の多くを行っています。最も一般的な、共通の最適化先読み機能は、それがので、データの次の読み出し次の期間は、直接的であってもよいことを、カーネルバッファへの要求に読み出されるデータ量よりも少ないを読み取り、データを読み取ることで、前記しました対話することなく、カーネル・バッファ、ハードウェアおよびIOからデータを取ります。だから、ダイレクトIOモードのシーンを使用すると、非常に小さく、通常は唯一のIOモードで直接使用することができる(たとえば、データベースシステムなど)のフルバッファモデルに付属している大規模なソフトウェアです。

すべての操作が書き込み動作に関して、上記の読み取り、それはIOバッファとカーネルバッファを経て、もはや全体的なプロセスと読書が類似している記述するために多くのスペースを費やすことはありません、詳細の一部は、興味あれば、異なっているだけされています第13章「マニュアルプログラミングのLinux / Unixシステム」をお読みください。

おすすめ

転載: www.cnblogs.com/f-ck-need-u/p/11870538.html