linux io はファイル操作を指します。Linux では、ファイルは一連のバイナリ ストリームであるため、情報交換中に、これらのストリーム上でデータの送受信操作を実行します。これらの操作は、 Linux は仮想メモリ メカニズムを使用するため、IO 操作を完了するにはシステム コールを通じてカーネルを要求する必要があります。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux io とは何を指しますか?
Linux の世界では、すべてがファイルであることは誰もが知っています。
そして、ファイルは一連のバイナリ ストリームであり、ソケット、FIFO、パイプ、ターミナルなど、私たちにとってはすべてがストリームです。
情報交換のプロセスでは、私たちは皆、これらのストリーム上でデータの送受信操作 (I/O 操作と呼ばれます) を実行します。
ストリームからデータを読み取るには、システムは Read を呼び出し、データを書き込むには、システムは Write を呼び出します。
通常、ユーザー プロセスの完全な IO は 2 つの段階に分割されます:
ディスク IO:
ネットワーク IO:
オペレーティング システムとドライバーはカーネル空間で実行され、アプリケーションはユーザー空間で実行されます。両者はポインターを使用することはできません。 Linux で使用される 仮想メモリメカニズムは、IO アクションを完了するためにシステム コールを通じてカーネルに要求する必要があるため、データを転送します。
IO にはメモリ IO、ネットワーク IO、ディスク IO の 3 種類があります。通常、ここで言う IO は後者の 2 つを指します。
IO モデルが必要な理由
同期を使用して通信すると、すべての操作が 1 つのスレッドで順番に実行されるため、欠点は次のとおりです。明らか:
- 同期通信操作は同じスレッド上の他の操作をブロックするため、この操作が完了した後にのみ後続の操作を完了できるため、## が表示されます #同期ブロック マルチスレッド (各 Socket はそれに対応するスレッドを作成します) が、システム内のスレッドの数は限られており、スレッドの切り替えは時間の無駄であるため、Socket が少ない状況に適しています。
IO モデルを表示する必要があります。Linux IO モデルLinux IO モデルを説明する前に、まず Linux システム データを読み取るプロセスを理解しましょう。
##index.html ファイルをリクエストするユーザーを例として使用して説明します
ユーザー スペースとカーネル空間
オペレーティング システムの中核はカーネルであり、通常のアプリケーションから独立しており、保護されたメモリ空間へのアクセスと、基盤となるハードウェア デバイスにアクセスするためのすべての権限を持っています。- カーネルのセキュリティを確保するため、ユーザープロセスはカーネルを直接操作できず、オペレーティングシステムは仮想空間をカーネル空間とユーザー空間の2つに分割します。
プロセスの切り替え
プロセスの実行を制御するには、カーネルが CPU 上で実行中のプロセスを一時停止し、プロセスを再開する機能を備えている必要があります。以前に一時停止されたプロセス。プロセスの実行。この動作はプロセス切り替えと呼ばれます。つまり、どのプロセスもオペレーティング システム カーネルのサポートを受けて実行され、カーネルと密接に関係していると言えます。
プロセスのブロック
システム リソースの要求の失敗、特定の操作の完了の待機など、予期される特定のイベントが発生しないため、実行中のプロセスが新しいデータ まだ到着していない場合、または実行する新しい作業がない場合、システムは自動的にブロッキング プリミティブ (Block) を実行して、実行状態からブロッキング状態に変更します。 プロセスのブロックはプロセス自体の能動的な動作であるため、実行状態 (CPU を取得) にあるプロセスのみがブロック状態にできることがわかります。プロセスがブロッキング状態になると、CPU リソースは占有されません。
ファイル ディスクリプタ
ファイル ディスクリプタはコンピュータ サイエンスの用語で、ファイルへの参照を表現するために使用される抽象概念です。 ファイル記述子は、形式上は負ではない整数ですが、実際には、プロセスごとにカーネルによって維持される、プロセスによって開かれたファイルのレコード テーブルを指すインデックス値です。- プログラムが既存のファイルを開くか、新しいファイルを作成すると、カーネルはファイル記述子をプロセスに返します。
キャッシュされた IO
ほとんどのファイル システムのデフォルトの IO 操作はキャッシュされた IO です。 読み取りと書き込みのプロセスは次のとおりです:読み取り操作: オペレーティング システムは、カーネル バッファに必要なデータがあるかどうかを確認します。キャッシュされている場合は、キャッシュから直接返されます。キャッシュされていない場合は、キャッシュから直接返されます。ディスク、ネットワーク カードなどから返されます。読み取り、オペレーティング システムのキャッシュにキャッシュされます。
書き込み操作 : ユーザーからデータをコピーします。スペースをカーネルスペースのキャッシュにコピーします。この時点でユーザプログラムの書き込みは完了していますが、いつディスクやネットワークカードなどに書き込むかについては、明示的にsync同期コマンドを呼び出さない限り、OSが決定します。
# カーネル空間キャッシュに必要なデータがないと仮定すると、ユーザー プロセスは次の 2 段階でディスクまたはネットワークからデータを読み取ります。
#フェーズ 1:- カーネル プログラムは、ディスク、ネットワーク カードなどからカーネル空間キャッシュにデータを読み取ります;
-
フェーズ 2:
ユーザー プログラムは、カーネル空間キャッシュからユーザー空間にデータをコピーします。 -
キャッシュ IO の欠点:
データ送信プロセス中に、アプリケーションのアドレス空間とカーネル空間で複数のデータ コピー操作が必要になります。これらのデータ コピー操作によって発生する CPU とメモリのオーバーヘッドは非常に大きくなります。 同期ブロッキング
ユーザー空間アプリケーションがシステム コールを実行すると、アプリケーションはブロックされ、データの準備ができてデータがカーネルからユーザー プロセスにコピーされるまで何も行われなくなります。データの待機とデータの処理という 2 つの段階の間、プロセス全体がブロックされ、他のネットワーク IO を処理できなくなります。
呼び出し元のアプリケーションは CPU を消費せず、単に応答を待っている状態になるため、処理の観点から見ると、これは非常に効率的です。- これも最も単純な IO モデルで、通常 FD が少なく準備が早い場合に使用しても問題ありません。
ノンブロッキング システム コールが呼び出された後、プロセスはブロックされず、カーネルはすぐにプロセスに戻ります。データの準備がまだ整っていない場合は、エラーが返されます。
プロセスが戻った後、システムコールを行う前に他のことを行うことができます。
上記のプロセスを繰り返し、周期的にシステム コールを実行します。このプロセスは、多くの場合、ポーリングと呼ばれます。
ポーリングでは、データの準備ができるまでカーネル データをチェックし、データをデータ処理のためにプロセスにコピーします。
データをコピーするプロセス全体中、プロセスは依然としてブロックされていることに注意してください。
-
このようにして、プログラミングで
O_NONBLOCK を Socket に設定することができます。
IO 多重化、これはプロセスがカーネルに事前に通知する機能です。カーネルは、プロセスによって指定された 1 つ以上の IO 条件の準備ができていることを検出すると、プロセスに通知します。
プロセスが一連のイベントを待機できるようにします。
IO 再利用の現在の実装方法には、主に Select、Poll、Epoll が含まれます。擬似コードは IO 多重化を記述します:
while(status == OK) { // 不断轮询 ready_fd_list = io_wait(fd_list); //内核缓冲区是否有准备好的数据 for(fd in ready_fd_list) { data = read(fd) // 有准备好的数据读取到用户缓冲区 process(data) }}

まず、Socket がシグナル駆動型 IO を実行できるようにします。信号処理機能をインストールすると、プロセスはブロックされることなく実行され続けます。
データの準備ができると、プロセスは SIGIO 信号を受信し、信号処理関数の I/O 操作関数を呼び出してデータを処理できます。
プロセスは次のとおりです:ソケット シグナル ドライバー IO 機能を有効にする
システムコール Sigaction 信号処理関数を実行します (ノンブロッキング、すぐに戻ります)
- #データの準備が整い、Sigio 信号を生成し、信号コールバックを介してデータを読み取るようにアプリケーションに通知します #この IO 方式には大きな問題があります: Linux のシグナルキューには制限があり、この数を超えるとデータを読み取れなくなります。
#非同期ノンブロッキング
aio_read
システム コール。すぐに開始できます。他のことを行うために、ユーザー スレッドはブロックしません。##カーネルは、IO の最初のフェーズ、つまりデータの準備を開始します。カーネルは、データの準備ができるまで待機すると、カーネル バッファからユーザー バッファにデータをコピーします。
-
カーネルはユーザー スレッドにシグナルを送信するか、ユーザー スレッドをコールバックします。ユーザー スレッド 登録されたコールバック インターフェイスは、読み取り操作が完了したことをユーザー スレッドに伝えます
#ユーザー スレッドはユーザー バッファー内のデータを読み取り、後続のビジネス操作を完了します -
- 信号ドライバーは、IO 操作がいつ開始できるかを知らせます。カーネルに保存される (データはカーネル バッファに保存される) のに対し、非同期 IO は IO 操作が完了したときにカーネルによって通知されます (データはすでにユーザー空間にあります)。
- 非同期 IO 操作を開始するには、
aio_read
またはaio_write
を使用し、実行中の IO 操作のステータスを確認するには、aio_error
を使用します。 。
ユーザー プロセスが aio_read
システム コールを実行すると、カーネル データの準備ができているかどうかに関係なく、データはユーザー プロセスに直接返され、その後ユーザー モード プロセスに返されます。他のことができます。
データの準備ができたら、カーネルはデータをプロセスに直接コピーし、カーネルからプロセスに通知を送信します。
信号駆動型 IO と比較した非同期 IO の主な違いは次のとおりです。
非同期 IO は、イベント駆動型 IO とも呼ばれます。Unix では、ファイルへの非同期アクセス用に一連のライブラリ関数が定義され、一連の AIO インターフェイスが定義されています。
Linux における AIO の現在のカーネル実装は、ファイル IO に対してのみ有効です。実際の AIO を実装したい場合は、自分で実装する必要があります。
現在、libevent、libev、libuv など、オープンソースの非同期 IO ライブラリが多数存在します。
関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinux io とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

メンテナンスメモデンリンリンアスピアルブーテンビロンメント、criticalsystemmaincencetasks.itallowsadministratorstopertopertopertopersetstingtingpasswords、Repainingfilesystems、およびRecoveringfrombootfailurureSinaMinimalenvironment.

Linuxのコアコンポーネントには、カーネル、ファイルシステム、シェル、ユーザー、カーネルスペース、デバイスドライバー、パフォーマンスの最適化とベストプラクティスが含まれます。 1)カーネルは、ハードウェア、メモリ、プロセスを管理するシステムのコアです。 2)ファイルシステムはデータを整理し、Ext4、BTRFS、XFSなどの複数のタイプをサポートします。 3)シェルは、ユーザーがシステムと対話するためのコマンドセンターであり、スクリプトをサポートします。 4)システムの安定性を確保するために、ユーザースペースをカーネルスペースから分離します。 5)デバイスドライバーは、ハードウェアをオペレーティングシステムに接続します。 6)パフォーマンスの最適化には、システム構成とベストプラクティスのチューニングが含まれます。

Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

Linuxメンテナンスモードは、Grubメニューから入力できます。特定の手順は次のとおりです。1)GRUBメニューのカーネルを選択し、「E」を押して編集し、2)「Linux」行の最後に「シングル」または「1」を追加し、3)Ctrl Xを押して開始します。メンテナンスモードは、システム修理、パスワードリセット、システムのアップグレードなどのタスクに安全な環境を提供します。

Linux Recoveryモードを入力する手順は次のとおりです。1。システムを再起動し、特定のキーを押してGrubメニューを入力します。 2。[RecoveryMode)でオプションを選択します。 3. FSCKやrootなどの回復モードメニューで操作を選択します。リカバリモードを使用すると、シングルユーザーモードでシステムを開始し、ファイルシステムのチェックと修理を実行し、構成ファイルを編集し、システムの問題を解決するのに役立ちます。

Linuxのコアコンポーネントには、カーネル、ファイルシステム、シェル、および共通ツールが含まれます。 1.カーネルはハードウェアリソースを管理し、基本的なサービスを提供します。 2。ファイルシステムはデータを整理して保存します。 3.シェルは、ユーザーがシステムと対話するインターフェイスです。 4.一般的なツールは、毎日のタスクを完了するのに役立ちます。

Linuxの基本構造には、カーネル、ファイルシステム、およびシェルが含まれます。 1)カーネル管理ハードウェアリソースとUname-Rを使用してバージョンを表示します。 2)ext4ファイルシステムは、大きなファイルとログをサポートし、mkfs.ext4を使用して作成されます。 3)シェルは、BASHなどのコマンドラインインタラクションを提供し、LS-Lを使用してファイルをリストします。

Linuxシステムの管理とメンテナンスの重要な手順には、次のものがあります。1)ファイルシステム構造やユーザー管理などの基本的な知識をマスターします。 2)システムの監視とリソース管理を実行し、TOP、HTOP、その他のツールを使用します。 3)システムログを使用してトラブルシューティング、JournalCtlおよびその他のツールを使用します。 4)自動化されたスクリプトとタスクのスケジューリングを作成し、Cronツールを使用します。 5)セキュリティ管理と保護を実装し、iPtablesを介してファイアウォールを構成します。 6)パフォーマンスの最適化とベストプラクティスを実行し、カーネルパラメーターを調整し、良い習慣を開発します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
