系統程式設計階段:
需要學哪些?
程序概念-》程序控制-》基礎io-》程序間通訊–》程序間通訊-》程序訊號-》多執行緒
程序概念:
首先要知道馮諾依曼體系結構:
如果輸入裝置直接把資料產能送到cpu中的話,在傳輸資料的時候,可能要花很長時間,結果送到cpu中一下就處理好了,然後再花好長時間把資料送到輸出裝置,這樣就是對cpu的浪費,因此,輸入裝置先把資料送到儲存器中,cpu處理完了直接從儲存器中拿資料,增大cpu的利用率。
ps:硬體結構決定軟體行為。
作業系統:
目的:讓計算機更好用
功能:一款搞管理的軟體–管理軟硬體資源,提供良好的執行環境
如何管理:先描述,再組織(學校管理的例子)
驅動程式:它是執行者,系統介面不好用,就出現了shell和庫
管理者並不需要直接與被管理者互動進行管理,而是通過對被管理者進行描述,並且將描述資訊得當的組織起來進行管理。
庫函式與系統呼叫的關係:
庫函式是對系統呼叫的一層封裝,他們是上下級的呼叫關係。庫函式呼叫系統呼叫介面
作業系統:搞管理的軟體,對下管理軟硬體資源,對上提供良好的執行環境
重點來啦~~~~~
程序概念:
程式:一堆**(在硬碟上),程式執行起來會被載入到記憶體中
使用者角度:執行起來的程式
作業系統角度:程式執行需要將**資料載入到記憶體中,乙個作業系統執行起來會有很多的程式,那麼作業系統怎麼去管理呢?比如說某個程式執行到哪了?
在作業系統的層面,程序就是作業系統對乙個執行中程式的描述(校長眼裡看到了同學們的檔案就彷彿看到了真人,通過檔案來管理學生,在作業系統眼中看到了程序的描述資訊,就通過資訊管理程序),這個描述資訊----pcb(程序控制塊)—linux下是struct task_struct結構體。
問題:cpu只有乙個,如何做到同時處理多個程式?比如我們可以邊聽歌邊聊天?
答:cpu的分時技術:乙個程式執行一點點,就去執行另乙個,然後如此迴圈往復。切換的速度很快,我們根本感覺不到。
時間片:cpu在每個程式上執行的時間
問題:cpu迴圈切換的時候,如何找到之前執行的狀態?
答:拿到pcb(描述資訊):在乙個task_struct結構體中,幾千行**
程式計數器,
上下文資料,
記憶體指標(根據pcb找到對應指令在記憶體中的位置)
記賬資訊
程序狀態
優先順序程序識別符號(pid)
檔案的io狀態資訊
sudo:
檢視程序:
/proc
ps-ef:簡單資訊
-aux:詳細資訊
getpid() 獲取程序的程序id
但是出來的程序資訊太多怎麼辦?
ps -aux|grep loop(程式名)
pid_t getpid():獲取程序id
boot:放的是系統的引導檔案
etc:放的配置檔案
lib:放的是庫檔案
bin:放的是命令檔案
dev:放裝置檔案
opt:放第三方資料
sys:放系統檔案
tmp:放日誌檔案
程序建立:
複製:pcb—作業系統通過複製父程序,建立子程序,因此父子程序資料獨有,**共享
返回值根據返回值不同,實現分流(父程序返回子程序的pid>0)子程序返回0
建立子程序的作用?
1、壓力分攤
2、幹其他工作(背鍋)
問:如何區分子父程序?
通過folk的返回值
父程序返回》0
子程序返回0
程序狀態:就緒、阻塞、執行、停止
linux下:
執行(r),可中斷睡眠(s),不可中斷睡眠(d),停止(t),死亡(x),僵死(z)
r:執行
s:睡眠
d:休眠也就不可中斷睡眠
t:停止(什麼都沒乾),用kill都殺不掉
x:死亡狀態
z:僵死
kill:殺掉乙個程序
-9:強制殺死
-18:繼續執行
問: 什麼程序殺不死?
殭屍程序殺不死
殭屍程序:
處於僵死狀態的程序
產生原因:
子程序先於父程序退出,作業系統(警察的角色)檢測到程序的退出,保留退出原因,通知父程序,但是父程序這時候正在打麻將,沒有關注這個通知,這時候作業系統為了封鎖現場,不會釋放子程序資源,因為子程序的pcb中包含有退出原因,這時候因為既沒有執行也沒有完全退出,因此處於僵死狀態,成為殭屍程序。
危害:資源洩露
問:如何處理殭屍程序?
關閉父程序
避免方法?
程序等待
孤兒程序:
父程序先於子程序退出,父程序退出後,子程序成為後台程序,並且1號程序(init程序)(孤兒院的角色)成為父程序。
精靈程序(守護程序):
特殊的孤兒程序(以d結尾)脫離終端會話影響
Linux系統程式設計的學習路線,你了解嗎?
現在,有很多剛剛接觸linux系統程式設計的人或者想學習的人,也許對linux系統程式設計的學習路線還不怎麼了解吧 作為凌陽教育的培訓生,我就把我之前認為學的好的知識點,給大家講一件 一般初學的時候,遇到最多的就是這些情況 第一章 介紹與基本概念 系統程式設計 apl與abl 標準linux程式設計...
linux 系統程式設計學習經驗
簡單寫一下總結 1 書籍的選擇 個人推薦一下三本 unix環境高階程式設計 linux系統程式設計 unix linux程式設計實踐教程 新手入門建議從 linux系統程式設計 入手 優點是簡單易懂,沒有 unix環境高階程式設計 中關於unix的各種版本的細節,主幹清晰,而且書裡寫了linux系統...
系統程式設計 學習筆記 01
是指編譯好的二進位制檔案,在磁碟上,不占用系統資源 cpu 記憶體 開啟的檔案 裝置 鎖 是乙個抽象的概念,與作業系統原理聯絡緊密。程序是活躍的程式,占用系統資源。在記憶體中執行。同乙個程式也可以載入為不同的程序 彼此之間互不影響 環境變數,是指在作業系統中用來指定作業系統執行環境的一些引數。通常具...