マエカワの備忘録的な何か

思い立ったが吉日

オペレーティングシステム 其の九 20170621

相互排除についてもう少し詳しく

ロックの見直し

 ロックは①ロックされているかの確認、②ロックをかけるための値を書く.この二つをアトミックに処理する必要がある.
 ビジーループをかけるスピンロックについてもやったが、これだと長い処理の時CPUの無駄遣いになってしまう.
 そこで出てくるのが次のアイデア

ブロッキングロック

 システムコールによってブロック、起床をOSに依頼する方法
  →ブロックするのでその分CPUが節約できる.ただ、コンテキストスイッチが必要になってくる.

 sys_wait:signalが呼ばれるまでブロック
 sys_signal:ブロックしているスレッドを起床させる

 この命令をtest_and_set命令と組み合わせてロックを実現することができる.

続きを読む

オペレーティングシステム 其の八 20170614

並行プログラミング

並行でないプログラミングのことを逐次プログラミングという.
 →処理の流れが一つしかない.通常のプログラミング言語はこっちのほうを想定している.

並行にして何がいいのか

 ・ブロック状態にあるプロセスを別の処理の流れで出来たらうれしい.
 ・I/O-boundプロセスの待ち時間を有効に使いたい.
 ・マルチコアの性能を活かしたい.

並行にすることにより

 ・プロセスは自分勝手に動く.
  →競合してしまうことがある.
   →相互排除により、プロセス、スレッドの足並みをそろえる機能を付与したい
 ・実行順序が無数にある.
  →ここで別のスレッドが来たらバグになるかななんてことを考えながら描く必要がある.
 ・スレッド間で資源を共有している.
  →別スレッドが共有資源の内容を書き換えてしまうことがある.

続きを読む