zetavg/zh-tw-wikipedia huggingface dataset:
内夫雷达

**內夫雷達**（西班牙語：Nebreda），是西班牙卡斯蒂利亞 - 萊昂布爾戈斯省的一個市鎮。總面積 28 平方公里，總人口 57 人（2020 年），人口密度 2 人 / 平方公里。

## 參考文獻
内奇斯河

**內奇斯河**（英語：Neches River，/ˈneɪtʃɪz/）起源於范贊德縣東部的萊茵河湖，全長 416 英里（669 公里），流經德克薩斯州東部。它的河口在彩虹橋附近的薩賓湖，有兩個主要水庫。幾個城市位於內奇斯河流域，包括泰勒、拉夫金、博蒙特和亞瑟港。

## 參考文獻
内奇考

**內奇考**（德語：Netzschkau）是德國薩克森邦的市鎮，隸屬於福格特蘭郡。總面積為 12.51 平方公里，截至 2021 年 12 月 31 日總人口為 3,777 人。

## 參見

* 薩克森邦市鎮列表

## 參考來源
内奈

**巴伐利亞的海倫妮・卡羅琳・特蕾澤女公爵**（德語：Helene Caroline Therese Herzogin in Bayern，1834 年 4 月 4 日 —1890 年 5 月 16 日），處維特爾斯巴赫王朝，暱稱**內內**（Néné，一譯**內奈**），巴伐利亞女公爵。

## 家系

### 先輩

### 子女

巴伐利亞的海倫妮和馬克西米利安・安東・馮・圖爾恩・翁德・塔克西斯有四個子女：

* 路易絲・馮・圖爾恩・翁德・塔克西斯公主（1859–1948）
  * 婚姻：1879 年：弗里德里希・馮・霍亨索倫 - 西格馬林根王子
* 伊莉莎白・馮・圖爾恩・翁德・塔克西斯公主（1860–1881）
  * 婚姻：1877 年：米格爾・雅努阿里奧・德布拉干薩
* 馬克西米利安・馬里亞・馮・圖爾恩・翁德・塔克西斯王子（1862–1885）
* 阿爾貝特・馮・圖爾恩・翁德・塔克西斯王子（1867–1952）
  * 婚姻：1890 年：奧地利的瑪格麗特・克萊門蒂妮大公

## 參考書目

* Erika, Bestenreiner. Sisi und ihre Geschwister Ungekürzte Taschenbuchausg. München: Piper. 2003. ISBN 3492240062. OCLC 76545486.
* 1886-1953, Corti, Egon Caesar, Conte. Elisabeth, die seltsame Frau : nach dem schriftlichen Nachlass der Kaiserin, den Tagebüchern ihrer Tochter und sonstigen unveröffentlichten Tagebüchern und Dokumenten 39. Aufl. Graz: Styria. [1982], ©1934. ISBN 3222108978. OCLC 10559375.
* 1962-, Graf, Bernhard. Sisis Geschwister. München. ISBN 9783869069777. OCLC 1026358136.
* Sigrid-Maria, Grössing. Zwei Bräute für einen Kaiser : Sisi und ihre Schwester Nené. Regensburg: Mittelbayerische Druck- und Verlags-Gesellschaft. 1999. ISBN 393190461X. OCLC 43628048.
* Sigrid-Maria, Grössing. Sisi und ihre Familie. München: Ueberreuter. 2005. ISBN 3800038579. OCLC 63127298.
* Brigitte, Hamann. Elisabeth : Kaiserin wider Willen Überarbeitete Neuausg. München: Piper. 1998. ISBN 3492229905. OCLC 40652332.
内奥内利

**內奧內利**（義大利語：Neoneli），是義大利奧里斯塔諾省的一個市鎮。總面積 48 平方公里，人口 729 人，人口密度 15.2 人 / 平方公里（2009 年）。ISTAT 代碼為 095032。

## 參考

## 外部連結
内奥尔特云

**内歐特雲**（英語：Inner Oort cloud），又稱**希爾斯雲**（英語：Hills cloud）是一個推測存在的星周盤區域，位於距太陽 3 千到 2 萬天文單位之間的空間，處於柯伊伯帶外側、歐特雲內側。

根據推測，内歐特雲區域呈圓盤狀，內部的彗核是歐特星雲的數十甚至數百倍，是長周期彗星很好的補充源。如果内歐特雲區域確實存在的話，位於這一區域內的彗星數量將是歐特雲的五倍。

## 歷史

1950 年，荷蘭天文學家揚・歐特提出了歐特雲的概念。他認為，在太陽系邊緣存在一個能孕育長周期彗星的雲團。在 1981 年，美國天文學家傑克・希爾斯提出在歐特雲內側存在一個能產生彗星的區域，這就是今天所說的「内歐特雲」或「希爾斯雲」區域。希爾斯認為，這一區域中產生的彗星比歐特雲外側更多。在希爾斯提出内歐特雲的概念後，西德尼・范登貝赫和馬克・貝利兩名天文學家分別在 1982 年和 1983 年推測了内歐特雲的結構。

## 概覽

内歐特雲區域受到太陽影響較少，因此很可能較好維持了 45 億年前太陽系形成時的環境。因為内歐特雲受到的太陽引力作用比歐特雲外側更強，内歐特雲得以保持圓盤狀，而不是像歐特雲外側那樣呈球殼狀。根據推測，内歐特雲區域的彗核和彗星的數目都比歐特雲外側要多，這一區域甚至可能是太陽系中彗星最密集的區域。内歐特雲可以產生大量進入太陽系中心的彗星雨，來自内歐特雲區域的彗星甚至有可能曾撞擊地球，造成過地球上的生物大滅絕。内歐特雲內的物質會源源不斷地進入歐特雲外側，補充歐特雲的質量。這也很可能是歐特雲內一直有天體在離開太陽系或靠近太陽中心，卻能一直維持存在的原因。

内歐特雲區域天體的總質量目前尚無精確值，一項研究認為内歐特雲天體的總質量大約是地球質量的 13.8 倍，也有人估算這一數字應該是 500-1000 倍地球質量。

## 參考資料

## 拓展閱讀

* Heisler, Julia; Scott Tremaine. The influence of the galactic tidal field on the Oort comet cloud (PDF). Icarus. 1986, **65**: 13. Bibcode:1986Icar...65...13H. doi:10.1016/0019-1035(86)90060-6.
* Dones, L.; Weissman, P. R.; Levison, H. F.; Duncan, M. J. Oort Cloud Formation and Dynamics. D. Johnstone, F.C. Adams, D.N.C. Lin, D.A. Neufeld, and E.C. Ostriker (編). Star Formation in the Interstellar Medium: In Honor of David Hollenbach, Chris McKee and Frank Shu (PDF) **323**. San Francisco: Astronomical Society of the Pacific. 2004: 371 [2019-01-13]. （原始內容存檔 (PDF) 於 2020-10-22）.
内奥米·卡斯尔

**內奧米・卡斯爾**（英語：Naomi Castle，1974 年 5 月 29 日 —），澳大利亞女子水球運動員。她曾代表澳大利亞參加 2000 年和 2004 年夏季奧林匹克運動會水球比賽，其中 2000 年奧運會獲得一枚金牌。

## 參考資料
内奥米·奥雷斯克斯

**內奧米・奧雷斯克斯**（英語：Naomi Oreskes，1958 年 11 月 25 日 —）是一位美國科學史家，哈佛大學教授，主要作品有《販賣懷疑的商人》（_Merchants of Doubt_，與埃里克・M・康韋合著）、《西方文明的崩潰：未來的視角》（_The Collapse of Western Civilization：A View from the Future_，與埃里克・M・康韋合著）、《為什麼信任科學 —— 反智主義、懷疑論及文化多樣性》（_Why Trust Science?_）等。

## 參考文獻

## 外部連結

* Oreskes' home page （頁面存檔備份，存於網際網路檔案館） at Harvard University
* 內奧米・奧雷斯克斯在網際網路電影資料庫（IMDb）上的資料（英文）
* _Why we should believe in science_ （頁面存檔備份，存於網際網路檔案館）. Lecture in TED-Salon, New York, May 2014.
* _The Collapse of Western Civilization_ （頁面存檔備份，存於網際網路檔案館）. _The Science Show_, ABC Radio National, 16 August 2014.
* _SILA – The Competing Interests Shaping the Future of our Planet_ （頁面存檔備份，存於網際網路檔案館）. Panel Discussion, American Academy of Arts & Sciences, 18 March 2014. (Transcript （頁面存檔備份，存於網際網路檔案館）.)
* 『I Can’t Just Stand on the Sidelines』: An Interview with Naomi Oreskes （頁面存檔備份，存於網際網路檔案館） by Claudia Dreifus October 18, 2019
内奥米·密契森

**內奧米・密契森**（英語：Naomi Mitchison，全稱**密契森男爵夫人內奧米・瑪麗・瑪格麗特・密契森**，Naomi Mary Margaret Mitchison, Baroness Mitchison，1897 年 11 月 1 日 —1999 年 1 月 11 日，娘家姓**霍爾丹**）是一位蘇格蘭小說家和詩人，總共寫了 90 多本歷史和科幻小說、遊記和自傳。

## 個人生活

內奧米・密契森的父親是生理學家約翰・斯科特・霍爾丹，兄長是遺傳和進化生物學家 J・B・S・霍爾丹。她 1916 年與狄克・密契森結婚，成年的長子是細菌學家丹尼斯・密契森，次子是動物學家默多克・密契森，三子是動物免疫學家阿夫里奧・密契森，孫輩中包括細胞生物學家蒂姆・密契森和漢娜・M・密契森。

## 紀念

詹姆斯・杜威・沃森的科學研究自傳《雙螺旋：發現 DNA 結構的故事》在扉頁就寫了「獻給內奧米・密契森」

## 參考文獻

## 外部連結

* Finding aid to Naomi Mitchison papers at Columbia University. Rare Book & Manuscript Library. （頁面存檔備份，存於網際網路檔案館）
* Literary Encyclopedia detailed entry （頁面存檔備份，存於網際網路檔案館）, which says she had seven children and that she received her CBE in 1981
* Guardian obituary, which states she had six children, and that she received her CBE in 1985
* Naomi Mitchison – a queen, a saint and a shaman, by Neil Ascherton, Guardian 17 January 1999 （頁面存檔備份，存於網際網路檔案館）
* Spartacus entry （頁面存檔備份，存於網際網路檔案館）
* The Scotsman biographical profile （頁面存檔備份，存於網際網路檔案館）
* Another entry from Canongate publishers
* Interview 15 April 1989 with Naomi Mitchison （頁面存檔備份，存於網際網路檔案館）, focusing on her Arthurian novel "To the Chapel Perilous" (1955)
* Gilbert "Dick" Mitchison entry
* Haldane genealogy （頁面存檔備份，存於網際網路檔案館） her grandparents were Robert Haldane of Cloan (1805–77) and his second wife Mary Elizabeth Burdon-Sanderson (d. 1925)
* Partial Bibliography （頁面存檔備份，存於網際網路檔案館）
* Naomi Mitchison – Towards A Bibliography （頁面存檔備份，存於網際網路檔案館） Extensive ongoing bibliography project by Violet Williams (NM's late secretary), Roger Robinson, and Caroline Mullan – lists over 2000 separate items
* some literary information, and useful links
* British Honours
* 与内奥米・密契森相关的档案。英國國家檔案館.
* The Diary Junction Blog （頁面存檔備份，存於網際網路檔案館）
* Diary Junction website with links （頁面存檔備份，存於網際網路檔案館）
* Borthwick Institute for Archives, University of York, files of her writings whilst in Botswana
* An Experimental Life: Books by and about Naomi Mitchison, by Nic Clarke. Article posted at the _Strange Horizons_ website 30 June 2008
* Biography at The Open University （頁面存檔備份，存於網際網路檔案館）
* Encyclopedia.com （頁面存檔備份，存於網際網路檔案館）
内奥米·郎

**內奧米・瑞秋・郎**（英語：Naomi Rachel Long，娘家姓「Johnston」，1971 年 12 月 13 日 —），是北愛爾蘭中間派政治人物。她曾任貝爾法斯特市議會議員、英國下議院議員、歐洲議會議員，現任北愛議會議員，是全北愛唯一出任過所有直選職位的政治家。

2001 年獲選為貝爾法斯特市議會議員，2003 年獲選為北愛議會議員，2006 年起擔任聯盟黨副黨魁，再於 2009 年獲選為市長。

2010 年，她意外擊敗時任民主統一黨黨魁彼德・羅賓遜，成為首名為北愛聯盟黨取得下議院議員、以及自 1914 年首名取得北愛下議院議席的自由派人士。她隨後卸任市長、市議員和北愛議會議員職務。然而 5 年後，她尋求連任失敗。

2016 年，她重返北愛議會，同年獲選為黨魁。她領導該黨在 2017 年北愛議會選舉中守住所有議席，更於 2019 年地方議會選舉中為該黨增加了 65% 的議席。除此之外，她本人在同年的歐洲議會選舉中破天荒地取得聯盟黨首個歐洲議會議席，直至翌年英國脫歐；她的副黨魁亦於 2019 年 12 月的下議院選舉中取得議席，是該黨繼她本人後第二次，儘管她未能取回東貝爾法斯特選區。

不足一個月後，她重返北愛議會，並因新行政委員會組成而就任司法大臣。2022 年，因議會選舉後新行政委員會未能及時組成而自動卸任。

## 參考文獻

## 外部連結

 維基共享資源上的相關多媒體資源：內奧米・郎

* * 英國國會的個人檔案
* 公鞭記載的投票紀錄
* TheyWorkForYou 記載的國會紀錄
内妓

**家妓**通作**家伎**，或稱**女妓**、**伎女**、**女樂**、**舞女**、**內妓**、**妓妾**、**侍兒**等，是中國傳統倡伎女樂的一類。通常是貴族、士大夫、官宦家庭中豢養，擅長歌唱、舞蹈、樂器演奏等技藝，為家主提供聲色和性服務的女性。法律上，她們沒有配偶身份，不入家籍，亦可歸為姬侍一類。宋朝之前，法律身份多為隸屬家主的奴婢。宋朝時，轉化為與家主訂立契約的平民身份。

## 歷史演變

中國古代「妓」通「伎」。先秦時期即有關於家妓的記載。春秋時期，晉悼公因武將魏絳的和戎之功，賜予八名女樂。這被研究者認為是史書記載的中國最早的家妓。漢朝時，私家蓄養的女樂歸於家妓性質。三國時，曹魏治下的北方地區上層家庭多豢養家妓。魏晉南北朝時，豢養家妓之風盛行。南齊時，武帝於永明六年（488 年），「敕位未登黃門郎，不得畜女妓」。但這種以行政手段抵制上層家庭豢養家妓之風，並未成功。在南朝治下的江南因經濟發展，「富商大賈」也開始豢養家妓。當時，沒有豢養家妓的官員反而是少數，受到社會輿論讚賞。

唐代官妓、家妓興盛。此時家妓身份上與其她姬侍沒有嚴格的區分，與婢女（婢妾）同類，但一般不從事家務勞動，而是男性的「內寵和歌舞人」。當時，妾、家妓多出身娼妓、優伶，以及良家小戶女子。地位卑微，然而生活優裕。

宋朝時，家妓身份多為平民，對其以契約方式進行管理約束，而契約條款又有延續唐代奴婢制度內容。研究者指出，宋代家妓沒有前朝各代對妓女身份的限制，無官方懲罰的色彩，也沒有元明清時種族歧視和家庭迫害的成分。

## 注釋
内姆斯

**內姆斯**（德語：Nehms）是德國什勒斯維希－霍爾斯坦州的一個市鎮。總面積 15.31 平方公里，總人口 565 人，其中男性 293 人，女性 272 人（2011 年 12 月 31 日），人口密度 37 人 / 平方公里。

## 參見

* 什勒斯維希－霍爾斯坦州市鎮列表

## 參考
内姆斯多夫-格伦多夫

**內姆斯多夫 - 格倫多夫**（德語：Nemsdorf-Göhrendorf）是德國薩克森 - 安哈特州的一個市鎮。總面積 17.11 平方公里，總人口 865 人，其中男性 452 人，女性 413 人（2011 年 12 月 31 日），人口密度 51 人 / 平方公里。

## 參見

* 薩克森 - 安哈特州市鎮列表

## 參考
内姆梅

**內姆梅**（愛沙尼亞語：Nõmme）是愛沙尼亞首都塔林下轄的八個市區之一。內姆梅下分為 8 個分區。愛沙尼亞人是這裡的最大民族。2014 年 11 月，內姆梅區有人口 39,564 人。

## 參考資料

## 外部連結

* 官方網站
内姆滕

**內姆滕**（德語：Nehmten）是德國什勒斯維希－霍爾斯坦州的一個市鎮。總面積 22.04 平方公里，總人口 275 人，其中男性 138 人，女性 137 人（2011 年 12 月 31 日），人口密度 12 人 / 平方公里。

## 參見

* 什勒斯維希－霍爾斯坦州市鎮列表

## 參考
内姆鲁特山

**內姆魯特山**（土耳其語 Nemrut Dağ或 _Nemrut Dağı_，庫爾德語 Çiyayê Nemrûd，亞美尼亞語 նեմրութ），海拔 2,134 米，位於土耳其東部阿德亞曼省。在山頂是古代科默金王國的國王安梯奧徹斯一世為自己修造的陵墓，陵墓用石頭壘成，高 49 米，直徑為 152 米，東、西、北三面由台階式的院落圍合，東台傍山，有兩道矮牆，上面有一尊他自己高 8-9 米的雕像，兩側各有獅子和鷹的雕像。另外有 5 尊希臘和波斯的神像，各高達 7 米，頭部是用整個石塊雕造，身體是石塊壘築的，現已倒塌散落。神像底座有刻有神的名稱，和有關宗教儀式、法律、敕令等銘文。雕像對面有一座金字塔，為祭祀火神的場所。

西台有一個獅子浮雕，前胸有新月和 19 顆星，是代表公元前 62 年 7 月 7 日時的木星、水星和火星的運行位置，是安梯奧徹斯一世登基的日子。

北台被一道 3 米高 80 米長的圍牆環繞，入口處有鷹獅雕像，是舉行祭祀儀式的場所。

1881 年，德國工程師卡爾・塞斯特對這個遺址進行了發掘，但沒有找到墓室的入口。

1987 年，被聯合國教科文組織列為世界遺產，成為旅遊觀光地，每年 7 月到 8 月期間，附近的阿德亞曼市有直達當地的公車和直升機。

## Gallery

* * * * * * * * * * * * * * * * * * * *

## 外部連結

* 導遊和圖片 （頁面存檔備份，存於網際網路檔案館）
内娱

**中國大陸演藝圈**，又稱**中國演藝圈**，涵蓋中國大陸的歌、影、視、網絡等領域。根據中國國家統計局於 2019 年發布的數據顯示，文化娛樂產業的營業收入為 86,624 億元人民幣，占當年第三產業的 16.21%。據 2018 年統計，娛樂明星粉絲人數達到 7,498 萬。當中 20 到 29 歲的青年人占比達到 71.2%，女性占比為 61.1%。

## 歷史

### 1978 年前

文革時知青們上山下鄉，日常生活泛政治化，娛樂圈在當時稱為「文藝界」或「文藝戰線」，因此演員或歌手又自稱「文藝戰士」或「文藝一兵」，並沒有「偶像」或「明星」的說法。和 2010 年代比起來，知青年代的文藝戰士有「愈窮愈光榮」的說法。

### 1978-2000 年代

1978 年知青大返城以及恢復高考，直至 2007 年，娛樂圈的從業人員多數來自「學院派」，也就是中華人民共和國高等教育的表演系（尤其北電、上戲、中戲、廣院、軍藝）。這批畢業生質量高，而且背景平凡，例如 1990 年中戲的新疆班招收了普通文藝青年陳建斌、王學兵、李亞鵬，1999 年中戲招收了下崗職工家庭出身的李光潔。2007 年後，流水式的流量明星「造星」顛覆了學院派的培養人才功能，因為很多學生在入校前已經有全國知名度和商業包裝，例如周冬雨、張一山、楊紫；再不濟就是入校前也有省級的知名度，例如秦俊傑、蔣勁夫、古力娜扎；在藝考排名前列的不知名尖子生則要在《演員的誕生》等節目中如滄海遺珠般被發掘。

### 2010 年代

2017 年起大型選秀網絡綜藝亮相，形成了一個平行於藝術高校的人才訓練培養體系，吸收了大批 2000 年代出生的「偶像派」藝人。

### 2020 年代

2021 年 9 月 2 日，中共中央宣傳部印發《關於開展文娛領域綜合治理工作的通知》。《通知》指出，內娛的「陰陽合同」、逃稅、「天價片酬」等問題有反覆，流量至上、畸形審美、「飯圈」亂象、「耽改」之風等新情況出現，一些從業人員的政治、法律、道德意識不強，違法失德言行時有發生；因此，《通知》要求加強對演藝市場的管理，壓實社交媒體平台責任，嚴格內容監管，加強引導、宣傳和教育，完善制度建設和黨組織領導。對演藝市場的管理，《通知》提出要強調業內企業的社會責任，合理配置成本比例，遏制不當牟利，嚴厲查處逃稅行為；對社交媒體，《通知》要求打擊流量造假行為，嚴厲處理牟取不當利益的營銷號，嚴厲處理「互撕」信息，改善熱搜、推薦榜單的管理；對內容監管方面，《通知》提出要嚴管綜藝節目，禁止未成年人參加選秀節目，加強遊戲內容審核，推進防沉迷系統，完善實名驗證；《通知》提出要引導青少年樹立正確的價值觀，禁止義務教育階段的未成年人參加線下應援活動，加強對青少年的普法教育；《通知》還要求加強對從業人員的教育、培訓和引導；就制度建設與組織領導的問題，《通知》要求加大對違法失德藝人的懲處，禁止劣跡藝人復出，規範廣告代言，規範藝人經紀制度，強化行業協會的作用，要求各級黨組織嚴格落實主管和屬地責任，將相關工作納入意識形態工作責任制、列入重要議事日程，加強跨部門、領域的協同合作；《通知》還提出要研究制定演員經紀機構、網絡表演經紀機構、粉絲社群管理、經紀公司管理、直播管理、演藝明星金融產品和遊戲產品代言管理的制度。

## 爭議事件

### 潛規則 / 性侵害

* 2006 年張鈺發佈導演潛規則的錄像，是揭露中國演藝圈潛規則第一人
* 2006 年肖瓊揭露電視劇《畫家村》選角潛規則
* 2007 年沈佳妮揭露電影《西幹道》強逼裸戲

又參見：中國大陸強姦問題、＃MeToo (中國大陸)

### 粉絲飯圈

* 2020 年肖戰事件
* 2021 年《青春有你 3》倒牛奶事件

## 相關條目

* 劣跡令
* 香港娛樂圈
* 台灣演藝圈

## 參考文獻

## 外部連結

* 中央宣傳部有關部門負責人就文娛領域綜合治理工作答記者問 - 新華社 （頁面存檔備份，存於網際網路檔案館）
内子

**妻**，是婚姻中對女性配偶的稱謂，在異性婚姻中與夫相對應。

## 稱呼

### 漢語

「妻」一詞的來歷最早見於《易經系辭》：「人於其官，不見其妻。」在古代，妻子一詞指代是妻與子。唐代後「妻子」漸漸成為所有男人之異性配偶之通稱。

中國古時對他人稱自己的妻子多以**拙荊**或**內人**，對自己妻子稱**娘子**，「**老婆**」一詞則源於唐代。

進入現代後，則出現了書面與口語兩種說法。不同的地方也有不同的叫法。口語最常見的有「**老婆**」、「**媳婦（兒）** 」，此外還有堂客、**太太**、**內子**、**太座**、愛人、親愛的、女人、孩子的媽（娘）、母（台語，國語諧音「某」）、牽手、另一半、蜜糖、甜心…… 等等，因人而異，有多種變化，可隨場合與心情隨意使用。書面用語則仍然保留「內子」、「內人」等對他人稱自己妻子的名稱。

「太太」一詞，源自於周朝立國前的三位君王──周太王、季歷、周文王的正室太姜、太任、太姒，合稱「三太」，表示自家妻子的賢德可比這三位國母，是帶著些許詼諧意味。

「前妻」是再婚的男性稱呼已去世的或離婚了的妻子，區別於現在的妻子。

21 世記以來，因受日語影響，有些年輕人以「人妻」稱之，包括出現在新聞或電視劇中，例如《犀利人妻》。

有些人會稱呼姐妹淘為老婆，列如 S.H.E. 的成員會呼叫對方為老婆， 也有首國語流行曲叫老婆。

臺灣話中將妻子雅稱為牽手，清朝初年臺灣文獻記載臺灣原住民族、平埔人稱妻為牽手，但根據更早的 16-17 世紀馬尼拉文獻，「牽手」是菲律賓的漳州人最早使用，學者推測「牽手」一詞可能最早是個流行於福建漳泉地區「外來語」。後在臺灣普遍使用，向外人謙稱自己配偶；而菲律賓馬尼拉閩南話、咱人話文獻中也有相同用語。

## 一夫一妻多妾制中的妻子類型

在某些一夫一妻多妾制裡，妻子有等級之分，可分為嫡妻和庶妻 (庶妻並非正式稱號，實際上只有嫡妻可稱為妻)。嫡妻即正妻，禮制上與夫平等。庶妻即妾，地位低很多。娶妻是用婚書，納妾 (不能稱為娶妾) 則只用妾契，因妾是買賣得來之半貨物，而妻是三書六禮迎娶之正式家族成員。在中國，早期庶妻又有媵和妾的區別，媵地位較妾高。首位正妻又稱元配、髮妻，元配死亡或離婚後所娶的正妻稱為繼室，又稱填房。

若同時有多於一位嫡妻，則元配以外之嫡妻稱為平妻 (除特別情況，多數朝代不容許娶多於一妻)。

## 參見

* 牽手：臺語中稱妻子為牽手
* 女朋友
* 情婦
* 丈夫
* 妾
* 婢妾
* 前妻
内子座

**內子座**是位於日本愛媛縣喜多郡內子町重要傳統的建造物群保存地區「八日市護國」附近的一個歌舞伎劇場。於 1916 年完工，現被列為國家重要文化財。

為木造二層樓建築，最大觀眾人數為 650 人，佔地面積 302 坪，建築面積 242 坪（1 樓 177 坪、3 樓 65 坪）。

## 歷史

內子町在明治末期靠著生產木臘和絲綢而繁榮，在大正天皇即位後，當地人決定共同出資建立可供日本傳統藝能演出的場所。隨著時代變化，後來成為放映電影、落語演出的功能。在建築老化後，曾被考慮拆除，但因接近重要傳統的建造物群保存地區「八日市護國」，居民期望可以做為傳統建築暨序保留，最終在內子町公所規劃下，完成復原工程，並恢復為歌舞伎為主的表演場所。

### 年表

* 1915 年 2 月：中田鹿太郎等 17 人發起成立「大典記念株式會社內子座」。
* 1915 年 8 月：工程開工。
* 1916 年 2 月：完工啟用。
* 1950 年：一樓的桝席被撤去改設置座椅，成為接近電影院的形式。
* 1967 年 3 月：珠飾會社解散，改隸屬內山商工會所有。
* 1967 年 5 月：改做為商工會館使用，主要功能為放映電影及音樂表演。
* 1982 年 9 月：內山商工會將其捐蹭給內子町公所。
* 1982 年 9 月：被列為內子町有形文化財。
* 1983 年 3 月：內子地區舊市區被愛緣縣列為縣指定文化村落。
* 1983 年 10 月：作為文化村落計畫的一部分，開始內子座復員工程。
* 1985 年 9 月：復原工程完成。
* 1995 年 10 月：第二期復原工程完成。
* 2015 年 7 月：被列為國家重要文化財。

## 主要設備

* 枡席
* 迴轉舞台
* 奈落
* すっぽん
* *

## 相關條目

**日本的芝居小屋**

* 康樂館：位於秋田縣鹿角郡小坂町，建於 1910 年，為和洋混合的木造芝居小屋。
* 永樂館：位於兵庫縣豐岡市，建於 1901 年，為原地保存的最古老芝居小屋。
* 舊金毘羅大芝居：位於香川縣仲多度郡琴平町，建於 1836 年的歌舞伎劇場，是目前日本現存最古老的歌舞伎劇場。
* 嘉穗劇場：位於福岡縣飯塚市，建於 1931 年。
* 八千代座：位於熊本縣山鹿市，建於 1901 年。

## 外部連結

* 內子座 （頁面存檔備份，存於網際網路檔案館） - 內子町公所官方網頁
内字

**外字**（日語：外字 _gaiji_），在中文信息處理中是指給定字符集之外的漢字。源自日語的「表外漢字」（日語：表外漢字 _hyōgai kanji_）。與用表音文字書寫的語言不同，在東亞表意文字系統如中文漢字、日文漢字中，沒有固定數量的字符集。一般字符集只含有 8,000 到 15,000 的常用字，另外數萬個非常用字、生僻字，往往沒有在各國的標準中給予編碼。另外一個情況是異體字：一個表意文字（漢字）在不同的歷史時期、地域產生了不同的字形，而一些地名、人名等專有名詞必須要使用傳統的寫法，需要使用這些冷僻字形，造成了生僻字問題，日語中稱為「外字」問題。

## 內字

而**內字**是與外字相對的概念。
内存

**隨機存取記憶體**（英語：Random-access memory，縮寫：**RAM**）是與中央處理器直接交換資料的記憶體。它可以隨時讀寫（重新整理時除外，見下文），而且速度很快，通常作為作業系統或其他正在執行中的程式的臨時資料儲存媒介。

主記憶體（Main memory）即電腦內部最主要的記憶體，用來載入各式各樣的程式與資料以供中央處理器直接執行與運用。由於 DRAM 的 CP 值很高，且擴展性也不錯，是現今一般電腦主記憶體的最主要部分。2011 年生產電腦所用的主記憶體主要是 DDR3 SDRAM，而 2016 年開始 DDR4 SDRAM 逐漸普及化，筆電廠商開始在筆電以 DDR4 記憶體取代 DDR3L。

## 分類

RAM 記憶體可以進一步分為靜態隨機存取記憶體（SRAM）和動態隨機存取記憶體（DRAM）兩大類。SRAM 具有快速存取的優點，但生產成本較為昂貴，一個典型的應用是快取。而 DRAM 由於具有較低的單位容量價格，所以被大量的採用作為系統的主記憶體。

## 動態隨機存取記憶體（DRAM）的特點

### 隨機存取

所謂「隨機存取」，指的是當記憶體中的訊息被讀取或寫入時，所需要的時間與這段資訊所在的位置無關。相對地，有串行存取記憶體包括順序存取記憶體（如：磁帶）和直接存取記憶體（如：磁碟）。

### 揮發性

當電源關閉時 RAM 不能保留資料。如果需要儲存資料，就必須把它們寫入一個長期的儲存裝置中（例如硬碟）。RAM 和 ROM 相比，兩者的最大區別是 RAM 在斷電以後儲存在上面的資料會自動消失，而 ROM 則不會。

### 較高的存取速度

現代的隨機存取記憶體幾乎是所有存取裝置中寫入和讀取速度最快的，存取延遲也和其他涉及機械運作的儲存裝置（如硬碟、光碟機）相比，也顯得微不足道。但速度仍然不如作為 CPU 快取用的 SRAM。

### 需要重新整理

現代的隨機存取記憶體依賴記憶體儲存資料。電容器充滿電後代表 1（二進制），未充電的代表 0。由於電容器或多或少有漏電的情形，若不作特別處理，電荷會漸漸隨時間流失而使資料發生錯誤。**重新整理**是指重新為電容器充電，彌補流失了的電荷。DRAM 的讀取即有重新整理的功效，但一般的定時重新整理並不需要作完整的讀取，只需作該晶片的一個列（Row）選擇，整列的資料即可獲得重新整理，而同一時間內，所有相關記憶晶片均可同時作同一列選擇，因此，在一段期間內逐一做完所有列的重新整理，即可完成所有記憶體的重新整理。需要重新整理正好解釋了隨機存取記憶體的揮發性。

### 對靜電敏感

正如其他精細的積體電路，隨機存取記憶體對環境的靜電荷非常敏感。靜電會干擾記憶體內電容器的電荷，引致資料流失，甚至燒壞電路。故此觸碰隨機存取記憶體前，應先用手觸摸金屬接地。

## 記憶體的使用

電腦執行時，電腦的主記憶體按照被使用情況可分類為：

* 可利用（Available）實體記憶體：可立即分配給程式使用的記憶體。包括：
  * 空閒（Free）實體記憶體：完全未被使用，內容為全 0
  * 快取（Cached）實體記憶體
    * 備用（standby）實體記憶體：作業系統預先把可能要用到的硬碟資料載入所占用的記憶體，還沒被使用者行程所使用，因此可隨時丟棄從新初始化為 0
    * 已修改（modified）實體記憶體：已被修改過的 caching 用途的記憶體，可在任意時刻寫回硬碟檔案（不是分頁檔案）然後被重用。由於硬碟 I/O，已修改（modified）實體記憶體不能計入空閒（Free）實體記憶體
* 被使用（used）實體記憶體：已經被行程使用的記憶體
  * 使用者行程使用的實體記憶體，即工作集（Working set）。Working Set 包含了可能被其他程式共享的記憶體，例如 DLL。所以所有行程的 Working Set 加起來有可能大於實際的被使用（used）的實體記憶體。Private Bytes 是只被本行程提交（commit）的虛擬位址空間，不包括其他行程共享的記憶體。Virtual Byte 是整個行程占用的全部虛擬位址空間。32 位 Windows 使用者模式下，行程最大可以使用 2GiB，可以通過修改 Boot.ini 檔案擴充為最大可以使用到 3GiB。工作管理員中的 Memory Usage 對應的是 working set，VM Size 對應的是 private bytes
  * 核心行程使用的實體記憶體
    * 分頁的核心行程使用的實體記憶體：可以交換到分頁檔案中，從而可被回收的實體記憶體
    * 未分頁（Non paged）的核心行程使用的實體記憶體：不能交換到分頁檔案的記憶體，總是要保留在實體記憶體中
* 硬體保留（hardware reserved）的實體記憶體：被 CPU 中的 GPU 核心或者其他外設硬體占用的，不由作業系統使用的記憶體

## 記憶體牆

「記憶體牆」是指 CPU 與 CPU 晶片外的記憶體之間的速度差距越來越大，其中一個造成差距的重要原因是晶片邊界之外的通訊頻寬有限，又稱為頻寬牆。從 1986 年到 2000 年，CPU 所提升速度的年變率達 55%，記憶體速度卻只提高了 10%。由此趨勢可預料記憶體延遲將成為電腦效能的巨大瓶頸。

CPU 速度提升明顯放緩，一部分原因是由於重大的物理屏障，一部分原因則是目前的 CPU 設計已經在某種意義上撞上了記憶體牆。英特爾在一份 2005 年的檔案中總結了這些原因。

> 首先，隨著晶片幾何尺寸縮小及時脈頻率提高，電晶體漏電流會增加，導致超額的功耗和熱量... 其次，因為記憶體的存取時間無法跟上時脈頻率的成長，導致更高的時脈速度所帶來的優勢被記憶體的延遲抵消。第三，對於某些應用，隨著處理器速度的提高（由於所謂的馮・諾依曼瓶頸），傳統的序列架構變得越來越低效，進一步削弱了頻率提高可帶來的收益。此外，部分原因是由於固態元件內產生電感的方法受到限制，訊號傳輸中的電阻 - 電容延遲會隨著特徵尺寸的縮小而增加，這就額外帶來了頻率增加也無法解決的瓶頸。
> 
> 

## 相關條目

* 電腦記憶體
* 唯讀記憶體（ROM）
* DRAM
* SRAM
* 快取（Cache）
* 雙埠隨機存取記憶體（DPRAM）
* NVDIMM

## 參考文獻

## 外部連結

 維基共享資源上的相關多媒體資源：隨機存取記憶體
内存一致性模型

**記憶體一致性模型**描述的是程序在執行過程中記憶體操作正確性的問題。記憶體操作包括讀操作和寫操作，每一操作又可以用兩個時間點界定：發出（Invoke）和響應（Response）。在假定沒有流水線的情況下（即單個處理器內指令的執行是按順序執行的），設系統內共有 N 個處理器，每個處理器可發出 $s_{n}(0<n\leq N)$ 個記憶體操作（讀或寫），那麼總共有： ${\frac {(\sum _{n=1}^{n=N}s_{n})!}{\prod _{n=1}^{n=N}s_{n}!}}$ 種可能的執行順序。記憶體一致性模型描述的就是這些操作可能的執行順序中哪些是正確的。

## 內存一致性模型的研究歷史和分類

按照傳統馮諾依曼體系結構的計算模型來看，讀操作應當返回最近的寫操作所寫入的結果，但是這裡「最近」的含義是比較模糊的。因此必須將概念嚴格化，於是產生了線性一致性（或稱做嚴格一致性 Strict consistency、原子一致性 Atomic consistency）的概念。但是線性一致性太難實現了，因為這裡需要一個全局同步的時鐘，於是 Leslie Lamport 提出了順序一致性（Sequential consistency）的概念，這裡全局的時鐘變得不再需要，轉而需要的是各個處理器局部的時鐘，相應的，Maurice Herlihy 和 Nir Shavit 等人後來又提出了靜態一致性（Quiescent consistency）的概念。

然而，即使是順序一致性在實際系統中也是很少使用的，主要是它嚴格限制了程序的優化執行，強行的使程序在本地處理器上按程序順序（program order）執行在大多數情況下是沒有必要的。於是在後來的研究中陸續提出了面向硬體的內存模型（Hardware-centric memory model），其中包含了弱序一致性模型（WO, Weak-order model），處理器一致性模型（PC, Processor-consistency model），鬆弛一致性模型（RC, Release consistency model）以及一系列相關的派生模型，如 TSO 一致性模型（Total store ordering），PSO 一致性模型（Partial Store Ordering）等。使用前面的這些模型對於程式設計師來說無疑是非常困惑的，因為這要求程式設計師在編寫程序時必須考慮到各種硬體體系結構所對應的不同內存模型，於是後來的研究進一步提出了面向程式設計師的內存模型（Programmer-centric model）的概念，主要包括 SCNF 模型（Sequntial consistency nomal form）和 PL 模型（Properly-Labeled Model）等等。

## 內存一致性模型列表

* 線性一致性（Linearizability）或嚴格一致性（Strict consistency）：任何對一個內存位置 X 的讀操作，將返回最近一次對該內存位置的寫操作所寫入的值。
* 原子一致性 (Atomic consistency)：讀操作未能立即讀到此前最近一次寫操作的結果，但多讀幾次還是獲得了正確結果。所有對數據的修改操作都是原子的，不會產生競態衝突。
* 順序一致性（Sequential consistency ）:（並發程序在多處理器上的）任何一次執行結果都相同，就像所有處理器的操作按照某個順序執行，各個微處理器的操作按照其程序指定的順序進行。換句話說，所有的處理器以相同的順序看到所有的修改。讀操作未必能及時得到此前其他處理器對同一數據的寫更新。但是各處理器讀到的該數據的不同值的順序是一致的。
* 緩存一致性（Cache Coherence）
* 靜態一致性（Quiescent consistency）
* 處理器一致性（Processor consistency）/PRAM 一致性（PRAM consistency，P 指 pipeline）：在一個處理器上完成的所有寫操作，將會被以它實際發生的順序通知給所有其它的處理器；但是在不同處理器上完成的寫操作也許會被其它處理器以不同於實際執行的順序所看到。這反映了網絡中不同節點的延遲可能是不相同的。對於雙處理器，處理器一致性與順序一致性是等價的。
* 釋放一致性（Release consistency ）：在對一個共享變量進行普通訪問之前，進程在之前所有的獲得鎖而進行的操作必須成功的完成。在釋放一個鎖操作之前，進程之前的讀和寫操作必須已經完成。獲得和釋放鎖的操作必須符合「FIFO 一致性」。「釋放一致性」僅僅關注被鎖住的共享內存內存變量，僅僅只需要將對被鎖住的共享變量的修改通知給其它的處理器。C# 的 VolatileWrite 函數即實現了釋放一致性語義。
* 因果一致性（Causal consistency ）
* TSO 一致性（Total store ordering）
* PSO 一致性（Partial store ordering）
* 弱序一致性（Weak-ordering consistency）
* 最終一致性（Eventual consistency）

## 相關話題

* 任務並行
* 面向硬體的內存模型
* 面向程式設計師的內存模型

## 參考文獻

1. Designing Memory Consistency Models For Shared-Memory Multiprocessors,Computer Sciences Technical Report #1198,University of Wisconsin-Madison December 1993,_Sarita V. Adve_
2. Distributed Computing,Principles, Algorithms, and Systems. _Ajay D. Kshemkalyani University of Illinois at Chicago, Chicago and Mukesh Singhal University of Kentucky, Lexington_

## 外部連結

存儲一致性總結 （頁面存檔備份，存於網際網路檔案館）
内存保护

**記憶體保護**（英語：Memory protection）是作業系統對電腦上的記憶體進行存取權限管理的一個機制。記憶體保護的主要目的是防止某個行程去存取不是作業系統組態給它的定址空間。這個機制可以防止某個行程，因為某些程式錯誤或問題，而有意或無意地影響到其他行程或是作業系統本身的執行狀態和資料。

## 實作方式

### 記憶體區段

記憶體區段（Segmentation）將電腦記憶體分割成許多小的區段。x86 架構採用了典型的記憶體區段技術。

## 相關條目

* 儲存違規，違反記憶體保護的行為
* 保護和安全分離
* 記憶體管理 (作業系統)
内存分段

x86 架構中，**記憶體區段**（英語：Memory Segmentation）是在不改變 16 位元段選擇子時，使用單個索引暫存器（儲存了段內位址偏移值）所能夠定址的的記憶體範圍部份。也指在英特爾 x86 指令集體系結構下記憶體區段的實現方式。

從 8086 開始到隨後的各款 x86 架構 CPU，無論是真實模式還是保護模式，記憶體定址時都使用 16 位元段暫存器（segment register）。段暫存器預設使用情況為：

* 代碼段暫存器 CS 與暫存器 IP 相配合獲得當前執行緒代碼執行到的記憶體位置；
* 資料段暫存器 DS 與各通用暫存器配合存取記憶體中的資料；
* 棧段暫存器 SS 與暫存器 (E) SP、(E) BP 配合存取執行緒的呼叫棧（call stack）；
* 擴充段暫存器 ES 用於特定字串指令（如 MOVS 或 CMPS）。
* 80386 引入了 2 個額外的段暫存器 FS 與 GS，並無特定的硬體用途。

這些段暫存器除了有 16 位元的可見部分，還有不可見的隱藏部分，稱為描述符快取「descriptor cache」或隱藏暫存器「shadow register」。當一個段選擇子（segment selector）裝入段暫存器的可見部分，處理器同時也把該段描述符的其它資料裝入到段暫存器的隱藏部分，這包括段開始的基位址、段長度、存取控制資訊等。這些資訊快取到段暫存器中，避免了處理器在轉址（translate address）時花費額外的匯流排周期從段選擇子表中讀入資料。處理器指令中可以明示使用哪些段暫存器，這將替換掉預設使用的段暫存器。

## 歷史

1978 年的 Intel 8086 開始引入了記憶體區段。這使得 16 位元 CPU 可以存取超過 64 KB (65,536 位元組) 的記憶體，實際上 8086 CPU 到記憶體的位址匯流排是 20 位，即可存取 220=1MB 記憶體。在 16 位元模式，要讓應用程式使用多個記憶體區段（為了存取比任一 64K 區段還要大的記憶體）是相當複雜。這個問題的根源在於沒有適當的適合做整個記憶體範圍的平面定址的位址算術指令。平面定址方式也可以乘法指令來完成，但這會導致較慢的程式執行速度。

1982 年面世的 80286 處理器的真實模式與保護模式，以及 80386 及其後的處理器的虛擬 86 模式，一個區段的大小是 64 KiB（使用 16 位元索引暫存器）。在 Intelx86 的真實模式下的區段架構的記憶體空間會有所重疊，這是一種不好的設計。 80286 的保護模式下，16 位元的段暫存器中的 13 位（稱作段選擇子 segment selector）是描述符表的條目（descriptor table entry）的索引；該條目包含了 24 位元的段開始位址以及 16 位元的段長度；段開始位址與段內偏移位址相加即為記憶體實體位址。16 位元段暫存器中的剩餘 3 位分別是全域 / 局部描述符表指示位、請求特權級（request privilege level）。

1985 年面世的 80386 及其後續處理器的 32 位元保護模式下，一個區段長度上限是 220 個粒度單位，粒度可以是 1 位元組或 4K 位元組，因此區段長度上限可以是 4 GB，這與索引暫存器是 32 位元相配合。

隨著 32 位元作業系統的推出，以及更舒適的 32 位元平面記憶體模式，到 1990 年末期幾乎淘汰了使用區段定址。然而，使用 32 位元平面記憶體模式產生的最多只能存取 4 GB 位址空間的限制並沒有遠離日常的使用。區段允許作業系統對每個行程虛擬定址空間的限制，最大可利用 64 GB 的系統記憶體，但這種最終回歸到區段的尷尬，經常被引述為朝著 64 位元處理器發展的動機。

2003 年問世的 x86-64 架構下，強制實現了平面記憶體模式，但保留了使用段暫存器 FS 或 GS 的 64 位元下的區段定址。

## 真實模式 （Real Mode）

真實模式與虛擬 86 模式下，可存取記憶體固定為 1 MB。對於 8086 處理器，可使用暫存器長度為 16 位元組，但是擁有 20 位元組的到記憶體匯流排位址。為了使用 16 位元組暫存器存取 20 位元組位址，整個記憶體被劃分為多個區段。一個區段長 65,536 位元組即 64 KB。在真實模式下，存取記憶體必須通過 segment base address 和 segment offset (分別儲存在任意 segment 暫存器和任意通用暫存器里。)
真實存取的實體位址可由以下公式得到：

```
物理地址=（segment base address*0x10) + segment offset 
```

注意同樣的實體位址可以由多個不同對的 selector，offset 組成。
真實模式下，任何程式都可以存取全部記憶體空間。沒有對記憶體的存取權限保護。

## 80286 保護模式

Intel 80286 處理器仍然使用 16 位元段暫存器與 16 位元的段內偏移位址，但保護模式下支援存取 224（16M）位元組的記憶體。16 位元段暫存器內不再是段位址，16 位元段暫存器的高 13 位被稱作段選擇子（segment selector），其值是到段描述符表的索引值。段描述符中包含了 24 位元的段開始的基位址，20 位的段長度。段開始位址與段內偏移位址相加即為記憶體實體位址。段的長度上限為 220=1M 位元組。

## 80386 保護模式

Intel 80386 處理器繼續使用 286 的區段保護模式，但段描述符中包含了 32 位元的段開始的基位址。段內偏移位址也是 32 位元。在區段轉址與實體位址之間又增加了一層分頁（paging）轉址。區段定址是不能關閉的。分頁可以使能或關閉（enabled or disabled），如果關閉就與 286 保護模式一樣。如果使用分頁機制，則由段開始的基位址與段內偏移位址相加得到的是線性位址（虛位址），線性位址還需要分頁轉址才得到記憶體實體位址。

386 的段描述符中的段長度為 20 位，段長度的粒度可設為 1 位元組或 212 位元組。因此段長度可以為 1 位元組 - 1M 位元組，或者為 1×4K 位元組 - 1M×4K 位元組。段描述符的資料結構為；

1. Byte offset inside entry.
2. First range is the bit offset inside entry; second range is the bit offset inside byte.

 
386 處理器增加了兩個段暫存器 FS、GS，這兩個暫存器並無硬體繫結的用途。Windows 作業系統在位址 FS:0 中儲存了當前執行緒資訊塊。Linux 中 GS 指向了執行緒局部儲存。

通過清除控制暫存器 CR0 中的最低位，可由 386 保護模式轉為真實模式。

Linux 作業系統在 386 保護模式下把段基址設為 0，段長度設為 4GiB，從而類比了平面記憶體模型。

## x86-64 的 64 位元模式

在 x86-64 體系結構 64 位元的 long mode，段暫存器 CS, SS, DS, ES 強制為 0。段長度強制為 264。形式上還有記憶體區段，但實際上所有記憶體都在唯一的一個區段中。段暫存器 FS、GS 可以有非 0 值，被作業系統用於其它用途。即硬體支援如「FS:[RAX]」這樣的暫存器間接定址。

## 參考文獻
内存分配

**記憶體管理**，是指軟體執行時對電腦記憶體資源的分配和使用的技術。其最主要的目的是如何高效、快速的分配，並且在適當的時候釋放和回收記憶體資源。

一個執行中的程式，譬如網頁瀏覽器在個人電腦或是圖靈機（Turing machine）裡面，為一個行程將資料轉換於真實世界及電腦記憶體之間，然後將資料存於電腦記憶體內部（在電腦科學，一個程式是一群指令的集合，一個行程是電腦在執行中的程式）。記憶體能被實際組織在許多方法裡頭，例如磁帶或是磁盤，或是小陣列容量的微晶片。
從 1950 年代開始，計算機變的更複雜，它被連線於許多種類的記憶體。記憶體管理的任務也變得複雜，甚至必須要在同一台機器上相同的時間執行多個行程。

在記憶體內，一個程式（作業系統）在每一個資料區段持續地追蹤實體位置，及移動實體上的資料去改善其效能及保證可靠性，對於每個使用者層（user-level）的程式，作業系統分配一段虛擬記憶體空間，當行程起始時，不需要移動資料到實體裝置間，資料存於磁碟內的虛擬記憶體空間，也不需要去組態主記憶體空間給該行程，當使用者有需要用到時，他們才會很自由地載入到主記憶體內。

可以想像一個很大的程式，當他執行時變成行程，而大部分的記憶體空間都被存到磁碟內虛擬記憶體位址，需要用到的部分才被載入到記憶體內部提供服務。

## 主記憶體使用

一個程式結構由以下兩部分而成:

* 「本文區段」，也就是指令存放，提供 CPU 使用及執行
* 「資料區段」，儲存程式內部本身設定的資料，例如常數字串，像是 GUI 介面內部一些文字訊息，或是程式設計時所放入的訊息資料，資料可藉由程式執行時由輸入（input）的方式加入，或者經由程式執行的流程中被移除。

當一個程式執行，作業系統將程式的資料區段及本文區段對映到虛擬記憶體空間內部，然後在記憶體執行程式的指令（見范紐曼架構），無論如何，當程式執行時就必須去儲存暫時性的資料，或更重要的，它會呼叫一些函式（function）或是常式（subroutine），並且儲存當前函式的狀態，最好的資料結構方法，資料由堆疊（stack）的方式儲存，當我們完成這個函式，資料會由堆疊的 pop 方式取出，堆疊將會在函式的生命週期內動態的成長，作業系統提供區分本文區段及資料區段，而堆疊區段則在一個行程的最頂端，這種方式稱為段式結構（segments）或「分段」。

## 參考文獻

## 參見

* 分頁表
内存刷洗

**記憶體刷洗**（英語：**Memory scrubbing**）也可稱**記憶體擦洗**、**記憶體清洗**，它是指從每個電腦記憶體位置讀取資料、以一種錯誤糾錯碼（ECC）糾正位元錯誤（如果存在），然後將校正後的資料寫回到相同位置。

由於現代電腦記憶體晶片的高度整合，單個記憶體單元的結構已足夠小到易於受到宇宙射線和 / 或阿爾法粒子的影響。由這些現象引發的錯誤被稱為軟性錯誤，這對基於 DRAM 或 SRAM 的記憶體來說可能是個問題。在任何單個記憶體位元發生軟錯誤的概率非常小。但是，配以現代電腦的龐大記憶體空間，加之長時間持續執行的如伺服器，在已安裝記憶體中發生軟錯誤的概率可能比較顯著。

糾錯記憶體中的資訊被冗餘儲存，以便能校正每個記憶體字（word）的單位元錯誤。也因如此，ECC 記憶體可以支援對記憶體的刷洗。換句話說，如果記憶體控制器系統性掃描記憶體，則可以檢測到單位元錯誤，並可以使用 ECC 校驗和來確定出錯的位元並將校正的資料寫回記憶體。

## 概述

在同一個字（word）未發生多位元錯誤前周期性檢查每個記憶體位置很重要，這是因為截至 2008 年，ECC 記憶體模組還不能校正出現多位元的錯誤。

為了不干擾來自 CPU 的常規記憶體請求以及防止電腦效能下降，刷洗通常僅在空閒時進行。由於刷洗是由正常的讀取和寫入操作組成，它可能增加記憶體相較非刷洗操作時的功耗。因此，刷洗應該周期性但不是持續性進行。許多伺服器可以在 BIOS 設定程式中組態刷洗周期。

普通的記憶體讀取是由 CPU 或 DMA 裝置發出和檢查 ECC 錯誤，但由於資料局部性原因，它們可能被限制在小範圍的位址空間內，並且保持位置、很長時間不被觸碰。這些位置因而可能容易受到多個軟錯誤的影響，而刷洗可確保在指定時間內檢查整個記憶體。

在某些系統上，不止主記憶體（基於 DRAM 的記憶體）支援刷洗，有些 CPU 高速緩衝記憶體（基於 SRAM）也可以。在大多數系統上，兩者都可以獨立組態刷洗速率。因為快取比主記憶體小得多，所以快取的擦洗不需要頻繁進行。

記憶體刷洗提高了可靠性，因此它可被歸類為可靠性、可用性和可維護性（RAS）特性。

### 變種

它通常有兩種變體，被稱為巡邏刷洗（patrol scrubbing）與按需刷洗（demand scrubbing）。雖然它們本質上都執行記憶體刷洗及相關的錯誤糾正（如果可行），兩者的主要區別是如何啟動和執行。巡邏刷洗會在系統空閒時自動執行，而按需刷洗是在資料被主記憶體儲器實際請求時執行錯誤糾正。

## 參見

* 資料刷洗，包含記憶體刷洗等的一般分類
* 軟性錯誤，執行記憶體刷洗的一個重要原因
* 錯誤檢測與糾正，記憶體刷洗的一般理論
* 記憶體重新整理，用於保留儲存在記憶體中的資訊。

## 參考資料
内存卡

**記憶卡**（memory card）， 或稱**快快閃記憶體儲卡、閃卡**，是一種固態電子快閃記憶體資料儲存裝置，多為卡片或者方塊狀。它一般是使用 Flash（快閃記憶體）晶片作為儲存媒介。主要用於數位相機、PDA、筆記型電腦、音樂播放器、掌上遊戲機、智慧型手機和其他電子裝置。它能提供可重複讀寫，無需外部電源的儲存形式。也有非固態的記憶卡。

快快閃記憶體儲卡曾被視為軟碟的替代品，但是這一角色被隨身碟所取代。隨身碟可以通過 USB 口與任一電腦相連。

記憶卡的格式有很多種，通常在數位相機、掌上遊戲機、行動電話，和其他裝置上都有。PC 卡（PCMCIA）在 1990 年代就成為了首批投入商業生產的記憶卡格式，但是目前它主要用於工業裝置或承擔輸入輸出功能，作為裝置的連接標準。同樣在 1990 年代，其它的一些較小型的卡格式出現了，包括 CF 卡、SM 卡和 Mini 卡。在行動電話、掌上遊戲機等裝置開始使用一些獨有的微型內嵌記憶卡（SID），而 PDA、數位音樂播放器等傾向於使用移動記憶卡。

從 1990 年代後期到 21 世紀初期，一些新的格式出現了，例如 SD/MMC、記憶棒、xD 圖像卡和其他一些衍生格式，由於行動電話、PDA、數位相機等產品的尺寸不斷縮小，它們對於更小的記憶卡的需求變得更強烈，這也使得原先的「小型」卡顯得很大。數位相機上 SM 卡和 CF 卡曾經非常成功。2001 年，單 SM 卡就占有 50% 的市場份額，CF 在專業數位相機領域也所向披靡。但是到了 2005 年，SD/MMC 卡已經取代了 SM 卡的位置，它的對手也已經不是 CD 卡，而是 XD 卡、記憶棒等格式。在工業領域，前任的王者 PC 卡還能維持生計；在行動電話和 PDA 方面，記憶卡市場已經是群雄紛爭了。

目前，不少新的個人電腦都已經內建了多功能的讀卡機。

## 記憶卡格式資訊表

大多數 EEPROM 裝置都有一定的寫次數限制，某些卡已經採用了耗損平衡（wear leveling）演算法，以減少經常寫的位置可能出現的損耗。在記憶卡市場，售價越來越便宜，相反不同品牌的容量則競相增加。在 2019 年，32GB 是市面常見的容量，512GB 和 1TB 的記憶卡已經出現。

## 記憶卡類型概覽

* PCMCIA ATA Type I Flash Memory Card（PC Card ATA Type I）(max 8 GB (8 GiB) flash as of 2005）
  * PCMCIA Linear Flash Cards, SRAM cards 等。
  * PCMCIA Type II, Type III cards
* CompactFlash Card (Type I), CompactFlash High-Speed（max 32 GB as of 2008）
* CompactFlash Type II, CF+(CF2.0), CF3.0
  * Microdrive（max 6 GB as of 2005）
* MiniCard（Miniature Card）（max 64 MB (64 MiB)）
* SmartMedia Card (SSFDC)（max 128 MB，3.3 V,5 V）
* xD-Picture Card, xD-Picture Card 型 M
* Memory Stick, MagicGate Memory Stick (max 128 MB); Memory Stick Select, MagicGate Memory Stick Select（"Select" means: 2x128 MB with A/B switch）
* SecureMMC
* Secure Digital (SD Card), Secure Digital High-Speed, Secure Digital Plus/Xtra/etc（SD with USB connector）
  * miniSD Card
  * microSD Card（aka Transflash, T-Flash）
  * SDHC
* MU-Flash（Mu-Card，Mu-Card Alliance of OMIA）
* C-Flash
* SIM 卡（Subscriber Identity Module）
* Smart card（ISO 7810 Card Standard , ISO 7816 Card Standard 等.）
* UFC (USB FlashCard) [1]（使用 USB）
* FISH Universal Transportable Memory Card Standard（使用 USB）
* Disk memory cards:
  * Clik!（PocketZip），（40 MB PocketZip）
  * Floppy disk（LS120, 2-inch, 3.5-inch, 等.）
* Intelligent Stick（iStick, a USB-based flash memory card with MMS）
* SxS (S-by-S) memory card, a new memory card specification developed by Sandisk and Sony. SxS complies to the ExpressCard industry standard. [2] （頁面存檔備份，存於網際網路檔案館）
* Nexflash Winbond Serial Flash Moduel (SFM) cards, size range 1 mb, 2 mb and 4 mb.

## 參見

* 記憶卡比較
* 閃存盤 (隨身碟)
* 數位相機品牌列表

## 外部連結
内存地址

在電腦運算中，**記憶體位址**是一種用於軟體及硬體等不同層級中的資料概念，用來存取電腦主記憶體中的資料。記憶體位址一般以固定長度之數位表示，並被視為無號整數操作。

## 記憶體位址之類型

記憶體位址有許多類型。換句話說，一個電腦，甚至在一個程式內，可能即存在數個不同的記憶體「定址空間」。

電腦的記憶體（尤其是指主記憶體）是由許多「記憶體位址」所組成的，每個記憶體位址都有一個「實體位址」，能供 CPU（或其他裝置）存取。一般，只有如 BIOS、作業系統及部分特定之公用軟體（如記憶體測試軟體）等系統軟體，能使用機器碼的運算元或暫存器對實體位址定址，指示 CPU 使用記憶體控制器之類的硬體裝置，使用記憶體匯流排或系統匯流排，亦或分別之控制匯流排、位址匯流排及資料匯流排，執行該程式之命令。記憶體控制器的匯流排是由數條並列的線路所組成的，每條線路表示一個位元。匯流排的寬度因此依電腦不同，決定了可定址之儲存單位數量，以及每一單位內的位元數量。

電腦程式使用記憶體位址來執行機器碼、儲存及擷取資料。大多數的應用程式無法得知實際的實體位址，而是使用電腦的記憶體管理單元及作業系統的記憶體對映，為「邏輯位址」或虛擬位址定址。

## 另見

* 記憶體管理
* 位元組序
* 記憶體管理單元（MMU）
* 分頁表
* 記憶體保護
* 記憶體區段
* 低階語言

## 參考資料
内存屏障

**記憶體屏障**（英語：Memory barrier），也稱**記憶體柵欄**，**記憶體柵障**，**屏障指令**等，是一類同步屏障指令，它使得 CPU 或編譯器在對記憶體進行操作的時候，嚴格按照一定的順序來執行，也就是說在記憶體屏障之前的指令和之後的指令不會由於系統最佳化等原因而導致亂序。

大多數現代電腦為了提高效能而採取亂序執行，這使得記憶體屏障成為必須。

語意上，記憶體屏障之前的所有寫操作都要寫入記憶體；記憶體屏障之後的讀操作都可以獲得同步屏障之前的寫操作的結果。因此，對於敏感的程式塊，寫操作之後、讀操作之前可以插入記憶體屏障。

## 舉例

當驅動程式執行下列動作時，如果處理器的寫入指令 out-of-order，使得資料還沒有寫入記憶體，硬體模組就被觸發開始動作，就會產生錯誤的行為。

## 底層體系結構相關的原語

大多數處理器提供了記憶體屏障指令:

* 完全記憶體屏障 (full memory barrier) 保障了早於屏障的記憶體讀寫操作的結果提交到記憶體之後，再執行晚於屏障的讀寫操作。
* 記憶體讀屏障 (read memory barrier) 僅確保了記憶體讀操作；
* 記憶體寫屏障 (write memory barrier) 僅保證了記憶體寫操作。

記憶體屏障是底層原語，是記憶體排序的一部分，在不同體系結構下變化很大而不適合推廣。需要認真研讀硬體的手冊以確定記憶體屏障的辦法。x86 指令集中的記憶體屏障指令是：

```
lfence (asm), void _mm_lfence (void) 读操作屏障
sfence (asm), void _mm_sfence (void) 写操作屏障
mfence (asm), void _mm_mfence (void) 读写操作屏障
```

常見的 x86/x64，通常使用 lock 指令字首加上一個空操作來實現，注意當然不能真的是 nop 指令，但是可以用來實現空操作的指令其實是很多的，比如 Linux 中採用的

```
 addl $0, 0 (%esp)
```

記憶體也提供了另一套語意的記憶體屏障指令:

* acquire semantics: 該操作結果可利用要早於代碼中後續的所有操作的結果。
* release semantics: 該操作結果可利用要晚於代碼中之前的所有操作的結果。
* fence semantics: acquire 與 release 兩種語意的共同有效。即該操作結果可利用要晚於代碼中之前的所有操作的結果，且該操作結果可利用要早於代碼中後續的所有操作的結果。

Intel Itanium 處理器，具有記憶體屏障 mf 的指令，具有下述 modifiers:

* acq (acquire)
* rel (release).

## Windows API 的記憶體屏障實現

下述同步函式使用適當的屏障來確保記憶體有序：

* 進出臨界區 (critical section) 的函式
* 觸發 (signaled) 同步物件的函式
* 等待函式 (Wait function)
* 互鎖函式 (Interlocked function)

## 多執行緒編程與記憶體可見性

多執行緒程式通常使用高層程式設計語言中的同步原語，如 Java 與.NET Framework，或者 API 如 pthread 或 Windows API。因此一般不需要明確使用記憶體屏障。

記憶體可見性問題，主要是高速緩衝記憶體與記憶體的一致性問題。一個處理器上的執行緒修改了某資料，而在另一處理器上的執行緒可能仍然使用著該資料在專用 cache 中的老值，這就是可見性出了問題。解決辦法是令該資料為 volatile 屬性，或者讀該資料之前執行記憶體屏障。

## 亂序執行與編譯器重排序最佳化的比較

C 與 C++ 語言中，volatile 關鍵字意圖允許記憶體對映的 I/O 操作。這要求編譯器對此的資料讀寫按照程式中的先後順序執行，不能對 volatile 記憶體的讀寫重排序。因此關鍵字 volatile 並不保證是一個記憶體屏障。

對於 Visual Studio 2003，編譯器保證對 volatile 的操作是有序的，但是不能保證處理器的亂序執行。因此，可以使用 InterlockedCompareExchange 或 InterlockedExchange 函式。

對於 Visual Studio 2005 及以後版本，編譯器對 volatile 變數的讀操作使用 acquire semantics，對寫操作使用 release semantics。

## 編譯器記憶體屏障

編譯器會對生成的可執行代碼做一定最佳化，造成亂序執行甚至省略（不執行）。gcc 編譯器在遇到內嵌組譯語句：

```
asm volatile("" ::: "memory");
```

將以此作為一條記憶體屏障，重排序記憶體操作。即此語句之前的各種編譯最佳化將不會持續到此語句之後。也可用內建的 `__sync_synchronize`

Microsoft Visual C++ 的編譯器記憶體屏障為：

```
_ReadWriteBarrier() MemoryBarrier()
```

Intel C++ 編譯器的記憶體屏障為：

```
__memory_barrier()
```

## 參考文獻

## 外部連結

* Memory Barriers: a Hardware View for Software Hackers （頁面存檔備份，存於網際網路檔案館）
* Microsoft Driver Development: Memory Barriers on Multiprocessor Architectures
* HP technical report HPL-2004-209: Threads Cannot be Implemented as a Library （頁面存檔備份，存於網際網路檔案館）
* Linux kernel memory barrier issues on multiple types of CPUs （頁面存檔備份，存於網際網路檔案館）
* Documentation on memory barriers in the Linux kernel
* Handling Memory Ordering in Multithreaded Applications with Oracle Solaris Studio 12 Update 2: Part 1, Compiler Barriers （頁面存檔備份，存於網際網路檔案館）
* Handling Memory Ordering in Multithreaded Applications with Oracle Solaris Studio 12 Update 2: Part 2, Memory Barriers and Memory Fences （頁面存檔備份，存於網際網路檔案館）
* User-space RCU: Memory-barrier menagerie （頁面存檔備份，存於網際網路檔案館）
内存带宽

**記憶體頻寬**是處理器可以從記憶體讀取資料或將資料儲存到記憶體的速率。記憶體頻寬通常以位元組 / 秒為單位表示，但對於自然資料大小不是 8 位元的倍數的系統，這可能會有所不同。

為給定記憶體或系統決定的記憶體頻寬通常是最大理論頻寬。實際中的記憶體頻寬將小於（並且不可能超過）所決定的頻寬。存在各種基準測試以使用各種存取模式來測量持續記憶體頻寬。這些旨在提供對系統在各類實際應用程式上應支援的記憶體頻寬的深入了解。

## 測量慣例

在「位元組 / 秒」定義的傳輸資料量中有三種不同的約定：

1. **bcopy 約定：**計算每單位時間從記憶體中的一個位置複製到另一個位置的資料量。例如，在 1 秒內將 100 萬位元組從記憶體中的一個位置到另一個位置將被計為 100 萬位元組 / 秒。bcopy 約定是自洽的，但不容易擴充，以適用具有更複雜存取模式的情況，例如三次讀取和一次寫入。
2. **STREAM 約定**：計算應用程式代碼顯式讀取的資料量和應用程式代碼顯式寫入的資料量之和。以之前的 100 萬位元組複製為例，STREAM 頻寬將計為 1 秒內讀取的 100 萬位元組加上寫入的 1 百萬位元組，總計每秒 200 萬位元組。STREAM 約定與使用者代碼最直接相關，但可能無法統計硬體實際需要執行的所有資料流量。
3. **硬體約定**：計算**硬體**讀取或寫入的實際資料量，無論資料動作是否由使用者代碼明確請求。以相同的 100 萬位元組複製為例，具有寫分配高速緩衝記憶體策略的電腦系統上的_硬體_頻寬將會多出 100 萬位元組的流量，因為硬體在執行儲存之前將目標從記憶體讀取到高速緩衝記憶體中。這使得硬體實際傳輸總計每秒 300 萬位元組。硬體約定與硬體直接相關，但可能不代表實現使用者代碼所需的最小資料流量。

　
: : 例如，一些電腦系統能夠使用特殊指令避免寫入分配流量，從而可能導致基於所執行的不同資料流量的誤導。

## 頻寬計算和命名

命名方式因記憶體技術而異，但對於商用 DDR SDRAM ， DDR2 SDRAM 和 DDR3 SDRAM 記憶體，總頻寬是以下值之乘積：

* **基本 DRAM 時脈頻率**
* **每時鐘的資料傳輸次數**：在「雙倍資料速率」（DDR、DDR2、DDR3、DDR4）記憶體的情況下是兩次
* **記憶體匯流排（介面）頻寬**：每個 DDR、DDR2 或 DDR3 記憶體介面都是 64 位元。有時也被稱為 1 個「行」
* **介面數量** ：現代 PC 通常使用兩個記憶體介面（雙連結模式）來實現有效的 128 位元匯流排頻寬

例如，一個電腦有兩個通道的記憶體，每通道都配備執行在 400MHz 時脈頻率的 DDR2-800 模組，則其理論最大記憶體頻寬為：

　
: 每秒 400,000,000 個時鐘 × 每個時鐘 2 個通道 × 每行 64 個位 ×2 個介面 =

　
: 每秒 102,400,000,000（1024 億）位元（也就是 12,800MB/s 或 12.8GB/s）

但是該理論最大記憶體頻寬被稱為「突發速率」，是不可持續的。

DDR，DDR2 和 DDR3 模組的命名約定指定了最大速度（例如，DDR2-800）或最大頻寬（例如，PC2-6400）。速度等級（800）不是最大時鐘速度，而是它的兩倍（1600，因為資料速率是加倍的）。頻寬等級（6400）是使用 64 位元每秒傳輸的最大百萬位元組數。在雙連結模式中，這實際上是 128 位元。因此，範例中的記憶體組態可以簡化為：兩個 DDR2-800 模組以雙連結模式執行。

PC 系統記憶體的常見組態是每個記憶體條都有兩側記憶體介面，但在較舊、低階或低功耗裝置中，單連結記憶體也很常見。一些 PC 和大多數現代圖形卡還會使用兩個以上的記憶體介面（例如，Intel 的 LGA 2011 平台和輝達 GeForce GTX 980 有四個記憶體介面）。並列執行多個介面的高效能顯示卡可以獲得非常高的記憶體匯流排頻寬（例如，NVIDIA GeForce GTX TITAN 的 384 位元和 AMD Radeon R9 290X 的 512 位元，分別使用了六個和八個 64 位元介面）。

## ECC 位

在具有糾錯記憶體 （ECC）的系統中，介面的額外頻寬（通常為 72 而不是 64 位元）不會被計入頻寬規範中，因為用於糾錯的位不能用於儲存使用者資料。 糾錯位會被認為是記憶體硬體自身的一部分，而不是儲存在該硬體中的資訊。

## 參見

* CAS 延遲
* 動態隨機存取記憶體
* 裝置頻寬列表
* 記憶體延遲
* 記憶時間
* 隨機存取記憶體

## 參考

BSS Random Access Benchmark Performance Evaluation and Optimization of Random Memory Access on Multicores with High Productivity at ACM/IEEE HiPC 2010 （頁面存檔備份，存於網際網路檔案館）

## 外部連結

* STREAM Benchmark （頁面存檔備份，存於網際網路檔案館）
* Memory Buy the Numbers （頁面存檔備份，存於網際網路檔案館）
内存排序

**內存排序**是指 CPU 訪問主存時的順序。可以是編譯器在編譯時產生，也可以是 CPU 在運行時產生。反映了內存操作重排序，亂序執行，從而充分利用不同內存的匯流排帶寬。

現代處理器大都是亂序執行。因此需要內存屏障以確保多執行緒的同步。

## 編譯時內存排序

### 編譯時內存屏障

這些內存屏障阻止編譯器在編譯時亂序指令，但在運行時無效。

* GNU 內聯彙編語句

```
asm volatile("" ::: "memory");
```

或者

```
__asm__ __volatile__ ("" ::: "memory");
```

阻止 GCC 編譯器跨越它亂序讀 / 寫指令。

* C11/C++11

```
atomic_signal_fence(memory_order_acq_rel);
```

阻止編譯器跨越它亂序讀 / 寫指令。

* Intel\_C++ 編譯器使用 "full compiler fence"

```
__memory_barrier()
```

指令。

* Microsoft Visual C++ 編譯器:

```
_ReadWriteBarrier()
```

## 運行時內存排序

* happens-before: 按照程序的代碼序執行
* synchronized-with: 不同執行緒間，對於同一個原子操作，需要同步關係，store（）操作一定要先於 load（），也就是說 對於一個原子變量 x，先寫 x，然後讀 x 是一個同步的操作

### 對稱多處理器 (SMP) 系統

對稱多處理器 (SMP) 系統有多個內存一致模型。

* 順序一致（Sequential consistency)：同一個執行緒的原子操作還是按照 happens-before 關係，但不同執行緒間的執行關係是任意
* 鬆弛一致（Relaxed consistency，允許某種類型的重排序）：如果某個操作只要求是原子操作，除此之外，不需要其它同步的保障，就可以使用 Relaxed ordering。程序計數器是一種典型的應用場景
* 弱一致（Weak consistency）：讀寫任意排序，受顯式的內存屏障限制。

某些老的 x86 有更弱內存序。

SPARC 內存序:

* SPARC TSO = total store order (default)
* SPARC RMO = relaxed-memory order (not supported on recent CPUs)
* SPARC PSO = partial store order (not supported on recent CPUs)

### 硬體內存屏障

* x86, x86-64

```
lfence (asm), void _mm_lfence(void)
sfence (asm), void _mm_sfence(void)
mfence (asm), void _mm_mfence(void)
```

* PowerPC

```
sync (asm)
```

* MIPS

```
sync (asm)
```

* Itanium

```
mf (asm)
```

* POWER

```
dcs (asm)
```

* ARMv7

```
dmb (asm)
dsb (asm)
isb (asm)
```

#### 編譯器對硬體內存屏障的支持

* GCC, version 4.4.0 and later, has `__sync_synchronize`.
* C11/C++11 `atomic_thread_fence()` 支持一條命令
* Microsoft Visual C++ has `MemoryBarrier()`.
* Sun Studio Compiler Suite has `__machine_r_barrier`, `__machine_w_barrier` and `__machine_rw_barrier`.

## 參見

* 內存模型 (程序設計)

## 參考文獻

## 進一步閱讀

* _Computer Architecture — A quantitative approach_. 4th edition. J Hennessy, D Patterson, 2007. Chapter 4.6
* Sarita V. Adve, Kourosh Gharachorloo, Shared Memory Consistency Models: A Tutorial （頁面存檔備份，存於網際網路檔案館）
* Intel 64 Architecture Memory Ordering White Paper （頁面存檔備份，存於網際網路檔案館）
* Memory ordering in Modern Microprocessors part 1 （頁面存檔備份，存於網際網路檔案館）
* Memory ordering in Modern Microprocessors part 2 （頁面存檔備份，存於網際網路檔案館）
* YouTube 上的 IA (Intel Architecture) Memory Ordering - Google Tech Talk
内存控制器

**記憶體控制器**（英語：Memory Controller）是一個用於管理與規劃從記憶體到 CPU 間傳輸速度的匯流排電路控制器，它可以是一個單獨的晶片，或整合到有關的大型晶片里；如 CPU 或北橋內建的記憶體控制器。

## 工作方式

記憶體控制器控制著必要的邏輯讀取和寫入 DRAM ，並每隔一段時間重新整理動態隨機存取記憶體 (DRAM) 里的內容。如果沒有不斷重新整理 DRAM 將會遺失已寫入的資料，因為 DRAM 的儲存單元其實是電容器的一種，電容器會不斷泄漏它儲存的電荷，根據 JEDEC 標準只要泄漏速度不小於 64 毫秒記憶體就可以正常工作。進行讀取和寫入動作時，記憶體控制器會根據資料位址到 DRAM 中選擇行和列，通過一個多路轉換器將資料合併以減少操作所需的匯流排寬度，由 DRAM 輸入端的多路轉換器電路承接轉換操作，其中經由 DRAM 的多路分解器為轉換後的輸入資料選擇正確的記憶體位置並返回資料，匯流排寬度是允許同時進行通信的儲存單元數目。記憶體控制器的匯流排寬度範圍從在早期的系統中的 8 位元，演變成在更複雜的系統和顯示卡中的 512 位元，這通常被實現為數個 64 位元記憶體控制器同時並列執行，這稱為「團體模式」。一些記憶體控制器，例如整合 QUICC 記憶體控制器的 Power QUICC II 處理器，可在同一時間連接到各種不同類型的裝置，如：SDRAM 、SRAM、ROM 和記憶體對映的 I/O。一些記憶體控制器會整合 ECC 錯誤檢測和校正的功能。現在實驗中的記憶體控制器除了包含執行記憶體管理單元位址轉換中的第一級，也包含第二級別的位址轉換，進一步減少頻寬占用率。

## 歷史

一開始記憶體控制器在主機板上有獨立的晶片；在英特爾微處理器的傳統電腦上，其功能被整合在主機板的北橋上；但許多現代微處理器，如 Alpha 21364， AMD Athlon 64 處理器（和以後的 AMD 處理器），IBM POWER5（和以後的 POWER 處理器） ，Sun UltraSPARC T1，Intel Nehalem 處理器（和以後的 Intel 處理器）上整合了記憶體控制器（英語：Integrated Memory Controller，IMC） ，以減少記憶體延遲。這提升了系統的效能。當 DRAM 控制器不在處理器里而是在北橋里，那麼相同的 CPU 可以被安裝在一個擁有新北橋的主機板上以支援新記憶體模式，但這樣的設計會增大處理器與記憶體之間的資料傳送延時，因為處理器需經北橋方可存取記憶體，而處理器與北橋之間的匯流排頻寬往往是有限的，而這一情況可通過增大 CPU 快取的方法來緩解。

## 雙倍資料率同步動態隨機存取記憶體

DDR 記憶體控制器是用來驅動 DDR SDRAM 的，通過在系統的時鐘的上升沿和下降沿同時資料傳輸來實現雙倍資料記憶體存取。 DDR 記憶體控制器明顯的比單倍資料速率控制器更複雜，但允許兩倍資料的傳輸是在記憶體單元不增加時鐘速率或增加匯流排寬度的情況下。

## 雙連結記憶體

雙通道記憶體控制器（Dual Channel），動態隨機存取記憶體（DRAM）分別連接兩個不同的匯流排（Bus），讓兩個記憶體控制器並列存取它們，這匯流排理論頻寬提高一倍。在理論上可以有更多的信道被建立（為每一個 DRAM 單元建立單獨信道將是理想的解決方案），但由於線路數量、電容器、需要並列接入線路具有相同的的長度，添加越多的信道，設計越複雜。

## 全緩衝記憶體模組

全緩衝記憶體系統（英語：Fully Buffered DIMM，FB-DIMM）將記憶體的緩衝裝置用於每個記憶體模組連接並串行傳輸到記憶體控制器，這是一種新匯流排設計；它不像傳統的記憶體控制器裝置，使用串行資料鏈路的記憶體控制器，而不是使用以前的記憶體設計並列連結。以增加延遲為代價（因串行線路，存取記憶體位置的指令必須排隊等待），允許使用數量較少層的電路板，令在電路板上連接記憶體顆粒的導線數量大幅減少，這意味著更多更密集的記憶體顆粒可以放置在同一電路板上。這種增長是由於在一定的時間內讀出的資訊由 DRAM 單元的 FB-DIMM 控制器所使用的串行格式轉換成並列，記憶體控制器在電路板上的一個並列形式。從理論上 FB-DIMM 的記憶體緩衝裝置可以建成存取任何 DRAM 單元，並允許儲存單元存取未知設計的記憶體控制器，但是這並沒有被證實，該技術正處於起步階段。

## 快閃記憶體控制器

很多快閃記憶體盤裡都含有一個快閃記憶體主控晶片，主控晶片負責與其他電子裝置通信，並負責控制與管理資料的儲存位置。

## 注釋

## 參看

* 記憶體管理單元

## 外部連結

* Selecting Memory Controllers for DSP Systems A how-to article on evaluating memory controllers using the VisualSim virtual prototyping tool.
* [1] Infineon/Kingston (a memory vendor) Dual Channel DDR Memory Whitepaper. Explains dual channel memory controllers, and how to best use use them.
内存数据库

**記憶體資料庫**是指一種將全部內容存放在記憶體中，而非傳統資料庫那樣存放在外部記憶體中的資料庫。記憶體資料庫指的是所有的資料存取控制都在記憶體中進行，這是與磁碟資料庫相對而言的，磁碟資料庫雖然也有一定的快取機制，但都不能避免從外設到記憶體的交換，而這種交換過程對效能的損耗是致命的。由於記憶體的讀寫速度極快（雙連結 DDR3-1333 可以達到 9300 MB/s，一般磁碟約 150 MB/s），隨機存取時間更是可以奈秒計（一般磁碟約 10 ms，雙連結 DDR3-1333 可以達到 100 ns），所以這種資料庫的讀寫效能很高，主要用在對效能要求極高的環境中，但是在伺服器關閉後會立刻遺失全部儲存的資料。常見的例子有 MySQL 的 MEMORY 儲存引擎、eXtremeDB、FastDB、SQLite、Microsoft SQL Server Compact 等。

## 腳註
内存时序

**記憶體時序**（英語：**Memory timings** 或 **RAM timings**）是描述同步動態隨機存取記憶體（SDRAM）效能的四個參數：**CL**、**TRCD**、**TRP** 和 **TRAS**，單位為時鐘週期。它們通常被寫為四個用破折號分隔開的數字，例如 7-8-8-24。第四個參數（RAS）經常被省略，而有時還會加入第五個參數：**Command rate**（命令速率），通常為 2T 或 1T，也寫做 2N、1N。這些參數指定了影響隨機存取記憶體速度的潛伏時間（延遲時間）。較低的數字通常意味著更快的效能。決定系統效能的最終元素是實際的延遲時間，通常以奈秒為單位。

當將記憶體時序轉換為實際的延遲時，最重要的是注意它是以時鐘週期為單位。如果不知道時鐘週期的時間，就不可能了解一組數字是否比另一組數字更快。

舉例來說，DDR3-2000 記憶體的頻率是 1000 MHz，其週期為 1 ns。基於這個 1 ns 的時鐘，CL=7 給出的絕對延遲為 7 ns。而更快的 DDR3-2666（時鐘 1333 MHz，每個週期 0.75 ns）則可能用更大的 CL=9，但產生的絕對延遲 6.75 ns 更短。

現代 DIMM 包括一個串行存在檢測（SPD）ROM 晶片，其中包含為自動組態推薦的記憶體時序。PC 上的 BIOS 可能允許使用者調整時序以提高效能（存在降低穩定性的風險），或在某些情況下增加穩定性（如使用建議的時序，甚至用更高的時序）。

注意：記憶體頻寬是測量記憶體的吞吐量，並通常受到傳輸速率而非潛伏時間的限制。通過交錯存取 SDRAM 的多個內部 bank，有可能以峰值速率連續傳輸。可能以增加潛伏時間為代價來增加頻寬。具體來說，每個新一代的 DDR 記憶體都有著較高的傳輸速率，但絕對延遲則沒有顯著變化，尤其是市場上首批的新一代產品，通常有著較上一代更長的延遲。

即便增加了記憶體延遲，增加記憶體頻寬也可以改善多處理器或多個執行緒組成的電腦系統的效能。更高的頻寬也可以提升沒有專用 VRAM 的整合顯示卡的效能。

## BIOS 中的處理

在英特爾體系的系統中，記憶體時序和管理由記憶體參考代碼（MRC）處理，這是 BIOS/UEFI 的一部分。

## 參考資料
内存映射

在計算機科學中，**記憶體映射**（memory map）是一種資料結構（通常駐留在內存本身中），它指示內存的布局方式。 術語「記憶體映射」在不同的上下文中可以具有不同的含義。

* 它是使用關聯記憶體的最快，最靈活的緩存組織。 關聯存儲器存儲該存儲字的地址和內容。
* 在引導過程中，會從固件傳遞記憶體映射，以指示作業系統內核有關內存布局的信息。 它包含有關總內存大小，任何保留區域的信息，還可以提供特定於體系結構的其他詳細信息。
* 在虛擬內存實現和內存管理單元中，內存映射是指頁面表，這些頁面表存儲特定進程的虛擬記憶體布局與該空間與物理內存地址的關係之間的映射。
* 在本機調試程序中，記憶體映射是指已加載的可執行（或）庫文件與記憶體區域之間的映射。 這些內存映射用於將內存地址（例如函數指針）解析為實際符號。
内存条

**隨機存取記憶體**（英語：Random-access memory，縮寫：**RAM**）是與中央處理器直接交換資料的記憶體。它可以隨時讀寫（重新整理時除外，見下文），而且速度很快，通常作為作業系統或其他正在執行中的程式的臨時資料儲存媒介。

主記憶體（Main memory）即電腦內部最主要的記憶體，用來載入各式各樣的程式與資料以供中央處理器直接執行與運用。由於 DRAM 的 CP 值很高，且擴展性也不錯，是現今一般電腦主記憶體的最主要部分。2011 年生產電腦所用的主記憶體主要是 DDR3 SDRAM，而 2016 年開始 DDR4 SDRAM 逐漸普及化，筆電廠商開始在筆電以 DDR4 記憶體取代 DDR3L。

## 分類

RAM 記憶體可以進一步分為靜態隨機存取記憶體（SRAM）和動態隨機存取記憶體（DRAM）兩大類。SRAM 具有快速存取的優點，但生產成本較為昂貴，一個典型的應用是快取。而 DRAM 由於具有較低的單位容量價格，所以被大量的採用作為系統的主記憶體。

## 動態隨機存取記憶體（DRAM）的特點

### 隨機存取

所謂「隨機存取」，指的是當記憶體中的訊息被讀取或寫入時，所需要的時間與這段資訊所在的位置無關。相對地，有串行存取記憶體包括順序存取記憶體（如：磁帶）和直接存取記憶體（如：磁碟）。

### 揮發性

當電源關閉時 RAM 不能保留資料。如果需要儲存資料，就必須把它們寫入一個長期的儲存裝置中（例如硬碟）。RAM 和 ROM 相比，兩者的最大區別是 RAM 在斷電以後儲存在上面的資料會自動消失，而 ROM 則不會。

### 較高的存取速度

現代的隨機存取記憶體幾乎是所有存取裝置中寫入和讀取速度最快的，存取延遲也和其他涉及機械運作的儲存裝置（如硬碟、光碟機）相比，也顯得微不足道。但速度仍然不如作為 CPU 快取用的 SRAM。

### 需要重新整理

現代的隨機存取記憶體依賴記憶體儲存資料。電容器充滿電後代表 1（二進制），未充電的代表 0。由於電容器或多或少有漏電的情形，若不作特別處理，電荷會漸漸隨時間流失而使資料發生錯誤。**重新整理**是指重新為電容器充電，彌補流失了的電荷。DRAM 的讀取即有重新整理的功效，但一般的定時重新整理並不需要作完整的讀取，只需作該晶片的一個列（Row）選擇，整列的資料即可獲得重新整理，而同一時間內，所有相關記憶晶片均可同時作同一列選擇，因此，在一段期間內逐一做完所有列的重新整理，即可完成所有記憶體的重新整理。需要重新整理正好解釋了隨機存取記憶體的揮發性。

### 對靜電敏感

正如其他精細的積體電路，隨機存取記憶體對環境的靜電荷非常敏感。靜電會干擾記憶體內電容器的電荷，引致資料流失，甚至燒壞電路。故此觸碰隨機存取記憶體前，應先用手觸摸金屬接地。

## 記憶體的使用

電腦執行時，電腦的主記憶體按照被使用情況可分類為：

* 可利用（Available）實體記憶體：可立即分配給程式使用的記憶體。包括：
  * 空閒（Free）實體記憶體：完全未被使用，內容為全 0
  * 快取（Cached）實體記憶體
    * 備用（standby）實體記憶體：作業系統預先把可能要用到的硬碟資料載入所占用的記憶體，還沒被使用者行程所使用，因此可隨時丟棄從新初始化為 0
    * 已修改（modified）實體記憶體：已被修改過的 caching 用途的記憶體，可在任意時刻寫回硬碟檔案（不是分頁檔案）然後被重用。由於硬碟 I/O，已修改（modified）實體記憶體不能計入空閒（Free）實體記憶體
* 被使用（used）實體記憶體：已經被行程使用的記憶體
  * 使用者行程使用的實體記憶體，即工作集（Working set）。Working Set 包含了可能被其他程式共享的記憶體，例如 DLL。所以所有行程的 Working Set 加起來有可能大於實際的被使用（used）的實體記憶體。Private Bytes 是只被本行程提交（commit）的虛擬位址空間，不包括其他行程共享的記憶體。Virtual Byte 是整個行程占用的全部虛擬位址空間。32 位 Windows 使用者模式下，行程最大可以使用 2GiB，可以通過修改 Boot.ini 檔案擴充為最大可以使用到 3GiB。工作管理員中的 Memory Usage 對應的是 working set，VM Size 對應的是 private bytes
  * 核心行程使用的實體記憶體
    * 分頁的核心行程使用的實體記憶體：可以交換到分頁檔案中，從而可被回收的實體記憶體
    * 未分頁（Non paged）的核心行程使用的實體記憶體：不能交換到分頁檔案的記憶體，總是要保留在實體記憶體中
* 硬體保留（hardware reserved）的實體記憶體：被 CPU 中的 GPU 核心或者其他外設硬體占用的，不由作業系統使用的記憶體

## 記憶體牆

「記憶體牆」是指 CPU 與 CPU 晶片外的記憶體之間的速度差距越來越大，其中一個造成差距的重要原因是晶片邊界之外的通訊頻寬有限，又稱為頻寬牆。從 1986 年到 2000 年，CPU 所提升速度的年變率達 55%，記憶體速度卻只提高了 10%。由此趨勢可預料記憶體延遲將成為電腦效能的巨大瓶頸。

CPU 速度提升明顯放緩，一部分原因是由於重大的物理屏障，一部分原因則是目前的 CPU 設計已經在某種意義上撞上了記憶體牆。英特爾在一份 2005 年的檔案中總結了這些原因。

> 首先，隨著晶片幾何尺寸縮小及時脈頻率提高，電晶體漏電流會增加，導致超額的功耗和熱量... 其次，因為記憶體的存取時間無法跟上時脈頻率的成長，導致更高的時脈速度所帶來的優勢被記憶體的延遲抵消。第三，對於某些應用，隨著處理器速度的提高（由於所謂的馮・諾依曼瓶頸），傳統的序列架構變得越來越低效，進一步削弱了頻率提高可帶來的收益。此外，部分原因是由於固態元件內產生電感的方法受到限制，訊號傳輸中的電阻 - 電容延遲會隨著特徵尺寸的縮小而增加，這就額外帶來了頻率增加也無法解決的瓶頸。
> 
> 

## 相關條目

* 電腦記憶體
* 唯讀記憶體（ROM）
* DRAM
* SRAM
* 快取（Cache）
* 雙埠隨機存取記憶體（DPRAM）
* NVDIMM

## 參考文獻

## 外部連結

 維基共享資源上的相關多媒體資源：隨機存取記憶體
内存模块

**記憶體模組**（**memory module**）是一種裝有記憶體積體電路的印刷電路板。記憶體模組可以輕鬆安裝到個人電腦、工作站和伺服器等電腦的電子系統中以及進行更換。最初的記憶體模組採用專有設計，只能用於特客製化造商製造的特定電腦型號。不久後，記憶體模組由 JEDEC 等組織進行了標準化，可以在任何遵循相關設計的系統中使用。

記憶體模組的類型包括：

* TransFlash Memory Module
* SIMM
* DIMM，雙列直插式記憶體模組
  * Rambus 記憶體模組是 DIMM 的一個子集，通常稱為 RIMM
  * SO-DIMM，筆記型電腦使用的小外形 DIMM

電腦記憶體模組的特徵差異包括：電壓、容量、速度（位元速率）和外形規格。

## 參考資料
内存池

**記憶池**（Memory Pool），又被稱為**固定大小區塊規劃（fixed-size-blocks allocation）** ，允許程式設計師以類似 C 語言 的 malloc 或是 C++ 的 new 運算元進行動態的記憶體規劃。對於其它動態記憶體規劃的實踐來說，因為會變動記憶體區塊大小導致的碎片問題，導致在實時系統上受限於效能因此，根本無法使用。**記憶池**提供了一個更有效率的解決方案：預先規劃一定數量的記憶體區塊，使得整個程式可以在執行期規劃 (allocate)、使用 (access)、歸還 (free) 記憶體區塊。

有許多實時作業系統採用了**記憶池**，IBM 的 Transaction Processing Facility 便是其中一個例子。

## 一個簡單的實踐範例

這個簡單的**記憶池**實踐模組在編譯期規劃 3 個範例記憶池，其區塊將大小針對程式的需求做最佳化。這個程式可以下列介面來規畫、使用及歸還記憶體區塊：

* 從記憶池中規劃記憶體區塊。這個函式會先檢測目前的記憶池是否仍有足夠空間可以規劃所需的記憶體區塊，若空間已不足，將繼續嘗試下一個記憶池。一個已規劃的記憶體區塊將使用 handle 來表示。
* 獲取一個指向已規劃記憶體區塊的指標。
* 歸還之前規劃的記憶體區塊。
* 用以代表記憶體區塊的 handle，可以使用像是 unsigned int 的資料型別來實踐。

## 記憶池與 malloc 的比較

**優點**

* 記憶池允許在執行期以常數時間規劃記憶體區塊，並且不會有記憶體破碎的情況產生。一次歸還記憶體中成千上萬個物件的記憶體區塊只需要一個操作，無需像 malloc 一般需要個別 free。
* 記憶池可以在階層式的樹狀結構中被分群，非常適合某些特定的程式結構，例如遞迴與迭代。
* 固定區塊大小的記憶池不需將每次規劃的資訊記錄下來（例如規劃的記憶體區塊大小，因為每次規劃都是一樣的）。針對一些小而多的記憶體區塊規劃會節省一些空間。

**缺點**

* 記憶池模組在使用時，必須依照程式需求來做個別調整，才能保持時間與空間效率。

## 外部連結

* PJLIB Reference: Fast Memory Pool （頁面存檔備份，存於網際網路檔案館）
* Pool Concepts
* A Memory Allocator （頁面存檔備份，存於網際網路檔案館）
内存盘

**RAM disk** 是將 RAM 模擬為硬碟的技術。

相對於傳統的硬碟檔案存取來說，這種技術可以大幅提高檔案的存取速度。但是 RAM 的揮發性也意味著關閉電源後資料將會遺失。某些時候這不是問題，比如說對於一個加密文件的明文來說。但是在大多數情況下，傳遞到 RAM disk 上的資料都是其他在別處有永久性存貯檔案的一個拷貝，當系統重新啟動後可以重新建立。

## 實現

軟體的 RAM disk 使用一般的 RAM 的一部分來模擬一個硬碟。通常都可以使用由作業系統核心支援的機制來實現，但是透過使用者空間（相對於「核心空間」）的應用程式行程來進行這種的模擬也是有可能的。 因為存貯在 RAM disk 中檔案一般都是臨時性的，所以也就不需要使用電池備份，或者 UPS 等裝置。

某些 RAM disk 使用壓縮的檔案系統例如：cramfs。這是因為一般的 RAM disk 都容量一般都較小， 且 RAM 的價格比硬碟要高，所以這樣做是很合理的。

## 作為 Web 快取

可以使用 RAM disk 來做為 Web 快取，這樣可以提高載入頁面的速度。

由於 RAM disk 的揮發性，還帶來了安全性上的好處。（因可以確保資訊不會留下痕跡）

## 歷史

世界上第一個在微機上商用的的 RAM disk 軟體是 1980 年代由 Microcosm Ltd 公司開發的 Silicon Disk System，首先是在 CP/M 作業系統上，後來在 MS-DOS 上。由於 Commodore hardware 的記憶體位址的限制，RAM disk 在 Commodore 64 和 Commodore 128 作業系統上很流行。AmigaOS 自身就是 RAM disk 的能力。

Microsoft 於 1983 年在 MS-DOS（版本 2.0）上加入了 RAM disk 的功能。Apple Computer 於 1991 年在 Apple Computer 上也加入了這個特性。另外，許多的 Unix 與 Unix-like 系統也提供某種程度上的 RAM disk 功能。尤其是在 Linux 上，在安裝於某些高效能，低資源裝置的情況下。

## 相關軟體

* Buffalo Ramdisk：能設定關機保全數據存回實體硬碟／儲存器；不支援 Windows 8+。
* SoftPerfect RAM Disk 3.4.6：足夠完善的功能，效能比 Buffalo Ramdisk 稍高且讀寫表現更穩定；擁有優秀的系統向上支援及全位元 (x86/x64) capabilities 性，支援運行於 Windows 8、Windows 8.1、Windows 10／Enterprise Technical Review 2015 中通過測試。

## 參考

## 外部連結

* 範例代碼去建立 ramdisk 驅動程式在 Win32（頁面存檔備份，存於網際網路檔案館）和 classic macOS（頁面存檔備份，存於網際網路檔案館）
* Unix 魚殼指令碼 For macOS（頁面存檔備份，存於網際網路檔案館）和命令列（頁面存檔備份，存於網際網路檔案館）去建立一個 Ramdisk 在 macOS（頁面存檔備份，存於網際網路檔案館）上
内存管理

**記憶體管理**，是指軟體執行時對電腦記憶體資源的分配和使用的技術。其最主要的目的是如何高效、快速的分配，並且在適當的時候釋放和回收記憶體資源。

一個執行中的程式，譬如網頁瀏覽器在個人電腦或是圖靈機（Turing machine）裡面，為一個行程將資料轉換於真實世界及電腦記憶體之間，然後將資料存於電腦記憶體內部（在電腦科學，一個程式是一群指令的集合，一個行程是電腦在執行中的程式）。記憶體能被實際組織在許多方法裡頭，例如磁帶或是磁盤，或是小陣列容量的微晶片。
從 1950 年代開始，計算機變的更複雜，它被連線於許多種類的記憶體。記憶體管理的任務也變得複雜，甚至必須要在同一台機器上相同的時間執行多個行程。

在記憶體內，一個程式（作業系統）在每一個資料區段持續地追蹤實體位置，及移動實體上的資料去改善其效能及保證可靠性，對於每個使用者層（user-level）的程式，作業系統分配一段虛擬記憶體空間，當行程起始時，不需要移動資料到實體裝置間，資料存於磁碟內的虛擬記憶體空間，也不需要去組態主記憶體空間給該行程，當使用者有需要用到時，他們才會很自由地載入到主記憶體內。

可以想像一個很大的程式，當他執行時變成行程，而大部分的記憶體空間都被存到磁碟內虛擬記憶體位址，需要用到的部分才被載入到記憶體內部提供服務。

## 主記憶體使用

一個程式結構由以下兩部分而成:

* 「本文區段」，也就是指令存放，提供 CPU 使用及執行
* 「資料區段」，儲存程式內部本身設定的資料，例如常數字串，像是 GUI 介面內部一些文字訊息，或是程式設計時所放入的訊息資料，資料可藉由程式執行時由輸入（input）的方式加入，或者經由程式執行的流程中被移除。

當一個程式執行，作業系統將程式的資料區段及本文區段對映到虛擬記憶體空間內部，然後在記憶體執行程式的指令（見范紐曼架構），無論如何，當程式執行時就必須去儲存暫時性的資料，或更重要的，它會呼叫一些函式（function）或是常式（subroutine），並且儲存當前函式的狀態，最好的資料結構方法，資料由堆疊（stack）的方式儲存，當我們完成這個函式，資料會由堆疊的 pop 方式取出，堆疊將會在函式的生命週期內動態的成長，作業系統提供區分本文區段及資料區段，而堆疊區段則在一個行程的最頂端，這種方式稱為段式結構（segments）或「分段」。

## 參考文獻

## 參見

* 分頁表
内存管理单元

**記憶體管理單元**（英語：**memory management unit**，縮寫為 **MMU**），有時稱作**分頁記憶體管理單元**（英語：**paged memory management unit**，縮寫為 **PMMU**）。它是一種負責處理中央處理器（CPU）的記憶體存取請求的電腦硬體。它的功能包括虛擬位址到實體位址的轉換（即虛擬記憶體管理）、記憶體保護、中央處理器高速緩衝記憶體的控制，在較為簡單的電腦架構中，負責匯流排的仲裁以及儲存體切換（bank switching，尤其是在 8 位元的系統上）。

## 工作機制

現代的記憶體管理單元是以頁的方式，分割虛擬位址空間（處理器使用的位址範圍）的；頁的大小是 2 的 n 次方，通常為幾 KB（千位元組）。位址尾部的 n 位（頁大小的 2 的次方數）作為頁內的偏移量保持不變。其餘的位址位（address）為（虛擬）頁號。

### 頁表條目

記憶體管理單元通常藉助一種叫做轉譯旁觀緩衝區（Translation Lookaside Buffer，縮寫為 TLB）的相聯高速緩衝記憶體（associative cache）來將虛擬頁號轉換為物理頁號。當後備緩衝區中沒有轉換記錄時，則使用一種較慢的機制，其中包括專用硬體（hardware-specific）的資料結構（Data structure）或軟體輔助手段。這個資料結構稱為分頁表，頁表中的資料就叫做分頁表項（page table entry，縮寫為 PTE）。物理頁號結合頁偏移量便提供出了完整的實體位址。

頁表或轉換後備緩衝區中資料項包括的資訊有：一、「髒位」（頁面重寫標誌位，dirty bit）—— 表示該頁是否被寫過。二、「存取位」（accessed bit）—— 表示該頁最後使用於何時，以便於最近最少使用頁面置換演算法（least recently used page replacement algorithm）的實現。三、哪種行程可以讀寫該頁的資訊，例如使用者模式（user mode）行程還是特權模式（supervisor mode）行程。四、該頁是否應被高速緩衝的資訊。

有時，TLB 或 PTE 會禁止對虛擬頁的存取，這可能是因為沒有物理隨機存取記憶體（random access memory）與虛擬頁相關聯。如果是這種情況，MMU 將向 CPU 發出頁錯誤（page fault）的訊號。作業系統 (operating system）將進行處理，也許會嘗試尋找 RAM 的空白影格，同時建立一個新的 PTE 將之對映到所請求的虛擬位址。如果沒有空閒的 RAM，可能必須關閉一個已經存在的頁面，使用一些替換演算法，將之儲存到磁碟中（這被稱之為頁面排程（paging）。在一些 MMU 中，PTEs 或者 TLB 也存在一些缺點，在這樣的情況下作業系統將必須釋放空間以供新的對映。

### 益處

有些情況下，軟體自身的錯誤可以引發頁錯誤，這時記憶體管理單元可以檢測到頁錯誤，然後通知作業系統終止出錯的程式。通常來說，作業系統會為每個程式分配虛擬記憶體位址，而不會讓程式直接存取實體記憶體。這種記憶體保護特性可以避免某個程式非法存取其他程式的虛擬記憶體空間。

此外，記憶體管理單元能夠減少程式的記憶體碎片化現象。也就是說，當程式分配並釋放記憶體塊後，可分配的連續記憶體塊的最大尺寸亦遠小於尚未分配的記憶體量。虛擬記憶體機制可以在記憶體分頁機制的基礎上，將多個不連續的實體記憶體區塊對映為一個連續的虛擬記憶體塊。
内存缓存

**快取**（英語：**cache**，/kæʃ/ _KASH_ ），原始意義是指存取速度比一般隨機存取記憶體（RAM）快的一種 RAM，通常它不像系統主記憶體那樣使用 DRAM 技術，而使用昂貴但較快速的 SRAM 技術。

## 原理

Cache 一詞來源於 1967 年的一篇電子工程期刊論文。其作者將法語詞「cache」賦予「safekeeping storage」的涵義，用於電腦工程領域。PC-AT/XT 和 80286 時代，沒有 Cache，CPU 和記憶體都很慢，CPU 直接存取記憶體。80386 的晶片組增加了對可選的 Cache 的支援，進階主機板帶有 64KB，甚至高端的 128KB Write-Through Cache。80486 CPU 裡面加入了 8KB 的 L1 Unified Cache，當時也叫做內部 Cache，不分代碼和資料，都存在一起；晶片組中的 Cache，變成了 L2，也被叫做外部 Cache，從 128KB 到 256KB 不等；增加了 Write-back 的 Cache 屬性。Pentium CPU 的 L1 Cache 分為 Code 和 data，各自 8KB；L2 還被放在主機板上。Pentium Pro 的 L2 被放入到 CPU 的 Package 上。Pentium 3 開始，L2 Cache 被放入了 CPU 的 Die 中。從 Intel Core CPU 開始，L2 Cache 為多核共享。

當 CPU 處理資料時，它會先到 Cache 中去尋找，如果資料因之前的操作已經讀取而被暫存其中，就不需要再從隨機存取記憶體（Main memory）中讀取資料 —— 由於 CPU 的執行速度一般比主記憶體的讀取速度快，主記憶體儲器周期（存取主記憶體儲器所需要的時間）為數個時鐘周期。因此若要存取主記憶體的話，就必須等待數個 CPU 周期從而造成浪費。

提供「快取」的目的是為了讓資料存取的速度適應 CPU 的處理速度，其基於的原理是記憶體中「程式執行與資料存取的局域性行為」，即一定程式執行時間和空間內，被存取的代碼集中於一部分。為了充分發揮快取的作用，不僅依靠「暫存剛剛存取過的資料」，還要使用硬體實現的指令預測與資料預取技術 —— 儘可能把將要使用的資料預先從記憶體中取到快取裡。

CPU 的快取曾經是用在超級電腦上的一種進階技術，不過現今電腦上使用的的 AMD 或 Intel 微處理器都在晶片內部整合了大小不等的資料快取和指令快取，通稱為 L1 快取（L1 Cache 即 Level 1 On-die Cache，第一級片上高速緩衝儲存器）；而比 L1 更大容量的 L2 快取曾經被放在 CPU 外部（主機板或者 CPU 介面卡上），但是現在已經成為 CPU 內部的標準組件；更昂貴的 CPU 會配備比 L2 快取還要大的 L3 快取（level 3 On-die Cache 第三級高速緩衝儲存器）。

## 概念的擴充

如今快取的概念已被擴充，不僅在 CPU 和主記憶體之間有 Cache，而且在記憶體和硬碟之間也有 Cache（**磁碟快取**），乃至在硬碟與網路之間也有某種意義上的 Cache──稱為 **Internet 臨時資料夾**或**網路內容快取**等。凡是位於速度相差較大的兩種硬體之間，用於協調兩者資料傳輸速度差異的結構，均可稱之為 Cache。

## 位址映象與變換

　
:

由於儲存裝置容量遠大於 CPU 快取的容量，因此兩者之間就必須按一定的規則對應起來。位址映象就是指按某種規則把主記憶體塊裝入快取中。位址變換是指當按某種映象方式把主記憶體塊裝入快取後，每次存取 CPU 快取時，如何把主記憶體的實體位址（Physical address）或虛擬位址（Virtual address）變換成 CPU 快取的位址，從而存取其中的資料。

## 快取置換策略

主記憶體容量遠大於 CPU 快取，磁碟容量遠大於主記憶體，因此無論是哪一層次的快取都面臨一個同樣的問題：當容量有限的快取的空閒空間全部用完後，又有新的內容需要添加進快取時，如何挑選並捨棄原有的部分內容，從而騰出空間放入這些新的內容。解決這個問題的演算法有幾種，如最久未使用演算法（LFU）、先進先出演算法（FIFO）、最近最少使用演算法（LRU）、非最近使用演算法（NMRU）等，這些演算法在不同層次的快取上執行時擁有不同的效率和代價，需根據具體場合選擇最合適的一種。

## 參見

* CPU 快取
* 分頁
* 磁碟快取
* 快取置換

## 參考文獻

## 外部連結

* 處理器的儲存子系統（一）-- 概述 （頁面存檔備份，存於網際網路檔案館）
* 處理器的儲存子系統（二）-- Cache （頁面存檔備份，存於網際網路檔案館）