name: computer-basic class: title, smokescreen, shelf, no-footer # コンピュータの基礎 <div class=footnote> <small> 基本情報処理試験のシラバスを基準に、 用途や特徴などを分類するところからはじめます。 <br> どうしても大枠の用語だらけですが、 基本情報=技術者の常識レベルなので覚えてください </small> </div> --- class: compact # コンピュータの種類 | 種類 | 用途 | 直接操作 | 身近 | 具体例 | |---------------------- |------------------------ |---------- |------ |------------------------------ | | スーパーコンピュータ | 科学技術計算 | NO | NO | 富岳、京、TSUBAME | | 汎用機 | 汎用、業務基幹(事務,経理) | NO | NO | 銀行、事務処理、業務システム | | 組み込み | デバイスの制御 | NO | YES | 家電製品、自動車、工場、発電所| | パソコン | 汎用、一般のアプリ | YES | YES | デスクトップ、ノートパソコン | | ワークステーション | 汎用ながら、特定業務利用 | YES | ? | CADを使う設計、映像処理 | | 携帯端末 | 汎用、一般のアプリ | YES | YES | スマートフォン、タブレット | <small> - 特徴 - スーパーコンピュータは科学技術計算に特化した一品物の超高価な製品 (ただし近年のスパコンは、PCやスマホのパーツを元にカスタム化したものが普通。 それら**身近なパーツの価格性能比が高すぎて特注品を作っても太刀打ちできない**から) - 組み込みの特徴は特定用途で確実に動くハードウエアの信頼性とリアルタイム性 - コンピュータの高速化・信頼性の向上が著しく、 各種コンピュータ間の違いは縮小中 </small> --- class: img-right,compact # コンピュータを構成する部品 ![](images/CC-BY2.0_computer_parts__416458788_804d765fcc_b.jpg) <div class=footnote> <small> "Computer Parts" by Qfamily is licensed under CC BY 2.0 </small> </div> - マザーボード <small> - 写真で一番下の緑のボードのこと - CPU,メモリ,各種カードを挿すスロット群 - バスという各部品間のデータ転送をする通信路でパーツ群が接続されています (右図ではスロットの下に隠れて見えてません)。 電力供給ラインも見えませんね(ちなみに直流) </small> - CPU - メモリ - ヒートシンク(CPUを空冷,写真の右下奥) - ビデオカード - ネットワークカード --- class: img-right,compact # コンピュータの五大要素とプログラム内臓方式 ![五大要素](images/5elements.png) - **五大要素**(右図を参照) - **制御、演算、記憶、入力、出力** - **プログラム内臓方式** <small> - 格納方式やストアードプログラム(stored program)方式とも言う - まず主記憶装置に読み、それを実行 1. プログラムを**入力装置**から 1. メモリ(**記憶装置**)へ読み込み 1. メモリ上のプログラムを順次実行 - HDD/SSDなどの**記憶装置**から読みこんだ命令が**演算装置**(四則演算や比較など)や**制御装置**(各装置への指示)で実行される - (ハードウエアの変更なしに)**ソフトウエアを変更するだけで、 さまざまな処理が可能** </small> --- name: os-basic class: title, smokescreen, shelf, no-footer # システムの基礎 <div class=footnote> <small> </small> </div> --- class: compact # ソフトウエアの分類 <div class=footnote> <small> (脚注) オープンソース(OSS)の話は第7回に取りあげます </small> </div> | 大分類 | 中分類 | 例および小分類 | |---------------------- |-------------------- |--------------------------------------------- | | システムソフトウエア | | | | | 基本ソフトウエア | OS | | | | (a)カーネル本体 | | | | (b)標準ユーティリティ(ls sort システム管理) | | | | (c)コンパイラなど言語処理系 | | | ミドルソフトウエア | データベース | | 応用ソフトウエア | | オフィス製品(ワープロ、表計算) | <small> - OSは**基本ソフトウエア** - コンピュータはOSがないと非常に使い勝手が悪い=基本のソフトウエア - 商用OS: Microsoft社のWindows, Apple社のMacOS X, IBM社のz/OS, 商用UNIX - フリーソフトウエア(OSS)のOS: Linux, BSD Unix </small> --- class: col-2,compact # コンピュータ利用方法の大雑把な分類 <div class=footnote> <small> (脚注1) ディストリ = distribution: 千個ほどのソフトウエアを寄せ集めて作る<B>パッケージ</B>の名称です。 寄せ集め方の違いがディストリの相違と考えてください(e.g. CentOS, Debian, Ubuntu, SuSe, Alpine)。 なおLinuxはkernel名 <br> (脚注2) 汎用機は、大型機、メインフレームなどとも呼ばれます。 汎用=360度どんとこいというOS/360に由来 </small> </div> - 人間が操作する端末(クライアント) - **コンピュータと対話しながら利用** - パソコンやスマホ,タブレット - ワープロや表計算,ブラウザなど - 仕事から趣味まで汎用 - 一人で使うなら十分の性能 - 製品例 - Microsoft社のWindows 10, 11 - Apple社のMacOS X - UbuntuなどのLinuxディストリ <wbr> - サービスの提供=サーバ(の土台として) - 製品例 - **サーバの多くはUnix**;**クラウドとなると、ほぼLinuxファミリ** - Windowsサーバは**認証サーバ(AD=Active Directory)**などの社内**基幹システム**で利用 - さらに高い信頼性を求める勘定系(銀行など)ではIBMの**汎用機**でz/OS(OS/360の後継,1964-)など --- class: compact # システム処理形態の分類: 利用方法、即時性、対話性 <div class=footnote> <small> (脚注) みなさんの黒い画面もターミナルと呼ばれますが、 正確には terminal emulation をするソフトウエア </small> </div> | 処理形態 | 動作 | 例 | |---------------------------- |-------------------------------------------- |------------------ | | バッチ | 一定期間もしくは一定量ためてから**一括処理** | 月末の事務処理 | | | | 売上データの集計 | | オンライントランザクション | データの発生と同時に処理を開始(**即時性**) | 銀行のATM | | リアルタイム制御 | センサーで状態を監視し対応(**厳しい即時性**) | 自動車のエンジン | <small> - この分類は、わりと業務でのコンピュータ利用の分類です - 普段のパソコンやスマートフォンの使い方は、 **対話型**処理(コンピュータと対話しながら進める処理) - コンビニやスーパーでは全店舗の売上を集計して夜中に集計処理などをしています。 これが**バッチ**処理。 夜中にバッチ処理といえば、汎用機の世界というイメージ。主力言語はCOBOL(偏見?) - バッチやオンライントランザクションの処理中枢はデータセンターなどにあるサーバ(群)です。 別途、 対話型の入出力用コンピュータ(補助,本体より低価格)が必要です。 これが本来の**端末**ですが、 いまは普通のPCからサーバにログインすることが多いでしょう。 ちなみに**端末(termianl)の訳がターミナル**です </small> --- class: compact # システム処理形態の分類: 集中vs分散 - **集中処理** <small> - データセンターなどで集中管理されたサーバ(群)で処理するため、 **管理**しやすく**機密保護**もしやすい反面、 一部の機材の故障が全体に影響をおよぼすことが多い(分散システムほど冗長化されていない) - 性能の向上: **スケールアップ**(機材の入れ替え,アップグレードは**停止をともなう**) </small> - **分散処理** (いわゆる**クラウドの裏側**) <small> - 一部の機材の故障では全体に影響をおよぼさないはずなので、障害に強い反面、 多数のコンピュータ群からなるため管理も障害対応も難しくなりがち - 性能の向上 - スケールアップ ... 古典的な少数のサーバと多数のクライアントの場合 - **スケールアウト** ... **サーバ数の増加で対応**,**無停止**で**ユーザ数に応じて自動増減可** - サーバクライアントモデルは分散処理の一種と言えます - 大事な注意: 古典的な開発手法ではダメです。 分散システムを前提にサーバソフトウエアとアプリが設計・作成されていなければ、 きちんとシステムの自動拡大・縮小に連動して動作しません </small> --- name: os-basic class: title, smokescreen, shelf, no-footer # OSの基礎 <div class=footnote> <small> </small> </div> --- class: col-2,compact # OSの目的 <div class=footnote> <small> (脚注) アプリ互換性: アプリ互換性はUnixが最初ではありません。 60年代に発売されたIBMの汎用機がすでにアプリ互換をうたっています。 ただ、アセンブリ言語で書かれたOSなので大変そう...IBMだから出来た力技?:-) </small> </div> 1. ハードウエア資源の有効活用 1. 処理能力の向上 <small> - スループット(仕事量/単位時間)、 ターンアラウンドタイム(全部終わるまでの時間)、 レスポンスタイム(ユーザに結果を出し始めるまでの時間) </small> 1. 信頼性の向上 <small> - 信頼性(正常動作)、可用性(稼働率)、保守性、保全性(壊れにくい)、安全性(機密性;セキュア) </small> 1. 開発効率の向上 1. 操作性の向上 <wbr> - **移植性**の向上(**開発効率**向上の一部) <small> - Unix以前のOSはハードウエアごとの一品物で**アセンブリ言語**で書かれていました - 1970年代に、**C言語で書かれたOS(Unix)**が**移植可能**なことを証明しました。 これ以降、新しいコンピュータ(ハードウエア)でも、 OSおよびその上で動くミドルウエアやアプリもそのまま動かすことが可能になり**開発効率の向上**につながりました </small> --- class: col-2,compact # 利用形態によるOSの分類 - タイムシェアリングシステム(TSS) <small> - **コンピュータと対話しながら利用** - 操作画面がある**身近な機器の大半** - サーバもパソコンも**TSS**です - いまや一人で占有できるコンピュータを複数台もっている時代なので、 **シェア**の意味が分かりにくいです;-)が、 本来TSSは高価なコンピュータを**多数のユーザで共有(シェア)して使う仕組み**のことで、 人間がコンピュータをどう使うか? 人間とコンピュータの共生とは? といった観点が出発点にあります - **この授業はTSSを前提に説明**します </small> <wbr> - リアルタイムOS (RTOS) <small> - 組み込みシステムに使われるので、組み込みOSなどとも呼ばれます - **組み込みシステム = 特定の機能を実現するために機械に組み込まれるシステム**。 家電製品,自動車,医療機器,産業用の機械など、 **身の回りに多数**(さほど対話的ではない) - ちなみに一昔前まで携帯電話もリアルタイムOSが主流でした - TSSとの主要な違いはスケジューラで、 高速な反応や一定時間以内に確実に特定プロセスを実行することが求められています。 <br> 例: 自動車のエンジン(反応が遅いと致命的) </small> --- class: img-right,compact # OSの使い分けの例 <div class=footnote> <small> "Apollo 11 liftoff" by Apollo Image Gallery is marked with CC PDM 1.0 </small> </div> ![height480px](images/PD_apollo11_liftoff__48334428021_6a8a5baca5_b.jpg) - [インターステラテクノロジズ(株)](http://www.istellartech.com/) <small> - 大樹町で打ち上げている(いわゆるホリエモン)ロケットを例にすると、 本体の姿勢制御とか噴射のタイミングは、 **処理速度が1/1000秒レベル**で行う世界なので**リアルタイムOS**、 周辺機器(通信とかタンク内をかき回すとか?)は、そこまでcriticalではないので、 ラズベリーパイ(LinuxつまりTSS)で動かしているそうです。 この辺が安さの秘訣。 - 2021年には100kmまで上昇してペイロードを放出=宇宙に行けた、そうです。おめでとう! </small> --- class: col-2,compact # 構成法によるOSの分類 <!-- <div class=footnote> <small> (脚注) Machこぼれ話は <A HREF="/slides/columns/commentary/os/#mach">コラム</A>参照 </small> </div> --> - **モノリシックカーネル** - カーネルが一つの巨大なソフトウエア、 代表例はUnixファミリー(商用UNIX, BSD Unix, Linux) - マイクロカーネルにくらべ(a)動作が高速(b)作成も容易(c)デバッグも容易 - デメリット - 小さなセキュリティホールがカーネル全体に波及しうる - カーネルをアップグレードする際はOSの再起動が必要 <wbr> - **マイクロカーネル** - カーネルは必要最低限の機能だけをもつ小さなもの(だからmicroなkernel)とし、 多くのプログラムが協調してカーネルの機能を提供するモジュラー(modular)な作りです。 カーネルを小さな部品群から構成できるか?というOS研究の産物です - 80年代の有名な**Mach**(マークと発音)はWindowsやMacOS Xの御先祖にあたります (Windowsは設計の参考にし、MacOS XはMach直系の子孫) --- class: compact # システム処理形態の分類(ふたたび) <div class=footnote> <small> </small> </div> | 処理形態 | 動作 | 例 | |---------------------------- |-------------------------------------------- |------------------ | | バッチ | 一定期間もしくは一定量ためてから一括処理 | 月末の事務処理 | | | | 売上データの集計 | | オンライントランザクション | データの発生と同時に処理を開始 | 銀行のATM | | リアルタイム制御 | センサーで状態を監視し変化に応じて即時対応 | 自動車のエンジン | <small> - リアルタイム制御はRTOSが必要ですが、 バッチ(Batch)やオンライントランザクション(OLTP)はTSSで動かせます。 TSSはUnixでも汎用機でもかまいません。 歴史的に銀行や勘定系といわれる昔からある企業の基幹システムは汎用機を使ってきましたが、 オープンシステム(主にUnix系)への移行も進んでいます - 処理データ量の上限みつもりが確実に出来るなら、 **閉じた環境で汎用機を使う**のは、 (**過去数十年のソフト資産も活かせる**し、なにより)**セキュアな設計・運用**なので良いことです。 汎用機は高価なこともあって、 1980年代(おもにUnixとTCP/IPの登場)以降、 **オープンシステム**への置き換えが進んでいると言われていましたが、 汎用機側もライバルを意識した技術開発をしているので、 汎用機の価格性能比が悪すぎるということはないようです (-> 汎用機をUnixにする提案が正義とは限らない,お客様次第) </small>