讀《程序是怎麽跑起來的》第一章
一般所說的程序比如運動會,音樂會的各種程序,等指的是行事的先後次序。計算機程序也是一樣道理。我們在用電腦時有沒有經歷過機器,有時會出於一次死機的狀態,鼠標點什麽似乎都沒用,雙擊任何快捷方式都不動彈。就當你失去耐性,打算reset時。突然它就像酒醒了一樣,把你剛才點擊的所有操作全部都按順序執行了一遍。這其實是因為操作系統中的多個程序,因需要通過一個通道輸出,而按先後次序排隊等待造成的。
再比如像移動,聯通,電信等客服電話,客服人員與客戶相比總是少數,所有的客戶人員都占線情況下,客戶會被要求等待,直到有個有某個客服人員空下來才能讓自己先等待的客戶接通電話,這裏也是將所有當前撥打客戶的電話的客戶進行了排隊處理。
操作系統和客戶系統中都運用了一種數據結構來實現剛才提到的先進先出的排隊功能,這就是隊列。
隊列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
隊列是一種先進先出(First In First Out)的線性表,簡稱FIFO。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。假設隊列是q=(a1,a2,……,an),那麽a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,列在最後。這也比較符合我們通常生活中的習慣,排在第一個的優先出列,最後來的當然排在隊伍最後。
硬盤和磁盤等媒介上保存的程序被復制到內存後才能執行,內存中保存的命令和數據的場所通過地址的標記和指定地址有整數值表示,計算機構成袁建忠,根據程序的指令來進行數據運算,並控制整個計算機的射被稱作CPU,中文名稱中央處理器。CPU所負責的就是解釋和運行最終轉換成機器語言的程序內容。一個CPU內部會有20到100個寄存器,控制己負責把那學校的指定數據等讀入寄存器,並根據指令的執行結果來控制整個計算機,運算器負責從內存讀取寄存器的數據,始終負責發出CPU開始計時的時鐘信號。時鐘信號表示時鐘信號的頻率,也就是說時鐘信號的頻率越高,CPU運行速度越快。
指令周期,也稱為機器周期或讀取-執行周期,逝者CPU從內存中獲取一條指令到執行磁條指定所經歷的步驟。每臺計算機的指令集可能不同,因此指令周期也不同,但一般有以下四個階段:
1.指令獲取:CPU內有程序計數器PC,它存儲了下一條將要執行的指令的地址。處理器按PC存儲的地址,到內存中,獲取指令的內容,PC加1,經數據總線將指令存入指令寄存器IR中。
2.指令解碼:指令譯碼器解釋IR內的指令。如果指令有一個間接地址,則有效地址和所需數據從主存中讀取,並存儲於數據寄存器中。
3.指令執行:控制單元將譯碼信息作為控制信號序列傳送給CPU相應的功能單元來執行指令,如讀取寄存器中的值,將寄存器中的值傳送給ALU,以執行算術或邏輯運算,將結果寫回寄存器等。ALU,接收到相應的信息後,會反饋一個條件信號給控制單元。
4.結果存儲:操作所產生的結果可以存儲在主存,或者發送到輸出設備。根據ALU反饋的信息,程序計數器將更新為下一條指令執行的地址。
此周期將重復。其中將步驟1和2的稱為取指周期。這些步驟對每個指令而言都是相同的。取指周期是從指令字獲取操作碼和操作數並進行譯碼。步驟3和4成為執行周期。這些步驟因指令而異。執行周期首先是內存處理,數據在CPU和輸入/輸出模塊之間傳輸;其次是數據處理階段,對數據進行算術運算以及邏輯運算;然後是集中變更階段,執行諸如跳轉等操作序列;最後是對所有步驟進行綜合。
機器人指令的主要類型和功能:
1.數據傳送指令:寄存器和內存,內存和內存,寄存器和外圍設備之間的數據讀寫操作
2.運算指令:用累加寄存器執行算術運算,邏輯運算,比較運算和移位運算
3.跳轉指令:實現條件分支,循環,強制跳轉等
4.call/return指令:函數的調用/返回調用前的地址
讀《程序是怎麽跑起來的》第一章