- 情報コース
- テレビ科目
- 葉田善章先生
- 難易度 ★★☆☆☆
- おすすめ度 ★★☆☆☆
前半ではハードウェア周りからコンピュータの動作とは何なのかを攻めていく。後半はOSを中心とした話題。先生はハード専門なのか、ハードウェアの方が突っ込んだ話が多い。全体的に情報量は多め。ひたすら先生が一人でしゃべっていて、インタビューなどはなし。印刷教材で十分かもしれない。
第1回
葉田先生一人での講義。OSの話らしい。
いろんなコンピュータがあるよねって話から。基本的な機能を提供するのがOS。
10回でハードウェアの話。5回でOSの話。結構知ってる話も多いので知らない話だけ書いていこう。
OSはプログラムとハードウェアの管理を両方行う。プログラムについてはタスク管理をしてマルチタスクを実現する。OSがハードウェアを管理するので、プログラム側からはハードウェアの違いを意識しなくてよい。
ハードウェアの話。同一コアのCPUのことをホモジーニアスというらしい。異なるコアだとヘテロジーニアス。CPUは命令セット空間(命令の集合)を持ち、ヘテロジーニアス型だと命令セット空間が異なる。なので別々のプログラムが必要になる。
レジスタには汎用レジスタと制御レジスタがある。制御レジスタにはプログラムカウンタ、PSW(フラグを集めたもの)などから構成される。汎用レジスタはデータレジスタといい、算術論理演算回路(ALU)で使われる。
OSの重要な機能として抽象化がある。プログラムがCPUのことを意識しないようにする。1つのCPUをOSが仮想CPUに分割したりできる。実際は1つのCPUが並列処理をシミュレートしたような動作をする。入出力装置についても仮想メモリとメモリを同一に扱ったり、SSDやHDD、USBメモリを同一に扱うことができる。
第2回
演算装置について。
プロセッサは電子回路でできている。電子回路の例としてLEDが光る回路が出てきた。スイッチに電流が流れればLEDが消灯。スイッチに流れなければLEDが光る。これがNOT回路。実際は電圧の高低で表現する。コンピュータの01は電圧の高低で表している。高電圧を1、低電圧を0とするのが正論理で、逆は負論理。先生が見せてくれたNOT回路はICで実装されている。
クロック信号について。クロック信号はパルスで出力される。電圧の高低を速い周期で繰り返す。電子回路はこいつに同期して処理を行う。命令1つあたりのクロック数をCPIという。CPUの速さを測定するとき、クロック周波数ではあてにならないので、平均CPI(全命令のCPIの平均)で比較することが多い。プログラム実行時間は命令数 * 平均CPI / クロック周波数 となる。
クロック信号にはノイズが入る。このような場合でも動作するようにしきい値を設定する。しきい値と比べた高低を調べれば少々ノイズが入っていてもよくなる。
シングルコアとマルチコア。シングルコアだと書かれた順で処理が実行されるが、マルチコアだと、命令を並列処理できる。OSの管理機能と組み合わせて処理速度を上げていく。
プロセッサーの処理方式。データ処理と命令方式をそれぞれシングル、マルチにするかによってSISD, SIMD, MISD, MIMDがある(頭が追っつかない)。
命令セット空間について。だいたい基本的な機能はどの命令セットにもある。独自の命令を拡張命令セットという。
プロセッサのコアについて。ALUの例として、D型フリップフロップというICを考える。割と簡単な回路図で表現されている。電圧の高低を記憶できるので、01のどちらか、1ビットを表現できる。4bitを記録するなら、D型フリップフロップが4つ必要になる。読み出しでは4つの値を結合して解釈すればいい。このとき、4つのフリップフロップにクロック信号を同時に与えれば、4つの値を同時に解釈することができる。
レジスタが値を保持するにはどうするか。出力を入力に直接つなぐと、クロック信号が変わっても同じ値が保持される(なんのこっちゃ)。
演算を行うためには、出力→入力の間に回路を置く。例えばNOT回路を置けば、レジスタの値が更新される。保持回路(ただの線)とNOT回路をスイッチで切りかえれば、処理の切り替えと同義になる。スイッチも回路で実現できる(要復習)。
プログラムカウンタについて。プログラムの例が出てきた。プログラムカウンタには次の命令のアドレスが入っている。プログラムカウンタを変更するタイミングは、クロックの立ち上がりのタイミングと同じ。(駆け足でよくわからんかった)
第3回
CPUの処理について。
64bitと32bitでは命令セットが違うが、64bitCPUは32bitプロセスも実行できる。互換性があるという。
ASCIIコードは8bitである。データに何を対応付けるかはプログラムによって違う。データの基本単位のことをワードという。64bitOSならワード長64bitってわけ。データ長がワードを長える場合はどうするか。データをワード長で分割すればいい。64bitOSで32bitのデータを扱うと、32bit余るのでプロセッサの性能が完璧に使えるわけではない。
命令とオペランドについて。命令は命令部とオペランド(命令用のデータのこと。任意)。オペランド部のデータのことをイミディエイトデータともいう。
機械語を数値で表すと16進数2桁(命令部+オペランド)であるが、これを人間でもわかるように記述したのがニーモニック。ADD A, 6 のように書く。アセンブリ言語の単位である。もっと人間にわかりやすくしたのがプログラム言語。結局最終的には機械語にするんだけど。
命令実行について。命令フェッチ(読み込み)→デコード(命令解釈)→オペランドフェッチ→演算→書き込みという流れ。この一連の流れを命令サイクルという。一部の処理が省略されることもある。最初の二つをフェッチサイクル、残りの3つを実行サイクルともいう。フェッチサイクルはメモリからデータを持ってきて、命令デコーダーで解釈することに相当する。実行サイクルは、読みだしたデータをALUに投入してレジスターなどに書き込むことに相当する。
何やら概念的で具体的なイメージが全然わかないな。
命令が連続している場合、フェッチ、実行サイクルは別々の回路なので、並列して処理できる。先取制御、先回り制御という。細かく区切ればパイプライン処理になる。
命令にもいろいろ種類がある。転送命令、演算命令、算術演算。。。
最後にアーキテクチャの話。CISCは可変長命令、簡単な命令は短いなど最適化されている。RISCは命令が固定長。単純な命令が多く、パイプライン処理に向く。プログラムは大きくなる。
第4回
周辺機器との通信について。
直接制御と間接制御。入出力ポートなどでつないでCPUが直接アクセスできるのが直接制御。プロセッサをかますと間接制御となる。間接制御では制御はプロセッサが行う。たぶんプログラム的にはインターフェース用の関数があるんだろう。
個別ポート方式とバス結線方式。ポート+インターフェース+周辺機器をセットで組み合わせるのが個別ポート方式。ポートのアドレスが分かればプログラム的にはやり取りが可能になる。バスという専用線を使うのがバス結線方式。バス→インターフェース+周辺機器の組み合わせだが、バスは全周辺機器で共通のため、交通整理が必要になる。
入出力ポートによる接続について。まずメモリーマップドI/Oについて。メモリ空間にI/Oポートを割り当てる。メモリ操作によって周辺機器を操作できる。ポートマップドI/Oはメモリ空間ではない専用のI/O空間にポートを割り当てる(windowsはこっちか?)。マイコンではレジスタにI/Oを割当てたりもする。いずれの接続方法でも、I/Oポートを介して周辺機器のレジスタにアクセスしてデータをやり取りする。どのポートでも電圧の高低と0 1を対応付けて入出力する。演算回路の途中にポートを入れることで、信号を入出力することができる。
バスを介した入出力について。バスは乗り合いバスのバスからきているらしい(まじで!?)プロセッサとタイミングを取り合って、みんなで共通のバスを使っていく。データバスの信号線の数をデータバス幅といい、32bitなら32本信号線がある。このほかにアドレスバス、制御バスがある。
バスを使ったデータ読み出し。よくわかりませんでした。制御バスが、他のバスの動作を抑制しているってことかな?バス使用中はほかの装置はバスを使えませんよってするんだと思う。
第5回
効率的なプログラム実行について。プロセッサの方が周辺機器より速いので、待機状態を避けるためにいろんな工夫が必要になる。
プログラムは待機状態をとるためにループ構造を持つことが多い(ループがないと一瞬で終了するから)。機能ごとにサブルーチンに分けて、都合に応じて呼び出す、という構造をとっている。これに合わせて周辺機器の制御を行えばよい。
まず繁忙待機。メインプログラム内では、ループ内で外部回路操作命令を定期的に行うことをいう。ポーリングともいう。周辺機器のステータスが何か変化したら何か処理を行うって感じの処理になる。周辺機器の状態変化が速すぎると取りこぼしが出る。
割り込み。プログラムに割り込み処理を設定しておいて、周辺機器側から割り込み処理を呼び出すやりかた。プログラムにはやっぱりループが必要。割り込み処理は取りこぼしはないが、プログラム構造がとても複雑になる。中断再開の仕組みが必要になるから。
割り込み処理の詳細。仕組みは仕事中に電話がかかってくることと同じ。割り込みには外部割込み(異常を表す機械チェック、入出力割込み、タイマーとか)、内部割込み(0除算した場合など、プログラムによる割込みや、SVCスーパーバイザーコール・システムコールのこと、がある)がある。
データバッファを使うかどうか。バッファなしだと割り込みに全対応しないといけないので大変。バッファありだと、細切れでデータ転送ができて、一定量溜まったときに初めて通信できるから、割り込みの回数が減る。なので便利。効率的。
割り込みサイクルはどこに挿入されるか。フェッチサイクル→実行サイクルの次に挿入するしかない。フェッチサイクル→実行サイクルの間に割り込みフラグを立てておいて、フラグが立っていたら割り込み処理をする、という方式になる。詳細としてはPSW退避サイクル→PSWロードサイクルの実行、の2ステップになる。これが終わったら、退避サイクルで退避していたデータから最初の状態に復旧して、またフェッチサイクルに戻ればいい。
割り込み検出方法。まずベクター割り込み方式。割り込み番号を周辺機器に割り当てておく。番号込みで割り込み処理が伝えられるので、番号ごとに対応ができる。割り込みハンドラー(割り込み番号+αの情報のことと思う)を保存しておく割り込みベクターが必要になる。ポーリング割り込み方式では、割り込みハンドラーを1つだけ持つ。これだと誰が割り込み処理を投げたかわからないので、全周辺機器の状態を調べて発生元が誰なのかを特定する。割り込み番号がかぶっていても対応可能という利点がある。
割り込みにも優先順がある。割り込みハンドラーに優先順をつけておいて、エラーなどレベルの高い割り込みから処理していく。レベルの低い割り込みと高い割り込みが競合したら、やはり高いものから処理する。多重割り込み処理という。
第6回
補助記憶装置について。
ハードウェアを使うプログラムには、ハードウェア制御のプログラムと目的の処理を行うプログラムの二種類がある。ハードウェア制御はOSに任せておけば、目的の処理だけを行うプログラム(アプリケーション)は自分の処理に集中できる。
物理的資源と論理的資源。物理的資源はハードウェアのことで、論理的資源は実際には存在しない思考上の存在のこと。OSは物理的資源(CPU)から論理的資源を作って割り当てる役割をする。論理プロセッサ、仮想プロセッサともいう。
抽象化。携帯音楽プレイヤーの再生操作とか、対象の共通の操作方法を取り出すこと。周辺機器も種類ごとに抽象化を行えば操作が簡単になる。コンテンツプレイヤーの回路構成や部品の違いは、インターフェースの統一によって解決できる。ハードウェア抽象化も同じように、プリンターならプリンターの機能、記憶装置なら記憶装置の操作方法を決めておいて、どれでも同じ操作ができるようにする。カプセル化ができる。
データの抽象化について。ファイルは抽象化の1つ。ただのデータの集まりを、とらえやすいものにする効果がある。また、電圧の高低や磁気による記憶を0-1に変換することも抽象化の1つ。フォルダーも抽象化の1つである。
データの記憶について。物理的性質を吸収する役割を持つのがボリューム、フォーマット、ファイルシステム。補助記憶装置はデータを記録する1単位があるが、OSはそれを意識させないようにする役割がある。
OSによる記憶装置の認識について。物理ボリューム内に複数の論理ボリュームを作ることができる。OSは論理ボリュームを別ドライブとして認識する。未対応のファイルシステムは見えない。
第7回
OS構造と周辺機器について。ソフトウェアは他への影響が少ないような課題に分割され、モジュールとして実装される。できるだけ機能の重複がないようにして、モジュールを組み合わせてソフトウェアができる。これを構造化という。中身をブラックボックスにしてインターフェースでやり取りできるようにすれば便利。構造化プログラミングという。
オブジェクト指向プログラミングについて。オブジェクトとインスタンスの話は略。
分割によるソフトウェア開発について。分割されたモジュールそれぞれを見ていくと、ユーザーに近い部分とハードウェアに近い部分では機能が異なる。ユーザー付近では主にUIなど抽象化レベルの高い機能が、ハードウェア付近では抽象化レベルの低い機能が実現される。
OSの下部にはハードウェア抽象化層(HAL)があり、ハードウェアの違いを吸収している。
OSの基本的な機能をカーネルという。スーパーバイザーともいう。モノリシックカーネルは一つのカーネルで全部を補う。UNIXなど。効率的だが、一つのメモリ空間で全部を補わなければいけない。だから一つ不具合が起きれば再起動するしかない。マイクロカーネルはOSの提供する機能を別々に動作させ、OS内にシステムサーバーを設けてマイクロカーネルをそれぞれ担当させる。独立したメモリ空間で実行されるので、異常が発生しても個々のサーバーの問題になる。(具体的なOSは?)手間はかかる。最近は両方を組み合わせたハイブリッドカーネルが流行りである。
ようやく周辺機器の利用について。周辺機器を利用するにはOSに認識させないといけない。周辺機器を接続するとOSからデバイスIDが割り当てられる。デバイスにはHDDのようなブロック型デバイス、キーボードのようなキャラクター型デバイス、ハブのようなパケット型デバイスがある。
デバイスドライバ。HAL層に入るのがデバイスドライバである。階層構造があり、個別のドライバの層と、共通の機能を持つHID(マウス+キーボード)、ディスクドライバ、プリンタ、ネットワークの層がある。ネットワーク層の上にはプロトコルスタックもある。デバイスドライバの上には管理機能の層もある。デバイスドライバを都度勝手に設定してくれるのがプラグアンドプレイ機能。
データ転送の高速化の工夫について。データ転送をずっとやっているとプログラムが止まってしまう。DMAを使うと、DMAコントローラを介して周辺機器とメモリーがCPUを介せず直接アクセスできる。CPUのキャッシュメモリも速度を上げる工夫の一つである。メモリインターリーブは物理メモリにアドレスを分割して記録することで高速化を実現する。
第8回
OSによるプログラム実行管理について。補助記憶装置に記録されたプログラムからプロセスが作成され(ロード)、メインメモリに格納される。プロセスをインスタンスともいう。プロセスはメモリ空間に領域を確保する。プロセスのメモリ空間はコード領域、データ領域(グローバル変数)、ヒープ領域、スタック領域に分割される。ヒープとスタックは容量が可変。コード領域は下から上(アドレス小→大)に向かって実行される。
プロセスの生成と終了。ロード→実行・資源の割り当て→終了・資源の解放という順。プロセスの終了は、正常終了・異常終了・強制終了がある。
複数プロセスの実行。3つのプロセスが実行されているとき、メモリにはそれぞれのプロセスがある。仮想プロセッサがそれぞれのプロセスを担当する。マルチタスクを実現する方法はいろいろある。マルチコアならそれぞれのプロセスを対応させられる。プロセスを担当するコアを動的に切り替えていけば効率的に動作させられる。
プロセス切り替えについて。実行状態を退避するには、記憶装置に、メモリー空間に加えてプロセッサの制御などのコンテキスト空間も保存しないといけない。復旧の時は、コンテキスト空間も一緒に復旧すればよい。プロセス切り替え(コンテキスト切り替え)にはコンテキスト空間も切り替えないといけない。仮想プロセッサに割り当てるコンテキスト空間をそれぞれ記憶装置に持っておいて(コンテキスト退避領域)、プロセスごとに物理プロセッサに毎回割り当てていけば動作を実現できる。マイクロカーネルはカーネル機能をプロセスとして動作させている。常駐プログラムみたいなもん。
スレッド。プロセス内の処理の流れのこと。スレッドごとに仮想プロセッサが割り当てられる。動画エンコーダーとか、webブラウザを考えればよい。画像やら動画やら、画面ごとの処理やらを分割して並列処理している。コンテキスト切り替えのコストは同一プロセス内なので少ない。軽量プロセスとも呼ばれる。
プロセス・スレッドの管理。実行可能状態・実行状態・待ち状態の3つの状態がある。実行可能状態では仮想プロセッサが割り当てられていない状態、実行状態は仮想プロセッサが割り当てられて動作している状態、待ち状態はプロセッサとは関係なく実行の中断している状態をいう。プロセスが開始すると実行可能状態と実行状態を行き来して、終了する。待ち状態は、主に周辺機器を使う場合に実行状態から遷移する。待ちが終わったら実行可能状態に遷移する。
OSの特権モード、非特権モード。特権モードは全ての機能が使える。入出力や制御機能も使える。非特権モードは通常の使い方で、制限がある。モードは階層構造も持てる。
スケジューリング。OSのカーネルが持つ。実行可能状態のプロセスを順序だてて実行する。スループットがなるべく高くなるようにしたい。待ち状態や無限ループが発生している場合は飛ばしたい(具体的なやり方は不明)。ここは詳しいことがわかんなかったっす。。
第9回
プロセスの協調動作とメモリー。プロセス協調とは。プロセスが複数同時に実行されること。プロセス内には複数のスレッドがある。すると資源の譲り合いが必要になる。プロセスにはそれぞれ仮想プロセッサを割り当てる。プロセス間のを同期を取る必要がある。
プロセスαとβがあるとする。同じ資源を利用する命令がある場合どうするか。例えばファイル書き込み。同時に書くとファイルが壊れるから、一方が書き込み中は他方の書き込みを禁止しないといけない。プリンターも同時に使えない。資源の取り合いが発生することを競合という。資源の解放待ちの時間のことを封鎖ブロックという。封鎖ブロックが終わったらプロセスは再開する。
相互排除。資源を利用するスレッドを1つにすること。利用中であることを占有とかロックという。利用できないことを封鎖とかブロックという。資源管理はOSが行う。資源を利用する機会は全てのプロセスに公平に与えられるし、時間がかかっても必ず資源が利用できる。
資源管理用のプログラムを制御プログラムという。管理を行うところをクリティカルセクションという。クリティカルセクションでやること。一番簡単なのは割り込みの禁止。簡単だが他のプロセスに支障が出ることがあるから、できるのは短時間だけ。
次にフラグを使う。記憶領域に01のフラグを作っておいて、1にするのをフラグを上げる、0にするのをフラグを下げるという。資源のフラグを上げておけば、利用中というわけ。
セマフォによる管理。セマフォ変数を使う。0以上の値を記録できる。最大で使える回数を最初に設定しておいて、P操作(acquire)でデクリメント、V操作(release)でインクリメントする。0なら使えないってわけ。
資源の管理を行っていてもデッドロックになることがある。みんなが解放待ちになって処理が進まないこと。
プロセス間通信。プロセス同士のデータ交換のこと。メモリー共有、メッセージ通信といった方法がある。共有領域つかったことあったっけ?あんまやんないよね。危険だし。メッセージ通信にはIPCとか。メッセージで同期を取ることもできる。これはけっこう実務でもやる。データベース管理ツールと、メインのプログラムでよく通信してる。チャネル、ポート、メッセージボックスなどを介する。
メモリー管理。OSを使ってメモリを管理することを考える。カーネルとプロセスの間に連続した空き領域ができる。プログラムに応じて連続した空き領域の所を使っていくが、細切れになってしまうことがある。断片化という。断片化解消の方法としてコンパクションがある。デフラグみたいなやつ。実行中に再配置できるのをリロケータブルという。
ページング。物理アドレス空間と論理アドレス空間は違うという話。たしかに、論理アドレス使わないとコンパクションとかできないよね。論理アドレスがあるからこそ連続したメモリ領域の確保ができる。C言語では論理アドレス使ってるんじゃないか?物理アドレスの1単位をページとかフレームという。論理アドレスと関連付ける機能をMMUという。関連付け自体をマッピングという。
仮想メモリ―の仕組み。まずオーバーレイから。プログラムをオーバーレイローダー+ルートモジュール+モジュール(複数)に分割。機能が必要になった時点でモジュールを切り替える機能のこと。
仮想メモリ―。物理メモリーに加えて補助記憶装置(バッキングストア)を足して仮想メモリーにすること。ページングによって、論理ページ⇔物理ページの対応表(ページテーブル)が作られるが、物理ページが割り当たってない論理ページを参照(ページフォールト)が起きれば、バッキングストアからデータを持ってくることになる。これをページインという。頁アウトは意味わかりませんでした。印刷教材を読みます。
第10回
記憶装置とOSの起動。記憶装置の話。一次記憶装置と二次記憶装置。プロセッサ、電源と連動した記憶保持をするのが一時記憶装置。いろんな記憶装置を紹介してくれてる(略)。
半導体メモリーの分類。RAM→SRAM(Static RAM、高速低容量), DRAM(Dynamic RAM、高容量)。ROM→マスクROM(完全読み込み専用)、EEPROM(Electronically Erasable and Programmable ROM、たまに変更できる)、フラッシュメモリー(ほとんどはこれ、書き換え可能)。マスクROMはこれファミコンのカートリッジだな。電池ついてるし。
フラッシュメモリーの分類。NOR型。アドレス指定でランダムアクセス可能なのでプログラムも記録できる。BIOSやスマホのファームウェアなど。NAND型。ページ単位のアクセスが可能。大容量用。SSDとかUSBメモリとか。NAND型にはSLC(Single Level Cell)型とMLC(Multiple Level Cell)型がある。MLCの方が大容量。
フラッシュメモリーと記憶素子について。記憶素子ごとに記憶できる回数が決まっている。まんべんなく使えば寿命を延ばせる(ウエアレベリング)。
補助記憶装置(略)。
OSの起動と動作モード。起動中の動作をブート、ブートストラップという。電源ON→リセット割り込み発生→ブートローダーがBIOSを実行→IPLを実行して二次ブートローダが実行→OS実行という流れ。
コールドスタート(ハードウェア初期化有)、ウォームスタート(ハードウェア初期化されてる状態からの起動)。
OSの動作モード。サスペンド→待機状態。メモリのみ電源保持。ハイバネーション→補助記憶装置にメモリの内容を移してから電源OFF。ハイブリッドスリープ→両方の組み合わせ。
第11回
OSについて。OSの種類から。スパコンは専用OS。組み込み機器はTRONなど。サーバーはUNIXだよね。規模にあったOSを適用することをスケーラビリティという。最近はスマホ→PCの順でソフトウェアが移植されるようになってきた。これをモバイルファーストという。
スケジューリングの違い。単位時間をタイムスライスと言い、タイムスライスごとに平等にプロセスを回るのがラウンドロビン。時間が長いプロセスを優先することになる。これを使うのはタイムシェアリングOSという。
リアルタイム処理。携帯電話の着信があった場合を考える。タイムシェアリングだと通信の途切れが発生する。なので優先度を上げたい。イベントに基づいた優先順位付けをイベントドリブン・スケジューリングという。優先度が高いプロセスが来たらプロセッサを横取りする。これがリアルタイム処理。このような動作をするOSをリアルタイムOSという。
定期的に同じ処理を行う処理を周期プロセスという。これは動作を予測できるので、アルゴリズムに組み込みやすい。リアルタイム処理にも二種類、ハードリアルタイム(〆切が厳しい)、ソフトリアルタイムがある。
汎用OSと組み込みOS。規模が大きい場合は汎用OS、タイムシェアリングを利用しがち。スマホ、携帯、組み込み機器は組み込みOSになる。
汎用OSの動作。ROMにブートローダーが記録されていて、まずこれを実行する。OSは補助記憶装置からRAMに読み込み、OSが実行される。
組み込みOSの動作。OSはROMに書いてある。一部はRAMに転送。ほとんど書き換えないで高速に動作させる。一部のデータだけをRAMに書く。
省電力モード。プロセッサ停止モードとクロック停止モードがある。ハイバネーション=クロック停止モードのこと。プロセッサー停止モードの方が簡易。何か押せば元に戻れる。クロック停止モードだと何か特殊な操作が必要(電源ボタン押すとか?)。
第12回
OSとソフトウェア開発について。ソフトウェアはアプリとも呼ばれる。
家電や携帯機器のプロセッサの選択。低コスト、小型化、省電力、軽量が望まれる。PCよりも性能が最低限のものになりがち。
プログラム実行とOS。OSがない場合もある。OSがない場合、リソースがいらないというメリットもあるが、だいたいはOSも搭載してる。
ポットの制御を考える。ヒーターをONにすると水温上昇、OFFなら下降する。温度センサーで水温を測定し、設定温度との比較を行い、ヒーターのON/OFFを切り替える。これならOSはいらない。
複雑な制御をする場合。プログラムXがモジュールA,B,C,Dでできていると考える。モジュールが関係しあっている場合は、これを制御するのが大変。そこでOSを使った方が楽になる。開発の利便性を取る場合はOSを搭載した方が有利。
組み込み機器では必要な機能を絞ったOSを使うことになる。必要な機能はタスク管理、割り込み管理、ネットワークと通信、グラフィック機能があればよい。
分割によるソフトウェア開発。APIを搭載していればモジュールに分割して開発できる。
システムコール。割り込みを発生させる処理のこと。システムコールには番号が割り当てられている(システムコール番号)。スーパーバイザー呼び出しをプログラムが呼び出して割り込みが発生する。
プログラム開発について。セルフ開発とクロス開発。セルフ開発はホストとターゲットが同じ、クロスは例えばPCでスマホの開発をする場合など。
互換性。バイナリレベル互換とソースレベル互換。バイナリレベルはそのまんま使える互換。ソースファイルは複数環境でコンパイルできるのでこれで互換性を保つことををいう。移植はソースファイル互換では足りない環境依存部分だけを修正すること。仮想マシンを使えばどんな環境でも同じプログラムの実行ができる。Javaとか。
第13回
ユーザーインターフェースについて。昔の出力部分はLEDとか電球とかだった。入出力装置としてはほかにDIPスイッチがある。4bitメモリーと同じ。昔はメモリーがないので、マークシートやパンチカードを使っていた。オペレーターという担当者を介していた。OSと同じ。
最初の使い方はバッチ処理。オペレーターに渡して、コンピュータを使って実行してもらう。コンピュータが決められた手順でプログラムを連続して実行していた。1970年ごろまで。
次は対話形式。コンピュータにコマンドを入力して、結果を返してもらう。これの繰り返し。
フォントによる文字の表示。文字列をコンピュータがビットマップに変換してディスプレイに表示する。
ウインドウシステムの登場。GUIを使って直接操作方式を採用し、より直感的になった。
インターフェースの分類。ハードウェアインターフェース(機器同士)、ソフトウェア・インターフェース(ソフトウェア同士)、ユーザー・インターフェース(コンピュータと人間)をつなぐもの。
人間とコンピュータとの接点について。メンタルモデル。マニュアルを読んで操作方法を獲得する。この時に頭に作られるモデルをメンタルモデルという。インターフェースを工夫すると、メンタルモデルが作られるまでの時間を短縮できる。インターフェースには日常生活のメタファーが用いられる。例えばデスクトップ画面。机に見立てている。
アフォーダンス。人に行動を誘発させること。アイコンやボタンのデザイン。プチプチを見るとつぶしたくなるよね。ボタンがあるとクリックしたくなるよね。色の対比でもアフォーダンスを表現できる。配置も大事。視野に配慮したゲシュタルト特性を考えることもある。
入力装置。人間の中にある情報を入力する場合と、外にある情報を使って入力する場合がある。キーボードは前者。ポインティングデバイスや音声認識もある。出力。ディスプレイが用いられる。HMD(ヘッドマウントディスプレイ)なんかも出現している。
これからのインターフェース。モバイルの文字入力。携帯ではT9というテンキーベース。スマホやタブレットではソフトウェアキーボードが使われる。
ウエアラブルコンピューティング。いつも利用できる、人間の能力の拡張、コンピュータによって外界との情報の調停を行うこと。
第14回
OSとセキュリティー。複数の利用者でコンピューターを共用するには、プライバシー保護と個人環境の維持が必要になる。これを可能にするのをマルチユーザー機能という。なので利用者識別のアカウントとパスワードが必要になる。ファイル操作については略。
OSによる資源の保護について。アクセス制御。操作に属性を付加する。具体的には書き込みとか読み込みとか。アクセス制御情報はアクセス制御行列で表される。行が主体(domain)、列が対象(object)となる。それぞれR(読み), W(書き), X(変更)ができたりできなかったりを設定する。
ケーパビリティリスト。ドメイン(主体)と対象、操作(ファイルAとRとか)の一覧にしたもの。これは一覧の作成が大変なので、普通はアクセス制御リストを使う。対象ごとに、ドメインとアクセス権をセットにしたもの。
セキュリティと暗号化。CIAの要件がここでも出てきた。脆弱性、暗号化、ユーザー認証などは情報セキュリティ概論でやったからいいか。
第15回
コンピュータの利用形態とOS。最初の開発の部分は今までの復習って感じなので略。
SoC。System on Chip。チップ一個で必要なシステムを実現すること。基盤の構成が簡単になる。小型化、高速化にも有利。
ユビキタスコンピューティング。パーベイシブコンピューティングともいう。いたるところにコンピュータを組み込むこと。前から言われてたねこれ。小型化高速化でだんだん現実味を帯びてきてる。
クラウドコンピューティングの定義。「構成の変更が可能な計算機資源の共用領域に簡単にそしてオンデマンドにネットワーク経由によるアクセスを可能とするモデル」ああいわれてみれば。特徴は①オンデマンドセルフサービス②幅広いネットワークアクセス③計算機資源のプール④迅速な伸縮性⑤計測されるサービス。
仮想化技術。OSの上にハイパーバイザーを載せて、さらにその上でOSを複数実行する。これをゲストOSという。ハードウェアの上に直接ハイパーバイザーをおくパターンもある(ハイパーバイザー型)。クラウドコンピューティングではよく用いられているらしい。
IoT。ウエアラブル端末とかも入るのね。ヘルスケア端末もネットワーク利用ができる。蓄積された情報の分析も可能。自動車のプローブ情報(運行情報のこと?)も活用が期待されている。
センサーとアクチュエータ。ボタン、動き、温度湿度を計測したり、LEDを光らせたりできる。プログラミングしたらいろいろ動作可能(なんてアプリだろこれ?)。
実世界と仮想世界。IoTで得た情報を「実世界⇔仮想世界⇔コンピュータ処理」の相互作用に載せて、実社会に役立てることができる。