Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ロボットシステム学2015年第5回

6,897 views

Published on

UNIX/Linuxについて暑苦しく解説しました。

Published in: Technology
  • Be the first to comment

ロボットシステム学2015年第5回

  1. 1. ロボットシステム学 第5回 上田隆一
  2. 2. 本日の内容 • UNIX, Linux – なぜロボットに重要なのか – 歴史的な背景(なんでこんな仕組みなの?) Oct. 7, 2015 ロボットシステム学 2
  3. 3. オペレーティングシステム • 前回まではなかったもの – ハードウェアの複雑さを隠すためのソフトウェア階層 (ハードウェアをいじる人間には邪魔かもしれない) • 仕事 – 抽象化 • 機械の世界から情報処理の世界へ – 資源(リソース)管理 • 次々(同時)に来る「計算機(とその周辺機器)を 使いたいという要求」をいかに捌くか Oct. 7, 2015 ロボットシステム学 3
  4. 4. マイコン/OSの抽象化レベル • アドレスによる抽象化(マイコン) – 様々な機器のデータ読み書き口を同じアドレス空間に 配置(メモリマップドI/O) – ある番地の01を操作すると、ピンから電圧が出たり、 入出力が逆転したり • ファイルによる抽象化(OS) – マイコンだとメモリの番地を一つずつ書き換える 操作になるが、ファイルだと一連のデータを 流し込んだり取り出したりできる(ストリーム) Oct. 7, 2015 ロボットシステム学 4
  5. 5. なんでもファイル • 機器の操作(例: ラズパイマウスを例に) – ジャイロ: /dev/ttyACM0 – モータ: /dev/rtmotor0 – 乱数発生器: /dev/random, /dev/urandom – よくよく考えてみると、機器の操作というのは データを書いてデータ読むだけで済む • その他話題 – ネットワークだけはファイル扱いされない (不可能ではなく、歴史的経緯で) – Plan 9: ネットワーク関係もファイルに Oct. 7, 2015 ロボットシステム学 5
  6. 6. 本講義で扱うOS • Linux(Ubuntu, Raspbian) • LinuxをはじめUNIX系OSの用途は増えている – ネットワーク(サーバ, ルータ) – デスクトップ機, ノートPC のOS(Linux, OS X) – ゲーム機(FreeBSD) – タブレット機, スマートフォン(Linux, iOS) – 要は仕事がたくさんある Oct. 7, 2015 ロボットシステム学 6
  7. 7. OSの歴史 • 昔の話から考えてみましょう – なぜOSというものがあるのか – なぜこんな仕組みなのか? – ロボットとの親和性は? – 話の流れ • UNIX 以前 • UNIX • UNIX の派生物 • Linux Oct. 7, 2015 ロボットシステム学 7
  8. 8. UNIX以前 • 初期の計算機の使われ方(-1965 年) – 主に科学計算や集計 – 使用者が計算機の使用時間を割り当てられて、 その時間にプログラムを計算機室に持ち込み、 プラグボードやパンチカードを持ち込む • 参考 – プラグボード – プラグボードの使用風景 – パンチカード Oct. 7, 2015 ロボットシステム学 8
  9. 9. このころのデータの読み書き • メディア: パンチカード, 紙テープ, 磁気テープ • 初期の頃のオペレーション(バッチシステム) – 1. 計算機 A でパンチカードの情報を磁気テープ上の情報に変換 – 2. 磁気テープを計算機 Bにセット – 3. 計算結果が結果が出力用磁気テープへ – 4. 磁気テープを取り外し別の計算機 Cでプリントアウト • 1 台の計算機で1つの計算しかしない – 割り込みのない(できない)マイコンのようなもの Oct. 7, 2015 ロボットシステム学 9
  10. 10. この頃のOS • 現在のOS の要素がちらほらと – パンチカードのデータをコピーした磁気テープをロードし、 実行結果を別のテープに書き出すソフトウェア • 似たもの: Arduinoのブートローダ • この頃の課題 – 一度に一つのプログラム(ジョブ)しか走らせられない • マイコンみたいなもの – 計算機は高いので多人数で、遊び時間を少なく使いたい Oct. 7, 2015 ロボットシステム学 10
  11. 11. マルチプログラミング • 1964年ごろ実用 • メモリをパーティション分けして複数のジョブを置き、実行 • メモリをジョブがお互いに覗かないようにする(ハードで) • この頃の計算機(IBM System/360) Oct. 7, 2015 ロボットシステム学 11
  12. 12. タイムシェアリングへの試み • 1960年代 • マルチプログラミングをさらに発展 – プログラムを持ち込むバッチ処理から 端末による対話式へ • 主なプロジェクト – CTSS(compatible time sharing system) – MULTICS(multipexed information and computing service) • この頃の計算機(PDP-1) Oct. 7, 2015 ロボットシステム学 12
  13. 13. UNIX(Unix) • MULTICS プロジェクトに参加していたAT&Tベル研の Ken Thompson らがPDP-7上で開発(1960 年代末) – 特許ドキュメント管理・作成用 – (単にゲームを動かしたかっただけという説も) • MULTI(多方向)→UNI(単方向) – MULTICSの失敗: たくさんの研究組織、研究員で右往左往 – UNIX(注意: 私の独自解釈です) • ドキュメント管理したい(+ゲームやりたい)という明確な目標 • 3人+αで早く作りたい→シンプルに作りたい Oct. 7, 2015 ロボットシステム学 13
  14. 14. UNIXが具現化・整理した機能 • 階層型ファイルシステム – ファイル: 一連の文字列 – ディレクトリ: ファイルを整理するファイル • プロセス・タイムシェアリング – 複数の処理を同時に走らせる – 仮想記憶, プロセススケジューラ • デバイスファイル – 機器もファイル • シェル – ファイルとプロセスの連携 Oct. 7, 2015 ロボットシステム学 14
  15. 15. オープンソースの走りとしてのUNIX • 当時AT&T はコンピュータで商売できない(独禁法) – コードを配布 – 企業、研究機関、教育機関に広まる • 1984年商売解禁 – ライセンス業を始め、クローズ化 – 「UNIX 戦争」が始まる • 配布されたUNIX から様々な亜種(UNIX系OS)が誕生 – ソースコードの流用 – 機能の再現 Oct. 7, 2015 ロボットシステム学 15
  16. 16. UNIX系OSの系譜 • UNIX直系: 大雑把に言ってSystem V系とBSD系 – ものによって使用感が異なる – 我々がよく使うもの(ロボットの世界だとBSD系が多い) • FreeBSD, NetBSD, OpenBSD, OS X, iOS… • MINIX, Linux – UNIXのコードを含まないが動作はUNIX – MINIX(1987年〜) • UNIX がクローズ化したためタネンバウムによって教育用に開発 Oct. 7, 2015 ロボットシステム学 16
  17. 17. Linux • 当時ヘルシンキ大学の大学生だった リーナス・トーバルズがMINIX 上で開発(1991年) – 冬季に部屋に引きこもって開発 – メーリングリストで助言、協力を得ながらゼロから開発 • バザール方式 • 広まった理由 – ゼロから開発したことで制約が少ない – 協力者が多い – タイミング(PCの普及, Microsoftの影響, ライセンスの問題) Oct. 7, 2015 ロボットシステム学 17
  18. 18. Linuxとディストリビューション • Linuxの構成 – Linuxカーネル(OS本体) – 付属のソフトウェア(コマンド、パッケージシステム、GUI等) • 付属のソフトウェアをどういう構成にするかで多数の 「ディストリビューション」が派生 – 系統図 Oct. 7, 2015 ロボットシステム学 18
  19. 19. 主なディストリビューション • 三大系統 – Red Hat 系 • RedHat linux から派生しているもの。ビジネス用途でシェア – slackware 系 • 最古のディストリビューションslackware から派生 – debian 系 • Debian GNU/Linux から派生しているもの • UbuntuもRaspbianもこの系統 Oct. 7, 2015 ロボットシステム学 19
  20. 20. Linuxでプログラムが走る仕組み • 「プロセス」を理解しましょう – マイコンとの違いは? Oct. 7, 2015 ロボットシステム学 20
  21. 21. プロセス • プログラム実行の一単位 • 実行中のプログラム+OSが準備した付帯情報 – プロセスID、ユーザ、親プロセス • 普段はps(1)やtop(1)で調査 – CPUやメモリ使用量、ゴミプロセスがないか調査、等 – 一つのプロセスについて調査したければ /proc/<プロセス番号>を見る – プロセス情報もファイルで提供される。なんでもファイル Oct. 7, 2015 ロボットシステム学 21
  22. 22. カーネルから見たプロセス • リソースを割り当てる一単位 – メモリの割り当て • プログラムが自身のプロセス外のメモリを参照しないよう保護 • 仮想アドレス空間 – CPU の利用時間(タイムシェアリング) • 優先度の高低を考慮 • 端末とのやり取りが多いものほど高頻度 ↑ロボットを動かす時に問題となる Oct. 7, 2015 ロボットシステム学 22
  23. 23. プロセスツリー • プロセスはプロセスから生まれる – fork-execと呼ばれる仕組み • 家系図(プロセスツリー)ができる – pstree(1) – initというプロセスからぶら下がる • プロセスツリーの役割 – 親子間で環境や開いているファイルを引き継ぐ Oct. 7, 2015 ロボットシステム学 23
  24. 24. プロセスの一生 1. あるプロセスからforkして生まれる 2. 新しいプロセスIDをもらう 3. 親の情報をすべて自分のメモリ空間にコピー (コピーしない場合もある) 4. (execされた場合)プログラムの部分が入れ替わる – 例(execを行うシェルスクリプト) 5. プログラム実行 6. 終了。終了ステータスを返す – 0が正常終了、1が何らかの異常 Oct. 7, 2015 ロボットシステム学 24
  25. 25. プロセスとメモリ • プロセスは、基本的に他のプロセスが 使っているメモリの中身を見ることができない – 見ることができたら事故 • 仕組み: 仮想記憶 – 問題: 右のような1列のメモリを どう複数のプロセスに割り当てる? Oct. 7, 2015 ロボットシステム学 25
  26. 26. 仮想記憶(ページング方式) • アドレス空間を二種類用意 – 物理アドレス空間(DRAMやその他を直接指す) – 仮想アドレス空間(プロセスごとに準備) • アドレス空間を「ページ」に分割 • 仮想のページと物理ページを対応付け Oct. 7, 2015 ロボットシステム学 26
  27. 27. 仮想記憶の導入で可能となること • lazyな物理メモリ割り当て – プログラムが割り当てのないページの番地に アクセスした時に、物理メモリのページを割り当て – 割り当てのないページの番地にアクセスすることを 「ページフォルト」と言い、これが起こると割り当てが起こ る • スワップ – メモリが不足時にページ上のデータを ストレージ上のページに追い出せる(スワップアウト) – 仮想アドレスの先が物理メモリである必要がなくなる Oct. 7, 2015 ロボットシステム学 27
  28. 28. • キャッシュの管理が簡単に – プロセスが使用していない物理メモリのページに 読み書きしたファイルのデータを記憶 • キャッシュが有効だとHDDの読み書き 回数を減らすことができる Oct. 7, 2015 ロボットシステム学 28
  29. 29. プロセス間の通信 • 仮想記憶の仕組みから分かるように、 プロセス内の情報は直接、他から見えない • データを出し入れする口が必要 – 共有メモリ • ロボットのように高速・ランダムなやりとりが必要な時に利用 – ファイルシステム (これが基本。しかしなんでファイルが通信なの?) – ソケット(前期にやりましたね?) • ただしこれはPCの外とのやりとり – シグナル • データの出し入れというより合図のやりとり Oct. 7, 2015 ロボットシステム学 29
  30. 30. ファイルの読み書き • プロセスは開いたファイルを 「ファイル記述子」という数字で管理 Oct. 7, 2015 ロボットシステム学 30 pi@raspberrypi ~ $ cat main.c #include <stdio.h> int main(int argc, char const* argv[]) { FILE *f = fopen("hoge","w"); sleep(100); return 0; } pi@raspberrypi ~ $ gcc main.c pi@raspberrypi ~ $ ./a.out pi@raspberrypi ~ $ ps u | grep -F a.out pi 8405 0.0 0.0 1688 300 pts/0 S+ 05:23 0:00 ./a.out (略) pi@raspberrypi ~ $ ls -l /proc/8405/fd total 0 lrwx------ 1 pi pi 64 Oct 27 05:23 0 -> /dev/pts/0 lrwx------ 1 pi pi 64 Oct 27 05:23 1 -> /dev/pts/0 lrwx------ 1 pi pi 64 Oct 27 05:23 2 -> /dev/pts/0 l-wx------ 1 pi pi 64 Oct 27 05:23 3 -> /home/pi/hoge ファイルを開いて放置するプログラムを 書いて実行 プロセス番号を調べて/proc/<番号>/fdを見ると 開いたファイルはファイル記述子3で管理されている
  31. 31. ファイル記述子0,1,2 • なにこれ? – ファイル/dev/pts/0につながっているようだ • /dev/pts/0 – a.outを実行した画面でttyと打つと表示される Oct. 7, 2015 ロボットシステム学 31 pi@raspberrypi ~ $ ls -l /proc/8405/fd total 0 lrwx------ 1 pi pi 64 Oct 27 05:23 0 -> /dev/pts/0 lrwx------ 1 pi pi 64 Oct 27 05:23 1 -> /dev/pts/0 lrwx------ 1 pi pi 64 Oct 27 05:23 2 -> /dev/pts/0 l-wx------ 1 pi pi 64 Oct 27 05:23 3 -> /home/pi/hoge pi@raspberrypi ~ $ tty /dev/pts/0
  32. 32. ttyって何? • これ(テレタイプ社ASR-33) – teletype(遠隔タイプライター) • 端末 – タイプライターを通信の線(電話線等)で 計算機に繋いだもの • キーボードに字を打って字を計算機に送信 • 計算機から字を受けて紙に印字 • 少し時代が進むと紙がディスプレイに(DEC VT100) – 基本機能は変わってないので引き続きTTYと表記 Oct. 7, 2015 ロボットシステム学 32
  33. 33. 現在の端末(端末エミュレータ) • パソコンの中のソフトウェア – パソコンのモニタとキーボードを使ってタイプライターや VT100の役割を果たす – 通信: TCP/IP、シリアル通信等(通信できればなんでもいい) Oct. 7, 2015 ロボットシステム学 33
  34. 34. 結局どういうことか Oct. 7, 2015 ロボットシステム学 34 • プログラムと端末エミュレータが /dev/pts/0というファイルを通じて通信 • この仕組みで複数の端末を相手 端末エミュレータ OS プログラム (シェル) /dev/pts/0 記述子 0,1,2
  35. 35. プロセスとプロセスの通信 • ファイル記述子とファイル記述子を結びつける Oct. 7, 2015 ロボットシステム学 35 pi@raspberrypi ~ $ seq 100000000 | grep 12345 12345 112345 123450 123451 123452 ... seqというプログラム(コマンド)と grepというプログラム(コマンド)を パイプでつなぐ pi@raspberrypi ~ $ ps u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND pi 8538 101 0.0 3224 328 pts/0 R+ 06:44 0:14 seq 100000000 pi 8539 1.4 0.1 3568 1796 pts/0 S+ 06:44 0:00 grep --color=auto 12345 (略) プロセス番号を調べて /procの下を見るとどうなるか?
  36. 36. • seq側の1番とgrep側の0番が「pipe」で接続されている • ファイル記述子0,1,2: 標準で用意されるデータ受け渡し口 – 0番: 標準入力 – 1番: 標準出力 – 2番: 標準エラー出力 • シェル: ファイル記述子を操るのが大きな仕事の一つ Oct. 7, 2015 ロボットシステム学 36
  37. 37. (先取り)ROSのUNIX的解釈 • ROSは後からやるので知っている人だけに • ノード(プロセス)をTCP/IPやUDPで通信させる – 同じ計算機、違う計算機のノードをシームレスに接続 • ネットワーク周りはファイルに抽象化されていないので マスタでファイルに見せかけている – ROSトピック • 単にUNIXというのはソフトウェアではなく、データの 蓄積、通信方法の「標準的な考え方」になっている – 分かってない人は筋の悪いものを作ることになります。 Oct. 7, 2015 ロボットシステム学 37
  38. 38. 本日のまとめ • OSの乗った計算機 – マイコンには無い概念 • プロセス • 仮想記憶 • ファイルシステムとファイルを通じた通信 • UNIXやLinuxはデータを流すように使う – 使いこなすのは大変だが、これで機械の制御から ウェブサービスまでの広範囲がカバーされている – 考え方に親しむことで大きなシステムを作ることができる Oct. 7, 2015 ロボットシステム学 38
  39. 39. 次回 • UNIXが産んだもうひとつの重要なもの: オープンソースを扱います • 背景 • ライセンス・著作権 • クラウド • 組み込み、ロボットとの関係 Oct. 7, 2015 ロボットシステム学 39

×