• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    LET模型的時間語義編程語言

    2022-03-02 08:31:32陳香蘭
    關(guān)鍵詞:語法結(jié)構(gòu)編譯器指令

    吳 昊,章 博,陳香蘭,王 超,李 曦

    中國科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥230026

    在實(shí)時系統(tǒng)中,如一個汽車、機(jī)器人系統(tǒng),系統(tǒng)的正確性同時取決于邏輯和時間的正確性。系統(tǒng)行為的定時、及時發(fā)生需要在軟件中明確指定,并在實(shí)時平臺上正確執(zhí)行。然而,現(xiàn)有的編程語言缺乏顯示表達(dá)系統(tǒng)時間屬性的語法結(jié)構(gòu),為此實(shí)時系統(tǒng)領(lǐng)域逐漸衍生出了各種實(shí)時語言來顯示表達(dá)系統(tǒng)的時間屬性。

    嵌入式實(shí)時系統(tǒng)編程模型根據(jù)其發(fā)展歷程和應(yīng)用場景的需求主要可以分為三類:有界執(zhí)行時間模型(bounded execution time,BET)[1]、零執(zhí)行時間模型(zero execution time,ZET)[2]以及邏輯執(zhí)行時間模型(logical execution time,LET)[3]。目前的實(shí)時編程語言便基于這三種編程模型。

    有界執(zhí)行時間模型又叫作異步模型,模型通過優(yōu)先級決定任務(wù)的執(zhí)行順序,要求任務(wù)在既定的截止時間之前完成執(zhí)行。異步模型的代表性編程語言為Ada[4]。Ada通過調(diào)用時間控制函數(shù)來指定任務(wù)的時間屬性與時間行為,其運(yùn)行時系統(tǒng)是基于線程模型實(shí)現(xiàn)的執(zhí)行環(huán)境,在執(zhí)行環(huán)境里多個并發(fā)的Ada 任務(wù)異步交錯執(zhí)行。但在異步模型中,由于運(yùn)行時系統(tǒng)缺乏對任務(wù)時序行為的約束,可搶占線程在并發(fā)情況下的執(zhí)行過程具有不確定性,導(dǎo)致系統(tǒng)實(shí)際執(zhí)行的時序語義很難與模型層保持一致性,系統(tǒng)行為具有不可預(yù)測性。

    零執(zhí)行時間模型又叫作同步模型,模型基于同步假設(shè),即在邏輯上任務(wù)的執(zhí)行時間為零。同步模型抽象層次高,具有數(shù)學(xué)抽象能力,可采用形式化工具證明其行為正確性。同步模型主要刻畫任務(wù)的因果關(guān)系,通過邏輯時間表達(dá)任務(wù)的時間行為?;谕侥P偷木幊陶Z言有Esterel[5]、PRET-C[6]、Lustre[7]以及Signal[8]等。然而,在實(shí)際的物理平臺中,無法實(shí)現(xiàn)無限快的運(yùn)算速度,系統(tǒng)實(shí)際運(yùn)行過程中不可能按照ZET的時序假設(shè)運(yùn)行。

    邏輯執(zhí)行時間模型介于異步模型和同步模型之間,模型為每個任務(wù)指定了一段邏輯執(zhí)行時間,任務(wù)只能在該時間段的開始和結(jié)束時刻分別執(zhí)行輸入和輸出過程,即進(jìn)行任務(wù)間的同步,而計(jì)算過程異步進(jìn)行,且計(jì)算結(jié)果必須在輸出時刻之前有效。LET 模型約束了決定任務(wù)時序行為的關(guān)鍵過程(輸入和輸出),能直接有效地刻畫任務(wù)的時間行為。

    Giotto[9]、HTL[10]、TDL[11]等現(xiàn)有的基于LET 模型的編程語言,其語言只描述了系統(tǒng)的時間約束,而具體的功能代碼則通過C、Java 等常見的高級語言來實(shí)現(xiàn);語言通過特定編譯器編譯為中間代碼E-code[12],在執(zhí)行時,虛擬機(jī)E-machine[12]根據(jù)E-code 描述的時間行為驅(qū)動功能代碼的執(zhí)行,虛擬機(jī)本身則是運(yùn)行在實(shí)時操作系統(tǒng)之上。這種將時間控制程序和功能代碼分開的方式并不方便設(shè)計(jì),希望通過擴(kuò)展一種高級語言的方式來實(shí)現(xiàn)一種實(shí)時編程語言。

    本文提出一種基于C 擴(kuò)展的實(shí)時編程語言TBC。TBC基于LET編程模型,在語言層次上,從設(shè)計(jì)的時間需求出發(fā),引入可觀測事件的概念,來簡化系統(tǒng)內(nèi)部的時間約束,降低系統(tǒng)響應(yīng)延遲,并通過擴(kuò)展的語法結(jié)構(gòu)來表達(dá)系統(tǒng)中的各種時間屬性。在編譯器層次,本文提出了一種針對實(shí)時編程語言的編譯技術(shù),通過在編譯器前端增加相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來表示語法結(jié)構(gòu)中的時間屬性,同時對中間語言LLVM IR進(jìn)行時間指令擴(kuò)展,使其可以表示系統(tǒng)的時間行為。在之前的工作中作者提出了包含時間語義的指令集TTI[13],將其作為編譯器的目標(biāo)指令。

    1 實(shí)時語言框架

    除了編程模型外,實(shí)時語言的區(qū)別主要在于其實(shí)現(xiàn)方式和編譯方式,本文針對這兩點(diǎn)提出一種實(shí)時語言設(shè)計(jì)框架,基于此架構(gòu)來設(shè)計(jì)實(shí)時語言TBC。如圖1所示,整個語言框架分為高級語言、中間語言和匯編語言三個層次。

    圖1 語言設(shè)計(jì)整體架構(gòu)Fig.1 Overall architecture of language design

    高級語言指實(shí)時語言本身,在本文中通過基于C擴(kuò)展語法結(jié)構(gòu)的方式來實(shí)現(xiàn)語言時間語義的擴(kuò)展。在這里語法結(jié)構(gòu)是指如if、for 一樣的語言結(jié)構(gòu),通過編譯器來進(jìn)行分析處理,相對于Ada、RTOS通過API來指定時間屬性的方式,軟件程序更加簡單,不需要大量的代碼來設(shè)置定時器,處理不同的時間格式。同時如果程序使用某個平臺依賴的API,則該程序的運(yùn)行不再靈活,時間操作必須是平臺依賴的,更重要的是,語法結(jié)構(gòu)可以通過形式化的方式表示其語法和語義,并能對語義進(jìn)行驗(yàn)證。在高級語言層次,通過擴(kuò)展的語法結(jié)構(gòu)來表達(dá)多個任務(wù)并發(fā)執(zhí)行的時間語義。

    現(xiàn)有的許多編程框架[14-15]或?qū)崟r語言基于RTOS來實(shí)現(xiàn)。如文獻(xiàn)[16]將實(shí)時語言Timed-C編譯成RTOS代碼,而本文將具有時間語義的指令集作為編譯器的目標(biāo)代碼,這使得目標(biāo)平臺不需要支持功能復(fù)雜的RTOS,只需要增加相應(yīng)定時器來支持時間語義指令的實(shí)現(xiàn)。

    具體的,編譯器基于LLVM[17]編譯器框架,分為前端和后端,并將LLVM IR 作為編譯器的中間語言。擴(kuò)展的語法結(jié)構(gòu)在編譯器前端經(jīng)過分析處理轉(zhuǎn)換為中間語言中的時間指令,此時語法結(jié)構(gòu)所表示的任務(wù)并發(fā)的執(zhí)行行為轉(zhuǎn)換為時間指令所表示的串行執(zhí)行行為。最后中間語言通過編譯器后端轉(zhuǎn)換成具體的匯編語言,即中間語言中的時間指令映射到匯編語言中的時間指令。

    高級語言中的語法結(jié)構(gòu)和中間語言及匯編語言中的時間指令都是為了約束各個層次中系統(tǒng)的時間行為,但為了便于系統(tǒng)設(shè)計(jì)者進(jìn)行編程,語法結(jié)構(gòu)應(yīng)表示更高層次的時間約束,如任務(wù)級的任務(wù)周期、任務(wù)優(yōu)先關(guān)系等;而時間指令應(yīng)該更注重平臺實(shí)現(xiàn),表示時間操作更具體,如延遲操作delay等。

    另外,本文注重時間的本身,即各層次語言都應(yīng)該明確語言中時間的連續(xù)離散與否、時間粒度等時間屬性。本文采用文獻(xiàn)[18]中時間域的概念來描述時間。時間域指時間所基于的一個數(shù)域(如R、N等),系統(tǒng)中的時間可取范圍為數(shù)域的值域。如圖1所示,各層次的時間隨著語言的轉(zhuǎn)換也進(jìn)行相應(yīng)的轉(zhuǎn)換。

    2 TBC的語言模型

    2.1 時間域

    本文將數(shù)域N 作為語言TBC 的時間域,即在TBC中,時間為離散的,并且時間域上的時間粒度為一段實(shí)時間,如1 ms、1 μs等,系統(tǒng)中的動作發(fā)生在基于離散時間域的某個時間點(diǎn)上,多個動作可以發(fā)生在同一個時刻。

    CCSL(clock constraint specification language)[19]是嵌入式實(shí)時系統(tǒng)的標(biāo)準(zhǔn)描述語言(UML)[20]中描述時鐘約束的規(guī)范語言,可以用來表示各種連續(xù)和離散的時鐘。本文通過CCSL來形式化地定義TBC的離散時間域,在TBC默認(rèn)時間粒度為1 ms,時間域通過CCSL定義為:

    其中IdealClk在CCSL中表示一個連續(xù)時鐘,其單位為“s”,通過對該時鐘離散化可以得到一個離散時鐘。TBC的離散時間域std 通過一個以1 ms為tick間隔的離散時鐘來表示。

    2.2 可觀測事件

    在TBC 中,引入可觀測事件的概念。將系統(tǒng)中的事件根據(jù)外界環(huán)境是否可以觀測到,分為可觀測事件和不可觀測事件兩種。可觀測事件主要指獲取外部傳感器的信號、更新執(zhí)行器的值等動作,這些事件都和外部環(huán)境有直接的關(guān)聯(lián)。不可觀測事件主要指系統(tǒng)內(nèi)部各個任務(wù)之間的數(shù)據(jù)通訊等,這些事件不被外界環(huán)境可見,其時間行為對外界環(huán)境也沒有直接的影響。

    從設(shè)計(jì)需求的角度來看,構(gòu)建實(shí)時系統(tǒng)時,所需的時間約束需求便是可觀測事件的時間約束,因此,主要關(guān)注可觀測事件的時間約束。本文以三元組(E,type,P)來表示可觀測事件的時間約束。其中E表示一個可觀測事件的標(biāo)識符;type為事件的種類,分為輸入事件I和輸出事件O;P表示事件發(fā)生的周期,為一段實(shí)時間,取時間粒度的整數(shù)倍。如:(E1,I,10)表示周期為10 ms的輸入事件E1。本文以一個事件集合的形式作為系統(tǒng)設(shè)計(jì)的時間約束需求。

    2.3 時間行為

    在TBC中,系統(tǒng)包括多個并發(fā)的周期性任務(wù),每個任務(wù)分為相對獨(dú)立的I、C、O三部分。任務(wù)的輸入(輸出)可能包括一個或者多個事件來與外界或其他任務(wù)進(jìn)行交互,可以根據(jù)任務(wù)的輸入(輸出)是否包含可觀測事件,即是否與外界環(huán)境進(jìn)行通訊,將包含可觀測事件的輸入(輸出)叫作外部輸入(輸出),將包含不可觀測事件的輸入(輸出)叫作內(nèi)部輸入(輸出)。

    本文主要關(guān)注外部輸入(輸出)的時間約束。外部輸入(輸出)本身蘊(yùn)含了兩種時間語義:外部輸入(輸出)首先作為LET編程模型的輸入(輸出),應(yīng)在邏輯執(zhí)行時間的開始(結(jié)束)時刻執(zhí)行;同時因?yàn)橥獠枯斎耄ㄝ敵觯┌丝捎^測事件,所以應(yīng)該滿足可觀測事件的時間約束。在TBC中,任務(wù)的邏輯執(zhí)行時間等于任務(wù)周期,因此在構(gòu)建任務(wù)時,通常將可觀測事件的周期作為其所在任務(wù)的任務(wù)周期。

    內(nèi)部輸入(輸出)適用于任務(wù)之間的數(shù)據(jù)通訊,從外部環(huán)境無法觀測,其時間行為并不直接影響系統(tǒng)與外界環(huán)境的通訊,因此不專門考慮內(nèi)部輸入(輸出)的時間行為。從編程模型的角度來看,TBC實(shí)際上基于一種放松的LET模型。

    2.4 TBC的LET模型

    在單個任務(wù)內(nèi)部,擁有可觀測事件的外部輸入(輸出)基于時間觸發(fā),每到任務(wù)邏輯執(zhí)行時間的開始時刻(結(jié)束時刻)便會觸發(fā)任務(wù)的外部輸入(外部輸出)的執(zhí)行。如圖2 所示,周期為T的任務(wù)T1 的外部輸入輸出分別在0時刻和T時刻進(jìn)行觸發(fā)執(zhí)行。

    圖2 外部輸入輸出的時間行為Fig.2 Time behavior on external inputs and outputs

    任務(wù)的內(nèi)部輸入輸出用于兩個數(shù)據(jù)相關(guān)任務(wù)的數(shù)據(jù)同步,兩個任務(wù)會在邏輯執(zhí)行時間的某個時間點(diǎn)進(jìn)行同步。如圖3 所示,兩個周期都為T的任務(wù)T1 和T2,兩任務(wù)數(shù)據(jù)相關(guān),T2 依賴于T1 的計(jì)算結(jié)果;在0時刻,T2 讀取外界傳感器傳來的數(shù)據(jù),并在對數(shù)據(jù)進(jìn)行計(jì)算后,在t1 時刻便通過內(nèi)部輸出和任務(wù)T2 的內(nèi)部輸入對計(jì)算結(jié)果進(jìn)行同步,任務(wù)T2 在t1 時刻得到T1 的計(jì)算結(jié)果后,再經(jīng)過自己的計(jì)算過程,在T時刻通過外部輸出向外輸出計(jì)算結(jié)果;t1 為基于離散時域的某個時刻,不過本文并不關(guān)注t1 時刻的具體數(shù)值,t1 時刻只需要處于T2 的計(jì)算過程完成之后以及T3 的計(jì)算過程開始之前。

    圖3 內(nèi)部輸入輸出的時間行為Fig.3 Time behavior on internal inputs and outputs

    TBC放松了LET編程模型的時間約束,允許任務(wù)存在內(nèi)部同步點(diǎn),任務(wù)可在其邏輯執(zhí)行時間段內(nèi)進(jìn)行通信,消除了邏輯執(zhí)行時間模型中周期延遲問題,提升了系統(tǒng)響應(yīng)能力。如圖4所示,對于圖3中的兩個任務(wù)T1和T2,在一般的LET模型中,系統(tǒng)在0時刻獲取傳感器的數(shù)據(jù),在2T時刻才會產(chǎn)生相應(yīng)的輸出;而在TBC中,如圖5所示,由于系統(tǒng)可以通過T1 的內(nèi)部輸出和T2 的內(nèi)部輸入在t1 時刻提前進(jìn)行同步,在T時刻便可向外產(chǎn)生同樣的輸出,提升了系統(tǒng)的響應(yīng)能力。TBC語言模型在保障系統(tǒng)與外界交互的時間行為不變的情況下,將系統(tǒng)的內(nèi)部同步提前,來降低系統(tǒng)的響應(yīng)延遲。

    圖4 LET模型系統(tǒng)響應(yīng)延遲Fig.4 System response delay of LET model

    圖5 TBC系統(tǒng)響應(yīng)延遲Fig.5 System response delay of TBC

    當(dāng)系統(tǒng)出現(xiàn)欠采樣和過采樣的情況時,需要指定系統(tǒng)的時間行為來保障輸入與輸出關(guān)系的確定性,本文規(guī)定系統(tǒng)在短周期任務(wù)的第一個周期內(nèi)進(jìn)行同步。

    如圖6所示,周期和諧的兩個任務(wù)T1 和T2,T1 周期為T2 的兩倍,在0 時刻T1 讀取傳感器數(shù)據(jù),在T和2T時刻T2 向外界輸出結(jié)果,本文規(guī)定這種欠采樣情況下同步點(diǎn)t1 位于任務(wù)T2 的第一個周期內(nèi),這樣保障T時刻和2T時刻的輸出結(jié)果對應(yīng)于0 時刻的輸入,輸入和輸出之間可以相互確定。

    圖6 系統(tǒng)欠采樣的時間行為Fig.6 Time behavior of system under-sampling

    同理,對于系統(tǒng)發(fā)生過采樣的情況,如圖7所示,周期和諧的兩個任務(wù)T1 和T2,T2 周期為T1 的兩倍,在0時刻和T時刻T1 讀取傳感器數(shù)據(jù),在2T時刻T2 向外界輸出結(jié)果,本文規(guī)定兩任務(wù)的同步點(diǎn)t1 位于任務(wù)T1 的第一個周期內(nèi),保障2T時刻的輸出結(jié)果對應(yīng)于0時刻的輸入,輸入和輸出之間關(guān)系可以確定。

    圖7 系統(tǒng)過采樣的時間行為Fig.7 Time behavior of system over-sampling

    任務(wù)中的輸入輸出過程,在邏輯層次被認(rèn)為是在觸發(fā)時刻瞬時執(zhí)行,在具體的物理執(zhí)行平臺上,輸入輸出過程勢必要花費(fèi)一段時間來執(zhí)行(即使時間很短),執(zhí)行過程處于一個時間執(zhí)行區(qū)間上。如圖8所示,對于外部輸入過程,邏輯層次在0時刻執(zhí)行,到物理層次上,其執(zhí)行在一個時間區(qū)間[0,t1]上,其中t1 為輸入的執(zhí)行時間長度;同理,對于外部輸出過程,邏輯層次在T時刻執(zhí)行,到物理層次上,其執(zhí)行在一個時間區(qū)間[t2,T]上。

    圖8 時間映射Fig.8 Time mapping

    對于內(nèi)部輸入輸出過程,在邏輯層次上,由于其并非在某確定時間點(diǎn)定時觸發(fā),只需要滿足進(jìn)行同步的兩個輸入輸出,輸出過程在輸入過程之前執(zhí)行。

    3 語法結(jié)構(gòu)

    3.1 組件

    本文用組件來統(tǒng)一表示任務(wù)中的I、C、O 過程。組件一共有五種:內(nèi)部輸入組件、外部輸入組件、計(jì)算組件、外部輸出組件、內(nèi)部輸出組件。每個組件會被分配一個執(zhí)行區(qū)間(slot),組件在執(zhí)行區(qū)間執(zhí)行時不可搶占,組件若提前執(zhí)行完成,可主動放棄處理器資源;對于任務(wù)的輸入輸出組件來說,執(zhí)行區(qū)間即為從邏輯層次映射到物理層次的時間區(qū)間。組件的執(zhí)行區(qū)間通常設(shè)置為大于或等于其最壞情況執(zhí)行時間(worst-case execution time,WCET)的值,避免組件執(zhí)行出現(xiàn)超時的情況。為了便于分析計(jì)算,執(zhí)行區(qū)間的長度以離散時域的時間粒度(ms)為單位,取整數(shù)值。

    3.2 擴(kuò)展的語法結(jié)構(gòu)

    如表1所示,TBC擴(kuò)展了7種時間語法結(jié)構(gòu),來表示系統(tǒng)中的任務(wù)、各種組件及其時間屬性。

    表1 擴(kuò)展的語法結(jié)構(gòu)Table 1 Extended syntax structure

    Task語法結(jié)構(gòu)用于定義一個并發(fā)的LET任務(wù),語法結(jié)構(gòu)顯示聲明了任務(wù)的兩個參數(shù):任務(wù)的唯一標(biāo)識符以及任務(wù)周期。如Task(T1,50){…}表示一個周期為50 ms的LET 任務(wù),Task 語法結(jié)構(gòu)大括號內(nèi)的部分為任務(wù)體,任務(wù)體由三個組件構(gòu)成,即一個輸入組件(內(nèi)部輸入組件或者外部輸入組件)、一個輸出組件(內(nèi)部輸出組件或者外部輸出組件)以及一個計(jì)算組件。

    E_I 語法結(jié)構(gòu)和I 語法結(jié)構(gòu)分別代表外部輸入組件和內(nèi)部輸入組件,兩個語法結(jié)構(gòu)顯示聲明了任務(wù)輸入的兩個參數(shù):輸入組件的標(biāo)識符以及組件的執(zhí)行區(qū)間長度;E_O語法結(jié)構(gòu)和O語法結(jié)構(gòu)分別代表外部輸出組件或者內(nèi)部輸出組件,兩個語法結(jié)構(gòu)顯示聲明了輸出組件的標(biāo)識符以及組件的執(zhí)行區(qū)間長度;與PRET-C和文獻(xiàn)[21]中的語言相同,TBC 采用全局變量作為任務(wù)間通訊方式。C語法結(jié)構(gòu)代表任務(wù)的計(jì)算組件,顯示聲明了組件標(biāo)識符和計(jì)算過程的執(zhí)行區(qū)間長度。

    Pre 語法結(jié)構(gòu)規(guī)定了任務(wù)之間的數(shù)據(jù)依賴關(guān)系,包括兩個參數(shù),分別表示屬于不同任務(wù)的內(nèi)部輸出組件和內(nèi)部輸入組件,任務(wù)通過這兩個組件會進(jìn)行數(shù)據(jù)同步。如對于兩個任務(wù)T1、T2,T2 數(shù)據(jù)依賴于T1,T2 擁有一個內(nèi)部輸入P2,T1 擁有一個內(nèi)部輸出P1,則可通過Pre(P1,P2)表示兩個任務(wù)之間的數(shù)據(jù)依賴關(guān)系。

    3.3 形式化語法

    本文通過擴(kuò)展的巴科斯范式(extended Backus-Naur form,EBNF)來形式化描述TBC的語法規(guī)則。EBNF是巴科斯范式(Backus-Naur form,BNF)的一種擴(kuò)展,通常作為計(jì)算機(jī)編程語言和形式語言的形式化語法表示方法。TBC 的EBNF 表示如下所示,其中"c_code"表示常規(guī)的C語言代碼。

    4 編譯技術(shù)

    本章將介紹TBC特有的編譯技術(shù)。編譯器通過對TBC程序中的時間語法結(jié)構(gòu)進(jìn)行分析處理,最終將其轉(zhuǎn)換為特定的匯編指令。

    4.1 編譯器總體架構(gòu)

    如圖9 所示,TBC 編譯器基于LLVM 編譯器框架,主要包括編譯器前端、IR和編譯器后端三部分。

    圖9 編譯器總體架構(gòu)Fig.9 Compiler general architecture

    TBC前端分為詞法分析、語法分析、分析調(diào)度、中間代碼生成四個過程。詞法分析和語法分析分別通過Flex 和Bison 工具來實(shí)現(xiàn)。與常規(guī)的編譯器不同,TBC程序經(jīng)過詞法分析和語法分析后除了生成抽象語法樹(abstract syntax tree,AST)以外,還會生成TBC 特有的中間表示DAG(directed acyclic graph)和TAST(timed AST)。DAG和TAST分別用于表示TBC程序中的時序關(guān)系和時間值信息。兩種中間表示接下來作為分析調(diào)度器的輸入,經(jīng)過靜態(tài)分析、調(diào)度后會生成系統(tǒng)全局的靜態(tài)調(diào)度表。在中間代碼生成階段,抽象語法樹會結(jié)合靜態(tài)調(diào)度表的調(diào)度信息生成LLVM的中間語言IR。

    在TBC 編譯器中,本文基于IR 擴(kuò)展了具有時間操作的指令,使得IR擁有定時觸發(fā)的語義,這里將擴(kuò)展了時間指令的LLVM IR 叫作TIR(timed LLVM IR)。在編譯器的后端,將基于RISCV的時間語義指令集TTI作為后端的目標(biāo)指令集。

    如圖10 所示,TBC 程序經(jīng)過編譯器各個步驟進(jìn)行了多次轉(zhuǎn)換,最終映射到匯編指令。在高級語言層次,TBC通過擴(kuò)展的語法結(jié)構(gòu)來表示程序中的時間語義;表示時間語義的語法結(jié)構(gòu)在編譯器前端轉(zhuǎn)換為中間表示TAST和DAG,分別表示程序中的時序關(guān)系和時間值信息;經(jīng)過分析調(diào)度后,程序中的時序關(guān)系和時間值信息再轉(zhuǎn)換為調(diào)度表所表示的串行時間行為;中間語言TIR通過擴(kuò)展時間操作指令,根據(jù)調(diào)度表中的調(diào)度信息以定時觸發(fā)的方式驅(qū)動系統(tǒng)運(yùn)行;最后經(jīng)過編譯器后端的指令映射,TIR中的時間指令最終轉(zhuǎn)換為具有時間語義的匯編指令TTI。

    圖10 程序轉(zhuǎn)換流程Fig.10 Program translation flow

    4.2 中間表示

    在編譯器前端,程序的功能部分和時間控制部分被分開處理。TBC 對于功能部分的處理和普通編譯器相同,通過詞法分析和語法分析得到AST,并對AST 進(jìn)行相應(yīng)的的語義分析。為了使得編譯器能夠更好地分析處理時間,TBC編譯器將程序中所有與時間有關(guān)的信息分為時序關(guān)系和時間值信息兩部分,并分別用兩種中間數(shù)據(jù)結(jié)構(gòu)DAG圖和TAST表示。

    DAG 圖用于表示組件之間的時序關(guān)系,時序關(guān)系分為兩種。DAG 圖如圖11 所示,圖中實(shí)線表示不同任務(wù)組件之間的時序關(guān)系,即程序中Pre 語法結(jié)構(gòu)所聲明的任務(wù)之間的數(shù)據(jù)依賴關(guān)系;圖中虛線表示LET任務(wù)內(nèi)固有的時序關(guān)系,即任務(wù)的計(jì)算組件要在輸入組件和輸出組件之間執(zhí)行。

    圖11 DAG圖Fig.11 DAG figure

    TAST 主要有兩個作用:一是用于表示系統(tǒng)的結(jié)構(gòu)層次,二是充當(dāng)一個特殊符號表。如圖12 所示,TAST展現(xiàn)了系統(tǒng)的整體結(jié)構(gòu),根節(jié)點(diǎn)TBC 中每個分支代表了一個并發(fā)的LET任務(wù),而每個任務(wù)則包含多個不同類型的組件節(jié)點(diǎn)。同時作為一個符號表,樹儲存著系統(tǒng)的時間值信息:每個任務(wù)節(jié)點(diǎn)儲存任務(wù)的周期值,每個組件節(jié)點(diǎn)儲存著組件的執(zhí)行區(qū)間長度。

    圖12 TAST內(nèi)部結(jié)構(gòu)Fig.12 Internal structure of TAST

    4.3 分析與調(diào)度

    本文采用靜態(tài)調(diào)度的方式,在編譯器前端生成靜態(tài)調(diào)度表,調(diào)度表中指定了組件執(zhí)行的順序和具體時刻。

    4.3.1 必要性分析

    在得到TAST 后,編譯器便可以檢查系統(tǒng)可調(diào)度的必要條件,即任務(wù)利用率和系統(tǒng)利用率都是否小于等于1。具體的,將任務(wù)各組件執(zhí)行區(qū)間長度之和除以任務(wù)周期,作為任務(wù)的利用率,所有任務(wù)的利用率都必須要小于等于1,否則終止編譯,并給出錯誤信息。將一個超周期內(nèi),系統(tǒng)執(zhí)行所有組件用時總和除以系統(tǒng)的超周期,作為系統(tǒng)的利用率,系統(tǒng)利用率必須小于1,否則同樣終止編譯,并給出錯誤信息。用P表示任務(wù)的周期,TT表示系統(tǒng)的超周期,其中TT為所有任務(wù)的最小公倍數(shù),Ti(Mj)表示任務(wù)i的第j個組件,slot表示組件的執(zhí)行區(qū)間長度。必要性分析形式化表示如下,其中N表示系統(tǒng)任務(wù)數(shù)量,Ni表示第i個任務(wù)組件的數(shù)量。

    4.3.2 調(diào)度表

    在初步檢查滿足系統(tǒng)可調(diào)度的必要條件后,通過DAG 圖和TAST 中的信息進(jìn)行靜態(tài)調(diào)度。本文通過對多個周期任務(wù)進(jìn)行循環(huán)展開,來集成一個周期為超周期的大循環(huán)塊,靜態(tài)調(diào)度表中的每一個表項(xiàng)用于表示組件一次執(zhí)行的具體時間行為,可以通過三元組(M,t1,t2)來形式化表示,其中M表示組件的標(biāo)識符,t1 表示組件在循環(huán)塊中的開始執(zhí)行時間,t2 表示組件的執(zhí)行區(qū)間長度。

    4.3.3 調(diào)度規(guī)則

    對于系統(tǒng)復(fù)雜的情況,靜態(tài)調(diào)度有可能是個NP-hard問題,常通過啟發(fā)式算法等來解決。本文不涉及具體的調(diào)度算法,而是規(guī)定調(diào)度中所要遵循的調(diào)度規(guī)則,調(diào)度規(guī)則主要指靜態(tài)調(diào)度需要遵循的優(yōu)先關(guān)系,主要包括以下兩部分:

    (1)靜態(tài)調(diào)度需要滿足DAG圖中指定的時序關(guān)系:同一任務(wù)的計(jì)算組件要在輸入組件和輸出組件之間執(zhí)行;進(jìn)行數(shù)據(jù)同步的兩個組件,輸入組件要在輸出組件之后執(zhí)行。

    (2)對于一個實(shí)際的系統(tǒng),會出現(xiàn)多個任務(wù)的外部輸入(輸出)同時定時觸發(fā)的情況,如兩個任務(wù)的外部輸入同時在0時刻觸發(fā)執(zhí)行,需要指定多個任務(wù)同時輸入(輸出)的優(yōu)先順序:首先根據(jù)RM 調(diào)度規(guī)則,即任務(wù)的周期越短,其輸入(輸出)越優(yōu)先執(zhí)行;若兩個任務(wù)的周期相同,則按照任務(wù)的標(biāo)識符的大小,如兩個周期相同的任務(wù)T1 和T2,T1 的輸入(輸出)優(yōu)先于T2 的輸入(輸出)。

    4.3.4 調(diào)度表處理

    調(diào)度表中兩個相鄰表項(xiàng)之間會出現(xiàn)存在空閑時間段的情況,如兩個相鄰的表項(xiàng)(M1,t1,t2),(M2,t3,t4),如果t1+t2

    4.4 中間語言

    在IR層次,本文擴(kuò)展了具有時間操作的指令,使得IR可以表示調(diào)度表中組件串行執(zhí)行的時間行為。本文中將具有時間指令的LLVM IR叫作TIR。

    在TIR 中,采用時間觸發(fā)的系統(tǒng)執(zhí)行模式[22],根據(jù)調(diào)度表中預(yù)先安排的組件時序行為,來定時驅(qū)動組件的執(zhí)行,且一次只需要處理一個組件,時間觸發(fā)的方式不但可以提高系統(tǒng)的可預(yù)測性,更便于對系統(tǒng)功能和時序的正確性進(jìn)行驗(yàn)證。

    TIR和TBC基于同樣的離散時間域,以1 ms為時間粒度,TIR 的時間觸發(fā)方式通過點(diǎn)時間來展現(xiàn):對于調(diào)度表中的一個表項(xiàng)(M1,t1,t2),代表了系統(tǒng)會在點(diǎn)時間t1 觸發(fā)組件M的開始執(zhí)行,與TBC的并發(fā)執(zhí)行語義不同,在TIR中,組件根據(jù)調(diào)度表中的信息串行執(zhí)行,執(zhí)行時間為組件的執(zhí)行區(qū)間長度。

    TIR 擴(kuò)展了絕對延時指令delay_until 指令,其語義表示從當(dāng)前時間開始延遲到某個時間點(diǎn),如delay_until i32 10表示延遲到系統(tǒng)時間點(diǎn)10 ms。

    同時TIR 擴(kuò)展了兩條時間初始化指令timeinit 和timegran。timegran 用于設(shè)置系統(tǒng)的時間粒度,時間粒度為μs的整數(shù)倍,如timegran i32 2表示設(shè)置時間粒度為2 μs。timeinit指令用于設(shè)置當(dāng)前系統(tǒng)時間。

    TIR 程序的整體結(jié)構(gòu)為一個大的循環(huán),TIR 程序結(jié)構(gòu)如圖13所示,程序最開始時設(shè)置系統(tǒng)時間粒度為1 ms(與TBC 保持一致),每個循環(huán)開始時重置系統(tǒng)時間為0,每次循環(huán)系統(tǒng)按調(diào)度表中的調(diào)度信息定時執(zhí)行組件。

    圖13 TIR程序結(jié)構(gòu)Fig.13 TIR program structure

    對于調(diào)度表中的表項(xiàng),將其映射到的TIR 指令如圖13所示,如果表項(xiàng)是一個組件表項(xiàng),組件功能代碼的轉(zhuǎn)換和普通基于LLVM 架構(gòu)的編譯器相同。圖13 中,(M1,tstart1,tinterval1)是調(diào)度表中的第一個表項(xiàng),組件M1從時刻tstart1=0 開始執(zhí)行,通過絕對延時指令delay_until保證M1 占用系統(tǒng)時間到tstart2=tstart1+tinterval1 時刻,因設(shè)置的執(zhí)行區(qū)間長度tinterval1 大于組件的WCET,不會出現(xiàn)超時的情況。

    4.5 編譯器后端

    TIR通過定時觸發(fā)的方式來驅(qū)動系統(tǒng)執(zhí)行,因此作為編譯器后端的目標(biāo)指令集需要支持TIR 的定時觸發(fā)語義。本文使用時間指令集TTI 作為TBC 編譯器的目標(biāo)指令集,TTI指令集是本實(shí)驗(yàn)室提出的具有時間語義的指令集,TTI 基于RISC-V 指令集進(jìn)行時間語義擴(kuò)展。RISC-V是一個典型的三操作數(shù)、加載-存儲形式的RISC 指令集架構(gòu),其擴(kuò)展指令分為標(biāo)準(zhǔn)擴(kuò)展和非標(biāo)準(zhǔn)擴(kuò)展兩類,其中非標(biāo)準(zhǔn)擴(kuò)展作為一個高度特殊化的擴(kuò)展,由用戶根據(jù)功能需求自定義完成,TTI 指令集基于RISC-V非標(biāo)準(zhǔn)擴(kuò)展進(jìn)行定義。

    在TTI 中,時間采用時間點(diǎn)的形式來表示,對于段時間,通過段時間的開始時間點(diǎn)和結(jié)束時間點(diǎn)來表示。

    TTI擴(kuò)展了多個時間語義的指令,用來表示時間觸發(fā)的語義,擴(kuò)展的指令如下:

    (1)時間管理指令:setti/getti 指令用于設(shè)置/獲取系統(tǒng)當(dāng)前時間點(diǎn);settg 指令用于設(shè)置系統(tǒng)當(dāng)前時間粒度,為了和TIR的時間粒度統(tǒng)一,將TTI的時間粒度默認(rèn)設(shè)為1 ms。

    (2)實(shí)時操作指令:delay指令用于將時間延遲到一個絕對時間點(diǎn)。

    LLVM 的后端通??梢苑譃橥ㄓ么a生成器和后端移植接口兩部分,而增加一個LLVM新后端主要指增加相關(guān)的后端移植接口。后端移植接口主要包括全局描述實(shí)現(xiàn)、寄存器描述實(shí)現(xiàn)、指令集描述實(shí)現(xiàn)、匯編輸出描述實(shí)現(xiàn)等。一般后端信息主要采用LLVM 架構(gòu)中的Tablegen 語言進(jìn)行后端的描述。TableGen 是LLVM 中用來專門描述目標(biāo)后端的語言,主要用于描述子目標(biāo)平臺、寄存器文件、調(diào)用慣例和指令集等目標(biāo)平臺相關(guān)信息。

    TBC編譯器后端基于開源項(xiàng)目LLVM-RISCV進(jìn)行擴(kuò)展,擴(kuò)展主要包括TTI時間指令的擴(kuò)展和TIR時間指令與TTI時間指令之間的映射兩部分。本文通過Tablegen來描述指令的擴(kuò)展和指令的映射。

    TIR與TTI的映射關(guān)系如表2所示,本文通過Tablegen中的DAG匿名匹配模式來實(shí)現(xiàn)指令的映射。

    表2 指令映射Table 2 Instruction mapping

    5 實(shí)驗(yàn)設(shè)計(jì)與分析

    5.1 基于TBC構(gòu)建遙控車控制系統(tǒng)

    本文通過一個遙控車控制實(shí)例來展示如何用TBC構(gòu)建實(shí)時系統(tǒng)。遙控車控制系統(tǒng)如下:遙控車每隔50 ms接受手柄的控制信號,根據(jù)控制信號,計(jì)算得到小車當(dāng)前的速度、加速度等狀態(tài)信息,以及控制小車電機(jī)轉(zhuǎn)動的PWM 波;小車每隔100 ms 將狀態(tài)信息通過zigbee 通訊模塊傳送給PC 端,使得小車的狀態(tài)信息可以被實(shí)時獲取;同時小車每隔50 ms 將PWM 波傳送給電機(jī),電機(jī)驅(qū)動車輪轉(zhuǎn)動。以上信息可以規(guī)約為一個外部事件的集合:(E1,I,50),(E2,O,50),(E3,O,100) ;事件E1 表示接受手柄信號,E2 表示將PWM波傳送給電機(jī),E3 表示將狀態(tài)信息傳送給PC端,該集合作為系統(tǒng)設(shè)計(jì)的時間需求。由此基于TBC模型構(gòu)建遙控車控制系統(tǒng)如表3 所示。遙控車控制系統(tǒng)包括三個并發(fā)的任務(wù),其中任務(wù)T1 包含輸入事件E1,任務(wù)T2 和T3 的分別包含輸出事件E2 和E3。

    表3 遙控車控制系統(tǒng)任務(wù)集Table 3 Task set of remote control vehicle system

    遙控車控制系統(tǒng)如偽代碼1所示,其中com1到com5表示任務(wù)中的計(jì)算函數(shù)。任務(wù)T1 通過計(jì)算得到小車的狀態(tài)信息和PWM 波,通過內(nèi)部輸出P2 將這些數(shù)據(jù)傳送給其他任務(wù),任務(wù)T2 和T3 分別通過內(nèi)部輸入P3和P5 獲得T1 的輸出數(shù)據(jù)。偽代碼1 中的第24、25 行“Pre(P2,P3)”“Pre(P2,P5)”用來表示三個任務(wù)之間的數(shù)據(jù)依賴關(guān)系。

    偽代碼1遙控車控制系統(tǒng)TBC程序偽代碼

    TBC程序經(jīng)過前端的分析調(diào)度后執(zhí)行序列如圖14所示。對于外部輸入輸出組件P1、P4 和P6,其執(zhí)行位于周期開始或結(jié)束的時刻,其余組件遵照調(diào)度規(guī)則中的優(yōu)先關(guān)系執(zhí)行。

    圖14 組件執(zhí)行序列Fig.14 Component execution sequence

    具體的調(diào)度表信息如下:(P1,0,1),(C1,1,10),(P2,11,1),(P3,12,1),(C2,13,5),(P5,18,1),(C3,19,10),(D,29,20),(P4,49,1),(P1,50,1),(C1,51,10),(P2,61,1),(P3,62,1),(C2,63,5),(D,68,30),(P4,98,1)(P6,99,1)。其中(D,29,20)和(D,68,30)表示系統(tǒng)空閑狀態(tài),對應(yīng)圖14 中的空白部分。

    程序經(jīng)過前端的分析調(diào)度以及后端的指令映射后,最后轉(zhuǎn)換為TTI 匯編代碼,匯編程序代碼如偽代碼2 所示,這里主要展示TTI程序的時間行為。

    偽代碼2遙控車系統(tǒng)TTI程序偽代碼

    其中第1行到第2行表示系統(tǒng)時間粒度的設(shè)置,第4行表示每次循環(huán)系統(tǒng)時間的重置,第5 行到第7 行則對應(yīng)三元組表項(xiàng)(P1,0,1),用來控制組件P1 的時間行為。

    本文使用實(shí)驗(yàn)室開發(fā)的專門支持TTI指令的RISCV仿真器來測試TBC 各方面性能,仿真器可精確模擬各TTI指令在流水線各段的行為,以此獲得系統(tǒng)運(yùn)行的具體時間行為(精確到時鐘cycle 級別),仿真器的頻率設(shè)置為1 MHz。

    5.2 實(shí)驗(yàn)對比分析

    除了通過TBC 來實(shí)現(xiàn)上述遙控車控制系統(tǒng)外,本文還通過傳統(tǒng)的LET模型,基于PSPM[15]編程框架來實(shí)現(xiàn),PSPM運(yùn)行在stm32F407開發(fā)板上,開發(fā)板采用基于RAM架構(gòu)的CortexM4芯片,芯片具有168 MHz的時鐘頻率。

    兩種實(shí)現(xiàn)方式的系統(tǒng)輸入輸出抖動如表4 所示。這里系統(tǒng)輸入輸出抖動是指系統(tǒng)實(shí)際I/O開始時間和系統(tǒng)設(shè)計(jì)時間的差值。基于傳統(tǒng)LET 模型的PSPM 編程框架,其底層通過FreeRTOS實(shí)時操作系統(tǒng)來實(shí)現(xiàn),輸入輸出抖動由系統(tǒng)內(nèi)核開銷、時間調(diào)度器開銷導(dǎo)致,高達(dá)幾百個時鐘cycle;相比之下,TBC使用時間指令來保障系統(tǒng)行為的定時觸發(fā),輸入輸出抖動由delay指令引起,其導(dǎo)致系統(tǒng)實(shí)際輸入輸出的時間比預(yù)期時間延遲一個時鐘cycle,遠(yuǎn)小于前者,具有更強(qiáng)的時間可預(yù)測性。

    表4 系統(tǒng)輸入輸出抖動Table 4 System input and output jitter

    表5為兩種實(shí)現(xiàn)方式的系統(tǒng)平均端到端延遲,其中端到端延遲1為從接收到遙控信號到輸出PWM波的時間,端到端延遲2為從接收到遙控信號到輸出狀態(tài)信息的時間。在傳統(tǒng)的LET模型中,任務(wù)之間只能在邏輯執(zhí)行時間的開始和結(jié)束時刻進(jìn)行交互,導(dǎo)致整個系統(tǒng)的端到端延遲時間較長;而TBC 的LET 模型與傳統(tǒng)的LET模型相比,增加了外部、內(nèi)部事件,允許任務(wù)在邏輯執(zhí)行時間內(nèi)與其他任務(wù)進(jìn)行交互,使得系統(tǒng)端到端延遲降低了大約50%。綜上,TBC采用了放松的LET模型,在提高了時間可預(yù)測性的同時,相對于傳統(tǒng)的LET模型降低了系統(tǒng)的端到端延遲。

    表5 系統(tǒng)端到端延遲Table 5 System end-to-end latency

    6 結(jié)束語

    本文提出了一種基于LET 的時間語義編程語言TBC以及相應(yīng)的編譯技術(shù)。主要包含以下工作:

    (1)提出一種實(shí)時語言設(shè)計(jì)和編譯的通用模型,基于此模型可以方便條理地設(shè)計(jì)一種實(shí)時語言。

    (2)基于通用語言C,擴(kuò)展了具有時間語義的語法結(jié)構(gòu),來實(shí)現(xiàn)實(shí)時語言TBC;同時基于LET模型,增加了可觀測事件的概念,旨在保證系統(tǒng)中與外界環(huán)境相關(guān)聯(lián)事件的時間行為,同時降低了系統(tǒng)的響應(yīng)延遲。

    (3)提出了一種實(shí)時語言的編譯技術(shù),通過在編譯器前端增加中間表示DAG 和TAST 來表示語法結(jié)構(gòu)中的時間屬性。同時通過對中間語言IR進(jìn)行時間指令擴(kuò)展,使得其可以定時觸發(fā)系統(tǒng)中的行為,并可以映射到特定的時間語義指令集。

    未來的主要工作集中于TBC語言設(shè)計(jì)的完善。目前TIR中的時間和操作相對分離,并不能很好體現(xiàn)定時觸發(fā)的語義,計(jì)劃添加定時觸發(fā)指令TT,其語義為某操作在某時刻定時觸發(fā)執(zhí)行;TBC 中的任務(wù)皆為周期任務(wù),對于系統(tǒng)中存在的非安全關(guān)鍵的非周期任務(wù),可將其插入到空閑塊(D,t1,t2)中執(zhí)行,使其對周期任務(wù)的時間行為不產(chǎn)生影響。

    猜你喜歡
    語法結(jié)構(gòu)編譯器指令
    聽我指令:大催眠術(shù)
    基于相異編譯器的安全計(jì)算機(jī)平臺交叉編譯環(huán)境設(shè)計(jì)
    ARINC661顯控指令快速驗(yàn)證方法
    LED照明產(chǎn)品歐盟ErP指令要求解讀
    電子測試(2018年18期)2018-11-14 02:30:34
    長沙方言中的特色詞尾
    青春歲月(2016年22期)2016-12-23 23:19:50
    淺析古代漢語的名詞動用
    青春歲月(2016年21期)2016-12-20 11:20:50
    培養(yǎng)閱讀技巧,提高閱讀能力
    考試周刊(2016年34期)2016-05-28 14:39:52
    大學(xué)英語B級等級考試詞匯用法和語法結(jié)構(gòu)解題技巧
    通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
    坐標(biāo)系旋轉(zhuǎn)指令數(shù)控編程應(yīng)用
    国产三级在线视频| 欧美成人一区二区免费高清观看| 大话2 男鬼变身卡| 一级爰片在线观看| 国产精品久久电影中文字幕| 亚洲欧美日韩高清专用| 免费大片18禁| 欧美精品国产亚洲| 免费av毛片视频| 只有这里有精品99| 欧美精品一区二区大全| av.在线天堂| 国产一区二区在线观看日韩| 国产免费福利视频在线观看| 亚洲国产日韩欧美精品在线观看| 亚洲在线观看片| 国产大屁股一区二区在线视频| 免费看av在线观看网站| 精品人妻熟女av久视频| 69av精品久久久久久| 床上黄色一级片| www.色视频.com| av播播在线观看一区| 麻豆久久精品国产亚洲av| 三级经典国产精品| 内射极品少妇av片p| 大又大粗又爽又黄少妇毛片口| 真实男女啪啪啪动态图| 一级av片app| 青春草国产在线视频| 国产老妇伦熟女老妇高清| 18禁在线播放成人免费| av又黄又爽大尺度在线免费看 | 看黄色毛片网站| 国产精品永久免费网站| 午夜激情福利司机影院| 亚洲成人久久爱视频| 国产美女午夜福利| 麻豆乱淫一区二区| 精品99又大又爽又粗少妇毛片| 国产在线一区二区三区精 | 九九爱精品视频在线观看| 人妻少妇偷人精品九色| 亚洲欧美日韩卡通动漫| 亚洲熟妇中文字幕五十中出| 亚洲国产精品sss在线观看| 1000部很黄的大片| 国产毛片a区久久久久| 亚洲国产精品合色在线| 亚洲在久久综合| 秋霞伦理黄片| 国产成人精品一,二区| 成人美女网站在线观看视频| 内地一区二区视频在线| 精品无人区乱码1区二区| 69人妻影院| a级毛片免费高清观看在线播放| 欧美三级亚洲精品| 久久久久免费精品人妻一区二区| av在线老鸭窝| 亚洲久久久久久中文字幕| 色视频www国产| 精品无人区乱码1区二区| 一区二区三区乱码不卡18| 青春草亚洲视频在线观看| 亚洲av男天堂| 美女国产视频在线观看| 亚洲综合色惰| 色噜噜av男人的天堂激情| 久久欧美精品欧美久久欧美| 日韩一本色道免费dvd| 只有这里有精品99| 日日啪夜夜撸| 免费看a级黄色片| 午夜福利在线在线| 22中文网久久字幕| 在线观看av片永久免费下载| 男人舔奶头视频| 一级黄色大片毛片| 成人亚洲欧美一区二区av| 内地一区二区视频在线| 99热这里只有是精品在线观看| 国产黄片视频在线免费观看| 国产黄色小视频在线观看| 麻豆国产97在线/欧美| 麻豆国产97在线/欧美| 国产一区二区在线av高清观看| 久久久久久国产a免费观看| 嫩草影院精品99| 国产亚洲最大av| 久久久久久大精品| av又黄又爽大尺度在线免费看 | 国产高清国产精品国产三级 | 91久久精品国产一区二区三区| 美女国产视频在线观看| 久久精品影院6| 97超视频在线观看视频| 一个人免费在线观看电影| 六月丁香七月| 国产精品久久久久久av不卡| 美女内射精品一级片tv| 九九在线视频观看精品| 两性午夜刺激爽爽歪歪视频在线观看| 日韩,欧美,国产一区二区三区 | 日韩强制内射视频| 国产精品爽爽va在线观看网站| 中文字幕熟女人妻在线| 欧美一区二区国产精品久久精品| 偷拍熟女少妇极品色| 国产av不卡久久| 天堂√8在线中文| 成人漫画全彩无遮挡| 亚洲av熟女| 日韩av在线大香蕉| 最近手机中文字幕大全| 日韩亚洲欧美综合| 麻豆成人午夜福利视频| 精品无人区乱码1区二区| 在线播放国产精品三级| 亚洲丝袜综合中文字幕| 亚洲av中文字字幕乱码综合| 午夜免费男女啪啪视频观看| 国产成人freesex在线| 国产白丝娇喘喷水9色精品| 夜夜看夜夜爽夜夜摸| 国产精品综合久久久久久久免费| 免费看a级黄色片| 婷婷六月久久综合丁香| 日韩欧美三级三区| 国产一区二区在线av高清观看| 超碰av人人做人人爽久久| 一区二区三区乱码不卡18| 久久久色成人| 人妻系列 视频| 女的被弄到高潮叫床怎么办| 国产在视频线在精品| 国产淫语在线视频| 欧美激情国产日韩精品一区| 国产精品1区2区在线观看.| av.在线天堂| 精品熟女少妇av免费看| av在线观看视频网站免费| 3wmmmm亚洲av在线观看| www.色视频.com| 又粗又硬又长又爽又黄的视频| 久久久久久大精品| 亚洲高清免费不卡视频| 一本一本综合久久| 在线免费观看不下载黄p国产| 少妇熟女欧美另类| 亚洲久久久久久中文字幕| 亚洲在线自拍视频| 成人综合一区亚洲| 一级毛片aaaaaa免费看小| 国产淫语在线视频| 大香蕉久久网| 你懂的网址亚洲精品在线观看 | 精品久久久久久久末码| 亚洲国产色片| 韩国av在线不卡| 亚洲久久久久久中文字幕| 最近最新中文字幕大全电影3| 一级毛片aaaaaa免费看小| kizo精华| 欧美最新免费一区二区三区| 欧美三级亚洲精品| 日韩欧美 国产精品| 亚洲成人精品中文字幕电影| 日韩大片免费观看网站 | 午夜免费激情av| 在线免费观看不下载黄p国产| 国产精品蜜桃在线观看| 久久精品国产鲁丝片午夜精品| 精品久久久久久久人妻蜜臀av| 看十八女毛片水多多多| 波野结衣二区三区在线| 边亲边吃奶的免费视频| 村上凉子中文字幕在线| 黄片wwwwww| 久久人人爽人人爽人人片va| 18禁在线播放成人免费| 免费搜索国产男女视频| 久久久久九九精品影院| 日韩亚洲欧美综合| 91精品国产九色| 秋霞伦理黄片| 国产高清不卡午夜福利| 国产午夜精品久久久久久一区二区三区| 亚洲av.av天堂| 一区二区三区四区激情视频| 亚洲aⅴ乱码一区二区在线播放| 老司机影院成人| 国产一级毛片在线| 男女那种视频在线观看| 亚洲国产日韩欧美精品在线观看| 国产精品一区二区三区四区免费观看| 一级黄色大片毛片| 自拍偷自拍亚洲精品老妇| 亚洲国产精品专区欧美| 99久久中文字幕三级久久日本| 噜噜噜噜噜久久久久久91| 国模一区二区三区四区视频| 特大巨黑吊av在线直播| 国产激情偷乱视频一区二区| 岛国毛片在线播放| 日韩精品青青久久久久久| 高清日韩中文字幕在线| 在线天堂最新版资源| 国产三级中文精品| 国产精品一及| 免费大片18禁| 国产淫片久久久久久久久| 欧美3d第一页| 天堂影院成人在线观看| 美女被艹到高潮喷水动态| 三级男女做爰猛烈吃奶摸视频| 国产精品国产三级专区第一集| 91av网一区二区| 国产一区亚洲一区在线观看| 搡老妇女老女人老熟妇| 国产精品一区www在线观看| 别揉我奶头 嗯啊视频| 亚洲,欧美,日韩| 在线观看av片永久免费下载| 免费不卡的大黄色大毛片视频在线观看 | 国产亚洲av嫩草精品影院| 51国产日韩欧美| 国产日韩欧美在线精品| 国产精品1区2区在线观看.| 久久欧美精品欧美久久欧美| 长腿黑丝高跟| 亚洲av一区综合| 成人性生交大片免费视频hd| 级片在线观看| 人人妻人人澡人人爽人人夜夜 | 小蜜桃在线观看免费完整版高清| 久久久久久久久久久免费av| 久久久午夜欧美精品| 亚洲av福利一区| 午夜老司机福利剧场| 国产69精品久久久久777片| 久久这里有精品视频免费| 午夜福利在线观看免费完整高清在| 汤姆久久久久久久影院中文字幕 | 亚洲第一区二区三区不卡| 国产不卡一卡二| 淫秽高清视频在线观看| 久久久久网色| 十八禁国产超污无遮挡网站| 夫妻性生交免费视频一级片| 深夜a级毛片| 中文字幕熟女人妻在线| 久久久久网色| 久久人妻av系列| 国产精品一区二区在线观看99 | 国产伦理片在线播放av一区| 纵有疾风起免费观看全集完整版 | 人人妻人人澡人人爽人人夜夜 | 午夜免费男女啪啪视频观看| av天堂中文字幕网| av国产免费在线观看| 久久久精品欧美日韩精品| 1024手机看黄色片| 大又大粗又爽又黄少妇毛片口| 你懂的网址亚洲精品在线观看 | 久久久国产成人精品二区| 精品久久久久久久人妻蜜臀av| 日韩一本色道免费dvd| 久久韩国三级中文字幕| 一本久久精品| 蜜桃亚洲精品一区二区三区| 看片在线看免费视频| 在线a可以看的网站| 日韩中字成人| 91久久精品国产一区二区三区| 日韩 亚洲 欧美在线| 免费人成在线观看视频色| 人体艺术视频欧美日本| 午夜a级毛片| 日日摸夜夜添夜夜爱| a级毛色黄片| 中文资源天堂在线| 91久久精品电影网| 国产国拍精品亚洲av在线观看| 男插女下体视频免费在线播放| 亚洲天堂国产精品一区在线| 国产精品一区二区在线观看99 | 日韩一区二区视频免费看| 成人亚洲欧美一区二区av| av国产免费在线观看| 狂野欧美激情性xxxx在线观看| a级毛片免费高清观看在线播放| 欧美色视频一区免费| 秋霞在线观看毛片| 久久精品国产鲁丝片午夜精品| 国产毛片a区久久久久| 亚洲真实伦在线观看| 国产高清国产精品国产三级 | 99久久精品国产国产毛片| 又爽又黄a免费视频| 精品国产一区二区三区久久久樱花 | 最近的中文字幕免费完整| 日韩欧美国产在线观看| 国产精品.久久久| 自拍偷自拍亚洲精品老妇| 日本爱情动作片www.在线观看| 欧美xxxx性猛交bbbb| 国产乱来视频区| 国产免费福利视频在线观看| 人妻制服诱惑在线中文字幕| 免费电影在线观看免费观看| 欧美成人午夜免费资源| 国产激情偷乱视频一区二区| 国产乱人视频| 亚洲av成人av| 国产片特级美女逼逼视频| 夜夜爽夜夜爽视频| 精品一区二区三区人妻视频| 国产一区亚洲一区在线观看| 亚洲四区av| 精品久久久噜噜| ponron亚洲| 亚洲内射少妇av| 国产亚洲av嫩草精品影院| 国产在视频线在精品| .国产精品久久| 99久久精品热视频| 免费观看性生交大片5| 欧美高清性xxxxhd video| 精品酒店卫生间| 免费播放大片免费观看视频在线观看 | 欧美bdsm另类| 69av精品久久久久久| 国产精品久久久久久久久免| 日韩,欧美,国产一区二区三区 | 中文字幕亚洲精品专区| 国产精品.久久久| 九九久久精品国产亚洲av麻豆| 丰满少妇做爰视频| 日韩视频在线欧美| 22中文网久久字幕| 九九热线精品视视频播放| 精品人妻熟女av久视频| 麻豆一二三区av精品| 国产乱人视频| 久久人人爽人人爽人人片va| 亚洲成人久久爱视频| 欧美人与善性xxx| 久久精品国产自在天天线| 亚洲va在线va天堂va国产| 免费黄网站久久成人精品| 国产熟女欧美一区二区| 免费电影在线观看免费观看| 午夜精品在线福利| 国产欧美日韩精品一区二区| 寂寞人妻少妇视频99o| 欧美一区二区国产精品久久精品| 精品无人区乱码1区二区| 精品少妇黑人巨大在线播放 | 午夜爱爱视频在线播放| 国产伦理片在线播放av一区| 深夜a级毛片| 女人十人毛片免费观看3o分钟| av黄色大香蕉| 亚洲欧美精品自产自拍| 国产亚洲午夜精品一区二区久久 | 国产av在哪里看| 日本爱情动作片www.在线观看| 99热这里只有精品一区| 黄色日韩在线| 国产高清视频在线观看网站| 日韩 亚洲 欧美在线| 久久久久国产网址| 久久婷婷人人爽人人干人人爱| 国内精品宾馆在线| 成人美女网站在线观看视频| 亚洲精品乱码久久久久久按摩| 视频中文字幕在线观看| 99久久成人亚洲精品观看| 精品一区二区三区人妻视频| 狂野欧美激情性xxxx在线观看| 中文字幕免费在线视频6| 国产免费一级a男人的天堂| 免费观看人在逋| 国产在线一区二区三区精 | 草草在线视频免费看| 麻豆成人午夜福利视频| 亚洲无线观看免费| 欧美日韩在线观看h| 性色avwww在线观看| 成人综合一区亚洲| 2022亚洲国产成人精品| 日本爱情动作片www.在线观看| 亚洲不卡免费看| 我的老师免费观看完整版| 青春草亚洲视频在线观看| 午夜福利成人在线免费观看| 1000部很黄的大片| 国产精品女同一区二区软件| 丝袜喷水一区| 日产精品乱码卡一卡2卡三| 久久韩国三级中文字幕| 国产精品电影一区二区三区| 国产精品无大码| 亚洲四区av| 欧美+日韩+精品| 国产精品一区二区三区四区久久| 韩国av在线不卡| 美女脱内裤让男人舔精品视频| 久久久久久国产a免费观看| 精品久久久久久成人av| 国产女主播在线喷水免费视频网站 | h日本视频在线播放| 一边亲一边摸免费视频| 一级av片app| 亚洲电影在线观看av| 偷拍熟女少妇极品色| 国产又黄又爽又无遮挡在线| 国产精品福利在线免费观看| 91精品伊人久久大香线蕉| 亚洲不卡免费看| 久久久久久九九精品二区国产| 两个人视频免费观看高清| 免费人成在线观看视频色| 国产一区二区在线观看日韩| 国产精品嫩草影院av在线观看| 欧美+日韩+精品| 国产精品人妻久久久影院| 国产视频内射| 欧美区成人在线视频| 青青草视频在线视频观看| 国产在线一区二区三区精 | 日韩欧美三级三区| 国产精品一二三区在线看| av在线蜜桃| 91在线精品国自产拍蜜月| av黄色大香蕉| 亚洲精品久久久久久婷婷小说 | 国产一区亚洲一区在线观看| 国产成人精品久久久久久| 久久99热这里只频精品6学生 | 国产白丝娇喘喷水9色精品| 久久久久久国产a免费观看| 亚洲人成网站在线播| 久久欧美精品欧美久久欧美| 久久久久网色| 国产亚洲av片在线观看秒播厂 | 久久精品熟女亚洲av麻豆精品 | 国语自产精品视频在线第100页| 丰满乱子伦码专区| 成人二区视频| 国产高潮美女av| 18禁在线无遮挡免费观看视频| av在线亚洲专区| 欧美精品国产亚洲| 色尼玛亚洲综合影院| 久久99蜜桃精品久久| 久久久国产成人免费| 欧美最新免费一区二区三区| 偷拍熟女少妇极品色| 日韩视频在线欧美| 在线观看一区二区三区| 99热全是精品| 你懂的网址亚洲精品在线观看 | 91精品一卡2卡3卡4卡| 亚洲一级一片aⅴ在线观看| 女人被狂操c到高潮| 久久热精品热| videossex国产| av在线亚洲专区| 国产一区二区亚洲精品在线观看| 国产乱人偷精品视频| 哪个播放器可以免费观看大片| 51国产日韩欧美| 中文亚洲av片在线观看爽| 深爱激情五月婷婷| 中文字幕久久专区| 国产成人91sexporn| 一级av片app| 蜜臀久久99精品久久宅男| 午夜爱爱视频在线播放| 九九在线视频观看精品| av在线天堂中文字幕| 可以在线观看毛片的网站| 菩萨蛮人人尽说江南好唐韦庄 | 一个人看视频在线观看www免费| 成人特级av手机在线观看| 亚洲在线观看片| 亚洲怡红院男人天堂| 干丝袜人妻中文字幕| av在线观看视频网站免费| 午夜爱爱视频在线播放| 免费观看在线日韩| 女人十人毛片免费观看3o分钟| 在线播放无遮挡| 高清av免费在线| 又黄又爽又刺激的免费视频.| 婷婷色综合大香蕉| 青春草国产在线视频| 国内少妇人妻偷人精品xxx网站| 最后的刺客免费高清国语| 久久久久久久久久久免费av| 国产黄色小视频在线观看| 国产又色又爽无遮挡免| 国产欧美另类精品又又久久亚洲欧美| 亚洲人成网站在线播| 2021天堂中文幕一二区在线观| 欧美xxxx性猛交bbbb| 国产免费一级a男人的天堂| 91精品伊人久久大香线蕉| av在线亚洲专区| 国产精品日韩av在线免费观看| 男女那种视频在线观看| eeuss影院久久| 久久久国产成人精品二区| 日韩人妻高清精品专区| 久久国内精品自在自线图片| 三级经典国产精品| 99国产精品一区二区蜜桃av| 97超碰精品成人国产| 国产精品三级大全| 久久精品熟女亚洲av麻豆精品 | 免费观看在线日韩| 成人无遮挡网站| 看十八女毛片水多多多| 最近中文字幕高清免费大全6| 日韩在线高清观看一区二区三区| 成年女人永久免费观看视频| 久久精品国产鲁丝片午夜精品| 免费播放大片免费观看视频在线观看 | 一本一本综合久久| 三级男女做爰猛烈吃奶摸视频| 久久6这里有精品| 亚洲性久久影院| 久久久久久大精品| 免费人成在线观看视频色| 97超视频在线观看视频| 亚洲图色成人| 亚洲美女视频黄频| 欧美成人免费av一区二区三区| 2021天堂中文幕一二区在线观| 最近2019中文字幕mv第一页| 麻豆久久精品国产亚洲av| 老司机影院成人| av在线蜜桃| 国产精品久久久久久精品电影小说 | 久久久久久久亚洲中文字幕| 搡女人真爽免费视频火全软件| 国产精品国产三级国产专区5o | 精品人妻熟女av久视频| 两个人的视频大全免费| 男人和女人高潮做爰伦理| 免费观看在线日韩| 能在线免费看毛片的网站| www.av在线官网国产| 一夜夜www| 中国美白少妇内射xxxbb| 国产成人福利小说| 最近最新中文字幕大全电影3| 久久精品久久久久久噜噜老黄 | 久久热精品热| 99久久精品国产国产毛片| 成人高潮视频无遮挡免费网站| 综合色丁香网| 国产午夜精品论理片| 乱人视频在线观看| 欧美变态另类bdsm刘玥| 丰满乱子伦码专区| a级一级毛片免费在线观看| 亚洲熟妇中文字幕五十中出| 十八禁国产超污无遮挡网站| 色吧在线观看| 又爽又黄a免费视频| 亚洲国产精品专区欧美| 蜜桃久久精品国产亚洲av| 3wmmmm亚洲av在线观看| 成人二区视频| 亚洲自拍偷在线| 美女高潮的动态| 蜜臀久久99精品久久宅男| 99热这里只有是精品在线观看| 亚洲av中文av极速乱| 三级国产精品片| 精华霜和精华液先用哪个| 亚洲国产成人一精品久久久| 成人三级黄色视频| 亚洲欧美精品综合久久99| 国产精品无大码| 99久国产av精品| 黄片wwwwww| 内地一区二区视频在线| 免费播放大片免费观看视频在线观看 | 日本一二三区视频观看| 高清午夜精品一区二区三区| 最后的刺客免费高清国语| 熟女电影av网| 老司机影院成人| 91久久精品电影网| 熟女人妻精品中文字幕| 纵有疾风起免费观看全集完整版 | 久久亚洲精品不卡| 国产av一区在线观看免费| 免费av毛片视频| 国产 一区 欧美 日韩| 五月玫瑰六月丁香| 中文字幕久久专区| 麻豆国产97在线/欧美| 99久久精品一区二区三区| 综合色av麻豆| 欧美人与善性xxx| 亚洲av熟女| 小说图片视频综合网站| 男插女下体视频免费在线播放| 免费观看在线日韩| 中文乱码字字幕精品一区二区三区 |