數據在電腦內是如何進行傳輸的?

電腦里的數據都是0和1,或者說高電壓,低電壓,貌似是通過電子移動實現的?對這個東西在電腦里的傳送一直缺乏感性認識,求指點。

比如大型3D遊戲,在內存和顯卡之間會存在大量的數據傳送,硬體上是如何做到瞬間接收大量數據且不會出錯的?

我想到提升傳輸速度的方式是並行,比如一個晶元上有N個金屬引腳,意味著這個晶元能一次接受N位數據?但是這N位數據怎麼保證完整性,比如一系列N位數據傳輸的時候,怎麼保證每個N位數據是同步的,且不會和之前之後的比特混淆?

還有這種電腦內的數據傳輸是否存在極限速度?


以最簡單的8080匯流排為例,除了8條或者16條數據線、若干地址線以外,還有4條控制線,分別是RD, WR, CS, ALE.

讀數據時主設備會先在RD線上發出一個脈衝,從設備接收到RD信號後把數據準備好,之後主設備再讀取。

寫數據時則是主設備先把數據準備好,然後在WR線上發出一個脈衝,從設備接收到WR線的脈衝後再讀取數據。

CS、ALE分別是片選和地址鎖存,就不介紹了。

當年PC的ISA大致就是這個結構,有8條數據線、20條地址線,上述的4條控制線,此外還有一些中斷信號、供電之類。後來擴展為16位,再後來升級成了32位的PCI,但基本結構還是大同小異。

到PCI Express就很不相同了,它裡面是若干個1比特的串列「通道」,PCI Express後面的x幾就是有幾個通道,比如顯卡一般是x16。


我們來看下圖:

先看圖1。

圖1中我們看到了左右兩隻晶體管。這兩隻晶體管均接成開關態,也即它們的工作點要麼是截止,要麼是飽和。當截止時,晶體管的輸出是高電平;當飽和時,晶體管的輸出是低電平。

注意,這裡的高電平電壓很接近電源電壓,而低電平則略高於低電壓。為了方便,一般用電平來說明晶體管的輸出,而不用電壓值。

我們看到兩隻晶體管中間的連線很長。這條線又被稱為通信介質。

我們看到,左邊的晶體管輸入為高電平時,右邊的晶體管輸出亦為高電平;左邊的晶體管輸入為低電平時,右邊的晶體管輸出亦為低電平。這就是通信的傳遞過程。

再看圖2。

圖2中,我們看到了處於開關狀態的晶體管符號——反相器。

普通的反相器用於通信,則它每秒鐘至少需要發生9600次的飽和截止(0/1)變化。我們把它叫做位變化,也即9600bps。這裡的9600bps叫做通信速率。

如果通信介質和介面中有九個針孔,我們把它叫做DB9介面,則它被稱為串列通信匯流排;如果通信介質和介面中有25個針孔,我們把它叫做DB25介面,也即並行通信匯流排。

過去,串列匯流排的通信速率低於並行匯流排。但現在改進了很多,並行匯流排反而到很少見到了。

ISO國際標準化組織對計算機通信建立了一個模型,這個模型被稱為ISO的OSI模型(字母順序正好反過來,有點通信的味道在裡面)。OSI模型的第一層叫做物理層,第二層叫做數據鏈路層,第三層叫做網路層。第一層、第二層和第三層合併被稱為現場匯流排。

我們來看下圖:

圖中每一層所遵循的規範叫做通信協議。

看下圖:

這張圖中,我們看到了物理層的通信介面,並且看到了高電平和低電平。注意哦,這裡的介面是用差分電路來驅動的,不再是簡單的反相器。

物理層的通信規約是位元組。

一個位元組是8位二進位數,再加上奇偶校驗位和停止位,則一個位元組是10位二進位數。

8位二進位數換成十進位數是256。所以一個位元組可以傳送256種不同的數值狀態。

物理層的上一層是數據鏈路層。在數據鏈路層里,把位元組編碼組合成為語句,叫做幀。見下圖:

這裡的幀結構是:START是起始位元組,ADDRE是地址位元組,FUNCTION是功能碼位元組,DATA是數據位元組,CRC是校驗碼位元組,END是停止位元組,最少也有8個位元組。

我們來看一個實際的MODBUS-RTU幀:

設想,在某電力儀錶的內存地址空間2000H地址下存放了A相和B相的電流信息,共佔用了2個字長的位置,即2000H和2001H位置。這裡的「H」表示16進位數,2000H相當於10進位的8192內存地址位。電力儀錶在RS485鏈路中的ID地址是06H。PLC讀取數據的MODBUS命令是03。以下就是PLC下發的命令幀:

06 03 00 20 00 02 C4 76

解釋一下:06就是ID地址;03是讀寄存器命令;00 20是內存首地址,低位在前;00 02表示一次讀兩個字,共四個位元組的數據;C4 76 就是CRC校驗碼,它是前面的「06 03 00 20 00 02」CRC運算結果。如果電力儀錶收到這個命令幀後,發現CRC不對,則會要求PLC重發。

我們看到,這個讀寄存器命令共有8個位元組。

我們已經知道一個位元組有10位,所以一個信息幀至少有8X10=80個位。

如果某串列通信匯流排的通信速率是9600bps,也即它1秒鐘可以傳送9600個位,則它1秒鐘可以傳送9600/80=120個數據幀。

考慮到傳輸介質的延遲,還有裝置處理的延遲,以及幀之間的開始/停止位元組,通信線路上每秒最多只能發送近百個上述通信幀。

那麼電力儀錶的回應幀是什麼樣的?我們假定A相的電流是92A,B相的電流是160A,兩者的16進位數值是5CH和A0H,兩個數值共佔用4個位元組。於是回應幀為:

06 03 04 00 5C 00 A0 4C 99

解釋一下:06就是ID地址,表示這些數據來自06地址的子站;03表示回應數據是回應PLC所發讀數據的命令。前面這兩個位元組事實上就是照抄下發幀的前兩個位元組內容;04表示回應幀中數據區有4個位元組;00 5C就是92A,00 A0就是160A;4C 99是CRC校驗碼。

在網路層,它把幀組織為分組報文:

注意:上圖中的報文被拆成3個分組,所以接收方需要根據分組規則來解包。

網路層再往上,就是高層協議了,這些協議中傳遞的也都是報文。

在遊戲中,軟體使用的是高層協議,與現場匯流排協議不盡相同。那麼在電腦的軟體之間,各個軟體傳遞的報文,是什麼樣的?

舉一個例子:我們用EXCEL的VBA編了一個撲克牌小遊戲,A電腦選完某號碼後,需要B電腦把數字2填入某位置內,於是這兩台電腦必然會發生數據交換。我們來看看數據交換的模式:

我們假定這兩台電腦數據交換採用MODBUS-TCP協議。數據交換從最高層開始:

由於內容太多,也太過專業,我們就只探討網路層(乙太網)上的數據包格式吧。我們看下圖:

答案:非常類似。

不同的地方是:原先的地址ADDRE叫做ID地址,現在改成了TCP/IP下的IP地址;數據全部都位於DATA區域內;CRC也不同,換成了另外一種格式。

於是,A電腦將需要傳送的信息通過乙太網以報文的格式發送給B電腦,B電腦接到報文後,解開報文並傳送到EXCEL的VBA中,然後向B電腦的操作者發出填寫通知。當B電腦的操作者填入數據2後,B電腦又把2打包成報文,並通過乙太網發送給A,A電腦解包後把數據2填入的EXCEL VBA遊戲的相應位置中去。

在這整個過程中,既有硬體的關聯,也有軟體的關聯。OSI模型在這方面有許多規定,包括網路層的數據包格式、TCP/IP網路介面RJ45的格式、網關和路由器的形式等等,都有極其專業的規定。

=================================

最後,我們來看看題主的問題:

電腦里的數據都是0和1,或者說高電壓,低電壓,貌似是通過電子移動實現的?

大量的數據傳送,硬體上是如何做到不會出錯的?

我想到提升傳輸速度的方式是並行,但是這N位數據怎麼保證完整性,不會和之前之後的比特混淆?

是否存在信息交換的極限速率?

回答:

1)電腦中的數據都是0和1,其傳遞原理見第一張圖。

另外,請題主注意,在數據傳送過程中不能用電壓這個詞,而是要用電平這個詞。別以為只是換了名詞,其本質是避開了不同的晶體管(或者通信介面)的飽和與截止的電壓差別,而用高電平和低電平來描述它。

2)在傳遞中的糾錯有三種方式:

第一種是位元組傳輸,它相當於在文字層面的數據傳輸。它用奇偶位來實現差錯。若接收方發現奇偶關係不對,會要求發送方重發;

第二種是幀,它相當於語句層面的數據傳輸。它用CRC校驗來糾錯。同樣,若接收方發現奇偶關係不對,會要求發送方重發;

第三種是報文,它相當於對文章進行數據傳輸,並且配套了糾錯和報文分包措施。

3)物理層的介面有兩種,一種是串口,一種是並口。串口用的是9針的DB9介面,並口用的是25針的DB25介面。由於傳送速率的提高,目前並口已經淘汰。

4)在物理層和數據鏈路層,由幀結構保證數據的先後秩序不會出錯。

在網路層,由於數據包會被打成若干組,並且發送這些數據組的路徑可能不同,於是在接收方收到這些數據組後,會按原先的秩序安排先後解包,以確保數據不會混淆。

負責數據傳送路徑的是路由器,它是數據基站中價格最為昂貴的設備(以數十萬美金計價),負責不同網路之間的數據交換的是網關,而負責電腦數據傳送和接收的是網卡。

網卡用的介面叫做RJ45介面,它也是網路層的介面。

5)毫無疑問,肯定存在信息交換的極限速率。

以光纖通信介質的數據傳遞為例:

由於光纖中的光傳輸其實是不斷地反射,所以在光纜末端,矩形脈衝會發生畸變。當畸變已經無法讓接收端識別後,這時的傳輸距離和通信速率就是極限值

其它信息傳輸電纜的極限值也類似。

注意到信息交換的極限速率有兩個參數:傳輸距離通信速率

6)提示:

注意到一個有趣的問題:在物理層,數據流傳輸是有方向的,所以物理層的網路關係是直線型鏈路,它不支持星形網路結構;在網路層,它支持星形網路結構,但要用到一種設備,叫做集線器。

如果我們強制性地讓物理層也來使用星形結構的網路,會出現什麼問題?讓知友們和題主自己考慮吧。

===============

顯見,這裡面的知識量很大,這個小帖子根本就不可能講清楚。我們需要的是一本書。建議題主去看一些專門著作為好。


1.高電壓和低電壓的傳輸,與其說是電子移動不如說是電場或者說電磁波的傳播——實際上電子本身的移動速度在常規情況下並不快。

2.硬體上除了本身若干位(16位,32位,64位等,n位表示同時傳輸n個0或者1)之外,有一個內置的時鐘控制信號變化頻率,在許多計算機元件的指標中會有一個頻率指標,若干赫茲(Hz),表示每秒鐘傳輸的信號次數。實際工作時所有的信息傳輸通過時鐘控制同步處理在電纜中的電壓信號。現在主流的CPU主頻是若干GHz,也就是每秒若干個1000000000組信號,這個係數乘上剛才提到的信號傳輸位數得到一個大量的數據傳輸結果。由於低電壓和高電壓的差別大,同時電磁波傳播時間在計算機元件的尺度內可以忽略,通常不會出錯,當然也不是絕對不會,有時候會有軟體設計上對錯誤進行補償。

3.你說的N個引腳就是上面所說的若干位,前後不會混淆一方面由於硬體上一個時鐘的存在,另一方面由於信號傳播本身時間可以忽略,因此沒有問題。

4.因此可以發現,如果不考慮軟體問題和更複雜的CPU內部結構,那麼數據傳輸速度直接由頻率決定。而電磁學知識說明,當電路變化頻率對應的電磁波波長(計算公式波長lambda=frac cf,其中c是光速)和電路尺寸相接近時,「電路」的概念就不那麼合適了,或者說電磁波的性質體現得更明顯。因而主頻的進一步提高和電路的尺寸相關,而由於電學性質和工藝等原因,電路尺寸是有下限的,因此主頻也會有上限。更嚴格的關係則和電路設計以及電學元件的性能有關。


畫板人員簡單說一下,為科普已盡量避開專業辭彙和概念,專業相關人員請查驗相應規範。

1、目前來說,電腦里的數據普遍是通過電信號傳輸的,對外有光纖輸出,不過比較少見而且不常用。傳輸的信號簡單來說分兩種:通過高/低電平傳輸的單端信號,和通過兩條信號線電壓差傳輸的差分信號。

2、目前主流的顯卡與主板數據交換協議為PCI-E X8或者X16,為上述的差分信號,傳輸位寬為8或者16位。目前主流的內存與主板傳輸協議為DDR3,為上述的單端信號,傳輸位寬為32(單條內存)或者64(兩條內存組成雙通道)位。硬體上防止出錯主要措施是CRC校驗和奇偶校驗。

3、保證每個N位數據是同步的,這個比較簡單,主要手段就是做到每根線的傳輸條件基本一致即可。也就是保證每條傳輸線的特性阻抗基本相等且長度一致。如果你仔細觀察內存條、主板和顯卡的話,會發現表面的某些走線是蛇形線。這就是控制長度一致,保證信號同時到達的手段。

4、電腦內的電信號數據傳輸存在極限速度,在目前比較普及而且廉價的FR4覆銅板上大概為10Gbps,再高則信號衰減過重,基本傳不出去了。


簡要回答~

1. 數據需要由電信號攜帶並傳輸,電信號就是電平的變化。

2. 電信號本身是一種波動,其傳輸速度有兩個方面:波動頻率(信號帶寬)決定了信號傳輸的信息量,波速決定了信號的傳播速度。

3. 導線相當於濾波器,具有一定的帶寬,因此通過導線的信號帶寬有限。電信號的傳播受到光速的限制,因此信號的極限傳播速度是光速,跟電子移動速度關係不大。

4. 為提高信號傳輸速度,可以採取並行化的策略,但是並行化會帶來同步問題,反而限制了傳輸速度。解決同步問題,在硬體上可以設計蛇形線路使得線路延遲一致化,等等。為保證數據傳輸正確性,也會引入握手機制、數據校驗等機制。為規避同步問題,相當多的數字介面規範採用了串列設計。

(下圖中我們還可以看到成對的差分線,差分線路可以抵消掉共模雜訊,間接提高有用帶寬。)

綠油油的板子好養眼的~

下面是展開說明。

一、數據的物理本質

數據是對現實世界的抽象表達,數據在計算機內也需要用物理的方式進行表達。

上面的幾位答主主要是講到了數字電子計算機,事實上,在計算機發展早期,還經歷過機械式計算機和模擬電子計算機的發展階段。

機械計算機是以傳動機構的傳動關係傳輸數據,比如跳繩計數器裡面的十進位計數器,就是一個典型的機械機構。它以計數輪的位置作為狀態來存儲數據。

電子計算機以電路傳輸數據,數據在電路上是以電平(已定義的電壓範圍)來表示的。

二、關於「快慢」的問題

說到信號傳輸的快慢,這個問題包含兩方面的問題:一方面是信號的物理傳輸速度,另一方面是信號本身的帶寬,帶寬決定了單位時間內傳達的信息量。

關於信號的物理傳輸速度

在機械系統中,需要考慮的問題就很多了,比如下面有一個非常有意思的問題:

如果有一根非常長的硬棒,一端固定在地球上自轉,另一端自由,那麼硬棒自由端的線速度是否會超過光速?

其實不會,原因就在於根本不存在絕對剛性的硬棒,為感性理解這個問題,可以找一個噴水壺,噴出水柱的同時搖晃噴口,看看水柱的形狀。

對於機械計算機來說,也是一樣的道理。傳動機構本身的力學特性,決定了它只能將攜帶信息的「速度」以有限的速度傳遞到別處。這很好理解,就好比汽車有限速一樣,速度過快,老司機也會翻車。

對於電路來說,也是類似的道理。電場在介質中的傳播速度不可能超過光速,因此信號的「波前」不可能比光速跑得還要快。

無論是傳動機構還是導線,都會存在速度瓶頸,這決定了信號的物理傳輸速度的上限。

關於信號本身的帶寬

有時候我們不關心信號的傳輸速度,只關心信號能否攜帶足夠大的信息量。比如說你的朋友給你寄了一箱零食,比起快遞什麼時候到,你可能更關心包裹裡面有多少零食。

此時,我們關心的不是波前的運動速度,我們關心的是系統允許波包內多高的頻率通過。

對於電信號來講,實際電路往往存在各種電抗,這就好比機械系統中的摩擦等各種阻尼,會限制信號的頻率。換句話說,實際電路都是濾波器,並不允許任意快的信號通過,線路的帶寬,決定了能夠通過的信號的帶寬。因此,PCB工程師需要做的事情,就是儘可能優化線路,提高線路的帶寬。

前面兩個關於速度的問題,實際上是兩個問題:一方面是線路固有延遲,另一方面是線路帶寬。固有延遲主要依賴於線路長度,線路帶寬主要依賴於線路的其他特性。實際上二者的影響因素是相互作用的,例如鏈路長度會影響導線阻抗進而影響帶寬,等等。並且,在板級和晶元級電路中,線路延遲基本上可以忽略不計,倒是器件帶來的延遲需要仔細考慮。

三、如何提升傳輸速度並保證比特同步

提升速度,一方面是減小線路延遲和提高帶寬,這方面的改進往往是艱難的,涉及到非常基礎的電磁學和材料學。

另一方面,我們可以從系統結構的角度入手,比如答主提到的並行化。並行化固然可以提高鏈路帶寬,但勢必會帶來信號同步的問題。如果題主有興趣,可以觀察一下電腦主板上面的銅線,你會發現,很多線都是彎彎曲曲的。之所以將線路設計成彎曲摺疊的形狀,原因之一就是為了使並行線路的延遲一致化。

正是由於並行線的一致性問題不易解決,因此主流的介面規範幾乎都是串列的,例如通用串列匯流排USB。

多說一句:

這個問題好複雜的,答主自己也是略知一二。如果希望深入了解,可以閱讀電路、電磁場、數字電路、信號與系統、固體物理和材料學相關的書籍。


根據抽象層次來梳理下大致的概念:1 傳輸信號是數字信號,高低電平表示,可以比模擬信號更加準確的傳輸信息。

2 數字信號的處理的底層是通過最最基本的邏輯門電路來完成的,基於物理定律。

3 如果你不了解邏輯門,你可以先去研究下三極體/晶體管,在集電極輸入信號三極體可以導通,所以可以看做是一個電信號觸發的開關。接著,一堆開關排列可以構成邏輯門,用來輸出想要的邏輯。

4 許許多多的邏輯門可以構成觸發器、鎖存器、比較器、加法器、乘法器、比較器等各種奇怪的模塊。(如果想知道怎麼構成的原理請回復,有人想了解或者我閑著沒事幹的話會更新)

5 當你想實現一種功能,因此把以上一些奇怪的模塊組合在一起(一些簡單的模塊集成在一塊ic上)時,你需要幾個引腳/信號來輸入你要這個部件執行哪一種命令;你還需要幾個引腳/信號來輸入要計算/處理的數據。

這時,你做成了內存陣列、選擇器、運算器、累加器等等更加實用的部件。(同樣,如果想知道怎麼構成的原理請回復,有人想了解或者我閑著沒事幹的話會更新)

6 你做好了上述的部件以後,你想實現更複雜的功能,希望可以編程來控制電路計算,所以你想設計一個既可以存儲你要它執行的指令,又可以計算數據,最好還可以把數據輸出(顯示)給大家看的ic,你陷入了為難:這麼多模塊,怎麼才能讓不同的部件進行協同運作呢?

7 經過苦苦的研究/踩著前人的肩膀,你發現了可以搞一種叫匯流排的東西在模塊間通信以達到目的。

首先,你要傳輸數據,你需要數據匯流排;其次,你的指令要從存儲器取出執行,你需要指令/控制匯流排,來告訴各部件按照什麼命令執行;最後需要的是地址匯流排,來通信執行第幾條指令,修改哪個位元組的內存。

8 設計完成了,你用了5000個晶體管做成了一台電腦,可是好慢哦,又時居然還會出錯!

9 你苦心研究,又運用了糾錯演算法,校驗一類的程序,降低了出錯的概率,你優化了電路,使用了流水線,又把500000(這時優化了各種地方,門越來越多)個晶體管刻在晶圓上,封裝好做成了ic,再進行實驗,燒錄程序,成功執行,速度提升20倍,誤碼率0.000000001%以內,成功運行自己寫的系統。

10 上面只是科普用而已哈,表達並不嚴謹,如果有問題請指出。

11如果你感興趣,你需要研究以下內容:

模擬電路

數字電路

組合邏輯門

時序邏輯

計算機原理

編程

(當然,如果你感興趣你也可以研究:半導體材料233)

先寫這麼多啦,有用的話點個贊 謝謝~

---20161004


10月14日更新:

剛剛發現了一個非常不錯的科普視頻,是關於基本的cpu結構的,裡面提到了CPU內部以及CPU與內存之間的通訊。英文,需fq,有機器生成的字幕,無翻譯。

https://www.youtube.com/watch?v=cNN_tTXABUA

------------------原回答-------------------

1.如何表示數據

在電線中數據都是用電平表示的,用高電壓表示1,低電壓表示0。

可能大家覺得定義0和1特別簡單,只要定一個閾值V_TH,高於這個電壓就表示1,低於這個電壓表示0就可以了。但是這樣做的問題在於沒有容錯性。如果某個元件輸出了一個特別接近V_TH的電壓,那麼接收端很容易出錯(圖1上半部分)。所以,我們要讓數據0和1的電壓閾值之間有一定的差別,禁止輸出兩個閾值之間的電壓,這樣就不會有在閾值處難以區分的問題了。

圖1

可是還是類似的問題,要是有個元件輸出了特別接近V_L或者V_H的電壓怎麼辦?沒關係,有了中間的緩衝區域,我們就可以給接收信號的元件添加一定的容錯性了。具體來說,我們要求輸出電壓必須大於V_OH或者小於V_OL,但是在解釋接收到的信號的時候,只要大於V_IH就解釋為1,小於V_IL就解釋為0,這樣就把接近V_OL和和V_OH的電壓也包含了進去。如果接收到了V_IL或者V_IH之間的電壓,說明出現了錯誤或者干擾過大。這樣看上去比較複雜,但是如果理解了設計思路的話還是挺簡單的。

圖2

參見:

Logic level - Wikipedia

2.如何在傳輸時保持同步

2.1.時鐘

電腦之間的不同部件,包括同一個部件里的不同部分,是用時鐘脈衝來保持工作同步的。時鐘脈衝是由一個計時電路產生的脈衝(波形大概如圖3所示),通過導線傳輸給各個需要同步工作的元件。這些元件可以預先設計好同時在第幾個脈衝處執行某個動作,從而達到同步的效果。

圖3

參見:

3.1. HOW MEMORYWORKS WITH THE PROCESSOR · Technick.net

2.2.8b/10b編碼

當兩個部件距離太遠的時候,時鐘脈衝的傳輸也需要時間,所以無法用同一個時鐘進行同步。此時,接收端和發送端必須用各自的時鐘。為了避免兩個時鐘之間的錯位不斷累加,接收端需要通過檢測0和1之間發生跳躍的時間來不斷修正時鐘的錯位。但是如果發送端需要發送一串同樣的電平,那麼接收端就會在很長的時間裡無法進行矯正,從而導致錯位累加到能夠錯誤的程度。此時,可以用8b/10編碼,把發送的數據8位一組分組,然後變換成一種10位的編碼發送出去,接收端再反過來變換回去。這個編碼保證無論要發送的數據是什麼都會有一定的高低電平跳躍以保證接收端能夠進行時鐘錯位的矯正。

參見:

8b/10b encoding - Wikipedia

3.如何避免傳輸錯誤

若要避免數據的錯誤,可以傳輸一些冗餘的信息,讓接收端可以判斷這些冗餘的信息與接收到的信息是否一致。如果冗餘的信息足夠多,接收端還能從冗餘的信息中恢復出受到干擾的信息。

3.1.最簡單的方法:每段數據都重複發幾遍

感覺不用解釋……

3.2.奇偶校驗

這其實是兩個相似的校驗方法:奇校驗和偶校驗。奇校驗就是如果一段數據中1的個數是奇數,就在後面加一位1,否則就加一位0。偶校驗就是把加的那位反過來。加的這位數據就叫校驗位。接收端只需要計算一下接收到的數據中1的個數,看看是否和加的那個校驗位相符就能判斷是否有錯誤。校驗位無法幫助修正錯誤,不過可以讓接收端在檢測到錯誤的時候讓發送端重發。

參見:

奇偶校驗位- 維基百科

3.3.ECC

我沒具體的看,不過思路肯定還是添加冗餘信息,使得這些信息能夠幫助修正錯誤的數據。

參見:

ECC 內存是如何進行糾錯的? - 計算機

糾錯內存 - 維基百科

4.傳輸速度是否有上限

速度有兩種理解,一種是單位時間內傳輸信息的多少。在導線根數固定的情況下,當然有。首先,發送端和接收端的工作速度不能超過時鐘頻率。其次,導線上的電信號傳輸有一個截止頻率,超過這個頻率的信號的能量衰減會非常大,所以信號的變化不能超過這個頻率。當然我們可以通過波形調製在同一根導線上建立多個通信通道而不用高低電平,但是既然頻率的範圍是有限的,頻率的分配總會飽和的(而且調製解調需要更多的電路元件)。

另一種理解是信息的傳輸速度。根據狹義相對論,能量和信息的傳遞速度不可能超過光速,因此信息的傳播速度上限是光速(有一些現象看似超過了光速,但是它們無法傳遞信息。參見速度的極限就是光速嗎?為什麼? - 物理學)。但是這只是上限,實際上很難達到。用導線傳輸的信號一般稍微慢一些,例如RG-213 CXP213同軸電纜的信號傳輸速度大約是2/3倍真空光速。光纖會稍微快一點,能達到95%~99%的真空光速。(題外話:信號的傳遞速度不是電子的移動速度,而是電場的傳播速度。電子的移動速度慢極了。)

參見:

Velocity factor - Wikipedia


本科教材都有。

在中國,理論被不正確地長期地貶低了。

昨天,還有一個公司的負責人在知乎抱怨學生的技能不行。技能是自己根據理論練出來的,不是傳授得到的。運動員的技能,誰能傳授得了,傳功大法、灌頂?開玩笑。

一定要提高理論修養。

正如好幾個網友說的那樣,通信是電磁波在介質中的傳播,不是電子在導線中的運動。發送方編碼發送電磁波,接收方接收檢波。

這一點,正規教科書說得清清楚楚,物理層下的物理介質,承載著電磁波、光波、聲波,器件,就是發射或者接收電磁波而已。

作為一個從兒童時期就對電子電工就很喜歡的人,從小就被各種誤導。想起這一點,就直想罵這些蠢貨。

計算機內的數據傳輸,本質上就是一種局部數據通信協議(不提infiniband)。

和其它的局部數據通信協議的基本原理是一樣的:

1、三要素。語法、語義、時序。在一點上,與其它通信協議,並無本質區別。

2、分層。計算機內的通信,是一種局部通信,所以,類似於計算機區域網的分層,物理層、mac層、LLC層。在物理層下,還有一個器件實現。分層也與計算機區域網沒有什麼本質區別。

3、網路拓撲。點對點、匯流排、環(?)、樹、橋接,交叉矩陣。這個也和計算機區域網一樣。

先搞清楚通信需要什麼功能,或者要解決什麼問題。然後放在不同的層次中實現。

可以說,計算機內部通信,所需要的功能,或者要解決的問題和計算機區域網基本一樣。

對於簡單的設備,採用點對點通信。

最簡單的是ARM中的GPIO,什麼功能都沒有。

點對點通信中稍微複雜一些,如RS-232。

這時候,要解決的問題是編碼、同步、校驗、重傳。

觀察RS-232的分層結構,很簡單。

器件一層,串口通信電路到處都是,不說。

物理層,編碼,碼元,同步或非同步,校驗。其它的應該沒有了。

MAC層,獨佔式的,不需要定址,沒有衝突。

LLC層,不必要。重傳放在應用層去做。

點對點的高速,


電腦里的數據都是0和1,或者說高電壓,低電壓,貌似是通過電子移動實現的?對這個東西在電腦里的傳送一直缺乏感性認識,求指點。

不是電子的移動而是電場的改變。當然電場不是瞬間建立的,而是隨著半導體器件中的電子移動建立的,不過這就是很物理的東西了,電子工程層面上不需要考慮這些。

我想到提升傳輸速度的方式是並行,比如一個晶元上有N個金屬引腳,意味著這個晶元能一次接受N位數據?但是這N位數據怎麼保證完整性,比如一系列N位數據傳輸的時候,怎麼保證每個N位數據是同步的,且不會和之前之後的比特混淆?

並行,或者說提高位寬是一種方法,還有一種是提高頻率,最終的結果是傳輸速率=位寬*頻率。「晶元接受數據」這個說法是不準確的,電線就直接連在晶元的引腳上,晶元隨時在接受這些信號。任何一個引腳電壓的變化都會導致晶元狀態的變化,這個過程是不需要去主動「接受」的。在晶元設計的時候就已經決定每個引腳電平變化時晶元內部電路的變化。這也是電子和軟體不同的地方吧。

並行數據同步靠的是時鐘信號,時鐘在並行通信中是肯定要有的。時鐘通常會每傳輸一位跳變一次之類,具體的工作方式根據協議有區別,接受方發現時鐘信號變了就意味著該讀下一位了,當然這種方式也造成了並行通信的頻率不能很高。

還有這種電腦內的數據傳輸是否存在極限速度?

是的,並行通信的一個周期必須足夠長。樓上說得蛇形線就是為了提高並行通信的頻率的。


不用過於專業,就用非常簡單的語言來描述。

二進位是現代所有計算設備的基本功能,這想必誰都知道。二進位的實現是比較簡單的,0或者1而已,而實現二進位就靠電子晶體管。打個非常不恰當的比方,晶體管看作燈泡,開燈就是1,關燈就是0。任何數據都依靠各種編碼最終轉換為二進位,就是轉換為0,1,0,1的格式。依靠二進位,任何數據都可以在硬碟,內存,處理器之間儲存,因為他們的本質都是二進位的保存方式。

8個0或者1就是一位元組,表示一位,8位就是1B,1000b就是1KB,1000KB就是1MB,1000MB就是1GB,1000GB就是1TB。可以想一下,用ascii等等不同編碼方式來表示各種各樣的文字信息點陣圖顏色等等等等數據的十進位與2進位的轉換,對於人的理解是非常方便的。比如,1張1解析度是640*480的65536色jpeg圖片總共有30萬個左右的像素數量,就可以用二進位文件表示:從第一個像素開始到每一行結束用換行符表示,每一行是640位(或者641位包括換行符),總共480行,而文件結束用兩個換行符或者各種專用標識來標示出文件的結尾,把每個像素的顏色用RGB三原色的深淺表示,就是用數字代替物理顏色而用RGB編碼方式再把數字轉換成二進位儲存。這樣圖片的內容就被數字化輸出到屏幕上了。

32位操作系統下最大定址範圍就是2的32次方就是4G。

以cpu為例,i3最低端桌面低電壓處理器,晶體管數量至少在5億以上,5億晶體管在2GHZ的速率下每秒能處理多少數據?對於人來說,同時處理幾十萬個數據是非常困難的,而對於計算機來說,巨量晶體管跟高頻率處理這些運算非常簡單。

而數據如何傳輸呢?就是這些二進位文件的複製跟臨時複製,基於高速率多數量的二進位媒介(硬碟,CPU,內存都算),同時複製大量0,1,0,1文件完全不是問題。


1. 金屬電路裡面,自由電子的定向移動速度是非常慢的。要傳遞信號並不需要把電子移動過去,只要接收端能建立起與發送端接近的電壓就可以了。在理想情況下,這個速度應該是電磁波的傳播速度。但實際上電路中會有電容和電感,這些儲能元件積累電荷或磁場需要時間,信號的傳輸延遲主要受這個影響。

2. 在 CPU 內部、CPU 與內存之間,信號的傳輸和處理確實是多位並行的。為了保證這麼多信號能同步,會用鎖相環電路產生時鐘信號,各個觸發器都在收到時鐘信號的時候開始轉換狀態。某個觸發器輸出的信號經過一些邏輯電路後,要在下一個時鐘信號到來之前,在接收這個信號的觸發器上,建立起穩定的電壓;在下一個時鐘信號到來時,接收信號的觸發器從電路上把信號保存起來。這個就是同步時序電路的工作方式。

3. 即使有了時鐘信號,也還要考慮信號傳輸的延遲。如果各個信號的延遲差別很大,那麼時鐘周期就要增長,整體速度就降低了。在晶元內和電路板上,可以控制電路的走向來控制阻抗特性,保持一致的延遲。但在用電纜連接的外部介面,這個就很難保證了。現在的高速外部介面,像 USB, SATA 之類的,都是串列的。


《電子電路分析與設計》

《微機原理》

《計算機組成原理》

這3本書挺不錯的。


哎呀,這不是我的專業課嗎 23333。學渣一枚,詳細的我也不太懂。主要就是各種mos賦予高低電平組成的電路。好吧,我承認我上課沒有認真聽講過。詳情請諮詢《數字電路基礎》《微機原理》


最好不要形象成電子移動,那樣對你理解會帶來困惑。

其實數據的傳輸更應該理解為在時鐘的協調下電平狀態的移交,具體是通過匯流排完成的。CPU上有3中匯流排,分別是數據匯流排、地址匯流排和控制匯流排,CPU在時鐘的協調下通過這些匯流排完成內存數據的轉移、運算的。數據傳送速度肯定有極限,因為電子狀態的變化速度有極限,通過並行只能在某些情況下提高速度,但並行存在硬體結構複雜、電氣參數不一致導致時鐘頻率降低反而拖慢整體速度的風險。


推薦閱讀:

物理專業為什麼沒有那麼多勸退貼?
將保溫壺放到了深海 3000 米,上岸為什麼會變成這種形狀?
像圖中這樣玩插座會被電死嗎?
當人類能夠達到光速的十分之一或者更快,平常生活中都無法忽略相對論效應時。倫理、文化發生怎樣的改變?
為什麼圓截面柱體扭轉時不產生翹曲,而非圓截面會發生翹曲?

TAG:信息技術IT | 物理學 | 硬體 | 電磁學 | 電學 |