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

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

溫馨提示:信息不詳,很可能會沒人理你!論壇有教程說明的,也可能沒人理!因為,你懂的

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

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


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


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


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


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


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


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


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


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


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


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


●核心底層的硬件控制負責處理中斷以及與機器通信。

本帖最后由 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)可依據(jù)一定的條件和原因而變化
圖片10.png

運行狀態(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)
圖片11.png

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

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


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

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


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

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

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

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

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

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

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

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

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

3.調(diào)度時機
(1)當前進程調(diào)用系統(tǒng)調(diào)用nanosleep( )或者pause( ),使自己進入睡眠狀態(tài),主動讓出一段時間的CPU使用權(quán)。
(2)進程終止,永久地放棄對CPU的使用。
(3)在時鐘中斷處理程序執(zhí)行過程中,發(fā)現(xiàn)當前進程連續(xù)運行的時間過長。
(4)當喚醒一個睡眠進程時,發(fā)現(xiàn)被喚醒的進程比當前進程更有資格運行。
(5)一個進程通過執(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)方式運行。其基本功能是解釋并執(zhí)行用戶打入的各種命令,實現(xiàn)用戶與Linux核心的接口。
圖片17.png

后面是本章節(jié)的實例部分。請各位同學自己把代碼敲到計算機里面,并進行編譯、運行。
編譯的工具為計算機自帶的gcc工具

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

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

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

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

TOP

返回列表