graph TD
A["User Process (PostgreSQL Backend)"] --> B{"Virtual Address Space (Backend)"};
B -- Accesses Data --> C["Shared Memory Segment (Mapped into VAS)"];
C --> D{"Shared Buffers (Within Shared Memory)"};
D -- Holds Data from --> E[PostgreSQL Data Files on Disk];
subgraph "Virtual Address Space (Backend)"
B1["Process Private Memory (work_mem, etc.)"]
B2["Shared Memory Segment (for shared_buffers)"]
B --o B1
B --o B2
end
style B fill:#ccf,stroke:#333,stroke-width:2px
style C fill:#9cf,stroke:#333,stroke-width:2px
style D fill:#cff,stroke:#333,stroke-width:2px
style E fill:#eee,stroke:#333,stroke-width:2px
style A fill:#fff,stroke:#333,stroke-width:2px