---
# System prepended metadata

title: '卒研経過報告 #5'

---

# 卒研経過報告 #5
Rustによる組み込みプログラミング
マイコンWio terminalを用いたRustとC言語の信頼性，安全性の比較検証、考察

[先週のメモ](https://hackmd.io/@Fteam/B14blcL4Y)
[子安卒論](https://ja.overleaf.com/project/613aadc9c3a8ceec0e18338b)

## 研究の目的
この研究ではこれまで主に組込みソフトウエア開発に使われてきたC/C++と
それに替わる有効な選択肢として、注目されているRust言語との
信頼性や安全性など様々な面から比較検証を行う。

## memo
Rustで共有参照を実現するふた通りの方法（借用と参照カウントrc,arc）を理解すること、共有参照時には書き込みを禁止する理由を理解するために読み手書き手の問題を理解すること

## 検証
### 並列処理について
各言語において並列処理を行うことは性能と信頼性において重要。
マルチタスクを行うにはこの「生産者消費者問題」が大きくかかわってくる。

生産者消費者問題：
複数のプロセスが共通の領域にレコードを書き込み、書き込まれたレコードを複数のプロセスが読みだすというモデル

生産者消費者問題では、生産者と消費者が互いに共有のバッファを使用する
生産者が情報をバッファに入れる（書き込み）⇔消費者がそれを取り出す（読み込み）

・生産者はバッファがいっぱいになっている場合スリープ状態になり、バッファに空きが出ると生産者は再び動きだす。
・消費者はバッファが空である場合スリープ状態になり、バッファに情報が入った時再び動き出す

競合状態：
2つ以上のプロセスが同時に共有データにアクセスし読み書きを行う状態で、実行結果は各スレッドでの実行順序に左右される為まれに予期せぬ動作が起き、バグを誘発することがある。
➡そこで複数のプロセスが同時に読み書きできないようにする必要がある（排他制御）

### 【まとめ】共有参照時に書込みを許可しないのはなぜか
![](https://i.imgur.com/gfwoCnQ.png =300x)
pythonの場合、複数のポインタから一つのオブジェクトを参照することがある。rustではこのような競合状態を防ぐために所有権を貸し出した相手には書き込みの権利を与えない。

![](https://i.imgur.com/VyyNYHj.png =300x)
データ領域は各プロセスがアクセスし、レコードを取り出したり書き込んだりする共用領域であるので操作は排他的に行う必要がある。

## 参考文献
[1] オペレーティングシステムの基礎