Vxworks網(wǎng)絡(luò)協(xié)議棧_第1頁(yè)
Vxworks網(wǎng)絡(luò)協(xié)議棧_第2頁(yè)
Vxworks網(wǎng)絡(luò)協(xié)議棧_第3頁(yè)
Vxworks網(wǎng)絡(luò)協(xié)議棧_第4頁(yè)
Vxworks網(wǎng)絡(luò)協(xié)議棧_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式操作系統(tǒng)vxworks中網(wǎng)絡(luò)協(xié)議存儲(chǔ)池原理及實(shí)現(xiàn)周衛(wèi)東藺妍劉利強(qiáng)(哈爾濱工程大學(xué)口動(dòng)化學(xué)院,黑龍江 哈爾濱,150001)摘要本文討論了網(wǎng)絡(luò)協(xié)議存儲(chǔ)池的基本原理和在嵌入式操作系統(tǒng)中的 實(shí)現(xiàn)方法。為在嵌入式系統(tǒng)中實(shí)現(xiàn)tcp / ip協(xié)議棧,提供了一種有效、簡(jiǎn)潔、可 靠的緩沖區(qū)管理。關(guān)鍵詞 vxworks; mblk; clblk;網(wǎng)絡(luò)協(xié)議存儲(chǔ)池vxworks操作系統(tǒng)是美國(guó)windri ver公司于1983年設(shè)計(jì)開(kāi)發(fā)的一種嵌入式 實(shí)時(shí)操作系統(tǒng)(rtos)。它以良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及卓越的實(shí) 時(shí)性被廣泛的應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的 領(lǐng)域屮。vxwo

2、rks操作系統(tǒng)有著優(yōu)越的網(wǎng)絡(luò)性能,而緩沖區(qū)的數(shù)據(jù)拷貝是影響 網(wǎng)絡(luò)性能的主要因索。眾所周知,緩沖區(qū)在網(wǎng)絡(luò)協(xié)議棧中有兩個(gè)作用:第一,提供載體,使分組或 報(bào)文可以在各協(xié)議層中流動(dòng);第二,為各級(jí)緩沖區(qū)提供空間。緩沖區(qū)的設(shè)立使得 tcp /ip協(xié)議棧支持異步i / 0操作,異步操作對(duì)于協(xié)議棧的i / 0性能是非常重 要的。在網(wǎng)絡(luò)輸出的過(guò)程中每一層需要在數(shù)據(jù)的首部或者尾部添加數(shù)據(jù)頭和數(shù) 據(jù)尾來(lái)對(duì)數(shù)據(jù)進(jìn)行封裝使得接收端對(duì)應(yīng)的層能夠進(jìn)行正確的接收,在輸入的過(guò)程 中每層都需要將本層的數(shù)據(jù)頭和數(shù)據(jù)尾去掉而最終還原成發(fā)送端發(fā)送的數(shù)據(jù)。上 述的封裝/去封裝和拷貝操作使得網(wǎng)絡(luò)協(xié)議對(duì)內(nèi)核的存儲(chǔ)器管理能力提出了很 多要求。

3、這些要求包括能方便地操作可變長(zhǎng)緩存,能在緩存頭部和尾部添加數(shù)據(jù) (如低層封裝來(lái)自髙層的數(shù)據(jù)),能從緩存中移去數(shù)據(jù)(如當(dāng)數(shù)據(jù)包向上經(jīng)過(guò)協(xié)議 棧時(shí)要去掉首部),并能盡量減少這些操作所作的數(shù)據(jù)復(fù)制。1使用netbuflib管理存儲(chǔ)池的基本原理網(wǎng)絡(luò)協(xié)議存儲(chǔ)池使用mblk結(jié)構(gòu)、clblk結(jié)構(gòu)、簇緩沖區(qū)和netbuflib提供 的函數(shù)進(jìn)行組織和管理。mblk和clblk結(jié)構(gòu)為簇緩沖區(qū)(cluster)中數(shù)據(jù)的 緩沖共享和緩沖鏈接提供必要的信息。netbuflib例程使用mblk和clblk來(lái)管 理cluster和引用cluster中的數(shù)據(jù),這些結(jié)構(gòu)體中的信息用于管理cluster 中的數(shù)據(jù)并且允許他們通過(guò)

4、引用的形式來(lái)實(shí)現(xiàn)數(shù)據(jù)共享,從而達(dá)到數(shù)據(jù)“零拷 貝”的目的。1. 1結(jié)構(gòu)體mblk和clblk及其數(shù)據(jù)結(jié)構(gòu)mblk是訪問(wèn)存儲(chǔ)在內(nèi)存池中數(shù)據(jù)的最基本對(duì)象,由于mblk僅僅只是通過(guò) clblk來(lái)引用數(shù)據(jù),這使得網(wǎng)絡(luò)層在交換數(shù)據(jù)時(shí)就可以避免數(shù)據(jù)復(fù)制。只需把一 個(gè)mblk連到相應(yīng)mblk鏈上就可以存儲(chǔ)和交換任意多的數(shù)據(jù)。一個(gè)mblk結(jié)構(gòu)休 包括兩個(gè)成員變量mnext和mnextpkt,曲它們來(lái)組成縱橫兩個(gè)鏈表:mnext來(lái) 組成橫的鏈表,這個(gè)鏈表中的所有結(jié)點(diǎn)構(gòu)成一個(gè)包(packet); mnextpkt來(lái)組成 縱的鏈表,這個(gè)鏈表屮的每個(gè)結(jié)點(diǎn)就是一個(gè)包(packet),所有的結(jié)點(diǎn)鏈在一起 構(gòu)成一個(gè)包隊(duì)列,

5、如圖1所示。數(shù)據(jù)包1數(shù)據(jù)包2圖1包含兩個(gè)數(shù)據(jù)包的mblk鏈結(jié)構(gòu)體mblk和clblk的數(shù)據(jù)結(jié)構(gòu)如下所示:struct mblkm_blk_hdrm_pkt_hdrcl_blk * m blk; struct clblkmblkhdr; mblkpkthdr;pcibik;/* header */* pkthdr */* pointer to cluster blk */cl_blk_listclnodc;/* unionof next clblk */uintclsize;/* cluster size */intclrefcnt;/countof the cluster */struct n

6、etpool * pnetpool;/* pointer to the netpool */ cl blk;/* header at beginning of each mblk */ struct mhdrstruct mblk * mnext;/* next buffer in chain */ struct mblk * mnextpkt;/* next chain in queue/record */char *mdata;/* 1ocation of data */int mlen;/* amount of data in this mblk */ucharucharmtype;/*

7、 type of data in this mblk */ mflags;/* flags; see below */ m_blk_hdr;/* record/packet header in first mblk of chain; valid if m pkthdr set */structpkthdristruct intifnet *rcvif;/* rev interface */len;/* total packet length */ m_pkt_hdr;1.2網(wǎng)絡(luò)協(xié)議存儲(chǔ)池的初始化vxworks在網(wǎng)絡(luò)初始化時(shí)給網(wǎng)絡(luò)協(xié)議分配存儲(chǔ)池并調(diào)用netpoolinit ()函數(shù) 對(duì)其初始化

8、,由于一個(gè)網(wǎng)絡(luò)協(xié)議通常需要不同人小的簇,因此它的存儲(chǔ)池也必 須包含很多簇池(每一個(gè)簇池對(duì)應(yīng)一個(gè)人小的簇)。如圖2所示。另外,每個(gè)簇 的大小必須為2的方無(wú),最大可為64kb (65536),存儲(chǔ)池的常用 簇的大小為 64, 128, 256, 512, 1024比特,簇的大小是否有效取決于cl_desc表中的相關(guān) 內(nèi)容,cl_desc表是由netpoolinit ()函數(shù)調(diào)用設(shè)定的。64446464646464:*646484”池用于網(wǎng)恪怖取慢的存p池圖2網(wǎng)絡(luò)協(xié)議存儲(chǔ)池初始化后的結(jié)構(gòu)1.3存儲(chǔ)池的鏈接及釋放存儲(chǔ)池在初始化后,由netpool結(jié)構(gòu)組織兒個(gè)下一級(jí)子池:一個(gè)mblk池、 一個(gè)clblk

9、池和一個(gè)cluster池omblk池就是由很多mblk組 成的一條mblk鏈; clblk池就是由很多clblk組成的一條clblk鏈。cluster池由很多的更下一級(jí) cluster子池構(gòu)成,每一個(gè)cluster子池就是一個(gè)cluster鏈。每一個(gè)cluster 鏈中的所有cluster的大小相同,不同鏈中的cluster大小不同。但要實(shí)現(xiàn)不 同 進(jìn)程訪問(wèn)同一簇而不需要作數(shù)據(jù)的拷貝,還需要把mblk結(jié)構(gòu),clblk結(jié)構(gòu)和簇 結(jié)構(gòu)鏈接在一起。創(chuàng)建這三級(jí)結(jié)構(gòu)一般要遵循這樣五步:a. 調(diào)用系統(tǒng)函數(shù)netclusterget ()預(yù)定一塊簇緩沖區(qū);b. 調(diào)用系統(tǒng)函數(shù)netciblkget ()預(yù)定一

10、個(gè)clblk結(jié)構(gòu);c. 調(diào)用系統(tǒng)函數(shù)netmblkget ()預(yù)定一個(gè)mblk結(jié)構(gòu);d. 調(diào)用系統(tǒng)函數(shù)netciblkjoin ()把簇添加到clblk結(jié)構(gòu)中;e. 調(diào)用系統(tǒng)函數(shù)netmblkcljoino把clblk結(jié)構(gòu)添加到mblk結(jié)構(gòu)中。 這樣,就構(gòu)成了最后的緩沖區(qū)。在緩沖區(qū)中的數(shù)據(jù)使用完畢后耍及時(shí)的釋放內(nèi)存,這一過(guò)程只需耍調(diào)用系統(tǒng) 函數(shù)netmblkclchainfree ()釋放存有數(shù)據(jù)的mblk鏈表。例如當(dāng) 數(shù)據(jù)向上層傳 送時(shí),在木層屮可以釋放已經(jīng)不再使用的mblk鏈表,由于在clblk屮記錄著指 向本模塊的mblk的個(gè)數(shù),雖然釋放了 mblk鏈表,但是這并不表示將cluster

11、中的數(shù)據(jù)釋放掉了,上層復(fù)制的鏈表仍然控制著這些數(shù)據(jù),直到clblk中的mblk 計(jì)數(shù)為0時(shí)才真正的將數(shù)據(jù)占用的簇釋放掉,將數(shù)據(jù)占用的內(nèi)存空間釋放、歸 還給系統(tǒng)將來(lái)使用。2網(wǎng)絡(luò)協(xié)議存儲(chǔ)池與數(shù)據(jù)的封裝處理vxworks操作系統(tǒng)之所以采用mblk一clblk一cluster這樣的網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ) 結(jié)構(gòu),目的就是減少數(shù)據(jù)拷貝的次數(shù),提高網(wǎng)絡(luò)數(shù)據(jù)的傳輸速率。mblkclblk3048字書(shū)1460 字 的數(shù)據(jù)圖3存儲(chǔ)帶有1460個(gè)字節(jié)數(shù)據(jù)的mblk在網(wǎng)絡(luò)輸出的過(guò)程中當(dāng)從上層向下層傳遞數(shù)據(jù)時(shí),下層協(xié)議需要對(duì)數(shù)據(jù)進(jìn)行 封裝使得接收端對(duì)應(yīng)的層能夠進(jìn)行止確的接收。下面通過(guò)實(shí)例分析網(wǎng)絡(luò)數(shù)據(jù)的封 裝過(guò)程。例如耍在如圖3所

12、示的mblk鏈屮添加1p和udp的首部。在mblk鏈表中封裝數(shù)據(jù)的方法是分配另外一個(gè)mblk,把它放在鏈?zhǔn)?,并?分組首部復(fù)制到這個(gè)mblko tp首部和udp首部被放置在新mblk的最 后,這個(gè) 新mblk就成了整個(gè)鏈表的首部。如果需要,它允許任何其它低層協(xié)議(例如添加 以太網(wǎng)首部)在tp首部前添加自己的首部,不需要再?gòu)?fù)制ip和udp首部。在第 一個(gè)mblk中的mblkhdr. mdata指針指向首部的起始位置,mblkhdr. mlen的值是 28o在分組首部和ip首部之間有72字節(jié)的未用空間留給以后的首部,通過(guò)適 當(dāng)?shù)匦薷膍blkhdr. mdata扌旨針和mblkhdr. mlen添加

13、在ip首部的前面。注意,分 組首部己經(jīng) 移到新mblk中了,分組首部必須放在mblk鏈表的第一個(gè)mblk中。 在移動(dòng)分組首部的同時(shí),在第一個(gè)mblk設(shè)置m.pktiidr標(biāo)志。在第二個(gè)mblk中 分組首部占用的空間現(xiàn)在未用。最后,改變?cè)诖朔纸M首部小的長(zhǎng)度成員 mblkpkthdr. lcn,成員mblkpkthdr. lcn的值是這個(gè) 分組的mblk鏈表中所有數(shù) 據(jù)的總長(zhǎng)度:r卩所有通過(guò)mblkhdr. mnext指針鏈接的mbuf的mblkhdr. mlen值的 和。本例中由于增加了 28個(gè)字節(jié)變成了 1488。如圖4所示。鏈中m blk巴tmb ik圖4添加完ip和udp首部的mblk這樣

14、,當(dāng)報(bào)文在協(xié)議棧屮流動(dòng)時(shí),不會(huì)拷貝報(bào)文鏈,而只需把指向mblk的 指針通過(guò)參數(shù)傳遞。當(dāng)報(bào)文需要進(jìn)人緩沖區(qū)時(shí),也是通過(guò)鏈表的指針操作將報(bào)文 插入或添加到隊(duì)列中。3結(jié)論網(wǎng)絡(luò)i辦議存儲(chǔ)池的職責(zé)有兩個(gè):為i辦議棧提供合適的緩沖區(qū),如果太大會(huì)浪 費(fèi)系統(tǒng)資源,太小會(huì)影響i辦議棧的吞吐量;提供合適的數(shù)據(jù)結(jié)構(gòu)裝載網(wǎng)絡(luò)報(bào)文, 既可以使 協(xié)議棧方便地處理報(bào)文,乂可以減少緩沖區(qū)拷貝的次數(shù)。減少拷貝次 數(shù)不僅降低了 cpu的負(fù)荷,還可以降低存儲(chǔ)器的消耗。本文剖析了嵌入式操作系 統(tǒng)vxworks中網(wǎng)絡(luò)協(xié)議存儲(chǔ)池的原理,實(shí)現(xiàn)了數(shù)據(jù)能夠動(dòng)態(tài)增刪、但在邏輯上 乂呈現(xiàn)連續(xù)性的數(shù)據(jù)結(jié)構(gòu)。能夠滿足在各協(xié)議層z間傳遞數(shù)據(jù)而不需耍進(jìn)行

15、內(nèi)存 拷貝。參考文獻(xiàn)1翟東海,李力.mbuf的實(shí)現(xiàn)原理剖析及其在網(wǎng)絡(luò)編程中的應(yīng)用j 計(jì)算機(jī)工 程與應(yīng),2004(8) : 104-106.美:douglase. comer著.張娟等譯.用tcp / ip進(jìn)行網(wǎng)際互聯(lián)第二卷:設(shè) 計(jì)、實(shí)現(xiàn)與內(nèi)核(第三版)m北京:電子工業(yè)出版社,2001. 05.3 美garyr wright w. richardstevens 著.陸雪瑩,蔣慧等譯.tcp / ip 詳解卷2:實(shí)現(xiàn)m北京:機(jī)械工業(yè)出版社.2000. 07: 1050.4 wind river system inc. vxworks network收稿日期:8月25日 修改日期:9月2日«

16、;vxworks任務(wù)追蹤實(shí)例分析vxworks中如果稍有不慎,就可能導(dǎo)致task suspend,如果運(yùn)氣好,shell沒(méi)有 被掛起,則可以通過(guò)系統(tǒng)的一些命令追蹤一下掛起的原因。其中用到的主要命令 是 i、tt> ti> d 等。首先從出錯(cuò)信息開(kāi)始:0xfc8125b8 (t led): mempartfree: invalid block 0xfdfc6f38 in partition 0xfe508894由于mempartfree t一個(gè)非法的內(nèi)存塊,導(dǎo)致了任務(wù)掛起,我們需耍確定到底是 哪條語(yǔ)句導(dǎo)致了這個(gè)界常的產(chǎn)生,可能是什么原因引起的。首先,需要通過(guò)“i”命令察看任務(wù)狀態(tài):-

17、> inameentryerrno delayt1d pri status pcsptexctaskexctaskfdffecso0pendfe3c5f50fdffeb603006b0tlogtasklogtaskfdffc2980pendfe3c5f50fdffcl880 0tshellshel 1fdf5fa481readyfelf3afcfdf5f6280 0t ledfe392a30fc8125b8100suspendfelf24b0fc8120b8d00030可以看到任務(wù)t_lcd的狀態(tài)為suspend,即被掛起的狀態(tài)。其他各項(xiàng)的含義都比 較清楚,entry是任務(wù)的入口函數(shù),如

18、果沒(méi)有symbol,則直接顯示地址,tjld是 任務(wù)的td號(hào),一般用任務(wù)的棧底地址表示,pc是當(dāng)前的指令位置,sp是當(dāng)前棧 頂位置。然后通過(guò)” tt”來(lái)追溯函數(shù)調(diào)用過(guò)程:-> tt t_lcd fe3cl4f4 vxtaskentry +68 : fe392a30 () fe392b48 initlcdcomponent+2e8: fe392bdc ()fe392bcc initlcdcomponcnt+38c: fc392bfc ()fc39333c initlcdcomponcnt+adc: lcdshowpassword () fe398590 lcdshowpassword+84

19、 : savemodifiedsetting () fe3a3790 savemodifiedsetting+220: savesettingvalue (1) felfd6d0 savesettingvalue+148: felfc428 (0, 5, ffffffff) felfc888 gctdeviccsettingvaluc+64c: fclosc () felaab48 fclosc+ec : free ()felbb7d4 free+lc : mcmpartfree ()felbb2dc mempartfree+148: tasksuspend ()我們可以了解到函數(shù)的調(diào)用過(guò)程,

20、vxtaskentry ()?->fe392a30 ()->fe392bdc()->fe392bfc ()->1cdshowpassword ()->savemodifiedsetting()->savesettingvalue (l)->felfc428 (0, 5, ffffffff)->fclose ()->free ()->mempartfree ()->tasksuspend ()。其他相關(guān)信息:第一欄是發(fā)生跳轉(zhuǎn)(即 函數(shù)調(diào)用)后的返回地址,稍后會(huì)作詳細(xì)解釋,第二欄是離返回地址最近的 symbol和偏移量,一般情況下會(huì)

21、是發(fā)起調(diào)用的那個(gè)苗數(shù)的名稱,除非該函數(shù)是 內(nèi)部函數(shù),系統(tǒng)中沒(méi)有symbol,第三欄是被調(diào)用的函數(shù)。再來(lái)查看一下t_lcd任務(wù)的棧里的內(nèi)容,從前面的任務(wù)信息里已經(jīng)得知當(dāng)前棧頂 位置為fc8120b8,通過(guò)“d”命令顯示該地址的內(nèi)容。-> d 0xfc8120b0fc8120b0fc8120c0fc8120d0fc8120e0fc8120f0fc812100fc812110fc812120fc812130fc81 25b8 fe50 8894 fdf2 6b08 0000 0000 fd9a 3538 fd9a 3538 0000 0000 0000 000a 5f62 7566fc81 2

22、5b8 fdfc 6f30 0000 0100 fdfl ed80 fdfl ed80 fc81 2108 0000 0005 fdfl ed80 2e69 6c32fc81 20c8 fc81 20e8 0000 000cfc81 20f8fc81 2108fc81 2238 ffff ffff 4230 312e 0000 0000felf 24b0 felb b2dc 0000 0000 felb b7d4 fela ab48 felf c888 0000 0600 7874 6373 0000 0000$. *. p.oo*. k*.58!h*. 58.!&*b01.xtcs*

23、_buf il2*這里我們可以看到-些熟悉的地址,注意看最后兩列,在這里可以找到”仇”中 顯示的第一欄地址即函數(shù)調(diào)用的返回地址。兩個(gè)返回地址之間是該函數(shù)的???間,用于保存棧指針、局部變量或考相關(guān)寄存器的值。耍具體了解這些值是怎么 來(lái)的,就要用到反匯編了。反匯編通過(guò)objdunip命令來(lái)實(shí)現(xiàn),不同類型的cpu會(huì)有不同的可執(zhí)行文件,例如objdumpppc -d vxworks >xx s反匯編的結(jié)杲可能會(huì)很大,耐心等待吧。我們來(lái)看一下fcloseo里調(diào)用freeo 的這一過(guò)程,在匯編代碼里查找返冋地址fclaab48ofelaaa5c <fclose>:bl felbb7b8

24、 <free>li ro, 0felaab44:48 01 0c 75felaab48:38 00 00 00 bl是無(wú)條件跳轉(zhuǎn)指令,freeo執(zhí)行完之后,應(yīng)返冋f(shuō)elaab48繼續(xù)執(zhí)行。查找felbb7b8,看看free被調(diào)用時(shí)干了些什么?felbb7b8 <free>:9421fffo7c0802a6900100147c64lb783c60fe51386388944bfff9c5800100147c0803a6382100104c800020felbb7b8 felbb7bc felbb7c0 felbb7c4 felbb7c8 felbb7cc felbb7d0

25、felbb7d4 felbb7c!8 felbb7dc felbb7c0stwurl,-16 (rl)mflrrostw ro, 20(rl)mr r4, r31 is r3, -431addi r3,r3, -30572 bl felbbl94 <mempartfree> lwz ro, 20(rl)mtlrroaddirl, rl, 16blr雖然不同類型cpu的匯編指令不同,但還是可以大致猜出其中的含義。也丄指 令 將門(mén)保存到地址(rl-16)位置,然后讓將rl減去16保存到rl屮,完成了保存 并更新棧指針的過(guò)程;第2、3條語(yǔ)句將返回地址保存到rl+20的 位置;下面幾 條語(yǔ)

26、句實(shí)際上是準(zhǔn)備參數(shù)的過(guò)程,r3,r4 般用來(lái)保存函數(shù)的形參值,隨后調(diào)用 / mempartfreeo從mempartfree返回后,先從堆棧上讀取返回地址,然后將 棧頂下移16字節(jié),即恢復(fù)到原來(lái)的位置,最后跳轉(zhuǎn)到返回地址。對(duì)著內(nèi)存內(nèi)容校驗(yàn)一下,fclose調(diào)用free后的返回地址為felaab48,按照上面 的分析,這個(gè)地址會(huì)被freeo函數(shù)保存在rl+20的位置,因此rl+20=fc8120fc, rl=fc8120e8,而free中將rl減去了 16,所以剛進(jìn)入free()時(shí),rl應(yīng)該等于 fc8120f8,這個(gè)數(shù)值會(huì)被保存在fc8120e8處,事實(shí)正是如此。這里棧內(nèi)空間的利用有點(diǎn)交叉混雜

27、,暫時(shí)沒(méi)有弄的太明口,并且frcc()中沒(méi)有 用到過(guò)fc8120f0-fc8120f8空間的內(nèi)存,推測(cè)可能是棧的人小至少為16字節(jié)所 以留空了,里面的內(nèi)容是歷史遺留產(chǎn)物,是否如此,還有待進(jìn)一步的研究。以上是比較通用的分析過(guò)程,本來(lái)還涉及到結(jié)合c代碼的分析,跟具體的例子結(jié) 合太緊密,就不贅述了,有一點(diǎn)可以提一下,想追溯函數(shù)調(diào)用過(guò)程中某一參數(shù)的 運(yùn)行值,可能會(huì)在調(diào)用者的棧屮,也可能會(huì)在調(diào)用者的調(diào)用者的棧屮,這個(gè)需要 結(jié)合具體的匯編碼來(lái)分析。因?yàn)楹瘮?shù)的棧開(kāi)辟出來(lái)是為了保存一些臨時(shí)的亂七八 糟的東西,比如需要用到r38,就會(huì)把r38臨時(shí)保存到棧上,返冋時(shí)再恢復(fù)。 而對(duì)本函數(shù)有用的變量,通常會(huì)被優(yōu)化到寄存器中保存,除非寄存器不夠用了, 才會(huì)用到棧空間。vxworks5.5的內(nèi)存結(jié)構(gòu)phdr>1pprevhdr: 32nwords:31&ee:lfree_bijockpprevnode;32pnextnode:32phdr2=phdr+nwords*2尸pprevhdrblockjtor vnwordsfireepadp-tslockdata內(nèi)存結(jié)構(gòu)vxworks5. 5屮的內(nèi)存是平板式的,基木的結(jié)構(gòu)如上圖所示,整個(gè)內(nèi)存分區(qū)被劃 分成一個(gè)個(gè)區(qū)塊(block) o每一個(gè)區(qū)塊都有一個(gè)區(qū)塊頭,如果是空閑的內(nèi)存塊, 是free_block,如果是己分配的,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論