O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

6.922 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

ロボットシステム学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

×