程式儲存在磁碟上,程式執行在記憶體中,我們雙擊執行乙個程式的時候,作業系統通過檔案管理器找到檔案資料儲存的具體位置(通過磁碟定址技術),然後將程式載入到記憶體(每個程序對應乙個虛擬記憶體,就相當於每個程序獨自占有主記憶體,每個程序看到的記憶體位址都是一樣的,稱為虛擬位址空間),程式不會全部載入到記憶體,它只會載入需要執行的部分(這裡涉及到缺頁中斷的處理)。
程式執行在記憶體中是以程序的形式存在的,在作業系統中,乙個程序可以包含多個執行緒,執行緒共同享有程序的資源,程序是作業系統分配資源的基本單位,執行緒是cpu排程的基本單位。而程序最重要的組成叫做pcb(程序控制塊),它包含程序的識別符號、處理器資訊(暫存器,程式計數器值等)、程序排程資訊(程序的優先順序,狀態等)、程序控制資訊(程式的資料位址,連線指標,資源等)。
我們在計算機可以同時進行多個操作(寫**的同時還可以聽**),這些程式執行都是由cpu分配時間片去執行的,我們看上去這些程式同時在執行,其實是由cpu高速運轉,來回切換不同的程式執行所產生的,cpu的執行速度很快,通常是ghz,記憶體的是mhz,而磁碟的速度更慢,cpu和記憶體它們之間速度不匹配那麼如何拿到資料呢?cpu從記憶體中讀取資料計算後返回,這圖中通過快取記憶體,l1\l2\l3快取,它們解決了cpu和記憶體速度不匹配還能準確的互動資料的問題。
應用程式通過作業系統來互動,作業系統的核心是核心,也就是應用程式和核心進行互動,然後核心給應用程式分配資源(記憶體等),最後由cpu排程執行。上面說過,程式執行在虛擬記憶體當中,虛擬記憶體中位址連續,這樣才能保證讀取程式的效率。從磁碟中讀取乙個程式,首先要找到程式存放的具體位置(硬碟訪問、讀取資料,首先要做的就是定址,就是在硬碟上就要找到對應的磁碟柱面、磁頭以及對應的扇區),需要減少io的時間,也就是磁碟讀取程式的時間,只有記憶體位址連續,這樣才能減少磁碟定址的時間。下圖是window作業系統中虛擬記憶體的介紹(ram:隨機訪問儲存器,也成為主存[記憶體包含主存];分頁:一頁大小4kb,主要是為了減少記憶體碎片)。
說明:多執行緒的併發執行就是乙個程式的指令和另乙個程式的指令交錯執行,而這種交錯執行的機制稱為上下文切換。作業系統會保持跟蹤程序執行所需要的所有狀態資訊。這種狀態就是上下文資訊,比如pc和暫存器檔案的當前值,以及主存的內容。
程式是怎樣執行起來的ch01 aboutCPU
1.要想知道程式是怎麼執行的,為什麼需要了解cpu?2.從功能上劃分,cpu可以分為那幾個部分?對程式設計師來說,最重要的是哪一部分?3.cpu解釋和執行程式的大致流程是怎樣的?4.為什麼對於程式設計師來說,cpu是暫存器的集合?5.暫存器的功能和物理實體,分類?6.決定程式流程的是什麼?程式流程可...
程式是怎樣執行起來的ch04 記憶體
1.為什麼程式設計師必須要了解記憶體?答 雖然記憶體的物理結構就是ic構成的,每個記憶體單元也都有固定的實體地址。儲存單元的實體地址是唯一的。intel8086cpu有20根位址線,因此其儲存空間可達2的20次方 1m個位元組單元 1mb 位址都是從0開始的,在20位位址線的儲存空間中採用十六進製制...
計算機是怎樣執行的?
微機的工作過程就是不斷地從記憶體中取出指令並執行指令的過程!當開始執行程式時,首先應把第一條指令所在儲存單元的位址賦予程式計數器pc,然後機器就進入了取指階段。在取指階段,cpu從記憶體中讀取的內容必為指令。然後送往資料緩衝暫存器dr,經dr送往指令暫存器ir。之後由指令解碼器id對ir中的指令的操...