linux系統編程基礎(一) 電腦體繫結構一點基礎知識

來源:互聯網
上載者:User

無論是在CPU外部接匯流排的裝置還是在CPU內部接匯流排的裝置都有各自的位址範圍,都可以像訪問記憶體一樣訪問,很多體繫結構(比如ARM)採用這種方式操作裝置,稱為記憶體對應 I/O(Memory-mappedI/O)。但是x86比較特殊,x86對於裝置有獨立的連接埠地址空間,CPU核需要引出額外的地址線來串連片內裝置(和訪問記憶體所用的地址線不同),訪問裝置寄存器時用特殊的in/out指令(彙編),而不是和訪問記憶體用同樣的指令,這種方式稱為連接埠I/O(PortI/O)。

在x86平台上,硬碟是掛在IDE、SATA或SCSI匯流排上的裝置,儲存在硬碟上的程式是不能被CPU直接取指令執行的,作業系統在執行程式時會把它從硬碟拷貝到記憶體,這樣CPU才能取指令執行,這個過程稱為載入(Load)。程式載入到記憶體之後,成為作業系統調度執行的一個任務,就稱為進程(Process)。進程和程式不是一一對應的。一個程式可以多次載入到記憶體,成為同時啟動並執行多個進程,例如可以同時開多個終端視窗,每個視窗都運行一個Shell進程,而它們對應的程式都是磁碟上的/bin/bash檔案。

作業系統(OperatingSystem)本身也是一段儲存在磁碟上的程式,電腦在啟動時執行一段固定的啟動代碼(稱為Bootloader)首先把作業系統從磁碟載入到記憶體,然後執行作業系統中的代碼把使用者需要的其它程式載入到記憶體。作業系統和其它使用者程式的不同之處在於:作業系統是常駐記憶體的,而其它使用者程式則不一定,使用者需要運行哪個程式,作業系統就把它載入到記憶體,使用者不需要哪個程式,作業系統就把它終止掉,釋放它所佔的記憶體。作業系統最核心的功能是管理進程調度、管理記憶體的分配使用和管理各種裝置,做這些工作的程式稱為核心(Kernel),在某個系統上核心程式是/boot/vmlinuz-2.6.28-13-generic檔案,它在電腦啟動時載入到記憶體並常駐記憶體。廣義上作業系統的概念還包括一些必不可少的使用者程式,比如Shell是每個Linux系統必不可少的,而Office辦公套件則是可有可無的,所以前者也屬於廣義上作業系統的範疇,而後者屬於應用軟體。

訪問裝置還有一點和訪問記憶體不同。記憶體只是儲存資料而不會產生新的資料,如果CPU不去讀它,它也不需要主動提供資料給CPU,所以記憶體總是被動地等待被讀或者被寫。而裝置往往會自己產生資料,並且需要主動通知CPU來讀這些資料,例如敲鍵盤產生一個輸入字元,使用者希望電腦馬上響應自己的輸入,這就要求鍵盤裝置主動通知CPU來讀這個字元並做相應處理(硬中斷),給使用者響應。這是由中斷(Interrupt)機制實現的,每個裝置都有一條中斷線,通過中斷控制器串連到CPU,當裝置需要主動通知CPU時就引發一個中斷訊號,CPU正在執行的指令將被打斷,程式計數器會指向某個固定的地址(這個地址由體繫結構定義),於是CPU從這個地址開始取指令(或者說跳轉到這個地址),執行中斷服務程式(ISR,InterruptService Routine),完成中斷處理之後再返回先前被打斷的地方執行後續指令。比如某種體繫結構規定發生中斷時跳轉到地址0x00000010執行,那麼就要事先把一段ISR程式載入到這個地址,ISR程式是核心代碼的一部分,在這段代碼中首先判斷是哪個裝置引發了中斷,然後調用該裝置的中斷處理函數做進一步處理。由於各種裝置的操作方法各不相同,每種裝置都需要專門的裝置驅動程式(DeviceDriver),一個作業系統為了支援廣泛的裝置就需要有大量的裝置驅動程式,事實上Linux核心原始碼中絕大部分是裝置驅動程式。裝置驅動程式通常是核心裡的一組函數,通過讀寫裝置寄存器實現對裝置的初始化、讀、寫等操作,有些裝置還要提供一個中斷處理函數供ISR調用。

MMU(MemoryManagement Unit)將VA映射到PA是以頁(Page)為單位的,32位處理器的頁尺寸通常是4KB。例如,MMU可以通過一個映射項將VA的一頁0xb7001000~0xb7001fff映射到PA的一頁0x2000~0x2fff,如果CPU執行單元要訪問虛擬位址0xb7001008,則實際訪問到的物理地址是0x2008。實體記憶體中的頁稱為物理頁面或者頁幀(PageFrame)。虛擬記憶體的哪個頁面映射到實體記憶體的哪個頁幀是通過頁表(PageTable)來描述的,頁表儲存在實體記憶體中,MMU會尋找頁表來確定一個VA應該映射到什麼PA。

作業系統和MMU是這樣配合的:

1.作業系統在初始化或分配、釋放記憶體時會執行一些指令在實體記憶體中填寫頁表,然後用指令

設定MMU,告訴MMU頁表在實體記憶體中的什麼位置。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.