日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--3.軟件基礎(chǔ)

第二章 軟件基礎(chǔ)

程序是執(zhí)行某個(gè)特定任務(wù)的計(jì)算機(jī)指令集合 。程序可以用多種程序語(yǔ)言來(lái)編寫(xiě):從低級(jí)計(jì)算機(jī)語(yǔ)言-匯編語(yǔ)言到高級(jí)的、與機(jī)器本身無(wú)關(guān)的語(yǔ)言入C程序語(yǔ)言 。操作系統(tǒng)是一個(gè)允許用戶運(yùn)行如電子表格或者字處理軟件等應(yīng)用程序的特殊程序 。本章將介紹程序設(shè)計(jì)的基本原則,同時(shí)給出操作系統(tǒng)設(shè)計(jì)目標(biāo)與功能的概述 。


2.1 計(jì)算機(jī)編程語(yǔ)言
2.1.1 匯編語(yǔ)言
那些CPU從主存讀取出來(lái)執(zhí)行的指令對(duì)人類來(lái)說(shuō)是根本不可理解的 。它們是告訴計(jì)算機(jī)如何準(zhǔn)確動(dòng)作的機(jī)器代碼 。在Intel 80486指令中16進(jìn)制數(shù)0x89E5表示將ESP寄存器的內(nèi)容拷入EBP寄存器 。為最早的計(jì)算機(jī)設(shè)計(jì)的工具之一就是匯編器,它可以將人們可以理解的源文件匯編成機(jī)器代碼 。匯編語(yǔ)言需要顯式的操作寄存器和數(shù)據(jù),并且與特定處理器相關(guān) 。比如說(shuō)Intel X86微處理器的匯編語(yǔ)言與Alpha AXP微處理器的匯編語(yǔ)言決然不同 。以下是一段Alpha AXP匯編指令程序:

ldr r16, (r15); Line 1
ldr r17, 4(r15) ; Line 2
beq r16,r17,100 ; Line 3
str r17, (r15); Line 4
100:; Line 5


第一行語(yǔ)句將寄存器15所指示的地址中的值加載到寄存器16中 。接下來(lái)將鄰接單元內(nèi)容加載到寄存器17中 。第三行語(yǔ)句比較寄存器16和寄存器17中的值,如果相等則跳轉(zhuǎn)到標(biāo)號(hào)100處,否則繼續(xù)執(zhí)行第四行語(yǔ)句:將 寄存器17的內(nèi)容存入內(nèi)存中 。如果寄存器中值相等則無(wú)須保存 。匯編級(jí)程序一般冗長(zhǎng)并且很難編寫(xiě),同時(shí)還容易出錯(cuò) 。Linux核心中只有很少一部分是用匯編語(yǔ)言編寫(xiě),并且這些都是為了提高效率或者是需要兼容不同的CPU 。


2.1.2 C編程語(yǔ)言和編譯器
用匯編語(yǔ)言編寫(xiě)程序是一件困難且耗時(shí)的工作 。同時(shí)還容易出錯(cuò)并且程序不可移植:只能在某一特定處理器 家族上運(yùn)行 。而用C語(yǔ)言這樣的與具體機(jī)器無(wú)關(guān)的語(yǔ)言就要好得多 。C程序語(yǔ)言允許用它所提供的邏輯算法來(lái) 描敘程序同時(shí)它提供編譯器工具將C程序轉(zhuǎn)換成匯編語(yǔ)言并最終產(chǎn)生機(jī)器相關(guān)代碼 。好的編譯器能產(chǎn)生和匯編語(yǔ)言程序相接近的效率 。Linux內(nèi)核中大部分用C語(yǔ)言來(lái)編寫(xiě),以下是一段C語(yǔ)言片段:

if (x != y)
x = y ;

它所執(zhí)行的任務(wù)和匯編語(yǔ)言代碼示例中相同 。如果變量X的值和變量Y的不相同則將Y的內(nèi)容賦予X 。C代碼被 組織成子程序,單獨(dú)執(zhí)行某一任務(wù) 。子程序可以返回由C支持的任何數(shù)據(jù)類型的值 。較龐大的程序如Linux 核心由許多單獨(dú)的C源代碼模塊組成,每個(gè)模塊有其自身的子程序與數(shù)據(jù)結(jié)構(gòu) 。這些C源代碼模塊將相關(guān)函數(shù)組合起來(lái)完成如文件處理等功能 。C支持許多類型的變量,變量是一個(gè)通過(guò)符號(hào)名稱引用的內(nèi)存位置 。在以上的例子中,X和Y都是內(nèi)存中的位置 。程序員并不關(guān)心變量放在什么地方,這些工作由連接程序來(lái)完成 。有些變量包含不同類型的數(shù)據(jù),整數(shù)和浮點(diǎn)數(shù),以及指針 。指針是那些包含其他數(shù)據(jù)內(nèi)存位置或者地址的變量 。假設(shè)有變量X,位于內(nèi)存地址0x80010000處 。你可以使用指針變量px來(lái)指向X,則px的值為0x80010000 。C語(yǔ)言允許相關(guān)變量組合起來(lái)形成數(shù)據(jù)結(jié)構(gòu),例如:

struct {
int i ;
char b ;
} my_struct ;

這是一個(gè)叫做my_struct的結(jié)構(gòu),它包含兩個(gè)元素,一個(gè)是32位的整數(shù)i,另外一個(gè)是8位的字符b 。


2.1.3 連接程序
連接程序是一個(gè)將幾個(gè)目標(biāo)模塊和庫(kù)過(guò)程連接起來(lái)形成單一程序的應(yīng)用 。目標(biāo)模塊是從匯編器或者編譯器中產(chǎn)生的機(jī)器代碼,它包含可執(zhí)行代碼和數(shù)據(jù),模塊結(jié)合在一起形成程序 。例如一個(gè)模塊可能包含程序中所有的數(shù)據(jù)庫(kù)函數(shù)而另一個(gè)主要處理命令行參數(shù) 。連接程序修改目標(biāo)模塊之間的引用關(guān)系,使得在某一模塊中引用的數(shù)據(jù)或者子程序的確存在于其他模塊中 。Linux核心是由許多目標(biāo)模塊連接形成的龐大程序 。

推薦閱讀