計算機系統體系結構:

  1. 單處理器的計算機系統,它只有一個general purpose 的處理器,它有一個CPU來執行通用的指令集,    另外,裡面也包括一些專用的控制器(處理器),比如控制硬碟、網絡卡、鍵盤的等,這些控制器通常由作業系統管理; 
  2. 多處理器的計算機系統,可以分為非對稱型(asymmetric multiprocessing )與對稱型(symmetric multiprocessing, SMP);  在非對稱型的多處理器系統中,由其中一個處理器控制與監督其它的處理器工作; 在對稱型的多處理器系統中,所有的處理器都是平等的。 對於多處理器計算機系統,通常每一個處理器都有自己的暫存器與快取,所以的處理器都共享實體記憶體的; 
    另外,現代的CPU設計,通常在一個chip上設計多個計算單元,常稱為多核處理器, 從2006年以後, 現在Intel 與AMD的CPU都本都是多核處理器了。
  3. 叢集計算機系統

作業系統的相關操作:

  1. 通過雙模或多模(dual-mode or multimode) 操作 來確定 可以區分系統(核心或特權)指令還是使用者指令, 實現的方法是通過硬體增加一個mode 位來識別; 把一些危險的或特徵重要的指令設為特權指令,這樣使用者就無法執行,確定作業系統的性;
  2. 使用一個timer 進行週期性的中斷,來確保了作業系統可以一直掌控著CPU的控制權.  比如,萬一個使用者進入無限迴圈時,  通過這麼一箇中斷可以把CPU的控制權交給作業系統;

作業系統結構:

  1. 什麼是系統呼叫(system calls)?
    因為在使用者狀態是沒有辦法執行核心指令,怎麼辦??那就通過系統呼叫來完成吧。它是由作業系統核心提供的一些服務,包括:程序管理、檔案操作、記憶體管理、通訊等;
  2. 什麼是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;
  3. 什麼是 system call interface?
    它就是系統呼叫介面, 它可以截獲API中使用的系統函式呼叫, 然後system call interface 再呼叫實際的 核心函式完成任務;  system call interface 起到 在API與實際的核函式之間的link 作用;
  4. 作業系統的結構組成?
    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,都可以被直接使用。

image_thumb[5]

作業系統的啟動過程: 

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"然後宕機。

“0x7C00” 第一次出現是在 “IBM PC 5150” 的 BIOS 的 19號中斷例程中。

IBM PC 5150 是現代 x86 PC 的鼻祖,為了保證向下相容的原則,”0x7C00”得以保留。 19號中斷例程 就是 “POST”(Power On Self Test) ,上電自檢(包括檢查是否存在驅動器),之後將啟動盤的第一分割槽的第一扇區的 512b 資料拷貝到 0x7c00處。  0x7c00”是由 IBM PC 5150 BIOS開發團隊決定(David Bradley博士)。

“0x7C00 = 32KiB - 1024B” 有什麼特殊含義? 是為了解決系統和 CPU 記憶體分佈的需求!!

BIOS 決定這個地址的理由如下:
  1. 32kb是符合(DOS)系統載入的最小空間
  2. 8086/8088 0x0 - 0x3ff用於BIOS的中斷向量和BIOS資料區域。
  3. 引導扇區是512位元組,boot 程式需要的資料/堆疊 大於 512 位元組。
  4. 因此,0x7c00, 32KB 的最後 1024B 被選中了。

系統加電啟動後,可以自由使用 0x7c00起始的, 32KB 的最後 1024B空間。

3. 這時候就需要磁碟第一扇區上的MBR程式碼了,linux與windows的程式碼不一定一樣, 以linux 為例,說明:

.