Hello.c源程序被編譯系統(tǒng)翻譯成了計算機能看懂的可執(zhí)行目標文件hello之后就一直存放在磁盤中骑冗。今天杖们,主人又在“口令發(fā)號中心”shell中發(fā)布了名為”./hello“的任務恐疲,為了搞清楚運行hello時發(fā)生了什么,我們得先了解下計算機中的硬件組織
主板【motherboard】
拆開計算機可以看到一塊板子上有許多插槽、引腳、線路之類的镜遣,這個板子叫”主板“(英文名叫”Motherboard“)顧名思義,主板相當于一種城市士袄,CPU悲关、內(nèi)存、顯卡等各個組件都在主板這座城市里安家娄柳,并過著緊湊而又有條不紊的生活坚洽。主板上每個組件都有自己的家,也就是他們都有一個獨屬于他們的門牌號(專業(yè)術語是“I/O地址”)西土,平時互相傳輸消息時就會非常闊氣地包一輛Bus(總線)專車。但Bus專車數(shù)量太有限了鞍盗,常常需要排很久的隊需了,以前沒有專車控制中心(總線控制器)的時候跳昼,組件們都把要傳數(shù)據(jù)的消息發(fā)給CPU,CPU每時每刻都要處理上千條消息肋乍,實在太累了鹅颊,而且治安也不好,經(jīng)常發(fā)生插隊(搶占)行為墓造,因此主人就專門建了一個”專車控制中心”(總線控制器)堪伍,組件們都將申請包車(獲取總線控制權)的請求發(fā)到專車控制中心,大大減輕了CPU的工作量觅闽,CPU可樂呵了帝雇。
主板的構成中最重要的莫過于“芯片組”了,芯片組一般又分為兩個橋接器來控制各組件的通信蛉拙,分別是:北橋(Northbridge)負責連接速度較快的CPU尸闸、內(nèi)存和顯卡等;南橋(Southbridge)負責速度較慢的周邊接口,包括硬盤孕锄、USB吮廉、網(wǎng)卡等。
芯片組總是操著世界和平的心干著最精細的活畸肆,它專門負責各個組件之間的通信(因為總線專車就是芯片組的一個組成部件)宦芦,還負責給各組件分配電源,那是相當?shù)孛β蛋≈崞辏38梢粫壕蜏喩戆l(fā)燙(尤其是北橋這個家伙调卑,因為負責CPU與內(nèi)存之間的溝通,常常散發(fā)高熱量)因此豁辉,主人就在主板上外接一些小風扇或者是散熱片幫助主板散熱令野。
問:計算機組件這么多,芯片組要怎么知道如何負責通信盎占丁气破?
芯片組:這得多虧了我的好伙計“總線(Bus)”,簡直是新一代勞模餐抢!以前沒有總線的時候现使,例如CPU想要跟某個I/O設備通信,那就在CPU與這個I/O設備間接一根線旷痕,但是你都看到了主板上有這么多組件呢碳锈,要是每兩個組件間接一根線,那得多少根線啊欺抗,把城市線路弄得錯綜復雜不說售碳,最麻煩的是要是來了個新人,還得規(guī)劃線路布局……想著腦袋就疼,現(xiàn)在有了總線這個好家伙贸人,大家都把自己掛在這一條“總線”上间景,當CPU想找誰了,就在上面吼一聲艺智。
總線【bus】
芯片組:通信其實就是傳輸數(shù)據(jù)倘要,看到上圖中的箭頭了嗎,就是我的好伙計“總線”了十拣,它是用來傳輸數(shù)據(jù)的主要通道封拧。如果說主板是一座城市,那么總線就像是城市里的公共汽車(bus)夭问,能按照固定行車路線泽西,公交車攜帶的是乘客,總線則是攜帶信息字節(jié)在各個組件間傳遞甲喝。我們都知道一輛公交車容納乘客的數(shù)量是規(guī)定好了的尝苇,總線也是一樣,通巢号郑總線被人們規(guī)定一次只能傳輸一定長度的字節(jié)塊糠溜,也就是我們常說的“字(word)”(字中的字節(jié)數(shù),即字長直撤,是一個基本的系統(tǒng)參數(shù)非竿,在各個系統(tǒng)中又不盡相同)。我們假設字長為4個字節(jié)(32位)谋竖,并且總線每次只傳送一個字红柱,但是很多時候我們傳送的數(shù)據(jù)遠遠大于一個字,因此蓖乘,總線下頭又有許多小弟锤悄,而所有小弟傳輸?shù)臄?shù)據(jù)量(總線可同時傳輸?shù)臄?shù)據(jù)量)就成為”寬度(width)“,以比特(bit)為單位嘉抒,總線寬度越大零聚,傳輸性能就越好。
除此之外些侍,我們都曉得公交車也是分很多種類的隶症,比如跑長途的、普通的公交車岗宣,有的時候還可以包一輛公交車呢蚂会!總線也是一樣的,在我們芯片組上的每條總線都被賦予一個特定功能耗式,現(xiàn)在計算機一般有五類總線:數(shù)據(jù)總線胁住、地址總線趁猴、控制總線、擴展總線措嵌、局部總線躲叼。
數(shù)據(jù)總線(Data Bus):這是專門為CPU和主存(RAM之間通信配備的一個伙計,因為他倆可以說是咱主板城的VVIP企巢!干的活超級辛苦,而且從開機就沒閑下來過让蕾,這個伙計平時就在CPU和主存間來回傳送需要處理或是需要儲存的數(shù)據(jù)浪规;
地址總線(Address Bus):這個伙計用來指定在主存之中存儲的數(shù)據(jù)的地址——往往CPU大哥吼上一聲,被喊道的組件就得把CPU大哥要的數(shù)據(jù)先放到地址總線上笋婿,由這個伙計送到主存中,接著就是數(shù)據(jù)總線伙計干的事兒了顿颅;
控制總線(Control Bus):這個伙計將CPU大哥發(fā)出的信號/命令缸濒,傳送到周邊設備庇配,告知這些設備要干活了;
擴展總線(Expansion Bus):連接擴展槽和計算機啸澡;
局部總線(Local Bus):取代更高速數(shù)據(jù)傳輸?shù)臄U展總線。
其中數(shù)據(jù)總線、地址總線蜀细、控制總線,也稱“系統(tǒng)總線”,使我們經(jīng)常說的“總線”番舆。
嗯恨狈,讓我把電話轉(zhuǎn)接給總線,他會告訴你們更詳細的內(nèi)容吗氏。
……
總線:嘿,你好等太。首先瞻想,我先給你們介紹下我們這一行的行話吧贵少,傳送消息一方叫做“主模塊”录平,接收消息的一方叫做“從模塊”,除了偶爾的特殊情況,數(shù)據(jù)的傳送都是在主模塊與一個從模塊之間進行,嗯叛赚,還有一個行業(yè)規(guī)定一定要記住“總線上同一時刻僅有一個主模塊占用”澡绩!我們的工作有點像快遞員的工作。
“總線控制器”是咱們快遞員的頭頭俺附,我們都由它管著肥卡,比如有幾個主模塊想要傳送消息,必須先向頭頭“總線控制器”申請總線控制權事镣,頭頭用一種算法判斷出優(yōu)先權步鉴,選出一個主模塊同時給這個主模塊限制了使用我們的時間(不能讓其他主模塊老等著嘛,都是客戶呢Aв础)氛琢,接著呢,得到控制權的主模塊得進行尋址(目的地址)通知被訪問的從模塊進行消息傳輸随闪。得到從模塊的確認后立即進入消息傳送過程阳似。消息傳送根據(jù)讀或?qū)懛绞酱_定消息流向,“讀”時為從模塊到主模塊“蕴掏,”寫“時由主模塊到從模塊障般。一次消息傳送可以是傳遞一個數(shù)據(jù)调鲸,也可以是多個數(shù)據(jù),我們還要在數(shù)據(jù)傳送完成后或者在多個數(shù)據(jù)傳送中進行錯誤檢測(發(fā)錯快遞了啊挽荡,快遞有損懊晔),一旦發(fā)現(xiàn)錯誤就得做出相應處理定拟。大概就是下面這張圖描繪的過程于微。