2021-01-01から1年間の記事一覧

プロセス1実行編⑪(ユーザモード) init.c (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com init.c https://github.com/mit-pdos/xv6-public/blob/master/init.c // init: The initial user-level program #include "types.h" #include "stat.h" #include "user.h" #include …

プロセス1実行編⑩(システムコール) trapret (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com trapasm.S https://github.com/mit-pdos/xv6-public/blob/master/trapasm.S#L20 #include "mmu.h" # vectors.S sends all traps here. .globl alltraps alltraps: ... # Call trap(t…

プロセス1実行編⑨(システムコール) int exec(char *path, char **argv) (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com exec.c https://github.com/mit-pdos/xv6-public/blob/master/exec.c int exec(char *path, char **argv) { char *s, *last; int i, off; uint argc, sz, sp, ustack[3+MAXARG+1]; s…

プロセス1実行編⑧(システムコール) int sys_exec(void) (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com sysfile.c https://github.com/mit-pdos/xv6-public/blob/master/sysfile.c#L396 int sys_exec(void) { char *path, *argv[MAXARG]; int i; uint uargv, uarg; if(argstr(0, &path) …

プロセス1実行編⑦(システムコール) void syscall(void) (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com syscall.c https://github.com/mit-pdos/xv6-public/blob/master/syscall.c#L131 void syscall(void) { int num; struct proc *curproc = myproc(); num = curproc->tf->eax; if(num…

プロセス1実行編⑥(システムコール) void trap(struct trapframe *tf) (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com trap.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/trap.c#L36 void trap(struct trapframe *tf) { if(tf->trapno == T_SYSCALL){ if(myproc()->killed) exit()…

プロセス1実行編⑤(システムコール) alltraps (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com trap.asm(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/trapasm.S#L5 #include "mmu.h" # vectors.S sends all traps here. .globl alltraps alltraps: # Build t…

プロセス1実行編④(システムコール) vectors.S (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com vectors.S # vector table .data .globl vectors vectors: .long vector0 .long vector1 .long vector2 ... .long vector64 ... .long vector255# generated by vectors.pl - do not…

プロセス1実行編③(ユーザーモード) initcode.S (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com initcode.S https://github.com/mit-pdos/xv6-public/blob/master/initcode.S # Initial process execs /init. # This code runs in user space. #include "syscall.h" #include "tr…

プロセス1実行編②(カーネルモード) trapret (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com trapasm.S(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/trapasm.S#L24 ..... .globl trapret trapret: popal popl %gs popl %fs popl %es popl %ds addl $0x8, %…

プロセス1実行編①(カーネルモード) void forkret(void) (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com proc.c https://github.com/mit-pdos/xv6-public/blob/master/proc.c#L396 void forkret(void) { static int first = 1; // Still holding ptable.lock from scheduler. release(&pt…

OS起動編⑱ mpmain() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L51 // Common CPU setup code. static void mpmain(void) { cprintf("cpu%d: starting %d\n", cpuid(), cpuid(…

OS起動⑰ userinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L36 int main(void) { ... userinit(); // first user process ... }proc.c https://github.com/mit-…

OS起動編⑯ kinit2(P2V(4*1024*1024), P2V(PHYSTOP)) (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c int main(void) { ... kinit2(P2V(4*1024*1024), P2V(PHYSTOP)); // must come after startothers() ...void kinit2(void *vstart, void *vend) { freerange(vstart, vend); …

OS起動編⑮-4 mpmain() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L51 // Common CPU setup code. static void mpmain(void) { cprintf("cpu%d: starting %d\n", cpuid(), cpuid(…

OS起動編⑮-3 mpenter() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L40 // Other CPUs jump here from entryother.S. static void mpenter(void) { switchkvm(); seginit(); lapic…

OS起動編⑮-2 entryother.S (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com entryother.S https://github.com/mit-pdos/xv6-public/blob/master/entryother.S #include "asm.h" #include "memlayout.h" #include "mmu.h" # Each non-boot CPU ("AP") is start…

OS起動編⑮-1 startothers() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L34 int main(void) { ... startothers(); // start other processors ... }https://github.com/mit-pdos/xv6-p…

OS起動編⑭ ideinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L33 int main(void) { ... ideinit(); // disk ... ide.c https://github.com/mit-pdos/xv6-public/b…

OS起動編⑬ fileinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L32 int main(void) { ... fileinit(); // file table ...file.c https://github.com/mit-pdos/xv6-public/blob…

OS起動編⑫ binit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L31 int main(void) { ... binit(); // buffer cache ...bio.c https://github.com/mit-pdos/xv6-pub…

OS起動編⑪ tvinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L30 int main(void) { ... tvinit(); // trap vectors ...trap.c https://github.com/mit-pdos/xv6-public/blob…

OS起動編⑩ pinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L29 int main(void) { ... pinit(); // process table ...proc.c https://github.com/mit-pdos/xv6-public/blob…

OS起動編⑨ uartinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L28 int main(void) { ... uartinit(); // serial port ...uart.c https://github.com/mit-pdos/xv6-public/blo…

OS起動編⑧ consoleinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c https://github.com/mit-pdos/xv6-public/blob/master/main.c#L27 int main(void) { ... consoleinit(); // console hardware ...console.c https://github.com/mit-pdos/xv6…

OS起動編⑦ ioapicinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L26 int main(void) { ... ioapicinit(); // another interrupt controller ...ioapic.c https://git…

OS起動編⑥ picinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L25 int main(void) { ... picinit(); // disable pic ...picirq.c https://github.com/mit-pdos/xv6…

OS起動編⑤ seginit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L24 int main(void) { ... seginit(); // segment descriptors ...vm.c https://github.com/mit-pdos…

OS起動編④ lapicinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L23 int main(void) { ... lapicinit(); // interrupt controller ...lapic.c https://github.com/mi…

OS起動編③ mpinit() (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L22 int main(void) { ... mpinit(); // detect other processors ...mp.c https://github.com/mit-p…