真象還原之輸入輸出系統

參考書籍:《操作系統 真象還原》 作者:鄭鋼

第十章:輸入輸出系統

要求:鍵盤輸入,在屏幕上顯示。同時將內容放入緩衝區中,便於以後shell的命令操作。


本章思路

  1. 因爲輸出操作包含幾個步驟,非原子性。在切換進程的時候,可能會出錯。如果將整個輸出過程放在關中斷(cli,sti)下,範圍太大,影響正常的中斷。所以我們引入了

  2. 鎖的簡單相關概念,相信學習過《操作系統》的人,都比較清楚。鎖是一套機制,給臨界區加上P,V操作。複雜點的見:如何理解互斥鎖、條件鎖、讀寫鎖以及自旋鎖。鏈接中的概念,我沒有細看。因爲目前的程序能滿足要求。程序中,在P,V操作的時候,關中斷操作。當value的值爲0時,單核採用輪訓調度的時候不可能出現一個線程在使用資源而另一個線程來申請資源的情況。**所以書上說的就不對。**因爲那個shedule()函數是放在中斷中執行的,所以必然不在打印狀態。(有進程,來聲請資源的時候,直接放入等待隊列。當資源釋放的時候,將等待隊列中的內容,放入就緒隊列)。P455頁,輸出字符的數目增多,是因爲關中斷,使得中斷無法觸發,打印時間增多,打印輸出增多。和線程阻塞沒關係。

  3. 從端口讀取鍵盤的輸入。建立映射關係。。

  4. 鎖+put_str(輸入)=輸出

  5. 爲了讀取到連續的內容,使用循環隊列,建立緩衝區

具體代碼見:https://github.com/da1234cao/tiny-os

在循環隊列那裏,有點沒看懂,不是數據結構的原因。是現在整體很多,程序不是自己寫出來的,腦子有點不轉了。等以後看內核的時候,再說唄。
過段時間,來裝一個 “函數調用關係/結構圖Callgraph”

鍵盤操作,以前在彙編的時候,就接觸過。至於我現在正在使用的鍵盤和操作系統,我還真不知道。放在以後。這裏給出我小夥伴的一個鏈接:使用 xmodmap 交換 Esc 和 Caps Lock 按鍵

話說,我fork一個倉庫之後,還一直沒有修改成自己的github pages. 🙂

還有點時間,我來換一個開機啓動畫面,現在的橙色看着我眼睛難受。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章