四虎影视在线影院在线观看,小s货再浪些再咬紧点h,国产精品水嫩水嫩,97精产国品一二三产区

無標(biāo)題文檔
wdCP系統(tǒng) (介紹,功能特性,運(yùn)行環(huán)境,安裝說明,演示,常見問題,使用教程) wdCDN系統(tǒng) (介紹,功能特性,運(yùn)行環(huán)境,安裝說明,演示,常見問題,使用手冊(cè))
wdOS系統(tǒng) (介紹,功能特性,運(yùn)行環(huán)境,安裝說明,演示,常見問題,使用教程) wdDNS系統(tǒng) (介紹,功能特性,運(yùn)行環(huán)境,安裝說明,演示,常見問題,使用手冊(cè))
注冊(cè) 發(fā)貼 提問 回復(fù)-必看必看 wddns免費(fèi)智能 DNS 開通 本地或虛擬機(jī)使 用wdcp 一鍵包在mysql編 譯時(shí)"卡住"
AI導(dǎo)航網(wǎng)AI應(yīng)用網(wǎng)站大全 wdcp官方技術(shù)支持/服務(wù) 阿里云8折優(yōu)惠券 無敵云 騰訊云優(yōu)惠中,現(xiàn)注冊(cè)更有260代金額券贈(zèng)送
返回列表 發(fā)帖
提問三步曲: 提問先看教程/FAQ索引(wdcp,wdcp_v3,一鍵包)及搜索,會(huì)讓你更快解決問題
1 提供詳細(xì),如系統(tǒng)版本,wdcp版本,軟件版本等及錯(cuò)誤的詳細(xì)信息,貼上論壇或截圖發(fā)論壇
2 做過哪些操作或改動(dòng)設(shè)置等

溫馨提示:信息不詳,很可能會(huì)沒人理你!論壇有教程說明的,也可能沒人理!因?yàn)?你懂的

[分享] Linux內(nèi)核

Linux系統(tǒng)大致可分為三層:
靠近硬件的底層是內(nèi)核,即Linux操作系統(tǒng)常駐內(nèi)存部分。
中間層是內(nèi)核之外的shell層,即操作系統(tǒng)的系統(tǒng)程序部分。
最高層是應(yīng)用層,即用戶程序部分


Linux有兩種不同的含義
嚴(yán)格技術(shù)角度:指的時(shí)開放源代碼的Unix類操作系統(tǒng)的內(nèi)核
一般意義:指以Linux內(nèi)核為基礎(chǔ)的操作系統(tǒng),包括內(nèi)核、系統(tǒng)工具、完整的開發(fā)環(huán)境和應(yīng)用


kernel時(shí)操作系統(tǒng)的核心程序,由幾個(gè)不同邏輯功能部分組成:
向外部提供對(duì)計(jì)算機(jī)設(shè)備的核心管理及調(diào)用,負(fù)責(zé)對(duì)計(jì)算機(jī)資源的抽象、分配和共享
代碼分為兩部分:
內(nèi)核所在的地址空間稱作內(nèi)核空間
其他應(yīng)用程序稱為外部管理程序,大部分是對(duì)外圍設(shè)備進(jìn)行管理和界面操作,外部管理程序和用戶進(jìn)程所占據(jù)的地址空間成為外部空間


Unix內(nèi)核用C語言寫成
單一內(nèi)核:所有的操作系統(tǒng)功能均被封裝在內(nèi)核中,與外部程序處于不同的地址空間。外部程序智能通過功能調(diào)用來訪問內(nèi)核
微內(nèi)核:內(nèi)核只提供最基本、最核心的一部分操作,如創(chuàng)建和刪除任務(wù)、中斷管理、進(jìn)程管理、存儲(chǔ)器管理、進(jìn)程間通信等,而其他功能如文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧則在內(nèi)核外操作。


微內(nèi)核特點(diǎn):
使操作系統(tǒng)具有良好的靈活性
操作系統(tǒng)內(nèi)部結(jié)構(gòu)簡單清晰
程序代碼維護(hù)十分方便
體現(xiàn)了面向?qū)ο笫杰浖慕Y(jié)構(gòu)特征


但是:Linux內(nèi)核采用單一內(nèi)核
原因:注重效率
Linux將代碼執(zhí)行效率作為操作系統(tǒng)第一要?jiǎng)?wù)
Linux內(nèi)核的程序員都是世界各地的黑客,比起結(jié)構(gòu)的清晰,更注重功能的強(qiáng)大和高效率的代碼
特點(diǎn):每個(gè)功能部件不能輕易拆除


從結(jié)構(gòu)上看,Linux操作系統(tǒng)是采用單塊結(jié)構(gòu)的操作系統(tǒng)。
一般說來,可以將操作系統(tǒng)劃分為內(nèi)核和系統(tǒng)程序兩部分。


進(jìn)程控制系統(tǒng)用于進(jìn)程管理、進(jìn)程同步、進(jìn)程通信、進(jìn)程調(diào)度和內(nèi)存管理等。


●內(nèi)存管理控制內(nèi)存分配與回收。


●文件系統(tǒng)管理文件、分配文件空間、管理空閑空間、控制對(duì)文件的訪問并為用戶檢索數(shù)據(jù)。


●Linux系統(tǒng)支持三種類型的硬件設(shè)備:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。


●核心底層的硬件控制負(fù)責(zé)處理中斷以及與機(jī)器通信。

本帖最后由 marquis 于 2013-5-20 23:03 編輯

5.2  進(jìn) 程 管 理
1.進(jìn)程及其狀態(tài)
簡單說來,進(jìn)程就是程序的一次執(zhí)行過程。
進(jìn)程至少要有三種基本狀態(tài)。這三種基本狀態(tài)是:運(yùn)行態(tài)、就緒態(tài)和封鎖態(tài)(或等待態(tài))。
進(jìn)程的狀態(tài)可依據(jù)一定的條件和原因而變化
圖片10.png

運(yùn)行狀態(tài):指當(dāng)前進(jìn)程已分配CPOU,它是程序正在處理器上執(zhí)行的狀態(tài)。在一般單一CPU機(jī)制中,任何時(shí)刻處于運(yùn)行狀態(tài)的進(jìn)程至多只有一個(gè)。
就緒狀態(tài):指進(jìn)程已具備運(yùn)行條件,但因?yàn)槠渌M(jìn)程正占用CPU,所以暫時(shí)不能運(yùn)行而等待分配CPU資源的狀態(tài)。處于該狀態(tài)的進(jìn)程可以有多個(gè)。
封鎖狀態(tài):只進(jìn)程因等待某種事件發(fā)生(如等待某一輸入、輸出操作完成,等待其他進(jìn)程發(fā)來的信號(hào)等)而暫時(shí)不能運(yùn)行的狀體。處于封鎖狀態(tài)的進(jìn)程尚不具備運(yùn)行條件。也成為不可運(yùn)行狀態(tài)或掛起狀態(tài)。可以有多個(gè)。

2.Linux進(jìn)程狀態(tài)
圖片11.png

3.進(jìn)程的模式和類型
在Linux系統(tǒng)中,進(jìn)程的執(zhí)行模式劃分為用戶模式和內(nèi)核模式
按照進(jìn)程的功能和運(yùn)行的程序來分,進(jìn)程劃分為兩大類:一類是系統(tǒng)進(jìn)程,另一類是用戶進(jìn)程
圖片14.png

4.Linux線程
Linux把線程定義為進(jìn)程的“執(zhí)行上下文”
具有一段可執(zhí)行的程序、專用的系統(tǒng)堆?臻g、私有的“線程控制塊”(即thread_struct數(shù)據(jù)結(jié)構(gòu))
缺少自己的存儲(chǔ)空間


5.2.2  進(jìn)程的結(jié)構(gòu)
1.task_struct結(jié)構(gòu)
task_struct結(jié)構(gòu)包含下列幾方面的信息:
    ·進(jìn)程狀態(tài)
    ·調(diào)度信息
    ·標(biāo)志符(PID)
    ·內(nèi)部進(jìn)程通訊(信號(hào)、管道、信號(hào)量等)
    ·鏈接信息(指向父進(jìn)程、兄弟進(jìn)程、子進(jìn)程的指針)
    ·時(shí)間和計(jì)時(shí)器(記錄進(jìn)程的創(chuàng)建時(shí)間和運(yùn)行所占用的
                           CPU時(shí)間)
    ·文件系統(tǒng)
    ·虛擬內(nèi)存
    ·處理器信息

2.進(jìn)程系統(tǒng)堆棧
每個(gè)進(jìn)程都有一個(gè)系統(tǒng)堆棧,用來保存中斷現(xiàn)場信息和進(jìn)程進(jìn)入內(nèi)核模式后執(zhí)行子程序(函數(shù))嵌套調(diào)用的返回現(xiàn)場信息。
每個(gè)進(jìn)程的系統(tǒng)堆棧和task_struct數(shù)據(jù)結(jié)構(gòu)之間存在緊密聯(lián)系,因而二者物理存儲(chǔ)空間也連在一起
系統(tǒng)堆棧的大小靜態(tài)確定,用戶堆?稍谶\(yùn)行時(shí)動(dòng)態(tài)擴(kuò)展
圖片13.png


5.2.3  對(duì)進(jìn)程的操作
1.進(jìn)程的創(chuàng)建
各個(gè)進(jìn)程構(gòu)成了樹形的進(jìn)程族系
內(nèi)核在引導(dǎo)并完成了基本的初始化以后,就有了系統(tǒng)的第一個(gè)進(jìn)程(即初始化進(jìn)程,實(shí)際上是內(nèi)核線程)。除此之外,所有其他的進(jìn)程和內(nèi)核線程都由這個(gè)原始進(jìn)程或其子孫進(jìn)程所創(chuàng)建。
除初始化進(jìn)程外,其他進(jìn)程都是用系統(tǒng)調(diào)用fork( )和clone( )創(chuàng)建的。
fork( )是全部復(fù)制 ,而clone( ) 有選擇地復(fù)制

2.進(jìn)程的等待
父進(jìn)程可用系統(tǒng)調(diào)用wait3( )等待它的任一個(gè)子進(jìn)程終止,也可以用系統(tǒng)調(diào)用wait4( )等待某個(gè)特定的子進(jìn)程終止。

wait3( )算法如下:
(1)如果父進(jìn)程沒有子進(jìn)程,則出錯(cuò)返回。
(2)如果發(fā)現(xiàn)有一個(gè)終止的子進(jìn)程,則取出子進(jìn)程的進(jìn)程號(hào),把子進(jìn)程的CPU使用時(shí)間等加到父進(jìn)程上,釋放子進(jìn)程占用的task_struct和系統(tǒng)空間堆棧,以供新進(jìn)程使用。
(3)如果發(fā)現(xiàn)有子進(jìn)程,但都不處于終止態(tài),則父進(jìn)程睡眠,等待由相應(yīng)的信號(hào)喚醒。

3.進(jìn)程的終止
進(jìn)程可使用系統(tǒng)調(diào)用exit( )終止自己
其實(shí)現(xiàn)算法如下:
(1)撤消所有的信號(hào)量。
(2)釋放其所有的資源,包括存儲(chǔ)空間、已打開的文件、工作目錄、信號(hào)處理表等。
(3)置進(jìn)程狀態(tài)為“終止態(tài)”(TASK_ZOMBIE)。
(4)向它的父進(jìn)程發(fā)送子進(jìn)程終止的信號(hào)。
(5)執(zhí)行進(jìn)程調(diào)度。

4.進(jìn)程映像的更換
改換進(jìn)程映像的工作很復(fù)雜,是由系統(tǒng)調(diào)用execve( )實(shí)現(xiàn)的,它用一個(gè)可執(zhí)行文件的副本來覆蓋該進(jìn)程的內(nèi)存空間。

ELF可執(zhí)行文件格式示意圖
圖片15.png

execve( )系統(tǒng)調(diào)用的基本算法如下:
(1)驗(yàn)證文件的可執(zhí)行性,即用戶
        有權(quán)執(zhí)行它。
(2)讀文件頭,檢查它是一個(gè)可裝入模塊。
(3)釋放原有的內(nèi)存空間。
(4)按照可執(zhí)行文件的要求分配新的內(nèi)存空間,并裝入內(nèi)存

5.2.4  進(jìn)程調(diào)度
進(jìn)程調(diào)度機(jī)制主要涉及到調(diào)度方式、調(diào)度時(shí)機(jī)和調(diào)度策略
1.調(diào)度方式
基本上采用“搶占式優(yōu)先級(jí)”方式

2.調(diào)度策略——三種不同的調(diào)度策略
SCHED_FIFO——短實(shí)時(shí)進(jìn)程,對(duì)時(shí)間性要求比較強(qiáng)
SCHED_RR——較長時(shí)間的實(shí)時(shí)進(jìn)程,對(duì)應(yīng)“時(shí)間片輪轉(zhuǎn)法”
SCHED_OTHER——交互式的分時(shí)進(jìn)程,這類進(jìn)程的優(yōu)先權(quán)取決于兩個(gè)因素:一個(gè)因素是進(jìn)程剩余時(shí)間配額;另一個(gè)是進(jìn)程的優(yōu)先數(shù)nice ——優(yōu)先數(shù)越小,其優(yōu)先級(jí)越高
后臺(tái)進(jìn)程的優(yōu)先級(jí)低于任何交互(前臺(tái))進(jìn)程的優(yōu)先級(jí)

3.調(diào)度時(shí)機(jī)
(1)當(dāng)前進(jìn)程調(diào)用系統(tǒng)調(diào)用nanosleep( )或者pause( ),使自己進(jìn)入睡眠狀態(tài),主動(dòng)讓出一段時(shí)間的CPU使用權(quán)。
(2)進(jìn)程終止,永久地放棄對(duì)CPU的使用。
(3)在時(shí)鐘中斷處理程序執(zhí)行過程中,發(fā)現(xiàn)當(dāng)前進(jìn)程連續(xù)運(yùn)行的時(shí)間過長。
(4)當(dāng)喚醒一個(gè)睡眠進(jìn)程時(shí),發(fā)現(xiàn)被喚醒的進(jìn)程比當(dāng)前進(jìn)程更有資格運(yùn)行。
(5)一個(gè)進(jìn)程通過執(zhí)行系統(tǒng)調(diào)用來改變調(diào)度策略或者降低自身的優(yōu)先權(quán)(如nice命令),從而引起立即調(diào)度。

TOP

本帖最后由 marquis 于 2013-5-20 23:18 編輯

5.2.5  shell基本工作原理
它不屬于內(nèi)核部分,而是在核心之外,以用戶態(tài)方式運(yùn)行。其基本功能是解釋并執(zhí)行用戶打入的各種命令,實(shí)現(xiàn)用戶與Linux核心的接口。
圖片17.png

后面是本章節(jié)的實(shí)例部分。請(qǐng)各位同學(xué)自己把代碼敲到計(jì)算機(jī)里面,并進(jìn)行編譯、運(yùn)行。
編譯的工具為計(jì)算機(jī)自帶的gcc工具

進(jìn)程屬性
進(jìn)程的組成元素
程序的當(dāng)前上下文(context),它是程序當(dāng)前執(zhí)行的狀態(tài)
程序的當(dāng)前執(zhí)行目錄
程序訪問的文件和目錄
程序的信任狀態(tài),或者叫做訪問權(quán)限
內(nèi)存和其他分配給進(jìn)程的資源

進(jìn)程標(biāo)識(shí)號(hào)
進(jìn)程的兩個(gè)知名屬性:進(jìn)程號(hào)(Process ID, PID)和父進(jìn)程號(hào)(Parent Process ID,PPID)
PID/PPID都為整數(shù),唯一標(biāo)識(shí)一個(gè)進(jìn)程
所有的進(jìn)程有個(gè)共同的祖先:pid=1的進(jìn)程,即init進(jìn)程
圖片18.jpg

Real和effective標(biāo)識(shí)號(hào)
進(jìn)程的屬性
圖片19.png

圖片20.jpg

用戶和用戶組的信息
getlogin()函數(shù)返回用戶的登錄名
getpwname()函數(shù)以上面的函數(shù)返回值為參數(shù),從/etc/passwd文件中返回該登錄名的所有信息。
#include <unistd.h>
char *getlogin(void)
#include <pwd.h>
struct passwd *getpwnam(const char *name)
圖片21.jpg

使用system創(chuàng)建進(jìn)程
system函數(shù)原型如下:
#include <stdlib.h>
int system(const char *string)
它通過把system傳遞給/bin/sh –c來執(zhí)行 string所指定的命令,string中可以包含選項(xiàng)和參數(shù),接著整個(gè)命令行(/bin/sh –c string)又傳遞給系統(tǒng)調(diào)用execve(隨后介紹)。如果沒有/bin/sh,system返回127,如果出現(xiàn)其他錯(cuò)誤,則返回-1;如果至此那個(gè)成功則返回string的代碼
圖片22.jpg

Fork系統(tǒng)調(diào)用創(chuàng)建進(jìn)程
fork調(diào)用創(chuàng)建一個(gè)新進(jìn)程
語法:
#include <unistd.h>
pid_t  fork(void)
如果fork成功,就向父進(jìn)程返回子進(jìn)程的pid,并向子進(jìn)程返回0.
fork創(chuàng)建的新進(jìn)程是和父進(jìn)程(出了pid和ppid)一樣的副本,包括真實(shí)有效的UID,GID,進(jìn)程組和會(huì)話ID、環(huán)境、資源限制、打開的文件以及共享的進(jìn)程段
父進(jìn)程和子進(jìn)程之間有一點(diǎn)區(qū)別。子進(jìn)程沒有繼承父進(jìn)程的超時(shí)設(shè)置(使用alarm調(diào)用)、父進(jìn)程的文件鎖、或者未決信號(hào)。
圖片23.jpg

TOP

返回列表