日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux-0.00 代码解析(四)

發布時間:2025/3/15 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux-0.00 代码解析(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 0.00 的編譯、運行、源碼下載:
http://blog.csdn.net/longintchar/article/details/78757065
Linux 0.00 Makefile 解讀:
http://blog.csdn.net/longintchar/article/details/78857966
Linux 0.00 代碼解析(一):
http://blog.csdn.net/longintchar/article/details/78766916
Linux 0.00 代碼解析(二):
http://blog.csdn.net/longintchar/article/details/79113612
Linux 0.00 代碼解析(三):
http://blog.csdn.net/longintchar/article/details/79114486

在閱讀源碼后,很多時候我們有修改源碼的沖動。比如說加一些自己的想法,看看修改前后運行結果的變化。這不失為一種好的學習方法。

一、讓任務切換頻率降低

假設N為初始計數值。任務切換的頻率=1193180/N,所以,N增大則切換的頻率變低(任務切換變慢),N減小則切換的頻率變高(任務切換變快)。

原來的代碼中, movl $11930, %eax 表示把N設置為11930,1193180/11930約等于100, 所以方波的頻率是100Hz,周期是10ms,即10ms產生一次中斷。

我的理解是因為N是16位的,所以N的最大值是0xFFFF(=65535),此時任務切換達到最小頻率。
f = 1193180/65535=18.2(Hz),1/18.2(Hz)= 55ms,即55ms左右切換一次。

關于定時器的設置可以參考我的博文:
http://blog.csdn.net/longintchar/article/details/78885556

二、write_char過程的修改

首先,我發現此過程沒有指定數據段,也就是說想調用這個過程,就要先設置好DS的值。我認為DS的值應該是內核數據段的選擇子,因為scr_loc這個變量屬于內核數據段。為何不在此過程中指定好數據段呢?竊以為,可以先壓棧DS,然后令DS=0x10.

其次,AL作為參數,表示字符的ASCII碼。我認為,可以順便用AH傳遞屬性。

所以,修改前后的代碼對比如下(左邊是修改后的)。

三、關于ignore_int

趙炯說當產生一個其他中斷(不是時鐘中斷也不是系統調用中斷)時,就會在屏幕上顯示一個字符“C”。可是我根本看不到字符“C”,一氣之下寫了一個死循環,還是看不到程序跑進來。為什么呢?如果你知道答案,非常歡迎你留言告訴我。

四、關于system_interrupt

由于write_char過程不再需要指定DS,所以代碼變得很簡單。

五、Task0和Task1

六、實驗結果對比

修改前:

修改后:

可以看到,除了顏色不一樣之外,任務的切換速度變慢。修改前每次連續打印約10個A,修改后每次連續打印約55個A。這和上文的分析是一致的。

【本系列完】

總結

以上是生活随笔為你收集整理的Linux-0.00 代码解析(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。