情報通信プロフェッショナル概論 · スマートフォンのosには、ios, android,...

49
情報通信プロフェッショナル概論 20121221() 岡山大学大学院自然科学研究科 鈴木 @ 株式会社OTSL 121221日金曜日

Upload: others

Post on 18-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • 情報通信プロフェッショナル概論

    2012年12月21日(金) 岡山大学大学院自然科学研究科鈴木 晃 @ 株式会社OTSL

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    はじめに! 自己紹介

    ! シニアエンジニア(技術者)、主にソフトウェア関連! 最近はコンパイラ関係や仕様策定の仕事の比率が多い! スマートフォン関係のことは仕事でも趣味でもやってます

    ! 本も書いてます。

    2

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    目次1. コンピュータはどうやって動くか1. CPUの仕組みとメモリとの関連2. コンパイラとは3. インターフェイス4. 関連する仕事

    2. スマートフォン1. プラットフォーム毎の戦略2. 開発環境3. 外部接続4. 関連する仕事

    3

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1. コンピュータはどうやって動くか

    4

    ! どのようにプログラムを組めばどのように動くかをイメージ

    ! より具体的にイメージできるようになると以下のようなことができるようになります! OSに付け入るすきを見つける! 想像外の挙動(バグ)への対処の手掛かりを見つける! 本来できないはずのことができるようになる! 劇的に効率が良くなる方法を見つける

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-1. CPUの仕組みとメモリとの関係

    5

    ! 非常に単純な仮想CPUを対象になら、CPUの動作する様子をイメージできるようになりましょう。

    ! アドレスバスとデータバス! レジスタとメモリ! プログラムカウンタ! 命令のデコードと実行

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-1-1 アドレスバスとデータバス

    6

    PC

    R1

    R2

    R3

    演算器

    デコーダ

    CPU メモリ

    アドレスバス (8bit)

    データバス (8bit)

    Read/Write

    仮想的な8ビットCPUを題材に考えてみる

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-1-2. レジスタとメモリ

    7

    R1

    R2

    CPU メモリ

    R1

    R2

    CPU メモリ

    read write

    addr

    data

    addr

    data

    R1 ← (R2) (R1) ← R2

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-1-3. プログラムカウンタ

    8

    PC

    演算器

    CPU メモリ

    デコーダ

    +1

    read

    アドレス

    データ

    メモリから「命令」を読み、それをデコーダへ渡し、PC(プログラムカウンタ)の値を一つ増やす。

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-1-4. 命令のデコードと実行

    9

    ! あらかじめ各命令に対応する数値を決めておく。例えば…

    命令 数値 (二進数)ra#←#rb 0001#aabb(ra)#←#rb 0010#aabbra#←#(rb) 0011#aabbra#←#ra#+#rb 0100#aabbra#←#ra#+#rb 0101#aabb

    ra#←#「1バイト数値」 1000#aa00#「1バイト数値」…

    例えば「(r2) ← r1」に対応する数値は「00101001」、「r1 ← 0x1f」に対応する数値は「10000100 00011111」という具合。

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    演習

    10

    ! アドレス0x80から0xffまでを数値0x00で埋めるプログラムを仮想CPUのコード(p.9)を使って作って下さい。! 0x00~0x7fまでの値はどうであっても構いません。! PC(プログラムカウンタ)の初期値は0x10とします。

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-2. コンパイラとは

    11

    ! 多くのプログラマが毎日のように使うコンパイラがどのように動くのかを考えてみましょう。

    ! プログラミング言語とは! アセンブリ言語と機械語(マシン語)! リンカとは

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-2-1. プログラミング言語とは

    12

    ! やって欲しいことを計算機に「説明」する言葉。

    プログラミング言語実行バイナリ

    (機械語)

    翻訳

    広義のコンパイラ

    (r1) ← r2 とかprintf(“abc”); とか

    0101010110001000…

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-2-2. アセンブリ言語と機械語(マシン語)

    13

    あいまい 具体的

    自然言語で書かれた要求や仕様

    アセンブリ言語Ruby

    JavaScript

    C言語

    Java

    Objective-C

    意味にぶれがない意味にぶれがある

    ! 最も具体的な言語がアセンブリ言語! CPUが直接理解できるのが機械語

    機械語

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-2-3. リンカとは

    14

    #include#

    printf(…);

    printf(…)#…

    ヘッダファイル

    foo.c

    アセンブリ言語

    foo.s

    オブジェクトファイル

    foo.o

    Printfの機械語

    printf.o(libc.aの中)

    実行ファイル

    foo.exe

    狭義のコンパイラ アセンブラ

    リンカ(linker)

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-3. インターフェイス

    15

    ! パソコンやスマートフォンに搭載されている部品、例えば画面やキーボード、タッチパネルにCPUからアクセスするというのは、具体的にはどうやっているのでしょうか。

    ! I/O (Input/Output)! API (Application Programming Interface)

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-3-1. I/O (Input/Output)

    16

    ! メモリ以外のデバイスに対する入出力! キーボード、タッチパネル、ディスプレイ、マイク、スピーカ…! Memory Mapped I/O

    R1

    R2メモリ

    CPU

    I/O

    HDDなど

    コマンド

    コマンドを解釈する小さな計算機が入っている

    特定のアドレスへの読み書きがI/Oへのコマンド送受信に対応

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-3-2. API (Application Programming Interface)

    17

    OS

    アプリ

    I/Oデバイスコマンド

    「ファイルに文字列”abc”を書き

    たい」

    アプリ

    I/Oデバイスコマンド

    OSのないシステムの場合

    OSのあるシステムの場合

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    演習

    18

    ! CPUにi386を搭載したLinuxを想定し、GCCでコンパイルするC言語のコードを考えます。func.cで宣言された変数static_aにtest.cから読み書きしたい場合に、どのような方法があるでしょう? 不可能でしょうか?! func.cは書換えないものとします。

    int#global_a#=#1;static#int#static_a#=#0;

    …void#func(void)#{##…##global_a#+=#static_a;##…}…

    func.c

    main.c

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-4. 関連する仕事

    19

    ! 組み込みシステムで関わってきた仕事のいくつかを簡単に紹介します。

    ! データ競合の解消! システムハック! デバイスドライバ作成・OSカーネル改変! マイコンプログラミング! MirrorLinkシステムの試作

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-4-1. データ競合の解消

    20

    ! マルチスレッドのプログラムでは、スレッド間のデータのやりとりのために共通してアクセスできる変数を用意する場合がある。! 意図せず複数のスレッドからアクセスしてしまっている変数も発生し得る。

    ! 深刻なバグの原因となるため、その検出や解消の方法が求められている。

    a#=#0;サブスレッドの実行開始while#(a#

  • 2012/12/21情報通信プロフェッショナル概論

    1-4-2. システムハック

    21

    ! OSの内部構造に対する理解により、通常ならできないと思われることを実現する。! このような知識は悪意のあるクラッキングに対する備えにもなる。

    ! 求められる技術や知識! 実行バイナリの内部フォーマット! コンパイラやリンカの動作内容! バイナリや動的ライブラリの呼出され方! 機械語やアセンブリ言語! (様々なレイヤーでの)デバイスへのアクセス方法

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-4-3. デバイスドライバ作成・OSカーネル改変

    22

    ! 新規開発の機器にLinuxやAndroidなどのOSを導入する場合には、リソースの見積りが必要となる。! 機能とコストのバランス! 大量生産される機器では顕著

    ! 新たなデバイスを追加する場合には、デバイスドライバを作成し、OSに組み込む必要がある。

    ! OSの内部構造に対する知識が必要

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-4-4. マイコンプログラミング

    23

    ! マイコン(micro computer, micro controller): 小さいコンピュータと思って下さい。

    ! デバイス側にもコンピュータが必要となる場合が多々ある。! I/Oの話で、HDD等にCPUからのコマンドを解釈する小さいコンピュータが入っているという話をした。

    ! iPhoneやAndroidに繋げる機器にもマイコンが必要となる。

    ! 求められる技術! 様々なCPUアーキテクチャに対する理解! デバイスを直接駆動する方法! (OSがない場合)メモリやタスクの管理など、OSが提供してくれていた機能の実装

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    1-4-5. MirrorLinkシステムの試作

    24

    画面や音声

    タッチボタン自動車情報

    MirrorLink: 2009年にNokiaが提唱

    ハンドルボタン燃費車速

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2. スマートフォン

    25

    ! スマートフォン業界やネット業界は好調で、ソーシャルゲームなどの派手な分野が注目されています。

    ! 派手なところに参入する企業は多いので、昔ほど簡単には利益を出せなくなってきました。

    ! 他社には真似しにくい何らかの強みが求められます。

    ! OTSLは「他の機器との接続」を強みとしていますので、その関連の話をします。

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-1. プラットフォーム毎の戦略

    26

    ! スマートフォンのOSには、iOS, Android, Windows Phone, BlackBerryなどあるが、ここではiOSとAndroidについて話します。

    ! スマートフォンの登場! iOSとAndroidの紹介! 戦略の違い! AppStoreとGoogle Play

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-1-1. スマートフォンの登場 (1)

    27

    PSIONGeneralMagic

    Message Pad

    Apple

    SHARPMicrosoft

    Nokia

    Zaurus

    Palm

    PocketPC

    Symbian S60

    Hiptop

    Treo

    CLIE

    SONY

    Windows Mobile

    Andy Rubin

    Steve Jobs

    Jeff Hawkins

    Android

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-1-1. スマートフォンの登場 (2)

    28

    Apple Google

    2005/06 Android

    2007/01 iPhone

    2007/06 iPhone ( )

    2007/11 Android

    2008/03 iPhone SDK

    2008/67

    SDK , iPhone 3G

    2008/10 HTC G1 ( ), 1.0 SDK

    2009/05 HT-03A ( )

    iPhone Windows MobileSymbian

    WebKit

    Google(

    )

    iTunes, Pod cast, OS

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-1-2. iOSとAndroidの紹介

    29

    ! iPhone, iPod touch, iPad mini, iPad! 基本的にはiPhone, iPadの2種類のユーザーインターフェース

    ! CPU, GPUは世代毎に固定! 実機での開発にはiOS

    Developer Programへの加入が必要 (8,400円/年)

    ! アプリ開発にはMacが必要

    ! 2inchから20inchまで多種多様なデバイス

    ! 様々なCPU (ARM, Atom, MIPS…)やGPU

    ! アプリ開発は無料! Google Playでアプリ公開する際には、初回のみ25USDが必要

    ! SDKはMac OS, Windows, Linux用が提供されている

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-1-3. 戦略の違い

    30

    ! iOS! 定期的な新規ハードウェア発売

    ! 2年前の機器まで最新OSでサポート

    ! 新OS発表と同時に、最新OSへのアップデート開始! 製品寿命が長い傾向

    ! エンドユーザ指向

    ! Android! 一年中新製品が様々なメーカから発売! いつでも最新スペックの製品を買える

    ! 発売後、一度もアップデートが行われない場合もあり

    ! デベロッパ指向

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-1-4. AppStoreとGoogle Play

    31

    ! iOS AppStore! アプリ配布の唯一の方法

    ! 組織内配布、β版用配布は別途用意されている

    ! 人手による審査あり! 使いやすさや類似アプリの有無まで審査される

    ! 担当者によるばらつきの問題あり

    ! 開発者の取り分は70%! Appleの取り分は30%

    ! 課金は必ずAppleを通す

    ! Google Play! アプリ配布の様々なチャンネルの一つ

    ! 審査なし! 違法コンテンツやマルウェアに対する自動検知システムは導入済み

    ! 開発者の取り分は70%! Googleの取り分は5%→GoogleはAndroid単体では利益を出していない

    ! キャリア課金にも対応

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2. 開発環境

    32

    ! iOSとAndroidに対するアプリ開発環境を紹介し、比較します。

    ! 開発用プログラミング言語! 統合開発環境! シミュレータ! クロスプラットフォーム開発環境

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2-1. 開発用プログラミング言語

    33

    ! iOS : Objective-C! 動的なGCはない

    ! 静的なGCと呼べるARCを搭載

    ! CやC++もシームレスに利用可能! Objective-C自身がC言語の拡張

    ! CやC++で記述された様々なライブラリが利用可能

    ! Open GL ES 2.0! C言語のインターフェイス

    ! Android : Java! 動的GCを搭載! 動作は遅かったが、徐々に

    VMの性能が向上しつつある! Javaで書かれた豊富なライブラリが利用可能

    ! NDKの利用でC, C++も利用可能! Javaとの接続にはJNIを使うため、オーバーヘッドが存在する

    ! Open GL ES 2.0! Javaから呼び出す

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2-2. 統合開発環境 (1)

    34

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2-2. 統合開発環境 (2)

    35

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2-3. シミュレータ

    36

    ! iOSシミュレータ! ホストOSであるMac OSと基底部分を共有し、アプリを実行! 高速起動、高速動作! シミュレータのバイナリは実機では動作しない

    ! ロジックの確認はできるが、使用可能メモリの制限など実機と異なる点が多い! 実機での検証は欠かせない

    ! Androidエミュレータ! ARMエミュレータを介して実行される! 動作が非常に遅い! エミュレータのバイナリが実機でもそのまま動作する

    ! Intel版のAndroidエミュレータではCPUエミュレータが不要! 高速に動作! まだ制限が多い

    ! 様々な設定でエミュレータを動かすことが可能! しかし実機での検証はできる限り行いたい

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2-4. クロスプラットフォーム開発環境 (1)

    37

    Titanium Mobile JavaScript OS

    PhoneGap JavaScript + HTML Web Web

    Rhodes Ruby + HTML + JavaScript

    Web Ruby

    MonoTouch C# (.NET) OpenGL

    ngCore JavaScript OpenGL ? DeNA

    Corona Lua OpenGL

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-2-4. クロスプラットフォーム開発環境 (2)

    38

    ! iPhoneらしいアプリ、Androidらしいアプリ

    ! OpenGLベースのものは「そのプラットフォームらしい」外見になりがち

    LEGOLAND Calironia

    Corona: Pig Me Up - Pro

    Corona: Football Ping Pong World Cup

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-3. 外部接続

    39

    ! iPhoneやAndroid携帯にキーボードやヘッドセットを接続するのは一般的になってきましたが、それ以外にも繋ぐと面白いものは多数あります。

    ! 有線接続! Bluetooth経由での接続! Wi-Fi経由での接続! その他の接続方法

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-3-1. 有線接続

    40

    ! iOS : Mfi! マイコンプログラミング! Apple社との通常のアプリ開発よりも条件の厳しい契約が必要

    ! Android : USBホスト&ADK! ADKではマイコンプログラミングが必須

    ! プロトコルやリファレンスハードウェアまで公開

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-3-2. Bluetooth経由での接続

    41

    ! 最近はBluetooth 2.1+EDR, 3.0, 4.0辺りの表記がよく見られる! 2.1+EDR: 省電力強化、ペアリング手順簡略、Enhanced Data Rate

    (3Mbps)! 3.0+HS: 802.11 Protocol Adaption Layer! 4.0: Low Energy、大幅な省電力化! ※規格としては4.0が3.0+HSを内包しているという訳ではない! ※4.0+HSは実質3.0+HSを内包していると考えてよい

    ! iOSではBluetooth 3.0までを扱うためにはMFiが必要だった。! iOS5以降及びBluetooth 4.0の組合せで、iOSでもシリアル通信が可能に

    ! Androidでは以前からSPPが利用可能であった

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-3. Wi-Fi経由での接続

    42

    ! 広く使われており、搭載機器も多いため使い勝手が良い

    ! 802.11 b/g/n (2.4GHz)であれば最近の機種であれば対応。一部 802.11 aや5GHzのnも対応。

    ! 同じネットワークに属していれば、一般的なTCPやUDPでの通信が可能→過去のノウハウを利用可能

    ! 高速! 消費電力は大きい! iPhoneでもAndroidでも自由に使える

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-4. その他の接続方法

    43

    ! ヘッドホンジャック (ソフトモデム)! iOSデバイスとAndroidの双方で利用可能

    ! NFC! Android限定

    ! 全てのAndroidスマートフォンで利用可能という訳でもない

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4. 関連する仕事

    44

    ! スマートフォン関連で関わってきた仕事のいくつかを簡単に紹介します。

    ! ホームヘルス機器 (iPad)! 外部デバイスからの地図操作 (iPhone)! 他アプリの画面映像の取得 (iPhone/Android)! タッチイベントをシステムに送り込む (iPhone/Android)! ZigBeeデバイス同士の通信状態を監視

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-1. ホームヘルス機器 (iPad)

    45

    ! 12時間連続して、Wi-Fiを用いて機器からiPadへとデータ通信! データを解析し、リアルタイムに機器へと指示を送信

    ! 用いた技術! iOSアプリ開発! C言語による部分的なクロスプラットフォーム (解析エンジン)! プロトコル策定! ストリーム通信! (スマートフォンにしては)大量のデータを扱う手法! マイコンプログラミング! ハードウェア設計

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-2. 外部デバイスからの地図操作 (iPhone)

    46

    ! 有線接続のためMFiを利用

    ! 用いた技術! iOSアプリ開発! シリアル通信! マイコンプログラミング

    iPhone, iPad

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-3. 他アプリの画面映像の取得 (iPhone/Android)

    47

    ! MirrorLinkサーバを作成するための技術基盤

    ! 技術的には、他アプリの情報を盗みとるアプリも配布可能! 入力しているパスワードを完全に抜きとる事も可能! 社会的に問題があるため、実際には配布しません

    OS画面

    表示されているアプリ 画面映像取得アプリ

    本来であればroot権限なしに他アプリの情報は取得できない

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-4. タッチイベントをシステムに送り込む (iPhone/Android)

    48

    ! MirrorLinkサーバを作成するための技術基盤

    ! 前ページの技術と組合せると、他人のiPhone/Androidを遠隔操作することも技術的には可能! AppStore, Google Playでの配布はしない! 技術的にどこまでできるかを把握することで、セキュリティに対するアドバイスも可能となる

    OSタッチパネル

    表示されているアプリ 画面映像取得アプリ

    本来であればroot権限なしにタッチイベントの発生はできない

    12年12月21日金曜日

  • 2012/12/21情報通信プロフェッショナル概論

    2-4-5. ZigBeeデバイス同士の通信状態を監視

    49

    ! ZigBeeは省電力! 機器にバッテリを搭載せず、ボタンを押す力で発電し、信号を送信することも可能

    ! 用いた技術! Titanium Mobile

    ! iPhone用、Android用を制作

    ! ストリーム通信! マイコンプログラミング! ハードウェア設計

    12年12月21日金曜日