基于操作系统编程与裸机编程的区别
? ? ?因為學的是控制,剛開始的時候玩的單片機比較多,單片機進行開發(fā)的一個重要的特點就是裸機編程。也就是說內核跑的完完全全是你的代碼。但是在操作系統(tǒng)上編程就完全不一樣,因為你的程序大部分都在調用操作系統(tǒng)的接口函數(shù),從而間接的管理硬件。操作系統(tǒng)搭好了框架,實現(xiàn)硬件抽象,文件存儲管理,進程管理,本質上就是對cpu,i/o和存儲器搭了一個管理框架,這種間接的管理方式使我剛接觸ROS開發(fā)時產(chǎn)生了極大的不適應,我不知道我應該寫什么,不知道函數(shù)和硬件之間的關系。就是當時很難理解接口的概念,總是在糾結底層。
? ?基于操作系統(tǒng)編程理解的第二個難點我覺得是進程,像我們寫的應用程序,以windows舉例,exe文件并非直接讀取執(zhí)行,而是有一個映射到進程管理空間的過程,windows是由PE裝載器完成。
??? 整個過程我覺得可以分為五步,第一步是通過屏幕鼠標網(wǎng)絡,u盤等I/O口將源碼寫入硬盤,第二部是進行編譯,第三步是創(chuàng)建進程,第四步是進行映射,也就是映射到進程空間,第五步調用鏈接庫時進行鏈接
? 暫時先寫這么多,有時間再補充,歡迎討論。
21年7.15更新
?上班一周了,做的偏上層,自動駕駛的規(guī)劃算法。因此被迫升級自己的C++能力,同時代碼也是基于linux系統(tǒng)的。這兩天又有了一些新的理解。
?? 廢話不多說。
?? 人類科技水平發(fā)展的過程從另一個角度來看是偷懶的過程,有偷懶的需要,也就有了進步,編程語言也是這么發(fā)展的,匯編是針對硬件的語言,是機器語言直接對應過來的,與硬件的關聯(lián)有個非常重要的問題就是程序不具備移植性,硬件變了代碼也就變了。因此,c語言就出現(xiàn)了,目的就是減少與硬件過程的管理性,但是有可以對硬件進行操作,比如說可以管理內存,但是是一種統(tǒng)一的操作方式。
??? 操作系統(tǒng)也是如此的目的,是對硬件的抽象,因此你就無須直接操作硬件,因此當你需要操作硬件時,你的思維就應該轉變了,不是去找相應的寄存器,而是去找相應的接口函數(shù)也就是API,即使不同操作系統(tǒng)的API存在差異,但是都會存在。
?? 這里隨便插點題外話,c++相比其它語言對硬件又更加關注,對底層運行的控制更加精準,注重的是效率。
總結
以上是生活随笔為你收集整理的基于操作系统编程与裸机编程的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharedPreferences保存对
- 下一篇: 信号与系统(中)