プロセス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…

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

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

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

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com main.c(一部抜粋) https://github.com/mit-pdos/xv6-public/blob/master/main.c#L20 int main(void) { kinit1(end, P2V(4*1024*1024)); // phys page allocator ...kalloc.c https:/…

OS起動編⓪ entry.S (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com entry.s https://github.com/mit-pdos/xv6-public/blob/master/entry.S # The xv6 kernel starts executing in this file. This file is linked with # the kernel C code, so it ca…

ブートローダ編② bootmain.c (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com トップページ jupiteroak.hatenablog.com bootmain.c https://github.com/mit-pdos/xv6-public/blob/master/bootmain.c // Boot loader. // // Part of the boot block, along with bootasm.S, which calls bootmain(). // b…

ブートローダ編① bootasm.S (Xv6を読む~OSコードリーディング~)

前回 jupiteroak.hatenablog.com bootasm.S https://github.com/mit-pdos/xv6-public/blob/master/bootasm.S#L10 #include "asm.h" #include "memlayout.h" #include "mmu.h" # Start the first CPU: switch to 32-bit protected mode, jump into C. # The B…

Xv6を読む~OSコードリーディング~ ②概要

前回 jupiteroak.hatenablog.com 目次 ソースコードリーディングの概要 ブートローダ編 OS起動編 プロセス1実行編 ソースコードリーディングの概要(補足説明) ブートローダ編 OS起動編 プロセス1実行編 その他 ソースコードリーディングの概要 Xv6のソースコ…

Xv6を読む~OSコードリーディング~ ①はじめに

目次 Xv6とは Unix v6について Xv6-riscvについて Xv6を読む際の注意点 コードリーディングで使用したツール 参考 次回 Xv6とは Xv6とは、MIT(マサチューセッツ工科大学)がUnix v6をx86CPUの仕様に基づいて再実装した教育用のオペレーティングシステムです。…