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 サイトの他の関連記事を参照してください。

Linuxオペレーティングシステムの5つのコアコンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。SystemTools、4。SystemServices、5。FileSystem。これらのコンポーネントは、システムの安定した効率的な動作を確保するために連携し、一緒に強力で柔軟なオペレーティングシステムを形成します。

Linuxの5つのコア要素は、1。Kernel、2。CommandLineインターフェイス、3。ファイルシステム、4。パッケージ管理、5。コミュニティおよびオープンソースです。一緒に、これらの要素はLinuxの性質と機能を定義します。

Linuxユーザー管理とセキュリティは、次の手順を通じて達成できます。1。sudouseradd-m-gdevelopers-s/bin/bashjohnなどのコマンドを使用して、ユーザーとグループを作成します。 2. bulkly forループとchpasswdコマンドを使用して、ユーザーを作成し、パスワードポリシーを設定します。 3.一般的なエラー、ホームディレクトリ、シェル設定を確認して修正します。 4.強力な暗号化ポリシー、定期的な監査、最低限の権限の原則などのベストプラクティスを実装します。 5.パフォーマンスを最適化し、SUDOを使用し、PAMモジュールの構成を調整します。これらの方法により、ユーザーを効果的に管理でき、システムセキュリティを改善できます。

Linuxファイルシステムとプロセス管理のコア操作には、ファイルシステム管理とプロセス制御が含まれます。 1)ファイルシステム操作には、MKDIR、RMDIR、CP、MVなどのコマンドを使用したファイルまたはディレクトリの作成、削除、コピー、および移動が含まれます。 2)プロセス管理には、./my_script.sh&、top、killなどのコマンドを使用して、プロセスの開始、監視、殺害が含まれます。

シェルスクリプトは、Linuxシステムでコマンドを自動実行するための強力なツールです。 1)シェルスクリプトは、通訳を介して行ごとにコマンドを実行して、可変置換と条件付き判断を処理します。 2)基本的な使用法には、TARコマンドを使用してディレクトリをバックアップするなど、バックアップ操作が含まれます。 3)高度な使用には、サービスを管理するための機能とケースステートメントの使用が含まれます。 4)デバッグスキルには、セットXを使用してデバッグモードを有効にし、コマンドが故障したときにセットEを終了することが含まれます。 5)サブシェル、使用、最適化ループを避けるために、パフォーマンスの最適化をお勧めします。

Linuxは、UNIXベースのマルチユーザーのマルチタスクオペレーティングシステムで、シンプルさ、モジュール性、オープン性を強調しています。そのコア機能には、ファイルシステム:ツリー構造で整理され、Ext4、XFS、BTRFSなどの複数のファイルシステムをサポートし、DF-Tを使用してファイルシステムタイプを表示します。プロセス管理:PSコマンドを使用してプロセスを表示し、優先度の設定と信号処理を含むPIDを使用してプロセスを管理します。ネットワーク構成:IPアドレスの柔軟な設定とネットワークサービスの管理、およびsudoipaddraddを使用してIPを構成します。これらの機能は、基本的なコマンドと高度なスクリプト自動化を通じて実際の操作に適用され、効率を向上させ、エラーを削減します。

Linuxメンテナンスモードに入る方法には次のものがあります。1。grub構成ファイルを編集し、「シングル」または「1」パラメーターを追加し、Grub構成を更新します。 2。GRUBメニューでスタートアップパラメーターを編集し、「シングル」または「1」を追加します。終了メンテナンスモードでは、システムを再起動する必要があります。これらの手順を使用すると、必要に応じてメンテナンスモードをすばやく入力して安全に終了し、システムの安定性とセキュリティを確保できます。

Linuxのコアコンポーネントには、カーネル、シェル、ファイルシステム、プロセス管理、メモリ管理が含まれます。 1)カーネル管理システムリソース、2)シェルはユーザーインタラクションインターフェイスを提供します。3)ファイルシステムは複数の形式をサポートします。4)プロセス管理は、フォークなどのシステムコールを通じて実装され、5)メモリ管理は仮想メモリテクノロジーを使用します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

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

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