note

process

程式在執行時,會把程式碼寫入記憶體,這時在運行的的程式也可以稱作行程。

將一顆CPU的可用時間切割為很小的單位,可以讓CPU執行多件工作,因為切換process的時間夠快,所以感覺很像多工

系統使用fork(),讓行程可以生成多個,最開始的行程稱作父行程,生出來的稱作子行程

早期系統最先執行的子行程是init, 不過現在已經被systemd取代了,因為init的起動速度較慢,是一個一個啟動,而systemd是使用parallel(相關的行程可以平行生成),只需要幾個步驟就可以啟動。系統的第一個子行程的PID(process id)為1

Linux的bash在接收到外部命令(ELF 64-bit LSB executable)時,通常會fork()出一個子行程,然後使用exec()切換到自行程去執行命令。而內部命令(POSIX shell script)像是cd,就不會使用fork(),而是會執行在bash行程裡面執行

type -a [command] : 可以知道 command 是外部命令還是內部命令

在指令後面加上 &,就可以讓程式碼在背景執行,如果想要知道一個命令執行多久時間,可以在指令前面加上 time

ctrl+c可以中斷目前的process,而ctrl+z會把目前的process停止運行並放到背景執行

ps -l: 顯示行程所有訊息

行程會有優先度(PRI),PRI越小優先度越較高CPU給他的時間戳會比較多

PRI,預設80,他會加上NI值,成為最後的PRI值

cd proc pid: 可以跳到執行行程的那個資料夾,這時再cd fd,可以看到裡面有0、1、2、255,0代表stdin、1代表stdout、2代表stderr。

driver

  1. 直接寫到作業程式裡面(驅動程式直接載入)

  2. 要用再放入到作業系統(驅動程式模組化),這會使kernel的程式碼變少

    下面示範把驅動程式載入到設備中(dev)

硬體製造商會需要用driver來控制硬體,這個難度會比網頁設計之類的還要難,不過薪水也高很多

Linux指令