[英]Shared Memory Segment in Operating System
共享內存屬於哪里? 這意味着它由堆棧和堆等每個單獨的進程擁有。 所以,其他程序無法訪問其他程序的堆棧。 或者它是一個常見的內存段,可供任意數量的進程使用。 下圖以圖解方式顯示了我的問題。
圖1:
----------------- ----------------- -----------------
| stack | | stack | | stack |
| | | | | |
| Shared m/y | --->| Shared m/y |<--- | Shared m/y |
| | | | | | | |
| heap | | | Heap | | | Heap |
| | | | | | | |
| Data segment | | | Data segment | | | Data segment |
| | | | | | | |
| text |___| | text | |___| text |
----------------- ----------------- -----------------
Process 1 Process 2 Process 3
(要么)
圖2:
-----------------------------------------
| |
| |
| Shared Memory |<--
------->| | |
| | | |
| ----------------------------------------- |
| ^ |
| | |
----------------- ----------------- -----------------
| stack | | stack | | stack |
| | | | | |
| heap | | Heap | | Heap |
| | | | | |
| Data segment | | Data segment | | Data segment |
| | | | | |
| text | | text | | text |
----------------- ----------------- -----------------
Process 1 Process 2 Process 3
在圖1中,每個進程在進程的地址空間內都有一段共享內存。 過程2的共享內存由進程1和進程3訪問。在圖2中,共享內存是所有進程都可訪問的內存段。 因此,在上面兩個場景中,由進程用於共享內存段。
我懷疑你的部分困惑來自術語。 在64位之前的英特爾中,數據按細分組織。 術語段也用於鏈接器來描述如何在程序中組裝數據(在32位Intel中可以映射到硬件段)。 但是,對於您的問題,您應該刪除術語段 。
英特爾64位和大多數非英特爾系統的一般工作方式是將物理內存划分為某些固定大小的PAGE FRAMES(例如4K,1K)。 CPU的存儲器管理單元在相同大小的PAGES上操作。 操作系統為包含頁面的每個進程設置線性邏輯地址空間。 操作系統使用PAGE TABLE將邏輯進程地址空間的頁面映射到物理頁面幀。
當每個進程運行時,它會看到自己的邏輯地址空間,其地址范圍為0到任意值。 每個進程的地址空間中的頁面映射到物理頁面幀,並且內存管理單元使用頁面表自動使用頁面框架使用頁面到物理內存地址進行從邏輯地址的轉換。
該系統使每個過程都不會弄亂其他過程。 通常,如果進程X訪問邏輯地址Q並且進程Y訪問邏輯地址Q,則它們將訪問不同的物理內存位置,因為它們的頁表將具有不同的映射。
我所知道的每個使用邏輯內存轉換的系統都能夠讓多個進程將邏輯頁面映射到相同的物理頁面框架:共享內存。 進程可以使用此機制快速交換數據(代價是管理與該數據的同步)。
在這種類型的共享中,物理頁面幀不必映射到相同的邏輯地址(通常不是)。
處理X可以將頁面幀P映射到頁面A,而處理Y可以將頁面幀P映射到頁面B.
還有另一種形式的共享內存通常以完全不同的方式實現。 處理器或操作系統(在某些處理器上)定義系統地址空間的一系列邏輯地址。 此范圍的地址對於所有進程都是相同的,並且所有進程在此范圍內具有相同的邏輯地址到物理頁面幀的映射。
系統地址受到保護,因此只能在內核模式下訪問,因此進程不能相互混淆。
在這里考慮頁面而不是段。
在共享存儲器模型中,建立由協作進程共享的存儲器區域。 然后,進程可以通過讀取和寫入共享區域來交換信息。
共享內存區域駐留在創建共享內存段的進程的地址空間中。 希望使用此共享內存段進行通信的其他進程必須將其附加到其地址空間。 通常,操作系統會嘗試阻止一個進程訪問另一個進程的內存(病毒試圖破壞它)。 共享內存要求兩個或多個進程同意刪除此限制。 然后,他們可以通過在共享區域中讀取和寫入數據來交換信息。 數據的形式和位置由這些過程決定,不受操作系統的控制。 這些過程還負責確保他們不會同時寫入同一位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.