本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及命令隊(duì)列監(jiān)控電路和數(shù)據(jù)交換方法。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,多媒體信息的數(shù)據(jù)量也在迅速膨脹,因此,人們對(duì)于例如主機(jī)為計(jì)算機(jī)、存儲(chǔ)設(shè)備為閃存的不同設(shè)備之間的數(shù)據(jù)交換效率的要求也越來越高。
目前,通常可通過主機(jī)中的命令隊(duì)列來實(shí)現(xiàn)主機(jī)和閃存等存儲(chǔ)設(shè)備之間的數(shù)據(jù)交換。一般地,命令隊(duì)列的數(shù)目較多,而在數(shù)據(jù)交換的過程中,可能僅有部分命令隊(duì)列參與數(shù)據(jù)的寫入和讀取。然而為完成整個(gè)數(shù)據(jù)交換的過程,需要識(shí)別出是哪一個(gè)或者哪幾個(gè)命令隊(duì)列參與了數(shù)據(jù)的寫入和讀取。因此,存儲(chǔ)設(shè)備中的處理器需反復(fù)掃描每一個(gè)命令隊(duì)列,這不僅增加了處理器的負(fù)擔(dān),同時(shí)反復(fù)掃描每一個(gè)命令隊(duì)列還會(huì)浪費(fèi)大量的時(shí)間,降低了數(shù)據(jù)交換的效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
為此,本發(fā)明的第一個(gè)目的在于提出一種命令隊(duì)列監(jiān)控電路,能夠減小存儲(chǔ)設(shè)備中處理器的處理負(fù)擔(dān),提高數(shù)據(jù)交換的效率。
根據(jù)本發(fā)明的第一方面實(shí)施例的命令隊(duì)列監(jiān)控電路,包括:狀態(tài)寄存器,所述狀態(tài)寄存器存儲(chǔ)有對(duì)應(yīng)于命令隊(duì)列的狀態(tài)位;監(jiān)控電路,所述監(jiān)控電路耦合到存儲(chǔ)器,所述監(jiān)控電路用于讀取所述存儲(chǔ)器的預(yù)定地址范圍存儲(chǔ)的命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針,并判斷所述命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同,以及在判斷一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針不同時(shí),將所述狀態(tài)寄存器中對(duì)應(yīng)于所述一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位。
根據(jù)本發(fā)明第一方面實(shí)施例的命令隊(duì)列監(jiān)控電路還用于在判斷所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針相同時(shí),將所述狀態(tài)寄存器中對(duì)應(yīng)于所述一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位。
根據(jù)本發(fā)明第一方面實(shí)施例的命令隊(duì)列監(jiān)控電路,通過監(jiān)測存儲(chǔ)器中命令隊(duì)列的隊(duì)首 指針和隊(duì)尾指針,并可將隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,從而能夠依據(jù)狀態(tài)位,對(duì)隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,由此,可方便地識(shí)別出需要進(jìn)行數(shù)據(jù)處理的命令隊(duì)列,減小了存儲(chǔ)設(shè)備中處理器的負(fù)擔(dān),提高了數(shù)據(jù)交換效率。
根據(jù)本發(fā)明第二方面實(shí)施例的命令隊(duì)列監(jiān)控電路,包括:狀態(tài)寄存器,所述狀態(tài)寄存器存儲(chǔ)有對(duì)應(yīng)于命令隊(duì)列的狀態(tài)位;監(jiān)控電路,所述監(jiān)控電路用于截獲對(duì)存儲(chǔ)器的更新請(qǐng)求,并判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新,如果是,則將所述狀態(tài)寄存器中對(duì)應(yīng)于所述預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,當(dāng)所述更新請(qǐng)求為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),所述監(jiān)控電路還用于從所述存儲(chǔ)器中讀取與所述更新請(qǐng)求相對(duì)應(yīng)的命令隊(duì)列的隊(duì)首指針或隊(duì)尾指針,并判斷所述命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同,如果是,則將所述狀態(tài)寄存器中對(duì)應(yīng)于所述命令隊(duì)列的狀態(tài)位復(fù)位。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,當(dāng)所述更新請(qǐng)求為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),所述監(jiān)控電路還用于從所述存儲(chǔ)器中讀取與所述更新請(qǐng)求相對(duì)應(yīng)的命令隊(duì)列的隊(duì)首指針或隊(duì)尾指針,并判斷所述命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同,如果不同,則將所述狀態(tài)寄存器中對(duì)應(yīng)于所述命令隊(duì)列的狀態(tài)位置位。
根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,所述監(jiān)控電路包括:第一監(jiān)控組件,所述第一監(jiān)控組件用于判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)尾指針的更新請(qǐng)求,如果是,則產(chǎn)生命中指示信號(hào)。
進(jìn)一步地,根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,所述第一監(jiān)控組件還用于在判斷所述存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)尾指針被更新時(shí),向處理器發(fā)送中斷請(qǐng)求,以使所述處理器根據(jù)所述中斷請(qǐng)求處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,所述監(jiān)控電路包括:監(jiān)控單元,所述監(jiān)控單元響應(yīng)于接收到所述命中指示信號(hào),向處理器發(fā)送中斷請(qǐng)求,以使所述處理器根據(jù)所述中斷請(qǐng)求處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,所述處理器還用于輪詢所述狀態(tài)寄存器中存儲(chǔ)的對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位,并在判斷一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位時(shí),處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明第二方面的一個(gè)實(shí)施例,所述監(jiān)控電路還包括:第二監(jiān)控組件,所述第二監(jiān)控組件用于判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)首指針的更新請(qǐng)求,如果是,則進(jìn)一步判斷所述命令隊(duì)列的隊(duì)首指針是否與隊(duì)尾指 針相同,如果是,則將所述命令隊(duì)列對(duì)應(yīng)的狀態(tài)位復(fù)位。
根據(jù)本發(fā)明第二方面實(shí)施例的命令隊(duì)列監(jiān)控電路,通過截獲存儲(chǔ)器的更新請(qǐng)求,并在判斷更新請(qǐng)求為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),將狀態(tài)寄存器中對(duì)應(yīng)于預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位,從而能夠依據(jù)狀態(tài)位對(duì)隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,由此,可方便地識(shí)別出需要進(jìn)行數(shù)據(jù)處理的命令隊(duì)列,并避免了因監(jiān)測隊(duì)首指針和隊(duì)尾指針而導(dǎo)致的延時(shí),減小了存儲(chǔ)設(shè)備中處理器的負(fù)擔(dān),進(jìn)一步提高了數(shù)據(jù)交換效率。
根據(jù)本發(fā)明第三方面的第一數(shù)據(jù)交換方法,包括以下步驟:監(jiān)測存儲(chǔ)器中的命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,其中,由狀態(tài)位指示命令隊(duì)列的狀態(tài);判斷命令隊(duì)列的隊(duì)首指針和所述隊(duì)尾指針是否相同;如果一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針不同,則將所述一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位;處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明第三方面的數(shù)據(jù)交換方法,還包括:更新所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針;判斷所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針是否相同;如果是,則將所述一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位。
進(jìn)一步地,根據(jù)本發(fā)明第三方面的數(shù)據(jù)交換方法,還包括:將數(shù)據(jù)寫入所述一個(gè)或多個(gè)命令隊(duì)列,并更新所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針。
進(jìn)一步地,根據(jù)本發(fā)明第三方面的數(shù)據(jù)交換方法,還包括:從所述一個(gè)或多個(gè)命令隊(duì)列讀取所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,并更新所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針。
根據(jù)本發(fā)明第三方面的數(shù)據(jù)交換方法,其中處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素包括:根據(jù)中斷請(qǐng)求處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,其中,所述中斷請(qǐng)求是當(dāng)所述一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位被置位時(shí)生成的。
根據(jù)本發(fā)明第三方面的數(shù)據(jù)交換方法,其中處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素包括:輪詢對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位;如果一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,則處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
根據(jù)本發(fā)明第三方面的數(shù)據(jù)交換方法,通過監(jiān)測存儲(chǔ)器中命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,并可將隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,然后依據(jù)狀態(tài)位,對(duì)隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,由此,可方便地識(shí)別出需要進(jìn)行數(shù)據(jù)處理的命令隊(duì)列,減小了存儲(chǔ)設(shè)備中處理器的負(fù)擔(dān),提高了數(shù)據(jù)交換效率。
根據(jù)本發(fā)明的第四方面,提供了一種數(shù)據(jù)交換方法,其特征在于,包括以下步驟:截獲對(duì)存儲(chǔ)器的更新請(qǐng)求;并判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新; 如果是,則將所述狀態(tài)寄存器中對(duì)應(yīng)于所述預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位;處理所述命令隊(duì)列的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明的第四方面的數(shù)據(jù)交換方法,還包括:當(dāng)所述更新請(qǐng)求為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),從所述存儲(chǔ)器中讀取與所述更新請(qǐng)求相對(duì)應(yīng)的命令隊(duì)列的隊(duì)首指針或隊(duì)尾指針;判斷所述命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同;如果是,則將所述狀態(tài)寄存器中對(duì)應(yīng)于所述命令隊(duì)列的狀態(tài)位復(fù)位。
進(jìn)一步地,根據(jù)本發(fā)明的第四方面的數(shù)據(jù)交換方法,其中判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新,進(jìn)一步包括:判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)尾指針的更新請(qǐng)求;如果是,則將所述狀態(tài)寄存器中對(duì)應(yīng)于所述預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位。
進(jìn)一步地,根據(jù)本發(fā)明的第四方面的數(shù)據(jù)交換方法,其中在判斷所述存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)尾指針被更新時(shí),還包括:向處理器發(fā)送中斷請(qǐng)求,以使所述處理器根據(jù)所述中斷請(qǐng)求處理所述命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明的第四方面的數(shù)據(jù)交換方法,還包括:輪詢所述狀態(tài)寄存器中存儲(chǔ)的對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位,并在判斷一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位時(shí),處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明的第四方面的數(shù)據(jù)交換方法,其中判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍的更新,進(jìn)一步包括:判斷所述更新請(qǐng)求是否為對(duì)所述存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)首指針的更新請(qǐng)求;如果是,則進(jìn)一步判斷所述命令隊(duì)列的隊(duì)首指針是否與隊(duì)尾指針相同,如果是,則將所述命令隊(duì)列對(duì)應(yīng)的狀態(tài)位復(fù)位。
根據(jù)本發(fā)明的第四方面的數(shù)據(jù)交換方法,還包括:將所述數(shù)據(jù)寫入緩存中;將寫入在所述緩存中的數(shù)據(jù)寫入所述命令隊(duì)列。
根據(jù)本發(fā)明的第五方面,提供了一種設(shè)備,其特征在于,包括:存儲(chǔ)器;以及監(jiān)控器,所述監(jiān)控器用于監(jiān)測所述存儲(chǔ)器中的命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,并判斷命令隊(duì)列的隊(duì)首指針和所述隊(duì)尾指針是否相同,如果一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針不同,則將所述一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位;處理器,所述處理器用于處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
進(jìn)一步地,根據(jù)本發(fā)明第五方面的設(shè)備,其中所述處理器還用于更新所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針;所述監(jiān)控器還用于判斷所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針是否相同,如果是,則將所述一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位。
進(jìn)一步地,根據(jù)本發(fā)明第五方面的設(shè)備,其中所述處理器還用于從所述一個(gè)或多個(gè)命 令隊(duì)列讀取所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,并更新所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針。
根據(jù)本發(fā)明第五方面的設(shè)備,其中所述處理器用于根據(jù)中斷請(qǐng)求處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,其中,所述中斷請(qǐng)求是當(dāng)所述一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位被置位時(shí)生成的。
根據(jù)本發(fā)明第五方面的設(shè)備,其中所述處理器輪詢對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位,如果一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,則處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
根據(jù)本發(fā)明第五方面的設(shè)備,還包括:第一監(jiān)控組件,所述第一監(jiān)控組件用于監(jiān)測主機(jī)是否更新命令隊(duì)列的隊(duì)尾指針,并當(dāng)監(jiān)測到所述命令隊(duì)列的隊(duì)尾指針被更新時(shí),將所述命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,并向所述處理器發(fā)送中斷請(qǐng)求,以使所述處理器根據(jù)所述中斷請(qǐng)求處理所述命令隊(duì)列中的隊(duì)列元素并更新所述命令隊(duì)列的隊(duì)首指針;第二監(jiān)控組件,所述第二監(jiān)控組件用于讀取所述命令隊(duì)列的隊(duì)尾指針,并判斷所述命令隊(duì)列的隊(duì)首指針是否與所述隊(duì)尾指針相同,如果是,則將所述命令隊(duì)列對(duì)應(yīng)的狀態(tài)位復(fù)位。
進(jìn)一步地,根據(jù)本發(fā)明第五方面的設(shè)備,其中所述第一監(jiān)控組件還用于監(jiān)測主機(jī)是否更新命令隊(duì)列的隊(duì)尾指針,并當(dāng)監(jiān)測到所述命令隊(duì)列的隊(duì)尾指針被更新時(shí),將所述命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位;所述處理器輪詢對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位,如果一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,則處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素并更新所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針;所述第二監(jiān)控組件用于讀取所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針,并判斷所述一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針是否與所述隊(duì)尾指針相同,如果是,則將所述一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位復(fù)位。
本發(fā)明附加的方面的優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中,
圖1為根據(jù)本發(fā)明一個(gè)實(shí)施例的命令隊(duì)列監(jiān)控電路的原理圖;
圖2為根據(jù)本發(fā)明一個(gè)實(shí)施例的監(jiān)測設(shè)備中的每個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針的過程示意圖;
圖3為根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種命令隊(duì)列監(jiān)控電路的原理圖;
圖4為根據(jù)本發(fā)明另一個(gè)實(shí)施例的命令隊(duì)列監(jiān)控電路的原理圖;
圖5為根據(jù)本發(fā)明一個(gè)實(shí)施例的第一監(jiān)控組件的原理圖;
圖6為根據(jù)本發(fā)明一個(gè)實(shí)施例的第二監(jiān)控組件的原理圖;
圖7為根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)交換方法的流程圖;
圖8為根據(jù)本發(fā)明一個(gè)實(shí)施例的設(shè)備的原理圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。相反,本發(fā)明的實(shí)施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
在本發(fā)明的描述中,需要理解的是,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性。在本發(fā)明的描述中,需要說明的是,除非另有明確的規(guī)定和限定,術(shù)語“相連”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明中的具體含義。此外,在本發(fā)明的描述中,除非另有說明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個(gè)或更多個(gè)用于實(shí)現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本發(fā)明的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
圖1為根據(jù)本發(fā)明一個(gè)實(shí)施例的命令隊(duì)列監(jiān)控電路的原理圖。
如圖1所示,本發(fā)明實(shí)施例的命令隊(duì)列監(jiān)控電路,包括:狀態(tài)寄存器110和監(jiān)控電路120。其中,監(jiān)控電路120耦合到存儲(chǔ)器。
狀態(tài)寄存器110存儲(chǔ)有對(duì)應(yīng)于命令隊(duì)列的狀態(tài)位,監(jiān)控電路120用于讀取存儲(chǔ)器的預(yù)定地址范圍存儲(chǔ)的命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針,并判斷命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同,以及在判斷一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針不同時(shí),將狀態(tài)寄存器110中對(duì)應(yīng)于一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位。
在本發(fā)明的一個(gè)實(shí)施例中,命令隊(duì)列可存儲(chǔ)于主機(jī)中,其隊(duì)首指針和隊(duì)尾指針可存儲(chǔ) 于存儲(chǔ)器中,其中,命令隊(duì)列的個(gè)數(shù)通常為多個(gè),如1024個(gè),但是可以理解的是,命令隊(duì)列的個(gè)數(shù)可根據(jù)實(shí)際需要進(jìn)行配置。
具體地,如圖2所示,假設(shè)主機(jī)中有隊(duì)列0至隊(duì)列1023,共1024個(gè)命令隊(duì)列,可通過反復(fù)查詢存儲(chǔ)器中的用于存儲(chǔ)每個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針的存儲(chǔ)空間或寄存器來監(jiān)測每個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針。
在主機(jī)和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)交換的過程中,隊(duì)首指針和/或隊(duì)尾指針會(huì)發(fā)生改變。具體地,若主機(jī)將數(shù)據(jù)寫入一個(gè)或多個(gè)命令隊(duì)列,則一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針也會(huì)被更新;若監(jiān)控電路120從一個(gè)或多個(gè)命令隊(duì)列讀取一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,則一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針也會(huì)被相應(yīng)更新。
在本發(fā)明的一個(gè)實(shí)施例中,可對(duì)狀態(tài)位被置位的一個(gè)或多個(gè)命令隊(duì)列中的元素進(jìn)行處理。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位被置位時(shí),可生成中斷請(qǐng)求,從而可根據(jù)中斷請(qǐng)求處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。在另一個(gè)實(shí)施例中,處理器可查詢或輪詢一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位,從而可根據(jù)狀態(tài)位的信息處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
在本發(fā)明的一個(gè)實(shí)施例中,監(jiān)控電路120從一個(gè)或多個(gè)命令隊(duì)列讀取一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素后,會(huì)更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針。當(dāng)不再向一個(gè)或多個(gè)命令隊(duì)列中寫入數(shù)據(jù),同時(shí)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素被讀取完成時(shí),此時(shí)命令隊(duì)列中的隊(duì)列元素為空,無需再對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理。因此,根據(jù)本發(fā)明實(shí)施例的命令隊(duì)列監(jiān)控電路,監(jiān)控電路120還可用于:在判斷一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針相同時(shí),將狀態(tài)寄存器110中對(duì)應(yīng)于一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位,以指示命令隊(duì)列中的元素為空。在一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位后,不再處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
根據(jù)本發(fā)明實(shí)施例的命令隊(duì)列監(jiān)控電路,通過監(jiān)測存儲(chǔ)器中命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,并可將隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,從而能夠依據(jù)狀態(tài)位對(duì)隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,由此,可方便地識(shí)別出需要進(jìn)行數(shù)據(jù)處理的命令隊(duì)列,減小了設(shè)備中處理器的負(fù)擔(dān),提高了數(shù)據(jù)交換效率。
為進(jìn)一步提高數(shù)據(jù)交換效率,本發(fā)明還提出另一種命令隊(duì)列監(jiān)控電路。
圖3為根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種命令隊(duì)列監(jiān)控電路的原理圖。
如圖3所示,本發(fā)明實(shí)施例的命令隊(duì)列監(jiān)控電路,包括:狀態(tài)寄存器310和監(jiān)控電路320。
其中,狀態(tài)寄存器310存儲(chǔ)有對(duì)應(yīng)于命令隊(duì)列的狀態(tài)位,監(jiān)控電路320用于截獲對(duì)存 儲(chǔ)器的更新請(qǐng)求,并判斷更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新,如果是,則將狀態(tài)寄存器310中對(duì)應(yīng)于預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位。
在本發(fā)明的一個(gè)實(shí)施例中,如果對(duì)存儲(chǔ)器中預(yù)定地址范圍進(jìn)行更新,則可判斷出命令隊(duì)列中的隊(duì)列元素需要處理。相應(yīng)地,監(jiān)控電路320將狀態(tài)寄存器310中對(duì)應(yīng)于預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位,以能夠根據(jù)狀態(tài)位處理命令隊(duì)列中的隊(duì)列元素。
當(dāng)不再向一個(gè)或多個(gè)命令隊(duì)列中寫入數(shù)據(jù),同時(shí)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素被讀取完成時(shí),此時(shí)命令隊(duì)列中的隊(duì)列元素為空,無需再對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理。因此,當(dāng)更新請(qǐng)求為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),監(jiān)控電路320還用于從存儲(chǔ)器中讀取與更新請(qǐng)求相對(duì)應(yīng)的命令隊(duì)列的隊(duì)首指針或隊(duì)尾指針,并判斷該命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同,如果是,則將狀態(tài)寄存器310中對(duì)應(yīng)于該命令隊(duì)列的狀態(tài)位復(fù)位,以指示命令隊(duì)列中的元素為空。在一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位后,不再處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。應(yīng)當(dāng)理解,如果一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針不同,則仍將狀態(tài)寄存器310中對(duì)應(yīng)于一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位。
根據(jù)本發(fā)明實(shí)施例的命令隊(duì)列監(jiān)控電路,通過截獲存儲(chǔ)器的更新請(qǐng)求,并在判斷更新請(qǐng)求為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),將狀態(tài)寄存器中對(duì)應(yīng)于預(yù)定地址范圍的命令隊(duì)列的狀態(tài)位置位,從而能夠依據(jù)狀態(tài)位對(duì)隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,由此,可方便地識(shí)別出需要進(jìn)行數(shù)據(jù)處理的命令隊(duì)列,并避免了因監(jiān)測隊(duì)首指針和隊(duì)尾指針而導(dǎo)致的延時(shí),減小了存儲(chǔ)設(shè)備中處理器的負(fù)擔(dān),進(jìn)一步提高了數(shù)據(jù)交換效率。
此外,如圖4所示,根據(jù)本發(fā)明實(shí)施例的命令隊(duì)列監(jiān)控電路,監(jiān)控電路320可包括第一監(jiān)控組件321和監(jiān)控單元322。第一監(jiān)控組件321用于判斷更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)尾指針的更新請(qǐng)求,如果是,則產(chǎn)生命中指示信號(hào)。監(jiān)控單元322可響應(yīng)于接收到命中指示信號(hào),向處理器發(fā)送中斷請(qǐng)求,以使處理器根據(jù)中斷請(qǐng)求處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
具體地,當(dāng)更新請(qǐng)求為對(duì)存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)尾指針的更新請(qǐng)求時(shí),第一監(jiān)控組件321可向監(jiān)控單元322發(fā)送命中指示,以告知監(jiān)控單元322來自主機(jī)的存儲(chǔ)器更新請(qǐng)求命中了隊(duì)尾指針存儲(chǔ)位置。因而監(jiān)控單元322將知曉隊(duì)尾指針被更新。第一監(jiān)控組件321還基于主機(jī)發(fā)出的更新命令隊(duì)列的隊(duì)尾指針的請(qǐng)求來向存儲(chǔ)器執(zhí)行寫入操作。在一個(gè)實(shí)施例中,響應(yīng)于隊(duì)尾指針被更新,監(jiān)控單元322更新同該隊(duì)尾指針的隊(duì)列相對(duì)應(yīng)的狀態(tài)位,以指示處理器響應(yīng)隊(duì)列中有隊(duì)列元素需要處理。監(jiān)控單元322可向處理器發(fā)送中斷來告知處理器命令隊(duì)列中有隊(duì)列元素需要處理。在本發(fā)明的另一個(gè)實(shí)施例中,響 應(yīng)于隊(duì)尾值被更新,監(jiān)控電路320從存儲(chǔ)器中讀取同該隊(duì)尾指針相對(duì)應(yīng)的隊(duì)首指針,并判斷隊(duì)尾指針與隊(duì)首指針是否相同。如果隊(duì)尾指針與隊(duì)首指針不同,監(jiān)控電路320更新同該隊(duì)尾指針的隊(duì)列相對(duì)應(yīng)的狀態(tài)位,以指示處理器相應(yīng)命令隊(duì)列中有隊(duì)列元素需要處理。
在本發(fā)明的一個(gè)實(shí)施例中,處理器還可用于輪詢狀態(tài)寄存器310中存儲(chǔ)的對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位,并在判斷一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位時(shí),處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
當(dāng)不再向一個(gè)或多個(gè)命令隊(duì)列中寫入數(shù)據(jù),同時(shí)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素被讀取完成時(shí),此時(shí)命令隊(duì)列中的隊(duì)列元素為空,無需再對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理。因此,如圖4所示,通過第二監(jiān)控組件323判斷更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍內(nèi)的命令隊(duì)列的隊(duì)首指針的更新請(qǐng)求,如果是,則進(jìn)一步判斷該命令隊(duì)列的隊(duì)首指針是否與隊(duì)尾指針相同,如果是,則將該命令隊(duì)列對(duì)應(yīng)的狀態(tài)位復(fù)位,以指示命令隊(duì)列中的元素為空。在命令隊(duì)列的狀態(tài)位復(fù)位后,不再處理該命令隊(duì)列中的隊(duì)列元素。
下面將結(jié)合第一監(jiān)控組件和第二監(jiān)控組件的原理圖詳細(xì)描述其工作流程。
圖5為根據(jù)本發(fā)明一個(gè)實(shí)施例的第一監(jiān)控組件321的原理圖。如圖5所示,第一監(jiān)控組件321可包括緩存單元11、第一狀態(tài)機(jī)12、第一比較單元13和第一執(zhí)行單元14。第一監(jiān)控組件321監(jiān)控從主機(jī)到存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求。
在本發(fā)明的一個(gè)實(shí)施例中,主機(jī)可通過緩存向一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾/隊(duì)首指針的存儲(chǔ)位置中寫入數(shù)據(jù)。第一監(jiān)控組件321通過緩存單元11緩存來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求。緩存單元11是可選的。緩存來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求,可更早地向主機(jī)返回?cái)?shù)據(jù)寫入成功的指示,以提升對(duì)數(shù)據(jù)寫入請(qǐng)求的處理速度。按照先進(jìn)先出的方式緩存來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求。
第一狀態(tài)機(jī)12通過第一比較單元13判斷主機(jī)的數(shù)據(jù)寫入請(qǐng)求中的地址是否位于用于存儲(chǔ)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾/隊(duì)首指針的地址范圍內(nèi)。例如,第一比較單元13比較來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求中的地址的高位與一個(gè)或多個(gè)命令隊(duì)列隊(duì)首/隊(duì)尾指針存儲(chǔ)空間的基地址進(jìn)行比較。若主機(jī)的數(shù)據(jù)寫入請(qǐng)求中的地址位于上述地址范圍內(nèi),則可判斷主機(jī)更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針,第一比較單元13產(chǎn)生指示命中的信號(hào),并發(fā)送給監(jiān)控單元322(參看圖4)。這里假定主機(jī)對(duì)命令隊(duì)列隊(duì)首/隊(duì)尾指針的寫操作總是對(duì)指針進(jìn)行增量更新。
第一執(zhí)行單元14將隊(duì)尾指針的新值寫入存儲(chǔ)器,以完成對(duì)來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求的執(zhí)行。在一個(gè)例子中,第一執(zhí)行單元14的執(zhí)行不依賴于第一比較單元13的比較結(jié)果。即使來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求的地址不在用于存儲(chǔ)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾/隊(duì)首指針的 地址范圍內(nèi),第一執(zhí)行單元14依然執(zhí)行對(duì)存儲(chǔ)器的寫入操作。需要指出的是,第一執(zhí)行單元14是可選的。在一個(gè)例子中,第一監(jiān)控組件321不包括第一執(zhí)行單元,第一比較單元13捕獲發(fā)送給存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求,而不干預(yù)對(duì)存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求。
繼續(xù)參看圖4,響應(yīng)于接收到第一比較單元13的指示命中的信號(hào),監(jiān)控電路320更新狀態(tài)位。監(jiān)控電路320利用從來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求的地址中確定的命令隊(duì)列的隊(duì)列號(hào),更新與該隊(duì)列號(hào)相對(duì)應(yīng)的命令隊(duì)列的狀態(tài)位。在一個(gè)例子中,監(jiān)控電路320從第一狀態(tài)機(jī)12接收命令隊(duì)列的隊(duì)列號(hào),并利用該隊(duì)列號(hào)更新與該隊(duì)列號(hào)相對(duì)應(yīng)的命令隊(duì)列的狀態(tài)位。
下面描述第一監(jiān)控組件321的工作流程。在系統(tǒng)上電或復(fù)位后,第一監(jiān)控組件321處于空閑狀態(tài),并等待來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求。在收到來自主機(jī)的數(shù)據(jù)寫入請(qǐng)求后,第一比較單元13確定數(shù)據(jù)寫入請(qǐng)求中的地址是否位于用于存儲(chǔ)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾/隊(duì)首指針的地址范圍內(nèi),并相應(yīng)地向監(jiān)控單元322發(fā)送指示命中的信號(hào)。第一監(jiān)控組件321還接收來自監(jiān)控單元322返回的應(yīng)答信號(hào)。在收到監(jiān)控單元322返回的應(yīng)答信號(hào)后,第一監(jiān)控組件321返回空閑狀態(tài)。
繼續(xù)參看圖4,根據(jù)本發(fā)明實(shí)施例的監(jiān)控電路320連同狀態(tài)寄存器310、處理器以及存儲(chǔ)器,構(gòu)成了根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理電路。監(jiān)控電路320同主機(jī)、處理器以及存儲(chǔ)器相耦合。處理器還耦合到狀態(tài)寄存器310。第一監(jiān)控組件321捕獲主機(jī)對(duì)存儲(chǔ)器的訪問請(qǐng)求;第二監(jiān)控組件323捕獲處理器對(duì)存儲(chǔ)器的訪問請(qǐng)求。根據(jù)本發(fā)明的數(shù)據(jù)處理電路可實(shí)現(xiàn)為集成電路或ip核,用于處理主機(jī)與設(shè)備之間根據(jù)nvme協(xié)議的數(shù)據(jù)交換。例如,主機(jī)根據(jù)nvme協(xié)議向存儲(chǔ)器寫入命令隊(duì)列的隊(duì)尾值。監(jiān)控電路320更新狀態(tài)寄存器310以指示命令隊(duì)列的隊(duì)尾值與隊(duì)首值不同?;跔顟B(tài)寄存器310向處理器發(fā)出中斷,或由處理器查詢狀態(tài)寄存器310,并對(duì)相應(yīng)命令隊(duì)列進(jìn)行處理。在又一個(gè)例子中,處理器根據(jù)nvme協(xié)議向存儲(chǔ)器寫入命令隊(duì)列的隊(duì)首值。監(jiān)控電路320更新狀態(tài)寄存器310以指示命令隊(duì)列的隊(duì)尾值與隊(duì)首值是否相同。
在依然又一個(gè)實(shí)施例中,繼續(xù)參看圖4,根據(jù)本發(fā)明實(shí)施例的監(jiān)控電路320連同狀態(tài)寄存器310、處理器、存儲(chǔ)器以及主機(jī),構(gòu)成了根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理系統(tǒng)。監(jiān)控電路320同主機(jī)、處理器以及存儲(chǔ)器相耦合。處理器還耦合到狀態(tài)寄存器310。第一監(jiān)控組件321捕獲主機(jī)對(duì)存儲(chǔ)器的訪問請(qǐng)求;第二監(jiān)控組件323捕獲處理器對(duì)存儲(chǔ)器的訪問請(qǐng)求。根據(jù)本發(fā)明的數(shù)據(jù)處理系統(tǒng),在處理主機(jī)與設(shè)備之間根據(jù)nvme協(xié)議進(jìn)行數(shù)據(jù)交換。
圖6為根據(jù)本發(fā)明一個(gè)實(shí)施例的第二監(jiān)控組件323的原理圖。如圖6所示,第二監(jiān)控組件323可包括第二狀態(tài)機(jī)31、第二比較單元32和第二執(zhí)行單元33。第二監(jiān)控組件323監(jiān)控從處理器(參看圖4)到存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求。
處理器對(duì)存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求被第二監(jiān)控組件323截獲。在第二監(jiān)控組件323的第二狀態(tài)機(jī)31的控制下,第二比較單元32判斷數(shù)據(jù)訪問請(qǐng)求中的地址是否位于用于存儲(chǔ)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾/隊(duì)首指針的地址范圍內(nèi)。如果一致,則可確定處理器要更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首/隊(duì)尾指針。相應(yīng)地,第二比較單元32產(chǎn)生指示命中的信號(hào),并發(fā)送給監(jiān)控單元322(參看圖4)。
第二執(zhí)行單元33將隊(duì)首/隊(duì)尾指針的新值寫入存儲(chǔ)器,以完成對(duì)來自處理器的數(shù)據(jù)寫入請(qǐng)求的執(zhí)行。在一個(gè)例子中,第二執(zhí)行單元33的執(zhí)行不依賴于第二比較單元32的比較結(jié)果。即使來自處理器的數(shù)據(jù)寫入請(qǐng)求的地址不在用于存儲(chǔ)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾/隊(duì)首指針的地址范圍內(nèi),第二執(zhí)行單元33依然執(zhí)行對(duì)存儲(chǔ)器的寫入操作。
監(jiān)控電路320(參看圖4)收到第二比較單元32的指示命中的信號(hào)后,判斷是否需要更新與命令隊(duì)列相關(guān)聯(lián)的狀態(tài)位。
在一個(gè)實(shí)施例中,第二監(jiān)控組件323不提供緩存單元。第二監(jiān)控組件323接收到來自監(jiān)控單元322的應(yīng)答,以及完成對(duì)存儲(chǔ)器的寫入操作后,通知處理器數(shù)據(jù)寫入請(qǐng)求執(zhí)行完成。
在又一個(gè)實(shí)施例中,第二監(jiān)控組件323不提供第二執(zhí)行單元33。第二比較單元32捕獲發(fā)送給存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求,而不干預(yù)對(duì)存儲(chǔ)器的數(shù)據(jù)寫入請(qǐng)求。
在根據(jù)本發(fā)明的又一個(gè)實(shí)施例中,第二狀態(tài)機(jī)31將數(shù)據(jù)寫入請(qǐng)求所對(duì)應(yīng)的命令隊(duì)列的隊(duì)列號(hào)發(fā)送給監(jiān)控單元322。第二狀態(tài)機(jī)31還將來自處理器的要更新的隊(duì)首值發(fā)送給監(jiān)控單元322。
相應(yīng)地,監(jiān)控單元322響應(yīng)于接收到來自第二比較單元33的指示命中的信號(hào),依據(jù)接收的命令隊(duì)列的隊(duì)列號(hào),從存儲(chǔ)器中讀取相應(yīng)的隊(duì)尾值,比較來自第二狀態(tài)機(jī)31的隊(duì)首值與來自存儲(chǔ)器的隊(duì)尾值是否相同。若相同,監(jiān)控電路320將同該隊(duì)列號(hào)相對(duì)應(yīng)的狀態(tài)位復(fù)位;若不同,監(jiān)控電路320使同該隊(duì)列號(hào)相對(duì)應(yīng)的狀態(tài)位保持置位。
由此,可在監(jiān)測到命令隊(duì)列的隊(duì)尾指針被更新時(shí),通過監(jiān)控組件和監(jiān)控器的請(qǐng)求,或通過處理器輪詢狀態(tài)位,以使處理器處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,從而能夠在第一時(shí)間知曉隊(duì)尾指針被更新,避免了反復(fù)查詢?cè)O(shè)備中的每個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針,減小了存儲(chǔ)設(shè)備中的存儲(chǔ)帶寬占用,降低了監(jiān)測延時(shí),從而使設(shè)備能夠及時(shí)處理數(shù)據(jù),進(jìn)一步提高了數(shù)據(jù)交換效率,同時(shí),能夠防止因監(jiān)測延時(shí)而導(dǎo)致的狀態(tài)位信息不對(duì)應(yīng),提高了監(jiān)測的正確率。
圖7為根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)交換方法的流程圖。
如圖7所示,本發(fā)明實(shí)施例的數(shù)據(jù)交換方法,包括以下步驟:
s701,監(jiān)測存儲(chǔ)器中的命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,其中,由狀態(tài)位指示命令隊(duì)列的狀態(tài)。
在本發(fā)明的一個(gè)實(shí)施例中,命令隊(duì)列可存儲(chǔ)于主機(jī)中,隊(duì)首指針和隊(duì)尾指針可存儲(chǔ)于設(shè)備中,其中,命令隊(duì)列的個(gè)數(shù)通常為多個(gè),如1024個(gè),但是可以理解的是,命令隊(duì)列的個(gè)數(shù)可根據(jù)實(shí)際需要進(jìn)行配置。在主機(jī)和設(shè)備之間進(jìn)行數(shù)據(jù)交換的過程中,隊(duì)首指針和/或隊(duì)尾指針會(huì)發(fā)生改變。具體地,若主機(jī)將數(shù)據(jù)寫入一個(gè)或多個(gè)命令隊(duì)列,則一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針也會(huì)被更新;若設(shè)備從一個(gè)或多個(gè)命令隊(duì)列讀取一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,則一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針也會(huì)被相應(yīng)更新。
在本發(fā)明的一個(gè)實(shí)施例中,命令隊(duì)列可與狀態(tài)位相對(duì)應(yīng),從而在后續(xù)的步驟中,可根據(jù)命令隊(duì)列的狀態(tài)位判斷是否需要處理該命令隊(duì)列中的元素。
s702,判斷命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針是否相同。
s703,如果一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針不同,則將一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位。例如將狀態(tài)位置為1。
s704,處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
應(yīng)當(dāng)理解,當(dāng)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針不同時(shí),則可判斷出一個(gè)或多個(gè)命令隊(duì)列中存在需要被處理的隊(duì)列元素,亦即設(shè)備可以從一個(gè)或多個(gè)命令隊(duì)列讀取隊(duì)列元素。
在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位被置位時(shí),可生成中斷請(qǐng)求,從而可根據(jù)中斷請(qǐng)求處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。在另一個(gè)實(shí)施例中,處理器可查詢或輪詢一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位,從而可根據(jù)狀態(tài)位的信息處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
在本發(fā)明的一個(gè)實(shí)施例中,設(shè)備從一個(gè)或多個(gè)命令隊(duì)列讀取一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素后,會(huì)更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針。當(dāng)不再向一個(gè)或多個(gè)命令隊(duì)列中寫入數(shù)據(jù),同時(shí)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素被讀取完成時(shí),無需再對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理。因此,根據(jù)本發(fā)明實(shí)施例的用于主機(jī)和設(shè)備之間的數(shù)據(jù)交換方法,還可包括:更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針,并判斷一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針是否相同,如果是,則將一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位。在一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位后,不再處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)交換方法,通過監(jiān)測存儲(chǔ)器中命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,并可將隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位,然后依據(jù)狀態(tài)位,對(duì) 隊(duì)首指針和隊(duì)尾指針不同的命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,由此,可方便地識(shí)別出需要進(jìn)行數(shù)據(jù)處理的命令隊(duì)列,減小了存儲(chǔ)設(shè)備中處理器的負(fù)擔(dān),提高了數(shù)據(jù)交換效率。
在步驟s701中,如圖2所示,假設(shè)主機(jī)中有隊(duì)列0至隊(duì)列1023,共1024個(gè)命令隊(duì)列,可通過反復(fù)查詢?cè)O(shè)備中的用于存儲(chǔ)每個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針的存儲(chǔ)空間或寄存器來監(jiān)測每個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針。
如前文所述,在主機(jī)和設(shè)備之間的數(shù)據(jù)交換的過程中,可將數(shù)據(jù)寫入一個(gè)或多個(gè)命令隊(duì)列,并更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針。在一個(gè)例子中,將數(shù)據(jù)寫入緩存中,并將寫入在緩存中的數(shù)據(jù)寫入一個(gè)或多個(gè)命令隊(duì)列。除通過隊(duì)首指針和隊(duì)尾指針外,還可通過對(duì)地址的更新判斷是否要對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理,因此,在本發(fā)明的一個(gè)實(shí)施例中,還可監(jiān)測存儲(chǔ)器的更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新。
具體地,可截獲對(duì)存儲(chǔ)器的更新請(qǐng)求,并判斷更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新,如果是,則將狀態(tài)寄存器中對(duì)應(yīng)于預(yù)定地址范圍的一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位,并處理一個(gè)或多個(gè)命令隊(duì)列的隊(duì)列元素。
當(dāng)不再向一個(gè)或多個(gè)命令隊(duì)列中寫入數(shù)據(jù),同時(shí)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素被讀取完成時(shí),此時(shí)命令隊(duì)列中的隊(duì)列元素為空,無需再對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理。因此,當(dāng)更新請(qǐng)求為對(duì)存儲(chǔ)器中預(yù)定地址范圍的更新時(shí),從存儲(chǔ)器中讀取與更新請(qǐng)求相對(duì)應(yīng)的一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針或隊(duì)尾指針,判斷一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針是否相同,如果是,則將狀態(tài)寄存器中對(duì)應(yīng)于一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位,以指示命令隊(duì)列中的元素為空。在一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位后,不再處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
在本發(fā)明的一個(gè)實(shí)施例中,還可先判斷是否更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針,從而能夠在第一時(shí)間知曉隊(duì)尾指針被更新,進(jìn)而檢查隊(duì)尾指針與隊(duì)首指針是否相同。具體地,截獲主機(jī)對(duì)存儲(chǔ)空間或寄存器的訪問請(qǐng)求后,可判斷更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍內(nèi)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針的更新請(qǐng)求,如果是,則將狀態(tài)寄存器中對(duì)應(yīng)于預(yù)定地址范圍的一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位。例如,通過比較訪問請(qǐng)求中的地址與存儲(chǔ)隊(duì)尾指針的存儲(chǔ)空間或寄存器地址之一是否相同,來判斷主機(jī)更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針。又例如,通過比較訪問請(qǐng)求中的地址的高位部分與存儲(chǔ)隊(duì)尾指針的存儲(chǔ)空間的基地址是否相同,并進(jìn)一步比較訪問請(qǐng)求中的地址的低位部分是否對(duì)應(yīng)于存儲(chǔ)隊(duì)尾指針的存儲(chǔ)空間或寄存器之一,來判斷主機(jī)更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針。
進(jìn)一步地,可以緩存主機(jī)的訪問請(qǐng)求,以在訪問請(qǐng)求完成之前,向主機(jī)返回訪問請(qǐng)求執(zhí)行成功的消息。
在本發(fā)明的一個(gè)實(shí)施例中,在判斷存儲(chǔ)器中預(yù)定地址范圍內(nèi)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針被更新時(shí),可向處理器發(fā)送中斷請(qǐng)求,以使處理器根據(jù)中斷請(qǐng)求處理所述一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。還可輪詢狀態(tài)寄存器中存儲(chǔ)的對(duì)應(yīng)于每個(gè)命令隊(duì)列的狀態(tài)位,并在判斷一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位置位時(shí),處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
當(dāng)不再向一個(gè)或多個(gè)命令隊(duì)列中寫入數(shù)據(jù),同時(shí)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素被讀取完成時(shí),此時(shí)命令隊(duì)列中的隊(duì)列元素為空,無需再對(duì)一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素進(jìn)行處理。因此,還可判斷更新請(qǐng)求是否為對(duì)存儲(chǔ)器中預(yù)定地址范圍內(nèi)一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針的更新請(qǐng)求,如果是,則進(jìn)一步判斷一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針是否與隊(duì)尾指針相同,如果是,則將一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位復(fù)位,以指示命令隊(duì)列中的元素為空。在一個(gè)或多個(gè)命令隊(duì)列的狀態(tài)位復(fù)位后,不再處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
根據(jù)本發(fā)明上述實(shí)施例的數(shù)據(jù)交換方法,在監(jiān)測到命令隊(duì)列的隊(duì)尾指針被更新時(shí),將隊(duì)首指針與隊(duì)尾指針作比較,由此,可避免反復(fù)查詢?cè)O(shè)備中的每個(gè)命令隊(duì)列的隊(duì)首指針與隊(duì)尾指針,減小了存儲(chǔ)設(shè)備中的存儲(chǔ)帶寬占用,降低了監(jiān)測延時(shí),從而使設(shè)備能夠及時(shí)處理數(shù)據(jù),進(jìn)一步提高了數(shù)據(jù)交換效率,同時(shí),能夠防止因監(jiān)測延時(shí)而導(dǎo)致的狀態(tài)位信息不對(duì)應(yīng),提高了監(jiān)測的正確率。
為實(shí)現(xiàn)上述實(shí)施例的數(shù)據(jù)交換方法,本發(fā)明還提出一種設(shè)備。
圖8為根據(jù)本發(fā)明一個(gè)實(shí)施例的設(shè)備的原理圖。
如圖8所示,本發(fā)明實(shí)施例的設(shè)備,包括:存儲(chǔ)器81、監(jiān)控器82和處理器83。
監(jiān)控器82用于監(jiān)測存儲(chǔ)器81中的命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針,并判斷命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針是否相同,如果一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針和隊(duì)尾指針不同,則將一個(gè)或多個(gè)命令隊(duì)列對(duì)應(yīng)的狀態(tài)位置位;處理器83用于處理一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素。
在本發(fā)明的一個(gè)實(shí)施例中,命令隊(duì)列可存儲(chǔ)于主機(jī)中,隊(duì)首指針和隊(duì)尾指針可存儲(chǔ)于設(shè)備的存儲(chǔ)器中,其中,命令隊(duì)列的個(gè)數(shù)可根據(jù)實(shí)際需要進(jìn)行配置。在本發(fā)明的一個(gè)實(shí)施例中,主機(jī)還用于將數(shù)據(jù)寫入一個(gè)或多個(gè)命令隊(duì)列,并更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針;處理器83還用于從一個(gè)或多個(gè)命令隊(duì)列取出一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素,并更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)首指針。在主機(jī)和設(shè)備之間進(jìn)行數(shù)據(jù)交換的過程中,隊(duì)首指針和/或隊(duì)尾指針會(huì)發(fā)生改變。在本發(fā)明的另一個(gè)實(shí)施例中,設(shè)備用于將數(shù)據(jù)寫入一個(gè)或多個(gè)命令隊(duì)列,并更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾指針;主機(jī)還用于從一個(gè)或多個(gè)命令隊(duì)列中取出一個(gè)或多個(gè)命令隊(duì)列中的隊(duì)列元素并更新一個(gè)或多個(gè)命令隊(duì)列的隊(duì)尾首針。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。例如,如果用硬件來實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現(xiàn)場可編程門陣列(fpga)等。
在本說明書的描述中,參考術(shù)語“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說明書中,對(duì)上述術(shù)語的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。