物理アドレスと仮装アドレスが同じ - vector 割り込みvectorの処理 - lassbery-->固定のmemory map ==> 取ってくるAPIがある? device driver --> device driverを見つけるAPIを探す vmm -> virtual memory manager kmain{ binit --> buffer cache fileinit --> filetable sti() --> set intrast } ?? -> user空間なのでkernelからはわからない(memory空間が異なる) trapframe -> forkを読んだ際にregisterに入れる情報 fork { np = allocproc() <- proc を 作成 processのメモリ空間の共有 -> copyuvmでpagetableをコピーして user space側のstackを置き去りにして,今のr process ごとにtrap frameを用意している filedup(proc->ofile[i]) <<- リファレンスカウント方式で処理をしている java -- リファレンスカウントではない, objective-cはautomatic refalence count idup(proc->cwd); <- pwdをコピーする sagestrcpy() <- 何故かコピーをしている pidを返して終わり } errorした場合は別のcontinuationに行くtaskを書くことが出来る CodeSegmentの中ではfor文を使っても良い、単純な処理ならinterfaceに置き換えられる switchuvm{ OSの割り込み処理を許可する--> interactive mode multiprocessor => どのCPUを割り込ませるのかはスケジューリングの問題 ( Programable Intractice Contorler ) 割り込まれるCPUはわからない ( software interact を除く) OSのメモリモデルがやっかい interruptsはmultiprocessorで分散される そのCPUでは割り込みが起こらないものをcliで制御している。 -> 1 push 誰かが禁止しているときにpopすると割り込み禁止が解除される為、禁止をする 割り込みが入る-> kernel から kernelに移行するのでuserには影響しないのでは…? 割り込みルーチンがuser pageに触らないはず…? 割り込み?例えばキー入力 uartの入力を待っているuser processがいたら? そのprocessのstatusを切り替える必要がある? 割り込まれても割り込みルーチンがuser spaceに干渉しなければ良さそう } exec { kernel移動 trapret --> assemblerで書かれている。ここでuse spaceに移動している? ls --> ssemblerで書かれていている }