Linux ロックの種類: 1. mutex (ミューテックス ロック)、常に 1 つのスレッドだけがオブジェクトにアクセスできるようにするために使用されます; 2. rwlock (読み取り/書き込みロック)、読み取りロックと書き込みロックに分割されます。 lock (データの読み取り頻度がデータの書き込み頻度よりはるかに高い状況に適しています)、3. スピンロック (スピン ロック)、常に 1 つのスレッドのみがオブジェクトにアクセスできます、4. seqlock (シーケンシャル ロック)、読み出しと書き込みが区別でき、読み出しが多く書き込みが少なく、読み出しよりも書き込みの優先順位が高い場合に使用されます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
Linux のいくつかのロック メカニズム
ミューテックス ロック: mutex
ミューテックス ロック: ミューテックス、いつでも確実にロックされるようにするために使用されます。 、オブジェクトにアクセスできるスレッドは 1 つだけです。ロックの取得操作が失敗すると、スレッドはスリープ状態になり、ロックが解放されるのを待つときに目覚めます。
読み取り/書き込みロック: rwlock
読み取り/書き込みロック: rwlock、読み取りロックと書き込みロックに分かれています。読み取り操作中、複数のスレッドが同時に読み取り操作を取得できるようにすることができます。ただし、同時に書き込みロックを取得できるスレッドは 1 つだけです。書き込みロックの取得に失敗した他のスレッドは、書き込みロックが解放されて目覚めるまでスリープ状態になります。
注: 書き込みロックは、他の読み取りおよび書き込みロックをブロックします。スレッドが書き込みロックを取得して書き込みを行っている場合、他のスレッドは読み取りロックを取得できません。ライターはリーダーよりも優先されます (ライターが存在すると、後続のリーダーは待機する必要があり、ウェイクアップ時にライターが優先されます)。
- データの読み取り頻度がデータの書き込み頻度よりもはるかに高い状況に適しています。
スピン ロック:スピンロック
スピン ロック:スピンロック。オブジェクトにアクセスできるのは、一度に 1 つのスレッドだけです。ただし、ロックの取得操作が失敗すると、スリープ状態にならず、ロックが解放されるまでその場でスピンします。これにより、スリープ状態からウェイクアップまでのスレッドの消費が節約され、ロック時間が短い環境での効率が大幅に向上します。ただし、ロック時間が長すぎると、大量の CPU リソースが浪費されます。
RCU
RCU: 読み取り、コピー、更新。データを変更する場合は、まずデータを読み取り、次にコピーを生成し、そのコピーを変更する必要があります。修正が完了したら、古いデータを新しいデータに更新します。
RCU を使用する場合、リーダーは同期オーバーヘッドをほとんど必要とせず、ロックを取得したり、アトミック命令を使用したりする必要がないため、ロックの競合が発生しないため、デッドロックの問題を考慮する必要がありません。ライターの同期オーバーヘッドは比較的大きく、変更されたデータをコピーする必要があり、ロック メカニズムを使用して他のライターの変更操作を同期および並列化する必要があります。これは、読み取り操作が多数で書き込み操作が少ない場合に非常に効率的です。
セマフォ: セマフォ
Linux カーネルのセマフォは、概念および原理においてユーザー モード SystemV の IPC メカニズム セマフォと同じですが、カーネルの外部では決して使用できないため、SystemV の IPC メカニズムのセマフォとは何の関係もありません。
セマフォは作成時に初期値を設定する必要があります。これは、複数のタスクがセマフォによって保護された共有リソースに同時にアクセスできることを意味します。初期値 1 はミューテックス (Mutex) になります。つまり、同時に 1 つのタスクだけがセマフォによって保護された共有リソースにアクセスできます。タスクが共有リソースにアクセスしたい場合は、まずセマフォを取得する必要があります。セマフォを取得する操作により、セマフォの値が 1 ずつ減ります。セマフォの現在の値が負の数である場合、セマフォが有効であることを示します。セマフォの待機キューは、セマフォが使用可能になるのを待ちます。セマフォの現在の値が負でない数値であれば、それはセマフォを取得できることを意味します。そのため、セマフォによって保護されている共有リソースにすぐにアクセスできます。タスクは、セマフォによって保護されている共有リソースへのアクセスを完了したら、セマフォを解放する必要があります。セマフォの解放は、セマフォの値に 1 を加算することで実現されます。セマフォの値が正以外の数値の場合、セマフォはセマフォを解放します。は、現在のセマフォを待機しているタスクがあることを示すため、セマフォを待機しているすべてのタスクも起動します。
rw_semaphore (読み取りおよび書き込みセマフォ)
読み取りおよび書き込みセマフォは、訪問者 (読み取りまたは書き込み) を細分化します。読み取りおよび書き込みセマフォは、読み取りおよび書き込みセマフォを維持しながら、読み取りおよび書き込みセマフォによって保護された共有リソースの読み取りおよびアクセスのみ可能です。書き込む必要があるため、ライターとして分類する必要があります。共有リソースにアクセスする前にライター ステータスを取得する必要があります。書き込みアクセスが必要ないと判断した場合、ライターはリーダーにダウングレードできます。読み取り/書き込みセマフォが同時に持つことができるリーダーの数に制限はありません。つまり、任意の数のリーダーが同時に読み取り/書き込みセマフォを所有できることになります。読み書きセマフォが現在ライターによって所有されておらず、リーダーがセマフォを解放するのを待っているライターがいない場合、どのリーダーも読み書きセマフォを正常に取得できます。そうでない場合、リーダーはライターがセマフォを解放するまで一時停止する必要があります。セマフォ。読み書きセマフォが現在リーダーまたはライターによって所有されておらず、セマフォを待っているライターがいない場合、ライターは読み書きセマフォを正常に取得できます。そうでない場合、ライターは訪問者がいなくなるまで一時停止されます。 。したがって、作家は排他的で排他的です。
読み取りセマフォと書き込みセマフォには 2 つの実装があります。1 つはユニバーサルであり、ハードウェア アーキテクチャに依存しません。したがって、新しいアーキテクチャを追加しても再実装する必要はありません。ただし、パフォーマンスが低く、実装が難しいという欠点があります。読み取りおよび書き込みセマフォの取得と解放。オーバーヘッドが高い。もう 1 つはアーキテクチャ関連であるため、パフォーマンスが高く、読み取りおよび書き込みセマフォの取得と解放のオーバーヘッドは小さいですが、新しいアーキテクチャを追加するには再実装が必要です。カーネルの構成中に、オプションを使用して、どの実装を使用するかを制御できます。
読み取りおよび書き込みセマフォ: rw_semaphore
読み取りおよび書き込みセマフォは、リーダーまたはライターのいずれかの訪問者を細分化します。リーダーは、セマフォ期間中のみ読み取りと書き込みを維持します。読み取り/書き込みセマフォによって保護された共有リソースは、読み取りとアクセスが可能です。タスクが読み取りに加えて書き込みも必要な場合、そのタスクは書き込みタスクとして分類され、共有リソースにアクセスする前に、まず共有リソースにアクセスする必要があります。ライターのステータスを取得すると、書き込みアクセスが必要なくなった場合、ライターはリーダーにダウングレードできます。読み取り/書き込みセマフォが同時に持つことができるリーダーの数に制限はありません。つまり、任意の数のリーダーが同時に読み取り/書き込みセマフォを所有できることになります。読み書きセマフォが現在ライターによって所有されておらず、リーダーがセマフォを解放するのを待っているライターがいない場合、どのリーダーも読み書きセマフォを正常に取得できます。そうでない場合、リーダーはライターがセマフォを解放するまで一時停止する必要があります。セマフォ。読み書きセマフォが現在リーダーまたはライターによって所有されておらず、セマフォを待っているライターがいない場合、ライターは読み書きセマフォを正常に取得できます。そうでない場合、ライターは訪問者がいなくなるまで一時停止されます。 。したがって、作家は排他的で排他的です。
読み取りセマフォと書き込みセマフォには 2 つの実装があります。1 つはユニバーサルであり、ハードウェア アーキテクチャに依存しません。したがって、新しいアーキテクチャを追加しても再実装する必要はありませんが、パフォーマンスが低く、取得が難しいという欠点があります。セマフォのオーバーヘッドが高い、もう 1 つはアーキテクチャ関連であるためパフォーマンスが高く、読み取りおよび書き込みセマフォの取得と解放のオーバーヘッドは小さいですが、新しいアーキテクチャを追加する場合は再実装が必要です。カーネルの構成中に、オプションを使用して、どの実装を使用するかを制御できます。
seqlock**** (シーケンシャルロック)
は、読み取りと書き込みが区別でき、読み取り操作が多く書き込み操作が少ない状況で使用されます。読み取り操作よりも優先されます。 seqlock の実装のアイデアは、シーケンスを表すために増加する整数を使用することです。書き込み操作がクリティカル セクションに入ると、シーケンスは になり、クリティカル セクションから出ると、シーケンスは再び になります。
書き込み操作もロック (ミューテックスなど) を取得する必要があります。このロックは、同時に進行中の書き込み操作が 1 つだけであることを保証するために、書き込み-書き込みミューテックスにのみ使用されます。シーケンスが奇数の場合は書き込み動作中であることを意味しますが、このときリード動作はシーケンスが偶数になるまでクリティカルセクションに入るまで待つ必要があります。読み取り操作がクリティカル セクションに入ると、現在のシーケンスの値を記録する必要があります。クリティカル セクションから出ると、記録されたシーケンスと現在のシーケンスを比較します。それらが等しくない場合は、書き込み操作が発生したことを意味します読み取り操作がクリティカル セクションに入ったとき、読み取り操作は無効であるため、戻って再試行する必要があります。
Seqlock の書き込みは相互に排他的である必要があります。ただし、seqlock の適用シナリオ自体は、読み取りが多く書き込みが少なく、書き込み競合が発生する可能性は非常に低い状況です。したがって、ここでの書き込み-書き込みミューテックスでは基本的にパフォーマンスの低下はありません。読み取り操作と書き込み操作は相互に排他的である必要はありません。 seqlock の適用シナリオは、書き込み操作が読み取り操作より優先されるというもので、書き込み操作の場合は (書き込みと書き込みの競合などの小さな確率のイベントが発生しない限り) ブロッキングはほとんどなく、シーケンスの追加アクションのみが必要です。読み取り操作をブロックする必要はありませんが、読み取りと書き込みの競合が見つかった場合は再試行が必要です。 seqlock の典型的な用途はクロックの更新です。システム内で 1 ミリ秒ごとにクロック割り込みが発生し、対応する割り込みハンドラーがクロックを更新します (書き込み操作)。
ユーザー プログラムは、gettimeofday などのシステム コールを呼び出して、現在時刻を取得できます (読み取り操作)。この場合、seqlock を使用すると、多くの gettimeofday システム コールが割り込みハンドラーをブロックするのを防ぐことができます (これは、seqlock の代わりに読み取り/書き込みロックが使用されている場合に当てはまります)。常に割り込みハンドラが優先され、gettimeofday システムコールが割り込みハンドラと競合した場合、ユーザプログラムが待っても問題ありません。
ミューテックス ロックと読み取り/書き込みロックの違い:
1) 読み取り/書き込みロックはリーダーとライターを区別しますが、ミューテックス ロックは区別しません
2) ミューテックス ロックは次のことのみを行うことができます。読み取りまたは書き込みに関係なく、1 つのスレッドがオブジェクトにアクセスできます。読み取り/書き込みロックでは、同時に 1 つの書き込み者のみが許可されますが、複数の読み取り者が同時にオブジェクトを読み取ることができます。
関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinux ロックにはどのような種類がありますか?の詳細内容です。詳細については、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

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

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

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