只要你認真看完一萬字??Linux作業系統基礎知識??分分鐘鐘都吊打面試官《??記得收藏??》
- 目錄
- 🏳??🌈開講之前我們先慶祝我國贏得38金牌,🏳??🌈中國加油!!🏳??🌈
-
😊開講啦!!!! - 😀1、前言
- 😃2、作業系統概述
- 🍇2.1、作業系統概念
- 🍈2.2、作業系統的基本功能
- 🍉2.3、作業系統的相關概念
- 😄3、行程管理之行程物體
- 🍇3.1、為什么需要行程
- 🍈3.2、行程的物體
- 😆4、行程管理之五狀態模型
- 🍇4.1、就緒狀態
- 🍈4.2、執行狀態
- 🍉4.2、執行狀態
- 🍊4.3、阻塞狀態
- 🍋4.4、創建狀態
- 🍌4.5、終止狀態
- 😅5、行程管理之行程同步
- 🍇5.1、行程間同步的原則
- 🍈5.2、執行緒同步
- 🤣6、Linux的行程管理
- 🍇6.1、Linux行程相關概念
- 🍈6.2、操作Linux行程的相關命令
- 😂7、作業管理之行程調度
- 🍇7.1、行程調度的演算法
- 🙂8、作業管理之死鎖
- 🍇8.1、死鎖的產生
- 🍈8.2、死鎖的處理
- 🙃9、存盤管理之記憶體分配與回收
- 🍇9.1、記憶體分配的程序
- 🍈9.2、記憶體回收的程序
- 😉10、存存盤管理之段頁式存盤管理
- 🍇10.1、頁式存盤管理
- 🍈10.2、段式存盤管理
- 🍉10.3、段頁式存盤管理
- 😊11、存盤管理之虛擬記憶體
- 😇12、Linux的存盤管理
- 🍇12.1、Buddy記憶體管理演算法
- 🥰13、Linux交換空間
- 😍14、作業系統的檔案管理
- 🍇14.1、檔案的邏輯結構
- 🤩15、輔存的存盤空間分配
- 😘16、Linux檔案基本操作
- 🍇16.1、Linux目錄
- 🍈16.2、Linux檔案常用操作
- 🍉16.3、Linux檔案型別
- 😗17、Linux檔案型別
- 🍇17.1、檔案系統概覽
- 🍈17.2、Ext檔案系統
- ??18、作業系統的設備管理
- 🍇18.1、廣義的IO設備
- 🍈18.2、IO設備緩沖區
- 🍉18.3、SPOOLing技術
- 😚19、Linux文本編輯器及軟體安裝
- 😙20、Ubuntu軟體倉庫
- 😋21、終端包管理工具
- 😛22、閱讀手冊
- 😜23、其他查閱手冊的方法
- 關注蘇州程式大白,持續更新技術分享,謝謝大家支持
目錄
🏳??🌈開講之前我們先慶祝我國贏得38金牌,🏳??🌈中國加油!!🏳??🌈


| 😊開講啦!!!! |

😀1、前言
作業系統演進如下:
1、無作業系統
人工操作,用戶獨占,CPU等待人工操作,資源利用率很低,
2、批處理系統
無需等待人工操作,批量輸入任務,資源利用率提升,多道程式設計,
3、分時系統
人-機互動,多用戶共享,及時除錯程式,資源利用率提升,
多道程式設計設計:
早起批處理系統只能一次處理一個任務,多道程式設計使得批處理系統可以一次處理多個任務,對多道程式的管理是作業系統的重要功能,
-
多道程式設計是指在計算機記憶體中同時存放多個程式,
-
多道程式在計算機的管理程式之下相互穿插運行,
作業系統對多道程式的管理分為五大功能:
-
行程管理
-
存盤管理
-
作業管理
-
檔案管理
-
設備管理
😃2、作業系統概述
🍇2.1、作業系統概念
作業系統是管理計算機硬體和軟體資源的計算機程式;管理配置記憶體、決定資源供需順序、控制輸入輸出設備等;作業系統提供
讓用戶和系統互動的操作界面,該定義不局限于計算機,
🍈2.2、作業系統的基本功能
處理器資源、存盤器資源、IO設備資源、檔案資源,作業系統統一管理這這些計算機資源,
用戶無需面向硬體介面編程,
IO設備管理軟體,提供讀寫介面,
檔案管理軟體,提供操作檔案介面,
實作了對計算機資源的抽象,
提供了用戶于計算機之間的介面,
影像視窗形式、命令形式、系統呼叫形式,
🍉2.3、作業系統的相關概念
并發性
并行是指兩個或多個事件可以在同一個時刻發生,并發是指兩個或多個事件可以在同一個時刻間隔發生,
對于單處理器來說,有兩個程式交替運行,兩個程式并發關系;對雙處理器來說,兩個程式可同一時刻運行,是并行關系,但是對于單個核心,依然是并發關系,
共享性
表現為作業系統中的資源可供多個并發的程式共同使用,這種共同使用的形式稱之為資源共享,
資源共享根據屬性可以分為兩種方式:互斥共享形式、同時訪問形式,
互斥共享: 當資源被程式或行程A占用時,只有A使用完之后,其他才可以使用(如列印機);
同時訪問: 某種資源在一段時間內并發地被多個程式訪問,
虛擬性
虛擬性表現為把一個物理物體轉變為若干個邏輯物體,虛擬的技術主要有時分復用技術和空分復用技術,
時分復用技術: 資源在時間上進行復用,不同程式并發使用,多道程式分時使用計算機的硬體資源,提高資源的利用率,其中虛擬處理器技術是借用多道程式設計為每個程式建立行程,多個程式分時復用處理器;虛擬設備技術是物理設備虛擬為多個邏輯設備,每個程式占用一個邏輯設備,多個程式并發訪問,
空分復用技術: 用來實作虛擬磁盤、虛擬記憶體等,提高資源的利用率,提升編程效率,
異步性
表現為多道程式環境下,允許多個行程并發執行;行程在使用資源時可能需要等待或放棄;行程的執行并不是一氣呵成的,而是以走走停停的形式推進,
😄3、行程管理之行程物體
🍇3.1、為什么需要行程
-
行程是系統進行資源分配和調度的基本單位,
-
行程作為程式獨立運行的載體保障程式正常執行,
-
行程的存在使得作業系統的資源利用率大幅提升,
🍈3.2、行程的物體
識別符號,唯一標記一個行程,用于區別其他行程,
狀態,標記行程的行程狀態,如:運行態,
程式計數器,程式即將被執行的下一條指令的地址,
記憶體指標,程式代碼、行程資料相關指標,
背景關系資料,行程執行時處理器存盤的資料,
IO狀態資訊,被行程IO操作所占用的檔案串列,
記賬資訊,使用處理器時間、時鐘數總和等,
行程控制塊(PCB):
用于描述和控制行程運行的通用資料結構,記錄行程當前狀態和控制行程運行的全部資訊,是使得行程能夠獨立運行的基本單位,
PCB是作業系統進行調度行程會被讀取的資訊,PCB是常駐記憶體的,存放在系統專門開辟的PCB區域內,
行程(Process)與執行緒(Thread):
一個行程可以有多個執行緒,執行緒是作業系統進行運行調度的最小單位,包含在行程之中,是行程中實際運行作業的單位,一個行程可以并發多個執行緒,每個執行緒執行不同的任務,
| 行程 | 執行緒 | |
|---|---|---|
| 資源 | 資源分配的基本單位 | 不擁有資源 |
| 調度 | 獨立調度的基本單位 | 獨立調度的最小單位 |
| 系統開銷 | 行程系統開銷大 | 執行緒系統開銷小 |
| 通信 | 行程IPC | 讀寫同一行程資料通信 |
😆4、行程管理之五狀態模型
- 就緒
- 阻塞
- 執行
- 創建
- 終止
🍇4.1、就緒狀態
-
當行程被分配到除CPU以外所有必要的資源后,只要再獲得CPU的使用權,就可以立即運行,
-
其他資源都準備好,只差CPU資源的狀態為就緒狀態,
-
在一個系統中多個處于就緒狀態的行程通常排成一個佇列,
🍈4.2、執行狀態
-
行程獲得CPU,其程式正在執行稱為執行狀態,
-
在單處理機中,在某個時刻只能有一個行程是處于執行狀態,
🍉4.2、執行狀態
-
行程獲得CPU,其程式正在執行稱為執行狀態,
-
在單處理機中,在某個時刻只能有一個行程是處于執行狀態,
🍊4.3、阻塞狀態
- 行程因某種原因如:其他設備未就緒而無法繼續執行,從而放棄CPU的狀態稱為阻塞狀態,
🍋4.4、創建狀態
- 創建行程時擁有PCB但其他資源尚未就緒的狀態稱為創建狀態,
作業系統提供fork函式介面創建行程
🍌4.5、終止狀態
- 行程結束由系統清理或者歸還PCB的狀態稱為終止狀態,

😅5、行程管理之行程同步
需要同步的原因:實作行程彼此之間的同步,對競爭資源在多行程間進行使用次序的協調,使得并發執行的多個行程之間可以有效使用資源和相互合作,
🍇5.1、行程間同步的原則
臨界資源: 臨界資源指的是一些雖作為共享資源卻又無法同時被多個執行緒共同訪問的共享資源,當有行程在使用臨界資源時,其他行程必須依據作業系統額同步機制等待占用行程釋放該共享資源才可重新競爭使用資源,
為了對臨界資源使用進行約束,有四個使用原則:
-
空閑讓進:資源無占用,允許使用
-
忙則等待:資源有占用,請求(其他)行程等待
-
有限等待:保證(其他行程)有限等待時間能夠使用資源
-
讓權等待:等待時,行程需要讓出CPU(即行程由運行狀態進入阻塞狀態)
同步方法:
訊息佇列 共享存盤 信號量(詳見下文)
🍈5.2、執行緒同步
行程內多執行緒也需要同步
執行緒同步的方法:
互斥量 讀寫鎖 自旋鎖 條件變數(詳見下文)
🤣6、Linux的行程管理
🍇6.1、Linux行程相關概念
行程的型別:
前臺行程 后臺行程 守護行程,
**前臺行程:**具有終端,可以和用戶互動的行程,
**后臺行程:**與前臺行程相對,沒有占用終端的就是后臺行程;后臺程式基本上不和用戶互動,優先級比前臺行程低,不影響前臺行程,將需要執行的命令以“&”符號結束,
**守護行程:**守護(daemon)行程是特殊的后臺行程;很多守護行程在系統引導的時候啟動,一直運行知道系統關閉,crond hhtpd sshd mysqld等,
行程名字以‘d’結尾的一般都是守護行程,
行程的標記
行程ID是行程的唯一標識,每個行程擁有不同的ID,
行程ID表現為一個非負整數,最大值由作業系統限定,
top命令查看系統行程,
ID為0的行程為idle行程,是系統創建的第一個行程,
ID為1的行程是init行程,是0號行程的子行程,完成系統初始化,
Init行程是所有用戶行程的祖先行程,
行程的狀態標記
| 狀態符號 | 狀態說明 |
|---|---|
| R | (TASK_RUNNING),行程正處于運行狀態 |
| S | (TASK_INTERRUPTIBLE),行程正處于睡眠狀態 |
| D | (TASK_UNINTERRUPTIBLE),行程正處于IO等待的睡眠狀態 |
| T | (TASK_STOPPED),行程正處于暫停狀態 |
| Z | (TASK_DEAD or EXIT_ZOMBIE),行程正處于退出狀態,或僵尸行程 |
man ps命令顯示行程相關的命令說明
后臺運行一個python程式,列印該行程狀態 S狀態,處于睡眠狀態

🍈6.2、操作Linux行程的相關命令
ps命令:
ps列出當前的行程
ps aux 列印行程詳細資訊
ps -u root 查看root用戶行程
ps -aux | grep 'pyhton3'查看python3行程,
ps -ef --forest可列印行程父子狀態,
ps -aux --sort=pcpu按cpu頻率查看行程 pmem 按記憶體排序,
-
ps命令產用于顯示當前行程的狀態,
-
ps命令常配合aux引數或ef引數和grep命令檢索特定行程,
top命令:
1、 2500毫秒重繪一次TOP內容,總共5次,輸出內容存放到performace.txt檔案中
top -b -d 2.5 -n 5 > performace.txt
注:要將內容輸出到檔案中,必須使用-b,表示批處理選項
2、 TOP命令如何快速按%CPU、%MEM、TIME+列排序
a) %CPU:使用大寫字母按鍵:P
b) %MEM:使用大寫字母按鍵:M
c) T IME+使用大寫字母按鍵: T
注:TOP默認排序為倒序,如果確實需要升序排序,可以使用大寫字母按鍵:R
3、TOP命令中顯示其它列值、將兩列互換等
a). 選擇顯示列或隱藏列:使用小寫字母按鍵:f
c). 交換列顯示順序:使用小寫字母按鍵: o
b). 選擇需要排序的列:使用大寫字母按鍵:F
kill命令:
數字表示信號的序號,字串表示信號名稱,傳送信號時可以使用信號序號也可以使用信號名稱,
◆傳送信號時使用kill命令,語法如下:
kill -信號序號 PID,如:kill -9 1234
kill -信號名稱 PID,如:kill -SIGKILL 1234 或者 kill -KILL 1234
PID是指行程號,這樣該行程會收到對應的信號,如果要對信號進行特殊的處理可以自定義,否則會按照默認的,
◆常用的信號
| 信號名稱 | 信號序號 | 說明 |
|---|---|---|
| INT | 2 | 按Ctrl-C鍵產生該信號,中斷程式 |
| TERM | 15 | kill命令默認傳送該信號(即kill PID),終止程式 |
| KILL | 9 | 強制洗掉行程,一般kill PID無效時,使用kill -9 PID強制結束行程 |
| TSTP | 20 | 按Ctrl-C鍵產生該信號,在終端中暫停該行程, |
😂7、作業管理之行程調度
行程調度是指計算機通過決策哪個就緒行程可以獲得CPU使用權,
-
保留舊行程的運行資訊,請出舊行程(收拾包袱)
-
選擇新行程,準備運行環境并分配CPU(新進駐)
行程調度的三種機制 :
1、就緒佇列的排隊機制
將就緒行程按照一定的方式排成佇列,以便調度程式可以最快找到就緒行程,
2、選擇運行行程的委派機制
調度程式以一定的策略選擇就緒行程,將CPU資源分配給它,
3、新老行程的背景關系切換機制
保存當前行程的背景關系資訊,裝入被委派執行行程的運行背景關系,
如果行程調度時候,老行程還沒執行完,有兩種調度方式:
1、非搶占式的調度搶
處理器一旦分配給某個行程,就讓該行程一直使用下去,調度程式不以任何原因搶占正在被使用的處理器,直到行程完成作業或因為IO阻塞才會讓出處理器,
2、搶占式的調
允許調度程式以一定的策略暫停當前運行的行程,保存好行程的背景關系資訊,分配處理器給新行程,
| 搶占式調度 | 非搶占式調度 | |
|---|---|---|
| 系統開銷 | 頻繁切換、開銷大 | 切換次數少、開銷小 |
| 公平性 | 相對公平 | 不公平 |
| 應用 | 通用系統 | 專用系統 |
🍇7.1、行程調度的演算法
先來先服務調度演算法
優先取出佇列前面的行程進行調度,
短行程優先調度演算法
調度程式優先選擇就緒佇列中估計運行時間最短的行程,短行程優先調度演算法不利于長作業行程的執行,
高優先權先調度演算法
行程附帶優先權,調度程式優先選擇權重高的行程,高優先權優先調度演算法使得緊迫的任務可以優先處理,
時間片輪轉調度演算法
按先來先服務的原則排
列就緒行程,每次從佇列頭部去除待執行行程,分配一個時間片執行,是相對公平的調度演算法,但不能保證及時回應用戶,
🙂8、作業管理之死鎖
**死鎖:**死鎖是指兩個或兩個以上的執行緒在執行程序中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去,此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的行程稱為死鎖行程,
🍇8.1、死鎖的產生
1、競爭資源:共享資源數量不滿足各個行程的需求,各個行程之間發生資源行程導致死鎖,
2、呼叫順序不當,
死鎖產生的四個必要條件:
1、互斥條件
行程對資源的使用時排他性的使用,某資源只能由一個行程使用,其他行程需要使用只能等待,
2、請求保持條件
行程至少保持一個資源,又提出新的資源請求,新資源被占用,被阻塞的行程不釋放自己保持的資源,
3、不可剝奪條件
行程獲得的資源在未完成使用前不能被剝奪,獲得的資源只能由行程自身釋放,
4、環路等待條件
發生死鎖時,必然存在行程-資源環形鏈,
🍈8.2、死鎖的處理
預防死鎖的方法
破壞四個必要條件之一
1、摒棄請求保持條件
系統規定行程運行之前,一次性申請所有需要的資源,行程在運行期間不會提出資源請求,從而摒棄請求保持條件,
2、摒棄不可剝奪條件
當一個行程請求新的資源得不到滿足時,必須釋放占有的資源,行程運行時占有的資源可以被釋放,意味著可以被剝奪,
3、摒棄環路等待條件
可用資源線性排序,申請必須按照需要遞增申請,線性申請不再形成環路,從而摒棄了環路等待條件,
銀行家演算法
策略原理:客戶申請的貸款是有限的,每次申請需要申請最大資金量,銀行家在能夠滿足貸款時,都應該給用戶貸款,客戶在使用貸款后,能夠及時歸還貸款,

🙃9、存盤管理之記憶體分配與回收
早期計算機編程并不需要過多的存盤管理,隨著計算機和程式越來越復雜,存盤管理成為必要,
存盤管理的作用:
-
確保計算機有足夠的記憶體 處理資料,
-
確保程式可以從可用記憶體中獲取一部分記憶體使用,
-
確保程式可以歸還使用后的記憶體以供其他程式使用,
🍇9.1、記憶體分配的程序
單一連續分配是最簡單的記憶體分配方式,只能在單用戶、單行程的作業系統中使用,
固定磁區分配:支持多道程式的最簡單存盤分配方式,記憶體空間被劃分為若干固定大小的區域,每個磁區只提供給一個程式使用,互不干擾,
**動態磁區分配:**根據行程實際需要,動態分配記憶體空間,涉及相關資料結構、分配演算法,
? 動態磁區空閑表資料結構:將記憶體分為若干個磁區,用一張表來表示磁區使用情況:

0表示沒有被占用,1表示被占用,
? 動態磁區空閑鏈資料結構: 通過鏈把未被使用的磁區以節點的形式連接起來,同時相鄰的磁區節點可以進行合并,節點需記錄可存盤容量,

動態磁區分配演算法:
首次適應演算法(FF演算法):分配記憶體時從開始順序查找適合記憶體區,若沒有合適的空閑區,則該次分配失敗,每次從頭部開始,使得頭部空間不斷被劃分,
最佳適應演算法(BF演算法):最佳適應演算法要求空閑鏈表按照容量大小排序,遍歷空閑區鏈表找到最佳合適空閑區,

快速適應演算法(QF演算法):快速適應演算法要求有多個空閑區鏈表,每個空閑區鏈表存盤一種容量的空閑區,

🍈9.2、記憶體回收的程序
| 情況1 | 情況2 | 情況3 | 情況4 | |
|---|---|---|---|---|
| … | … | … | … | |
| 空閑區1 | 回收區 | 空閑區1 | … | |
| 回收區 | 空閑區1 | 回收區 | 回收區 | |
| … | … | 空閑區2 | … | |
| … | … | … | … | |
| 解決方案 | 不需要新建空閑鏈表節點,只需要把空閑區1的容量增大為空閑區即可 | 將回收區與空閑區合并,新的空閑區使用回收區的地址 | 將空閑區1、空閑區2和回收區合并,新的空閑區使用空閑區1的地址 | 為回收區創建新的空閑節點,插入到相應的空閑區鏈表中去 |
😉10、存存盤管理之段頁式存盤管理
🍇10.1、頁式存盤管理
頁面和字塊都是大小一樣的一塊記憶體,字塊是相對物理設備的定義,頁面則是相對邏輯空間的定義,
概念: 將行程邏輯空間等分成若干大小的頁面,相應的把物理記憶體空間分成與頁面大小的物理塊,以頁面為單位把行程空間裝進物理記憶體中分散的物理塊,

頁面大小應該適用,過大難以分配,過小記憶體碎片過多,頁面大小通常是512B~8K
頁表:記錄行程邏輯空間與物理空間的映射
在現代計算機系統中,可以支持非常大的邏輯地址空間(232~264),這樣,頁表就變得非常大,要占用非常大的記憶體空間,如,具有32位邏輯地址空間的分頁系統,規定頁面大小為4KB,則在每個行程中的頁表項可達1M(220)個,如果每個頁表項占用1Byte,故每個行程僅僅頁表就要占用1MB的記憶體空間, 32位系統行程的尋址空間是4G,4G/4KB=220,
-
將行程邏輯空間等分成若干大小的頁面,
-
相應的把物理記憶體空間分成與頁面大小的物理塊,
-
以頁面為單位把行程空間裝進物理記憶體中分散的物理塊,
但是如果有一段連續的邏輯分布在多個頁面中,將大大降低執行效率,
🍈10.2、段式存盤管理
將行程邏輯空間劃分成若干段(非等分),段的長度由連續邏輯的長度決定,主函式MAIN、子程式段X、子函式Y等,

段表相比頁表多了段長,用來記錄邏輯長度,
對比:
段氏存盤和頁式存盤都離散地管理了行程的邏輯空間
-
頁是物理單位,段是邏輯單位,
-
分頁是為了合理利用空間,分段是滿足用戶要求,
-
頁大小由硬體固定,段長度可動態變化,
-
頁表資訊是一維的,段表資訊是二維的,
🍉10.3、段頁式存盤管理
分頁可以有效提高記憶體利用率(雖然說存在頁內碎片),分段可以更好滿足用戶需求,兩者結合,形成段頁式存盤管理,
先將邏輯空間按段式管理分成若干段,再把段內空間按頁式管理等分成若干頁,

😊11、存盤管理之虛擬記憶體
-
有些行程實際需要的記憶體很大,超過物理記憶體的容量,
-
多道程式設計,使得每個行程可用物理記憶體更加稀缺,
-
不可能無限增加物理記憶體,物理記憶體總有不夠用的時候,
虛擬記憶體是作業系統記憶體管理的關鍵技術,使得多道程式運行和大程式運行成為現實,把程式使用記憶體劃分,將不封暫時不使用的記憶體放置在輔存,
程式的區域性原理指的是CPU訪問存盤器時,無論是存取指令還是存取資料,所訪問的存盤單元都趨于聚集在一個較小的連續區域中,
程式運行時,無需全部裝入記憶體,裝載部分即可,如果訪問頁不在記憶體,則發出缺頁中斷,發起頁面置換、從用戶層面看,程式擁有很大的空間,即是虛擬記憶體,
虛擬記憶體實際是對物理記憶體的補充,速度接近于記憶體,成本接近于輔存,
虛擬記憶體的置換演算法:先進先出演算法(FIFO)、最不經常使用演算法(LFU)、最近最少使用演算法(LRU),主存和輔存的替換,
在計算機組成原理中有提到這些演算法,應用于高速快取與主存的替換,在這里將著重對比兩種替換而不是演算法,
-
替換策略發生在Cache-主存層次,主存-輔存層次,
-
Cache-主存層次的替換策略主要是為了
解決速度問題, -
主存-輔存層次主要是為了
解決容量問題,
😇12、Linux的存盤管理
🍇12.1、Buddy記憶體管理演算法
Buddy演算法是經典的記憶體管理演算法,演算法基于計算機處理二進制的優勢具有極高的效率,演算法主要是為了解決記憶體外碎片的問題,實際上是將記憶體外碎片問題轉移為了記憶體內碎片的問題,
頁內碎片是已經被分配出去(能明確指出屬于哪個行程)的記憶體空間大于請求所需的記憶體空間,不能被利用的記憶體空間就是內部碎片,
頁外碎片是指還沒有分配出去(不屬于任何行程),但是由于太小而無法分配給申請內幕才能空間的新行程的記憶體空間塊,
該演算法努力讓記憶體分配與相鄰內幕才能合并能快速進行,記憶體分配原則:
- 向上取整為2的冪大小 70k→128k 129k→256k
伙伴系統: ‘伙伴’指的是記憶體的‘伙伴’,一片連續記憶體的‘伙伴’是相鄰的另一片大小一樣的連續記憶體,
假設存盤空間有1M大小,來分配100k的記憶體:
1、100k向上取2的冪;
2、 查詢是否有128k的空閑記憶體塊;
3、 沒有!查詢是否有256k空閑記憶體塊;
4、沒有!查詢是否有512k空閑記憶體塊;
5、沒有!查詢是否有1M的空閑記憶體塊;
6、有,摘下1M空閑記憶體塊,分配出去;
7、拆下512k放在512k的空閑鏈表,其余的分配出去;
8、拆下256k放在256k的空閑鏈表,其余的分配出去;
9、拆下128k的空閑鏈表,其余的分配出去;
10、分配完畢;
回收剛才分配的記憶體:
1、判斷剛才分配的記憶體伙伴在空閑鏈表上嗎?
2、 在!移除伙伴,合并為256k空閑記憶體,判斷
3、 在!移除伙伴,合并為512k空閑記憶體,判斷;
4、 在!移除伙伴,合并為1M空閑記憶體;
5、插入1M空閑鏈表,回收完成;
🥰13、Linux交換空間
交換空間(Swap)是磁盤的一個磁區,Linux物理記憶體滿時,會把一些記憶體交換至Swap空間,Swap空間是初始化系統時配置的,top命令可以查詢到:
-
冷啟動記憶體依賴,
-
系統睡眠依賴,
-
大行程空間依賴,
交換空間與虛擬記憶體對比:
-
Swap空間存在于磁盤,虛擬記憶體也存在于磁盤,
-
Swap空間與主存發生置換 ,虛擬記憶體也是與主存發生置換,
-
Swap空間是作業系統概念,虛擬記憶體是行程概念,
-
Swap空間解決系統物理記憶體不足的問題,虛擬記憶體解決物理記憶體不足的問題,
😍14、作業系統的檔案管理
🍇14.1、檔案的邏輯結構

有結構檔案:有結構內容由定長記錄和可變長記錄組成,定長記錄存盤格式、檔案描述等結構化資料項,可變長記錄存盤檔案具體內容:
比如png圖片檔案,分為png檔案標記、png資料塊和檔案結束標記,定長記錄存盤檔案格式、檔案描述等結構化資料項,如png檔案標記和檔案結束標記,可變長記錄存盤檔案具體內容,
無結構檔案: 也稱為流式檔案,檔案內容長度以位元組為單位,比如exe,dll,so檔案等,
順序檔案: 順序檔案是指按順序存放在存盤介質中的檔案,磁帶的存盤特征使得磁帶檔案只能存盤順序檔案,順序檔案是所有邏輯檔案當中存盤效率最高的,
索引檔案: 可變長檔案不適合使用順序檔案格式存盤,索引檔案是為了解決可變長檔案存盤而發明的一種檔案格式,索引檔案需要配合索引表完成存盤的操作,
🤩15、輔存的存盤空間分配
輔存的分配方式

空閑表: 空閑盤區分分配與記憶體分配類似,首次適應演算法、回圈適應演算法等,回收程序也與記憶體回收類似,
空閑鏈表: 空閑鏈表法把所有空閑盤區組成一個空閑鏈表,每個鏈表節點存盤空閑盤塊和空閑的數目,
位示圖: 每個盤塊有0/1位元位表示是否被占用,位示圖維護成本低,位示圖可以非常容易找到空閑盤塊,位示圖使用0/1位元位,占用空間很小,該方法在輔存中最為常用,
目錄管理

任何檔案或目錄都只有唯一路徑 例如 A/D/M
😘16、Linux檔案基本操作
🍇16.1、Linux目錄
Linux一切皆是檔案

絕對路徑 相對路徑
🍈16.2、Linux檔案常用操作
創建檔案 touch 檔案名 創建并修改檔案 vim 檔案名
查看檔案vim 也可以使用cat 檔案名
洗掉檔案 rm 檔案名 創建檔案夾 mkdir名字 洗掉檔案夾 rm -r 名字
🍉16.3、Linux檔案型別
Linux有這些檔案型別:套接字(s)、普通檔案(-)、目錄檔案(d)、符號鏈接(l)、設備檔案(b、c)、FIFO§,
通過ls -al可以查看檔案屬性,首字母表示檔案型別,其中b和c分別表示塊設備、字符設備,

😗17、Linux檔案型別
🍇17.1、檔案系統概覽
FAT、NTFS、EXT2/3/4
FAT(File Allocation Table),分為FAT16、FAT32等,微軟Dos/Windows使用的檔案系統,使用一張表來保存盤塊的資訊,
NTFS(New Technology File System),WindowsNT環境的檔案系統,NTFS對FAT進行了改進,取代了舊的檔案系統,Windows、Linux、MacOS均可識別,
EXT(Extended file system),擴展檔案系統,Linux的檔案系統,數字表示第幾代,Window不能識別,
🍈17.2、Ext檔案系統

Boot Sector:啟動扇區,安裝開機管理程式,Block Group:塊組,存盤資料的實際位置,
每一個Block Group有這些資訊:

Inode Table:存放檔案Inode的地方,每一個檔案(目錄)都有一個Inode,是每一個檔案(目錄)的索引節點,也是該檔案唯一標記,Inode存放了檔案型別、檔案權限、檔案物理地址、檔案長度、檔案連接計數、檔案存取時間、檔案狀態、索引節點編號、訪問計數、鏈接指標等等,
需要注意的是檔案名不是存放在Inode節點上的,而是存放在目錄的Inode節點,目的在于列出目錄檔案的時候無需加載檔案的Inode,
Inode bitmap,Inode的位示圖,記錄已分配的Inode和未分配的Inode,
Data block,存放檔案內容的地方,每個block都有唯一的編號,檔案的block記錄在檔案的Inode上
Block bitmap,功能與Inode bitmap類似,記錄Data block的使用情況,
Superblock,記錄整個檔案系統相關資訊的地方,Block和Inode的使用情況,時間資訊、控制資訊等,
df -T 查看系統掛載的磁盤資訊 dumpe2fs 設備名 查看其中的檔案系統資訊,
stat 檔案名查看具體的檔案資訊,

??18、作業系統的設備管理
🍇18.1、廣義的IO設備
對CPU而言,凡是對CPU進行資料輸入的都是輸入設備,對CPU而言,凡是CPU進行資料輸出的都是輸出設備,
可以分別按使用特性分類、按設備的共享屬性分類、按資訊交換的單位分類、按傳輸速率分類,
使用特性分類:存盤設備(記憶體、硬碟等)、互動IO設備(鍵盤、顯示幕等),
資訊交換單位分配:塊設備(磁盤、SD卡)、字符設備(列印機、shell終端),
共享屬性分類:共享設備、獨占設備、虛擬設備,
傳輸速率分類:低速設備、中速、高速,
🍈18.2、IO設備緩沖區
CPU與IO設備的速率不匹配問題,所以有個各個存盤器的層次結構,而緩沖區也是為了解決這個問題,它可以減少CPU處理IO請求的頻率,提高CPU與IO設備之間的并行性,
可以把需要多次互動的請求放入一個緩沖區,將多個請求寫入緩沖區,減少互動次數,
緩沖池:專用緩沖區只適用于特定的IO行程,當這樣的IO行程比較多時,對記憶體的消耗也很大,作業系統劃出可供多個行程使用的公共緩沖區,稱之為緩沖池,
🍉18.3、SPOOLing技術
是一種慢速字符設備如何與計算機主機交換資訊的一種技術,利用高速共享設備將低俗的獨享設備模擬為高速的共享設備,邏輯上,系統為每一個用戶都分配了一臺獨立的高速獨享設備,所以這是一種虛擬設備技術,

假設有三個行程要使用列印機,同步呼叫的效率會比較低,從磁盤中劃出一部分空間叫輸出井,各個行程將呼叫請求放入輸出井,由SPOOLing技術來完成輸出井到列印機的互動,
SPOOLing技術把同步呼叫的低速設備改為異步呼叫
總結起來該技術就是:
-
在輸入、輸出之間增加了派對轉存盤環節(輸入井、輸出井),
-
SPOOLing負責輸入(出)井與低速設備之間的呼叫,
-
邏輯上,行程直接與高速設備互動,減少了行程等待時間,
😚19、Linux文本編輯器及軟體安裝
Nano文本編輯器
復制、剪貼和粘貼
復制一整行:Alt+6
剪貼一整行:Ctrl+K
粘貼:Ctrl+U
如果需要復制/剪貼多行或者一行中的一部分,先將游標移動到需要復制/剪貼的文本的開頭,按Ctrl+6(或者Alt+A)做標記,然后移動游標到 待復制/剪貼的文本末尾,這時選定的文本會反白,用Alt+6來復制,Ctrl+K來剪貼,若在選擇文本程序中要取消,只需要再按一次Ctrl+6,
搜索
按Ctrl+W,然后輸入你要搜索的關鍵字,回車確定,這將會定位到第一個匹配的文本,接著可以用Alt+W來定位到下一個匹配的文本,
保存
使用Ctrl+O來保存所做的修改
退出
按Ctrl+X
nano file
可以直接路徑,沒有該檔案的話,就會創建一個再編輯,
配置nano編輯器
單個用戶配置:
一般通過/home/username路徑下的.nanorc檔案修改,nano .nanorc
配置語言以set開頭:
# 相當于命令后面加 -m 引數 滑鼠生效
set mouse
# 相當于 -i 引數 自動縮進
set autoindent
# 激活職能home鍵 -A引數
set smarthome
全域配置:
/etc/nanorc檔案中修改(root用戶)
sudo nano /etc/nanorc
配置終端:
單個用戶的終端組態檔/home/username/.bashrc
nano ~/.bashrc
bash其實是一種shell,shell用于解釋我們輸入終端的各種命令的,是用戶和作業系統之間的一個命令解釋器,
配置.bashrc檔案可以修改終端的各種配置,如命令提示符樣式,創建命令別名
# 創建別名 alias xx='command'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
全域配置的路徑:/etc/bash.bashrc,但是家目錄下的優先級高于系統的bash.bashrc檔案,
profile組態檔
單個用戶:~/.profile,全域/etc/profile,
bashrc應用于圖形化終端,profile應用于TTY1-TTY6這種需要用戶登錄的終端,profile檔案會呼叫.bashrc,

bashrc 和 profile二者修改后都是下次登陸生效,需要立即生效使用source命令:
source .bashrc
source .profile
😙20、Ubuntu軟體倉庫
對于ubuntu系統,在全世界各地分布有軟體倉庫,Linux的.deb軟體包相較于windows的exe安裝包檔案,包含了依賴關系的管理,對于依賴的軟體會自動下載,
管理軟體倉庫
如果我們要切換軟體倉庫,可以通過編輯軟體倉庫串列檔案/etc/apt/sources.list(root模式)
一般來說,這個檔案中有作用的行是由以下兩個指令開頭:
-
deb: 用于下載軟體的二進制版本,大多數情況下我們用的是這個
-
deb-src: 用于下載軟體的源代碼
# 舉例其中一行
deb http://cn.archive.ubuntu.com/ubuntu/ bionic universe
第二個是倉庫地址,第三個bionic是Ubuntu版本代號,第三個universe是軟體倉庫的區域,也就是要查看的代碼倉庫的不同磁區,
Ubuntu圖形界面中software&update中可以直接切換軟體倉庫,更加方便,
😋21、終端包管理工具
apt-get/apt管理包命令
aptitude:這個命令再卸載軟體時可以卸載不用的依賴
sudo apt update更新軟體包快取;sudo apt-cache search搜索軟體包;sudo apt install安裝軟體包;
sudo apt upgrade升級所有已安裝軟體包;sudo apt autoremove
dpkg命令時apt-get和aptitude兩個命令的后端(backend)命令
依賴鏈:dpkg-->apt-get,aptitude-->Ubuntu Software
使用dpkg可以安裝本地的軟體包:sudo dpkg -i *.deb,卸載:sudo dpkg -r 包名
😛22、閱讀手冊
man命令
例如man ls,會出現ls命令的使用說明,手冊的各部磁區域說明:
NAME
命令的全稱
SYNOPSIS
概要,使用此命令的方法
ls [OPTION]... [FILE]...

粗體:原封不動輸入,
下劃線:用實際內容替代,
[-hvc]中括號內為可選引數,
a|b輸入a或b選項,
OPTION引數,省略號表示可輸入多個引數,
DESCRIPTION
列出所有引數和用法
其他區域:AUTHOR, REPROTIONG BUGS, COPYRIGHT, SEE ALSO
apropos查找命令
apropos命令后面添加關鍵字即可(根據手冊中的關鍵字)
例如需要查找控制音量的方法 apropos sound

😜23、其他查閱手冊的方法
很多命令都支持-h引數
比man命令的內容稍顯簡便
whatis命令
man的精簡版,顯示man的NAME區域
檔案查找命令
locate命令
查找速度極快,查找包含關鍵字的檔案,
locate xxx
會查找并列出xxx(目錄或檔案名包含xxx)所在的所有目錄,
缺陷:如果是剛新建的檔案locate是查不到的,因為locate不是查找硬碟,是在資料庫(包含檔案的串列和檔案的位置)中查找記錄,對于剛創建的檔案,沒有更新進資料庫(一般24小時自動更新)
當然也可以用updatedb命令強制系統立即更新資料庫 sudo updatedb,
find命令深入查找
遍歷實際的硬碟的檔案,還可以對查找的檔案進行操作, 查找檔案要完全對應關鍵字,但是可以用正則匹配 功能強大,
find 默認當前子目錄查找,也可以指定目錄查找;用檔案名、創建時間等查找;最后可以對找到的檔案進行操作,
例如:find -name 'new_file'根據名字查找當前目錄的檔案 ; find /var/log -name 'syslog'查找其他目錄的檔案;
根據檔案大小查找
find /var -size +10M查找/var目錄下大于10m的檔案,
根據檔案的最近訪問時間查找
find -name '*.txt' -atime -7查找7天內訪問的txt檔案,
僅查找目錄或檔案
find -name 'file1' -type d查找名為file1的目錄
操作查找結果
格式化輸出:find -name 'file1' -printf '%p - %u\n'將查找到的檔案格式化輸出為檔案名 - 用戶名的形式,
洗掉操作:xxx -delete
呼叫其他命令:
加上-exec引數之后就可以接其他命令了,十分強大
# 將/var目錄下的所有txt檔案修改權限為600
find /var -name '*.txt' -exec chmod 600 {} \;
大括號表示剛查找到的檔案,\;是exec的結尾,
將-exec引數換成-ok引數效果一樣,但是會對每個檔案都做確認提示!

關注蘇州程式大白,持續更新技術分享,謝謝大家支持

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292958.html
標籤:其他
下一篇:R329開發板產品介紹
