先看下面的一張圖
你會聯想到什麼?沒錯這是整個計算機啊。
咱們講計算機是用來幫助人們解決一些實際問題的工具
那咱們不妨先探究一下,在屏幕上輸入「hello」,計算機內部都會進行哪些工做吧。ios
這是系統內部是這麼操做的,然而實際中咱們是怎麼操做的呢?
咱們的程序是這樣的:printf("hello")
而這時計算機已經穿上了衣服。工具
直接就會在屏幕上面輸出「hello」!
因此,咱們有了操做系統之後,咱們就能從應用程序,透過操做系統,來直接操做計算機硬件。spa
因此咱們知道了,所謂操做系統,就是在硬件之上包了一層軟件,讓咱們使用計算機更加便捷和高效操作系統
準確的說操做系統很難,很難,絕知此事要躬行啊!!!指針
上層應用經過操做系統提供的接口,來使用操做系統。code
讓咱們打開鋼琴的蓋子,看看操做系統內部是怎麼運做的吧。
從打開電源開始,計算機作了什麼事情呢?要解決這個問題,就要解決計算機是怎麼工做的呢?blog
圖靈
1936,英國圖靈提出了一種模型。
圖靈機:
由此能夠看出,圖靈機和現代的計算機還有必定的距離,因此演化成了通用圖靈機。接口
控制器首先讀邏輯,好比讀進來加法的邏輯,那他就作加法的運算,若是讀進來的是乘法的邏輯,那麼他就作乘法的運算。這更像是一種通用的模型,也就是所謂的通用圖靈機。這就很像計算機了,把程序載入進來,就會執行相應的功能。ip
馮諾依曼
1946年,馮諾依曼提出存儲程序思想。
把程序和數據存放在內存裏,,而後載入到控制器中解釋執行,計算機就會一步步的完成程序的工做。內存
一些知識:
IR的全稱應該是Instructinon register
指令寄存器是用來存放指令的,存放當前正在執行的指令,包括指令的操做碼,地址碼,地址信息
PC的全稱是program counter
程序計數器,是用來計數的,指示指令在存儲器的存放位置,也就是個地址信息
在彙編中用寄存器IP表示pc
具體的操做流程,
因此計算機的工做方式,用四個字歸納就是取址執行
也就是PC=?
在X86 PC的執行過程:
內存中首先有一個固化的區域,存在着基本的輸入輸出功能,叫作ROM BIOS,固化在內存的0xFFFF0處。
開機前,硬件自動的設置好CS=0xFFFF;IP=0x0000處(CS:段寄存器 iP:段內的偏移。)造成的地質就是CS<<4+IP
從0磁道0扇區讀入1個扇區 也就是 512 個字節,讀到了0x7c00處,這個0磁道0扇區就是操做系統的引導扇區。
編譯相關知識
代碼解析
注意:以s結尾的是彙編代碼。
這段代碼 從start開始:
mov ax, #BOOTSEG mov ds,ax
也就是說上面的代碼的做用是 bios將bootsect從7c00處挪到了9000這個地方。
jumi 間接跳轉 go 賦給 ip ,INITSEG 賦給cs,這樣就造成了一個地址,想想這樣跳到哪裏去了呢?
如今bootsect已經挪到了9000的這個地方,因此裏面go的地址,也已經挪到了另外一個地址,因此調轉的仍是下一行代碼go所在的地址!
繼續順序執行。
從第2個扇區開始讀4個扇區,載入setup
是顯示中斷。bp 表示的要顯示的字符在內存中的位置。因此要把msg1的字符數據打到光標的位置,這就須要獲取一下光標的位置 xor bh,bh
bootsect.s作了什麼事情呢?
首先咱們知道的操做系統原本在硬盤上面,電源打開,就必須從磁盤載入到內存中,纔會取址執行,那麼bootsect.s就作了這件事。(分段讀入)具體以下:
一、 先讀入setup 顯示logo。
如今bootsect.c執行完畢了,下面應該把控制權轉給setup了,利用jumpi 0,SETUPSEG
段間跳轉能夠實現。cs《4 + ip
未完待續。。。