Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
情報通信プロフェッショナル概論
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日金曜日