タスク間共有リソース保護の概要とデッドロックの再議論
タスク - タスク間の共有リソースを保護する方法の概要
概要
この章では、デバイスのハードウェアおよびソフトウェア リソースが限られているため、デバイスの各リソースを最大限に活用するために、異なるタスクが同じ共有リソースに対して読み取りおよび書き込みアクセスを行う可能性があり、それによって精度が損なわれる可能性があることを学びました。共有リソースの整合性。グローバル変数に 1 を加算する操作と 1 を減算する操作を 10 回実行する 2 つの別個のタスクなど、いくつかの例を考え出しましたが、グローバル変数の値は最終的に 0 になりますか? 別の例として、1 時間の速度の問題は、時間を表す構造に現れる可能性があります。
共有リソース: 2 つ以上の並行プログラム (タスクや割り込みを含む) で同時に使用できるグローバル変数、ペリフェラル、メモリ ブロックなどを共有リソースと呼びます。
共有リソースを確保するための中核は、タイムシェアリング排他的であり、実装方法は 2 つあります。
1)ロック・アンロック機構。つまり、プログラムの実行中、ロックされたリソースは特定のタスクによって完全に管理され、ロックがアンロックされない限り、他のスレッドは共有リソースにアクセスできません。このようなメカニズムには、クリティカル セクション、オフスケジュール、セマフォ、ミューテックスなどのメソッドが含まれます。
2)リクエスト実行メカニズム。つまり、リソースへのアクセス権は別のタスクによって所有され、他のタスクはタスクへのリクエストを開始することによって間接的にのみリソースを使用できます。このメカニズムは主にガーディアン タスクの実装です。
FreeRTOS は、共有リソースの保護を実現するためのさまざまな機能を提供しますが、最良の保護方法は、アプリケーションを慎重に設計し、適切な相互排他戦略を選択し、共有リソースを削減することです。