发表于2024-12-24
操作係統之編程觀察 pdf epub mobi txt 電子書 下載 2024
本書彌閤瞭操作係統理論課程和操作係統編碼實現之間的斷層。以Linux真實操作係統為觀察對象,主要利用proc文件係統展示齣來的內核行為數據來講述操作係統的核心概念。
目錄
第1章Linux安裝與訪問1
1.1安裝Linux1
1.1.1下載CentOS 71
1.1.2CentOS 7安裝3
1.2虛擬機安裝Linux9
1.2.1VirtualBox安裝9
1.2.2虛擬機配置17
1.2.3虛擬機安裝Linux19
1.3ssh遠程終端訪問21
1.4初次接觸Linux24
1.4.1簡單操作24
1.4.2運行HelloWorld程序29
1.4.3操作係統接口32
1.5閱讀注意事項33
1.6本章小結34
第2章進程控製35
2.1進程基本概念35
2.1.1進程實體37
2.1.2進程間組織關係38操作係統之編程觀察目錄2.1.3進程控製命令42
2.2創建與撤銷進程44
2.2.1fork()創建子進程44
2.2.2孤兒進程和僵屍進程47
2.2.3exec函數族49
2.2.4通過kill()撤銷進程51
2.2.5創建守護進程51
2.3創建pthread綫程56
2.3.1進程與綫程57
2.3.2創建方法58
2.4進程和綫程資源開銷60
2.4.1PCB開銷60
2.4.2內存描述符開銷63
2.5本章小結64
2.6練習65
第3章進程調度66
3.1調度與均衡66
3.1.1調度與均衡框架71
3.1.2全係統的調度統計72
3.2進程狀態及其轉變75
3.2.1進程狀態75
3.2.2狀態轉換80
3.2.3進程的調度統計83
3.3進程的調度88
3.3.1普通進程的CFS調度88
3.3.2實時進程調度93
3.4進程遷移與負載均衡103
3.4.1CFS進程的負載均衡104
3.4.2實時進程的負載均衡111
3.5本章小結114
3.6練習114
第4章進程間通信與同步115
4.1進程間通信115
4.1.1管道115
4.1.2System V IPC120
4.2進程間同步133
4.2.1System V IPC信號量集133
4.2.2POSIX信號量145
4.3本章小結154
4.4練習154
第5章內存管理156
5.1虛存空間管理156
5.1.1進程映像156
5.1.2堆區161
5.1.3文件映射區168
5.1.4棧區171
5.1.5訪問任意進程的虛存176
5.1.6虛存使用的物理頁幀179
5.2分頁機製與頁錶181
5.2.1分頁機製182
5.2.2進程頁錶186
5.3物理內存組織管理193
5.3.1頁幀、節點、內存域193
5.3.2空閑頁幀管理——buddy係統200
5.3.3物理內存分配與迴收204
5.3.4內存迴收215
5.4本章小結227
5.5練習228
第6章綜閤——新進程創建到運行229
6.1shell讀入命令229
6.1.1用戶空間與內核空間229
6.1.2讀入命令231
6.2創建進程237
6.2.1fork()復製進程237
6.2.2替換進程映像238
6.2.3開始運行新進程239
6.2.4進程映像與缺頁240
6.3本章小結240
6.4練習241
第7章VFS文件係統242
7.1VFS242
7.1.1VFS對象243
7.1.2文件係統類型245
7.2文件基本操作246
7.2.1命令行基本操作246
7.2.2編程接口248
7.3目錄結構253
7.3.1樹形結構253
7.3.2軟/硬鏈接254
7.3.3文件係統創建與安裝258
7.4頁緩存264
7.4.1頁緩存基本概念265
7.4.2頁緩存動態變化266
7.5非文件功能268
7.5.1交換268
7.5.2設備接口273
7.5.3proc文件係統279
7.6本章小結280
7.7練習280
第8章EXT2文件係統281
8.1EXT2磁盤數據的組織281
8.1.1整體布局281
8.1.2超級塊283
8.1.3塊組描述符285
8.1.4索引節點286
8.1.5目錄結構289
8.2EXT2文件係統的創建291
8.2.1分配磁盤空間291
8.2.2創建環迴設備292
8.2.3創建EXT2文件係統293
8.2.4安裝文件係統293
8.3查看EXT2磁盤數據294
8.3.1布局信息294
8.3.2塊組描述符299
8.3.3索引節點與文件內容300
8.3.4目錄結構304
8.4本章小結309
8.5練習310
附錄vi編輯命令311
第5章
內存管理
在學習內存管理的時候,需要注意區分虛擬內存、物理內存,以及連續內存管理方式、離散內存管理方式等幾個概念的關係。本書假設讀者已經學習過操作係統原理性課程,對虛擬內存的工作原理有初步瞭解。
本章中“物理頁幀”通常用“頁幀”指代,而虛存空間的頁通常用“虛頁”指代。
5.1虛存空間管理
首先來觀察一個進程內部的進程空間是如何管理的。迴顧圖2��2和圖2��3可知,進程空間是一個虛存空間,被分割成兩大區域——內核空間(所有進程共享該空間)和進程的用戶空間。多個進程各自的虛存空間並存於係統中,形成圖2��8所示的內存子係統完整視圖。其中用戶空間則是由多個內存區間(VMA)構成,其他未分配的空間不能使用,否則齣現非法錯誤。該進程PCB(struct task_struct)的mm成員(struct mm_struct)描述整個進程用戶空間,而mm_struct結構體內部有管理著該進程內部全部的虛存空間(struct vm_area_struct),具體如圖2��3所示。內核空間的管理未進行討論。
5.1.1進程映像
如果運行HelloWorld�瞘etchar程序,然後用ps獲得其PID,就能通過/proc/PID/maps查看這些區間的地址範圍和相關屬性,如屏顯5��1所示。
屏顯5��1中cat /proc/25085/maps命令輸齣的是進程25085(即HelloWorld�瞘etchar)內存布局信息。每一行是一個具有特定屬性的連續內存區,每行的開頭是該區間的地址範圍。後麵的rwxp分彆代錶: r=可讀、w=可寫、x=可執行、s=共享以及p=操作係統之編程觀察第5章內存管理屏顯5��1HelloWorld�瞘etchar的內存布局
[lqm@localhost ~]$ps
PID TTYTIME CMD
4330 pts/000:00:00 bash
25085 pts/000:00:00 HelloWorld-getc
25090 pts/000:00:00 ps
[lqm@localhost ~]$cat /proc/25085/maps
00400000-00401000 r-xp 00000000 fd:00 12641267/home/lqm/HelloWorld-getchar
00600000-00601000 r--p 00000000 fd:00 12641267 /home/lqm/HelloWorld-getchar
00601000-00602000 rw-p 00001000 fd:00 12641267 /home/lqm/HelloWorld-getchar
7f0e039a7000-7f0e03b5d000 r-xp 00000000 fd:00 262222 /usr/lib64/libc-2.17.so
7f0e03b5d000-7f0e03d5d000 ---p 001b6000 fd:00 262222 /usr/lib64/libc-2.17.so
7f0e03d5d000-7f0e03d61000 r--p 001b6000 fd:00 262222 /usr/lib64/libc-2.17.so
7f0e03d61000-7f0e03d63000 rw-p 001ba000 fd:00 262222 /usr/lib64/libc-2.17.so
7f0e03d63000-7f0e03d68000 rw-p 00000000 00:00 0
7f0e03d68000-7f0e03d88000 r-xp 00000000 fd:00 262215 /usr/lib64/ld-2.17.so
7f0e03f70000-7f0e03f73000 rw-p 00000000 00:00 0
7f0e03f84000-7f0e03f87000 rw-p 00000000 00:00 0
7f0e03f87000-7f0e03f88000 r--p 0001f000 fd:00 262215 /usr/lib64/ld-2.17.so
7f0e03f88000-7f0e03f89000 rw-p 00020000 fd:00 262215 /usr/lib64/ld-2.17.so
7f0e03f89000-7f0e03f8a000 rw-p 00000000 00:00 0
7ffe7dc5e000-7ffe7dc7f000 rw-p 00000000 00:00 0 [stack]
7ffe7dd0a000-7ffe7dd0c000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
[lqm@localhost ~]$
序
深圳大學計算機與軟件學院正在進行教學改革,基於明仲教授和王誌強教授兩位領導的構想,計算機與軟件學院參照美國紐約賓漢姆敦大學教學要求,將其課程在深圳大學原樣重現。對計算機係統係列課程和操作係統課程都進行瞭改革,其中操作係統課程縮減瞭理論授課,增加瞭實驗操作環節。同時深圳大學計算機與軟件學院計算機係統課程組正在承擔廣東省教育廳應用型人纔培養項目(計算機係統係列核心課課程),強調豐富的動手實踐經驗並提高係統能力、係統思維。在上述環境下,為瞭充實實驗內容,保持學生在課程學習中全程充實,我們完成瞭本書以配閤理論教學。
在過去的操作係統教學過程中,作者深感理論教學與實踐的脫節之睏。雖然也有老師講授Linux工程實踐和係統編程,從而拉近瞭兩者的距離,但都還未能與操作係統的核心概念緊密聯係,仍似隔靴搔癢,可望而不可即。另外也考慮過將Linux內核源碼分析或增強作為實踐內容,但是由於學習麯綫過於陡峭需要花費太多的時間,並不太適閤作為課程內容——難以在一個學期課程中結閤進來,甚至還可能讓學生産生無功而返的挫敗感。
根據我們在個人高性能計算機(PHPC)係統研製過程中對研究生培養的經驗積纍,將Linux係統編程的基礎知識結閤Linux的內核行為觀察,利用/proc文件係統中探測到的內核數據,以及其他各種工具收集的內核數據,直觀生動地將進程與內核的交互、內核的行為展示給學生,獲得非常好的學習效果。學生對進程行為、內存分配管理、進程間通信和文件係統等各方麵的認知,都遠比傳統的操作係統課程教學效果好。
讀者在學習和體驗操作係統各種概念的同時,也獲得瞭初步的係統編程實踐鍛煉,並為進一步閱讀Linux內核源代碼做好瞭充足的準備。將proc文件係統和相關工具加入到操作係統的學習過程中,相當於有瞭電路係統課程中的“萬用錶、示波器和邏輯分析儀”等工具,有瞭觀測工具後,操作係統的教學和實驗纔算基本成熟瞭。正因為這些觀測工具,使得一些讀者在完成全書學習後可能會覺得: “哦,原來這纔是操作係統!”經過這樣的實踐鍛煉後,讀者不僅可以在後續學習中加快係統編程的學習進度,還可以加快獲得分析和修改Linux內核代碼能力的培養進程。
本書是作者這些年在本科教學和研究生培養過程中積纍的經驗匯總,相信讀者會喜歡。
限於作者的水平和能力,書中會有疏漏,歡迎讀者指正。
編者
2018年4月操作係統之編程觀察
緻謝
本書獲得深圳市科創委基礎研究JCYJ20150930105133185項目和JCYJ20170302153920897雲環境中的異構存儲資源分配與性能優化研究的資助。感謝深圳大學計算機與軟件學院操作係統課程組的各位老師,大傢一起完成瞭操作係統實驗課程的改革,特彆是張滇和周明洋兩位老師在相關實驗內容的檢查和教學工作中做齣瞭極大的貢獻。
還需要感謝2014級幾位同學在相關的材料整理和實驗代碼的設計中做齣的貢獻。其中林潤勝同學完成瞭第5章的匿名映射、文件映射、meminfo和zoneinfo解讀及相關代碼,第8章的EXT2文件係統中文件內容讀取、目錄讀取及相關代碼,協助完成瞭第6章的勘誤;張永昌同學完成瞭5.1.1節、7.3.3節的內容和相應的代碼。這兩位同學一起提供瞭5.3.3節的部分內容,完成瞭第5章內存管理和第8章EXT2文件係統的勘誤工作。羅文傑同學完成瞭4.2.1節的信號量集相關代碼和材料。2017級研究生湯釗揚同學作為第一位讀者,協助驗證代碼和完成勘誤工作。
在上述老師和同學的大力支持下,本書終於完稿並與讀者見麵,再次對他們錶示衷心的感謝!
操作係統之編程觀察 pdf epub mobi txt 電子書 下載