2011年2月11日金曜日

横浜Androidプラットフォーム部第6回勉強会のメモ


横浜Androidプラットフォーム部第6回勉強会が2/11に石川町でありました。
その際の自分用のメモを公開します。ごにょごにょと書いてあるところはメモが追いつかなかった箇所。後日資料が出て来てから考えよう。

長いので詳細はつづきから。





ATND:http://atnd.org/events/12030
Ust : http://www.ustream.tv/channel/androidpf

自己紹介

@myb1126     MonkeyRunnerの仕組みについて(仮)
monkeyrunnerとは?
Gingerと同時にリリース
PC上で動作するテストロボットツール
Jythonで記述する
・テストロボとは?
打鍵、画像比較
・対象テスト
再起テスト/機能テスト
・複数のデバイス制御/Ginger以前に対応

機能テスト
・Androidのタッチ/キー/ドラッグ文字入力等の操作でアプリケーションが正しく動作するかテスト
・スクリーンショットの取得が可能
再起テスト
・事前に設定したスクリーンショットと機能テスト実行時に取得したスクリーンショットを比較

monkeyはストレステスト

ユーザー操作のレコード/プレイヤー
ユーザーとの対話
APKのインストール
Instrumentの実行
再起動
シェルコマンド
Activityの起動
プロパティの取得
プラグイン機能に対応

公式にサンプルがある

monkeyrunner仕組み
Pythonで実装できる理由
Jythonだから
StrutsなどでGUIもかける
デバイスとの通信部分
Adbを経由する
→sdk/monkeyrunner/・・・/adbBackend.java
要するによく使う物をラッパーしたもの
AdbHelper.javaに行き着く

まとめ
スクリプト言語でかけるので実行が用意
機能テスト/再起テストが容易にできる
PF開発者にはまだ弱い

質疑
root権限は必要?
→NSでしか試してないからちょっとわからない
セキュリティ的にバックエンドになるんじゃない?
→ちょっとわからない
エミュレータでも動くのか?
→Linux版 Windowsでも動くんじゃね?Jythonだし
テスト方法
→クリックは座標指定でする
センサー系のテストは可能?
→まだ未対応

@kishima     GoogleTV Hacksの紹介
コンデンサの隣からひとこと
Rubyや組み込みに興味ある人

現物は北米

GoogleとTVベンダーと協力して作ったAndroid for TV PFのこと
→AndroidをブランチしたOSを積んでる

現状売っているもの
Sony NSX-40GTI
Sony NSZ-GTI
Logitech Revue

Google TVのRoot化に$1000の賞金がかかっていたが、1月に成功したチームが出て来た
www.gtvhacker.com

手順(Log版のみ)
ふたをあける
シリアル通信用の線を出す
メンテナンスモードで起動
あら、不思議。Root化しちゃってます
すでにF/Wが対策されてバージョンアップ済み

OSSな部分もある
googleコード/p/googletv-mirrored-source/

ffmpegがある
chromeにffmpegがある
ソフトウェアエンコードしてる?

Qr Embedded Linux 4.5が入ってる
LGPLライセンス

boot.imgを展開しようとしたらうまく行かない
→あきらめて/systemの内容を紹介

systemの中にappがある(中にはapkファイルがある)
netflix
ネット動画が見れるサービス(VOD)
libの中にQtがある。netflixのためだけにQtを突っ込んでるんじゃないかって状態

Javaのライブラリ
/system/framework以下にodex用に最適化された物しか入っていない
smaliを使ってdeodexにしようとしたけどうまくいかない
→テキストエディタで開く

/system/appにプリインストールアプリがある

2.1から別れてる
ヒープメモリが48m


@androidzaurus     StrictModeのLT (1/26追加)
ディスクとかネットワークへのアクセスがUIスレッドで動いてるのを検出する
門番さんはだれ?どうやって検出してる?
packages/experimental/StrictModeTest
Disk R/W network
dialog/log/dropbox(共有つーるじゃないよ) に出力することが出来る
/data/system/dropbox

StrictMode.enableDefaults();をコードに入れると有効になる
BlockGuardクラスのメソッドが判断してるっぽい
policyはインターフェイス
→ってことはどこかにimplementsしてる奴が居るだろう
WrappedFileSystem

/libcore/dalvicの下
(ごにょごにょ)

StrictMode.java
/frameworkes/base(ごにょごにょ)

BlockGuard.java

find . -name "*.java" | xargs -0 -e grep BlockGuard
Native AppでもStrictModeが発動するらしい


@magoroku15     20分で理解する仮想記憶(2/1追加)
OS屋さん出身の組み込み屋さん
つ部の人
magorokutvで検索

メモリの制限への対応
オーバーレイ
プログラムを分割して処理する
親分が1の処理をしたら次に2を処理してって次々にやっていく
有効か?
プログラムの局所性

プログラムの局所性
fetch/decode/execute
C言語のプログラミングモデルでは命令。データ、スタックの3点のみを参照
(ごにょごにょ)

仮想アドレス、実アドレス
アドレス空間の一部にメモリを割り当てる
今必要な部分をメモリに
その他は
(ごにょごにょ)

アドレス変換
変換表を通ると別の番号へ入れ替わる
ページ単位 数キロバイト
仮想アドレスのページ番号を実アドレスのページ番号に変換する
ちょこっとのアドレスを大きく見せる技
変換表をOSが用意して、CPUに通知する

アドレス32ビット ページサイズ4KByteの場合
4kbyteは0x1000
16進数で3桁は変換表に含まない

変換表を2段にする
セグメント 
変換キャッシュ

System360で使ってるアドレス変換の方法
System360とPDP11が今のコンピューターの原点

仮想記憶と*nux
forkの高速化
forkはプロセス空間の複製をする
メモリコピーをするのでシステム規模がでかくなるとコスト増加
COW
プロセスの仮想記憶の管理テーブルのみを複写する
ファイルシステムの高速化
ファイルシステム用キャッシュメモリ量を自動調整
execの高速化
パスで指定されたファイルの内容でアプリケーションのメモリを書き換え
→プログラムの起動に近い
仮想記憶テーブルを作るだけ
カーネル内でmmap
変換失敗したらファイルから読み込む
変更はCOWで保護



@sekitoba     はじめてみよう、プラットフォーム!(Kernel2.6のマルチコア対応)
SnapMapを作った人
まごろくさんのUst
仕組みを知らないとソースは読めないのでざっくり背景を把握する
スケジューラー/ラン・キュー
kernel2.6までは窓口は複数はあるけど、順番待ちの列は1つだけなイメージ

kernel 2.6では
CPU毎にラン・キューを持っていて、優先度別に分けられた複数のリスト。
activeとexpiredキューがある
active
expired
処理をしたプロセスが入る
全部処理したらActiveとexpiredを入れ替える
タスク
散歩
プロセス
玄関に居て、靴片方履いて、小銭をポケットに入れてみたいな状態を表す

task_structにタスクの状態(レジスタとかスタックポインタとか)を格納して次のプロセスの処理を行う
メモリ空間の切り替え
switch_mm()
レジスタ状態の切り替え
switch_to()

scedule()
 /kernel/sched.cにある



@hermit4     Initのそれからそれから〜Zygoteの役割とSystemServer
initの復習
 pakuqi
 hermit
 pakuqi
 tetsu_koba

ブート処理
init.rcのパース
ディレクトリの作成、マウント
デーモン起動
デーモン処理
起動したデーモンの監視、プロパティの変更監視

init.rc
/sbin/ueventd
/system/bin/servicemanager
/system/bin/vold
/system/bin/netd
/system/bin/rild
などなど
PPIDは立ち上げたプロセスのPID
0はカーネルから立ち上げられたプロセス
カーネルスレッド
定期的にCPUの空き時間がある際に実行するための仕組み
なぜPSで見えるのか?
→他のプロセスと同じ情報を与えてスケジュール管理することでカーネルスレッドがCPUが占有しないようにするため
スケジューリングを行うのは結構コストが高いので、要求はkthreaddに入れてそちらで処理をする
Javaでくまれたアプリは既に準備されたZygoteをforkして起動される
Zygoteの役割
/system/bin/app_process
DalvikVMプロセスをforkする


(ごにょごにょ)





0 件のコメント:

コメントを投稿