⑴ 編譯器和資料庫以及操作系統稱做系統軟體 三者有何共性。
編譯器是將用戶所設計的各種編程語言的編譯連接生成為機器可運行的可執行代碼的工具。編譯器是操作系統提供用戶介面的體現。
資料庫可以看作是數據的儲存方式,未來的操作系統就是一個資料庫。
操作系統是連接硬體和軟體的橋梁。
⑵ 操作系統內核和編譯器哪個難度更大
二者都屬於系統級的軟體,難度相當,但還要看操作系統是否開源,如果沒有開源,那難度就不是提升一點點了。
⑶ 程序語言,操作系統,編譯器三者之間有何關系
匯編語言的編譯器很多,像MASM,NASM,TASM,gas等等,編譯器不一定用什麼語言來寫,像pascal最初的時候編譯器本身是用匯編和pascal語言寫的,但大部分編譯器是用C語言來寫的.windows向來封閉,不知道是用什麼寫的,應該是用C吧。C是一種編程語言,windows是一種操作系統,二者沒有直接關系。C的各個版本的不同在編譯器對C語言的擴充和處理上,而不在操作系統上,同樣是在windows平台上,TC和VC就不一樣。
這三者的關系,程序語言可以用來寫操作系統和編譯器,操作系統用來編譯器運行,編譯器用來編譯程序語言,編出來的東西可以是操作系統和編譯器。
⑷ 操作系統都自帶編譯器嗎如Windows
不一定。例如:Windows 操作系統就是不自帶編譯器的,它是一個獨立的操作系統,如果你需要編程的話,你還需要單獨購買 MS Visual C++編譯器,然後在安裝好 Windows系統的前提下面,再安裝運行 MS VC++,此時 VC++才能夠對你編寫的 C 語言源程序進行編譯、連接,最後產生可執行程序;而Linux則不同,它是自帶編譯器 gcc 的,所以你在安裝 Linux系統時,只要把 gcc 選上,就可以把 gcc 編譯器連同 Linux 操作系統一起安裝好。就不需要單獨購買 gcc 編譯器軟體了。
⑸ 操作系統和編譯器是怎麼識別全局變數和局部
操作系統,只管調度進程,線程編譯器根據編程語言的定義,確定變數的作用於,存儲類型,生命周期!
定義在函數外部的變數,只有文件靜態變數,和外部變數
外部變數,是實實在在的全局變數,不論作用域還是生命周期。
靜態變數是局部作用域的,生命周期為,程序的生命周期的變數。
自動變數和函數參數,是局部作用域的生命周期為函數結束的局部變數。
寄存器變數,用register定義,是局部變數;
函數內部的靜態變數,語句組內部的靜態變數,局部作用域的,生命周期為,程序的生命周期的變數。
靜態變數,編譯器,可以通過static關鍵字知道。
自動變數,1)函數內部定義的非靜態變數,非寄存器變數是自動變數。
2)函數參數,只能是自動變數,不過也可能定義在寄存器中。
這和調用約定有關,因此不可以用register定義。
C語言沒有全局變數這種數據類型。
只有4種存儲類型,和變數的作用域與生命周期的概念。
C++同樣沒有全局變數這種數據類型。
有另外的兩種作用域
1)namespace作用域。
2)類(類型)作用域。
C只有全局,文件,函數以及函數內部的語句組,4種逐漸縮小的作用域。
其中內層,對外部作用域,具有完全的遮蔽作用。
C++可以通過作用域限定符,區分不同作用域(類,名空間)的名字。
類作用域,可以通過訪問許可權,限制外部的訪問權。
函數作用域(語句組作用域)是封閉的作用域,外部不可以使用函數內部定義的名字。
也不會和外部有命名沖突,只會遮蔽外部的名字。
類作用於,和名空間由於訪問方式不同,命名沖突和遮蔽有些特殊。
函數和全局域,基本不會和類作用域有命名沖突,除非類方法內部。
命名空間,可以避免命名沖突。
類繼承體系中,則有遮蔽現象。
還有訪問許可權問題。
實際上,全局變數,有兩個概念可以判定
1)作用域(空間)===>由定義和聲明位置,和定義和聲明使用的關鍵字決定。
2)生命周期(時間)===>外部和靜態變數,的生命周期是全局的,從初始化到程序結束。
函數參數,和函數局部非靜態變數,是局部變數
函數參數的傳遞,是跨函數的(實參,變成形參);
函數內部定義的,局部變數,只有定義處可見,作用域是函數甚至語句組局部,
其中靜態變數,生命周期是全局的,非靜態是函數甚至語句組的。
全局變數,不是C,C++的概念。
而是,使用編程語言的程序員的概念。
所以,全局變數和C,C++的存儲類型,作用域,生命周期等,不是一一對應的概念。
所以,可以有不同的理解。
所以這個概念是很模糊的,不清晰的。
比如局部靜態變數,類的靜態變數,是否全局變數,就不是可以清晰的說明的。