【专栏必读】王道考研408操作系统+Linux系统编程万字笔记、题目题型总结、注意事项、目录导航和思维导图
其他科目導(dǎo)航
-
【專欄必讀】王道考研408計(jì)算機(jī)組成原理萬字筆記(從學(xué)生角度輔助大家理解):各章節(jié)導(dǎo)航及思維導(dǎo)圖
-
【專欄必讀】王道考研408數(shù)據(jù)結(jié)構(gòu)萬字筆記(有了它不需要你再做筆記了):各章節(jié)內(nèi)容概述導(dǎo)航和思維導(dǎo)圖
-
【專欄必讀】王道考研408計(jì)算機(jī)網(wǎng)絡(luò)+網(wǎng)絡(luò)編程萬字筆記、題目題型總結(jié)、注意事項(xiàng)、目錄導(dǎo)航和思維導(dǎo)圖
-
C++學(xué)習(xí)
-
【免費(fèi)分享】軟件工程核心知識(shí)點(diǎn)
-
【免費(fèi)分享】數(shù)據(jù)庫系統(tǒng)概論(王珊 第五版)知識(shí)點(diǎn)
視頻介紹
408(計(jì)組+操作系統(tǒng)+數(shù)據(jù)結(jié)構(gòu)+計(jì)網(wǎng))王道計(jì)算機(jī)考研專欄萬字筆記-祝您考研上岸
首先感謝王道大大(手動(dòng)比心),很用心在做了,筆記會(huì)按照如下方式、特點(diǎn)記錄,大家可以看看,介紹在后面
- (王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)3:進(jìn)程控制(配合Linux講解)
- (王道408考研操作系統(tǒng))第二章進(jìn)程管理-第二節(jié)3:調(diào)度算法詳解2(RR、HPF和MFQ)
文章目錄
- 一:必讀
- 二:關(guān)于本專欄及學(xué)習(xí)建議
- 三:408所需C語言基礎(chǔ)
- (1)C語言基礎(chǔ)知識(shí)點(diǎn)
- (2)C語言重點(diǎn)、難點(diǎn)、考點(diǎn)整理
- 四:文章目錄導(dǎo)航
- 第一章:計(jì)算機(jī)系統(tǒng)概述、
- 第一節(jié):操作系統(tǒng)的基本概念
- 第二節(jié):操作系統(tǒng)的發(fā)展歷程
- 第三節(jié): 操作系統(tǒng)運(yùn)行環(huán)境
- 第四節(jié):操作系統(tǒng)結(jié)構(gòu)
- 第五、六節(jié):操作系統(tǒng)引導(dǎo)和虛擬機(jī)
- 第二章:進(jìn)程管理
- 第一節(jié):進(jìn)程與線程
- 第二節(jié):進(jìn)程調(diào)度、分類及其調(diào)度算法等
- 第三節(jié):進(jìn)程同步和互斥、信號(hào)量及經(jīng)典進(jìn)程同步問題等
- 第四節(jié):死鎖和避免死鎖等
- 第三章:內(nèi)存管理
- 第一節(jié):內(nèi)存基本知識(shí)、分配管理方式等
- 第二節(jié):虛擬內(nèi)存、請(qǐng)求分頁及頁面置換算法等
- 第四章:文件管理
- 第一節(jié):文件基本概念、目錄、物理結(jié)構(gòu)、邏輯結(jié)構(gòu)、共享和安全等
- 第二節(jié):磁盤結(jié)構(gòu)、磁盤調(diào)度算法等
- 第五章:輸入/輸出(I/O)管理
- 五:《Linux系統(tǒng)編程》附加專欄說明
- (1)第一部分:博客文章導(dǎo)航
- (2)第二部分:涉及的系統(tǒng)調(diào)用命令總結(jié)
- A:進(jìn)程部分
- B:基礎(chǔ)IO部分
- C:進(jìn)程間通信部分
- D:進(jìn)程信號(hào)部分
- E:多線程部分
- (3)第三部分:重要代碼
一:必讀
①:《計(jì)算機(jī)科學(xué)專業(yè)基礎(chǔ)綜合》(代碼408) 想必每位計(jì)算機(jī)考研人都有所了解,雖然可能所考院校是自命題,但總會(huì)涉及408中的一種或多種。408會(huì)涉及如下4門課,它們各有特點(diǎn)
- 《計(jì)算機(jī)組成原理》(占30%):涉及硬件等底層知識(shí)、部分知識(shí)晦澀難懂
- 《操作系統(tǒng)》(占23.3%):計(jì)算機(jī)中的“哲學(xué)”,內(nèi)容特別抽象,感覺“學(xué)了等于沒學(xué)”
- 《數(shù)據(jù)結(jié)構(gòu)》(占30%):最重要的一門課,邏輯性強(qiáng),較為抽象,常和算法有關(guān)
- 《計(jì)算機(jī)網(wǎng)絡(luò)》(占16.7%):關(guān)聯(lián)知識(shí)較多(例如通信),所以知識(shí)點(diǎn)“又臭又長(zhǎng)”
所以408難度確實(shí)不小,在180分鐘內(nèi)做完一套試卷猶如進(jìn)行了一場(chǎng)戰(zhàn)斗。而且最為關(guān)鍵的是考計(jì)算機(jī)一定會(huì)考數(shù)學(xué),數(shù)學(xué)的復(fù)習(xí)幾乎會(huì)占據(jù)你考研復(fù)習(xí)時(shí)間的一半(甚至更多),因?yàn)椤暗脭?shù)學(xué)者得天下”
②:對(duì)于408的復(fù)習(xí),市面上的授課機(jī)構(gòu)主要是王道和天勤,它們兩家真的都非常非常好,我都細(xì)心看過
- 王道:知識(shí)點(diǎn)涵蓋全面、講解仔細(xì)
- 天勤:講解角度獨(dú)特,動(dòng)畫制作精美,關(guān)鍵問題容易理解
而王道也把人家的課程全部上傳至了B站,所以專欄筆記主體會(huì)基于王道進(jìn)行,所以這里真的特別特別感謝王道
- 《王道-計(jì)算機(jī)組成原理》
- 《王道-操作系統(tǒng)》
- 《王道-數(shù)據(jù)結(jié)構(gòu)》
- 《王道-計(jì)算機(jī)網(wǎng)絡(luò)》
③:只有考研人才能懂考研人,所以我深知復(fù)習(xí)408的痛苦。面對(duì)海量的知識(shí)點(diǎn)你會(huì)感覺力不從心,尤其在前期,總是學(xué)了這一章忘了上一章,而且很多時(shí)候不同科目的知識(shí)經(jīng)常攪到一起。因此,我花費(fèi)了很長(zhǎng)時(shí)間寫了這些專欄筆記以幫助大家考研復(fù)習(xí),有以下特點(diǎn)
-
專欄筆記會(huì)按照視頻課和課本的邏輯進(jìn)行記錄,會(huì)把老師課上所講內(nèi)容和課本進(jìn)行結(jié)合,同時(shí)輔助一些自己在工作、學(xué)習(xí)中的想法
-
說個(gè)實(shí)話,視頻課中的內(nèi)容是有點(diǎn)“亂”的,因?yàn)槔蠋熢谥v課時(shí)是需要按照他的思路來進(jìn)行的,所以我的目的就是要讓其系統(tǒng)性(也即你會(huì)知道每一節(jié)究竟在干什么),便于同學(xué)查閱;同時(shí)有些知識(shí)點(diǎn)晦澀難懂,我會(huì)加入自己的理解便于大家學(xué)習(xí)
-
所有筆記純手打(課本+老師說的話+自己的理解),并不是視頻課截圖(當(dāng)然有些圖片肯定還是會(huì)采用截圖)
-
所有筆記會(huì)嚴(yán)格控制格式(主要就是公式和配色),力爭(zhēng)做到清晰、簡(jiǎn)潔、整齊
-
部分科目會(huì)配有題型講解,大家可以在我主頁處找到,這一部分還在更新
④:專欄會(huì)一直更新,主要是糾錯(cuò)和補(bǔ)充知識(shí)點(diǎn)
⑤:希望大家能夠意識(shí)到學(xué)習(xí)這四門課并不是簡(jiǎn)簡(jiǎn)單單為了考研,只要你真心想要走計(jì)算機(jī)這條道路,它就是你的基本功
- 就拿離你們最近的校招來說,其實(shí)70%的內(nèi)容都是這些
⑥:“道阻且長(zhǎng)、行則將至”,大家加油吧!
二:關(guān)于本專欄及學(xué)習(xí)建議
-
王道操作系統(tǒng)思維導(dǎo)圖鏈接:sxky
-
標(biāo)題是按照視頻課走的,可能有些部分存在差異,因?yàn)椴糠忠曨l課內(nèi)容太少,不值得單獨(dú)做一篇文章
-
所用教材為 《2023年操作系統(tǒng)考研復(fù)習(xí)指導(dǎo)》
-
筆記主要以王道視頻為主,少量會(huì)補(bǔ)充 《操作系統(tǒng)精髓與設(shè)計(jì)原理(第八版)》 中的內(nèi)容。建議大家有時(shí)間可以讀一讀,十分經(jīng)典
-
筆記是學(xué)好的必要條件,但不是充分條件
-
記筆記的目的不是單純的為了“記”,是為了以后復(fù)習(xí)時(shí)不需要太大的時(shí)間成本
-
學(xué)習(xí)一門課就像開發(fā)一個(gè)程序一樣,先搭框架,后解決細(xì)節(jié)問題。前期需要迅速建立一門學(xué)科的整體框架與邏輯,不會(huì)的可以直接跳,學(xué)完之后需要反復(fù)梳理
三:408所需C語言基礎(chǔ)
(1)C語言基礎(chǔ)知識(shí)點(diǎn)
第一章:C語言快速入門及注意事項(xiàng)
第二章:字符串函數(shù)和內(nèi)存函數(shù)
第三章:函數(shù)與遞歸
第四章:數(shù)組入門
第五章:操作符
第六章:指針入門
第七章:結(jié)構(gòu)體相關(guān)
第八章:簡(jiǎn)單調(diào)試
第九章:指針進(jìn)階
第十章:分支與循環(huán)
(2)C語言重點(diǎn)、難點(diǎn)、考點(diǎn)整理
第一章:數(shù)據(jù)類型、常量和變量
第二章:C語言文件
第三章:C語言內(nèi)存管理
第四章:C語言指針
第五章:C語言預(yù)處理
第六章:C語言中的重要符號(hào)
第七章:關(guān)鍵字精講
四:文章目錄導(dǎo)航
第一章:計(jì)算機(jī)系統(tǒng)概述、
第一節(jié):操作系統(tǒng)的基本概念
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第一節(jié)1、2:操作系統(tǒng)概念、概念和特征
第二節(jié):操作系統(tǒng)的發(fā)展歷程
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第二節(jié):操作系統(tǒng)的發(fā)展歷程
第三節(jié): 操作系統(tǒng)運(yùn)行環(huán)境
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第三節(jié)1:操作系統(tǒng)的運(yùn)行機(jī)制與體系結(jié)構(gòu)
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第三節(jié)2:中斷和異常
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第三節(jié)3:系統(tǒng)調(diào)用
第四節(jié):操作系統(tǒng)結(jié)構(gòu)
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第四節(jié):操作系統(tǒng)體系結(jié)構(gòu)
第五、六節(jié):操作系統(tǒng)引導(dǎo)和虛擬機(jī)
(王道408考研操作系統(tǒng))第一章計(jì)算機(jī)系統(tǒng)概述-第五節(jié):操作系統(tǒng)引導(dǎo)
第二章:進(jìn)程管理
第一節(jié):進(jìn)程與線程
((王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)1:進(jìn)程的概念、組成和特征
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)2:進(jìn)程狀態(tài)與轉(zhuǎn)換
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)3:進(jìn)程控制(配合Linux講解)
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)4:進(jìn)程通信(配合Linux)
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)5:線程的概念
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第一節(jié)6、7:線程的實(shí)現(xiàn)方式、多線程模型、線程的狀態(tài)與轉(zhuǎn)換、線程的組織與控制
第二節(jié):進(jìn)程調(diào)度、分類及其調(diào)度算法等
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第二節(jié)1:調(diào)度的基本概念和層次
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第二節(jié)2、3:進(jìn)程調(diào)度的時(shí)機(jī)、切換與過程、方式、調(diào)度器和閑逛進(jìn)程
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第二節(jié)4:調(diào)度算法評(píng)價(jià)指標(biāo)
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第二節(jié)5:調(diào)度算法詳解1(FCFS、SJF和HRRN)
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第二節(jié)6、7:調(diào)度算法詳解2(RR、HPF和MFQ)
第三節(jié):進(jìn)程同步和互斥、信號(hào)量及經(jīng)典進(jìn)程同步問題等
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)1:進(jìn)程同步與互斥的基本概念
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)2:實(shí)現(xiàn)進(jìn)程互斥的軟件方法
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)3:實(shí)現(xiàn)進(jìn)程互斥的硬件方法
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)4:信號(hào)量機(jī)制(整型、記錄型信號(hào)量和P、V操作)
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)5:用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥、同步和前驅(qū)關(guān)系
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)6:經(jīng)典同步問題之生產(chǎn)者與消費(fèi)者問題
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)7:經(jīng)典同步問題之多生產(chǎn)者與多消費(fèi)者問題
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)8:經(jīng)典同步問題之吸煙者問題
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)9:經(jīng)典同步問題之讀者寫者問題
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)10:經(jīng)典同步問題之哲學(xué)家進(jìn)餐問題
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第三節(jié)11:管程(Monitor)及條件變量
第四節(jié):死鎖和避免死鎖等
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)1:死鎖相關(guān)概念
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)2:死鎖處理策略之預(yù)防死鎖
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)2:死鎖處理策略之避免死鎖(銀行家算法)
(王道408考研操作系統(tǒng))第二章進(jìn)程管理-第四節(jié)3:死鎖處理策略之檢測(cè)和解除
第三章:內(nèi)存管理
第一節(jié):內(nèi)存基本知識(shí)、分配管理方式等
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)1:內(nèi)存基礎(chǔ)知識(shí)、程序編譯運(yùn)行原理
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)2:內(nèi)存管理的基本概念
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)3:覆蓋與交換
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)4:連續(xù)分配管理方式(單一連續(xù)、固定分區(qū)和動(dòng)態(tài)分區(qū)分配)
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)5:動(dòng)態(tài)分區(qū)分配算法(首次適應(yīng)、和鄰近適應(yīng))
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)6-1:非連續(xù)分配管理方式之基本分頁存儲(chǔ)管理
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)6-2:非連續(xù)分配管理方式之基本分頁存儲(chǔ)管理之基本地址變換機(jī)構(gòu)
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)6-3:非連續(xù)分配管理方式之基本分頁存儲(chǔ)管理之具有快表的地址變換機(jī)構(gòu)
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)6-4:非連續(xù)分配管理方式之基本分頁存儲(chǔ)管理之兩級(jí)頁表
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)7:非連續(xù)分配管理方式之基本分段管理方式
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第一節(jié)8:非連續(xù)分配管理方式之段頁式管理方式
第二節(jié):虛擬內(nèi)存、請(qǐng)求分頁及頁面置換算法等
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第二節(jié)1:虛擬內(nèi)存管理基本概念
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第二節(jié)2:請(qǐng)求分頁管理方式
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第二節(jié)3:頁面置換算法1
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第二節(jié)3:頁面置換算法2
(王道408考研操作系統(tǒng))第三章內(nèi)存管理-第二節(jié)4:頁面分配策略
第四章:文件管理
第一節(jié):文件基本概念、目錄、物理結(jié)構(gòu)、邏輯結(jié)構(gòu)、共享和安全等
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)1:文件管理初識(shí)
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)2:文件的邏輯結(jié)構(gòu)
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)3:文件目錄
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)4:文件物理結(jié)構(gòu)(文件分配方式)
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)5:文件存儲(chǔ)空間管理
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)6:文件基本操作
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)7:文件共享
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)8:文件保護(hù)
(王道408考研操作系統(tǒng))第四章文件管理-第一節(jié)9:文件系統(tǒng)的層次結(jié)構(gòu)
第二節(jié):磁盤結(jié)構(gòu)、磁盤調(diào)度算法等
(王道408考研操作系統(tǒng))第四章文件管理-第二節(jié)1:磁盤的結(jié)構(gòu)
(王道408考研操作系統(tǒng))第四章文件管理-第二節(jié)2:磁盤調(diào)度算法
(王道408考研操作系統(tǒng))第四章文件管理-第二節(jié)3:減少延遲時(shí)間的方法
(王道408考研操作系統(tǒng))第四章文件管理-第二節(jié)4:磁盤的管理
第五章:輸入/輸出(I/O)管理
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)1:I/O設(shè)備的概念和分類
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)2:I/O控制器
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)3:I/O控制方式
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)4:I/O軟件層次結(jié)構(gòu)
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)5:假脫機(jī)(SPOOLing)技術(shù)
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)6:設(shè)備的分配和回收
(王道408考研操作系統(tǒng))第五章輸入/輸出(I/O)管理-第一節(jié)7:緩沖區(qū)管理
五:《Linux系統(tǒng)編程》附加專欄說明
用“哲學(xué)”來比喻操作系統(tǒng)我覺得再合適不過了。操作系統(tǒng)就是這樣,你感覺你懂了其實(shí)你沒有懂,你沒有懂但是你又明白一點(diǎn)。所以想要落實(shí)唯一的一個(gè)方法就是實(shí)踐、實(shí)踐、實(shí)踐。我們所學(xué)的操作系統(tǒng)并沒有針對(duì)某個(gè)特定的操作系統(tǒng),這里我選擇的是Linux進(jìn)行演示,因?yàn)樗娴暮苤庇^
- 所選用Linux系統(tǒng)為Centos 8.0
- Linux中的常用命令可以查看這篇專欄《Linux命令行大全》
(1)第一部分:博客文章導(dǎo)航
Linux系統(tǒng)編程1:Linux中使用率最高的一些命令
Linux系統(tǒng)編程2:詳解Linux中的權(quán)限問題
Linux系統(tǒng)編程3:基礎(chǔ)篇之詳解Linux軟件包管理器yum
Linux系統(tǒng)編程4:入門篇之最強(qiáng)編輯器vim的使用攻略
Linux系統(tǒng)編程5:Linux系統(tǒng)編程5:入門篇之在Linux下觀察C/C++程序編譯過程 && gcc/g++使用詳解
Linux系統(tǒng)編程7:入門篇之Linux項(xiàng)目自動(dòng)化構(gòu)建工具-Make/Makefile的超強(qiáng)使用指南
Linux系統(tǒng)編程9:進(jìn)程入門之操作系統(tǒng)為什么這么重要以及它是如何實(shí)現(xiàn)管理的
Linux系統(tǒng)編程10:進(jìn)程入門之系統(tǒng)編程中最重要的概念之進(jìn)程&&進(jìn)程的相關(guān)操作&&使用fork創(chuàng)建進(jìn)程
Linux系統(tǒng)編程11:進(jìn)程入門之詳細(xì)闡述進(jìn)程的一些狀態(tài)&&區(qū)分僵尸狀態(tài)和孤兒狀態(tài)&&動(dòng)圖演示
Linux系統(tǒng)編程12:進(jìn)程入門之進(jìn)程的優(yōu)先級(jí)及PR和NI&&如何修改進(jìn)程優(yōu)先級(jí)
Linux系統(tǒng)編程13:進(jìn)程入門之Linux中的環(huán)境變量的概念及其相關(guān)命令(export;env等)&&main函數(shù)的參數(shù)
Linux系統(tǒng)編程14:進(jìn)程入門之Linux進(jìn)程中非常重要的概念之進(jìn)程地址空間-原來我們看到的地址全部是虛擬的
Linux系統(tǒng)編程15:進(jìn)程控制之如何創(chuàng)建進(jìn)程和寫時(shí)拷貝技術(shù)
Linux系統(tǒng)編程16:進(jìn)程控制之進(jìn)程終止以及終止進(jìn)程的三種情況
Linux系統(tǒng)編程17:進(jìn)程控制之進(jìn)程等待&&為什么進(jìn)程需要被等待&wait方法和waitpid方法&&阻塞和非阻塞等待
Linux系統(tǒng)編程18:超詳解進(jìn)程程序替換&exec函數(shù)的一些用法
Linux系統(tǒng)編程19:基礎(chǔ)IO之了解Linux中的標(biāo)準(zhǔn)輸入和輸出以及相關(guān)的系統(tǒng)調(diào)用接口(如write,read等)
Linux系統(tǒng)編程20:基礎(chǔ)IO之從內(nèi)核代碼深刻理解Linux是如何管理文件及文件描述符的本質(zhì)是什么
Linux系統(tǒng)編程21:基礎(chǔ)IO之全緩沖和行緩沖的區(qū)別及深刻理解緩沖區(qū)及其作用
Linux系統(tǒng)編程22:基礎(chǔ)IO之掌握重定向的本質(zhì)和使用dup2完成重定向
Linux系統(tǒng)編程23:基礎(chǔ)IO之了解硬盤物理和邏輯結(jié)構(gòu)及明白inode的本質(zhì)和掌握軟硬鏈接及其區(qū)別
Linux系統(tǒng)編程24:基礎(chǔ)IO之在Linux下深刻理解C語言中的動(dòng)靜態(tài)庫以及頭文件和庫的關(guān)系
Linux系統(tǒng)編程25:基礎(chǔ)IO之親自實(shí)現(xiàn)一個(gè)動(dòng)靜態(tài)庫
Linux系統(tǒng)編程26:進(jìn)程間通信之進(jìn)程間通信的基本概念
Linux系統(tǒng)編程27:進(jìn)程間通信之管道的基本概念和匿名管道與命名管道及管道特性
Linux系統(tǒng)編程28:進(jìn)程間通信之共享內(nèi)存和相關(guān)通信接口(ftok,shmget,shmctl,shmat,shmdt)
Linux系統(tǒng)編程29:進(jìn)程信號(hào)之什么是信號(hào)及signal函數(shù)
Linux系統(tǒng)編程30:進(jìn)程信號(hào)之產(chǎn)生信號(hào)的四種方式(Core Dump,kill,raise)
Linux系統(tǒng)編程31:進(jìn)程信號(hào)之什么是信號(hào)的阻塞及相關(guān)術(shù)語(遞達(dá),未決,pending位圖,handler位圖)
Linux系統(tǒng)編程32:進(jìn)程信號(hào)之詳解信號(hào)集操作函數(shù)(sigset_t ,sigpending,sigprocmask)
Linux系統(tǒng)編程33:進(jìn)程信號(hào)之詳解信號(hào)的捕捉過程,用戶態(tài)和內(nèi)核態(tài)及其切換,sigaction和signal
Linux系統(tǒng)編程34:進(jìn)程信號(hào)之可重入函數(shù),volatile關(guān)鍵字的作用和SIGHLD
Linux系統(tǒng)編程35:多線程之如何理解Linux中的線程以及輕量級(jí)進(jìn)程LWP
Linux系統(tǒng)編程36:多線程之線程控制之pthread線程庫(線程創(chuàng)建,終止,等待和分離)
Linux系統(tǒng)編程37:多線程之什么是臨界區(qū)和臨界資源以及如何使用mutex互斥鎖
Linux系統(tǒng)編程38:多線程之什么是線程同步以及條件變量函數(shù)
Linux系統(tǒng)編程39:多線程之基于阻塞隊(duì)列生產(chǎn)者與消費(fèi)者模型
Linux系統(tǒng)編程40:多線程之基于環(huán)形隊(duì)列的生產(chǎn)者與消費(fèi)者模型
Linux系統(tǒng)編程41:多線程之線程池的概念及實(shí)現(xiàn)
(2)第二部分:涉及的系統(tǒng)調(diào)用命令總結(jié)
A:進(jìn)程部分
B:基礎(chǔ)IO部分
C:進(jìn)程間通信部分
D:進(jìn)程信號(hào)部分
E:多線程部分
(3)第三部分:重要代碼
1:理解fork的作用
#include <stdio.h> #include <unistd.h>int main() {prinf("還沒有執(zhí)行fork函數(shù)的本進(jìn)程為:%d\n",getpid());pid_t=fork();//其返回值是pid類型的sleep(1);if(ret>0)//父進(jìn)程返回的是子進(jìn)程ID{while(1){printf("----------------------------------------------------------------\n");printf("我是父進(jìn)程,我的id是:%d,我的孩子id是%d\n",getpid(),ret);sleep(1);}}else if(ret==0)//子進(jìn)程fork返回值是0{while(1){printf("我是子進(jìn)程,我的id是%d,我的父親id是%d\n",getpid(),getppid());sleep(1);}}elseprintf("進(jìn)程創(chuàng)建失敗\n");sleep(1);return 0; }2:理解僵尸狀態(tài)
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() {// printf("還沒執(zhí)行fork函數(shù)時(shí)的本進(jìn)程為:%d\n",getpid());pid_t ret=fork();//其返回值類型是pid_t型的sleep(1);if(ret>0)//父進(jìn)程返回的是子進(jìn)程ID{while(1){printf("----------------------------------------------------\n");printf("父進(jìn)程一直在運(yùn)行\(zhòng)n");sleep(1);}}else if(ret==0)//子進(jìn)程fork返回是0{int count=0;while(count<=10){printf("子進(jìn)程已經(jīng)運(yùn)行了%d秒\n",count+=1);sleep(1);}exit(0);//讓子進(jìn)程運(yùn)行10s}elseprintf("進(jìn)程創(chuàng)建失敗\n");sleep(1);return 0; }3:理解進(jìn)程等待及waitpid第二個(gè)參數(shù)
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() {pid_t ret=fork();//其返回值類型是pid_t型的sleep(1);if(ret>0)//父進(jìn)程返回的是子進(jìn)程ID{printf("父進(jìn)程正在等待子進(jìn)程死亡\n");int st=0;pid_t rec=waitpid(ret,&st,0);//阻塞if(rec==ret)//如果返回值是子進(jìn)程id,等待成功{printf("等待成功\n");if(WIFEXITED(st))//如果為真,正常退出{printf("正常退出且退出碼為%d\n",WEXITSTATUS(st));}else{printf("異常退出,信號(hào)值為%d\n",st&0x7f);}}else{printf("等待失敗\n");exit(0);}}else if(ret==0)//子進(jìn)程fork返回是0{int count=1;while(count<=10){printf("子進(jìn)程[%d]已經(jīng)運(yùn)行了%d秒\n",getpid(),count);count++;sleep(1);}exit(3);}elseprintf("進(jìn)程創(chuàng)建失敗\n");sleep(1);return 0; }4:理解進(jìn)程程序替換
//myprocess.c #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() {int count=0;while(count<5){printf("Hello World\n");sleep(1);count++;}printf("%s\n",getenv("myenv"));return 0; }//test.c #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() {char* env[]={"myenv=you_can_see_this_env",NULL};printf("替換函數(shù)前\n");execle("./myprocess.exe","myprocess.exe",NULL,env);printf("替換函數(shù)后\n");}5:理解文件描述符
#include <fcntl.h> #include <unistd.h> #include <stdio.h>int main() {int fd1=open("log1.txt",O_WRONLY);//打開錯(cuò)誤int fd2=open("log2.txt",O_WRONLY|O_CREAT);//打開成功int fd3=open("log3.txt",O_WRONLY|O_CREAT);//打開成功int fd4=open("log4.txt",O_WRONLY|O_CREAT);//打開成功int fd5=open("log5.txt",O_WRONLY);//打開錯(cuò)誤printf("%d\n",fd1);printf("%d\n",fd2);printf("%d\n",fd3);printf("%d\n",fd4);printf("%d\n",fd5); }6:理解匿名管道
#include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <string.h>int main() {int pipefd[2]={0};pipe(pipefd);pid_t id=fork();if(id==0)//child{close(pipefd[0]);const char* msg="This is the data that the child process wrote";while(1){write(pipefd[1],msg,strlen(msg));sleep(1);} }else//father{close(pipefd[1]);char buffer[64];while(1){ssize_t ret=read(pipefd[0],buffer,sizeof(buffer)-1);if(ret>0)//判斷是否讀到{buffer[ret]='\0';//加上結(jié)束標(biāo)志,便于輸出printf("The father process got the information:%s\n",buffer);}}}return 0; }7:理解命名管道
server.c
client.c
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main() {int fd=open("fifo",O_WRONLY);//直接打開管道文件if(fd>=0){ char buffer[64];//從鍵盤讀入數(shù)據(jù)到這個(gè)緩沖區(qū)while(1){ printf("客戶端-請(qǐng)輸入消息:");ssize_t ret=read(0,buffer,sizeof(buffer)-1);//從鍵盤讀入數(shù)據(jù)if(ret>0){ buffer[ret]='\0';write(fd,buffer,ret);//讀入ret個(gè)數(shù)據(jù)就向管道中寫入ret個(gè)數(shù)據(jù)}}} }8:理解共享內(nèi)存
server.c
client.c
#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <unistd.h> #include <sys/shm.h>#define PATHNAME "tmp" #define PROJ_ID 88 #define SIZE 4096int main() {key_t k=ftok(PATHNAME,PROJ_ID);printf("key值:%#X\n",k);int shmid=shmget(k,SIZE,0);//服務(wù)端已經(jīng)申請(qǐng)了,寫成0直接獲取if(shmid<0){perror("creat failed");return 1;}char* shmaddr=shmat(shmid,NULL,0);//掛接,注意強(qiáng)轉(zhuǎn)int i=0;while(i<26){shmaddr[i]=97+i;每隔5s依次輸入a,b,c...........................i++;sleep(5);}shmdt(shmaddr);//脫離return 0; }9:理解signal函數(shù)
#include <stdio.h> #include <unistd.h> #include <signal.h>void handler(int sig) {printf("catch a sin : %d\n",sig);}int main() {signal(2,handler);//一旦捕捉到2號(hào)信號(hào),將會(huì)執(zhí)行handler函數(shù)內(nèi)的操作while(1){printf("I Am runnng now...\n");sleep(1);}return 0;}10:理解信號(hào)集操作函數(shù)
#include <stdio.h> #include <unistd.h> #include <signal.h>void handler(int sig) {printf("獲得信號(hào):%d\n",sig);}void print_pending(sigset_t* pending) {int i=1;for(i=1;i<=31;i++){if(sigismember(pending,i)){printf("1");//只要i信號(hào)存在,就打印1}else {printf("0");//不存在這個(gè)信號(hào)就打印0}}printf("\n"); }int main() {signal(2,handler);//捕捉sigset_t pending;//定義信號(hào)集變量sigset_t block,oblock;//定義阻塞信號(hào)集變量sigemptyset(&block);sigemptyset(&oblock);//初始化阻塞信號(hào)集sigaddset(&block,2);//將2號(hào)信號(hào)添加的信號(hào)集sigprocmask(SIG_SETMASK,&block,&oblock);//設(shè)置屏蔽關(guān)鍵字int cout=0; while(1){sigemptyset(&pending);//初始化信號(hào)集sigpending(&pending);//讀取未決信號(hào)集,傳入pendingprint_pending(&pending);//定義一個(gè)函數(shù),打印未決信號(hào)集sleep(1);cout++;if(cout==10)//10s后解除阻塞{printf("解除阻塞\n");sigprocmask(SIG_SETMASK,&oblock,NULL);}} }11:理解線程的創(chuàng)建,等待等
#include <stdio.h> #include <unistd.h> #include <pthread.h>void* new_thread(void* arg) {while(1){printf("我是新線程,我的線程id是%p\n",pthread_self());sleep(5);int a=1/0; //浮點(diǎn)異常} }int main() {pthread_t tid;//線程的IDpthread_create(&tid,NULL,new_thread,(void*)"我是新線程");while(1){ printf("-----------------------------------------------------------\n");printf("我是主線程,我的線程id是:%p,新線程的id是%p\n",pthread_self(),tid);void* ret;//獲取退出碼pthread_join(tid,&ret);printf("主線程阻塞等待新線程,退出碼碼為%d\n",(int)ret);break;}}12:理解互斥鎖
#include <stdio.h> #include <unistd.h> #include <pthread.h>int tickets=1000;pthread_mutex_t lock;//申請(qǐng)一把鎖void scarmble_tickets(void* arg) {long int ID=(long int)arg;//線程IDwhile(1)//多個(gè)線程循環(huán)搶票{pthread_mutex_lock(&lock);//那個(gè)線程先到,誰就先鎖定資源if(tickets>0){usleep(1000);printf("線程%ld號(hào)搶到了一張票,現(xiàn)在還有%d張票\n",ID,tickets);tickets--;pthread_mutex_unlock(&lock);//搶到票就解放資源}else {pthread_mutex_unlock(&lock);//如果沒有搶到也要釋放資源,否則線程直接退出,其他線程無法加鎖break;}}}int main() {int i=0;pthread_t tid[4];//4個(gè)線程IDpthread_mutex_init(&lock,NULL);//初始化鎖for(i=0;i<4;i++){pthread_create(tid+1,NULL,scarmble_tickets,(void*)i);//創(chuàng)建4個(gè)線程}for(i=0;i<4;i++){pthread_join(tid+1,NULL);//線程等待}pthread_mutex_destroy(&lock);//銷毀鎖資源return 0; }13:理解條件變量
#include <stdio.h> #include <unistd.h> #include <pthread.h> #include <stdlib.h>pthread_mutex_t lock;//鎖 pthread_cond_t cond;//條件void* thread_a(void* arg)//其他線程被喚醒 {const char* name=(char*)arg;//線程名字while(1){pthread_cond_wait(&cond,&lock);//一直在等待條件成熟printf("%s被喚醒了\n=================================================\n",name);}}void* thread_1(void* arg)//讓線程1喚醒其他線程 {const char* name=(char*)arg;while(1){sleep(rand()%5+1);//隨機(jī)1-5秒喚醒pthread_cond_signal(&cond);printf("%s現(xiàn)在正在發(fā)送信號(hào)\n",name);}}int main() {pthread_mutex_init(&lock,NULL);//初始化鎖pthread_cond_init(&cond,NULL);//初始化條件pthread_t t1,t2,t3,t4,t5;//創(chuàng)建兩個(gè)線程pthread_create(&t1,NULL,thread_1,(void*)"線程1"); pthread_create(&t2,NULL,thread_a,(void*)"線程2"); pthread_create(&t3,NULL,thread_a,(void*)"線程3"); pthread_create(&t4,NULL,thread_a,(void*)"線程4"); pthread_create(&t5,NULL,thread_a,(void*)"線程5"); pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_join(t3,NULL);pthread_join(t4,NULL);pthread_join(t5,NULL);pthread_mutex_destroy(&lock);pthread_cond_destroy(&cond);//銷毀條件}總結(jié)
以上是生活随笔為你收集整理的【专栏必读】王道考研408操作系统+Linux系统编程万字笔记、题目题型总结、注意事项、目录导航和思维导图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众号开发 重要 access_to
- 下一篇: 第2章 一切都是对象