【操做系統學習筆記】操做系統基礎

什麼是操做系統?

先看下面的一張圖
clipboard.png
你會聯想到什麼?沒錯這是整個計算機啊。
咱們講計算機是用來幫助人們解決一些實際問題的工具
那咱們不妨先探究一下,在屏幕上輸入「hello」,計算機內部都會進行哪些工做吧。ios

輸出「hello」的工做

clipboard.png

  1. cpu發指令給內存,把內存地址爲300的地方東西拿出來,寫入到777顯存地址。屏幕出現h
  2. 同理e,l,l,o。

這是系統內部是這麼操做的,然而實際中咱們是怎麼操做的呢?
咱們的程序是這樣的:printf("hello")
而這時計算機已經穿上了衣服。工具

clipboard.png
直接就會在屏幕上面輸出「hello」!
因此,咱們有了操做系統之後,咱們就能從應用程序,透過操做系統,來直接操做計算機硬件。spa

因此咱們知道了,所謂操做系統,就是在硬件之上包了一層軟件,讓咱們使用計算機更加便捷和高效操作系統

準確的說操做系統很難,很難,絕知此事要躬行啊!!!指針

打開操做系統

上層應用經過操做系統提供的接口,來使用操做系統。code

讓咱們打開鋼琴的蓋子,看看操做系統內部是怎麼運做的吧。
從打開電源開始,計算機作了什麼事情呢?要解決這個問題,就要解決計算機是怎麼工做的呢?blog

計算機的工做方式。

圖靈

1936,英國圖靈提出了一種模型。
圖靈機:
clipboard.png
由此能夠看出,圖靈機和現代的計算機還有必定的距離,因此演化成了通用圖靈機。接口

clipboard.png

控制器首先讀邏輯,好比讀進來加法的邏輯,那他就作加法的運算,若是讀進來的是乘法的邏輯,那麼他就作乘法的運算。這更像是一種通用的模型,也就是所謂的通用圖靈機。這就很像計算機了,把程序載入進來,就會執行相應的功能。ip

馮諾依曼

1946年,馮諾依曼提出存儲程序思想。
把程序和數據存放在內存裏,,而後載入到控制器中解釋執行,計算機就會一步步的完成程序的工做。內存

clipboard.png

一些知識:

IR的全稱應該是Instructinon register
指令寄存器是用來存放指令的,存放當前正在執行的指令,包括指令的操做碼,地址碼,地址信息

PC的全稱是program counter
程序計數器,是用來計數的,指示指令在存儲器的存放位置,也就是個地址信息
在彙編中用寄存器IP表示pc

具體的操做流程,

  1. 將程序載入到(存儲器)內存中
  2. 用PC指針指向程序的存放地址。
  3. 取址執行。取址執行,,,,取址執行。。。自動的進行

因此計算機的工做方式,用四個字歸納就是取址執行

打開操做系統的第一句指令

也就是PC=?
在X86 PC的執行過程:

clipboard.png

內存中首先有一個固化的區域,存在着基本的輸入輸出功能,叫作ROM BIOS,固化在內存的0xFFFF0處。

開機前,硬件自動的設置好CS=0xFFFF;IP=0x0000處(CS:段寄存器 iP:段內的偏移。)造成的地質就是CS<<4+IP

從0磁道0扇區讀入1個扇區 也就是 512 個字節,讀到了0x7c00處,這個0磁道0扇區就是操做系統的引導扇區。

引導扇區代碼:bootsect.s

編譯相關知識
代碼解析

注意:以s結尾的是彙編代碼。
clipboard.png

這段代碼 從start開始:

mov ax, #BOOTSEG     mov ds,ax

也就是說上面的代碼的做用是 bios將bootsect從7c00處挪到了9000這個地方。

clipboard.png

jumi 間接跳轉 go 賦給 ip ,INITSEG 賦給cs,這樣就造成了一個地址,想想這樣跳到哪裏去了呢?

如今bootsect已經挪到了9000的這個地方,因此裏面go的地址,也已經挪到了另外一個地址,因此調轉的仍是下一行代碼go所在的地址!

繼續順序執行。

int 0x13 中斷

從第2個扇區開始讀4個扇區,載入setup

讀入setup模塊後

clipboard.png

bios int 0x10 中斷

是顯示中斷。bp 表示的要顯示的字符在內存中的位置。因此要把msg1的字符數據打到光標的位置,這就須要獲取一下光標的位置 xor bh,bh

總結

bootsect.s作了什麼事情呢?

首先咱們知道的操做系統原本在硬盤上面,電源打開,就必須從磁盤載入到內存中,纔會取址執行,那麼bootsect.s就作了這件事。(分段讀入)具體以下:

一、 先讀入setup 顯示logo。

  1. int 0x13號中斷,將system讀進來。如今爲止,操做系統就在內存中了!

如今bootsect.c執行完畢了,下面應該把控制權轉給setup了,利用jumpi 0,SETUPSEG 段間跳轉能夠實現。cs《4 + ip

操做系統的啓動

setup模塊 即setup.s

clipboard.png

未完待續。。。

相關文章
相關標籤/搜索