想知道系統程式設計如何學習嗎?(來這)

2021-10-07 03:32:54 字數 2439 閱讀 1107

系統程式設計階段:

需要學哪些?

程序概念-》程序控制-》基礎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 記憶體 開啟的檔案 裝置 鎖 是乙個抽象的概念,與作業系統原理聯絡緊密。程序是活躍的程式,占用系統資源。在記憶體中執行。同乙個程式也可以載入為不同的程序 彼此之間互不影響 環境變數,是指在作業系統中用來指定作業系統執行環境的一些引數。通常具...