計算機系統體系結構:
- 單處理器的計算機系統,它隻有一個general purpose 的處理器,它有一個CPU來執行通用的指令集, 另外,裡面也包括一些專用的控制器(處理器),比如控制硬碟、網卡、鍵盤的等,這些控制器通常由作業系統管理;
-
多處理器的計算機系統,可以分為非對稱型(asymmetric multiprocessing )與對稱型(symmetric multiprocessing, SMP); 在非對稱型的多處理器系統中,由其中一個處理器控制與監督其它的處理器工作; 在對稱型的多處理器系統中,所有的處理器都是平等的。 對于多處理器計算機系統,通常每一個處理器都有自己的寄存器與緩存,是以的處理器都共享實體記憶體的;
另外,現代的CPU設計,通常在一個chip上設計多個計算單元,常稱為多核處理器, 從2006年以後, 現在Intel 與AMD的CPU都本都是多核處理器了。
- 叢集計算機系統
作業系統的相關操作:
- 通過雙模或多模(dual-mode or multimode) 操作 來确定 可以區分系統(核心或特權)指令還是使用者指令, 實作的方法是通過硬體增加一個mode 位來識别; 把一些危險的或特征重要的指令設為特權指令,這樣使用者就無法執行,确定作業系統的性;
- 使用一個timer 進行周期性的中斷,來確定了作業系統可以一直掌控着CPU的控制權. 比如,萬一個使用者進入無限循環時, 通過這麼一個中斷可以把CPU的控制權交給作業系統;
作業系統結構:
-
什麼是系統調用(system calls)?
因為在使用者狀态是沒有辦法執行核心指令,怎麼辦??那就通過系統調用來完成吧。它是由作業系統核心提供的一些服務,包括:程序管理、檔案操作、記憶體管理、通信等;
-
什麼是API(application programming interface)?
它是應用程式接口, 對于應用程式程式設計人員是可見的。 它其實是對 系統調用的封裝,一個API可以對應一個系統調用,也可以包括多個system calls. 當程式設計人員使用需要使用核心功能時, 不需要直接調用系統調用,而是通過API來完成,API再去調用相應的systm calls。 為什麼這麼做??1. 為了程式的可移植性,API常常可以做到統一,而system call 的實作可以不不一樣;2. 使用API比直接使用 system call 要簡單的多。
常用的三種API: windows系統的windows API; POSIX based 的系統(unix, linux, MAc OSX)的 POSIX API; JAVA虛拟機的 Java API;
-
什麼是 system call interface?
它就是系統調用接口, 它可以截獲API中使用的系統函數調用, 然後system call interface 再調用實際的 核心函數完成任務; system call interface 起到 在API與實際的核函數之間的link 作用;
-
作業系統的結構組成?
1)簡單的 monolithic 作業系統;整個核心裡包括很多東西;性能高,但是維護、調試難。
2) 分層的結構,實作簡單;
3)microkernel結構,把一些必要的功能加入核心,其它的都放入到使用者态裡去;
4)子產品化的結構: 一些必要的功能在核心,加入一些可以加載的其它子產品(在核心态);
5) hybrid system :雜交以上的;
作業系統的啟動: (講啟動過程 ,重點說了一下在加載硬碟上的 bootloader程式之前,電腦都幹了哪些事, 具體到 bootloader程式, 不同的作業系統不一樣吧)
了解一些背景知識:
1. CS:IP 兩個寄存器訓示了 CPU 目前将要讀取的指令的位址,其中 CS 為代碼段寄存器,而 IP 為指令指針寄存器 。
2. 1979年,Intel 推出了8088 CPU, 8088内部資料總線都是16位,外部資料總線是8位,可以尋址 1024 KB 的記憶體; 1981年8088晶片首次用于IBM PC機中,開創了全新的微機時代, 它運作的作業系統也是第一代的DOS系統。也正是從8088開始,PC機(個人電腦)的概念開始在全世界範圍内發展起來。
3. PC機的設計師将8088CPU 可以尋址的 1M 中的低端640KB用作RAM,供DOS及應用程式使用, 這就是640K的基本記憶體; 高端的384KB常稱作上位記憶體, 則保留給ROM、視訊适配卡等系統使用。從此,這個界限便被确定了下來并且沿用至今。這384K中的的低128KB是顯示緩沖區,高64KB是系統BIOS(基本輸入/輸出系統)空間,中間192KB空間用于其它留用,如下圖所示。在微軟的作業系統沒有徹底脫離DOS的時候,即使你的電腦裝有幾兆或幾十兆記憶體,但如果你使用以DOS為核心的作業系統,那麼你也隻有640K的記憶體可以直接使用,1M以上的記憶體要通過一些記憶體管理工具才能使用。從Windows 95開始,才不存在正常記憶體的限制了,所有的記憶體,不管是8M還是128M,都可以被直接使用。
作業系統的啟動過程:
1. 當在我們剛剛接通電源的時候,整個系統由BIOS控制,電壓還不太穩定,主機闆晶片組會向CPU發出reset的指令讓CPU開始初始化,同時主機闆晶片組等待電源發出POWE GOOD指令,一旦電源發出POWER GOOD指令,主機闆晶片組就會撤出 reset 的指令, 此時,這時候,CS:IP 兩個寄存器指向FFFF0H位址, CPU從 FFFF0H 位址開始執行尋址指令(這個位址是在BIOS内而不再記憶體裡面),在這個位址中無論是AMI BIOS還是Award BIOS,在這個位址中都會存儲一條跳轉指令,直接跳轉到系統BIOS中真正的啟動代碼處(這個代碼一定在 F0000H至 FFFFFH之間的某個地方),BIOS的代碼都是在BIOS晶片ROM中的,那個跳轉指令也是在ROM中的。
補充:為什麼是 FFFF0H的位置加入跳轉指令呢?
BIOS ROM晶片裡面的程式是在計算機出廠的時候直接燒錄在裡面的,完成一些主機自檢等操作,并提 供一些通路磁盤等基本輸入輸出服務,由于不同的計算機廠商生産的計算機所帶的外設不一樣,是以,這段程式大小也限機型的不同而不一樣, 是以,不能把這個段代碼的位址設定為從 00000H開始, 為了解決這個問題,8086規 定,CPU均從0xFFFF0處開始執行,而在0xFFFF0處,放一條無條件轉移指令JMP,跳轉到BIOS的代碼處(這個都是廠商自己規定);
2. 運作BISO的代碼,幹什麼事呢?POST自檢!
主要的工作就是執行主機自檢(POST),當BIOS檢查到硬體正常後,按照 CMOS 中對啟動裝置的設定順序檢測可用的啟動裝置。BIOS将相應啟動裝置的第一個扇區(也就是MBR扇區)讀入記憶體位址為0000:7C00H 處,并檢查MBR的結束标志位是否等于55AAH(活動盤的标志),若不等于則轉去嘗試其他啟動裝置,如果沒有啟動裝置滿足要求則顯示"NO ROM BASIC"然後當機。
補充:為什麼是07C00H處呢?(http://blog.csdn.net/bkxiaoc/article/details/50380835)“0x7C00” 第一次出現是在 “IBM PC 5150” 的 BIOS 的 19号中斷例程中。
是現代 x86 PC 的鼻祖,為了保證向下相容的原則,”0x7C00”得以保留。 19号中斷例程 就是 “POST”(Power On Self Test) ,上電自檢(包括檢查是否存在驅動器),之後将啟動盤的第一分區的第一扇區的 512b 資料拷貝到 0x7c00處。 0x7c00”是由 IBM PC 5150 BIOS開發團隊決定(David Bradley博士)。
IBM PC 5150
“0x7C00 = 32KiB - 1024B” 有什麼特殊含義? 是為了解決系統和 CPU 記憶體分布的需求!!
BIOS 決定這個位址的理由如下:
系統加電啟動後,可以自由使用 0x7c00起始的, 32KB 的最後 1024B空間。
- 32kb是符合(DOS)系統加載的最小空間
- 8086/8088 0x0 - 0x3ff用于BIOS的中斷向量和BIOS資料區域。
- 引導扇區是512位元組,boot 程式需要的資料/堆棧 大于 512 位元組。
- 是以,0x7c00, 32KB 的最後 1024B 被選中了。
3. 這時候就需要磁盤第一扇區上的MBR代碼了,linux與windows的代碼不一定一樣, 以linux 為例,說明:
具體參考:https://www.cnblogs.com/ronny/p/7787259.html, 寫的很明白;
。