Ya2008 Lt Asa

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Event

    Ya2008 Lt Asa - Presentation Transcript

    1. Perl マシン (PerlMachine) 低級 Perl プログラミングのすすめ
    2. 自己紹介
      • HN やら身分やら
        • wakapon (← 口で言うのが恥ずかしい )
        • 学生ニート
      • 自分と Perl について
        • 本格的なお付き合いは 2005 年~
        • 上から下までなめまわしたい
      • よろしくおねがいいたします
    3. 本日のおはなし
      • Perl マシン
        • PerlMachine (PM ≠ PerlModule, PerlMongers)
        • すっごい低レベルだよ!
      • 主な内容
        • 動作スクリーンショット、実装方式など
      • デモ等
        • すみません、ありません
    4. Perl マシンとは
      • 少しまじめな解説
        • Perl を動かすためだけに注力された計算機
        • ソフトウェア階層を すべて Perl で記述
      • できること
        • PC/AT 互換機上でリアルデバイスを文字通り Perl で制御
        • ハードウェア資源を Perl で管理 (OS もどき、 PerlOS )
      • 束縛事項 ( 設計方針 )
        • 全部 Perl で (ry
        • それでもだめなら XSUB
    5. Perl マシンの構成 ( 注:理想像 ) AP Perl 処理系 インタプリタ キーボード ディスプレイ ディスク NIC マウス Hard- ware Soft- ware Perl C 標準ライブラリ
      • スレッドライブラリ
      • ウィンドウシステム
      • プロトコルスタック
      • ファイルシステム
      • XSUB
      • I/O メモリアクセス
      • 実メモリアクセス
      • デバイスドライバ
      • 各種デバイスドライバ
    6. 実現環境 ( 現実 )
      • 各種環境
      grub ブートローダ Celeron1.7GHz プロセッサ フロッピーディスク 1.44MB ディスク PS/2 接続 キーボード newlib 1.6 libc 5.8.8 の Microperl Perl 処理系 gcc 4.2.2 C コンパイラ
    7. 現在までの成果物
      • ドライバ
        • 画面出力
          • テキスト VRAM
        • キーボードドライバ
          • 割込み駆動
        • フロッピーディスクドライバ
          • DMA 転送、割込み駆動
          • 読込みのみ
        • ファイルシステム
          • 読込みのみ
          • 対応フォーマット: FAT12 / FAT16 / FAT32 / ext2
    8. 実機動作画面
      • 組込み関数 open ・ read ・ close ・ print の実行
        • ドライバ、ファイルシステムは Perl で実装
      # 実行プログラム $| = 1; my $file_path = ‘ /kernel/perl/keyboard.pl’; print “open ”; open (IN, “<$path”); my @buf = <IN>; print join (‘’, @buf); close (IN); print “close ”;
    9. Perl マシンで利用した機能
      • Microperl
        • ちっちゃな Perl 処理系 (XS 無 )
        • Microperl => Miniperl => Perl
        • libc を使って無理やりスタンドアローン版バイナリを作成
      • perlembed / インタプリタインスタンス
        • perlembed = C に Perl インタプリタを組込むときに使う API 群
        • インタプリタインスタンス = 処理系の実体
        • ヒープメモリ上で独立、一部グローバルな情報は共有
      • perlapi
        • C からインタプリタインスタンスを操作する API 群
      • XSUB
        • C で書かれた Perl サブルーチン
        • Perl でできないことは XSUB まかせ
    10. Microperl
      • これは何か
        • Perl 本体をコンパイルするための Perl
        • 移植性を考慮してコンパクトに作られた Perl 処理系
        • GNU ツールが無くてもライブラリさえあればコンパイル可能
      • 利用方針
        • Perl マシンのための俺仕様を付け加えない
        • 世の中にあるスクリプトはすべて Perl マシンでも動くように考慮
        • 機能拡張は XSUB で実現
    11. インタプリンタインスタンス
      • これは何か
        • 処理系の実体 (perl_alloc で生成 )
        • 各種スクリプトはインスタンス上で動作
        • 各インスタンスはメモリ独立 ( 一部は共有 )
      メモリ インスタンス 共通情報 malloc malloc A インスタンス aa.pl, BB.pm, cc.cgi B インスタンス d.pl, EE.pm, cc.cgi
    12. perlapi
      • これは何か
        • インタプリタインスタンスをつつくための C 言語 API
          • サブルーチンを呼ぶ、ハッシュを操作する
        • インタプリンタ毎に作用させることができる
      A インスタンス sub hoge { …; } packag A; B インスタンス our %hoge; our @hoge; package B; call_pv (…, &quot;A::hoge&quot;, …); HV *hv = get_hv (…, &quot;B::hoge&quot;, …);
    13. XSUB
      • これは何か
        • C で書かれた Perl のサブルーチン
        • newXS で処理系に登録
      • 利用方針
        • ハードウェアへの時下アクセス等
        • 極力つかわない ( どうしても、というときに使う )
          • べ、別にあんたなんか本当は使いたくないんだからねっ!
        • PerlOS 、 XSUB を使えばすぐに実現できるんじゃね?
          • Perl で や ら な い か
    14. PerlOS の内部処理
      • 動作画面で実行したプログラム
      $| = 1; my $file_path = ‘/kernel/perl/keyboard.pl’; print “open ”; # print open (IN, “<$path”); my @buf = <IN>; # ファイル読込み print join (‘’, @buf); # ファイル読込み close (IN); print “close ”;
    15. 組込み関数 print の実行フロー
      • 画面出力の場合 (print &quot;open &quot;)
        • 処理系内
          • pp_print 関数
          • do_print 関数
        • libc 内
          • printf 関数
          • バッファ処理いろいろ
          • libc の write 関数
          • libc の _write 関数
        • PerlOS の vram ドライバ内
          • vram インタプリタインスタンスの取得
          • ENTER, SAVETMPS, PUSHMARK, XPUSHs, call_pv, etc
          • vram_write_char サブルーチン
          • XSUB の writew 関数
            • ここでデバイスに文字の書込みを実行
    16. ファイル読込みの実行フロー
      • ファイル読込みの場合 ($buf = join ('', <IN>))
        • 処理系内 ( 省略 )
        • libc 内 ( かなり省略 )
          • libc の fread 関数
          • libc の _read 関数
        • PerlOS のファイルシステム内
          • fs_read 関数
          • ファイルシステムインスタンスの取得
          • ENTER, SAVETMPS, PUSHMARK, XPUSHs, call_pv, etc
          • fat_read サブルーチン
            • ファイル名を元にクラスタチェーンを手繰って LBA の取得
          • floppy_read サブルーチン
            • LBA を元にディスク上のデータ取得
            • 読込み結果を _read 関数で取得したポインタに書込み
    17. ディスク割込み処理のフロー
      • 外部割込み処理
      irq6_entry IDT FD 割込み インスタンス管理 table キーボード FD ハンドラ vram usr_prog call_pv FD インスタンス our $int_flag; sub fd_hdl { … } package FD;
    18. Perl マシンの将来
      • マルチタスク
        • インスタンスの並行動作
        • インスタンス管理、ロック等
      • 兵器として
        • ミサイルランチャー
          • USB ドライバを書けばあるいは
      • ご清聴ありがとうございました

    + waka ponwaka pon, 2 years ago

    custom

    3317 views, 0 favs, 0 embeds more stats

    Perlマシンのスライドだお

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 3317
      • 3317 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 8
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events