操做系統基本知識(一)

計算機系統體系結構:

  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程序, 不一樣的操做系統不同吧)

瞭解一些背景知識:html

1. CS:IP 兩個寄存器指示了 CPU 當前將要讀取的指令的地址,其中  CS  爲代碼段寄存器,而   IP  爲指令指針寄存器 。linux

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

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的位置加入跳轉指令呢?app

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

具體參考:http://www.javashuo.com/article/p-aignldhh-kh.html, 寫的很明白;

 

 

 

 

相關文章
相關標籤/搜索