基礎概念緩存
文件描述fd安全
文件描述符(file description),用於表述指向文件引用的抽象話題概念網絡
文件描述符在形式上是一個非負整數,實際上它是一個索引值,指向內核爲每個進程所維護的該進程打開文件的記錄表,當程序打開一個現有文件或者建立一個新文件時,內核就向該進程返回一個文件描述符異步
unix系統把任何對象看作是文件,文件就是一串二進制流,我門對數據(流)的讀寫操做就是對文件的操做,因此當咱們的進程在作讀寫操做時會返回一個記錄訪問位置的索引值,當咱們繼續操做該文件時可直接經過這個索引值到達上一次的位置.操作系統
用戶空間和內核空間,與進程3d
如今操做系統都是採用虛擬存儲器,對於32位操做系統,它的尋址空間爲4G.操做系統的核心是內核,獨立於普通程序,能夠訪問受保護的內存空間,也有訪問底層硬件設備的全部權限.爲了保證用戶進程不能直接操做內核,保證內核安全,操做系統將虛擬空間劃分爲兩部分,一部分稱爲內核空間,一部分稱爲用戶空間,這兩部分空間大小和地址範圍分別爲1G和3G,內核空間供內核使用,用戶空間供用戶進程使用unix
進程是程序的一次動態執行過程,它經歷了從代碼加載,執行到執行完畢的一個完整過程,這個過程也是進程自己從產生,發展到最終消亡的過程,多進程操做系統能同時運行多個進程,因爲CPU具有分時機制,因此每一個進程都能得到本身的時間片,因爲CPU執行速度很是快,使得全部程序好像是在同時運行同樣對象
在操做系統中進程是進行系統資源分配,調度和管理的最小單位,進程在執行過程當中擁有獨立的內存單元,當操做系統加載程序到內存中,操做系統會爲每一個進程分配4G的虛擬內存空間.地址從0x00000000到0xFFFFFFFF,其中1G(3-4)是內核所使用的內核空間,3G(0-3)是進程使用的用戶空間blog
這裏要注意的是系統爲每一個進程分配4G的虛擬內存空間,實際上這4G的虛擬內存是一個可尋址的地址範圍,並非實際的物理內存,這個可尋址的4G地址範圍由內存區域表來管理.每一個進程所用到的內存區域會經過頁表映射到物理內存,因此每一個進程均可以使用一樣的虛擬內存地址而不衝突,他們的實際物理地址是不一樣的索引
爲了控制進程的執行,內核必須有能力掛起正在CPU上運行的進程,並恢復之前掛起的某個進程的執行.這種行爲被稱爲進程切換,任務切換或上下文切換,儘管每一個進程都有本身的地址空間,但全部進程都在同一個CPU寄存器裏,
所以,在恢復一個進程執行前,內核必須確保每一個寄存器中含有掛起進程時所須要的值.進程恢復執行前必須裝入寄存器的一組數據,稱爲硬件上下文(hardware Context),硬件上下文包含了進程恢復時所須要的全部信息.
一個進程的運行轉到另外一個進程上,須要作不少交接記錄位置的動做,
進程的切換和阻塞
進程的切換是內核執行該進程的時間片到期而主動掛起該進程,切換到另外一個進程的動做.可是進程在一個時間片內執行過程當中,遇到某些指望的事件未發生那麼進程就會放棄處理機成了阻塞,導致進程阻塞的典型事件有:請求I/O,申請緩衝空間等.
緩存IO,
緩衝區以及對緩衝區的操做,是全部IO的基礎,進程執行IO操做能夠簡單的描述爲緩衝區的數據讀與寫
在數據read傳輸過程當中須要將數據從磁盤中拷貝到內核空間的的緩衝區,而後從內核空間拷貝到進程用戶空間,這個過程會經歷兩個階段:1,等待數據準備,2,將數據重內核拷貝到用戶空間,並且這兩個過程是須要時間的,這就形成了阻塞.稱爲阻塞IO
在這個基礎上,爲了充分利用CPU資源,發展出了非阻塞io,IO多路複用,信號驅動IO,異步IO
阻塞IO
當用戶進程調用了recfrom這個系統調用,系統內核就開始了IO的第一個階段,準備數據階段(對於網絡IO,不少時候數據在一開始尚未到達,沒有接收到一個完整的UDP包,這個時候內核就要等待足夠的數據到來,磁盤IO的狀況就是等待磁盤數據從磁盤上讀取到內核空間),這個過程須要等待,而用戶進程這邊整個進程就會被阻塞 ,當內核空間把數據準備好了,返回給用戶進程一個結果,用戶進程才解除阻塞狀態,
非阻塞IO
非阻塞IO是對阻塞IO的一個改進,即在內核未完成準備數據的時候,返回一個狀態error告訴進程我沒準備好,用戶進程收到error狀態會繼續發起發起IO請求,直到內核空間準備好了數據,返回正確的狀態.
IO多路複用
待續.................
https://mp.weixin.qq.com/s?__biz=MzI4NTEzMjc5Mw==&mid=2650554694&idx=1&sn=b923effe8a7feed34f2d6637c4041df9&chksm=f3f833d0c48fbac69c0118c20bb7f8d983e0e571cf7cbf4efffc925c2324533b4d6ca463ac11#rd