オペレーティングシステム 其の九 20170621
相互排除についてもう少し詳しく
ロックの見直し
ロックは①ロックされているかの確認、②ロックをかけるための値を書く.この二つをアトミックに処理する必要がある.
ビジーループをかけるスピンロックについてもやったが、これだと長い処理の時CPUの無駄遣いになってしまう.
そこで出てくるのが次のアイデア.
ブロッキングロック
システムコールによってブロック、起床をOSに依頼する方法
→ブロックするのでその分CPUが節約できる.ただ、コンテキストスイッチが必要になってくる.
sys_wait:signalが呼ばれるまでブロック
sys_signal:ブロックしているスレッドを起床させる
この命令をtest_and_set命令と組み合わせてロックを実現することができる.
オペレーティングシステム 其の八 20170614
並行プログラミング
並行でないプログラミングのことを逐次プログラミングという.
→処理の流れが一つしかない.通常のプログラミング言語はこっちのほうを想定している.
並行にして何がいいのか
・ブロック状態にあるプロセスを別の処理の流れで出来たらうれしい.
・I/O-boundプロセスの待ち時間を有効に使いたい.
・マルチコアの性能を活かしたい.
並行にすることにより
・プロセスは自分勝手に動く.
→競合してしまうことがある.
→相互排除により、プロセス、スレッドの足並みをそろえる機能を付与したい.
・実行順序が無数にある.
→ここで別のスレッドが来たらバグになるかななんてことを考えながら描く必要がある.
・スレッド間で資源を共有している.
→別スレッドが共有資源の内容を書き換えてしまうことがある.