永久黄网站色视频免费直播,yy6080三理论日本中文,亚洲无码免费在线观看视频,欧美日韩精品一区二区在线播放
標題:
[分享]
Linux內核
[打印本頁]
作者:
marquis
時間:
2013-5-20 22:24
標題:
Linux內核
Linux系統(tǒng)大致可分為三層:
靠近硬件的底層是內核,即Linux操作系統(tǒng)常駐內存部分。
中間層是內核之外的shell層,即操作系統(tǒng)的系統(tǒng)程序部分。
最高層是應用層,即用戶程序部分
Linux有兩種不同的含義
嚴格技術角度:指的時開放源代碼的Unix類操作系統(tǒng)的內核
一般意義:指以Linux內核為基礎的操作系統(tǒng),包括內核、系統(tǒng)工具、完整的開發(fā)環(huán)境和應用
kernel時操作系統(tǒng)的核心程序,由幾個不同邏輯功能部分組成:
向外部提供對計算機設備的核心管理及調用,負責對計算機資源的抽象、分配和共享
代碼分為兩部分:
內核所在的地址空間稱作內核空間
其他應用程序稱為外部管理程序,大部分是對外圍設備進行管理和界面操作,外部管理程序和用戶進程所占據的地址空間成為外部空間
Unix內核用C語言寫成
單一內核:所有的操作系統(tǒng)功能均被封裝在內核中,與外部程序處于不同的地址空間。外部程序智能通過功能調用來訪問內核
微內核:內核只提供最基本、最核心的一部分操作,如創(chuàng)建和刪除任務、中斷管理、進程管理、存儲器管理、進程間通信等,而其他功能如文件系統(tǒng)、網絡協(xié)議棧則在內核外操作。
微內核特點:
使操作系統(tǒng)具有良好的靈活性
操作系統(tǒng)內部結構簡單清晰
程序代碼維護十分方便
體現(xiàn)了面向對象式軟件的結構特征
但是:Linux內核采用單一內核
原因:
注重效率
Linux將代碼執(zhí)行效率作為操作系統(tǒng)第一要務
Linux內核的程序員都是世界各地的黑客,比起結構的清晰,更注重功能的強大和高效率的代碼
特點:
每個功能部件不能輕易拆除
從結構上看,Linux操作系統(tǒng)是采用單塊結構的操作系統(tǒng)。
一般說來,可以將操作系統(tǒng)劃分為內核和系統(tǒng)程序兩部分。
進程控制系統(tǒng)用于進程管理、進程同步、進程通信、進程調度和內存管理等。
●內存管理控制內存分配與回收。
●文件系統(tǒng)管理文件、分配文件空間、管理空閑空間、控制對文件的訪問并為用戶檢索數(shù)據。
●Linux系統(tǒng)支持三種類型的硬件設備:字符設備、塊設備和網絡設備。
●核心底層的硬件控制負責處理中斷以及與機器通信。
作者:
marquis
時間:
2013-5-20 22:24
本帖最后由 marquis 于 2013-5-20 23:03 編輯
5.2 進 程 管 理
1.進程及其狀態(tài)
簡單說來,進程就是程序的一次執(zhí)行過程。
進程至少要有三種基本狀態(tài)。這三種基本狀態(tài)是:運行態(tài)、就緒態(tài)和封鎖態(tài)(或等待態(tài))。
進程的狀態(tài)可依據一定的條件和原因而變化
下載
(31.57 KB)
2013-5-20 22:30
運行狀態(tài):指當前進程已分配CPOU,它是程序正在處理器上執(zhí)行的狀態(tài)。在一般單一CPU機制中,任何時刻處于運行狀態(tài)的進程至多只有一個。
就緒狀態(tài):指進程已具備運行條件,但因為其他進程正占用CPU,所以暫時不能運行而等待分配CPU資源的狀態(tài)。處于該狀態(tài)的進程可以有多個。
封鎖狀態(tài):只進程因等待某種事件發(fā)生(如等待某一輸入、輸出操作完成,等待其他進程發(fā)來的信號等)而暫時不能運行的狀體。處于封鎖狀態(tài)的進程尚不具備運行條件。也成為不可運行狀態(tài)或掛起狀態(tài)?梢杂卸鄠。
2.Linux進程狀態(tài)
下載
(103.41 KB)
2013-5-20 22:35
3.進程的模式和類型
在Linux系統(tǒng)中,進程的執(zhí)行模式劃分為用戶模式和內核模式
按照進程的功能和運行的程序來分,進程劃分為兩大類:一類是系統(tǒng)進程,另一類是用戶進程
下載
(39.28 KB)
2013-5-20 22:36
4.Linux線程
Linux把線程定義為進程的“執(zhí)行上下文”
具有一段可執(zhí)行的程序、專用的系統(tǒng)堆?臻g、私有的“線程控制塊”(即thread_struct數(shù)據結構)
缺少自己的存儲空間
5.2.2 進程的結構
1.task_struct結構
task_struct結構包含下列幾方面的信息:
·進程狀態(tài)
·調度信息
·標志符(PID)
·內部進程通訊(信號、管道、信號量等)
·鏈接信息(指向父進程、兄弟進程、子進程的指針)
·時間和計時器(記錄進程的創(chuàng)建時間和運行所占用的
CPU時間)
·文件系統(tǒng)
·虛擬內存
·處理器信息
2.進程系統(tǒng)堆棧
每個進程都有一個系統(tǒng)堆棧,用來保存中斷現(xiàn)場信息和進程進入內核模式后執(zhí)行子程序(函數(shù))嵌套調用的返回現(xiàn)場信息。
每個進程的系統(tǒng)堆棧和task_struct數(shù)據結構之間存在緊密聯(lián)系,因而二者物理存儲空間也連在一起
系統(tǒng)堆棧的大小靜態(tài)確定,用戶堆棧可在運行時動態(tài)擴展
下載
(37.16 KB)
2013-5-20 22:37
5.2.3 對進程的操作
1.進程的創(chuàng)建
各個進程構成了樹形的進程族系
內核在引導并完成了基本的初始化以后,就有了系統(tǒng)的第一個進程(即初始化進程,實際上是內核線程)。除此之外,所有其他的進程和內核線程都由這個原始進程或其子孫進程所創(chuàng)建。
除初始化進程外,其他進程都是用系統(tǒng)調用fork( )和clone( )創(chuàng)建的。
fork( )是全部復制 ,而clone( ) 有選擇地復制
2.進程的等待
父進程可用系統(tǒng)調用wait3( )等待它的任一個子進程終止,也可以用系統(tǒng)調用wait4( )等待某個特定的子進程終止。
wait3( )算法如下:
(1)如果父進程沒有子進程,則出錯返回。
(2)如果發(fā)現(xiàn)有一個終止的子進程,則取出子進程的進程號,把子進程的CPU使用時間等加到父進程上,釋放子進程占用的task_struct和系統(tǒng)空間堆棧,以供新進程使用。
(3)如果發(fā)現(xiàn)有子進程,但都不處于終止態(tài),則父進程睡眠,等待由相應的信號喚醒。
3.進程的終止
進程可使用系統(tǒng)調用exit( )終止自己
其實現(xiàn)算法如下:
(1)撤消所有的信號量。
(2)釋放其所有的資源,包括存儲空間、已打開的文件、工作目錄、信號處理表等。
(3)置進程狀態(tài)為“終止態(tài)”(TASK_ZOMBIE)。
(4)向它的父進程發(fā)送子進程終止的信號。
(5)執(zhí)行進程調度。
4.進程映像的更換
改換進程映像的工作很復雜,是由系統(tǒng)調用execve( )實現(xiàn)的,它用一個可執(zhí)行文件的副本來覆蓋該進程的內存空間。
ELF可執(zhí)行文件格式示意圖
下載
(16.32 KB)
2013-5-20 22:49
execve( )系統(tǒng)調用的基本算法如下:
(1)驗證文件的可執(zhí)行性,即用戶
有權執(zhí)行它。
(2)讀文件頭,檢查它是一個可裝入模塊。
(3)釋放原有的內存空間。
(4)按照可執(zhí)行文件的要求分配新的內存空間,并裝入內存
5.2.4 進程調度
進程調度機制主要涉及到調度方式、調度時機和調度策略
1.調度方式
基本上采用“搶占式優(yōu)先級”方式
2.調度策略——三種不同的調度策略
SCHED_FIFO——短實時進程,對時間性要求比較強
SCHED_RR——較長時間的實時進程,對應“時間片輪轉法”
SCHED_OTHER——交互式的分時進程,這類進程的優(yōu)先權取決于兩個因素:一個因素是進程剩余時間配額;另一個是進程的優(yōu)先數(shù)nice ——優(yōu)先數(shù)越小,其優(yōu)先級越高
后臺進程的優(yōu)先級低于任何交互(前臺)進程的優(yōu)先級
3.調度時機
(1)當前進程調用系統(tǒng)調用nanosleep( )或者pause( ),使自己進入睡眠狀態(tài),主動讓出一段時間的CPU使用權。
(2)進程終止,永久地放棄對CPU的使用。
(3)在時鐘中斷處理程序執(zhí)行過程中,發(fā)現(xiàn)當前進程連續(xù)運行的時間過長。
(4)當喚醒一個睡眠進程時,發(fā)現(xiàn)被喚醒的進程比當前進程更有資格運行。
(5)一個進程通過執(zhí)行系統(tǒng)調用來改變調度策略或者降低自身的優(yōu)先權(如nice命令),從而引起立即調度。
圖片附件:
圖片10.png
(2013-5-20 22:30, 31.57 KB) / 下載次數(shù) 6729
http://www.fsowen.com/bbs/attachment.php?aid=2987&k=e06315efc23f98e91bdaff2bc625e90e&t=1743839293&sid=ge2g5A
圖片附件:
圖片11.png
(2013-5-20 22:35, 103.41 KB) / 下載次數(shù) 6794
http://www.fsowen.com/bbs/attachment.php?aid=2989&k=968062c35b4cd904d924b6d8cc2ff932&t=1743839293&sid=ge2g5A
圖片附件:
圖片14.png
(2013-5-20 22:36, 39.28 KB) / 下載次數(shù) 6717
http://www.fsowen.com/bbs/attachment.php?aid=2990&k=96c570216dff53c8935fe5628dfbe0fb&t=1743839293&sid=ge2g5A
圖片附件:
圖片13.png
(2013-5-20 22:37, 37.16 KB) / 下載次數(shù) 6718
http://www.fsowen.com/bbs/attachment.php?aid=2991&k=96ac34fd9dbdb362649f197b892e396f&t=1743839293&sid=ge2g5A
圖片附件:
圖片15.png
(2013-5-20 22:49, 16.32 KB) / 下載次數(shù) 6529
http://www.fsowen.com/bbs/attachment.php?aid=2992&k=055859b3a411fd04540794b7de40e3d0&t=1743839293&sid=ge2g5A
作者:
marquis
時間:
2013-5-20 22:26
本帖最后由 marquis 于 2013-5-20 23:18 編輯
5.2.5 shell基本工作原理
它不屬于內核部分,而是在核心之外,以用戶態(tài)方式運行。其基本功能是解釋并執(zhí)行用戶打入的各種命令,實現(xiàn)用戶與Linux核心的接口。
下載
(82.58 KB)
2013-5-20 23:15
后面是本章節(jié)的實例部分。請各位同學自己把代碼敲到計算機里面,并進行編譯、運行。
編譯的工具為計算機自帶的gcc工具
進程屬性
進程的組成元素
程序的當前上下文(context),它是程序當前執(zhí)行的狀態(tài)
程序的當前執(zhí)行目錄
程序訪問的文件和目錄
程序的信任狀態(tài),或者叫做訪問權限
內存和其他分配給進程的資源
進程標識號
進程的兩個知名屬性:進程號(Process ID, PID)和父進程號(Parent Process ID,PPID)
PID/PPID都為整數(shù),唯一標識一個進程
所有的進程有個共同的祖先:pid=1的進程,即init進程
下載
(30.09 KB)
2013-5-20 23:15
Real和effective標識號
進程的屬性
下載
(33.11 KB)
2013-5-20 23:15
下載
(40.85 KB)
2013-5-20 23:15
用戶和用戶組的信息
getlogin()函數(shù)返回用戶的登錄名
getpwname()函數(shù)以上面的函數(shù)返回值為參數(shù),從/etc/passwd文件中返回該登錄名的所有信息。
#include <unistd.h>
char *getlogin(void)
#include <pwd.h>
struct passwd *getpwnam(const char *name)
下載
(37.21 KB)
2013-5-20 23:15
使用system創(chuàng)建進程
system函數(shù)原型如下:
#include <stdlib.h>
int system(const char *string)
它通過把system傳遞給/bin/sh –c來執(zhí)行 string所指定的命令,string中可以包含選項和參數(shù),接著整個命令行(/bin/sh –c string)又傳遞給系統(tǒng)調用execve(隨后介紹)。如果沒有/bin/sh,system返回127,如果出現(xiàn)其他錯誤,則返回-1;如果至此那個成功則返回string的代碼
下載
(26.75 KB)
2013-5-20 23:15
Fork系統(tǒng)調用創(chuàng)建進程
fork調用創(chuàng)建一個新進程
語法:
#include <unistd.h>
pid_t fork(void)
如果fork成功,就向父進程返回子進程的pid,并向子進程返回0.
fork創(chuàng)建的新進程是和父進程(出了pid和ppid)一樣的副本,包括真實有效的UID,GID,進程組和會話ID、環(huán)境、資源限制、打開的文件以及共享的進程段
父進程和子進程之間有一點區(qū)別。子進程沒有繼承父進程的超時設置(使用alarm調用)、父進程的文件鎖、或者未決信號。
下載
(28.56 KB)
2013-5-20 23:15
圖片附件:
圖片17.png
(2013-5-20 23:15, 82.58 KB) / 下載次數(shù) 6687
http://www.fsowen.com/bbs/attachment.php?aid=2993&k=7e8e5e6d382c1d5ecc1646101ec7fdff&t=1743839293&sid=ge2g5A
圖片附件:
圖片18.jpg
(2013-5-20 23:15, 30.09 KB) / 下載次數(shù) 6665
http://www.fsowen.com/bbs/attachment.php?aid=2994&k=733c558aae99b527c4edb2daff1bdd48&t=1743839293&sid=ge2g5A
圖片附件:
圖片19.png
(2013-5-20 23:15, 33.11 KB) / 下載次數(shù) 6700
http://www.fsowen.com/bbs/attachment.php?aid=2995&k=cd2b0804656aed9b508ca2775b77e3b2&t=1743839293&sid=ge2g5A
圖片附件:
圖片20.jpg
(2013-5-20 23:15, 40.85 KB) / 下載次數(shù) 6750
http://www.fsowen.com/bbs/attachment.php?aid=2996&k=7c33c79c51a5814dc11067406cdc559d&t=1743839293&sid=ge2g5A
圖片附件:
圖片21.jpg
(2013-5-20 23:15, 37.21 KB) / 下載次數(shù) 6698
http://www.fsowen.com/bbs/attachment.php?aid=2997&k=f024bc20a42fe670d3764449bf97b447&t=1743839293&sid=ge2g5A
圖片附件:
圖片22.jpg
(2013-5-20 23:15, 26.75 KB) / 下載次數(shù) 6654
http://www.fsowen.com/bbs/attachment.php?aid=2998&k=fde5b0c8208773c2405e35a5e96cb206&t=1743839293&sid=ge2g5A
圖片附件:
圖片23.jpg
(2013-5-20 23:15, 28.56 KB) / 下載次數(shù) 6688
http://www.fsowen.com/bbs/attachment.php?aid=2999&k=97221ca8ce3c810f8f4381729666b417&t=1743839293&sid=ge2g5A
歡迎光臨 WDlinux官方論壇 (http://www.fsowen.com/bbs/)
Powered by Discuz! 7.2