OSC
Lab
https://grasslab.github.io/NYCU_Operating_System_Capstone/index.html
Course
Course video
Course Q/A
Course 1
- Emulator / Simulator / VM 差別
- Why need simulator?
- ex. 在 OS/CPU 平行開發時需要先寫 simulator (對 spec.)
- 在這邊定義 VM 需要有 instruction set level 的支援
- 因此 JVM/llvm 在這邊比較算定義到 emulator
- 0x8000 是哪裡來的?
- 跟 x86 不同,rpi 是由 GPU 跑起 boot loader,而在 GPU 的 boot loader 設計上會直接把 boot img 從 fs 丟到 0x8000 上,然後跳過去執行 (x86 的 boot loader instruction 可以看到要跳得到的方,也是 0x8000)
- Linker 與 CPU arch. 有關係嗎?
- 現在的 Linker 跟 CPU 應該是有需要去看 instruction
- 如果單純說 memory layout 應該是 linker script
- Userspace Dubuger 如果 mask 掉成為 break,後面的 instruction 不是就被蓋掉了
- 會把原本被 mask 掉的 instruction 先存進其他替方 (應該存在 reg 吧?)
- program segment 的 layout 是誰決定現在這個樣子的?
- 如果說 load 進 mem 的話是 linker script 樣子
- 如果說為什麼是現在這個設計,stack 跟 heap 應該跟 cpu fetch 指令的順序有關,其他的應該是分類/記憶體保護有關,端看記憶體設計
- 由誰來保護 memory 的 access ex. Read only?
- hardware support: MMU 與 page table
- 是否可用 software protect?
- Debug mode 在 compile 時如果有下 -g 會變很大,其中哪些東西?
- symble table
- symble table 相對 source file 行數
- etc.
- 注意: 不會存 source file,而是連過去 => 如果 source file 被改掉/刪掉 會找不到
- 延伸討論 break 爲何指 mask 1 byte (or instruction set 最小長度單位),而不是把當個 instruction 都 mask 掉?