Redox FileSystem

  • KOBAさん Emacs派

mount()

  • socket_path: カーネルとおしゃべりするためのソケット
  • scheme: URLのスキーム
  • ユーザーランドで実装されている
  • / -> file:/ の短縮
  • ls :file あるがこれは
    • inodeってなんだ
    • // とか .. あるがループバック?
  • packet 作っている
socket.read(&mut packet)
socket.handle(&mut packet)
socket.send(packaet)
  • hikalium さん「いい話」

  • Packet in syscall::data - Rust

    • 4引数
      • a にsyscallが入っている
  • templateがある

  • filesystem.toml に書く

    • めちゃくちゃ改造されたstdが使える
  • 自作redoxfsしてみた

    • open: fileidは常に1返す
    • read: positionはglobalで
    • fstat: ちゃんと書く
    • close でrewind(pos = 0)
  • メンバ名にprefixついている,

  • hello ファイルシステム& で立ち上げる

    • hello Scheme使えるように
    • ls すると fstat 走る
  • 自作のDBをファイルシステムに組み込める rellyfs

    • 当たり前に自作DB持っていて強すぎる
      • updatedelete 無いのでファイルは作ったきり
  • 「GNU Hurdみたい」

  • linuxはfuse経由

  • linuxでディスクイメージを焼く必要があったのでlinux用のfilesystem作った

  • display, shared mem, ドライバも Scheme

  • root scheme探す旅

  • UserInner::todo: WaitQueue<Packet>: パケットをためておく

    • 中は Mutex<VecDeque>
  • root schemeはユーザーランド?

  • Packet の中のポインタは誰が変換しているの?

    • 書き換えていない?
      • UserInner.write()grantsVirtualAddress::new(address) している
      • UserInner::capture_inner() コメント書いてあって喜び
      • struct VirtualAddress(u32)
      • grantsなんだ
        • Context
          • UserGrants
          • map_inactive で メモリ変換している
            • ページの中は共有で見えてしまう
              • hikaliumさん 「ここにRust-analyserがいるので」
              • ファイルシステムから見える分には良い?
            • println!("{:#p}", &buf) , #: 0x-prefixed, p: ptr
            • rustのビット反転 !, adddr & !0xffffusize で 12..0 0-ed
            • std::slice::from_raw_parts()
            • rust_analyzer が無いと生きていけない
              • rust_analyzer の言うことを聞くことが出来る
                • 「かしこい」
                  • 人間make
              • パイプで食べさせると美味しい
                • みえてみまった
                  • さすがに別のページ見ると落ちる?, そうでなかたっらロック
                    • みえてしまった
                      • 信用できないfsは入れないようにしよう
  • tr -d , < | xxd -r -p

  • ACPIドライバー動いてる

  • 次回: syscall

  • マウントよくわかっていない

  • FUSE: File System in User Space