天天看點

作業系統基本知識(一)

計算機系統體系結構:

  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,都可以被直接使用。

作業系統基本知識(一)

作業系統的啟動過程: 

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号中斷例程中。

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 為例,說明:

具體參考:https://www.cnblogs.com/ronny/p/7787259.html, 寫的很明白;

作業系統基本知識(一)