Mercurial > hg > Document > Growi
view user/matac42/note/2021/09/21.md @ 91:7c70b573b54f
backup 2021-09-22
author | autobackup |
---|---|
date | Wed, 22 Sep 2021 00:10:04 +0900 |
parents | |
children |
line wrap: on
line source
# 研究目的 アプリケーションの信頼性を保証するために、アプリケーションが動作するOSの信頼性を高める必要がある。 本研究室では、信頼性に重きを置いたGearsOSを開発している。 GearsOSはノーマルレベル、メタレベルの処理を切り分けることができるCbC(Continuation Based C)で記述されている。 信頼性とは - どのユーザーがどのようなファイル操作をしたかわかること - logが残ること - item 操作の辻褄があっていること を指す。 また、GearsOSには現在未実装の機能があり、その一つにファイルシステムが挙げられる。信頼性を確保するため、ファイルシステムは - ファイルシステム全体のトランザクション化 - ファイルシステム全体のバックアップ\&ロギング を取り入れたDataGearManagerとして実装したい。 本卒業研究では、GearsOSへファイルシステムの実装を目指す。 # Gears macbook上のlldbにて ``` $lldb ./hello_world (lldb) target create "./hello_world" Current executable set to '/Users/matac/ws/src/firefly/hg/Gears/Gears/src/parallel_execution/hello_world' (x86_64). (lldb) b main Breakpoint 1: where = hello_world`main, address = 0x0000000100004ec2 (lldb) r Process 23209 launched: '/Users/matac/ws/src/firefly/hg/Gears/Gears/src/parallel_execution/hello_world' (x86_64) Process 23209 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x0000000100004ec2 hello_world`main hello_world`main: -> 0x100004ec2 <+0>: pushq %rbp 0x100004ec3 <+1>: movq %rsp, %rbp 0x100004ec6 <+4>: subq $0x20, %rsp 0x100004eca <+8>: movl %edi, -0x14(%rbp) Target 0: (hello_world) stopped. ``` - どうすればCbCのコードを表示してdebugできるか - singularityの方でdebugできるっぽいのでそっちを使っていくかも # xv6 ## docker & singularity xv6をrun & debugできるdockerとsingularityを作った 作り方、使い方は下記参考 - https://growi.cr.ie.u-ryukyu.ac.jp/user/matac42/docker-xv6 - https://growi.cr.ie.u-ryukyu.ac.jp/user/matac42/singularity-xv6 ## user application & system call xv6でuser applicationやsystem callを作る方法を下記にまとめた - https://growi.cr.ie.u-ryukyu.ac.jp/user/matac42/xv6-add-call ## pwd pwdコマンドがxv6になかったので入れ込んだ - pwdコマンドは既存のsystem callで作れる - 例がたくさん転がっているので簡単 - ほぼコピペなので理解しているかと言われるとそうでもない 参考: https://dev.to/tyfkda/implement-pwd-command-on-xv6-gh5 他にやってみたいこと - pathを通せるようにする - editorを作る ## cd cdコマンドはuser applicationとして登録されていないにもかかわらず打てた - user/sh.cに下記のような記述が ```c // Read and run input commands. while(getcmd(buf, sizeof(buf)) >= 0){ if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){ // Chdir must be called by the parent, not the child. buf[strlen(buf)-1] = 0; // chop \n if(chdir(buf+3) < 0) fprintf(2, "cannot cd %s\n", buf+3); continue; } if(fork1() == 0) runcmd(parsecmd(buf)); wait(0); } ``` - なぜcdをuser applicationとして切り出さないのか - 命令の簡素化をしているのでは、という話を聞いた ## filesystem - inode - kernel/fs.cに書いてある - ファイルのメタ情報をinode numberとともに持っている - メタ情報 - lsやstatした時に表示されるような情報 - 所有者 - 更新日時 - ファイルサイズ - アクセス権 - inodeをdataとは別の所定の位置に保存する - inodeはdataのアドレスを持っているのでinode numberでdataにアクセスすることができる - macbook上(APFS)でもinodeの確認ができる - `$ls -i` - `$df -i` - `$stat` - しかしAFSがinode番号を適当に返しているという話が - macOSのfilesystemのsource code探したけど見つからない(あれば知りたい) - inode数はあらかじめ決定されている - inode数上限を超えるとファイルやディレクトリが作成できなくなる - spinlock - kernel/fs.cなどではacquireとreleaseを繰り返すような形でコードが書かれている - spinlockはlockされた資源が解放されるまでアクセスできなくなるような方法 - 待たされている他のプログラムなどはループチェックで資源が解放されるのを待つ # その他 - 蚊に刺されすぎてつらい - 胸骨が痛い - brainf\*ckのexampleがアスキーアートしてて面白かった - https://github.com/fabianishere/brainfuck/blob/master/examples/compiler/awib.bf