20135239 益西拉姆 linux內核分析 扒開系統調用的三層皮(下)

1、 給MenuOS增長time-asm命令

代碼解釋函數

1.-rf:強制刪除
    2.clone :從新克隆
    3.time-asm:顯示系統時間的彙編形式

給MenuOS增長time和time-asm命令調試

  • 更新menu代碼到最新版
  • 在main函數中增長MenuConfig
  • 增長對應的Time函數和time-asm函數
  • make rootfs

2、使用gdb跟蹤系統調用內核函數sys_time

解釋得幾點:code

  • 調試的時候一直按n單步執行會進入schedule函數
  • sys-time返回後進入彙編代碼處理gdb沒法繼續跟蹤。
  • 執行int 0x80以後system_call對應的代碼

3、系統調用在內和代碼中的工做機制和初始化

回顧: 用戶態和內核態的轉變和匹配blog

系統調用機制的初始化

- `\init\main.c start_kernel

  • trap_init();

- \arch\x86\kernel\traps.c

#ifdef CONFIGX8632 set systemtrapgate(SYSCALLVECTER,&systemcall);進程

setbit(SYSCALLVECTOR,used_vectors);it

endif

4、簡化後便於理解的sys_call僞代碼

關鍵的信息asm

- 在系統調用以前它有可能會造成進程調度

總結:內核能夠當作不少種中斷處理不一樣的集合。sed

簡單瀏覽system_call到iret之間的主要的代碼

  1. save all:保存現場
  2. iterrupet return 實際上就是irq_return宏。
  3. work pending 裏面的work notifysig是用來處理pending signal信號的。
  4. schedule是個重要的代碼,決定了進程調度的代碼。

總結

本週就是繼續去學代碼,還有一個上週的鞏固,很充實。im

相關文章
相關標籤/搜索