.運算器與控制器之間的信息傳遞
控制器中的程序計數器(PC)需要通過ALU完成指令地址計算,它把自己的內容送到ALU的A輸入端,圖3.4中用pc-in表示,以實現PC+4和PC+immed-2的加法運算,常數4和immed-2是由ALU的B輸入端提供。PC+4的計算要在讀取指令階段完成,并在這一階段就把計算結果(圖中用pc-out表示)寫回PC。PC+immed-2的計算要在指令譯碼階段完成,并將計算結果保存在ALU的結果寄存器C中,到下一步的執行階段依據需要把這個結果(圖中用reg-C表示)再寫回PC。
2.運算器與存儲器器之間的信息傳遞
寫入寄存器堆的數據可以是ALU的運算結果,也可能是從內存中讀出來的數據,這二者需要通過一個二選一電路送到寄存器堆的DI數據輸入端。ALU的計算結果是在執行階段通過A op B或A op immed-1運算得到的,并首先保存在C寄存器中,到下一步的數據寫回階段才寫入寄存器堆。
為了實現內存的讀出或寫入操作,在執行階段通過A+immed-1運算得到內存地址,并保存在C寄存器中,到下一步的內存讀寫階段用C中的這個地址來選擇內存中的一個存儲單元。
對從內存讀出數據的指令,完成讀出數據到內存的數據緩存寄存器DR中。對寫數據到內存的指令,把在譯碼步驟保存在B寄存器中的數據送到內存的數據線,完成內存的寫入操作。
小結:運算器需要向內存提供地址信息和寫入的數據信息,內存則將向運算器提供其讀出的數據以便寫入到寄存器堆中。
請注意,這個運算器部件中的寄存器堆和ALU將在不同的執行步驟中完成自己的操作功能,讀寄存器堆在前(需要提供被讀的兩個寄存器的編號rs和rt),ALU計算在后(需要提供數據來源選擇信號A_sel和B_sel,以及ALU的運算功能選擇信號alu_func),再到下一步才會把保存在寄存器C中的計算結果寫回寄存器堆(需要提供被寫的寄存器編號rd,寫寄存器堆的命令信號we)。三個寄存器A、B、C都要用到時鐘信號Clock。
Am2901的內部組成
Am2901芯片是一個4位的位片結構的運算器器件,其內部組成框圖如圖3.5所示。
圖3.5 Am2901 芯片的內部組成框圖
該芯片的第一個組成部分是一個4位的算術邏輯運算部件ALU,它的輸出為F,兩路輸入分別用R和S標記,還有送入ALU最低位的進位信號Cn,能實現R+S、S-R、R-S三種算術運算功能,和R∨S、R∧S、R∧S、R⊕S、R⊕S五種邏輯運算功能。在給出運算結果的同時,還送出向高位的進位輸出信號Cn+4,溢出標志信號OVR,最高位的狀態信號F3(可能用作符號位),以及運算結果為零的標志信號F=0000。
該芯片的第二個組成部分是由16個4位的通用寄存器組成的寄存器組。它是一個用雙端口(A口和B口)控制讀出,單端口(B口)控制寫入的部件。為了對其進行讀寫,需通過A地址、B地址指定被讀寫的寄存器。兩路讀出數據分別用A口、B口標記,經鎖存器線路可以送到ALU的R、S輸入端的多路選擇器,A口讀出數據還可以用作該芯片的可選輸出數據之一。寄存器組的寫入數據由一組多路選擇器給出,并由B地址選擇寫入的寄存器。
該芯片的第三個組部成分是一個4位的Q寄存器,主要用于實現硬件的乘法、除法指令,能對本身的內容完成左、右移位功能,能接收ALU的輸出,輸出送到ALU 的S 輸入端。
該芯片的其余組成部分是5組多路數據選擇器,每組都由4套電路組成,一套電路對應一個數據位,通過它們實現芯片內部的三個組成成分之間的連接,實現芯片內部與外部信息的輸入輸出操作,包括:經D輸入接收外部送來的4位輸入數據,經Y輸出端輸出4位數據到芯片外部。
請注意,在實現寄存器數據左、右移位操作時,會涉及到芯片內外部的數據交換,左移操作要求向運算器的最低位(圖中用RAM0和Q0)送入移位輸入數據,運算器的最高位(圖中用RAM3和Q3)將向外部送出移位輸出數據,右移操作要求向運算器的最高位送入移位輸入數據,運算器的最低位將向外部送出移位輸出數據。
(2) Am2901的控制與操作
控制信號包括:
① 選擇ALU的八種運算(三種算術運算、五種邏輯運算)功能中的一種。這可通過提供三位功能選擇碼I5,I4,I3實現,其具體規定列在表3.1中。
② 選擇送入ALU的兩個操作數據R和S的組合關系(數據來源)。圖3.5上已標明,R從D和A中選擇,S從A、B和Q中選擇,再考慮到它們還均可選"0"值,則我們選取最有用的8種組合,即A、Q組合,A、B組合,O、Q組合,0、B組合,0、A組合,D、A組合,D、Q組合,D、O組合,并用I2,I1,I0三位操作數選擇碼控制二組多路選通門選取其一,具體規定如表3.2所示。
③ 選擇運算結果或有關數據以什么方式送往何處的處理方案,這主要指通用寄存器組和Q寄存器執不執行接收操作或移位操作,以及向芯片的輸出信息Y提供的是什么內容。這是通過I8,I7,I6三位結果選擇碼來控制三組相應的選擇門實現的,其規定如表3.3所示。
表3.1 選擇運算功能表 3.2數據來源選擇
表3.3 選擇結果處理方案
(3)外部的數據及線路
有一些數據是由在芯片之外的線路提供的,包括:
①芯片經D端接收的外部數據
②芯片最低位的進位輸入信號Cn
③關于左右移位操作過程中的RAM3、RAM0、Q3和Q0的輸入數據
④需要在芯片外設置接收與記憶4個標志位信息的電路
、實驗目的
1)通過實驗了解和熟悉plc的結構和外部接線方法;
2)了解和熟悉簡易編程器或編程軟件的使用方法;
3)掌握簡單程序的寫入、編輯、監視和模擬運行的方法,熟悉PLC的基本指令,掌握定時器、計數器的工作原理。
二、實驗裝置
1)三菱FX系列PLC1臺;
2) FX-20P-E簡易編程器1只或裝有編程軟件的計算機1臺(附連接電纜);
3)開關量輸入電路板1塊。
(三)實驗內容
1.PLC外部接線
PLC外部接線圖如圖1所示,用開關量輸入電路板上的按鈕或開關信號作為PLC的輸入,PLC輸出可不接,直接通過在PLC輸出指示燈上觀察輸出情況。
圖1 PLC的外部接線圖
2.程序的寫入、檢查及修改
將編程器或裝有編程軟件的計算機接到PLC上,并將PLC上的“RUN”開關撥到“STOP”位置,接通PLC的電源。選擇聯機方式,按[RD/WR]鍵,使編程器處于W(WR)工作方式,再按以下順序操作:[NOP]-[A]-[GO]-[GO],將PLC用戶程序存儲器中的內容全部清除。同樣,也可按編程軟件的操作方法將用戶程序清除。
用編程器或計算機寫入圖2(a)對應的梯形圖或指令表程序,寫入后從第0步開始逐條檢查程序;如發現錯誤,顯示出錯誤指令后再寫入正確的指令。
圖2 簡單PLC程序梯形圖
3.模擬運行程序
寫入的程序經檢查無錯誤后,斷開實驗板上的全部輸入開關,將“RUN”開關撥到RUN位置,寫入的程序開始運行,同時“RUN”的LED燈亮。
按照表1所示操作X0-X2對應的鈕子開關,通過PLC上的LED觀察Y0和Y1的狀態,并填入表中。表中的脈沖波形表示開關接通后馬上斷開(模擬按鈕的操作),0、1分別表示開關斷開和接通。
表1 信號狀態表
3.指令的讀出、刪除、插入和修改
將“RUN”開關撥到“STOP”位置,將圖2(a)對應的梯形圖程序改為圖2(b)對應的梯形圖程序,按下述步驟進行操作:
(1)刪除指令AND X2和OUT Y1。
(2)在ANI XI之前插入ANI X3。
(3)將OR Y0改為OR Y2,將OUT Y0改為OUT Y2。
完成上述操作后,檢查修改后的程序是否與梯形圖一致;不一致,則按梯形圖改正。運行修改后的程序,檢查程序是否能完成修改后的功能。
4.清除已運行的程序,然后寫入圖3所示的定時器、計數器程序,檢查無誤后進行運行,并用編程器或計算機完成以下監視工作:
圖3 定時、計數器程序梯形圖
(1)改變X0和X1的狀態,監視M10和M11的狀態。
(2)用X1控制T1的線圈,監視T1的當前值和觸點的變化情況。
(3)在下述情況下監視C1的當前值、觸點和復位電路的變化情況:先接通X2對應的開關,并用X3對應的開關給C1提供計數脈沖;然后斷開X2對應的開關,用X3對應的開關發出8個計數脈沖;最后重新接通X2對應的開關,記錄上述各步觀測到的現象。
四、實驗報告內容
(1)整理出模擬運行各程序及監視操作時所觀察到的現象。
(2)分析定時器T1、計數器C1的工作原理及相應觸點動作的時序
期我們講到LoaRunner性能測試操作系統監控,這期我們講LoaRunner性能測試Windows計數器。
監控系統資源的目的是為了分析是否由于系統資源引起性能瓶頸,通常分析的硬件資源消耗主要包括內存、磁盤和CPU,那么如何定位這些硬件是否達到瓶頸呢?在實際測試過程中沒有直接的指標可以指明硬件是否達到瓶頸,需要分析計數器來間接的去分析硬件資源是否出現瓶頸。
內存計數器
關于內存計數器主要有三個:
Available Bytes(Available Kbytes
Available Mbytes)
Memory pages/second
Page Faults/sec
Available Bytes表示計算機上可用于運行處理的有效物理內存的字節數量。是用零、空閑和備用內存表上的空間總值計算的。空閑內存指可以使用內存;零內存指為了防止以后的處理看到以前處理使用的數據而在很多頁內存中充滿了零內存。備用內存是指從處理的工作集(它的物理內存)移到磁盤的,但是仍舊可以調用的內存。這個計數器只顯示上一次觀察到的值;它不是一個平均值。一般不小于4MB,如果該值低于閥值且Pages/sec持續的處于峰值狀態下,那么說明計算機的物理內存不夠。
Memory pages/second是指為解決頁面錯誤從磁盤讀取或寫入磁盤的速度。這個計數器是可以顯示導致系統范圍延緩類型錯誤的主要指示器。
它是Memory\Pages Input/sec
Memory\Pages Output/sec的總和。是用頁數計算的,以便在不用做轉換的情況下就可以同其他頁計數。
如Memory\Page Faults/sec,這個值包括為滿足錯誤而在文件系統緩存(通常由應用程序請求)的非緩存映射內存文件中檢索的頁。如果系統運行在內存較少的狀態,那么該值將逐漸增大,因為操作系統必須使用頁面文件來進行臨時數據存儲,并且Windows會更加依賴頁面文件來為用戶請求提供服務,因此讀寫數據頁面數目將增加。這個計數器的值應該保持或接近0。
Page Faults/sec 是每秒鐘出錯頁面的平均數量。由于每個錯誤操作中只有一個頁面出錯,計算單位為每秒出錯頁面數量,因此這也等于頁面錯誤操作的數量。這個計數器包括硬錯誤(那些需要磁盤訪問的)和軟錯誤(在物理內存的其他地方找到的錯誤頁)。許多處理器可以在有大量軟錯誤的情況下繼續操作。但是,硬錯誤可以導致明顯的拖延。
在監控內存時應該注意內存泄漏的情況,一般以下兩種情況表明出現內存泄漏的情況:
第一:觀察內存分配池,如果內存池中可用內存消耗是呈不斷上升的趨勢,說明可能出現內存泄漏的情況。。
第二:進程分配內存后,但并未將用完的內存回收。
磁盤計數器
關于磁盤計數器主要有四個:
%Disk Time
Average Disk Queue Length
Average Disk Seconds/Read
Average Disk Seconds/Write
%Disk Time表示所選磁盤驅動器忙于為讀或寫入請求提供服務所用的時間的百分比。正常值<10,此值過大表示耗費太多時間來訪問磁盤,可考慮增加內存、更換更快的硬盤、優化讀寫數據的算法。
Average Disk Queue Length指讀取和寫入請求的平均隊列數(所選磁盤在實例間隔中的列隊),如駕車等信號燈,如果當前信號燈有很多車在等,那么排在后面的車就必須等待下一個信號燈才有可能通過。
正常值<0.5,此值過大表示磁盤I/O太慢,要更換更快的硬盤。
Average Disk sec/Read 指以秒計算的在磁盤上讀取數據的所需平均時間。
Average Disk sec/Write 指以秒計算的在此盤上寫入數據的所需平均時間。監控到磁盤平均讀寫時間后,如何確定該值是否正常呢?磁盤是否遇到瓶頸呢?如果要確定磁盤讀寫時間是否遇到瓶頸,需要先獲得物理磁盤讀寫一次所花費的時間,即磁盤服務時間,磁盤服務時間由三部分時間組成:尋找時間、旋轉延遲時間和數據傳輸時間。
尋道時間(Tseek)是指將讀寫磁頭移動到正確的磁道上所需要的時間,尋道時間越短,I/O操作越快,目前磁盤的平均尋道時間一般為3-15ms。
旋轉延遲時間(Trotation)是指盤片旋轉將請求數據所在扇區移至讀寫磁頭下方所需要的時間,旋轉延遲取決于磁盤轉速,通常為磁盤旋轉一周所需要時間的1/2。現在的磁盤轉速一般為5400轉/分、7200轉/分、10K轉/分和15K轉/分,以7200轉/分為例,一分鐘可以轉120轉,那么磁盤轉一周的時間為1/120,大約為8.33ms,旋轉延遲時間為旋轉一周所需時間的1/2,即大概為4.17ms。
數據傳輸時間(Transfer)是指完成傳輸所請求的數據所需要的時間,它取決于數據傳輸率,該值等于數據大小除于數據傳輸率
目前IDE/SATA的傳輸率達到133MB/s
SATA II可達到300MB/s,所以數據傳輸的時間很短,相對于尋找時間和旋轉延遲時間數據傳輸時間可以忽略不計。
以7200轉/分為例,讀寫一次平均時間大約為3ms
(尋道時間)加上4.17ms(旋轉延遲時間),即7.17ms,如果監控到的平均讀寫時間比計算出來的平均讀寫時間值大,則說明磁盤可能出現瓶頸。
但現在服務器磁盤都是以陣列的方式出現,對于使用不同的磁盤陣列,其它讀寫時間計算方式也有不同,在分析不同陣列方式讀寫時間時,首先需要了解磁盤陣列的相關內容。
磁盤陣列
(Redundant Arrays of Inexpensive Disks,RAID)
有“價格便宜且多余的磁盤陣列”之意,磁盤陣列的原理是利用數組方式來來作磁盤組,配合數據分散排列的設計,提升數據的安全性。磁盤陣列是由很多便宜、容量較小、穩定性較高、速度較慢磁盤,組合成一個大型的磁盤組,利用個別磁盤提供數據所產生加成效果提升整個磁盤系統效能。同時利用這項技術,將數據切割成許多區段,分別存放在各個硬盤上。磁盤陣列還能利用同位檢查(Parity Check)的觀念,在數組中任一顆硬盤故障時,仍可讀出數據,在數據重構時,將數據經計算后重新置入新硬盤中。
RAID的規范主要包括RAID 0~RAID 7等數個規范,它們的側重點各不相同,常見的規范有以下幾種:
RAID 0:無差錯控制的帶區組
要實現RAID0必須要有兩個以上硬盤驅動器,RAID0實現了帶區組,數據并不是保存在一個硬盤上,而是分成數據塊保存在不同驅動器上。因為將數據分布在不同驅動器上,所以數據吞吐率大大提高,驅動器的負載也比較平衡。如果剛好所需要的數據在不同的驅動器上效率最好,那么它不需要計算校驗碼,實現容易。它的缺點是它沒有數據差錯控制,如果一個驅動器中的數據發生錯誤,即使其它盤上的數據正確也無濟于事了。不應該將它用于對數據穩定性要求高的場合。如果用戶進行圖像(包括動畫)編輯和其它要求傳輸比較大的場合使用RAID0比較合適。同時,RAID0可以提高數據傳輸速率,比如所需讀取的文件分布在兩個硬盤上,這兩個硬盤可以同時讀取。那么原來讀取同樣文件的時間被縮短為1/2。在所有的級別中,RAID0的速度是最快的,但是RAID0沒有冗余功能的,如果一個磁盤(物理)損壞,則所有的數據都無法使用。RAID0的結構圖如圖所示。
RAID 1:鏡像結構
RAID1對于使用這種RAID1結構的設備來說,RAID1控制器必須能夠同時對兩個盤進行讀操作和對兩個鏡像盤進行寫操作。RAID1結構圖如圖所示。
從結構圖中可以看到必須有兩個驅動器,因為當鏡像結構在一組盤出現問題時,可以使用鏡像提高系統的容錯能力。RAID1比較容易設計和實現,每讀一次 盤只能讀出一塊數據,也就是說數據塊傳送速率與單獨的盤的讀取速率相同。因為RAID1的校驗十分完備,因此對系統的處理能力有很大的影響,通常的RAID功能由軟件實現,而這樣的實現方法在服務器負載比較重的時候會大大影響服務器效率。當您的系統需要極高的可靠性時,如進行數據統計,那么使用 RAID1比較合適,而且RAID1技術支持“熱替換”,即不斷電的情況下對故障磁盤進行更換,更換完畢只要從鏡像盤上恢復數據即可。當主硬盤損壞時,鏡像硬盤就可以代替主硬盤工作,鏡像硬盤相當于一個備份盤,可想而知,這種硬盤模式的安全性是非常高的,RAID1的數據安全性在所有的RAID級別上來說是最好的,但是其磁盤的利用率卻只有50%,是所有RAID級別中最低的。
RAID2:帶海明碼校驗
從概念上講RAID2與RAID3類似,兩者都是將數據條塊化分布于不同的硬盤上,條塊單位為位或字節。然而RAID2使用一定的編碼技術來提供錯誤檢查及恢復,這種編碼技術需要多個磁盤存放檢查及恢復信息,使得RAID2技術實施更復雜。因此,在商業環境中很少使用。RAID2結構圖如圖所示。
由于海明碼的特點,它可以在數據發生錯誤的情況下將錯誤校正,以保證輸出的正確。它的數據傳送速率相當高,如果希望達到比較理想的速度, 那最好提高保存校驗碼ECC碼的硬盤性能,對于控制器的設計來說,它又比RAID3、RAID4或RAID5要簡單。但是要利用海明碼,必須要付出數 據冗余的代價,輸出數據的速率與驅動器組中速度最慢的相等。
RAID3:帶奇偶校驗碼的并行傳送
RAID3這種校驗碼與RAID2不同,只能查錯不能糾錯。它訪問數據時一次處理一個帶區,這樣可以提高讀取和寫入速度,它像RAID0一樣以并行的方式來存放數據,但速度沒有RAID 0快。校驗碼在寫入數據時產生并保存在另一個磁盤上,需要實現時用戶必須要有三個以上的驅動器,寫入速率與讀出速率都很高,因為校驗位比較少,因此計算時間相對而言比較少,RAID3的結構圖如圖所示。
用軟件實現RAID控制將是十分困難的,控制器的實現也不是很容易,它主要用于圖形(包括動畫)等要求吞吐率比較高的場合,不同于RAID2,RAID3使用單塊磁盤存放奇偶校驗信息。如果一塊磁盤失效,奇偶盤及其他數據盤可以重新產生數據,如果奇偶盤失效,則不影響數據使用。RAID3對于大量的連續數據可提供很好的傳輸率,但對于隨機數據,奇偶盤會成為寫操作的瓶頸。利用單獨的校驗盤來保護數據雖然沒有鏡像的安全性高,但是硬盤利用率得到了很大的提高,硬盤利用率為n-1。
RAID4:帶奇偶校驗碼的獨立磁盤結構
RAID4和RAID3很像,不同的是,它對數據的訪問是按數據塊進行的,也就是按磁盤進行的,每次是一個盤。
RAID3是一次一橫條,而RAID4一次一豎條。它的特點和RAID3也挺像,不過在失敗恢復時,它的難度可要比RAID3大得多了,控制器的設計難度也要大許多,而且訪問數據的效率不高。
RAID5:分布式奇偶校驗的獨立磁盤結構
RAID 5不單獨指定的奇偶盤,而是在所有磁盤上交叉地存取數據及奇偶校驗信息。在RAID 5上,讀/寫指針可同時對陣列設備進行操作,提供了更高的數據流量。RAID 5更適合于小數據塊和隨機讀寫的數據。RAID 3與RAID 5相比,最主要的區別在于RAID 3每進行一次數據傳輸就需涉及到所有的陣列盤;而對于RAID 5來說,大部分數據傳輸只對一塊磁盤操作,并可進行并行操作。在RAID 5中有“寫損失”,即每一次寫操作將產生四個實際的讀/寫操作,其中兩次讀舊的數據及奇偶信息,兩次寫新的數據及奇偶信息。RAID5結構圖如圖所示。
RAID6:帶有兩種分布存儲的奇偶校驗碼的獨立磁盤結構
與RAID5相比,RAID6增加了第二個獨立的奇偶校驗信息塊,兩個獨立的奇偶系統使用不同的算法,數據的可靠性非常高,即使兩塊磁盤同時失效也不會影響數據的使用。但RAID6需要分配給奇偶校驗信息更大的磁盤空間,相對于RAID5有更大的“寫損失”,因此“寫性能”非常差,較差的性能和復雜的實施方式使得RAID 6很少得到實際應用。
RAID7:優化的高速數據傳送磁盤結構
RAID7所有的I/O傳送均是同步進行的,可以分別控制,這樣提高了系統的并行性,提高系統訪問數據的速度,每個磁盤都帶有高速緩沖存儲器,實時操作系統可以使用任何實時操作芯片,達到不同實時系統的需要。允許使用SNMP協議進行管理和監視,可以對校驗區指定獨立的傳送信道以提高效率,可以連接多臺主機,因為加入高速緩沖存儲器,當多用戶訪問系統時,訪問時間幾乎接近于0。由于采用并行結構,因此數據訪問效率大大提高,需要注意的是它引入了一個高速緩沖存儲器,這有利有弊,因為一旦系統斷電,在高速緩沖存儲器內的數據就會全部丟失,因此需要和UPS一起工作。但其價格也非常昂貴。
RAID10:高可靠性與高效磁盤結構
這種結構無非是一個帶區結構加一個鏡像結構,因為兩種結構各有優缺點,因此可以相互補充,達到既高效又高速還可以的目的。大家可以結合兩種結構的優點和缺點來理解這種新結構。這種新結構的價格高,可擴充性不好。主要用于容量不大,但要求速度和差錯控制的數據庫中。
關于CPU計數器主要有三個:
% Processor Time
%User Time
%Privileged Tim
% Processor Time指處理器用來執行非閑置線程時間的百分比。計算方法是,測量范例間隔內非閑置線程活動的時間,用范例間隔減去該值。(每臺處理器有一個閑置線程,該線程在沒有其他線程可以運行時消耗周期)。這個計數器是處理器活動的主要說明器,顯示在范例間隔時所觀察的繁忙時間平均百分比。這個值是用 100% 減去該服務不活動的時間計算出來的。如果該計數器的值持續高于80%,則說明CPU存在壓力,接下來需要進一步將Processor Time分解,以便確定是內核模式進程還是用戶模式進程消耗的時間更多,接下來分別分析%User Time和%Privileged Time兩個計數器。
%User Time指處理器處于用戶模式的時間百分比。用戶模式是為應用程序、環境分系統和整體分系統設計的有限處理模式。另一個模式為特權模式,它是為操作系統組件設計的并且允許直接訪問硬件和所有內存。操作系統將應用程序線程轉換成特權模式以訪問操作系統服務。這個計數值將平均忙時作為示例時間的一部分顯示。
%Privileged Time是在特權模式下處理線程執行代碼所花時間的百分比。當調用Windows系統服務時,此服務經常在特權模式運行,以便獲取對系統專有數據的訪問,在用戶模式執行的線程無法訪問這些數據。
對系統的調用可以是直接的(explicit)或間接的(implicit)
例如頁面錯誤或中斷。不像某些早期的操作系統,Windows除了使用用戶和特權模式的傳統保護模式之外,還使用處理邊界作為分系統保護。某些由 Windows為您的應用程序所做的操作除了出現在處理的特權時間內,還可能在其他子系統處理出現。
如果User Time占整個Processor Time的比例很大,那么說明是應用程序出現問題,這樣接下來需要確定是哪個進程消耗了CPU的時間。