程序管理是作業系統重點、難點問題,也是貫穿linux學習的知識點。那麼什麼是程序呢?
task_struct結構體
task_struct是linux核心中的一種資料結構,裡面包含著程序的資訊,其內容分類都有:
關於task_struct結構體更多的詳細介紹可以看看大佬的這篇介紹建立程序:pid_t fork(void); 通過複製呼叫(父程序)建立了乙個新的程序(子程序)。程序就是pcb,建立乙個程序就是建立了乙個pcb,複製了呼叫fork的這個程序pcb的資訊,執行的位置也相同。
fork函式
fork函式的返回值比較特殊:
對於父程序:返回子程序的pid
對於子程序:返回0
建立子程序失敗:返回-1
父子程序**共享,資料各自開闢空間,私有乙份(寫時拷貝)關於程序建立一部分在學習後面程序控制會繼續深入了解學習。
根據不同的方式角度對程序進行劃分分為以下三種情況:
程序的三種狀態
將程序劃分為最基本的三種狀態分別是:就緒、執行、阻塞狀態。
就緒
:等待cpu執行的程序;
執行
:cpu正在執行程序中的指令;
阻塞
:正在執行的程序,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起程序阻塞的事件可有多種,例如,等待i/o完成、申請緩衝區不能滿足、等待信件(訊號)等。
其轉換過程如下圖:
程序的五種狀態
為了滿足pcb對資料的操作及操作的完整性要求,通常在系統中又為程序引入了兩種常見的狀態:建立狀態
和終止狀態
程序的七種狀態
r(running)執行態
:並不意味著程式一定在執行中,它表明程序要麼在執行中要麼在執行佇列裡。
s(sleeping)睡眠狀態
:可中斷的休眠(淺度睡眠)
d(disk sleep)不可被中斷的休眠狀態
:只能通過指定的方式—>喚醒(深度睡眠),這個狀態的程序通常會等待i/o的結束
t(stopped)停止狀態
t(tracing stop)追蹤狀態
x(dead)死亡狀態
:
z(zombie)僵死狀態
:這個狀態只是乙個返回狀態,不會在任務列表中看到這個狀態,程序已經退出,但是資源沒有得到釋放。
殭屍程序是處於僵死狀態的程序,退出後資源沒有完全釋放的過程。
定義:環境變數一般是指在作業系統中用老儲存或者設定系統環境引數的變數,使得系統執行的環境的配置更加靈活。
命令操作
echo $name//name表示變數名稱常見的環境變數path:執行乙個程式時,如果沒有指定路徑只有程式名稱,shell會在path環境變數儲存路徑中去找這個程式,將自己程式所在路徑加入到path環境變數中,程式就可以直接執行了。
1.main函式的第三個引數
int main(int argc,char *ar**[ ],char *env[ ])2.通過
environ
變數進行獲取
extern char **environ宣告乙個全域性變數(裡面沒有具體的資料),environ指向環境變數表,沒有包含在任何標頭檔案中
3.getenv
通過系統呼叫進行獲取
char *getenv(char *key)通過環境變數名稱獲取環境變數的內容
設定環境變數
int putenv(char *string)//通過**設定乙個環境變數
int setenv(const char *name,const char *value,int overwrite)//通過**設定乙個環境變數
UIApplication深入學習
新建乙個任意型別的ios應用工程,加入我們在class prefix輸入是tc,我們可以看到工程中生成乙個類 在main函式中,autoreleasepool 函式中 說明 當應用程式將要入非活動狀態執行,在此期間,應用程式不接收訊息或事件。比如來 了。說明 當應用程式入活動狀態執行,這個剛好跟上面...
深入學習CSS
什麼是css?在之前的這篇文章中已經介紹了初步的介紹,詳細請看 div加css進一步講解了css中的內容,先總結如下圖 其實在實際開發中,我們通常採用是外部樣式的匯入,這樣做的好處是對於很對有同樣設計樣式的頁面可以實現樣式的共享,這樣我們不僅僅可以節省了大量的時間,並且也方便我們可以靈活的呼叫的樣式...
block深入學習
block的宣告和使用看上一節就行了。本章主要講block內部的實現過程及原理。block的定義和函式指標非常相似 對比一下 block定義 void someblock 函式指標定義 void functionpionter void functionname 當然區別還是有的,block的返回型...