2012/07/30

雲端管理你的程式碼: Dropbox + Git

之前我就在思考如何管理程式碼,因為程式碼很重要
如果使用一個有效率的管理機制的話,就可以跨平台的使用
畢竟現在平台有可能是Linux或是Windows,或更多作業系統~

上次我把程式碼管理透過一台Linux主機
我滿喜歡這樣管哩, 滿方便的! 但是現在這台主機可能必須還別人
下次可能要重新設置在另一台Linux主機~ 有點麻煩

雲端工具 Dropbox
所以我把腦筋動到了雲端工具 Dropbox
索性google了一下關鍵字: “Dropbox git”
沒想到真的有人跟我有一樣的想法, 透過dropbox管理程式碼

我的作法
類似這篇文章, 在Dropbox上建立Server端原始碼的repo git,讓個平台再重dropbox上作git clone到client端

root@ROOT-PC /C/Users/root/Dropbox/project$git clone file://git@127.0.0.1/C/Users/root/Dropbox/git/project.git

不過我有點不一樣
就是我連client端都是在dropbox資料夾裡面
主要這樣作是因為我的程式碼都是HTML,PHP的網頁文字檔而已
若以後的程式碼需要被編譯, 我就會跟這篇文章一樣

步驟

(假設程式碼已經放入資料夾 ~/Dropbox/project裡)在Dropbox上建立Client端:~/Dropbox/project $ git init~/Dropbox/project $ git add .~/Dropbox/project $ git commit -m “first commit”~/Dropbox/project $ cd ~/Dropbox/git--在Dropbox上建立Server端:~/Dropbox/git $ mkdir project.git~/Dropbox/git $ cd project.git~/Dropbox/git $ git init –bare~/Dropbox/git $ cd ~/project--將Client端的資料push到Server端:~/Dropbox/project $ git remote add origin ~/Dropbox/git/project.git~/Dropbox/project $ git push origin master

Git使用方式

在Linux平台:
使用就是透過git指令, ex: git status, git commit, git push, git log …

在windows平台:
我使用這工具msysgit,
可以方便你在資料夾按右鍵就選git bash執行git指令
參考自 http://www.mrmu.com.tw/2011/05/06/git-tutorial-for-beginner/

2012/07/25

X86系統的生態, 處理器彼此如何溝通呢? CPU/北橋/南橋/EC

作為一個X86的工程師, 基本的晶片各自負責的工作都要知道一下, 還有使用的bus prototype等等, 有點不同於SOC處理晶片幾乎全包了, 在X86處理器通常會有北橋與南橋協助處理週邊高速與低速裝置! X86系統的生態, 處理器彼此如何溝通呢? 我本來以為就CPU管全部的devices/components, 後來我發現我錯了, CPU主要只管邏輯運算那塊, 其他的周邊裝置是南北橋管的! 突然覺得跟人體很像, 應該說電腦當初的設計就是根據人類的構造去發想的吧, 大腦負責運算思考小腦 …脊椎 … / CPU..北橋..南僑..EC


CPU-就是所謂的中央處理器或中央處理單元

也就是CentralProcessingUnit的縮寫。CPU是驅動整個電腦運作的中心樞紐,又稱電腦的心臟,其內部包括控制單元、算術及邏輯單元、暫存器或記憶單元。當電腦系統開始運作時,CPU從記憶體內,讀取操作它的軟體的指令與資料,透過ALU運算出結果後存回記憶體,同時由主機板,與外界的I/O週邊溝通,達到資料處理的目的。CPU會因其硬體架構如資料/指令格式、分配、解碼、介面與運作方式的不同有差異,而且用途也可能不一。

CPU基本架構:

  • 算術及邏輯運算單元(ALU):加、減、乘、除及比較、選擇、判斷等運算。
  • 控制單元(CU):翻譯程式中的指令的解碼功能及協調控制各部門依指令執行使電腦自動化處理資料。
  • 記憶單元(memory):儲存目前正要被處理運算的程式或資料,容量以KB為單位。
  • 輸入單元(Input,I/P):接受輸入的資料或程式,以供進一步處理。如:鍵盤、滑鼠等。
  • 輸出單元(Output,O/P):負責將CPU處理結果輸出,輸出於各種輸出設備上,如:印表機、磁碟機等。
  • 暫存器(Register):暫時儲存資料,如用來儲存運算的累積器。其功能與記憶體相似。

CPU內部較重要的暫存器:

  • 程式計數器PC(Program Counter):負責儲存CPU下一次所要執的記憶體位址。
  • 指令暫存器IR(Instruction Register):負責儲存CPU所要執行的指令。
  • 堆疊指標器SP(Stack Pointer):負責儲存CPU目前使用的堆疊位址。
  • 位址暫存器MAR:負責儲存CPU所要存取記憶體資料的位址。

北橋晶片

北橋是主機板上最重要的晶片,主要是控制CPU、記憶體、AGP或PCI-E×16插槽(顯示卡專用)等設備的高速整合晶片,其傳輸速度可達每秒數GB來計算的,比如CPU(8~10 GB/s)、記憶體(8~10 GB/s)、顯示卡(8 GB/s),與南橋晶片兩顆合稱晶片組,越高級的北橋晶片支援的CPU、記憶體的頻率越高(例如圖中P35晶片支援最高到FSB1333,超頻可上1600、且支援雙通道架構的DDRII 667 800,超頻可上1066)

南橋晶片

和北橋互連並連接其他週邊,我們熟知的主機板「功能」大多來自南橋,南橋連接慢速週邊,傳輸速度以每秒數MB來計算,例如硬碟(375 MB/s)、USB(60 MB/s)、PCI(133 MB/s),例如鍵盤滑鼠、印表機、USB、網路、音效、SATA/IDE硬碟。

討論-界線模糊的北橋和南橋 (引用自mobile01)

為什麼要分南北橋?
南北橋是主機板上最主要的晶片,通常是上游晶片組廠商(NVIDIA、AMD、Intel)賣出晶片,下游板卡廠(華碩、技嘉、微星等等)再做成主機板,某些極少數的主機板是由晶片組廠商自行生產,再以完整的板子賣給下游板卡廠去出貨。

先來一張之前用過的晶片組簡易架構圖:

為什麼要分成北橋和南橋?這主要是兩個考量:設計和製造。就晶片設計的角度,如果要讓東西溝通的速度越快,那就讓它們越靠近越好,只要一分離,勢必就得拉出傳輸的通道,而有通道就要佈線、就有傳輸的延遲。如果可以的話,最好是把所有功能全部塞進一顆晶片內,可是必須考量到晶片製造的難度,廠商一定想賺錢,如果設計出一顆根本生產不出來、或太貴沒人要買的晶片也沒用。

北橋和南橋就是在這樣的取捨下分離,現在晶片組搭載的功能超多,而且很多週邊的速度太快,很難在一顆晶片內搞定,所以就讓需要高速傳輸的功能靠近CPU,並獨立成北橋晶片,而其他較慢速的週邊就變成南橋來連接北橋,與CPU做間接傳輸。

當然,整合南北橋變成一顆晶片是絕對是可行的,只要設計和製造難度允許,很多廠商都出過單晶片的產品,但通常是AMD平台或功能較少的入門晶片組,因為花樣少、製造難度較低,做成單晶片會有利於降低成本。

南北橋的功用

我們先以最標準的Intel的南北橋架構做解說,特別的案例最後再聊。這部分免不了要看晶片組的架構圖,別太緊張,其實看架構圖會比看實際的板子更容易了解晶片組的設計,只不過是一些PowerPoint的方塊圖而已


Intel P35晶片組的架構圖,這是非常標準的南北橋設計,由P35北橋加ICH9南橋,旁邊都有標上通道的速度,可明顯看出南橋連出去的週邊都比北橋慢。

北橋所連的都是高速傳輸的週邊,包括CPU、記憶體和顯示卡,也就是電腦最核心的三項零組件,只要其中有一項產品出現大改的新規格,相對應的北橋就一定要出新版,而換北橋就是出新的主機板,換主機板差不多就是砍掉重練整台電腦,也就是大家常說的世代交替或敗家升級了。

基本上,北橋可視為一堆通道的集合體,有專屬的通道連往CPU、記憶體、顯示卡和南橋,透過北橋這個轉運中心,CPU就可接收和送出資料給所有電腦週邊。

1.CPU通道
北橋和CPU連接的通道就是Intel的FSB或AMD的HyperTransport,在CPU的章節已經提過很多次,這是CPU對外的溝通管道,也就是和北橋連接,進而與所有週邊溝通。很直覺的,CPU和北橋的FSB和HyperTransport,兩邊一定要配對才能使用,或是北橋支援的FSB/HyperTransport速度要高於CPU的,也就是新主機板能向下相容舊CPU,但舊主機板不一定能向上相容新CPU(注意是不一定,例外到處都有,能不斷向上相容的板子很多,台灣板卡廠RD太強了)。

CPU每隔一兩年,對外的FSB或HyperTransport的速度就會提升,自然就會有新的北橋出現與它搭配,比如AMD最近要推新的AM2+ CPU,支援HyperTransport到最新的3.0版,時脈達2GHz(之前的是1GHz),AMD就推出新的RD790北橋來搭配。除了CPU與北橋之間的通道要匹配之外,當然還有CPU腳位的問題,如果CPU更改傳輸腳位的定義,主機板上的北橋通常也要更新或修改才能支援。

2.記憶體通道
北橋另一個重點是記憶體控制器,直接決定支援的記憶體種類和時脈,時脈的部分,就是由CPU的外頻,乘上北橋裡控制器內附的比值,計算出記憶體時脈。比如CPU的外頻是266,北橋設定的比值是1:1.5,那記憶體的真實時脈就會是266×1.5=400MHz,DDR之後就是800MHz。這個比值有很多種,計算方式也不一定都是這樣,但無論如何,都是由北橋的記憶體控制器來決定算法和時脈。至於記憶體種類,北橋通常只會支援一種記憶體,比如現在主流的DDR2,但在世代交替的當口,就會出現同時支援兩種記憶體的北橋,以緩和世代轉換的陣痛,像Intel現在正要推行DDR3新規格,P35/X38晶片組就同時支援DDR2和DDR3。

3.顯示卡
顯示卡是近幾年才變成高速週邊的,當它開始需要大頻寬時,北橋其實並沒有對應的匯流排可用(PCI的每秒133MB頻寬太慢了),所以才會有AGP的出現。AGP是專門給顯示卡用的擴充「埠」,它是一對一的通道,不是匯流排,北橋內建一個AGP埠就只能插一張顯示卡。由於AGP限制太多,所以現在都改用PCI-Express,希望可以統合PCI和AGP,做為擴充卡的匯流排單一標準。不過結果大家都看的到,AGP是差不多淘汰了,但PCI還活的好好的。PCI-Express的設計是以Lane為主,每條Lane就像一條獨立車道,雙向頻寬是每秒500MB,北橋會支援一個固定的Lane數,但可自由調配組合成寬度不一的道路。比如NVIDIA MCP55支援PCI-E Lanes x28,當插一張顯示卡時,就可以用PCI-E x16的速度,插兩張顯示卡時就變x8加x8,剩下的12 Lanes,可以再分成x8、x4、x1等不同數目的插槽,給不同的擴充卡週邊使用。

另外,一些低階的北橋產品也會直接內建顯示晶片,當然,在設計與製造成本的考量下,內建顯示晶片通常就是拿來「顯示」而已,3D能力絕對比不上同一個世代的獨立顯示卡,不過針對它所在的定位,只要能顯示畫面就很夠了。

4.包山包海的南橋
相對於北橋都是高速週邊,南橋就是比較功能面的,除了以上那些核心零組件之外,其他都是放在南橋,比如PCI插槽、IDE/SATA硬碟介面、大家一定用過的USB、AC97或HD Audio音效和10/100/1000網路,如果板卡廠願意,還可以另加晶片和南橋連接,讓主機板的附加價值更高,比如快閃記憶體(ReadyBoost)、無線網路、IEEE 1394、RAID晶片……。由於南橋晶片的獨立性和它所控制的功能面,晶片組廠商都會讓一顆北橋搭配不同的南橋,做出不同定位與附加功能的晶片組產品。

雖然現在晶片組的南橋都已經包山包海,但廠商為了增加附加價值,可能自己還會在主機板外加晶片,塞進更多功能,比如這顆VIA VT6308P就是讓主機板多出IEEE 1394功能的晶片。現在的南橋都有內建音效,但那只有「數位音效處理」,要讓主機板可以直接發聲,必需把數位音訊轉換成類比輸出,才能連接耳機或喇叭,而這個數位/類比的轉換晶片,南橋通常不會內建,所以主機板都會有一顆類似照片中「ALC888T」的Audio Codec,負責轉換成類比輸出,或是顛倒過來,把類比轉成數位做出錄音功能。南橋的網路功能通常只有提供MAC,做為網路數位資料的傳輸功能,但要真正支援實體網路線的電子訊號傳輸,還要另外再加網路PHY晶片,比如照片中的RTL811B。

BIOS (basic input output system 即基本輸入輸出系統)

水銀電池是系統BIOS的主要供電來源, BIOS(黃圈處),是主機板內建的「系統軟體」,用來辨識主機板上的各式裝置,調整各種設定,再交給作業系統啟動,BIOS是開機過程中的第一步,BIOS辨識完畢之後再給作業系統接手。BIOS軟體通常放在一個很小的Flash ROM儲存裝置(可以刷BIOS更新內容)。

BIOS 是被固定在電腦主板上的ROM晶片中的一群組程式:
(引用出處) 其主要功能是為電腦提供最底層的、最直接的硬體設定和控制。BIOS設定程式是儲存在BIOS晶片中的,只有在開機時才可以進行設定。CMOS主要用於存儲BIOS設定程式所設定的參數與資料,而BIOS設定程式主要對技巧的基本輸入輸出系統進行管理和設定,是系統執行在最好狀態下,使用BIOS設定程式還可以排除系統故障或是診斷系統問題。 準確地說,BIOS是硬體與軟體程式之間的一個「轉換器」或是說是接口(雖然它本身也只是一個程式),負責解決硬體的即時需求,並按軟體對硬體的動作要求具體執行。

BIOS分為三大功能:

  1. 自檢及起始化程式 (System startup & Boot process)
    • 這部分負責啟動電腦,具體有三個部分,第一個部分是用於電腦剛接通電源時對硬體部分的檢驗,也叫做加電自檢(POST),功能是檢查電腦是否良好,例如記憶體有無故障等。第二個部分是起始化,內含建立中斷向量、設定寄存器、對一些外部裝置進行起始化和檢驗等,其中很重要的一部分是BIOS設定,主要是對硬體設定的一些參數,當電腦啟動時會讀取這些參數,並和實際硬體設定進行比較,若果不符合,會影響系統的啟動。最後一個部分是引導程式,功能是引導DOS或其他動作系統。BIOS先從軟碟或硬碟的開始扇區讀取引導記錄,若果沒有找到,則會在顯示器上顯示沒有引導裝置,若果找到引導記錄會把電腦的控制權轉給引導記錄,由引導記錄把動作系統裝入電腦,在電腦啟動成功後,BIOS的這部分任務就完成了。
  2. 硬體中斷處理 (BIOS interrupt calls)
  3. 程式服務請求 (Operating system services)
    • 這兩部分是兩個獨立的內容,但在使用上密切關聯。
      程式服務處理程式主要是為套用程式和動作系統服務,這些服務主要與輸入綉輸出裝置有關,例如讀磁碟、檔案輸出到印表機等。為了完成這些動作,BIOS必須直接與電腦的I/O裝置打交道,它通過連接埠發出指令,向各種外部裝置傳輸資料以及從它們那兒接收資料,使程式能夠脫離具體的硬體動作,而硬體中斷處理則分別處理PC機硬體的需求,因此這兩部分分別為軟體和硬體服務,群組合到一起,使電腦系統標準執行。BIOS的服務功能是通過呼叫中斷服務程式來實現的,這些服務分為很多群組,每群組有一個專門的中斷。例如視訊服務,中斷號為10H;螢幕列印,中斷號為05H;磁碟及序列口服務,中斷14H等。每一群組又根據具體功能細分為不同的服務號。套用程式需要使用哪些外設、進行什麼動作只需要在程式中用相應的指令說明即可,無需直接控制。

 

2012/07/02

putty config 之 Windows Registry Editor

之前寫了一篇在windows底下設定putty的方法, 熟悉windows的人應該會知道registry是windows重要的設定方式

今天學到一個小技巧,可以匯出registry設定檔
修改某一部分之後,再重新執行就可以將windows作業系統裡的registry修改完畢
.

按右鍵>匯出 (改完之後再執行該檔案即可匯入)