《加菲貓 51OS》簡介

2021-06-27 07:55:20 字數 1345 閱讀 3548

一直想鞏固下作業系統的知識,但直接在pc機上寫個作業系統可不是簡單的活,正好現在學51於是就拿他來開刀,不過在這上面寫實在是太憋屈了!

有些同學可能覺得你這也能叫作業系統?然後開始扣作業系統的定義了。我想有這時間還不如把功能幫我加進去,我會很感激的,也不會忘了你的功勞的。其實最早的作業系統比我這個還要原始得多呢,只能完成單任務排程而已。我也想過要新增記憶體管理,外設管理,程序通訊,等。但是仔細想想51就那麼大記憶體需要管理麼;不同的應用有不同的外設,沒辦法統一;8個程序之間互相通訊,使用者自己完成也不會有問題。於是我就將主要問題放在處理器排程,及定時器0的管理上。後期如果需要還會繼續新增更多功能,比如中斷管理,更豐富的系統呼叫。但我的原則是系統的效率不得低於80%,並方便使用者的使用。

源**在:

使用手冊:還沒寫好

實現功能:1.任務切換,每1ms切換一次任務,每秒切換1000次,每次切換消耗100個時鐘週期左右,平均效率在90%左右。

2.系統呼叫,暫時只提供wait和wakeup系統呼叫來定時,最小單位是10ms。

3.可同時並行執行8個任務,其中包括3個快速任務和5個標準任務

4.更多特性敬請期待!

設計思路:

這是ram空間分布圖,30h~37h儲存每個任務的sp值,38h~3fh儲存任務的狀態,40h~47h做其他活。剩下空白的地方可以自由使用。

任務切換的實現,用定時器零每1ms產生一次中斷並執行_seitch_函式切換任務,切換時:

先儲存當前暫存器環境:因為中斷時pc值已儲存到棧頂,所以只要將r0~r7,psw, acc,  b, dpl, dph依次入棧即可,sp要儲存到30h~37h相應的位置

恢復到該任務現場:先恢復sp,然後依次彈出個暫存器值

用reti切換到該任務:現在棧頂的值就是pc值了,reti可以切換到該pc處繼續執行

系統呼叫wait和wakeup,每進行10次任務切換就將38h~3fh裡的某些值減去一,代表過去了10ms。最小單位是10ms,而不是1ms(因為有8個任務,切換一圈也要8ms,那麼1ms的精確度是永遠無法達到的),也不是8ms(你要定1s該把值設成多少呢?5,4,3,2,1。。。算出來了嗎?沒有吧!)。

wait呼叫中如果把狀態設成0ffh則表示休眠狀態,暫停執行。

wakeup呼叫可以喚醒休眠任務也可以喚醒延時任務,都是簡單的把狀態設為00h。

暫時就寫到這吧,整體思路不難,但主要是細節,如何才能達到更高的效率,如何才能更節省空間,如何才能更方便使用,等等問題才是設計的關鍵。

Python模組簡介 os模組

一 模組簡介 python os模組包含普遍的作業系統功能,讓你的程式和平台分開。通常用於返回和開啟指定目錄下的所有檔案和目錄名。二 常用函式 1 os.listdir path 返回指定目錄下的所有檔案和目錄名 folder rt html for movie html in os.listdir...

Python的os模組簡介

os模組提供了多數作業系統的功能介面函式。當os模組被匯入後,它會自適應於不同的作業系統平台,根據不同的平台進行相應的操作,在python程式設計時,經常和檔案 目錄打交道,這時就離不了os模組,本節內容將對os模組提供的函式進行詳細的解讀 常用的方法如下表所示 序號方法及描述 1os.access...

Python中os模組的簡介

import os 匯入os模組,以下所有功能都在os模組中.os.getcwd 功能 獲取當前目錄的絕對路徑 絕對路徑 window 以碟符開頭,或者以 開頭 linux 以 開頭或者以 開頭 相對路徑 window 以檔案開頭,以.開頭 或者.開頭 linux 與window相同 os.path...