Posts

Showing posts from May, 2018

OCW「データベース」(上智大学)

大学の公開している日本語の講義はいろいろあるのだが、内容が一部だけではなく役に立つものと言うと、あまりないように思える。 また、そのような講義がまとめられている物も見つけられない。 上智大学理工学部「データベース」は、 データベースとSQLについて全く知らなかった時期に、SQL ゼロからはじめるデータベース操作を 読むのと同時に視聴して大変役に立った。

スウェーデンとElsevier

Sweden ends contract with science publisher Elsevier, moving for open access for scientific articlesによると、 2018年6月30日から、スウェーデンの研究者は、Elsevierの学術雑誌に投稿したり、論文を閲覧したりできなくなるらしい。 商業的な学術雑誌ももう少しリーズナブルな価格になって欲しい。 オープンアクセスであれば、確かに私は助かるが、継続性があるのか良く分からないので。

Windowsマシンのuptimeを知る方法

どうやら、uptime(1)コマンドにそっくりなものは、Windowsの標準機能にははないようだ。 その代わり、以下のようにすると、起動時刻を知ることができる。 > net statistics server \\client1 のサーバー統計情報 統計情報の開始日時 2018/05/15 6:43:10 受け付けたセッション 1 タイムアウトしたセッション 0 エラーが発生したセッション 0 送信バイト数 (KB) 0 受信バイト数 (KB) 0 平均応答時間 (ミリ秒) 0 システム エラー 0 アクセス許可違反 0 パスワード違反 0 アクセスしたファイル 0 アクセスした COM デバイス 0 スプールした印刷ジョブ 0 バッファーのオーバーフロー回数 ビッグ バッファー 0 リクエスト バッファー 0 コマンドは正常に終了しました。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#7

セマフォ

前節の排他制御の方式は、現実のシステムには適用しにくい。また適用するにしてもビジーウェイティングを使っているので、ごく短いクリティカルセクションへの利用に限定されるべきである。

より一般的な排他制御として、セマフォを導入する。

セマフォはプロセス間通信の伝達に使われる整数型の変数である。

セマフォは、0と1以外の値も取ることができ、より多くの情報を伝達できる。

セマフォは一般に、イベント変数と呼ばれるプロセス間の共通変数の一種である。

セマフォの変数へのアクセスも排他制御が必要である。

プロセス間で伝達されるイベントには以下が含まれる。
(1) プロセスがクリティカルセクションに入った。
(2) プロセスがクリティカルセクションから出た。
(3) 新しいプロセスが始まった。
(4) 入出力操作が始まった。
(5) 入出力操作が完了した。
(6) メッセージを受け取った。
(7) リソースを受け取った。
(8) リソースを開放した。

イベント変数は、
(1) イベントの履歴を記録するデータ構造(整数型の変数)。
(2) イベント変数の待ち条件が満たされるのを待っているプロセスの待ち行列。
からなる。

セマフォにはP命令(wait命令)とV命令(signal命令)が定義される。

P命令は、引数SについてS≧1が満たされるまでプロセスを一時停止させるのが役割である。もし、S≧が満たされていればSを1減らしてプロセスは継続する。

V命令は、引数Sのセマフォの待ち行列で待っているプロセスの中から1つが選ばれ、実行可能状態に移行させる。ディスパッチャーは実行可能プロセスから1つを選び実行する。もし、Sのセマフォの待ち行列が空であった場合には、Sは1増加させられVを実行したプロセスは続行される。

P命令とV命令は、セマフォを提唱したダイクストラの母語であるオランダ後のPasseren(パスを許す)とVerhoog(起こす)に由来する。

P命令とV命令はそれぞれ分割不可能でなくてはならない。つまり、ひとときにはある1つのセマフォに対して、1つのPまたはVしか実行できない。

P、V、ディスパッチャーは、いずれも共通データである待ち行列を操作するので、排他制御を必要とする。

pkgsrc/www/firefoxがNetBSDではすぐにクラッシュする件について

multiprocess windowの有効なpkgsrc/www/firefoxがすぐにクラッシュのは、 そださんの報告されている PR 53273 が原因とのこと。 Chromiumも同じような問題があったように思うので、どうにかして直して欲しい。 browser.tabs.remote.autostartを無効化しておけば(falseにしておけば)、multiprocess windowは無効にできる。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#6

並列プロセス

プロセスがCPUディスパッチャーにより同時実行されると、互いに作用し干渉し合う。例えば主記憶やI/Oを取り合うかもしれないし、同一のファイルに同時に書き込もうとするかもしれない。

相互作用や干渉は、意図的/偶発的、協調的/競合的に起こり得る。

プロセス間の相互干渉は、正しい制御化におかないと好ましくない状況を招く。

プロセス間の相互干渉は、
* プロセス間通信
* プロセス同期
* プロセス統合
などとして研究されている。

プロセス間の相互交渉は3種に分類できる。
(1) 協調
    複数のプロセスが相互に情報交換を行いながら、共通の目的のために処理を進める。
(2) 競合
    リソースを取り合うといったように互いに他のプロセスの存在を意識しなくてはいけないが、自分の処理のためには他のプロセスは不要な場合。
(3) 干渉
    相手のプロセスの中断など、はっきりと他のプロセスに影響を与える場合。

例えば、整合性を保ってクリティカルセクションまたはクリティカルリージョンは、分割不可能にする必要がある。

クリティカルセクションは混合して実行されることがないようにする。これにより、共通変数の読み書きは1つのプロセスしか実行できないようになる。

共通変数へのアクセスを同時に1つのプロセスに限ることを排他制御または相互排除と言う。

2つのプロセスがメッセージをやりとりする機構を、メッセージ転送またはメッセージ交換と言う。

タイムシェアリングシステムでもマルチプログラミングシステムでも、他のプロセスを一時停止させる必要が生じることがある。例えばメモリーコンパクション(主記憶内の小さな空き領域を大きな空き領域にするために、主記憶内でプログラムを動かすこと)や、スワップアウトする場合である。

排他制御はプロセスの競合を正しく行うのに必要であり、次の3つの要求を満たさなくてはならない。
(1) クリティカルセクションを実行しているプロセスが1つもない時、クリティカルセクションに入る要求をしたプロセスは、ただちに許可を与えられなければならない。
(2) 2つ以上のプロセスがクリティカルセクションに入ろうと争っているR時、その選択は無期限に延期されてはならない(デッドロック防止)。
(3) いかなるプロセスも、あるプロセスがそのクリティカルセクションに入るのを無期…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#5

CPUスケジューリングとオペレーティングシステム

CPUスケジューリングは、ハードウェアに一番近いレベルの仮想化である。

CPUスケジューリングより上のレベルでは、CPUを獲得したり開放したりといったことを考慮する必要はなく、各プロセスが仮想CPUを独占しているように振る舞うと考えて良い。

CPUスケジューリングはショートタームスケジューリングとも呼ばれる。

コンピューターシステムは、循環型待ち行列システムとみなせる。

ロングタームスケジューリングは、ジョブの起動やスワッピングを行い、どのジョブが主記憶に入るのを許されるか、つまり、循環型待ち行列システムでショートタームスケジューリングによりCPUを割り当てられるようになるかを決める。

ミディアムタームスケジューリングは、ページングのレベルのもので、ページフォルトを生じたジョブは、循環型待ち行列システムのI/O待ち行列に入れられる。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#4

スケジューリング方式

基本的なスケジューリング方式
(1) 到着順(FCFS))
(2) 処理時間順(SPT)、残っている処理時間の短い順(SRPT)
(3) 優先度順
(4) アラウンドロビン
(5) フィードバック待ち行列(フォアグラウンド・バックグラウンド待ち行列)(FB)

プロセスとジョブを基本的に同一視する。

性能評価基準
(1) 応答時間
    タイムシェアリングシステムや対話型システムではレスポンスタイムと言い、バッチシステムではターンアラウンドタイムと呼ぶ。
(2) スループット
    単位時間に処理するジョブの数で、CPUなどのデバイスの利用効率に比例する。


ラウンドロビン方式では、かかる時間の短いジョブが優先されることとなる。

SRPT方式はSPT方式の変形である。

SPT・SRPT方式は、平均応答時間を最小にする。

スケジューリング方式によって、応答時間は大きな影響を受ける。

一般に、応答時間を短くするという要求と、利用効率を改善するという要求は相反する。

自分でスケジューリングをやってみた。
同一のスケジューリング方式の下では、応答時間と利用効率は、ほぼ反比例の関係にある(単一サーバーシステムでも、マルチサーバーシステムでも)

単一サーバーシステムとは、CPUやI/Oなどの能動的な入出力機器が1個のシステムを言う。

マルチサーバーシステムとは、複数個のサーバーを持つシステムを言う。

マルチサーバーシステムでは、サーバー間で干渉が起こる(1つのサーバーにジョブが集中してしまい、他のサーバーが遊んでしまう)ことにより、無駄な待ち時間が生じてしまう。この待ち時間をスケジューリング方式によって減少させられれば、応答時間の減少と利用効率の向上を同時に実現できる。

マルチプログラミングの主要な目的は、リソース利用の向上またはジョブのスループットの増加である。

一般に、マルチプログラミングは利用効率(ジョブのスループットと比例する)を最大にすることを目的とする。

一般にタイムシェアリングシステムは応答時間を最小にすることを目的としている。

利用効率と応答時間以外の性能評価基準
(1) 予測性
    平均としては短いがばらつきの大きな応答時間より、安定した応答時間が好まれることもある。
(2) 公平性
    あるジョブが無期限に塩基されるのは不公平で…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#3

CPUスケジューリング

プロセスは、
(1) 実行中
(2) 実行可能
(3) 待ち状態
のいずれかの状態になっている。

CPUスケジューラー = ディスパッチャーである。

あるプロセスに割り当てられた時間をクオンタムと言い、クオンタムが終了すると、実行中から実行可能状態に移行させられる。

クオンタムは、タイムクオンタム、タイムスライス、量子時間とも言う。

待ち状態は、ある条件(I/Oや他のリソースが空くのを待つなど)が成立していないといけない時にとる状態を指す。

実行可能状態から待ち状態への移行は、プロセス自身によってなされる。

待ち状態から実行可能状態へは、他のプロセスからのSIGNAL命令によって移行させられる。

SIGNAL命令とは、他のプロセスを起動させる(実行可能状態にする)命令である。

プロセスは3つの状態それぞれのキューに入っている。

プロセッサーの数に依らず、この考えは適用できる。

CPUをあるプロセスから別のプロセスに切り替える方式は2つある。
(1) イベントドリブン
(2) タイムスライシング

イベントドリブンとは、システムの状態が変化したのを、割り込み機構により切り替える方式である。

割り込みで割り込まれたプロセスは、割り込まれたことを感知しない。

タイムスライシングは、時分割とも言う。

タイムスライシングでは、システムの状態変化とは無関係にプロセスを切り替える。

タイムシェアリングシステムの実現には、タイムスライシングが必要である。

タイムスライシングでは、インターバルタイマーにより、ウオンタムが終わったら割り込みを発生させる。

マルチプログラミングシステムの性能を向上させるためには、イベントドリブンにタイムスライシングを組み合わせることが効果的である。

マルチプログラミングは、イベントドリブンのみで実現できる。

マルチプログラミングにタイムスライシングを導入すると、性能が向上する。

タイムシェアリングシステムにイベントドリブンを導入すると、リソース利用効率を向上できる。

各プロセスは見た目上はCPUを独占しているようであり、このようなCPUを仮想CPUと呼ぶ。

仮想CPUは、実際のCPUよりも実行速度は遅いが、独自のレジスターを持ち全ての命令を実行できるCPUととらえて良い。

システムコールは、I/Oを要求する等のために呼ばれるもので、スーパーバイザーコール(SVC)によって行われる。

スーパー…

岩波講座 ソフトウエア科学6「オペレーティングシステム」#2

第1章 オペレーティングシステムとは コンピューターの分類をしている箇所があり、その中の一つとして「実時間処理用コンピューター」と言うのが挙げられている。 今の状況で考えると組み込み用のコンピューターのことを指していておかしくないのだが、なんとなく、ここでは違うものを指している ような気がする。しかしプロセス制御用コンピューター(process computer)と言うのも別に挙げられているため、 これとは違うと考えると、やはり組み込み用途のものを指していると考えるべきかもしれない。 バッチ処理、オンライン処理(リアルタイム処理とも言うと書かれている)、タイムシェアリング処理、分散処理というように、 ジョブの処理形態を分類してる箇所がある。 そこで、オンライン処理では「保安性」に細心の注意を払う必要があると書かれている。 保安性という用語は、少なくとも現在では一般的な用語ではないように思われる。 システムの運営に、信頼性と並んで必要なものとして挙げられているため、可用性を指しているのかもしれない。 「プロセス」の定義を「ユーザーの代理」として、これが現代のオペレーティングシステムを考える上では最も適切であるとしている。 「実行中のプログラム」と言う定義は、歴史の初期のものとされている。 プロセスを「ユーザーの代理」とする定義が現在主流であるような気がしないのだが、この書籍ではこのような定義であることをきちんと覚えておきたい。 ちなみに「オペレーティングシステムの基礎」大久保 英嗣 著(1997年刊)という書籍が手元にあるが、プロセスは「特定の仕事を遂行するために一連の操作系列を実行する活動のこと」としている。 オペレーティングシステムの定義として「ハードウェア資源であるCPU、主記憶、二次記憶、入出力機器をユーザーが必要とするだけ仮想的に作り出し、 しかも場合によってはそれをハードウェアそのものよりも使いやすい形で提供する」ものとしている。 そして、これを「仮想化」と呼びこととしている。この書籍はこの仮想化について述べているとしている。

岩波講座 ソフトウエア科学6「オペレーティングシステム」#1

最初にコンピューターを使ったのはFujitsu Micro 8 (FM-8)だった気がする。 F-BASICしか使わなかった。 次にはエプソンQC-10IIというCP/Mか何かが動くマシンを使った記憶もある。 私が最初にOSとして独立したものを使ったのは、このCP/M風のものだったのだろう。
あれから30年以上、コンピューターとオペレーティングシステムを使っている訳だが、 コンピューターについても、オペレーティングシステムについても、 良く理解しているとは言えないように感じている。 コンピューターサイエンスについてもちゃんと体系的に学ぶ機会はなかった。 だが、オペレーティングシステムについて、学びたいとは長く思っていた。
今、手元に「岩波講座 ソフトウエア科学6『オペレーティングシステム』前川 守 著」と言う 35mmほどの厚さの書籍がある。 これの全てを理解することを目標に、読んでいきたい。

「まえがき」について 一般のユーザーの言うオペレーティングシステムは、以下ようなものが含まれているらしい。
ユーザーインターフェイスウィンドウシステムネットワーク機能リアルタイムシステム機能エディター文書処理機能コンパイラー
ここで、分からないのは「リアルタイムシステム機能」である。 「エディター」と「文書処理機能」は、UNIXを意識したものであろう。 UNIXにはedやviといったエディターがあるし、 文書処理ソフトウエアであるroffはUNIX V7にも含まれていたはずである。
リアルタイムと言うと、最近の文脈で言えば、リアルタイムオペレーティングシステムというのがある。FreeRTOSやRTEMS、eCosなどである。 思い出すと、UNIXにもUNIX-RTやUNIX-RTRというのがあったので、それを意識してのことかもしれない。
だが、少なくとも現在では、RT-LinuxやINTimeなどはあるものの、汎用オペレーティングシステムにリアルタイムオペレーティングシステムの機能は含まれないと言って良いように思う。INTimeは使われている製品を使ったことはあるが、Windowsとどう統合されているか分かっていないので、的外れかもしれないが。
一方で、NetBSDでもlibrt (POSIX Real-time Library)というのはあって、 s…