目次
プロセスが一連のイベントを待機できるようにします。
データの準備ができると、プロセスは SIGIO 信号を受信し、信号処理関数の I/O 操作関数を呼び出してデータを処理できます。
aio_read
ホームページ 運用・保守 Linuxの運用と保守 Linux io とはどういう意味ですか?

Linux io とはどういう意味ですか?

Mar 24, 2023 am 09:43 AM
linux io

linux io はファイル操作を指します。Linux では、ファイルは一連のバイナリ ストリームであるため、情報交換中に、これらのストリーム上でデータの送受信操作を実行します。これらの操作は、 Linux は仮想メモリ メカニズムを使用するため、IO 操作を完了するにはシステム コールを通じてカーネルを要求する必要があります。

Linux io とはどういう意味ですか?

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux io とは何を指しますか?

Linux の世界では、すべてがファイルであることは誰もが知っています。

そして、ファイルは一連のバイナリ ストリームであり、ソケット、FIFO、パイプ、ターミナルなど、私たちにとってはすべてがストリームです。

  • 情報交換のプロセスでは、私たちは皆、これらのストリーム上でデータの送受信操作 (I/O 操作と呼ばれます) を実行します。

  • ストリームからデータを読み取るには、システムは Read を呼び出し、データを書き込むには、システムは Write を呼び出します。

通常、ユーザー プロセスの完全な IO は 2 つの段階に分割されます:

ディスク IO:

Linux io とはどういう意味ですか?

ネットワーク IO:

Linux io とはどういう意味ですか?

オペレーティング システムとドライバーはカーネル空間で実行され、アプリケーションはユーザー空間で実行されます。両者はポインターを使用することはできません。 Linux で使用される 仮想メモリメカニズムは、IO アクションを完了するためにシステム コールを通じてカーネルに要求する必要があるため、データを転送します。

IO にはメモリ IO、ネットワーク IO、ディスク IO の 3 種類があります。通常、ここで言う IO は後者の 2 つを指します。

IO モデルが必要な理由

同期を使用して通信すると、すべての操作が 1 つのスレッドで順番に実行されるため、欠点は次のとおりです。明らか:

  • 同期通信操作は同じスレッド上の他の操作をブロックするため、この操作が完了した後にのみ後続の操作を完了できるため、## が表示されます #同期ブロック マルチスレッド (各 Socket はそれに対応するスレッドを作成します) が、システム内のスレッドの数は限られており、スレッドの切り替えは時間の無駄であるため、Socket が少ない状況に適しています。
IO モデルを表示する必要があります。

Linux IO モデル

Linux IO モデルを説明する前に、まず Linux システム データを読み取るプロセスを理解しましょう。

Linux io とはどういう意味ですか?

##index.html ファイルをリクエストするユーザーを例として使用して説明します

Linux io とはどういう意味ですか?

基本概念

ユーザー スペースとカーネル空間

オペレーティング システムの中核はカーネルであり、通常のアプリケーションから独立しており、保護されたメモリ空間へのアクセスと、基盤となるハードウェア デバイスにアクセスするためのすべての権限を持っています。

    カーネルのセキュリティを確保するため、ユーザープロセスはカーネルを直接操作できず、オペレーティングシステムは仮想空間をカーネル空間とユーザー空間の2つに分割します。

プロセスの切り替え

プロセスの実行を制御するには、カーネルが CPU 上で実行中のプロセスを一時停止し、プロセスを再開する機能を備えている必要があります。以前に一時停止されたプロセス。プロセスの実行。

この動作はプロセス切り替えと呼ばれます。

つまり、どのプロセスもオペレーティング システム カーネルのサポートを受けて実行され、カーネルと密接に関係していると言えます。

プロセスのブロック

システム リソースの要求の失敗、特定の操作の完了の待機など、予期される特定のイベントが発生しないため、実行中のプロセスが新しいデータ まだ到着していない場合、または実行する新しい作業がない場合、システムは自動的にブロッキング プリミティブ (Block) を実行して、実行状態からブロッキング状態に変更します。

プロセスのブロックはプロセス自体の能動的な動作であるため、実行状態 (CPU を取得) にあるプロセスのみがブロック状態にできることがわかります。

プロセスがブロッキング状態になると、CPU リソースは占有されません。

ファイル ディスクリプタ

ファイル ディスクリプタはコンピュータ サイエンスの用語で、ファイルへの参照を表現するために使用される抽象概念です。

ファイル記述子は、形式上は負ではない整数ですが、実際には、プロセスごとにカーネルによって維持される、プロセスによって開かれたファイルのレコード テーブルを指すインデックス値です。

    プログラムが既存のファイルを開くか、新しいファイルを作成すると、カーネルはファイル記述子をプロセスに返します。

キャッシュされた IO

ほとんどのファイル システムのデフォルトの IO 操作はキャッシュされた IO です。

読み取りと書き込みのプロセスは次のとおりです:

  • 読み取り操作: オペレーティング システムは、カーネル バッファに必要なデータがあるかどうかを確認します。キャッシュされている場合は、キャッシュから直接返されます。キャッシュされていない場合は、キャッシュから直接返されます。ディスク、ネットワーク カードなどから返されます。読み取り、オペレーティング システムのキャッシュにキャッシュされます。

  • 書き込み操作 : ユーザーからデータをコピーします。スペースをカーネルスペースのキャッシュにコピーします。この時点でユーザプログラムの書き込みは完了していますが、いつディスクやネットワークカードなどに書き込むかについては、明示的にsync同期コマンドを呼び出さない限り、OSが決定します。

# カーネル空間キャッシュに必要なデータがないと仮定すると、ユーザー プロセスは次の 2 段階でディスクまたはネットワークからデータを読み取ります。

#フェーズ 1:
    カーネル プログラムは、ディスク、ネットワーク カードなどからカーネル空間キャッシュにデータを読み取ります;
  • フェーズ 2:
  • ユーザー プログラムは、カーネル空間キャッシュからユーザー空間にデータをコピーします。
  • キャッシュ IO の欠点:
データ送信プロセス中に、アプリケーションのアドレス空間とカーネル空間で複数のデータ コピー操作が必要になります。これらのデータ コピー操作によって発生する CPU とメモリのオーバーヘッドは非常に大きくなります。

同期ブロッキング

ユーザー空間アプリケーションがシステム コールを実行すると、アプリケーションはブロックされ、データの準備ができてデータがカーネルからユーザー プロセスにコピーされるまで何も行われなくなります。データの待機とデータの処理という 2 つの段階の間、プロセス全体がブロックされ、他のネットワーク IO を処理できなくなります。

呼び出し元のアプリケーションは CPU を消費せず、単に応答を待っている状態になるため、処理の観点から見ると、これは非常に効率的です。

    これも最も単純な IO モデルで、通常 FD が少なく準備が早い場合に使用しても問題ありません。

同期ノンブロッキング

Linux io とはどういう意味ですか?ノンブロッキング システム コールが呼び出された後、プロセスはブロックされず、カーネルはすぐにプロセスに戻ります。データの準備がまだ整っていない場合は、エラーが返されます。

プロセスが戻った後、システムコールを行う前に他のことを行うことができます。

  • 上記のプロセスを繰り返し、周期的にシステム コールを実行します。このプロセスは、多くの場合、ポーリングと呼ばれます。

  • ポーリングでは、データの準備ができるまでカーネル データをチェックし、データをデータ処理のためにプロセスにコピーします。

  • データをコピーするプロセス全体中、プロセスは依然としてブロックされていることに注意してください。

  • このようにして、プログラミングで

    O_NONBLOCK
  • を Socket に設定することができます。
IO 多重化

Linux io とはどういう意味ですか?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) }}
ログイン後にコピー
Linux io とはどういう意味ですか?シグナル ドライバー

まず、Socket がシグナル駆動型 IO を実行できるようにします。信号処理機能をインストールすると、プロセスはブロックされることなく実行され続けます。

データの準備ができると、プロセスは SIGIO 信号を受信し、信号処理関数の I/O 操作関数を呼び出してデータを処理できます。

プロセスは次のとおりです:

ソケット シグナル ドライバー IO 機能を有効にする

  • システムコール Sigaction 信号処理関数を実行します (ノンブロッキング、すぐに戻ります)

  • #データの準備が整い、Sigio 信号を生成し、信号コールバックを介してデータを読み取るようにアプリケーションに通知します

  • #この IO 方式には大きな問題があります: Linux のシグナルキューには制限があり、この数を超えるとデータを読み取れなくなります。
  • #非同期ノンブロッキング

非同期 IO プロセスは次のとおりです:

Linux io とはどういう意味ですか?

ユーザー スレッドが

aio_read

システム コール。すぐに開始できます。他のことを行うために、ユーザー スレッドはブロックしません。

##カーネルは、IO の最初のフェーズ、つまりデータの準備を開始します。カーネルは、データの準備ができるまで待機すると、カーネル バッファからユーザー バッファにデータをコピーします。

  • カーネルはユーザー スレッドにシグナルを送信するか、ユーザー スレッドをコールバックします。ユーザー スレッド 登録されたコールバック インターフェイスは、読み取り操作が完了したことをユーザー スレッドに伝えます

    #ユーザー スレッドはユーザー バッファー内のデータを読み取り、後続のビジネス操作を完了します
  • #同期 IO と比較して、非同期 IO は連続して実行されません。
  • ユーザー プロセスが aio_read システム コールを実行すると、カーネル データの準備ができているかどうかに関係なく、データはユーザー プロセスに直接返され、その後ユーザー モード プロセスに返されます。他のことができます。

    データの準備ができたら、カーネルはデータをプロセスに直接コピーし、カーネルからプロセスに通知を送信します。

    信号駆動型 IO と比較した非同期 IO の主な違いは次のとおりです。

    • 信号ドライバーは、IO 操作がいつ開始できるかを知らせます。カーネルに保存される (データはカーネル バッファに保存される) のに対し、非同期 IO は IO 操作が完了したときにカーネルによって通知されます (データはすでにユーザー空間にあります)。

    非同期 IO は、イベント駆動型 IO とも呼ばれます。Unix では、ファイルへの非同期アクセス用に一連のライブラリ関数が定義され、一連の AIO インターフェイスが定義されています。

    • 非同期 IO 操作を開始するには、aio_read または aio_write を使用し、実行中の IO 操作のステータスを確認するには、aio_error を使用します。 。

    Linux における AIO の現在のカーネル実装は、ファイル IO に対してのみ有効です。実際の AIO を実装したい場合は、自分で実装する必要があります。

    現在、libevent、libev、libuv など、オープンソースの非同期 IO ライブラリが多数存在します。

    Linux io とはどういう意味ですか?

    関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinux io とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Linuxアーキテクチャ:5つの基本コンポーネントを発表します Linuxアーキテクチャ:5つの基本コンポーネントを発表します Apr 20, 2025 am 12:04 AM

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

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

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

vscode端子使用チュートリアル vscode端子使用チュートリアル Apr 15, 2025 pm 10:09 PM

VSCODEビルトインターミナルは、エディター内でコマンドとスクリプトを実行して開発プロセスを簡素化できるようにする開発ツールです。 VSCODE端子の使用方法:ショートカットキー(CTRL/CMD)で端子を開きます。コマンドを入力するか、スクリプトを実行します。 Hotkeys(Ctrl Lなどの端子をクリアするなど)を使用します。作業ディレクトリ(CDコマンドなど)を変更します。高度な機能には、デバッグモード、自動コードスニペット完了、およびインタラクティブコマンド履歴が含まれます。

GITの倉庫アドレスを確認する方法 GITの倉庫アドレスを確認する方法 Apr 17, 2025 pm 01:54 PM

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

Apr 16, 2025 pm 07:39 PM

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

vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

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

VSCODE端子コマンドは使用できません VSCODE端子コマンドは使用できません Apr 15, 2025 pm 10:03 PM

VSコード端末コマンドの原因とソリューションは使用できません:必要なツールはインストールされていません(Windows:WSL; MACOS:XCODE LINEツール)パス構成が間違っています(パス環境変数に実行可能ファイルを追加)許可問題(管理者としてのコードの実行)ファイアウォールまたはプロキシ制限制限(チェック設定、無制限) (再インストールまたは更新)端子構成は互換性がありません(異なる端子タイプまたはコマンドを試してください)特定の環境変数が欠落しています(必要な環境変数を設定します)

See all articles