《Operating System TEP》筆記(二)

4:抽象概念:進(jìn)程(Process)

進(jìn)程簡(jiǎn)單概念:運(yùn)行的程序。

** 核心問(wèn)題:如何制造無(wú)窮多CPU的假象?**
分時(shí)復(fù)用。
機(jī)制和策略的概念:

  • 機(jī)制是達(dá)到某種功能的底層方法或協(xié)議
  • 策略是在OS中做決定的某種算法

4.1 進(jìn)程抽象

在OS中執(zhí)行的某種程序我們稱(chēng)為進(jìn)程。
進(jìn)程的機(jī)器狀態(tài):

  • 內(nèi)存,進(jìn)程能尋址的地址空間
  • 寄存器、通用以及特殊寄存器(PC、SP、FP)
  • IO信息

4.2 進(jìn)程API概述

  • 創(chuàng)造函數(shù)
  • 摧毀函數(shù)
  • 等待
  • 其他控制函數(shù)
  • 狀態(tài)查詢(xún)函數(shù)

4.3 進(jìn)程創(chuàng)造:一點(diǎn)點(diǎn)細(xì)節(jié)

進(jìn)程是如何創(chuàng)造的?

  • 首先將它的代碼段和數(shù)據(jù)段加載到內(nèi)存(進(jìn)程的地址空間)中
    • 早期OS:eagerly
    • 現(xiàn)代OS:lazily(paging, swapping)
  • 分配棧空間
  • 分配堆空間
  • 運(yùn)行初始化程序,例如IO初始化
  • OS將控制權(quán)轉(zhuǎn)給進(jìn)程的main函數(shù)

4.4 進(jìn)程狀態(tài)

  • 運(yùn)行中(Running)
  • 準(zhǔn)備中(Ready)
  • 停止(Blocked)

4.5 數(shù)據(jù)結(jié)構(gòu)

OS保存在各個(gè)狀態(tài)中的進(jìn)程的進(jìn)程表單,便于在適當(dāng)時(shí)候做上下午轉(zhuǎn)換。(PCB)
有些系統(tǒng)保存有各進(jìn)程的初始化狀態(tài)。
有些系統(tǒng)保存各個(gè)進(jìn)程的最終狀態(tài),返回碼。

4.6 小結(jié)(略)


5 Unix進(jìn)程API

5.1 fork()

int rc = fork()
if(rc < 0)
  ... // fork failed
else if(rc == 0){
  ... // in child process
} else {
  ... // in parent process
}

子進(jìn)程不是完全母進(jìn)程的copy,兩者從fork的返回值開(kāi)始,返回值不同。
getpid()

5.2 wait()

  • waitpid()
  • 返回打斷本進(jìn)程的pid

5.3 exec()

  • exec()/execl()/execle()/execlp()/execv()/execvp()
  • 將新代碼和數(shù)據(jù)覆蓋當(dāng)前代碼段和數(shù)據(jù)段,重新初始化堆棧
  • 并不創(chuàng)造一個(gè)新進(jìn)程,而是將當(dāng)前進(jìn)程變成了一個(gè)不同的進(jìn)程
  • 成功執(zhí)行的exec不會(huì)退出

5.4 為什么這樣設(shè)計(jì)?

可以支持很多靈活的系統(tǒng)設(shè)計(jì)。
shell:fork->exec->wait,各種混合
Unix pipe利用了pipe()系統(tǒng)函數(shù)

grep -o foo file | wc -l

5.5 其他API

例如kill()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測(cè)試 ...
    KeKeMars閱讀 6,366評(píng)論 0 6
  • 本文轉(zhuǎn)載自實(shí)驗(yàn)樓:多進(jìn)程(一) 概述 進(jìn)程的概念這里就不再過(guò)多的贅述了,市面上幾乎關(guān)于計(jì)算機(jī)操作系統(tǒng)的書(shū)都有詳細(xì)的...
    mnikn閱讀 515評(píng)論 0 0
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問(wèn)題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,865評(píng)論 0 27
  • Linux 進(jìn)程管理與程序開(kāi)發(fā) 進(jìn)程是Linux事務(wù)管理的基本單元,所有的進(jìn)程均擁有自己獨(dú)立的處理環(huán)境和系統(tǒng)資源,...
    JamesPeng閱讀 2,494評(píng)論 1 14
  • 公元前我們太傻 公元后我們太假 沒(méi)有人誰(shuí)見(jiàn)過(guò)那一次真正的笑容 ——海子
    吳惟閱讀 110評(píng)論 0 0