史上最強最細膩的linux嵌入式C語言學(xué)習(xí)教程【李慧芹老師】

硬啃408計算機操作系統(tǒng),學(xué)習(xí)起來跟八股文沒啥區(qū)別。還是得從實踐出發(fā),從應(yīng)用的角度去了解。
進程環(huán)境
1.main函數(shù)
int main(int argc, char *argv[])
2.進程的終止情況
正常終止:
從main函數(shù)返回
調(diào)用exit
調(diào)用_exit或_Exit
最后一個線程從啟動例程返回
最后一個線程調(diào)用 pthread_exit
異常終止:
調(diào)用abort
接到一個信號并終止
最后一個線程對其取消請求作出響應(yīng)
echo &?打印上一條語句的執(zhí)行狀態(tài)

3.命令行參數(shù)的分析
4.環(huán)境變量
5.C程序的存儲空間布局
6.庫
7.函數(shù)跳轉(zhuǎn)
8.資源的獲取及控制
1.進程標識符pid
類型pid_t ,有符號16位,虛擬機技術(shù)
命令:ps ax -L / axf / axm
文件描述符
進程號是順次向下使用,不是優(yōu)先使用編號最小
getpid();
getppid();
2.進程的產(chǎn)生:fork()
執(zhí)行一次返回兩次,duplicating(復(fù)制) the calling process,memory copy,拷貝、克隆一模一樣
fork后父子進程的區(qū)別:fork的返回值不一樣,pid不同, ppid不同, 未決信號和文件鎖不繼承,資源利用量歸零
init進程,是所有進程的祖先進程



調(diào)度器的調(diào)度策略來決定進程運行的先后順序
sleep(1)
ps axf 階梯狀
孤兒進程、僵尸進程

重定向,Begin打印了兩次
換行是無效的
fflush(NULL), fork之前要刷新所有該刷新的流


time ./primer0 > /dev/null


子進程沒有一個退出的標記


S+, SLEEP
Z+,ZOMBINE
父進程結(jié)束,子進程變成了孤兒,由Init進行接收管理
“回收僵尸進程”
ps axf
time ./isprime > /dev/null
make isprime
zombine:僵尸
釋放pid,pid非常的寶貴
vfork()與父進程共享存儲區(qū)
3.進程的消亡及釋放資源
wait()
waitpid()
waitid()
wait3()
wait4()
分塊法
交叉分配法

池類算法,涉及到競爭與沖突



4.exec函數(shù)族
few
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

END打印不出來
fflush(NULL)
5.用戶權(quán)限及組權(quán)限
6.觀摩課:解釋器文件
7.system()
8.進程會計
9.進程時間
10.守護進程
11.系統(tǒng)日志