JavaEE—進程(二)內存管理、通信
一、內存管理
1.映射訪問
2.獨立分布
防崩潰
二、通信
1.獨立性保障
2.方式
2.1管道
2.1.2特點
2.1.2.1進程條件
2.1.2.2方向
2.1.2.3同步性
2.1.2.4性能
2.2消息隊列
2.2.1特點
2.2.1.1方向
2.2.1.2同步性
2.2.1.3性能
2.3共享內存
2.3.1特點
2.3.1.1方向
2.3.1.2同步性
2.3.1.3性能
2.4套接字
前言:
上文【操作系統】進程(一)調度講解了 進程PCB的結構組織、資源分配 以及進程在cpu上 通過操作系統的調度 實現并發執行的效果,本文深入講解 進程的內存管理與進程間通信的相關知識
一、內存管理
1.映射訪問
操作系統 為每個進程 都創建有:
- 模局格式一樣的虛擬地址空間
- 獨屬對應關系的映射表
進程只能操作 直接的虛擬地址空間 經映射表映射著 間接訪問 實際的物理內存,進程 在自己的虛擬地址空間內 最大范圍地訪問 也不可能映射訪問出 自己總的物理內存外面
2.獨立分布
每個進程的虛擬地址空間 整體映射出的 對應整體物理內存 都是完全互相隔離的一塊塊
防崩潰
進程如果在自己的虛擬地址空間內 越界訪問到 未申請開辟的虛擬空間 而造成進程崩潰時,只會破壞 該進程對應的物理內存,接著操作系統 對其進行資源回收,而其它進程的 虛擬空間和物理內存 都不受影響地 繼續運行
二、通信
進程 在操作系統提供的特殊渠道上 獨立置、取信息 來保持隔離地交流
1.獨立性保障
- 寫進程 無法直接連續寫入修改 讀進程內存
- 讀進程 主動地收取數據 擁有 讀取進來判斷是否修改的權利
兩進程 仍然互相保持著獨立地 進行數據交流
2.方式
2.1管道
內核 將寫進程寫入的數據 復制到內核緩沖區 置放,再將其 復制到讀進程中 收取(兩進程是沒有 內核的管道緩沖區映射關系的,無法通過 共享管道緩沖區內存 映射傳輸,所以只能通過 內核復制傳輸)
2.1.2特點
2.1.2.1進程條件
需要 有親緣關系的 父子進程間通信
2.1.2.2方向
一個管道單向通信,得創建兩個管道 才能實現雙向通信
2.1.2.3同步性
數據是 按順序先進 后才有出的 無邊界的 字節流,先進再出 已保證 置取同步性
2.1.2.4性能
兩次內核復制 并且有阻塞等待,效率較低,適合少量數據傳輸
2.2消息隊列
寫進程 按照特定格式(類型+數據) 將信息復制置入 操作系統維護的 郵箱隊列中,讀進程 根據消息類型 從隊列中 復制取出 屬于自己的消息
2.2.1特點
2.2.1.1方向
雙向通信
2.2.1.2同步性
消息是 按順序先進 后才有出的 有格式、有邊界的 結構化數據塊,先進后出 已保證 置取同步性
2.2.1.3性能
兩次內核復制 并且有阻塞等待,效率較低,適合少量數據傳輸
2.3共享內存
操作系統 劃出一塊物理內存 分別額外映射到 兩進程的虛擬地址空間中,兩進程 便能直接映射到 此共享物理內存上 進行置放、收取數據 完成獨立隔離地交流
2.3.1特點
2.3.1.1方向
雙向通信
2.3.1.2同步性
因為讀寫兩進程 可不按先后順序地 映射到 操作獲取 數據,所以需要使用信號量 或互斥鎖 來同步進程 對共享資源的訪問
2.3.1.3性能
不需要 內核中轉復制,進程 直接映射 操作獲取數據,性能極高,能頻繁交換大量數據
2.4套接字
能用于 網絡上 不同計算機的 進程間通信