国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

編譯器與操作系統(tǒng)有何關(guān)系?編譯器與CPU之間又有何情緣?

發(fā)布時(shí)間:2017-6-29 09:22    發(fā)布者:技術(shù)小白
關(guān)鍵詞: 編譯器 , 操作系統(tǒng) , CPU
編譯器與操作系統(tǒng)有何關(guān)系?編譯器與CPU之間又有何情緣?

很多程序員可能有同樣的疑問,編譯器與操作系統(tǒng)之間有何關(guān)系,編譯器與CPU又有何關(guān)系,動(dòng)態(tài)鏈接器從哪查找共享庫等。

讓人困惑的原因有幾,

第一是編譯器的功能角色特殊,編譯器是生成程序的程序;

第二是編譯過程變得越來越復(fù)雜,一支編譯器支持多種程序語言、支持共享庫、編譯優(yōu)化,編譯與鏈接可分開等;

第三,操作系統(tǒng)的介入。

今天我們?cè)囍鴱牟僮飨到y(tǒng)介入編譯過程后對(duì)編譯器的影響,看看操作系統(tǒng)與編譯器有什么關(guān)系。


編譯程序
我們看看編譯器的一種傳統(tǒng)定義:

編譯程序是一支將抽象度較高的編程語言程序(也稱源程序)【轉(zhuǎn)化】成抽象度較低的編程語言程序(也稱目標(biāo)程序)的【程序】[注]。抽象度的兩端分別是機(jī)器語義和人理解語義。【處理器體系】和【編程語言】是一支編譯程序的根本屬性。

注:以下僅使用【程序】一語,“器”是一種形象的比喻,不夠嚴(yán)謹(jǐn);而軟件(software)是產(chǎn)品性的程序,最好只用在商業(yè)語境中。

以上對(duì)編譯程序的定義描述在【現(xiàn)代意義下】對(duì)全面認(rèn)識(shí)編譯程序是不夠的,因?yàn)樗鼪]有涉及操作系統(tǒng),沒有涉及現(xiàn)代的復(fù)雜的程序構(gòu)建過程。有一定開發(fā)經(jīng)驗(yàn)的程序員都知道,程序的“編譯過程”包括編譯、鏈接(靜態(tài)鏈接與動(dòng)態(tài)鏈接)、調(diào)試,還可能包括組態(tài)配置和安裝兩步。“編譯”一詞已經(jīng)不能很好描述這個(gè)過程。整個(gè)過程可稱為【程序構(gòu)建】,而編譯只是第一步,在這一點(diǎn)上,編譯程序在傳統(tǒng)意義上與現(xiàn)代意義上產(chǎn)生了不同。由于本文試圖討論編譯程序與操作系統(tǒng)的關(guān)系,為了避免產(chǎn)生歧義,本文的【編譯程序】包括編譯和靜態(tài)鏈接兩個(gè)部分,動(dòng)態(tài)鏈接部分有點(diǎn)特殊,后面會(huì)提到它的角色。

下面我們給出有關(guān)【操作系統(tǒng)與編譯程序關(guān)系】的三個(gè)問題,并試圖回答它們:

·第一,編譯程序與操作系統(tǒng)的關(guān)系是什么?
·第二,編譯程序?qū)Σ僮飨到y(tǒng)有依賴么?
·第三,編譯程序與CPU的關(guān)系又是什么?
·第四,操作系統(tǒng)對(duì)C標(biāo)準(zhǔn)庫與C編譯程序的關(guān)系有什么影響?

為了更好的進(jìn)行下一步討論,先給出現(xiàn)代編譯程序比較完整的定義,并由定義引出問題:

現(xiàn)代編譯程序是一支將某抽象度較高的編程語言程序【轉(zhuǎn)化】為運(yùn)行在【某軟硬體系下】的抽象度較低的編程語言程序的【程序】。所謂硬件體系是指處理器體系,軟件體系指操作系統(tǒng)體系。

要回答前三個(gè)問題,我們得厘清現(xiàn)代編譯程序定義中的【屬概念】——程序,并對(duì)操作系統(tǒng)有更深一層認(rèn)識(shí)。


程序
程序的分類是多種多樣的,比如常見的兩分法是【系統(tǒng)程序】和【應(yīng)用程序】。這是一種粗粒度的按【計(jì)算任務(wù)】不同的分法。我們看程序的定義:

程序(program)是完成特定【計(jì)算任務(wù)】的【指令】序列,指令由相應(yīng)的【圖靈機(jī)】讀取并操作。

由以上對(duì)程序的定義可知,還可根據(jù)——程序【指令的性質(zhì)】和讀取程序的【圖靈機(jī)】性質(zhì)——兩個(gè)標(biāo)準(zhǔn)再進(jìn)一步對(duì)程序分類。比如,按指令序列是否連續(xù)可以分為獨(dú)立程序和共享程序(使用了共享庫);按指令的抽象度可分為高級(jí)語言程序和低級(jí)語言程序。按【圖靈機(jī)】的體系可分為X86程序和ARM程序,16位程序和32位程序等。

高級(jí)語言程序是不是【程序】?如果是,它的【圖靈機(jī)】是什么?

我們一般理解下的【程序】是指二進(jìn)制的可執(zhí)行文件,那么高級(jí)語言的源程序是不是程序?從指令序列的定義看,【高級(jí)語言的源程序】是程序,因?yàn)椤靖呒?jí)語言的源程序】與【二進(jìn)制的可執(zhí)行文件】一樣,也是指令序列,只不過【高級(jí)語言的源程序】的【圖靈機(jī)】不是CPU,也不是編譯器或解釋器,而是程序員。【高級(jí)語言的源程序】的功能更多體現(xiàn)在程序員間的相互學(xué)習(xí)和交流。

除了以上基本分類外,現(xiàn)代的程序還會(huì)受為其提供虛擬運(yùn)行環(huán)境的操作系統(tǒng)影響,可以根據(jù)操作系統(tǒng)的體系屬性對(duì)程序再分類,例如win32程序,Linux程序。


操作系統(tǒng)

操作系統(tǒng)是什么類程序?

操作系統(tǒng)是一類比較獨(dú)立的系統(tǒng)程序,操作系統(tǒng)有支持各種【圖靈機(jī)】的體系類型,比如16位DOS,32位Windows,X86的BSD,ARM的 linux等。而系統(tǒng)程序一般是指一支為應(yīng)用程序直接提供半成品(為應(yīng)用程序提供執(zhí)行的虛擬環(huán)境)和協(xié)調(diào)多個(gè)應(yīng)用程序并行運(yùn)行的程序。所謂半成品是指,系統(tǒng)程序的一部分(指令序列)也是應(yīng)用程序的一部分(指令序列),但這部分程序不專屬任何應(yīng)用程序,它是共享的。例如各種新硬件的驅(qū)動(dòng)程序、C標(biāo)準(zhǔn)庫函數(shù)、POSIX庫函數(shù)等。而作一個(gè)協(xié)調(diào)程序,操作系統(tǒng)表現(xiàn)出與一般應(yīng)用程序的程序性,如獨(dú)立調(diào)度的線程,只是它們運(yùn)行在權(quán)力更高的狀態(tài)下。協(xié)調(diào)程序如線程調(diào)度程序。

非操作系統(tǒng)程序與操作系統(tǒng)的關(guān)系

這里的操作系統(tǒng)泛指像Linux這樣的現(xiàn)代32位操作系統(tǒng),而【非操作系統(tǒng)程序】運(yùn)行在操作系統(tǒng)之上,對(duì)操作系統(tǒng)存在可能的依賴的程序。

其實(shí)只要是運(yùn)行在某操作系統(tǒng)之上的程序都會(huì)烙上該操作系統(tǒng)的印,對(duì)操作系統(tǒng)有依賴,包括編譯程序。不過這些程序?qū)Σ僮飨到y(tǒng)的依賴程度和依賴的內(nèi)容確實(shí)有很多區(qū)別。例如一支最簡單的【Hello world程序】都會(huì)對(duì)【操作系統(tǒng)的C庫】產(chǎn)生依賴,如果去掉【Hello world程序】的輸入輸出功能,只作加減或邏輯運(yùn)算,【Hello world程序】依然會(huì)對(duì)操作系統(tǒng)有少量依賴,因?yàn)椤綡ello world程序】由運(yùn)行在該【操作系統(tǒng)上的編譯程序】編譯的,有特定的目標(biāo)文件格式,并由該【操作系統(tǒng)的載入程序】載入內(nèi)存運(yùn)行[注]。這種只【在形式上】對(duì)OS存在依賴的“無用”程序可謂是最獨(dú)立于OS的程序。在此基礎(chǔ)之上,其它程序都對(duì)OS有不同程度的依賴,依賴表現(xiàn)在對(duì)OS內(nèi)的各種程序庫的依賴,比如C標(biāo)準(zhǔn)庫,POSIX系統(tǒng)庫,線程庫、網(wǎng)絡(luò)庫和其它基于這些基礎(chǔ)庫的第三方應(yīng)用代碼庫。

注:由此可見編譯程序與引導(dǎo)程序、SHELL程序一樣,是現(xiàn)代操作系統(tǒng)的基本部分。


問題初步解決

編譯程序與操作系統(tǒng)的關(guān)系

有了以上的對(duì)程序以及操作系統(tǒng)本質(zhì)的一定了解后,我們知道編譯程序與操作系統(tǒng)有一定親緣性。但這種親緣性的一些表現(xiàn)會(huì)讓人迷惑。例如Linux發(fā)行版可以不安裝有編譯程序的,只有開發(fā)工作站才需要編譯程序。而所有Linux發(fā)行版的應(yīng)用程序都可能使用了共享庫,需要?jiǎng)討B(tài)鏈接這些系統(tǒng)共享庫。由此可見,應(yīng)該分開【開發(fā)期】與【運(yùn)行期】來看待編譯程序與操作系統(tǒng)的關(guān)系。在開發(fā)期,編譯程序運(yùn)行操作系統(tǒng)之上,屬于【非操作系統(tǒng)程序】,對(duì)操作系統(tǒng)有依賴;在運(yùn)行期,編譯程序的子部分——?jiǎng)討B(tài)鏈接程序和加載程序?qū)儆诓僮飨到y(tǒng)有機(jī)部分。

由以可得編譯程序與操作系統(tǒng)的關(guān)系有:

●第一,編譯程序的編譯部分和靜態(tài)鏈接部分是運(yùn)行在操作系統(tǒng)上的系統(tǒng)程序;
●第二,編譯程序的動(dòng)態(tài)鏈接部分與操作系統(tǒng)的親緣性更強(qiáng),所以完全可把動(dòng)態(tài)鏈接部分獨(dú)立出來[FIXME:動(dòng)態(tài)鏈接程序與操作系統(tǒng)具體關(guān)系未知];
●第三,編譯程序的編譯輸出格式是操作系統(tǒng)相關(guān)的。

由此可見,編譯程序是操作系統(tǒng)相關(guān)的,編譯程序也是操作系統(tǒng)的功能很重要組成部分,但編譯程序沒有被集成入操作系統(tǒng)內(nèi)核內(nèi),所以編譯程序不算是操作系統(tǒng)的有機(jī)組成部分。

編譯程序?qū)Σ僮飨到y(tǒng)的依賴

由上面可得,編譯程序是運(yùn)行操作系統(tǒng)之上【非操作系統(tǒng)程序】,對(duì)操作系統(tǒng)有依賴。編譯程序是一支【計(jì)算集中】更大的程序,它相對(duì)于應(yīng)用程序?qū)S依賴會(huì)少一些,依賴有:

●形式依賴(由另一支同軟硬體系的編譯程序[行話本地編譯器],編譯得到或不同軟硬體系的編譯程序[行話交叉編譯器],交叉編譯得到)
●C庫依賴,讀取高級(jí)語言源碼程序文件,寫入低級(jí)語言的目標(biāo)文件

編譯程序與CPU的關(guān)系

這個(gè)問題在編譯程序的定義里已經(jīng)有答案了,一支編譯程序只編譯生成一種機(jī)器碼。我們說編譯程序的【操作系統(tǒng)相關(guān)性】是后天進(jìn)化得到的,而編譯程序的【處理器相關(guān)性】是天生的。

操作系統(tǒng)對(duì)C標(biāo)準(zhǔn)庫與C編譯程序的關(guān)系的影響

操作系統(tǒng)對(duì)C庫沒有什么影響,C庫是一種通用代碼庫。是給用戶編程提供的接口,程序員只需要和這些接口打交道就可以了,而不需要知道具體怎么實(shí)現(xiàn)的。c庫中的有些功能是c庫代碼本身實(shí)現(xiàn)的,也有一些是利用操作系統(tǒng)實(shí)現(xiàn)的。


以下課程可免費(fèi)試聽C語言電子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽課了。
宋工企鵝號(hào):3524-6590-88   Tel/WX:173--1795--1908



本文地址:http://m.qingdxww.cn/thread-452801-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 三级国产精品 | 亚洲最大网址 | 青青青国产在线视频 | 在线国产一区二区三区 | 久久婷婷五月综合色丁香 | 91精品国产肉丝高跟在线 | 在线播放国产视频 | 亚洲精品日本高清中文字幕 | 成年黄网站色视频免费观看 | 亚洲播放| 欧美亚洲国产一区 | 青青草国产精品人人爱99 | 手机看片国产高清 | 久久久久国产精品免费看 | 男女性高爱潮免费网站 | 日韩大片免费观看视频播放 | 久久国产精彩视频 | 精品视频一区二区三区在线观看 | 看污污网页| 成人欧美精品一区二区不卡 | 91在线精品播放 | 欧美日韩在线一区二区三区 | 国内高清久久久久久久久 | 日本不卡视频在线播放 | 欧美精品亚洲二区 | 亚洲欧美一区二区三区在线 | 欧美视频在线观看免费最新 | 久草免费小视频 | 美国大片免费30分钟 | 欧美性一级 | 亚洲国产爱 | 四虎在线永久免费观看 | 日本手机在线 | 免费国产99久久久香蕉 | 六月婷婷激情综合 | 国产精品福利一区二区 | 亚洲欧美一区二区三区久本道 | 日韩一级片在线免费观看 | 亚洲区免费 | 日韩欧美一区二区三区免费看 | h肉动漫无遮挡在线观看免费 |