並行控制

在計算機網路中,由於有多個主機,因此,可以運行更多的用戶進程。然而這些進程可能為一共享資源而競爭。為了解決這種競爭就必須首先對發出占用此資源請求的進程進行排隊。根據排隊依次共享該資源。 當多個用戶同時對資料庫進行查詢、更新等操作時,為保證這些並行操作的正確執行和保持資料庫的完整所實施的控制。

簡介

在計算機網路中,由於有多個主機,因此,可以運行更多的用戶進程。然而這些進程可能為一共享資源而競爭。為了解決這種競爭就必須首先對發出占用此資源請求的進程進行排隊。根據排隊依次共享該資源。這就需要套用並行控制的辦法。

其次,為了在網路上實現並行控制,就必須使網路上參與實現某一功能的所有進程皆能獲得與該功能相關的一致的系統狀態。並且不必訪問一個全網唯一的集中系統資料庫。所有描述全網系統狀態的信息均被保存在一個分散式系統資料庫中,並且由所有參加實現系統功能的進程通過相互通訊來使全網系統的狀態保持一致。

系統資料庫可以是完全被分割的。也就是說,分布在各個主機上的資料庫都只是系統資料庫的一部分。並且相互之間都不相同。

系統資料庫也可以多拷貝的形式分布在多個主機上。

此外,還可以以部分多拷貝方式分布在多個主機上。也就是說,每一主機上的資料庫都是系統資料庫的一部分,但這些部分之間有相重複的部分。

分布資料庫的一致性

要實現並行控制,就必須保持系統資料庫多拷貝部分的一致性。因為只有這樣才能使網路上各個進程通過系統數據庠所觀察到的狀態是一致的,也才談得上實現各相關進程之間的同步運行。

所渭分布資料庫的一致性,實際上包含有兩方面的含義義。一是多拷貝之間的相互一致性,二是每一個資料庫拷貝內部的一致性。

所謂相互一致性就是說,這些多拷貝相互之間是相同的,但是,應當指出的是:在網路上,由於通訊的延遲,因而要求每一時刻都能使這些多拷貝保持一致是很困難的。比較合理的要求是。在適當的訪問資料庫操作完成後,多個資料庫多拷貝之間應當保持一致。

分布資料庫的內部一致性本身又有兩個方面的含義。

•1. 保持語義完整性的一致性。由於資料庫所反映的是客觀世界的某些事物。因此;數據席內部的數據之間常常存在著反映這些事物的關係(例如,在航空預約系統的數據麾庫中,每一航班的已訂機票數,未預定的機票數,及該航班的總座位數之間的關係是:該航班的總坐位數=已訂票數+未定的機票數),這就是所謂數據的語義完整性。

•因此,在資料庫上所進行的操作應當不要破壞這種語義的完整性。否則便不反映客觀實際情況。但是,要判斷那一種操作是否能保持語義的完整性,顯然與具體的套用有關。

•2. 在事務處理的調度中保持內部一致性。一個原子事務顯然可以保證資料庫內部的一致佳。這是因為原子事務就意味要么完全不執行這個事務,要么執行完這個事務,因此它不會破壞資料庫內部的一致性。但是,如果有多個事務在多個主機上都要對此資料庫進行庫操作,採用完全串列調度固然可以保證資料庫內部的一致性。但這會大大降低分布系統的效率。為了提高效率可以讓多個並行事務相互穿插進行以便在效果上相當子多個原子事務串列執行。

•因此也就可以既保證多個事務並行運行,又保證了資料庫內部的一致性。可是,怎樣實行這種可串列化的多事務調度呢?應當謹慎行事,因為,如果調度不當,把讀在前和寫在後的操作順序改成為寫在前和讀後的順序,那就會造成資料庫內部的不一致。

並行控制

在並行控制中,單片機用數條輸出口線直接去控制步進電動機各相繞組的驅動線路。 很顯然,電機功率接口中不包含環形分配器,環形分配器的功能必須由單片機來完成。而單片機實現脈衝分配器的功能又有兩種方法,一種是純軟體方法,即全部用軟體來實現相序配,直接輸出各相導通或截止的信號。另一種方法是軟體與硬體結合的方法,下面分別以電視機為例予以介紹。

純軟體方法

在這種方法中,單片機輸出口直接與功率接口耦合,環形分配器的功能全部由軟體來完成。如圖是其示意圖。8031的P1.0~P1.4 五條輸出線輸出相應的電機狀態:AB—ABC—BC—BCD—DC—CDE—DE—DEA—EA—EAB—AB,這稱為五相十拍運行狀態。這種純軟體方法,需要在記憶體ROM區域開闢一個存儲空間來存放這10種輸出狀態。

純軟體代替環形分配器 純軟體代替環形分配器

系統軟體按照電機正、反轉的要求,按正、反順序依次將狀態表的內容取出來並送至8031的輸出口。

例如,在程式存儲器OFFOH開始用lO個位元組存儲五相反應式步進電動機的五相十拍工作狀態表,並設低電平導通,高電平截止,則存儲狀態表的地址內容如表。

五相十拍狀態表 五相十拍狀態表

採用上述程式實現反轉,可省去狀態表中地址為0FFAH一1003H的部分,而且可以採用同一個計數器指針R0,在正轉任意步後接著反轉時,用不著為了避免亂步而調整指針的位置。

用純軟體方法代替脈衝分配器是比較靈活的。例如要求用8031的P1口輸出A、B、C、D四相脈衝,以控制四相混合式步進電機,則可採用更簡單的方法如下:

假定門口線為低電平時繞組通電,並用Pl口的P1.1、P1.3、P1.5、P1.7分別驅動A、B、C、D四相功率接口,則四相八拍的工作狀態可安排。

軟、硬體結合的方法

軟、硬體結合的方法可進一步減少單片機的工作時間占用,更有利於實現多台步進電動機的聯動控制。如圖是兩台步進電動機聯動控制系統的示意圖。在這種方法中,8031以P1.0~P1.3四條數據線接到多個EPROM的低四位地址線上,可選通每個EPROM的16個地址,也即16種狀態。EPROM的低位數據輸出線作為步進電動機A、B、C,D各相的控制線。EPROM作為一種解碼器,解碼器的輸人輸出關係可以設計得更加有利於微機控制。例如如下對應關係:

兩台步進電動機聯動控制系統 兩台步進電動機聯動控制系統

這種方法只需對計數器進行加1操作,然後送Pl口;環形分配器的功能不用主機負擔,不再需要串列控制中的延時,軟體開消減少。

Pl口的高位線,按線選法,選擇不同的EPROM,也即選擇不同的步進電動機。P1口高四位,最多可線選四台步進電動機聯動控制。分別選通1#和2#EPROM及相應的步進電動機。

步迸電動機開環變速控制

控制步進電動機的轉速,實際上就是控制轉換電機通電狀態的時間長短。有兩種基本方法,一種是軟體延時,另一種是定時器定時。

1.軟體延時方法

這種方法在每次轉換電機通電狀態(簡稱換向)後,調用一個延時子程式,待延時結束後,再次執行轉換狀態子程式。如此反覆使電機按某一確定轉速運轉。執行下面程式將控制電機正向連續旋轉。

2.定時器延時的方法

不同的單片機有不同數量的片載定時器/計數器。利用其中某個定時器,載入和溢出產生中斷信號,終止主程式的執行,轉向執行定時器中斷服務程式,來產生硬體延時的效果。若將電機換相子程式放在定時器中斷服務程式:之中,則定時器每中斷一次,電機就換相一次,從而實現對電機的速度控制。

並行控制結構

控制流與數據流

(1)控制流

控制流對我們來說是非常熟悉的模型, 特別是以往的(yonNeumann型)逐次控制流是控制流的代表.在逐次控制流中,從當前指令轉入下面要執行的指令,是由程式計數器暗中進行控制的,換句話說,一條控制流由程式計數器進行暗中指示.當然,控制流也可由GOTO這樣的指令公開指示。

另一方面源用並行控制運算符可以實現並待控制流,也就是可以實現幾個控制流同時激活.並行控制流有FORK。運算符(控制分支指令)和JOIN運算符,(分支控制間取同步的指令)等等

(2)數據流

如前所述,在控制流中也能實現並行執行,但為了實現並行執行,操作員必須公開記述並行控制運算符.另一方面,從LSI轉向VLSI的器件技術的迅速發展,有可能實現驅動多台處理器.以此為背景,近年來展開了對數據流的研究.在數據流申,如果運算所需要的數據完全齊備,就可以執行運算(稱為發火).然後,運算結果被送到下一運算.也就是在數據流中,由所傳送的數據啟動運算,因此有時把數據流啟動運算稱為數據驅動.數據流的最大特點是不象控制流那樣,由並行控制運算符公開指示並行執行,而是根據依賴關係,能夠很自然地並行執行可以並行執行的處理.

數據流語言和數據流程圖

運算所需要的數據完全備齊時,就發火、執行運算,然後運算結果被送到下面的運算.這樣的數據流概念只有開發出數據流語言和數據流機器之後,才能成為現實。

用數據流語言記述的程式被編譯後,轉換成數據流程圖,能直接執行數據流程圖的機器就是數據流機器.本節介紹數據流語言和數據流程圖,關於數據流機器將在後面介紹。

(1)數據流語言

數據流語言的最大特點是單一代入規則.簡單地說,就是向某一變數代入的數值最多只允許代入一個.下面用例子來加以說明。

並行控制 並行控制
並行控制 並行控制
並行控制 並行控制

在以前的程式設計語言中,允許象程式例1那樣代入,且經常使用.該代入的意義就是向為X保留的存儲單元寫或從該單元讀,也就是執行X:一5時,數值5被寫入存儲單元.執行x+1時,從X的存儲單元讀出數值5,並將其加1,其結果6再寫入為x保留的存儲單元.

但是,在數據流中沒有存儲單元的概念,所以不允許象程式例1那樣向變數代入兩次以上

也就是,在數據流語言中,變數並不是象以前的程式設計語言的變數那樣,表示存儲器的單元名,而是表示結果的結果名.這樣,對數據流來說,沒有存儲單元的概念,因此存在的問題是難於保留經歷的過程.

(2)數據流程圖

用數據流語言記述的程式被轉換成數據流程圖.

並行控制 並行控制

例如,表達式的數據流程圖如圖所示.

用○符號圈起來的部分叫做節,連線節與節的有向線段叫做弧.從圖看出,節相當於運算,弧表示數據流.流入節的弧數是運算的運算元的個數.在這個例子中,全部運算均為兩個運算元,例如在e節中,當B的值與C的值都到達時就發火,並執行減法運算,其結果出現在輸出弧上.此外,同一級的節可以並行執行.

這裡應注意的是,在表達式中,沒有指明哪一部分同哪一部分可以執行並行執行.然而,可以知道,在該表達式被編譯後產生的數據流程圖中,運算所需要的數據備齊並在處理器有冗餘(這種場合為兩台微處理器)時,則可並行執行○節和e節。

也就是說,即使程式設計師沒有意識和明確指示可並行執行的部分,如果程式被轉換成數據流程圖,那么從數據依賴關係就可以知道可並行執行的部分.換句話說,根據數據流就能自然地抽出程式中的並行性.

數據流的結構

從以免計算為理論基礎的函式型程式設計語言和數據流結構的研究開發過程,可以立刻發現兩者有親和性。例如,在函式型程式設計語言中有函式計算的獨立性,而在數據流結構中有通過備齊數據流中的輸入數據來啟動的運算獨立性,或在前者中有函式處理,而在後者中有運算間由於發出和接收數據所引起的運算間的依賴關係等等。

此外,對數據流結構來說,即使程式設計師沒有意識包含在算法中的並行性,也能以自然形式將它取出,所以可以推薦數據流結構作為面向Prolog的結構的一個有力補充。下面將介紹數據流結構的一般組成。

數據流結構的組成要素由處理部分和結構體存儲器兩種要素組成如圖。

並行控制 並行控制

這兩種要素每一種的個數以及用什麼樣的網路把它們的組成要素連線起來,要由體系結構專家來確定。

處理部分由佇列存儲器和運算部分組成一佇列存儲器控制數據排隊,如果發火所需要的數據備齊(也有到達一個數據就先發火的情況),就把這些數據和指令送給運算部件。

運算部件對數據執行指令,再將結果送給佇列存儲器.指令對結構體數據操作時,將指令與數據(實際上是結構體存儲器的指針)送入結構體存儲器。

對純數據流來說,數據本身在弧上流動,就會使結構體數據加長,所以直接讓它在弧上流動效率低.因此,引進了結構體存儲器來作為結構體數據的公共存儲器.結構體存儲器執行對結構體數據的存儲、管理、操怍。因此,弧上的數據分為兩種情況,一種情況t基數值本身,另一種情況是指示結構體存儲器的指針。

相關詞條

熱門詞條

聯絡我們