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

編譯器與操作系統有何關系?編譯器與CPU之間又有何情緣?

發布時間:2017-6-29 09:22    發布者:技術小白
關鍵詞: 編譯器 , 操作系統 , CPU
編譯器與操作系統有何關系?編譯器與CPU之間又有何情緣?

很多程序員可能有同樣的疑問,編譯器與操作系統之間有何關系,編譯器與CPU又有何關系,動態鏈接器從哪查找共享庫等。

讓人困惑的原因有幾,

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

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

第三,操作系統的介入。

今天我們試著從操作系統介入編譯過程后對編譯器的影響,看看操作系統與編譯器有什么關系。


編譯程序
我們看看編譯器的一種傳統定義:

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

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

以上對編譯程序的定義描述在【現代意義下】對全面認識編譯程序是不夠的,因為它沒有涉及操作系統,沒有涉及現代的復雜的程序構建過程。有一定開發經驗的程序員都知道,程序的“編譯過程”包括編譯、鏈接(靜態鏈接與動態鏈接)、調試,還可能包括組態配置和安裝兩步。“編譯”一詞已經不能很好描述這個過程。整個過程可稱為【程序構建】,而編譯只是第一步,在這一點上,編譯程序在傳統意義上與現代意義上產生了不同。由于本文試圖討論編譯程序與操作系統的關系,為了避免產生歧義,本文的【編譯程序】包括編譯和靜態鏈接兩個部分,動態鏈接部分有點特殊,后面會提到它的角色。

下面我們給出有關【操作系統與編譯程序關系】的三個問題,并試圖回答它們:

·第一,編譯程序與操作系統的關系是什么?
·第二,編譯程序對操作系統有依賴么?
·第三,編譯程序與CPU的關系又是什么?
·第四,操作系統對C標準庫與C編譯程序的關系有什么影響?

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

現代編譯程序是一支將某抽象度較高的編程語言程序【轉化】為運行在【某軟硬體系下】的抽象度較低的編程語言程序的【程序】。所謂硬件體系是指處理器體系,軟件體系指操作系統體系。

要回答前三個問題,我們得厘清現代編譯程序定義中的【屬概念】——程序,并對操作系統有更深一層認識。


程序
程序的分類是多種多樣的,比如常見的兩分法是【系統程序】和【應用程序】。這是一種粗粒度的按【計算任務】不同的分法。我們看程序的定義:

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

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

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

我們一般理解下的【程序】是指二進制的可執行文件,那么高級語言的源程序是不是程序?從指令序列的定義看,【高級語言的源程序】是程序,因為【高級語言的源程序】與【二進制的可執行文件】一樣,也是指令序列,只不過【高級語言的源程序】的【圖靈機】不是CPU,也不是編譯器或解釋器,而是程序員。【高級語言的源程序】的功能更多體現在程序員間的相互學習和交流。

除了以上基本分類外,現代的程序還會受為其提供虛擬運行環境的操作系統影響,可以根據操作系統的體系屬性對程序再分類,例如win32程序,Linux程序。


操作系統

操作系統是什么類程序?

操作系統是一類比較獨立的系統程序,操作系統有支持各種【圖靈機】的體系類型,比如16位DOS,32位Windows,X86的BSD,ARM的 linux等。而系統程序一般是指一支為應用程序直接提供半成品(為應用程序提供執行的虛擬環境)和協調多個應用程序并行運行的程序。所謂半成品是指,系統程序的一部分(指令序列)也是應用程序的一部分(指令序列),但這部分程序不專屬任何應用程序,它是共享的。例如各種新硬件的驅動程序、C標準庫函數、POSIX庫函數等。而作一個協調程序,操作系統表現出與一般應用程序的程序性,如獨立調度的線程,只是它們運行在權力更高的狀態下。協調程序如線程調度程序。

非操作系統程序與操作系統的關系

這里的操作系統泛指像Linux這樣的現代32位操作系統,而【非操作系統程序】運行在操作系統之上,對操作系統存在可能的依賴的程序。

其實只要是運行在某操作系統之上的程序都會烙上該操作系統的印,對操作系統有依賴,包括編譯程序。不過這些程序對操作系統的依賴程度和依賴的內容確實有很多區別。例如一支最簡單的【Hello world程序】都會對【操作系統的C庫】產生依賴,如果去掉【Hello world程序】的輸入輸出功能,只作加減或邏輯運算,【Hello world程序】依然會對操作系統有少量依賴,因為【Hello world程序】由運行在該【操作系統上的編譯程序】編譯的,有特定的目標文件格式,并由該【操作系統的載入程序】載入內存運行[注]。這種只【在形式上】對OS存在依賴的“無用”程序可謂是最獨立于OS的程序。在此基礎之上,其它程序都對OS有不同程度的依賴,依賴表現在對OS內的各種程序庫的依賴,比如C標準庫,POSIX系統庫,線程庫、網絡庫和其它基于這些基礎庫的第三方應用代碼庫。

注:由此可見編譯程序與引導程序、SHELL程序一樣,是現代操作系統的基本部分。


問題初步解決

編譯程序與操作系統的關系

有了以上的對程序以及操作系統本質的一定了解后,我們知道編譯程序與操作系統有一定親緣性。但這種親緣性的一些表現會讓人迷惑。例如Linux發行版可以不安裝有編譯程序的,只有開發工作站才需要編譯程序。而所有Linux發行版的應用程序都可能使用了共享庫,需要動態鏈接這些系統共享庫。由此可見,應該分開【開發期】與【運行期】來看待編譯程序與操作系統的關系。在開發期,編譯程序運行操作系統之上,屬于【非操作系統程序】,對操作系統有依賴;在運行期,編譯程序的子部分——動態鏈接程序和加載程序屬于操作系統有機部分。

由以可得編譯程序與操作系統的關系有:

●第一,編譯程序的編譯部分和靜態鏈接部分是運行在操作系統上的系統程序;
●第二,編譯程序的動態鏈接部分與操作系統的親緣性更強,所以完全可把動態鏈接部分獨立出來[FIXME:動態鏈接程序與操作系統具體關系未知];
●第三,編譯程序的編譯輸出格式是操作系統相關的。

由此可見,編譯程序是操作系統相關的,編譯程序也是操作系統的功能很重要組成部分,但編譯程序沒有被集成入操作系統內核內,所以編譯程序不算是操作系統的有機組成部分。

編譯程序對操作系統的依賴

由上面可得,編譯程序是運行操作系統之上【非操作系統程序】,對操作系統有依賴。編譯程序是一支【計算集中】更大的程序,它相對于應用程序對OS依賴會少一些,依賴有:

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

編譯程序與CPU的關系

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

操作系統對C標準庫與C編譯程序的關系的影響

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


以下課程可免費試聽C語言電子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想學習的你和我聯系預約就可以免費聽課了。
宋工企鵝號:3524-6590-88   Tel/WX:173--1795--1908



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

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • PIC32CM LS60 Curiosity Pro評估工具包
  • PIC32CM LS00 Curiosity Pro評估工具包
  • 實時控制解決方案的正確選擇——數字信號控制器(DSC)或通用MCU
  • dsPIC® DSC:攻克各種觸摸傳感挑戰的電容式觸摸解決方案
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级va在线视频免费播放| 日韩在线高清| 日本一本一道久久香蕉免费| 网址在线观看| 天天欲色成人综合网站| 日日麻批免费视频播放高清| 三级自拍| 亚洲九九| 一级毛片在线免费看| 亚洲一级大黄大色毛片| 青青成人在线| 性欧美丰满xxxx性久久久| 亚洲精品乱码久久久久久中文字幕 | 亚洲乱码卡一卡二卡三永久| 亚洲国产欧美在线成人aaaa| 欧美干b视频| 天天插综合| 午夜视频在线观看国产| 欧美在线视频一区在线观看| 亚洲插| 亚洲女同视频| 人人射人人射| 亚洲卡通动漫| 天天干天天射天天操| 亚洲自拍偷拍网| 一级毛片在线观看视频| 亚洲美女aⅴ久久久91| 婷婷色一二三区波多野衣| 视频一本大道香蕉久在线播放| 日本午夜精华| 日本中文在线视频| 亚洲小视频网站| 天天操操操操操| 亚洲欧洲精品一区二区三区| 亚洲一级毛片免观看| 亚洲欧美日韩在线| 青草久久影院| 欧美色综合图区| 日本免费人成网ww555在线| 性一级视频| 午夜呻吟|