2011年7月18日月曜日

横浜PF部 第11回メモ


@sekitoba
はじめよう!プラットフォーム Kernel2.6のマルチプロセッサー対応その3(仮)
@akryokoyoko
その後の現状での活動報告(USBの表面的なこと)
@magoroku15
Androidの入力システム(仮)
@l_b__
OpenBinder Android IPCの2回目 

メモ内容はつづきへ






@sekitoba
はしめよう!プラットフォームKernel2.6のマルチプロセッサ対応その3
今日は二日酔い
snapmapは先月から10件ほど増えた
昨日もABCあとに30キロほど乗り過ごした

pandaboardを買った
ディスプレイをつないだらUSB給電だとあやしい?
9VのACをつないで殺しちゃった

Andyと写真とったよ自慢
Nexusほにゃほにゃを触った!

ABCは勉強になったよ
居酒屋の写真

前回まで
カーネルがどのようにタスクを切り替えてマルチタスキングしてるか調べた
O(1)スケジューラを調べてた
ランキューというキューイング

ランキューにキューがたまる、
スケジューラーがCPUに食わせる
#これは結構古いキューイングらしい

2.6.24以降は使われてない
CFSが使われてる

Pandaのソースを読むと
Complitely Fair Scheduler
完璧に公平なスケジューラー

木構造
2分探索木
赤黒木 Red-Black tree
説明があったけどあとでググる
数字は処理された時間
数字が小さいのが次に実行されるタスク
どんどん木構造が処理を進めてくとバランスが崩れる
赤黒でバランスを取る
タスクの構造体と木の表現方法
タスクすトラクト
stract_entity?
読めないからスルーする
runqueuesにる0とノードへの構造体への参照がある
どうやってスケジュールするか
1、周期を決める なんか式があった。
2、その周期に全部のタスクを割り当てる ボーナスを付けてた
3、タスクが増えるとスライスが短くなりすぎてタスクを切り替えるコストが増える
不可に応じてタイムスライスが変動する
4、CPUに割り当てられた時間が短いタスクを優先的に実行する
ここもボーナス付けてた

まとめ
ぱんだこわれた
ABCは呑んだくれた
機構オズをつけたスケジューリングで公平性の高いスケジューリングが可能になった

質疑
なにが公平になった?
ランキューは優先度で処理してたけど、キューで優先度高いのが後ろに入っている可能性があった。
木なら優先度高いのが先にさばけるようになった。

木は優先度ごとにある?
CPUごと?
宿題にする

赤黒木
木が大きくなっても線形に大きくならない
葉を入れたり消したりすることがあるけどうまいこと処理してくれるよ
一番長いパスと短いパスが2倍以上の差がでない

木構造
log(n)とかなんかアルゴリズム的な話が出てきたけどよくわかんなかった

@roishi2j2さんのツイートから引用
O(1)スケジューラのオーダは当然O(1)だけど、CFSのオーダーはたぶんO(log(n))になるはず。
 つり合いのとれた二分木の高さがlog(n)なので。ただCFSではある程度二分木が崩れるのを許容する。最悪は1直線に並ぶときでO(n)になるかも。よくわからない

木は再構築する?
実行したら別の木に移動させる
全部実行したら別の木に映る?
ActiveとExpiredでやりとりしてるイメージかな

性能
よくなったかわるくなったかまだ調べれていない



@akryohoyoko
その後の現状での活動報告

IS05ユーザー
BeagleBoardを中古購入
Androidは趣味

活動のきっかけ、成り行き
前回の発表で通信関係に興味アリと報告
親睦会で端末でセンサつけてサイクルアプリとか作りたいなと発言
個人的には有線が好き
端末にUSBあるじゃん
→んじゃUSBの勉強しよう

作業開始時はUSBの仕様は知らなかった
Froyoが発表された時期
AndroidのUSB通信についての日本語の情報が全然なかった

AndroidはLinuxベースだからLinuxのカーネルから勉強すれば良いのでは?
第一段階の目標
LinuxカーネルのUSB制御を理解する
LinuxのPCとUSBデバイス間で通信させる

環境
通信相手
「今すぐ使える パソコン計測 USBマイコン基板」の付録
付録ではWin環境でのドライバや操作アプリが用意されていた

PC Ubuntu 10.10 2.6.35ベース
LinuxのUSB Sub System構造
Linuxデバイスドライバ第3版より
USBデバイスドライバあたりを作ればよさそう

USBコントローラ
通信方式
1.1 OHCI/UHCI
          2.0 EHCI
          3.0 xHCI

USBデバイスドライバの構造
インターフェース エンドポイントを複数持ってる
エンドポイント
種類とアドレスを持ってる

エンドポイントの種類
コントロール(CONTROL)
USBデバイス設定、読み込み
割り込み(INTERRUPT)
どんどんデータを相手に渡す
キーボード、マウス
バルク(BULK)
大きなデータをパッケージにして送る
かならず送り切ることを保証
当時間隔(ISOCHRONOUS)
一定間隔で送る
雛形USBデバイスドライバ
/drivers/usb

モジュール定義
flie_operations構造体で宣言した関数の定義
file_operations構造体宣言
usb_class_driver構造体宣言
usb_driver構造体で宣言した関数の定義
usb_driver構造体宣言
モジュールの組込と取り外しの定義

カーネルをコンパイルするときにデバッグで有効にすれば以下のコマンドでUSB通信が見れるコマンドができる
sudo /sys/kernel/debug/usb/usbmon/3u

@magoroku15
Androidの入力システム

最近横浜市民になった
カーシェア便利
ぐだ生が累計1万2千人視聴が超えた
geekbarも快調

Androidの入力
癖がある
調べ方とかの話
下から上へ

タッチスクリーン
単純、面白い

タッチスクリーン・ドライバ

タッチスクリーンの仕組み
基本的な構造
0点をGND、軸の終端にVを与える
押した点の2点の分圧値を測定
4線式のタッチスクリーン

タッチスクリーンコントローラ
タッチスクリーン自体はアナログデバイス
読み取りには最低ADCが必要
マイコンでは直接ADCにつなぐ
Androidでは専用のコントローラで接続
PMICを兼ねるバアも多い
drivers/input/touchscreenを参照

usbtouchscreen.c
ここの層だと0x7FFを最大値にしての値が帰ってくる
レイヤーが上がるごとに意味が変わっている

usbtouch_process_pkt関数
Linuxのシステムの値に変換している
マウスとかはEV_REL 装置的に相対座標でしか出せない
タッチスクリーンはEV_ABC
FF ー>フォースフィードバック
/dev/input
/dev/input/eventNをopen後にreadして、struct input_eventを読む

struct input_event {
   struct timeval time; //時間
   _u16 type; //種別
   _u16 code //コード
   _s32 value;
};


/dev/uinput
仮想入力装置をioctlで定義
uinputにeventを書きこむと/dev/inputで読める
VNCサーバ、センサマネージャーで利用
展示会で自動運転するときに便利

eventHub
frameworks/base/libs/ui/EventHub.cpp
frameworks/base/libs/ui/InputReader.cpp
LinuxをAndroidへ翻訳

EventHub.cpp
EventBub::getEvent()
Linuxの世界をAndroidの世界へ翻訳している

InputReader.cpp
InputReader::loopOnce()
InputReader::consumeEvent()


@l_b__
OpenBinder Android IPCの2回目

OpenBinder読んでみたら興味深かった
www.angryredplanet.com/~hackbod/openbinder/
introduction to OpenBinder and 

OpenBinderとは?
BeOsに採用される予定だった
WindowsのCOMのように分散コンポーネント環境を提供

OpenBinder=COM

COMって?
OpenBinderって?
OpenBinder Binder Kitの説明
OS上にViewフレームワークや、メディアフレームワークを構築するためのコンポーネント
フレームワークをつくるためのフレームワーク

分散コンポーネント環境
システムを昨日分散し適切にネットワーク上のマシンに配置
昨日をコンポーネント化して再利用性を高める
CORBA JavaRMI

@IT スキルアップのための分散オブジェクト入門

リモートオブジェクトを呼び出すためのインターフェースを定義する必要がある
IDL

分散コンポーネント・オブジェクトの仕組み
スタブとスケルトン
インターフェース定義をコンパイルして、ローカルクライアント側で使用する

スタブ
Proxyオブジェクト
AIDLか!
リモートのオブジェクトを手元で触れる
スタブにアクセスすることでリモートオブジェクトを直接アクセスするかのように操作ができる

スケルトン
クライアントから北メッセージを案マーシャリングしてリモートオブジェクトに渡して呼び出し

分散システムの機能の特徴
・リモートオブジェクトをbind(登録)
・bindされたリモートオブジェクトをlookup(検索)
・lookupしたリモートオブジェクトをcall(呼び出し)
をする仕組みを持つ


ブラウザとWebサーバーとDNSの仕組みも同じ

CORBAの場合
特定のOSや言語に依存しない共通インターフェース
IDLで呼び出し先オブジェクトインターフェースを定義
IIOPでCOMやJavaRMIと通信が可能

IDLを作成、IDLコンパイラでコンパイル
スタブとスケルトンをそれぞれの言語で実装
オブジェクトの登録は色々なサービスが用意されている

JavaRMIの場合
Javaプラットフォーム
IDLは使わず、Javaのインターフェースでリモートインターフェースを定義

インターフェースを定義して、これを実装するリモートオブジェクトクラスを作成する
リモートオブジェクトから

COM/COM+の葉葵
Win上で動く、言語はWin上で動けばOK
スクリプト言語でオートメーション
オブジェクトの登録・呼び出しにはレジストリを仕様
参照カウントが0になったら自分を削除する
サーバ側はpingを使ってクライアントの生存確認を行い、メッセージが戻らない場合は参照カウントを減らす

参照カウント
GCの動作のひとつ
オブジェクトに対しどれだけ参照されているかカウントする
循環参照
弱い参照

OpenBinder
C++で記述、Linux向け
IDLで呼び出し先オブジェクトインターフェースを定義
IInterface、IBinderインターフェース
リモートオブジェクトを参照カウントで監視
ネットワークには非対応

BinderとCOMの相違点
COMはCベース、BinderはC++ベース
スクリプトサポート
マルチスレッド対応でデザインされている
SLocker、SHandlerのようなものがある

API規約
Iで始まるクラスはBinderインターフェース
BはBBいんでrに直接、関節に由来するBinderクラス
Sはその他のクラスデータ型が多い

メモリ管理
Stack-Baseと参照カウンタの2種類
参照カウントされるクラスはSAとm由来。I,Bはすべて参照カウント
参照カウントされるクラスは必ずnewで生成。sptr<>,sptr<>を用いる

Stack-Baseクラスはだいたいデータ型クラス

OpenBinderはSuppoertKit、BinderKit、Strage Kitでできる















#以下アフィリエイト用の広告です

0 件のコメント:

コメントを投稿