C LANGUAGE TECHNOLOGY

【C言語】Linuxにおける資源アクセスプロトコルPIPの実装

2022年11月21日

悩んでいる人
悩んでいる人

C言語でLinuxにおける資源アクセスプロトコルPIPの実装を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOS(Linuxカーネル)の授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
  • プログラミング歴15年以上,習得している言語: C/C++PythonSolidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Verse(UEFN), Assembler (x64,aarch64).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開
  • 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
  • 最近は自然言語処理AIイーサリアムに関する有益な情報発信や,Unreal Editor for Fortnite(UEFN)でゲーム開発に従事.
    • (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でChatGPT/Geminiを訓練するプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
    • (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
    • UEFNで10本以上のゲームを開発し,フォートナイト上で公開(FortniteFortnite.GG).

こういった私から学べます.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

【C言語】Linuxにおける資源アクセスプロトコルPIPの実装

C言語でLinuxにおける資源アクセスプロトコルPIPの実装を紹介します.

本記事は以下の記事を理解していることを前提としています.

C言語 Linux RMとEDF
【C言語】LinuxにおけるリアルタイムスケジューリングRMとEDFの実装

こういった悩みにお答えします. こういった私から学べます. C言語でLinuxにおけるリアルタイムスケジューリングRMとEDFの実装 C言語でLinuxにおけるリアルタイムスケジューリングRMとEDF ...

続きを見る

第28回リアルタイムシステム
【第28回】元東大教員から学ぶリアルタイムシステム「資源アクセスプロトコル」

こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. リアルタイムシステムの記事一覧はこちらからどうぞ. 資源アクセスプロトコルの紹介 資源とはプロセスが実行を進めるために利用できるソ ...

続きを見る

第30回リアルタイムシステム
【第30回】元東大教員から学ぶリアルタイムシステム「Priority Inheritance Protocol」

こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. リアルタイムシステムの記事一覧はこちらからどうぞ. Priority Inheritance Protocol(PIP) Prio ...

続きを見る

第33回リアルタイムシステム
【第33回】元東大教員から学ぶリアルタイムシステム「資源アクセスプロトコルのスケジュール可能性解析とまとめ」

こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. リアルタイムシステムの記事一覧はこちらからどうぞ. 資源アクセスプロトコルのスケジュール可能性解析 ここでは,共有資源の存在下で周 ...

続きを見る

本記事で利用するタスクセット(タスク数は3)における各々のタスクの動作は以下になります.

タスク1とタスク3のクリティカルセクションは共通しています.

  • タスク1:2秒スリープ,1秒実行,クリティカルセクションに進入,1秒実行,クリティカルセクションから退出,1秒実行
  • タスク2:4秒スリープ,1秒実行
  • タスク3:1秒実行,クリティカルセクションに進入,3秒実行,クリティカルセクションから退出,1秒実行

異なる優先度の3スレッドを実行

異なる優先度の3スレッドを実行するコードは以下になります.

example of priority inversion

実行結果は以下になります.

上図の通り,タスクが3->1->3->2->3->1->3の順番で実行することを確認しましょう!

【第28回】元東大教員から学ぶリアルタイムシステム「資源アクセスプロトコル」で述べた通り,優先度逆転が発生していることがわかります.

異なる優先度の3スレッドをPIPで実行

異なる優先度の3スレッドをPIPで実行するコードは以下になります.

優先度逆転が発生するコードとの違いは,main関数でpthread_mutexattr_setprotocol関数を呼び出して優先度継承を設定していることです.

つまり,PIPは透過的なプロトコルなので,タスクのコード(func関数)を変更せずに実装することができます.

Example of PIP

実行結果は以下になります.

上図の通り,タスクが3->1->3->1->2->3の順番で実行することを確認しましょう!

【第30回】元東大教員から学ぶリアルタイムシステム「Priority Inheritance Protocol」で述べた通り,優先度逆転をPIPで解決できていることがわかります.

まとめ

C言語でLinuxにおける資源アクセスプロトコルPIPの実装を紹介しました.

具体的には,優先度逆転が発生するコードとPIPで解決するコードを解説しました.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , ,