【bug記錄】OS Lab4 踩坑記


OS Lab4 踩坑記

  Lab4在之前Lab3的基礎上,增加了系統調用,難度增加了很多。而且加上注釋不詳細,開玩笑的指導書,自己做起來困難較大。也遇到了大大小小的bug,調試了一整天。

  本文記錄筆者在實現Lab4中遇到了一些bug,出現的問題可能不具有普遍性,但是可能有參考價值。

  

  1. 在調用syscall_*函數的時候,可能會出現缺頁的情況。

  

  注意缺頁的地址,通過地址我發現錯誤出現在棧,棧頂不停下降。最后發現是mysyscall匯編函數忘記 jr ra 返回了。。。zz。這個bug是通過修改fktest.c代碼,刪除其中所有系統調用有關的函數后發現可以正常運行。

  2. 之后在系統調用的時候,發現總是出錯返回,並沒有完全執行。通過輸出調試后,發現是envid2env()中當envid為0的時候,應當直接返回curenv,不進行后續操作。在后續操作里因為envid=0,判斷過不了。

  3. fork時,父進程給子進程開異常處理棧空間的時候,地址應當是UXSTACKTOP - BY2PG。

  4. 在 sys_set_env_status 中,判斷status的值的時候,與或寫錯了。。zz

  

  5. 這個bug卡了一個晚上,第二天用匯編調試才發現了問題。

  

  當父進程對用戶棧那一頁進行duppage時,duppage無法返回直接報錯。通過一步步匯編調試,發現問題出在sp寄存器在發生缺頁中斷返回后,值變了。最后發現是traps.c中page_fault_handler中的錯誤。

  // TODO: 找出來為什么要這樣寫。

  

  6. 在運行pingpang.b時,發現有時候會出現倆個進程都在waiting,都是ENV_NOT_RUNNABLE的情況。最后發現是,在sys_ipc_can_send中忘記修改env_ipc_recving為0了。。。zz

  7. 在提交上去,第一部分結果為5/7,看水群里大佬說,是調度的問題。在調度時,如果該進程時間片沒有用完,但是該進程的狀態變為了ENV_NOT_RUNNABLE了,就應當讓該進程停下來。提交上去后,可能有改變當前進程狀態的情況發生。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM