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 掉?