精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C語言與操作系統(tǒng)的內存布局

開發(fā) 前端
C語言適合寫操作系統(tǒng),我覺得跟丹尼斯-里奇發(fā)明它的目的就是為了寫Unix有關:不好用的地方已經(jīng)被優(yōu)化過了。

?C語言之所以適合寫操作系統(tǒng),就在于它的內存布局簡單:

1,所有的全局變量都被常量初始化,

2,不需要運行時的狀態(tài),

3,也不需要在main()函數(shù)之前運行額外的初始化代碼。

操作系統(tǒng)的初始化是很復雜的。

在C語言寫成的內核main()函數(shù)運行之前,操作系統(tǒng)要運行一段很復雜的匯編代碼,以完成內核的內存初始化。

這段匯編代碼包含著很多重要的內核全局數(shù)據(jù),它是由內核作者精心定制的,沒法由編譯器自動生成。

對于內核程序員來說,編譯器做的事越少越好,但是又不能像匯編器那么少?

C語言適合寫操作系統(tǒng),我覺得跟丹尼斯-里奇發(fā)明它的目的就是為了寫Unix有關:不好用的地方已經(jīng)被優(yōu)化過了。

1970年,丹尼斯-里奇怎么一邊改unix系統(tǒng)的代碼、一邊改cc編譯器的代碼的咱就不回憶了。

這里說說C語言和操作系統(tǒng)的內存布局。

1.C語言的內存布局。

C語言編譯連接之后的可執(zhí)行文件,分為:

1) 代碼段(.text),

2) 只讀數(shù)據(jù)段(.rodata),

3) 數(shù)據(jù)段(.data),

4) 堆 (heap),

5) 棧 (stack),

其中需要存儲在文件里的只有前3個,

后2個在進程運行期間是動態(tài)變化的臨時數(shù)據(jù),并不需要存儲在文件里。

代碼段的權限是只讀+可執(zhí)行,

只讀數(shù)據(jù)段的權限是只讀,

數(shù)據(jù)段、堆、棧的權限都是可讀可寫的,但不能運行。

如果系統(tǒng)內核發(fā)現(xiàn)了進程的內存權限是錯誤的,那么就是段錯誤:信號是SIGSEGV。

*("hello") = 1;

這種代碼肯定是“段錯誤”的,因為常量字符串位于只讀數(shù)據(jù)段,它的內容是不可寫的。

通過緩沖區(qū)溢出來覆蓋棧的返回地址的黑客代碼,也會被系統(tǒng)內核發(fā)現(xiàn)運行地址不在代碼段,所以也是段錯誤。

2.內核的內存布局。

內核的內存布局,包含這幾個重要的全局數(shù)據(jù):

1)內核頁表

它是內核的虛擬內存與物理內存的映射。

在開啟分頁機制之前,就要設置好內核頁表的前幾頁:

至少要把內核代碼所在的內存空間映射到頁表里,否則開啟分頁機制時就直接出錯了。

在32位機上,它是由頁目錄-頁表構成的2級數(shù)組:

頁目錄里的每一項記錄每個頁表的物理地址,頁表里的每一項記錄每個內存頁的物理地址。

在64位機上頁表的結構更為復雜,intel手冊上有:我沒仔細看過,有興趣的可以看看。

1個內存頁是4096字節(jié),所以物理地址的最低12位全是0,用來記錄每個頁的讀寫權限。

頁目錄里每項的最低12位,用于記錄它對應的整個頁表的讀寫權限。

1個頁表記錄1024個頁,每個頁4096字節(jié),所以1個頁表管理4M的物理內存。

2)中斷向量表

它存放各種硬件中斷、以及int 0x80軟件中斷的處理函數(shù),也叫中斷服務例程(irq)。

int 0x80軟件中斷,就是Linux系統(tǒng)調用的中斷號。

當然,在64位機上,直接使用syscall匯編指令就行。

syscall的軟件中斷機制,是intel在64位上又新造的一種進入CPU ring0特權級的指令,使用方式跟之前的int指令不大一樣。

我懷疑intel的CPU研發(fā)也是有KPI的,怪不得Linus大牛也經(jīng)常吐槽intel的CPU設計。

一個版本加一個新的指令,純屬給系統(tǒng)軟件的開發(fā)者找難題?

中斷向量表,也是個256項的數(shù)組,每項都是某個中斷的函數(shù)指針。

在中斷被觸發(fā)之后,CPU就是靠這個數(shù)組去查找對應的中斷處理函數(shù)的。

3)全局描述符表

它描述的是內核的內存布局,每項8個字節(jié),共256項。

但實際上,只需要使用前5項就行:

0x0,不使用,

0x8,內核代碼段,

0x10,內核數(shù)據(jù)段,內核堆棧段,它們2個的權限一樣,可以共用一項。

0x20,任務門的描述項,

0x28,局部描述符表的描述項。

siska內核demo的內存布局

因為每項都是8字節(jié),所以地址都是8的倍數(shù)。

4)局部描述符表

它是用于進程的,進程因為跟內核的權限不同,所以進程的段選擇符都在局部描述符表里:

內核的段選擇符是0x8,進程的是0xf。

段寄存器CS、DS、SS,到了保護模式下都成了段選擇符,真正的內存地址在GDT表里。

在16位的實模式下,它們才存儲真正的段的內存地址。

5)任務門

CPU把每個進程看做一個任務,所以要切換進程時需要任務門的描述結構。

它是104個字節(jié)。

但是,Linux系統(tǒng)的進程切換是軟切換:任務門的描述結構只在系統(tǒng)初始化時加載一次,具體的進程切換時只切換頁表和內核棧,然后就可以騙過CPU了?

重新加載任務門的時間消耗比較大,而軟切換的時間消耗比較小。

intel的這個設計,也是不受Linus大牛待見的設計之一?

6)系統(tǒng)調用表

它也是一個大數(shù)組,它的每一項也是函數(shù)指針。

系統(tǒng)調用的入口是int 0x80軟件中斷(64位機上是syscall指令)。

進入內核之后,每個號碼對應一個系統(tǒng)調用。

open()、close()、write()、read(),這些系統(tǒng)調用都有各自的號碼,這些號碼就是系統(tǒng)調用表的數(shù)組索引。

如果open()的系統(tǒng)調用號碼是i,那么open()在內核里實際運行的就是這行代碼:

syscall_table[i]();

7)物理內存的管理數(shù)組

物理內存的管理結構,是一個很大的一維數(shù)組。

假設物理內存有4G,1個內存頁是4K,那么這個數(shù)組的元素個數(shù)就是1024x1024,1M。

數(shù)組的每一項,記錄1個物理內存頁的狀態(tài)。

如果每項是4個字節(jié)的話,那么管理效率就是:(4096-4) / 4096。

管理數(shù)據(jù)所占的字節(jié)數(shù)越多,對物理內存的浪費越大。

get_free_pages()函數(shù),就是通過查看這個數(shù)組來分配物理內存頁的。

因為內核是一個高并發(fā)環(huán)境,這個管理結構里必須要有自旋鎖,以控制多個CPU的并發(fā)訪問。

自旋鎖+引用計數(shù)就至少8字節(jié),所以這個數(shù)組也是非常浪費內存的。

如果多個線程之間要共享內存,那么只要把同一個物理內存頁映射到這幾個線程的頁表里,然后增加物理內存頁的引用計數(shù)就行:

這就是共享內存在內核里的本質。

8)進程的頁表和內核棧

進程的頁表和內核棧,不屬于內核的全局數(shù)據(jù),而是附屬于進程的局部數(shù)據(jù)。

內核在調度某個進程的時候,就把頁目錄基地址寄存器cr3和棧寄存器rsp切換成這個進程的頁表和內核棧。

不同的進程之間,之所以有各自的虛擬內存空間,互相不干擾,就是因為每個進程的頁表不一樣。

要在進程之間共享內存,也跟線程之間共享內存一樣,把同一個物理內存頁映射到它們各自的頁表就行。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-11-01 11:22:38

2022-11-28 07:21:53

操作系統(tǒng)內存管理

2021-06-11 07:26:16

操作系統(tǒng)內存管理Cpu

2022-06-26 00:24:57

C語言操作系統(tǒng)語言

2025-01-06 08:28:45

C語言操作系統(tǒng)程序

2009-08-17 08:32:56

Linux操作系統(tǒng)內存管理Linux

2021-06-22 09:09:34

V語言Vinix操作系統(tǒng)

2010-04-20 14:17:21

Unix操作系統(tǒng)

2023-11-06 08:47:52

操作系統(tǒng)物理內存

2021-03-28 13:54:31

操作系統(tǒng)內存管理

2012-08-13 10:19:03

IBMdW

2018-08-09 16:12:59

操作系統(tǒng)內存分配

2010-04-22 15:14:12

Aix操作系統(tǒng)

2012-05-04 09:49:34

進程

2014-07-29 10:12:38

LinuxC語言編程

2010-04-15 14:40:26

Unix操作系統(tǒng)

2009-12-23 17:47:15

Linux操作系統(tǒng)

2010-04-19 18:13:48

Unix操作系統(tǒng)

2009-12-09 17:25:19

Linux操作系統(tǒng)

2019-07-05 10:04:10

操作系統(tǒng)Android OS
點贊
收藏

51CTO技術棧公眾號

欧美一级久久久| 国产午夜一区二区三区| 欧美激情在线有限公司| 手机免费看av片| 碰碰在线视频| 国产精品久久影院| 成人在线视频网址| 亚洲 欧美 中文字幕| 色狮一区二区三区四区视频| 91精品综合久久久久久| 成年人网站国产| 高清av在线| 国产在线播精品第三| 91国产在线精品| 国产精品69久久久久孕妇欧美| 日韩成人在线观看视频| 一道本成人在线| 亚洲黄色网址在线观看| 蜜桃视频污在线观看| 美女一区二区久久| 国内偷自视频区视频综合 | 国产精品88888| 欧美重口另类videos人妖| 精品国产大片大片大片| 偷拍一区二区| 欧美不卡一区二区三区四区| 在线免费观看视频黄| 超碰在线cao| 亚洲天堂网中文字| 日韩国产在线一区| 亚洲 欧美 激情 另类| 国产一区二区h| 国产日韩欧美成人| 日本视频免费观看| 99在线|亚洲一区二区| 九九热这里只有精品免费看| 五月天精品在线| 亚洲人成网www| 精品久久久久久久久久久久久久久| 国产喷水theporn| 另类激情视频| 欧美日韩国内自拍| 真人抽搐一进一出视频| 中文国产字幕在线观看| 中文字幕日韩一区二区| 亚洲欧美日韩国产yyy| 欧美777四色影视在线| 岛国av在线一区| 99r国产精品视频| 国产露脸91国语对白| 人人狠狠综合久久亚洲| 国产精品日本精品| www.亚洲激情| 日本亚洲欧美天堂免费| 国产精品久久久久久久久久久久久 | 欧美激情极品| 亚洲精品v欧美精品v日韩精品| 国产乱国产乱老熟300部视频| 久久伊人精品| 日韩精品资源二区在线| 性高潮久久久久久| 97品白浆高清久久久久久| 日韩欧美黄色影院| 国产精品一区二区无码对白| 国产精品99久久免费观看| 亚洲成人久久久久| 国产精品一区二区入口九绯色| 欧美绝顶高潮抽搐喷水合集| 日韩精品免费一线在线观看| 中文字幕丰满乱子伦无码专区| 亚洲另类av| 国产一级揄自揄精品视频| 日本污视频网站| 97精品中文字幕| 久久久国产一区| 久久97人妻无码一区二区三区| 黑丝一区二区| 456亚洲影院| 日韩不卡高清视频| 国产最新精品精品你懂的| 亚洲自拍偷拍在线| 日本精品久久久久久| 久久久久久一二三区| 午夜精品福利一区二区| 在线观看中文| 天天免费综合色| 午夜免费高清视频| 日韩区一区二| 亚洲精品一区中文字幕乱码| 国产精品suv一区二区88| 亚洲一级一区| 国产z一区二区三区| 国产精品一区二区人人爽| 成人免费视频app| 久久福利电影| 国产在线观看91| 欧美日韩在线视频一区| 999这里有精品| 国产精品国产| 最近2019中文字幕一页二页 | 中文字幕一区二区av| 久久久影视精品| 最近中文字幕在线观看| 国产成人免费av在线| 日韩av不卡在线播放| a在线免费观看| 色综合久久中文综合久久97| 91在线第一页| 欧美猛男做受videos| 久久69精品久久久久久国产越南| 香蕉影院在线观看| 国产精品一品二品| 日本一区视频在线观看免费| 欧美性猛片xxxxx免费中国| 日本韩国欧美三级| 无码人妻精品一区二区三区99不卡| 精品国产乱码久久久久久果冻传媒| 九九精品视频在线| 亚洲综合精品国产一区二区三区| 不卡视频一二三四| 中文字幕第50页| 欧美日韩尤物久久| 日韩精品免费观看| 豆国产97在线 | 亚洲| 精品无人区卡一卡二卡三乱码免费卡 | 一区二区三区www污污污网站| 99久久免费视频.com| 中文字幕人妻熟女人妻洋洋| 日韩欧美专区| 伊人男人综合视频网| 久久国产黄色片| www..com久久爱| 国产情侣第一页| 精品999日本久久久影院| 中文字幕日韩在线视频| 亚洲精品男人的天堂| 不卡高清视频专区| 人人妻人人澡人人爽欧美一区双 | 国产嫩草一区二区三区在线观看| 米奇精品一区二区三区| 日韩欧美国产一区二区| 超碰男人的天堂| 亚洲人成在线影院| 国产精品一区二区三区观看| 美女精品视频| 欧美精品一区二| 国产奶水涨喷在线播放| 国产99久久久精品| 久久精品xxx| 9国产精品午夜| 欧美富婆性猛交| 亚洲精品一区二区口爆| 亚洲一区二区三区四区中文字幕| 欧美性猛交乱大交| 国模一区二区三区| 精品久久久三级| 午夜裸体女人视频网站在线观看| 日韩风俗一区 二区| 欧美三级午夜理伦| 久久精品男人天堂av| www.欧美日本| 日韩精品免费一区二区三区| 成人国产精品一区二区| av片在线观看| 亚洲第一福利网| 波多野结衣视频网站| 久久精品免视看| 色婷婷.com| 欧美福利专区| 国产精品我不卡| 性国裸体高清亚洲| 在线观看国产精品日韩av| 在线免费观看高清视频| 亚洲免费在线观看视频| 黄色在线免费播放| 亚洲欧美网站| 亚洲精品9999| 日本精品国产| 国内精品久久久久影院优| 精品视频二区| 欧美一区二区视频在线观看2020 | 日韩午夜在线电影| 欧美重口乱码一区二区| 四虎国产精品成人免费影视| 欧美激情免费在线| 国产一二三在线观看| 91麻豆精品国产91久久久久久| 久久亚洲AV无码| 久久久久久一级片| 91丨porny丨九色| 亚洲欧美日韩国产一区| 亚洲欧洲一区二区| 风间由美一区二区av101| 国产精品va在线播放我和闺蜜| 超碰电影在线播放| 亚洲女人天堂成人av在线| 亚洲午夜精品久久久| 香蕉av福利精品导航 | 亚洲精品视频观看| 一级性生活大片| 国内精品久久久久影院色| 日本在线xxx| 亚洲影视一区| 欧美精品久久久| 亚洲一二av| 国产精品女主播视频| 白浆视频在线观看| 美女精品视频一区| 98在线视频| 日韩av在线精品| 国产黄色一区二区| 欧美伊人久久大香线蕉综合69| 国产一级片久久| 日韩一区在线看| 中文字幕被公侵犯的漂亮人妻| 国产成人精品亚洲日本在线桃色 | 国产91精品免费| 亚洲不卡视频在线| 国产精品日韩精品欧美精品| 91成人在线视频观看| 成人同人动漫免费观看 | 国产精品福利片| 国产乱码午夜在线视频| 欧美成人免费在线观看| 免费大片在线观看www| 亚洲香蕉av在线一区二区三区| 亚洲精品网站在线| 日韩一区二区三区电影| 一级做a爱片久久毛片| 欧美视频在线一区| 日批视频免费在线观看| 欧美日韩美女在线观看| 精品在线免费观看视频| 玉米视频成人免费看| www.av免费| 亚洲欧美综合网| 青青青视频在线免费观看| 国产欧美精品一区二区色综合| 欧美做受喷浆在线观看| 99在线精品观看| 污污内射在线观看一区二区少妇| 国产成人在线观看免费网站| 亚洲日本黄色片| 国内不卡的二区三区中文字幕| 青青草久久伊人| 国产在线看一区| 超级砰砰砰97免费观看最新一期| 国内精品免费**视频| 中文国产在线观看| 国产精品123区| 国产调教打屁股xxxx网站| 国产精品18久久久久久久网站| www.五月天色| 国产99一区视频免费| 五月天丁香社区| 成人av动漫在线| 黄色网址在线视频| 久久久亚洲精品一区二区三区| 久久国产精品影院| 国产亚洲欧美激情| 亚洲一级二级片| 亚洲视频免费在线| 久久国产露脸精品国产| 五月婷婷激情综合| 天天干天天干天天| 欧美唯美清纯偷拍| 国产精品乱码久久久| 日韩亚洲电影在线| 全部免费毛片在线播放一个| 日韩大陆毛片av| 1区2区3区在线观看| 久久偷看各类女兵18女厕嘘嘘| caopo在线| 91精品国产高清自在线| 五月激情久久| 成人免费大片黄在线播放| 99亚洲乱人伦aⅴ精品| 久久久久久国产精品免费免费| 欧美一二区在线观看| 欧美 日韩 国产 在线观看| 国产精品v欧美精品v日本精品动漫| 国产在线播放观看| 日韩精品久久久久久| www.com久久久| 成人精品高清在线| 欧美 日韩 国产 成人 在线观看| 日韩理论片中文av| 日本午夜精品理论片a级app发布| 日韩欧美在线看| 国产乱淫av免费| 亚洲韩国青草视频| 午夜视频成人| 欧美亚洲国产另类| av一级久久| 蜜桃传媒视频麻豆一区| 91成人看片| 免费观看精品视频| 国产福利电影一区二区三区| 欧美高清性xxxx| 亚洲精品视频在线看| 无码人妻丰满熟妇奶水区码| 欧美一级视频精品观看| 九色在线视频蝌蚪| 欧美极品少妇全裸体| 91亚洲视频| 精品在线一区| 国产一区亚洲| 亚洲精品午夜在线观看| 91香蕉视频mp4| 九九视频在线观看| 欧美日韩精品欧美日韩精品一综合| 好吊视频一区二区三区| xvideos成人免费中文版| 在线免费看h| 国产一区二区久久久| 中文字幕一区二区av| 国产天堂在线播放| 91女神在线视频| 日韩高清免费av| 日韩精品一区二区三区视频播放 | 激情视频极品美女日韩| 国产四区在线观看| 日韩不卡一二三区| 色哟哟精品观看| 欧美视频在线观看免费网址| 亚洲女同志亚洲女同女播放| 久久久久www| 伊人久久精品| 天天综合中文字幕| 麻豆精品精品国产自在97香蕉| 97超碰在线免费观看| 香蕉成人伊视频在线观看| 国产高中女学生第一次| 久久久精品国产| 成人污版视频| 亚洲精品偷拍视频| 精品系列免费在线观看| 亚洲人做受高潮| 欧美精品三级在线观看| 午夜视频在线观看免费视频| 国产精品久久久久久久午夜| 猛男gaygay欧美视频| 国产一区亚洲二区三区| 久久蜜臀精品av| 国产伦精品一区二区三区视频我| 日韩精品在线视频观看| 亚洲国产欧美日本视频| 欧美一区二区福利| 久久人人精品| av永久免费观看| 精品污污网站免费看| 欧美18一19xxx性| 成人在线免费观看视视频| 一区二区三区网站| 真实乱偷全部视频| 亚洲国产欧美日韩另类综合| 色欲av永久无码精品无码蜜桃| 992tv成人免费影院| 在线成人动漫av| 日本爱爱免费视频| 最新日韩在线视频| www香蕉视频| 777午夜精品福利在线观看| 九九久久婷婷| 一个色综合久久| 一区二区三区 在线观看视频| 免费av网站在线播放| 2018中文字幕一区二区三区| 久久不见久久见免费视频7| 国产精品久久久毛片| 亚洲欧美日本韩国| 色一情一乱一乱一区91av| 日韩免费在线免费观看| 欧美电影免费播放| 911亚洲精选| 一本大道久久a久久综合| 午夜在线视频| 国产精品高清一区二区三区| 久久男女视频| 久久中文免费视频| 国产视频精品xxxx| 国内欧美日韩| 99色这里只有精品| 国产三级精品视频| 亚洲国产成人在线观看| 欧美一级大片在线观看| 亚洲经典一区| av直播在线观看| 91麻豆精品国产91久久久资源速度 | 欧美三级理论片| 亚洲一区二区三区精品在线| 欧美日韩视频精品二区| 91久久大香伊蕉在人线| 久久xxxx精品视频| 久久免费看少妇高潮v片特黄| 亚洲欧美制服综合另类| 欧美9999| 婷婷激情四射五月天| 亚洲国产精品一区二区www在线| 国产最新视频在线观看|