操作系統理論細節 2

信號量

信號量是最早出現的用來解決進程同步與互斥問題的機制。
信號量(Saphore)值表示相應資源的使用情況。信號量S>=0時,S表示可用資源的數量。執行一次P操作意味着請求分配一個資源,因此S的值減1;當S<0時,表示已經沒有可用資源,S的絕對值表示當前等待該資源的進程數。請求者必須等待其他進程釋放該類資源,才能繼續運行。而執行一個V操作意味着釋放一個資源,因此S的值加1;若S<0,表示有某些進程正在等待該資源,因此要喚醒一個等待狀態的進程,使之運行下去。

注意,信號量的值只能由PV操作來改變。

P操作分配的是我們申請的資源,並不是處理機

磁盤設備的I/O 控制主要採取DMA的方式。
Direct Memory Access,直接內存訪問。
一種內存訪問技術,磁盤設備I/O的控制主要方式。它允許某些計算機計算機外設,可以獨立地直接讀寫系統內存,而不需CPU介入處理。在同等程度的處理器負擔下,DMA是一種快速的數據傳送方式。很多硬件的系統會使用DMA,包含硬盤控制器、繪圖顯卡、網卡和聲卡。

在 實時系統的設計中,經常會出現多個任務調用同一個函數的情況。如果這個函數不幸被設計成爲不可重入的函數的話,那麼不同任務調用這個函數時可能修改其他任 務調用這個函數的數據,從而導致不可預料的後果。那麼什麼是可重入函數呢?所謂可重入是指一個可以被多個任務調用的過程,任務在調用時不必擔心數據是否會 出錯。不可重入函數在實時系統設計中被視爲不安全函數。
滿足下列條件的函數多數是不可重入的:

(1)函數體內使用了靜態的數據結構;

(2)函數體內調用了malloc()或者free()函數;

(3)函數體內調用了標準I/O函數。

如何寫出可重入的函數?在函數體內不訪問那些全局變量,不使用靜態局部變量,堅持只使用缺省態(auto)局部變量,寫出的函數就將是可重入的。如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。或者調用該函數前關中斷,調用後再開中斷。

自動變量,只在定義它們的時候才創建,在定義它們的函數返回時系統回收變量所佔存儲空間。對這些變量存儲空間的分配和回收是由系統自動完成的。一般情況下,不作專門說明的局部變量,均是自動變量。 自動變量也可用關鍵字auto作出說明。

可重入函數可以被一個以上的任務調用,而不必擔心數據被破壞。可重入函數任何時候都可以被中斷,一段時間以後又可以運行,而相應的數據不會丟失。可重入函數或者只使用局部變量,即保存在CPU寄存器中或堆棧中;或者使用全局變量,則要對全局變量予以保護。

ext3還是使用15個inode來查找數據塊,前12個爲直接數據塊,直接指向存儲數據的數據塊,接下來分別爲一級間接塊,二級間接塊,三級間接塊.
最大文件:
前面直接指向12個數據塊,一級間接塊最大爲block size / 4,block size就是數據塊的大小,因爲一個索引是4個字節,所以除以4,這樣計算下來,最大的文件可以使用的總塊數爲:12 + (block size/4) + (block size/4)^2 + (block size/4)^3,如果block size大小爲4K,則爲(12 + 2^10 + 2^20 + 2^30) * 2^12 約等於4T。

文件分配對應於文件的物理結構,是指如何爲文件分配磁盤塊。常用的磁盤空間分配方 法有三種:連續分配、鏈接分配和索引分配。
順序分配:順序 分配方法要求每個文件在磁盤上佔有一組連續的塊。
隱式鏈接分配: 每個文件對應一個磁盤塊的鏈表;磁盤塊分佈在磁盤的任何地方,除最後一個盤塊外,每一個盤塊都有指向下一個盤塊的指針,這些指針對用戶是透明的。
顯式鏈接分配:是指把用於鏈接文件各物理塊的指針,顯式地存放在內存的一張鏈接表中。 該表在整個磁盤僅設置一張,每個表項中存放鏈接指針,即下一個盤塊號。 在該表中,凡是 屬於某一文件的第一個盤塊號,或者說是每一條鏈的鏈首指針所對應的盤塊號,均作爲文件 地址被填入相應文件的FCB的“物理地址”字段中。由於查找記錄的過程是在內存中進行 的,因而不僅顯著地提高了檢索速度,而且大大減少了訪問磁盤的次數。由於分配給文件的 所有盤塊號都放在該表中,故稱該表爲文件分配表(File Allocation Table, FAT)。MS-DOS 採用的就是這種方式。

文件描述符與打開文件之間的關係
每一個文件描述符會與一個打開文件相對應,同時,不同的文件描述符也會指向同一個文件相同的文件可以被不同的進程打開也可以在同一個進程中被多次打開。系統爲每一個進程維護了一個文件描述符表,該表的值都是從0開始的,所以在不同的進程中你會看到相同的文件描述符,這種情況下相同文件描述符有可能指向同一個文件,也有可能指向不同的文件。具體情況要具體分析,要理解具體其概況如何,需要查看由內核維護的3個數據結構。
1. 進程級的文件描述符表
2. 系統級的打開文件描述符表
3. 文件系統的i-node表

進程級的描述符表的每一條目記錄了單個文件描述符的相關信息。
1. 控制文件描述符操作的一組標誌。(目前,此類標誌僅定義了一個,即close-on-exec標誌)
2. 對打開文件句柄的引用

內核對所有打開的文件的文件維護有一個系統級的描述符表格(open file description table)。有時,也稱之爲打開文件表(open file table),並將表格中各條目稱爲打開文件句柄(open file handle)。一個打開文件句柄存儲了與一個打開文件相關的全部信息,如下所示:
1. 當前文件偏移量(調用read()和write()時更新,或使用lseek()直接修改)
2. 打開文件時所使用的狀態標識(即,open()的flags參數)
3. 文件訪問模式(如調用open()時所設置的只讀模式、只寫模式或讀寫模式)
4. 與信號驅動相關的設置
5. 對該文件i-node對象的引用
6. 文件類型(例如:常規文件、套接字或FIFO)和訪問權限
7. 一個指針,指向該文件所持有的鎖列表
8. 文件的各種屬性,包括文件大小以及與不同類型操作相關的時間戳

多道程序執行(分爲順序執行 和 併發執行)。
如果是順序執行: 可在現
如果是併發執行(僞並行):不可在現。

緩衝池 可以由軟件也可以由硬件實現。但是Spooling技術 只能由軟件實現

響應時間:從發出命令到得到響應的時間。

按序分配可以破壞環路等待的條件

一次性給進程分配完全部資源破壞請求與等待條件

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