大綱
硬件:
計算機的主要部件有:CPU、主板、顯卡、內存、硬盤、網卡、
聲卡、顯示器、鍵盤、鼠標;光驅、機箱、音箱等。
軟件:
由底向上可以細分為:固件,驅動,操作系統,應用軟件
固件:
就是硬件廠商寫死的軟件,一般不能更改或者很難更改,比如電腦主板自帶的BIOS。
驅動:
和固件類似,但是允許用戶更新、卸載的,操作系統通過硬件驅動和硬件打交道。比如英偉達的顯卡驅動。是一種可以使計算機和設備進行相互通信的特殊程序。
操作系統只有通過這個接口,才能控制硬件設備的工作,假如某設備的驅動程序未能正確安裝,便不能正常工作
操作系統:
比如Linux, Win7,或者手機了的Android,將底層硬件細節封裝起來。
應用軟件:
在操作系統基礎上編寫的應用程序,比如微軟的辦公Word,比如Google的Chrome瀏覽器。
補充:
1,固件和操作系統沒關系,肯定能脫離操作系統而存在。無論你是安裝Windows,還是Linux,或是BSD,主板的BIOS都在那里。
2,因為操作系統將很多底層細節(比如不同的硬盤,不同廠商的顯示器,不同型號的的主板等)封裝了起來,依賴於操作系統,應用軟件開發更加容易、有效率。但是某些場景下,應用軟件也可以脫離操作系統二存在。比如工業控制領域。以單片機為例,寫好跑馬燈的匯編程序,用燒錄軟件將二進制文件燒錄到單片機里面,就可以正確執行。
3,固件是寫在芯片里的程序代碼,一般是用來引導或起動某個系統功能的執行,比如電腦中的CMOS。一般不會寫在硬盤或存存器中。驅動是在系統的基礎上,為了更好地發揮某個硬件的功能而特地寫出的一段程序代碼,它是建立在系統之上的。
匯編器和鏈接器
匯編器(Assembler)
1,是將匯編語言翻譯為機器語言的程序。一般而言,匯編生成的是目標代碼,需要經鏈接器(Linker)生成可執行代碼才可以執行。
2,匯編程序是系統軟件中語言處理系統軟件。匯編器把匯編語言翻譯成機器語言的過程稱為匯編。
鏈接器(Linker)
是一個程序,將目標文件外加庫鏈接為一個可執行文件。目標文件是包括機器碼和鏈接器可用信息的程序模塊。
1,為什么需要鏈接器
對於源程序任意一行代碼的修改都需要重新編譯和匯編整個程序,全部重新翻譯是對計算資源的嚴重浪費。這種重復對於標准庫程序尤為浪費,因為程序員要編譯和匯編那些在定義上幾乎從未改變過的過程。
於是可以單獨編譯和匯編每個過程,以使得某一行代碼的改變只需要編譯和匯編一個過程。這種方法需要一個新的系統程序,稱為鏈接編輯器(link editor)或鏈接器(linker),它把所有獨立匯編的機器語言程序“拼接”在一起。
如何編寫
能輸出二進制文件的語言都可以!知道它的所有指令集就OK。
你用解釋型(Python,Ruby)的語言寫一個都可以,如IA-32,知道它的所有指令集就OK了。
編譯器和操作系統關系
雞和蛋的關系
雖然編譯器本身可以獨立於操作系統,但這樣需要添加大量操作系統完成的工作!
因為操作系統已經封裝了底層硬件操作的復雜性,所以現在的高級語言編譯器是依賴於操作系統的,編譯器通過系統調用和硬件打通等
操作系統內核職責
進程創建,終止,調度
內存管理,
文件系統,
網絡io,
設備管理,
提供系統調用的接口。
編譯器
編譯原理那套實現