操作系統相關知識整理(三)

用戶模式和內核模式

處理器必須提供一種機制,限制一個應用可以執行的指令以及它可以訪問的地址空間範圍。處理器通常是用某個控制寄存器中的一個模式位(mode bit)來提供這種功能的,該寄存器描述了進程當前享有的特權。

設置了模式位:進程就運行在內核模式中,一個運行在內核模式的進程 可以執行指令集中任何指令,並且 可以訪問系統中的任何內存位置。
沒有設置模式位:進程就運行在用戶模式中,用戶模式中的進程 不允許執行特權指令,也不允許訪問地址空間內內核區的代碼和數據。
用戶程序必須通過系統調用間接地訪問內核代碼和數據。
用戶態和內核態的切換:
○1 系統調用
○2 異常(缺頁異常)
○3 外圍設備的終中斷

同步IO,異步IO,阻塞IO,非阻塞IO

同步 IO 和異步 IO 的區別就在於: 數據拷貝的時候進程是否阻塞!
塞 阻塞 IO 和非阻塞 IO 的區別就在於:應用程序的調用是否立即返回!

併發和並行

併發: 指應用能夠交替執行不同的任務。
並行 : 指應用能夠同時執行不同的任務。

Linux打開文件,文件描述符

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

7. 一個指針,指向該文件所持有的鎖列表
8. 文件的各種屬性,包括文件大小以及與不同類型操作相關的時間戳

內核爲所有打開文件維護一張文件表項,每個文件表項包含內容可以由以上結構體看出,其中比較重要的內容有:

a. 文件狀態(讀 寫 添寫 同步 非阻塞等)

b. 當前文件偏移量

c. 指向該文件i節點(i節點)的指針

d. 指向該文件操作的指針(file_operations )

mmap內存映射

linux 提供了內存映射函數 mmap, 它把文件內容映射到一段內存上(準確說是虛擬內存上), 通過對這段內存的讀取和修改, 實現對文件的讀取和修改

mmap 返回的是用戶進程空間的虛擬地址,在 stack 和 heap 之間的空閒邏輯空間( 虛擬空間) 就是用來提供映射的,文件將會被映射到這一區域的某塊虛擬內存上,具體哪一塊若是用戶沒有指定,則由內核來分配。

1 、共享內存: 可以說是最有用的進程間通信方式,也是最快的 IPC 形式。

2 、文件訪問方式:mmap 函數是 unix/linux 下的系統調用,mmap 系統調用並不是完全爲了用於共享內存而設計的。 它本身提供了不同於一般對普通文件的訪問方式,進程可以像讀寫內存一樣對普通文件的操作。

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