Notes

Do not read codes but patch binary.

xv6

xv6 code reading(7.channel編)

xv6

今回はchannelについてみてみるよ。このxv6のcommiterの一人がGo言語の作り手であるRusCoxであるように、channelの概念はGo言語のそれとも関連がある。 先ず、channelなんだけど、これはproc構造体に地味に付いている。 struct proc { uint sz; // Size of p…

xv6 code reading (6.fork編)

xv6

forkは処理としては簡単そうに見えるけど、中々奥深い。 先ず、概要として、やっていることはprocess内でprocessを生成すること。 forkは子processだと0,親processだと子pidが 帰るって仕様で、 userlandからみると、1つの処理から2つの別processが返る。 こ…

xv6 code reading (5.paging)

xv6

How CPU works for memory access When CPU is ordered to access a value on virtual address, it needs to address a specific page. Accessing same virtual address on two different processes must address mutually distinct physical pages. Given a…

xv6 code reading (4.file system編)

xv6

前回VFS(仮想ファイルシステム)について主に書いたので、今回はFileSystem. xv6はfsとvfsの差が明確に分かれていないが、fsの役割を担っているのは、mkfs.c/bio.c/log.c/fs.c(一部)のあたりか。先ず、FileSystemの構築だが、先ず、defaultで動かせるコマンド…

xv6 code reading(3.vfs編)

xv6

xv6 のsystemcallは次の21種類(因みに、linux2.6で190近くある). // process start extern int sys_exec(void); // operation towards a file(s) extern int sys_chdir(void); extern int sys_close(void); extern int sys_dup(void); extern int sys_fstat(…

xv6 code reading(2.exec編)

xv6

前回shellでexecが実行される部分までみたので次はexecの中(https://github.com/mit-pdos/xv6-public/blob/master/exec.c). 普通はforkを先に説明するべきなのかもしれないけど、後に回す。 前提としてexec自体はsystem callでそのざっくりとした処理の流れ…

xv6 code reading(1.shell編)

xv6

今回(初回)はshellについて。普通はbootloaderから見て行くのかもしれないけど身近なものから。 恐らく、shellについて理解する最短で最良の方法が,こいつhttps://github.com/mit-pdos/xv6-public/blob/master/sh.cをじっくり読むこと。 ざっとみて、新しく…

Trial

xv6

Hi