annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
91
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
1 # 研究目的
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
2
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
3 アプリケーションの信頼性を保証するために、アプリケーションが動作するOSの信頼性を高める必要がある。
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
4
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
5 本研究室では、信頼性に重きを置いたGearsOSを開発している。
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
6
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
7 GearsOSはノーマルレベル、メタレベルの処理を切り分けることができるCbC(Continuation Based C)で記述されている。
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
8
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
9 信頼性とは
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
10
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
11 - どのユーザーがどのようなファイル操作をしたかわかること
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
12 - logが残ること
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
13 - item 操作の辻褄があっていること
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
14
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
15 を指す。
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
16
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
17 また、GearsOSには現在未実装の機能があり、その一つにファイルシステムが挙げられる。信頼性を確保するため、ファイルシステムは
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
18
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
19 - ファイルシステム全体のトランザクション化
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
20 - ファイルシステム全体のバックアップ\&ロギング
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
21
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
22 を取り入れたDataGearManagerとして実装したい。
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
23
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
24 本卒業研究では、GearsOSへファイルシステムの実装を目指す。
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
25
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
26 # Gears
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
27
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
28 macbook上のlldbにて
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
29
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
30 ```
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
31 $lldb ./hello_world
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
32 (lldb) target create "./hello_world"
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
33 Current executable set to '/Users/matac/ws/src/firefly/hg/Gears/Gears/src/parallel_execution/hello_world' (x86_64).
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
34 (lldb) b main
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
35 Breakpoint 1: where = hello_world`main, address = 0x0000000100004ec2
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
36 (lldb) r
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
37 Process 23209 launched: '/Users/matac/ws/src/firefly/hg/Gears/Gears/src/parallel_execution/hello_world' (x86_64)
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
38 Process 23209 stopped
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
39 * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
40 frame #0: 0x0000000100004ec2 hello_world`main
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
41 hello_world`main:
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
42 -> 0x100004ec2 <+0>: pushq %rbp
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
43 0x100004ec3 <+1>: movq %rsp, %rbp
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
44 0x100004ec6 <+4>: subq $0x20, %rsp
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
45 0x100004eca <+8>: movl %edi, -0x14(%rbp)
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
46 Target 0: (hello_world) stopped.
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
47 ```
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
48
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
49 - どうすればCbCのコードを表示してdebugできるか
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
50 - singularityの方でdebugできるっぽいのでそっちを使っていくかも
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
51
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
52 # xv6
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
53
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
54 ## docker & singularity
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
55
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
56 xv6をrun & debugできるdockerとsingularityを作った
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
57
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
58 作り方、使い方は下記参考
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
59
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
60 - https://growi.cr.ie.u-ryukyu.ac.jp/user/matac42/docker-xv6
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
61 - https://growi.cr.ie.u-ryukyu.ac.jp/user/matac42/singularity-xv6
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
62
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
63 ## user application & system call
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
64
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
65 xv6でuser applicationやsystem callを作る方法を下記にまとめた
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
66
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
67 - https://growi.cr.ie.u-ryukyu.ac.jp/user/matac42/xv6-add-call
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
68
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
69 ## pwd
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
70
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
71 pwdコマンドがxv6になかったので入れ込んだ
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
72
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
73 - pwdコマンドは既存のsystem callで作れる
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
74 - 例がたくさん転がっているので簡単
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
75 - ほぼコピペなので理解しているかと言われるとそうでもない
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
76
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
77 参考: https://dev.to/tyfkda/implement-pwd-command-on-xv6-gh5
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
78
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
79 他にやってみたいこと
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
80
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
81 - pathを通せるようにする
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
82 - editorを作る
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
83
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
84 ## cd
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
85
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
86 cdコマンドはuser applicationとして登録されていないにもかかわらず打てた
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
87
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
88 - user/sh.cに下記のような記述が
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
89
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
90 ```c
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
91 // Read and run input commands.
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
92 while(getcmd(buf, sizeof(buf)) >= 0){
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
93 if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
94 // Chdir must be called by the parent, not the child.
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
95 buf[strlen(buf)-1] = 0; // chop \n
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
96 if(chdir(buf+3) < 0)
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
97 fprintf(2, "cannot cd %s\n", buf+3);
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
98 continue;
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
99 }
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
100 if(fork1() == 0)
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
101 runcmd(parsecmd(buf));
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
102 wait(0);
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
103 }
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
104 ```
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
105
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
106 - なぜcdをuser applicationとして切り出さないのか
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
107 - 命令の簡素化をしているのでは、という話を聞いた
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
108
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
109 ## filesystem
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
110
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
111 - inode
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
112 - kernel/fs.cに書いてある
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
113 - ファイルのメタ情報をinode numberとともに持っている
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
114 - メタ情報
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
115 - lsやstatした時に表示されるような情報
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
116 - 所有者
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
117 - 更新日時
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
118 - ファイルサイズ
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
119 - アクセス権
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
120 - inodeをdataとは別の所定の位置に保存する
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
121 - inodeはdataのアドレスを持っているのでinode numberでdataにアクセスすることができる
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
122 - macbook上(APFS)でもinodeの確認ができる
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
123 - `$ls -i`
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
124 - `$df -i`
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
125 - `$stat`
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
126 - しかしAFSがinode番号を適当に返しているという話が
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
127 - macOSのfilesystemのsource code探したけど見つからない(あれば知りたい)
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
128 - inode数はあらかじめ決定されている
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
129 - inode数上限を超えるとファイルやディレクトリが作成できなくなる
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
130 - spinlock
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
131 - kernel/fs.cなどではacquireとreleaseを繰り返すような形でコードが書かれている
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
132 - spinlockはlockされた資源が解放されるまでアクセスできなくなるような方法
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
133 - 待たされている他のプログラムなどはループチェックで資源が解放されるのを待つ
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
134
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
135 # その他
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
136
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
137 - 蚊に刺されすぎてつらい
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
138 - 胸骨が痛い
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
139 - brainf\*ckのexampleがアスキーアートしてて面白かった
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
140 - https://github.com/fabianishere/brainfuck/blob/master/examples/compiler/awib.bf
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
141
7c70b573b54f backup 2021-09-22
autobackup
parents:
diff changeset
142