2010-08-26 89 views

回答

1

進程內存受到保護:在程序之外,通常沒有人可以訪問它。這涉及到「重要」的噱頭:你的程序必須相信它具有可用於自己的整個可尋址空間,事實並非如此。據我瞭解,一個進程的地址空間被拆分爲頁面(我認爲4k塊),並且內核爲這些頁面提供某種索引,這些頁面將它們映射到物理內存或其他設備(如您的硬盤驅動器,這就是你如何做內存映射文件)。只要你的進程試圖訪問一個內存地址,它就會首先到那個地圖來查看地址實際指向的地址,然後根據請求進行訪問。只要進程試圖訪問內核沒有映射到任何地方的頁面,就會出現分段錯誤。因爲內存有些抽象出來,所以內核可以用它做各種各樣的技巧。共享內存必須是一種特殊情況,內核被要求將來自不同進程地址空間的頁面映射到相同的物理位置。

+0

一種做法是在頁面表/ TLB中有一個GLOBAL位,將這些頁面標記爲共享。當然,在談論分頁內存時是有效的。 – Tom 2010-08-26 04:22:11

+0

en ....看起來,從程序的角度看,映射共享內存段和進程專用內存段幾乎是相同的。這是否意味着訪問共享內存單元不再比訪問正常內存單元更耗時? – ppan 2010-08-26 11:34:06

+0

@ppan:不,這並不意味着訪問私有內存頁面和訪問共享內存頁面之間的任何區別。只是對於共享內存而言,內核知道在某些情況下,兩個程序可以映射到相同的物理內存位置是可以的。 – zneak 2010-08-26 16:50:09