[八股] Linux系統(tǒng)編程八股
點個小贊關(guān)注一波,持續(xù)更新……
[專欄]嵌入式軟件校招筆記(點擊跳轉(zhuǎn))
[知識點] 嵌入式軟件開發(fā)知識點學(xué)習(xí)
[項目] C++高并發(fā)Web服務(wù)器+個人改進項目詳解
1、Linux中你常用的命令有哪些?(這個很開放,隨便哪些都行)
Linux系統(tǒng)中有許多常用的命令,以下是一些例子:
ls
:列出當(dāng)前目錄下的文件和目錄。cd [目錄名]
:切換到指定的目錄。pwd
:顯示當(dāng)前工作目錄的路徑。touch [文件名]
:如果文件不存在,新建文件。mkdir [目錄名]
:創(chuàng)建新的目錄。rm [文件名]
:刪除指定的文件或目錄。cp [源文件] [目標文件]
:復(fù)制文件。mv [源文件] [目標文件]
:移動或重命名文件。cat [文件名]
:查看文件內(nèi)容、創(chuàng)建文件、追加文件內(nèi)容等功能。more [文件名]
:分屏顯示文件內(nèi)容。grep [word] [文件名]
:在文件中搜索指定的文本。date
:查看或設(shè)置系統(tǒng)時間。cal
:顯示日歷。df
:顯示磁盤剩余空間。ps
:查看當(dāng)前進程的狀態(tài)。top
:動態(tài)顯示運行中的進程并排序。kill [進程ID]
:結(jié)束指定的進程。
2、什么是軟鏈接和硬鏈接?
- 軟鏈接:軟鏈接(也稱為符號鏈接)是一個實實在在的文件,該文件指向存放在虛擬目錄結(jié)構(gòu)中某個地方的另一個文件。你可以把它想象成我們平時使用的Windows電腦的快捷方式。如果原始文件已刪除,那已經(jīng)創(chuàng)建的軟鏈接顯示紅色,并且原始文件會一閃一閃的。修改軟鏈接文件內(nèi)容,原始文件內(nèi)容也會被修改。刪除軟鏈接文件,原始文件仍然存在。
- 硬鏈接:硬鏈接創(chuàng)建的是一個獨立的虛擬文件,其中包含了原始文件的信息以及位置。但是兩者就根本而言是同一個文件。更通俗的說,就是一個文件更名了,實際上是同一文件。原始文件必須已經(jīng)存在。如果原始文件已刪除,那已經(jīng)創(chuàng)建的硬鏈接不會被刪除。修改硬鏈接文件內(nèi)容,原始文件內(nèi)容也會被修改。刪除硬鏈接文件,原始文件仍然存在。
3、軟鏈接和硬鏈接有什么區(qū)別?
- 本質(zhì):硬鏈接是同一個文件的多個名字,而軟鏈接則是不同的文件。
- 跨分區(qū):硬鏈接不支持跨分區(qū),而軟鏈接則支持。
- 目錄:硬鏈接不支持鏈接到目錄,而軟鏈接則支持。
- 相互關(guān)系:硬鏈接的文件之間是平等的關(guān)系,刪除任何一個都不會影響其他的鏈接。而軟鏈接的目標文件如果被刪除,軟鏈接就會失效。
- 文件大小:硬鏈接文件顯示的大小與原文件一樣,而軟鏈接文件的大小則是鏈接路徑的長度。
- Inode號:硬鏈接的原文件和鏈接文件共享同一個Inode號,說明它們是同一個文件,而軟鏈接的原文件和鏈接文件擁有不同的Inode號,表明它們是兩個不同的文件2。
- 文件屬性:在文件屬性上,軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫出來,因為在本質(zhì)上硬鏈接文件和原文件是完全平等的關(guān)系。
- 鏈接數(shù)目:硬鏈接的鏈接數(shù)目會增加,而軟鏈接的鏈接數(shù)目不會增加。
4、簡述Linux系統(tǒng)態(tài)與用戶態(tài),什么時候會進入系統(tǒng)態(tài)?
在Linux系統(tǒng)中,有兩種運行級別:用戶態(tài)和內(nèi)核態(tài)(也稱為系統(tǒng)態(tài))。
用戶態(tài):在用戶態(tài)下,應(yīng)用程序只能執(zhí)行受限的指令集,并且不能直接訪問底層系統(tǒng)資源。大多數(shù)代碼都運行在用戶態(tài)。
內(nèi)核態(tài):在內(nèi)核態(tài)下,操作系統(tǒng)擁有最高的權(quán)限和訪問系統(tǒng)資源的能力,可以執(zhí)行特權(quán)指令和直接訪問硬件設(shè)備。當(dāng)CPU處于內(nèi)核態(tài),可以隨意進入用戶態(tài)。
切換時機:應(yīng)用程序無法自由進入內(nèi)核態(tài),只能通過操作系統(tǒng)提供的API進入,或者中斷操作發(fā)生的時候進入。例如,當(dāng)CPU被中斷操作(如定時器、鍵盤輸入、I/O)中斷時,CPU會停止運行當(dāng)前它正在運行的程序,切換到內(nèi)核態(tài),調(diào)用中斷處理器。
5、進程、線程、協(xié)程是什么,有什么區(qū)別?
進程、線程和協(xié)程都是計算機程序在運行時的不同表現(xiàn)形式。下面是它們的基本定義和區(qū)別:
- 進程:進程是操作系統(tǒng)進行資源分配和調(diào)度的一個獨立單位,是程序執(zhí)行的實例。每個進程都有自己的獨立內(nèi)存空間和系統(tǒng)資源。進程是程序資源管理的最小單位。
- 線程:線程是進程中的一個執(zhí)行單元,也是處理器調(diào)度和分派的基本單位。一個進程可以包含多個線程,所有線程共享進程的資源,如內(nèi)存空間和文件描述符等。線程是資源調(diào)度的最小單位。
- 協(xié)程:協(xié)程是一種用戶態(tài)的輕量級線程,協(xié)程的調(diào)度完全由用戶控制。協(xié)程能保留上一次調(diào)用時的狀態(tài),每次過程重入時,就相當(dāng)于進入上一次調(diào)用的狀態(tài)。
區(qū)別:
- 進程和線程的主要區(qū)別在于它們的內(nèi)存空間:進程有自己獨立的地址空間,每啟動一個進程,系統(tǒng)就會為它分配地址空間,一個進程無法直接訪問另一個進程的變量和數(shù)據(jù)結(jié)構(gòu),需要通過進程間通信機制(如管道、信號、套接字等)來實現(xiàn);而同一進程下的所有線程共享同一地址空間和系統(tǒng)資源。
- 線程和協(xié)程的主要區(qū)別在于協(xié)程的調(diào)度由用戶自己控制,而線程的調(diào)度由操作系統(tǒng)內(nèi)核負責(zé)。
6、有了進程,為什么還要有線程?
線程是為了解決進程在并發(fā)執(zhí)行時所付出的時空開銷,提高并發(fā)性1。線程相比進程有以下優(yōu)點:
- 資源消耗少:線程是一種非常"節(jié)儉"的多任務(wù)操作方式,相比進程需要更少的資源。一個進程的開銷大約是一個線程開銷的30倍左右。
- 切換效率高:運行于一個進程中的多個線程,它們之間使用相同的地址空間,而且線程間彼此切換所需的時間比進程切換所需的時間少,從而提高了系統(tǒng)的效率23。
- 共享內(nèi)存:線程之間共享程序的公共狀態(tài),線程之間通過讀-寫內(nèi)存中的公共狀態(tài)來隱式通信2。這使得線程間的通信更為方便,因為它們可以直接訪問對方的內(nèi)存2。
- 提高響應(yīng)性:在多線程環(huán)境中,當(dāng)一個線程阻塞或進行長時間運算時,其他線程還可以繼續(xù)運行2。這就使得程序在等待某些資源(如網(wǎng)絡(luò)響應(yīng))的同時,仍然可以對用戶輸入做出響應(yīng)2。
- 利用多處理器系統(tǒng):多線程可以充分利用多處理器系統(tǒng)。在這樣的系統(tǒng)中,每個線程可以在不同的處理器上運行2。
7、Linux多進程開發(fā)中,怎么創(chuàng)建一個進程?
在Linux多進程開發(fā)中,創(chuàng)建一個
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
記錄本人校招過程中遇到的問題及筆記整理!后續(xù)會持續(xù)更新