因為學的是控制,剛開始的時候玩的微控制器比較多,微控制器進行開發的乙個重要的特點就是裸機程式設計。也就是說核心跑的完完全全是你的**。但是在作業系統上程式設計就完全不一樣,因為你的程式大部分都在呼叫作業系統的介面函式,從而間接的管理硬體。作業系統搭好了框架,實現硬體抽象,檔案儲存管理,程序管理,本質上就是對cpu,i/o和儲存器搭了乙個管理框架,這種間接的管理方式使我剛接觸ros開發時產生了極大的不適應,我不知道我應該寫什麼,不知道函式和硬體之間的關係。就是當時很難理解介面的概念,總是在糾結底層。
基於作業系統程式設計理解的第二個難點我覺得是程序,像我們寫的應用程式,以windows舉例,exe檔案並非直接讀取執行,而是有乙個對映到程序管理空間的過程,windows是由pe裝載器完成。
整個過程我覺得可以分為五步,第一步是通過螢幕滑鼠網路,u盤等i/o口將原始碼寫入硬碟,第二部是進行編譯,第三步是建立程序,第四步是進行對映,也就是對映到程序空間,第五步呼叫鏈結庫時進行鏈結
暫時先寫這麼多,有時間再補充,歡迎討論。
21年7.15更新
上班一周了,做的偏上層,自動駕駛的規劃演算法。因此被迫公升級自己的c++能力,同時**也是基於linux系統的。這兩天又有了一些新的理解。
廢話不多說。
人類科技水平發展的過程從另乙個角度來看是偷懶的過程,有偷懶的需要,也就有了進步,程式語言也是這麼發展的,彙編是針對硬體的語言,是機器語言直接對應過來的,與硬體的關聯有個非常重要的問題就是程式不具備移植性,硬體變了**也就變了。因此,c語言就出現了,目的就是減少與硬體過程的管理性,但是有可以對硬體進行操作,比如說可以管理記憶體,但是是一種統一的操作方式。
作業系統也是如此的目的,是對硬體的抽象,因此你就無須直接操作硬體,因此當你需要操作硬體時,你的思維就應該轉變了,不是去找相應的暫存器,而是去找相應的介面函式也就是api,即使不同作業系統的api存在差異,但是都會存在。
這裡隨便插點題外話,c++相比其它語言對硬體又更加關注,對底層執行的控制更加精準,注重的是效率。
Linux系統程式設計(八)目錄作業系統呼叫
包含標頭檔案 include include 函式原型 int mkdir const char pathname,mode t mode 引數 返回值 chmod 示例程式 include include include intmain return0 編譯執行結果,檔案許可權0777與許可權掩碼...
系統程式設計 作業系統概論PART1
part1.計算機的基本組成原理 part2.計算機執行原理頂層檢視 part3.指令 指令週期 取指令和執行指令 指令格式 前面1位元組是操作碼,指令的功能,例如加法功能。後面3位元組用於尋找要操作的資料值。由於資料儲存在記憶體 儲存器 中,由記憶體位址來標識,所以後3位元組本質是要操作的資料在記...
作業系統與裸機的區別
我們在學習stm32到一定階段可能會了解作業系統,然後便有這種問題產生,下面我就來粗略說說 作業系統與裸機的區別,以及stm32能執行什麼作業系統,能執行linux系統嗎 等問題。作業系統與裸機的區別 裸機執行的程式 一般由乙個main函式中的while死迴圈和各種中斷服務程式組成,平時cpu執行w...