【操作系統】成組鏈接法
剛剛學習完文件管理這一章的內容,這道題用來練習和理解成組鏈接法還是很合適的。
例題.某個系統采用成組鏈接法來管理磁盤的空閑空間,目前磁盤的狀態如圖1所示。
(1) 該磁盤中目前還有多少個空閑盤塊?
(2) 請簡述磁盤塊的分配過程。
(3) 在為某個文件分配3個盤塊后,系統要刪除另一文件,並回收它所占的5個盤塊,它們的盤塊號依次為700、711、703、788、701,請畫出回收后的盤塊鏈接情況。
解析:
(1)從圖中可以看出,目前系統共有四組空閑盤塊,第一組為2塊,第二,三組分別為100塊,第四組雖記為100快,但除去用於結束標記的那一塊后實際只有99塊,故空閑盤塊總數為301塊。
(2) 磁盤塊的分配過程如下:首先檢查超級塊空閑盤塊號棧是否已上鎖,若已上鎖則進程睡眠等待;否則將s_nfree減1,若s_nfree仍大於0,即第一組中不止一個空閑盤塊,則將s_free[s_nfree]中登記的(即空閑盤塊號棧頂的)空閑盤塊分配出去。若s_nfree為0,即當前空閑盤塊號棧中只剩下最后一個空閑盤塊,由於該盤塊中登記有下一組空閑盤塊的盤塊號和盤塊數,因此核心在給超級塊的空閑盤塊號棧上鎖后,先將該盤塊的內容讀入超級塊的空閑盤塊號棧,再將該盤塊分配出去。另外,還需將空閑盤塊號棧解鎖,並喚醒所有等待其解鎖的進程。若s_nfree為0,而且棧底登記的盤塊號為0,則表示系統已無空閑盤塊可分配,此時也讓進程睡眠等待其他進程釋放盤塊。
(3) 根據題意,分配給某文件的3個盤塊依次為299號,300號,301號這三個盤塊。在此基礎上依次回收另一個文件的5個盤塊:700、711、703、788、701,回收完成后,空閑盤塊的鏈接情況將如圖2所示。
