當前位置:編程學習大全網 - 編程語言 - Linux管道原理?

Linux管道原理?

在Linux原理的學習上,我打算由淺入深,自上而下,也就是先了解,再壹個壹個深入。先了解壹下Linux的流程。

壹. Linux進程背景

按照我的理解,Linux過程上下文是過程組件的集合。包括進程描述符tast_struct、文本段、數據段、堆棧、寄存器內容、頁表等。

1)任務結構

它是壹種數據結構,存儲過程的描述信息,如pid、uid、狀態、信號項、打開文件表等。它是過程管理和調度的重要基礎。

2)用戶堆棧和核心堆棧

顧名思義,用戶棧是進程在用戶模式下運行時使用的壹個棧,它包含了進程在用戶模式下執行時函數調用的參數和局部變量。核心堆棧是進程在核心狀態下運行時使用的堆棧,它存儲用於調用系統函數的參數和調用序列。兩個堆棧指針都存儲在tast_struct結構中。

3)註冊

保存程序計數器、狀態字、通用寄存器和堆棧指針。

4)頁面表

線性地址到物理地址的映射

5)文本段、數據段。

二、Linux進程的現狀

Linux中的進程* * *有五種狀態:就緒、可中斷、未中斷、掛起和死亡。換句話說,linux不區分就緒和運行,它們統稱為就緒狀態。進程的狀態記錄在tast_struct中。

第三,過程控制

1)過程樹的形成

計算機啟動後,BIOS從磁盤的引導扇區加載系統引導程序。它將Linux系統加載到內存中,並跳轉到內核執行。Linux內核執行初始化工作:初始化硬件,初始化內部數據結構,建立進程0。進程0創建進程1,它是所有後續創建進程的祖先,負責初始化所有用戶進程。Process 1創建壹個shell進程,它顯示壹個提示符並等待命令的輸入。

2)流程的創建

任何用戶進程的創建都是由壹個已有的進程完成的,而進程的創建又要經過兩個進程:fork和exec。Fork就是給新流程分配相應的數據結構,復制父流程相應的上下文信息。Exec是將可執行文件的文本和數據轉移到內存中,以覆蓋其原始(從父進程復制而來)並開始執行文本段。

3)過程的終止

系統可以通過調用exit()來終止自身。exit釋放除tast_struct以外的所有上下文,父進程在收到子進程終止的消息後釋放子進程的tast_struct。

4)進程的調度

進程調度由schedule()完成。在壹種情況下,在處理器從內核模式切換到用戶模式之前,它將檢查調度標誌是否為1。如果是1,它將運行schedule()來調度進程。另壹種情況是進程自動放棄處理器,有時候進程是調度的。

進程調度的過程分為兩步。首先,使用相關策略選擇要執行的流程,然後切換上下文。

第四,溝通的過程

進程的通信策略主要包括消息、管道、消息隊列、* *共享存儲區和信號量。

1)信息

消息機制主要用於在進程間傳遞軟中斷信號,通知對方異步事件。發送進程將信號(約定符號)發送給目標進程tast_struct中的信號項,接收進程看到消息後調用相應的處理程序。請註意,處理程序只有在流程執行後才能執行,並且不能立即響應。

2)管道

我理解的是兩個進程在通知緩沖區使用壹個隊列(兩個進程各壹個),發送進程向管道入口發送數據,接收進程從管道出口讀取數據。

3)消息隊列

消息隊列是由操作系統維護的消息鏈表。發送進程根據消息標識符將消息添加到隊列中,接收進程從隊列中讀取消息。

4)***享受儲物區

在內存中打開壹個區域是壹個進程所享有的,也就是說,壹個進程可以把它附加到自己的地址空間中,並操縱這個區域中的數據。

5)旗語

控制流程的同步。

  • 上一篇:優秀育兒心得體會十篇
  • 下一篇:請問工藝(PE)工程師裏面DIP工藝制程如何理解
  • copyright 2024編程學習大全網