|
発表内容
勉強会当日のTweetはhttp://togetter.com/li/162878を参照。
@sekitoba:「はじめよう!プラットフォーム Kernel2.6のマルチプロセッサー対応(第3回)」(資料)
今日は二日酔いsnapmapは先月から10件ほど増えた昨日もABCあとに30キロほど乗り過ごしたpandaboardを買ったディスプレイをつないだらUSB給電だとあやしい?給電5Vのところに9VのACをつないで殺しちゃったAndyと写真とったよ自慢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でやりとりしてるイメージかな性能よくなったかわるくなったかまだ調べられていない(追記)当日Tweetがあった赤黒木のデモ動画後日Tweetがあった赤黒木のデモhttp://secs.ceas.uc.edu/~franco/C321/html/RedBlack/redblack.html
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/UHCI2.0 EHCI3.0 xHCIUSBデバイスドライバの構造インターフェース エンドポイントを複数持ってるエンドポイント種類とアドレスを持ってるエンドポイントの種類コントロール(CONTROL)USBデバイス設定、読み込み割り込み(INTERRUPT)どんどんデータを相手に渡すキーボード、マウスバルク(BULK)大きなデータをパッケージにして送るかならず送り切ることを保証当時間隔(ISOCHRONOUS)一定間隔で送る雛形USBデバイスドライバ/drivers/usbモジュール定義flie_operations構造体で宣言した関数の定義file_operations構造体宣言usb_class_driver構造体宣言usb_driver構造体で宣言した関数の定義usb_driver構造体宣言モジュールの組込と取り外しの定義カーネルをコンパイルするときにデバッグで有効にすれば以下のコマンドでUSB通信が見れるコマンドができるudo cat /sys/kernel/debug/usb/usbmon/3u@magoroku15さんより、USBはにあるMicrochipのドキュメントを見ると参考になる。
最近横浜市民になったカーシェア便利ぐだ生が累計1万2千人視聴が超えたgeekbarも快調Androidの入力癖がある調べ方とかの話下から上へコンパの後でさっさと資料を作成しようとしたら大きく変わっていた。Gingerbreadで仕組みに変更が入っていた。タッチスクリーン単純、面白いタッチスクリーンの仕組み基本的な構造0点をGND、軸の終端にVを与える押した点の2点の分圧値を測定4線式のタッチスクリーンタッチスクリーンコントローラタッチスクリーン自体はアナログデバイス読み取りには最低ADCが必要マイコンでは直接ADCにつなぐAndroidでは専用のコントローラで接続PMICを兼ねるバアも多いdrivers/input/touchscreenを参照usbtouchscreen.cここの層だと0x7FFを最大値にしての値が帰ってくるレイヤーが上がるごとに数値の意味が変わっているusbtouch_process_pkt関数Linuxのシステムの値に変換しているマウスとかはEV_REL 装置的に相対座標でしか出せないタッチスクリーンはEV_ABS 絶対座標で表す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サーバ、センサマネージャーで利用展示会で自動運転するときに便利eventHubframeworks/base/libs/ui/EventHub.cppframeworks/base/libs/ui/InputReader.cppLinuxをAndroidへ翻訳EventHub.cppEventBub::getEvent()Linuxの世界をAndroidの世界へ翻訳しているInputReader.cppInputReader::loopOnce()InputReader::consumeEvent()
@l_b__:「OpenBinder Android IPCの2回目」(資料)
OpenBinder読んでみたら興味深かった元ネタはwww.angryredplanet.com/~hackbod/openbinder/とIntroduction to OpenBinder and Interview withDianne HackbornOpenBinderとは?BeOSに採用される予定だったWindowsのCOMのように分散コンポーネント環境を提供OpenBinder=COMCOMって?OpenBinderって?OpenBinder Binder Kitの説明OS上にViewフレームワークや、メディアフレームワークを構築するためのコンポーネントフレームワークをつくるためのフレームワーク分散コンポーネント環境システムを機能分散し適切にネットワーク上のマシンに配置機能をコンポーネント化して再利用性を高めるCORBA JavaRMI COM@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の動作のひとつオブジェクトに対しどれだけ参照されているかカウントする循環参照弱い参照OpenBinderC++で記述、実装はLinux向けIDLで呼び出し先オブジェクトインターフェースを定義IInterface、IBinderインターフェースリモートオブジェクトを参照カウントで監視ネットワークには非対応BinderとCOMの相違点COMはCベース、BinderはC++ベーススクリプトサポートマルチスレッド対応でデザインされているSLocker、SHandlerのようなものがあるAPI規約Iで始まるクラスはBinderインターフェースBはBBinderに直接、関節に由来するBinderクラス、参照カウントされるSはその他のクラスデータ型が多いメモリ管理Stack-Baseと参照カウンタの2種類参照カウントされるクラスはSAtom由来。I,Bで名称が始まるクラスに由来するクラスは、すべて参照カウントされる参照カウントされるクラスは必ずnewで生成。sptr<>,wptr<>を用いるStack-Baseクラスはだいたいデータ型クラスOpenBinderはSuppoertKit、BinderKit、Strage Kitで構成される質疑プロセス間通信としてAndroidにはBinderとD-Busがあるが、その使い分けは?D-BusはBluetoothスタックのBluezがGPLであるために、これをプロセス分離して使用するために使われているだけ他の機能では使われていないただ、IcedRobotのように、D-BusでBinderを再実装するようなプロジェクトもある
@roishi2j2:「ARMのBUSの話」
時間が余ったので、急遽@roishi2j2さんがホワイトボードを使ってARMのBUSの解説をしてくれました。(BUSにCPU、GPU、DMAコントローラ、RAM、USB I/F、LCDが繋がっている図を書いて)CPUはmaster, GPU, DMAコントローラはmaster/slave, RAM, USB IF, LCDはslaveになる。各デバイスはメモリ空間上にマッピングされる。CPUとGPUが同時にメモリに書こうとすることはよくある。->バスの競合アービタ:バスの調停を行うARMv6以降はInterConnectが調停を不要にしたARMからCPUだけでなくInterConnectも買わなければならなくなったInterConnectの接続点にはFIFOがあって、いくつかのリクエストはキューイングできる。-> 高速化に寄与InterConnectはSoCの中だけの話ではないが、現実的にはチップの外に出したら配線が長くなりすぎて遅延がでるチップの中専用のバスとチップの外にも出すバスとの2本立てにすることもあるSoCは巨大で一社では作れない。CPUとかGPUとかの設計図(IP: Intelectual Property=知的財産権)を他社から買ってきて組み合わせる買ってきたものをそのまま使うと誰が作っても同じになるので、少し変更する。例えばnVidiaは自社のGPUを入れてARMのNEONを外したりするSoCの値段は生産する数量で決まる。量産すれば安くなる
懇親会
今回懇親会奉行の@hermit4さんが台湾行のため欠席だったので、簡単に。
名古屋のつ部からの参加者も交え、中華街の景徳鎮で四川麻婆豆腐をいただきました。
相変わらず激辛で美味しゅうございました。