亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

在產(chǎn)生差別文件中使用的處理軟件的制作方法

文檔序號(hào):6487269閱讀:181來(lái)源:國(guó)知局
專利名稱:在產(chǎn)生差別文件中使用的處理軟件的制作方法
技術(shù)領(lǐng)域
所公開(kāi)的實(shí)施例涉及用差別文件更新電子文件。
背景技術(shù)
運(yùn)行在處理器、微處理器和/或處理單元上以提供某種功能的軟件隨時(shí)間經(jīng)常改變。此改變可以是由例如糾正軟件文件中的bug或錯(cuò)誤、適應(yīng)技術(shù)發(fā)展或添加新特征的需要而引起的。特別的,掌控在移動(dòng)處理設(shè)備例如移動(dòng)無(wú)線設(shè)備上的嵌入式軟件組件常常包括很多需要糾正的軟件bug。軟件包括以人類可讀的美國(guó)信息交換標(biāo)準(zhǔn)碼(ASCII)普通文本文件或二進(jìn)制代碼形式的一個(gè)或多個(gè)文件。軟件文件可以分成通常稱為模塊或組件的較小單元。
基于便攜式處理器的設(shè)備如移動(dòng)處理設(shè)備典型地包括實(shí)時(shí)操作系統(tǒng)(RTOS),在所述實(shí)時(shí)操作系統(tǒng)中設(shè)備的所有軟件組件鏈接為一個(gè)單獨(dú)的大文件。此外,在這些移動(dòng)無(wú)線設(shè)備中,通常沒(méi)有提供文件系統(tǒng)支持。而且,該單獨(dú)的大文件需要使用慢速通信鏈路如無(wú)線電、紅外線或串行鏈接來(lái)預(yù)加載或嵌入到所述設(shè)備中。
通過(guò)慢速通信鏈接來(lái)更新移動(dòng)處理設(shè)備的大文件的障礙包括有關(guān)將更新的文件遞送到設(shè)備的時(shí)間、帶寬以及成本。對(duì)遞送大文件到移動(dòng)處理設(shè)備的問(wèn)題的一個(gè)現(xiàn)有解決方案包括使用壓縮。盡管通常使用若干現(xiàn)有的壓縮算法,但是,經(jīng)常是即使壓縮過(guò)的文件對(duì)于通過(guò)慢速、昂貴、窄帶的通信鏈路下載到設(shè)備也太大。
更新文件的另一典型解決方案使用差別程序來(lái)產(chǎn)生修正的文件如何區(qū)別于原始文件的說(shuō)明。有生成這種差別數(shù)據(jù)的可得到的差別程序。但是,即使壓縮過(guò),對(duì)于通過(guò)有關(guān)的通信協(xié)議傳送,使用這些差別程序生成的差別文件有時(shí)也太大。


圖1是示出一個(gè)實(shí)施例中文件差分和更新的框圖。
圖2是在圖1的實(shí)施例下產(chǎn)生增量(delta)文件的流程圖。
圖3是可執(zhí)行文件的原始和新版本的框圖。
圖4是圖1和圖2的實(shí)施例中預(yù)處理電子文件的不同版本的流程圖。
圖5是在圖4的實(shí)施例中的預(yù)處理電子文件的不同版本的代碼(文本)段的流程圖。
圖6是在圖5的實(shí)施例中的為電子文件的原始版本的代碼(文本)段產(chǎn)生新目標(biāo)地址值的流程圖。
圖7是在一個(gè)實(shí)施例中的文件的原始版本和新版本的框圖,示出關(guān)于為電子文件的原始版本的代碼(文本)段產(chǎn)生新目標(biāo)地址值而描述的不同地址(和相應(yīng)記號(hào))。
圖8是在圖4的實(shí)施例中的預(yù)處理電子文件的原始和新版本的數(shù)據(jù)段的流程圖。
圖9是在圖8的實(shí)施例中的為電子文件的原始版本的數(shù)據(jù)段產(chǎn)生新的數(shù)據(jù)指針值的流程圖。
圖10是在一個(gè)實(shí)施例中的文件的原始版本和新版本的框圖,示出為電子文件的原始版本產(chǎn)生新數(shù)據(jù)指針值所使用的不同地址(和相應(yīng)記號(hào))。
圖11是在圖4的實(shí)施例中的共有函數(shù)單元的提示合并的流程圖。
圖12是在圖4的實(shí)施例中的共有數(shù)據(jù)單元的提示合并的流程圖。
在所述圖中,相同的參考號(hào)識(shí)別相同或基本相似的元素或行為。為了易于識(shí)別對(duì)任何特殊元件或行為的討論,參考號(hào)中最重要的位指的是該元素第一次被介紹的圖號(hào)(如,元件124關(guān)于圖1被第一次介紹和討論)。
具體實(shí)施例方式
提供了系統(tǒng)和方法,用于預(yù)處理文件的原始和新版本作為原始和新版本之間的差別文件產(chǎn)生的一部分。該預(yù)處理支持進(jìn)一步減小差別文件的大小。軟件/文件版本間的可執(zhí)行改變包括限定為源代碼改變的主要改變/邏輯改變以及次要改變。次要改變一般是由主要改變引起的并由軟件編譯器/鏈接器應(yīng)用來(lái)產(chǎn)生。次要改變包括由主要改變引起的并由軟件編譯器/鏈接器應(yīng)用所產(chǎn)生的地址改變、指針目標(biāo)地址改變以及地址偏移改變。所提供的預(yù)處理系統(tǒng)和方法在文件版本間使用近似規(guī)則來(lái)去除/減少次要改變,并把有關(guān)去除這些改變的信息編碼到對(duì)應(yīng)的差別文件的信息中。
在此詳細(xì)描述用于在電子文件的兩個(gè)版本之間產(chǎn)生差別文件的系統(tǒng)和方法,其在這里稱為文件差分。圖1是示出在一個(gè)實(shí)施例中的文件差分和更新的框圖。所述文件差分和更新包括差分組件和更新組件。差分組件,此處稱為文件差別生成器,根據(jù)電子文件的原始版本和新版本在第一基于處理器的或計(jì)算機(jī)系統(tǒng)中產(chǎn)生差別文件。更新組件,此處稱為更新生成器,使用差別文件和原始文件的掌控拷貝在第二基于處理器的或計(jì)算機(jī)系統(tǒng)上產(chǎn)生新文件的拷貝。
在以下說(shuō)明中,介紹了若干具體細(xì)節(jié)以提供對(duì)本發(fā)明的實(shí)施例的完全理解和實(shí)現(xiàn)說(shuō)明。但是,本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到本發(fā)明可以不需具體細(xì)節(jié)的一個(gè)或多個(gè)而實(shí)現(xiàn),或利用其他組件、系統(tǒng)等等來(lái)實(shí)現(xiàn)。在其他例子中,不顯示或不詳細(xì)說(shuō)明公知的結(jié)構(gòu)或操作,以避免模糊本發(fā)明的方面。
參考圖1,第一計(jì)算機(jī)系統(tǒng)102和第二計(jì)算機(jī)系統(tǒng)104通過(guò)通信路徑106通信。如在本領(lǐng)域公知的,計(jì)算機(jī)102和104包括一起工作的計(jì)算組件和設(shè)備的任何集合。計(jì)算機(jī)系統(tǒng)102和104也可以是較大的計(jì)算機(jī)系統(tǒng)或網(wǎng)絡(luò)中的組件或子系統(tǒng)。
通信路徑106包括任何介質(zhì),文件通過(guò)所述介質(zhì)在計(jì)算機(jī)102和104之間交換和傳送。因此,路徑106包括無(wú)線連接、有線連接和混合無(wú)線/有線連接。通信路徑106還包括到包括本地局域網(wǎng)(LAN)、城域網(wǎng)(MAN)、廣域網(wǎng)(WAN)、專用網(wǎng)、局間或后端網(wǎng)絡(luò)以及Internet的網(wǎng)絡(luò)的耦合或連接。此外,通信路徑106包括可移動(dòng)的固定介質(zhì)如軟盤、硬盤驅(qū)動(dòng)器和CD-ROM盤,以及電話線、總線和電子郵件消息。
第一通信系統(tǒng)102接收電子文件的原始的、或舊的版本110和新版本112。新文件112通常是原始文件110的更新或修正的版本,但并不限制于此。電子文件110和112包括軟件文件,包括動(dòng)態(tài)鏈接庫(kù)文件、共享對(duì)象文件、嵌入式軟件組件(EBSC)、固件文件、可執(zhí)行文件;數(shù)據(jù)文件,包括十六進(jìn)制數(shù)據(jù)文件、系統(tǒng)配置文件;以及包括個(gè)人使用數(shù)據(jù)的文件,但并不限制于此。因?yàn)槿魏晤愋偷奈募伎梢钥醋髯止?jié)流,以下依據(jù)上下文而可將文件描述為字節(jié)流。
如下所述,文件差別生成器114的組件接收新文件112,把它與原始文件110比較,并計(jì)算被比較文件間的差別。這些差別包括被比較文件間的字節(jié)級(jí)差別,但并不限制于此。文件差別生成器114在比較期間產(chǎn)生差別文件116,這里稱作增量文件116。
一個(gè)實(shí)施例的文件差別生成器114耦合于主機(jī)系統(tǒng)102的組件之間,其中所述組件包括至少一個(gè)處理器、至少一個(gè)控制器、至少一個(gè)存儲(chǔ)器設(shè)備以及至少一個(gè)總線,但并不限制于此。一個(gè)實(shí)施例的文件差別生成器114的組件包括至少一個(gè)預(yù)處理子系統(tǒng)124和至少一個(gè)差分子系統(tǒng)134。預(yù)處理子系統(tǒng)124也稱為預(yù)處理器124,包括在預(yù)處理算法、程序或例程的至少一個(gè)的控制下運(yùn)行的至少一個(gè)處理器。同樣,差分子系統(tǒng)134包括在差分算法、程序或例程的至少一個(gè)的控制下運(yùn)行的至少一個(gè)處理器。
增量文件116的內(nèi)容提供了對(duì)新文件112和原始文件110之間差別的有效表示。增量文件116包括表現(xiàn)有關(guān)文件的新的或當(dāng)前版本與該文件的以前版本之間差別的元數(shù)據(jù)以及代替和/或插入操作的真實(shí)數(shù)據(jù),如2002年5月13日提出的標(biāo)題為“Byte-Level File Differencing and UpdatingAlgorithms”、申請(qǐng)專利號(hào)10/146,545的美國(guó)專利申請(qǐng)所述。文件差別生成器114用最少量的字節(jié)和預(yù)定義的格式或協(xié)議在增量文件116中提供原始110和新112文件之間的任何差別,從而提供在空間上優(yōu)化的增量文件。
增量文件116通過(guò)通信路徑106傳送或傳輸?shù)搅硪惶幚硐到y(tǒng)104。傳送之前,增量文件116可用本領(lǐng)域公知的壓縮技術(shù)來(lái)壓縮,但并不限制于此。掌控在接收系統(tǒng)104上的更新生成器118用增量文件116與掌控的原始文件110H一起產(chǎn)生或創(chuàng)建新文件的拷貝112C。新文件的拷貝112C隨后用于更新掌控在目的為修正或更新的客戶設(shè)備上的原始文件110H。當(dāng)該更新過(guò)程完成時(shí),現(xiàn)在存儲(chǔ)在第二計(jì)算機(jī)系統(tǒng)上的新文件與第一計(jì)算機(jī)系統(tǒng)102中接收的新文件112一致。
原始文件和新文件之間的差別通常比新文件小,如果是差別而不是整個(gè)新文件被傳輸和存儲(chǔ),則顯著節(jié)省了存儲(chǔ)和傳輸。這對(duì)掌控著通過(guò)可通常是慢速和昂貴的連接如無(wú)線或蜂窩狀連接而更新的程序的移動(dòng)電子設(shè)備(客戶設(shè)備)特別重要。增量文件減小的大小提供了很多改進(jìn),其中之一包括將增量文件傳輸?shù)娇蛻粼O(shè)備所需的帶寬減?。惠^小的文件意味著傳送需要較小的帶寬。而且,較小的文件需要較少的傳輸時(shí)間,并且因此降低了文件傳送被中斷的可能性且同時(shí)減少了接收文件中的傳輸錯(cuò)誤。另外,通過(guò)非安全連接傳輸增量文件比傳輸新軟件映像更安全。所有這些改進(jìn)提高了用戶滿意度。
圖2是在圖1的實(shí)施例中的產(chǎn)生增量文件的流程圖。在塊204,當(dāng)新文件和原始文件在第一處理或計(jì)算機(jī)系統(tǒng)中被接收時(shí),操作開(kāi)始。對(duì)應(yīng)于新和原始文件的映射文件也被接收。映射文件是包括軟件映像的每個(gè)符號(hào)的開(kāi)始地址和大小的高級(jí)文本文件,其中符號(hào)實(shí)例包括函數(shù)和全局變量。映射文件由編譯器/鏈接器應(yīng)用來(lái)輸出,并且也稱為日志文件、符號(hào)文件和/或列表文件。
在塊206,在新文件和原始文件的內(nèi)容之間執(zhí)行預(yù)處理操作以便識(shí)別兩文件內(nèi)容的共有段和簡(jiǎn)單模式。通常,預(yù)處理使用所識(shí)別共有段和模式來(lái)減少/去除新和原始文件間的次要改變。一個(gè)實(shí)施例的預(yù)處理包括減少和/或去除由與邏輯改變相關(guān)聯(lián)的地址偏移所引起的原始和新文件之間的改變,如下所述,但并不限制于此。于是,該預(yù)處理減少了文件共有段之間的差別,包括次要改變,因此提高了差別計(jì)算的效率。
預(yù)處理之后,在塊208,計(jì)算新文件和經(jīng)修改原始文件之間的字節(jié)級(jí)差別。在塊210,編碼和合并經(jīng)計(jì)算的差別并通過(guò)遵循預(yù)定義的編碼格式而產(chǎn)生增量文件。如果可能,在塊212,然后如本領(lǐng)域公知的優(yōu)化增量文件以進(jìn)一步減小文件大小,并且在塊214,提供優(yōu)化的增量文件作為輸出。
如上所述,在新文件和原始文件的內(nèi)容之間執(zhí)行預(yù)處理操作以便識(shí)別兩文件內(nèi)容中的共有段和簡(jiǎn)單模式。共有段和簡(jiǎn)單模式的知識(shí)用于減少/去除次要改變,因此造成整體性能增強(qiáng)。
如上所述,電子文件或軟件更新在系統(tǒng)和客戶設(shè)備之間的傳輸會(huì)花大量時(shí)間,尤其是通過(guò)低帶寬通道傳輸時(shí)。一個(gè)實(shí)例是蜂窩電話軟件升級(jí)。典型的實(shí)現(xiàn)是通過(guò)蜂窩無(wú)線耦合發(fā)送新和原始軟件版本之間的字節(jié)級(jí)文件差別或改變。出現(xiàn)相當(dāng)大的傳遞時(shí)間是因?yàn)榭蓤?zhí)行文件的新和原始版本之間的差別比其對(duì)應(yīng)的源文件之間的差別更復(fù)雜。
出現(xiàn)這些新和原始文件版本之間的復(fù)雜差別一部分是因?yàn)樵次募行〉母淖兘?jīng)常引入貫穿可執(zhí)行文件的較大改變。例如,可執(zhí)行文件中引入的改變包括兩種主要類型的改變主要改變和次要改變。主要改變,也稱為邏輯改變,是由從原始文件中刪除源代碼行、添加源代碼行到新文件以及修改源代碼行所引起的源代碼改變。次要改變限定為包括但不局限于由主要改變引起并由編譯器/鏈接器應(yīng)用產(chǎn)生的地址改變、指針目標(biāo)地址改變以及地址偏移改變。下面所述的預(yù)處理例程減少/去除了次要改變并把有關(guān)去除這些改變的信息編碼到對(duì)應(yīng)增量文件的信息中。
對(duì)可執(zhí)行文件中引入的次要改變的分析從假設(shè)可執(zhí)行文件包括代碼(文本)段和數(shù)據(jù)段開(kāi)始。圖3是框圖300,示出可執(zhí)行文件的原始版本V1和新版本V2。原始版本V1和新版本V2都包括代碼(文本)段310和320及數(shù)據(jù)段312和322。新版本V2和原始版本V1差別在于新版本V2包括了大小為0x500的附加的新代碼塊302。新代碼塊302的存在引入了兩種次要改變。
第一種次要改變發(fā)生在新版本V2的代碼(文本)段320并導(dǎo)致分支指令BRANCH具有不同的分支位移,也稱為相對(duì)地址或分支偏移,由在分支指令地址BRANCH和目標(biāo)指令地址TARGET之間添加新代碼塊302引起。在此實(shí)例中,目標(biāo)指令地址是0x1000,而分支指令地址是0x3000,導(dǎo)致原始版本中0x2000(0x3000-0x1000)的分支位移。在分支指令地址和目標(biāo)指令地址之間的新代碼塊(大小為0x500)的添加把分支指令地址改變?yōu)?x3500(0x3000+0x500)。所以,新版本V2中的分支位移改變?yōu)?x2500(0x3500-0x1000)。
第二種次要改變發(fā)生在新版本V2的數(shù)據(jù)段322中并導(dǎo)致數(shù)據(jù)指針POINTER中存儲(chǔ)的值改變或存儲(chǔ)對(duì)應(yīng)數(shù)據(jù)區(qū)的絕對(duì)地址的數(shù)據(jù)指針值改變。數(shù)據(jù)指針值的改變由在代碼(文本)段中添加新代碼302引起。新代碼302插入在數(shù)據(jù)段322之前的原始文件中的一個(gè)點(diǎn)。因此,在原始版本中為0x8000的數(shù)據(jù)指針值在新版本中改變?yōu)?x8500(0x8000+0x500)。
由于軟件開(kāi)發(fā)變得越來(lái)越復(fù)雜,次要改變遍布在可執(zhí)行文件中,以至當(dāng)考慮字節(jié)級(jí)文件差分的上下文時(shí)次要改變的數(shù)量超過(guò)了主要改變。下述的預(yù)處理例程使用文件的原始和新版本之間的關(guān)系來(lái)減少編碼在增量文件中的有關(guān)次要改變的差別的信息數(shù)量。利用最少的信息,當(dāng)進(jìn)行字節(jié)級(jí)差分和重構(gòu)時(shí)可以達(dá)到級(jí)聯(lián)計(jì)算的效果,從而減小了增量文件的大小。
通常,一個(gè)實(shí)施例的預(yù)處理例程包括用于最小化增量文件大小的至少一個(gè)近似例程和至少一個(gè)合并例程。近似例程作用是根據(jù)文本(代碼)和數(shù)據(jù)模型假設(shè)來(lái)減少/去除次要改變。合并例程,也稱為提示合并例程,以用于傳送到接收新版本的設(shè)備的最低成本水平來(lái)編碼模型信息。如上所述,模型信息用于設(shè)備中的新版本的恢復(fù),但并不限制于此。
圖4是圖1和圖2的實(shí)施例中預(yù)處理電子文件的不同版本的流程圖206。在塊402,當(dāng)接收到文件的新和原始版本時(shí),從相關(guān)的映射文件中提取共有函數(shù)單元和共有數(shù)據(jù)單元。在塊404,合并共有函數(shù)單元以形成共有函數(shù)塊,其在以下及參考圖11詳細(xì)描述。同樣,合并共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊,其在以下參考圖12詳細(xì)說(shuō)明。然后,在塊408,預(yù)處理系統(tǒng)的預(yù)處理例程預(yù)處理新和原始文件的代碼(文本)段,其在以下參考圖5、6、7描述。在塊410,預(yù)處理例程隨后或同時(shí)預(yù)處理新和原始文件的數(shù)據(jù)段,其在以下參考圖8、9、10描述。在塊412,編碼共有函數(shù)塊和共有數(shù)據(jù)塊,并輸出原始文件的經(jīng)修改版本以用于執(zhí)行字節(jié)級(jí)文件差分。
圖5是在圖4的實(shí)施例中的預(yù)處理電子文件的不同版本的代碼(文本)段的流程圖408。通常,文件的代碼(文本)段由一個(gè)或多個(gè)函數(shù)單元或塊組成。在塊502,一個(gè)實(shí)施例的代碼(文本)段的預(yù)處理從識(shí)別原始和新文件的每個(gè)函數(shù)單元的開(kāi)始和結(jié)束地址開(kāi)始,其中原始文件的函數(shù)單元在這里稱為“原始函數(shù)單元”而新文件的函數(shù)單元稱為“新函數(shù)單元”。函數(shù)單元的開(kāi)始和結(jié)束地址使用映射文件識(shí)別,但并不限制于此。
在塊504,預(yù)處理器接下來(lái)給每個(gè)唯一的函數(shù)單元分配唯一的索引或索引值。給唯一函數(shù)單元分配索引值支持對(duì)原始和新文件版本都是共有的函數(shù)單元的識(shí)別。隨后,當(dāng)在文件的原始和新版本中都發(fā)現(xiàn)相同的函數(shù)單元時(shí),該函數(shù)被分配一個(gè)共有索引值,但該實(shí)施例并不限制于此。
例如,考慮包括原始函數(shù)單元F1、F2、F3和F4的原始文件版本,以及包括新函數(shù)單元F1、F2、F3和F5的新文件版本。如果預(yù)處理器分別用索引值1、2、3、4和5來(lái)索引函數(shù)單元F1、F2、F3、F4和F5,則下表是針對(duì)原始文件版本組合的

同樣,下表是針對(duì)新文件版本組合的

在這兩個(gè)表中,startddress通常限定為對(duì)應(yīng)函數(shù)單元的開(kāi)始地址;因此“startAddressV1”是原始文件的函數(shù)單元的startAddress,而“startAddressV2”是新文件的函數(shù)單元的startAddress。進(jìn)一步地,endAddress通過(guò)把函數(shù)單元大小與函數(shù)單元開(kāi)始地址相加而產(chǎn)生,即endAddress=startAddress+函數(shù)單元大小但是該實(shí)施例并不限制于此。于是,endAddressV1限定為原始文件的函數(shù)單元的endAddress,而endAddressV2限定為新文件的函數(shù)單元的endAddress。對(duì)結(jié)束地址的該限定這里也適用于數(shù)據(jù)單元,但并不限制于此。
接下來(lái),在塊506,預(yù)處理器使用來(lái)自于上表的索引值、開(kāi)始地址和結(jié)束地址的信息產(chǎn)生共有函數(shù)單元的HintTable。該HintTable包括組合在一個(gè)表中的共有函數(shù)單元的信息,包括索引值、原始文件版本(V1)的原始函數(shù)單元的開(kāi)始和結(jié)束地址以及新文件版本(V2)的新函數(shù)單元的開(kāi)始和結(jié)束地址。HintTable的信息使用任何數(shù)量的本領(lǐng)域公知的技術(shù)來(lái)設(shè)置。使用以上信息,一個(gè)實(shí)施例的HintTable如下產(chǎn)生

在塊508,預(yù)處理器繼續(xù)為包括目標(biāo)地址的原始函數(shù)單元的指令產(chǎn)生新目標(biāo)地址值。圖6是在圖5的實(shí)施例下為電子文件的原始版本的代碼(文本)段產(chǎn)生新目標(biāo)地址值的流程圖508。
在描述新目標(biāo)地址值的產(chǎn)生時(shí),與函數(shù)單元相關(guān)聯(lián)的各種地址用特殊記號(hào)說(shuō)明如下。指令地址在此通常用記號(hào)“addr”表示;因此,“addrV1”表示原始函數(shù)單元中的指令地址,而“addrV2”表示新函數(shù)單元中的指令地址。目標(biāo)地址在此通常用記號(hào)“targetAddr”表示;因此,“targetAddrV1”表示原始函數(shù)單元中的目標(biāo)地址,而“targetaddrV2”表示新函數(shù)單元中的對(duì)應(yīng)目標(biāo)地址。此外,包括targetAddrV1的原始函數(shù)單元的開(kāi)始地址在此用記號(hào)“targetStartAddrV1”表示,是包括targetAddrV1的原始函數(shù)單元的開(kāi)始地址,而包括targetAddrV2的新函數(shù)單元的開(kāi)始地址在此用記號(hào)“targetStartAddrV2”表示。
圖7是一個(gè)實(shí)施例中的文件的原始版本V1和新版本V2的框圖,示出關(guān)于為電子文件原始版本的代碼(文本)段產(chǎn)生新目標(biāo)地址值而描述的不同地址(和相應(yīng)記號(hào))。第一共有函數(shù)單元CFUA和第二共有函數(shù)單元CFU B對(duì)原始版本V1和新版本V2都是共有的。原始版本V1的共有函數(shù)單元CFU B具有開(kāi)始地址startAddrV1,并包括位于指令地址addrV1的可計(jì)算指令cal_insA。該可計(jì)算指令在以下描述。原始版本V1的共有函數(shù)單元CFU A具有開(kāi)始地址targetStartAddrV1,并包括可計(jì)算指令cal-insA的目標(biāo)地址targetAddrV1。
同樣地,新版本V2的共有函數(shù)單元CFU B具有開(kāi)始地址strtAddrV2,并包括位于指令地址addrV2的可計(jì)算指令cal_insB。新版本V2的共有函數(shù)單元CFU A具有開(kāi)始地址targetStartAddrV2,并包括可計(jì)算指令cal-insB的目標(biāo)地址targetAddrV2。
回到圖6,在塊602,通過(guò)從原始文件版本的原始函數(shù)單元j讀取未預(yù)處理的可計(jì)算指令開(kāi)始產(chǎn)生新目標(biāo)地址值,其中j是計(jì)數(shù)器值,值初始化為1并且接下來(lái)每次增加1直到j(luò)=n,其中n代表原始版本和新版本間的共有函數(shù)單元的總數(shù)。
然后在塊604產(chǎn)生或計(jì)算可計(jì)算指令的當(dāng)前目標(biāo)地址,如下所述。對(duì)包括目標(biāo)地址的任何指令,例如象程序計(jì)數(shù)器相關(guān)的跳轉(zhuǎn)指令和加載/存儲(chǔ)指令,目標(biāo)地址用當(dāng)前指令地址和對(duì)應(yīng)指令解碼來(lái)計(jì)算。使用以上提及的記號(hào),當(dāng)前目標(biāo)地址計(jì)算變成targetAddrV1=addrV1+解碼(指令),或可替換地,
解碼(指令)=targetAddrV1-addrV1。
如果值[targetAddrV1-addrV1]已知,該指令也可基于對(duì)應(yīng)的編碼方案來(lái)計(jì)算指令=編碼(targetAddrV1-addrV1)這一類指令稱為可計(jì)算指令,在此用“cal-ins”表示,而值(targetAddrV1-addrV1)稱為可計(jì)算指令的值或“指令值”。
對(duì)共有函數(shù)單元中的可計(jì)算指令,一個(gè)實(shí)施例的預(yù)處理器使用原始版本中的指令值連同原始函數(shù)單元開(kāi)始地址及新函數(shù)單元開(kāi)始地址一起產(chǎn)生共有函數(shù)單元的新版本中的指令值。利用以上提及的記號(hào),于是,使用原始版本中的指令值(targetAddrV1-addrV1)、startAddrV1、targetStartAddrV1、startAddrV2和targetStartAddrV2來(lái)產(chǎn)生或計(jì)算新版本中的指令值(targetAddrV2-addrV2)。
因此,在塊606,一旦產(chǎn)生原始文件的目標(biāo)地址(targetAddrV1),預(yù)處理器訪問(wèn)HintTable以識(shí)別k,即包括目標(biāo)地址targetAddrV1的原始文件版本的函數(shù)單元。在塊608,利用原始函數(shù)單元j及其目標(biāo)函數(shù)單元k的識(shí)別,預(yù)處理器從HintTable中讀取startAddrV1、startAddrV2、targetStartAddrV1和targetStartAddrV2。
接下來(lái),在塊610,預(yù)處理器現(xiàn)在為cal_insB產(chǎn)生指令值(targetAddrV2-addrV2)以替換cal_nsA的指令值,如下所述。一個(gè)實(shí)施例的預(yù)處理器在至少兩個(gè)假設(shè)之下操作,但并不限制于此。第一假設(shè)假定在原始版本和新版本中具有相同大小的共有函數(shù)單元具有在原始和新版本上的相同指令結(jié)構(gòu),這里所述指令結(jié)構(gòu)包括指令類型和指令順序。第二假設(shè)假定對(duì)于滿足第一假設(shè)的共有函數(shù)單元中的任何可計(jì)算指令,當(dāng)所述可計(jì)算指令是函數(shù)調(diào)用或可計(jì)算指令的目標(biāo)地址落入也滿足第一假設(shè)的共有函數(shù)單元中時(shí),兩個(gè)不變量通常在原始和新版本上保持如下addrV1-startAddrV1=addrV2-startAddrV2及
targetAddrV1-targetStartAddrV1=targetAddrV2-targetStartAddrV2。
于是,根據(jù)這兩個(gè)假設(shè),在塊610,預(yù)處理器為cal_insA產(chǎn)生新指令值(targetAddrV2-addrV2),如targetAddrV2-addrV2=(targetAddrV1-addrV1)+(targetStartAddrV2-targetStartAddrV1)-(startAddrV2-startAddrV1),在此稱為公式1。
在塊612,使用cal_insA的新指令值,預(yù)處理器將cal_insA修改為指令=編碼(targetAddrV2-addrV2)。
在原始版本的地址addrV1的原始指令cal_insA就以新指令替換。
在塊614,預(yù)處理器隨后判定是否有原始函數(shù)單元j的任何可計(jì)算指令仍然是未預(yù)處理。當(dāng)可計(jì)算指令仍然是未預(yù)處理,預(yù)處理器返回去在塊602從原始函數(shù)單元j讀取另一個(gè)或可替換地下一個(gè)未預(yù)處理的可計(jì)算指令,并且繼續(xù)如上所述進(jìn)行預(yù)處理。
如在塊614所判定的,當(dāng)原始函數(shù)單元j的所有可計(jì)算指令都預(yù)處理后,在塊616,預(yù)處理器判定計(jì)數(shù)器中的值j是否大于值n。判定j不大于n表明有共有函數(shù)單元未被預(yù)處理,所以在塊618,計(jì)數(shù)器中的值j增加1,并繼續(xù)如上所述進(jìn)行預(yù)處理。
判定j大于n表明原始文件版本的所有函數(shù)單元都已被預(yù)處理。隨后,在塊620,預(yù)處理器輸出包括新文件的近似版本的原始文件的修改版本。
如以上參考圖4所述的,在塊410,除了根據(jù)文本(代碼)模型假設(shè)以去除次要改變,預(yù)處理器和近似例程還起到根據(jù)數(shù)據(jù)模型假設(shè)以去除次要改變的作用。圖8是在圖4的實(shí)施例下的用來(lái)預(yù)處理電子文件的原始和新版本的數(shù)據(jù)段的流程圖410。通常,文件的數(shù)據(jù)段由一個(gè)或多個(gè)全局變量單元或塊組成,所述單元或塊此處稱為“數(shù)據(jù)單元”。
在塊802,一個(gè)實(shí)施例的數(shù)據(jù)段的預(yù)處理開(kāi)始于對(duì)原始和新文件的每個(gè)數(shù)據(jù)單元的開(kāi)始和結(jié)束地址的識(shí)別,這里原始文件的數(shù)據(jù)單元表示為“原始數(shù)據(jù)單元”,而新文件的數(shù)據(jù)單元表示為“新數(shù)據(jù)單元”。數(shù)據(jù)單元的開(kāi)始和結(jié)束地址用映射文件識(shí)別,但并不限制于此。
在塊804,預(yù)處理接下來(lái)給每個(gè)唯一的數(shù)據(jù)單元分配唯一的索引或索引值。給每個(gè)唯一的數(shù)據(jù)單元分配索引值支持對(duì)原始和新文件版本都是共有的數(shù)據(jù)單元的識(shí)別。隨后,當(dāng)在文件的原始和新版本中發(fā)現(xiàn)相同的數(shù)據(jù)單元時(shí),給該數(shù)據(jù)單元分配一共有索引值,但該實(shí)施例并不限制于此。給唯一的數(shù)據(jù)單元的索引值的分配與上述給唯一的函數(shù)單元的索引值的分配相同,但并不限制于此。同樣,根據(jù)索引值所組織的并包括每個(gè)數(shù)據(jù)單元的開(kāi)始和結(jié)束地址的表的產(chǎn)生與用于原始和新文件版本的函數(shù)單元的上述表的產(chǎn)生相同。但是,可替換的實(shí)施例可使用任何數(shù)量的本領(lǐng)域公知的技術(shù)來(lái)分配索引值和產(chǎn)生表。
接下來(lái),在塊806,預(yù)處理器用來(lái)自上表的索引值、開(kāi)始地址和結(jié)束地址的信息來(lái)產(chǎn)生共有數(shù)據(jù)單元的HintTable。該HintTable包括組合在一張表中的共有數(shù)據(jù)單元信息,包括索引值、原始文件版本(V1)的原始數(shù)據(jù)單元的開(kāi)始和結(jié)束地址以及新文件版本(V2)的新數(shù)據(jù)單元的開(kāi)始和結(jié)束地址。該HintTable的產(chǎn)生與參考共有函數(shù)單元的HintTable在以上所描述的相同,但是在可替換實(shí)施例中可使用任何數(shù)量的本領(lǐng)域公知的技術(shù)來(lái)產(chǎn)生該HintTable。
在塊808,預(yù)處理器繼續(xù)為原始版本的數(shù)據(jù)指針產(chǎn)生新數(shù)據(jù)指針值。圖9是在圖8的實(shí)施例下的用于為電子文件原始版本中的數(shù)據(jù)指針產(chǎn)生新數(shù)據(jù)指針值的流程圖808。
數(shù)據(jù)指針是指向數(shù)據(jù)單元中的一些數(shù)據(jù)的指令。接著描述此處用于描述新數(shù)據(jù)指針值的產(chǎn)生的記號(hào)。包括數(shù)據(jù)指針的指令的地址在此通常用記號(hào)“dataPointer”表示;因此,“dataPointerV1”表示原始版本中的dataPointer,而“dataPointerV2”表示新版本中的dataPointer。包括由數(shù)據(jù)指針?biāo)赶虻臄?shù)據(jù)的數(shù)據(jù)單元的開(kāi)始地址在此用“dataStartAddr”表示;因此“dataStartAddrV1”表示原始版本中的dataStartAddr,而“dataStartAddrV2”表示新版本中的dataStartAddr。
圖10是一個(gè)實(shí)施例中的原始版本V1和新版本V2的框圖,示出用于為電子文件原始版本產(chǎn)生新數(shù)據(jù)指針值的不同地址(和對(duì)應(yīng)記號(hào))。原始版本V1和新版本V2都包括代碼(文本)段和數(shù)據(jù)段。數(shù)據(jù)段包括對(duì)原始文件版本V1和新文件版本V2都是共有的共有數(shù)據(jù)單元CDU A。原始版本V1包括指向原始版本的共有數(shù)據(jù)單元CDU A中的一些數(shù)據(jù)的代碼(文本)段中的數(shù)據(jù)指針dataPointerV1,這里原始版本V1的CDU A的開(kāi)始地址是dataStartAddrV1。同樣,新版本V2包括指向新版本V2的共有數(shù)據(jù)單元CDU A中的一些數(shù)據(jù)的代碼(文本)段中的數(shù)據(jù)指針dataPointerV2,這里新版本V2的CDU A的開(kāi)始地址是dataStartAddrV2。dataStartAddr地址來(lái)自與文件的原始版本V1和新版本V2的軟件映像相關(guān)聯(lián)的映射文件。
回到圖9,在塊902,新數(shù)據(jù)指針值的產(chǎn)生通過(guò)識(shí)別原始版本中的未預(yù)處理的數(shù)據(jù)指針開(kāi)始。一個(gè)實(shí)施例的預(yù)處理器用原始版本中的指針值(dataPointerV1)連同包括dataPointerV1所指向數(shù)據(jù)的數(shù)據(jù)單元的開(kāi)始地址(dataStartAddrV1)及它在新版本中的對(duì)應(yīng)數(shù)據(jù)單元的開(kāi)始地址(dataStartAddrV2)一起產(chǎn)生新版本中的數(shù)據(jù)指針值(dataPointerV2),如下所述。這是通過(guò)在塊904通過(guò)訪問(wèn)HintTable以識(shí)別k、即原始版本中的一數(shù)據(jù)單元來(lái)完成的,所述數(shù)據(jù)單元包括由dataPointerV1指向的數(shù)據(jù)。在塊906,利用對(duì)數(shù)據(jù)單元k的識(shí)別,預(yù)處理器從HintTable中讀取dataStartAddrV1和dataStartAddrV2。
在塊908,預(yù)處理器隨后產(chǎn)生數(shù)據(jù)指針值(dataPointerV2)以替換dataPointerV1,如下所述。一個(gè)實(shí)施例的預(yù)處理器在有關(guān)數(shù)據(jù)單元的至少兩個(gè)附加假設(shè)下操作,這里稱為第三和第四假設(shè),但并不限制于此。第三假設(shè)假定在原始版本和新版本中具有相同大小的共有數(shù)據(jù)單元在原始和新版本上具有相同數(shù)據(jù)結(jié)構(gòu),這里所述數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)變量的類型、大小和順序。第四假設(shè)假定對(duì)滿足第三假設(shè)的共有數(shù)據(jù)單元中的任何數(shù)據(jù)指針,不變式在原始和新版本上通常保持如下
dataPointerV1-dataStartAddrV1=dataPointerV2-dataStartAddrV2。
因此,根據(jù)第三和第四假設(shè),在塊908,預(yù)處理器為新數(shù)據(jù)單元產(chǎn)生新數(shù)據(jù)指針值(dataPointerV2),如dataPointery2=dataPointerV1+(dataStartAddrV2-dataStartAddrV1),在此稱為公式2。
在塊910,利用數(shù)據(jù)指針值datPointerV2,預(yù)處理器在原始版本中的對(duì)應(yīng)地址處用dataPointerV2替換dataPointerV1。在塊912,預(yù)處理器隨后判定是否有原始數(shù)據(jù)單元的任何數(shù)據(jù)指針仍然是未預(yù)處理。
在塊912,當(dāng)原始數(shù)據(jù)單元的數(shù)據(jù)指針仍然是未預(yù)處理,預(yù)處理器返回以從原始數(shù)據(jù)單元讀取另一個(gè)或可替換地下一個(gè)未預(yù)處理的數(shù)據(jù)指針,且如上所述繼續(xù)進(jìn)行預(yù)處理。如在塊912所判定的,當(dāng)原始數(shù)據(jù)單元的所有數(shù)據(jù)指針都預(yù)處理了,在塊914,預(yù)處理器輸出包括新文件的近似版本的原始文件的修改版本。
如以上在HintTable中所用的共有函數(shù)單元及共有數(shù)據(jù)單元的開(kāi)始和結(jié)束地址共同稱為“算法提示”或“提示”,因?yàn)樗鼈冇糜谂卸ú煌募姹鹃g的共有單元的相對(duì)位置。如此,所述提示被傳送給接收差別或增量文件以用于從增量文件和原始文件恢復(fù)新文件版本的客戶設(shè)備,如上所述。由于傳送提示通過(guò)與用于傳送增量文件和其他信息到客戶設(shè)備相同的低帶寬通道來(lái)執(zhí)行,一個(gè)實(shí)施例的預(yù)處理器執(zhí)行提示合并以合并HintTable的共有函數(shù)單元和共有數(shù)據(jù)單元而不影響預(yù)處理算法或例程的性能。該合并減小了包括提示的文件大小并因此減小了傳送給客戶設(shè)備的信息量。
利用由上述預(yù)處理代碼(文本)段所得到的共有函數(shù)單元,并返回到圖4,在塊404,在提示合并例程或算法的控制下的預(yù)處理器合并共有函數(shù)單元以形成共有函數(shù)塊。圖11是在圖4的實(shí)施例下的共有函數(shù)單元的提示合并404的流程圖。
同樣,在塊406,預(yù)處理器使用由上述數(shù)據(jù)段的預(yù)處理所產(chǎn)生的共有數(shù)據(jù)單元來(lái)合并共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。圖12是在圖4的實(shí)施例下的共有數(shù)據(jù)單元的提示合并406的流程圖。下面依次描述共有函數(shù)單元和共有數(shù)據(jù)單元的提示合并。
盡管為了清楚在此分開(kāi)描述了共有函數(shù)單元和共有數(shù)據(jù)單元的提示合并,所述實(shí)施例可以按任意順序和任意組合來(lái)執(zhí)行與合并相關(guān)聯(lián)的操作。有關(guān)記號(hào),函數(shù)或數(shù)據(jù)單元的開(kāi)始地址在此通常用如上所述的記號(hào)“startAddress”表示;因此,“startAddressV1”表示原始函數(shù)或數(shù)據(jù)單元的開(kāi)始地址,而“startAddressV2”表示在新函數(shù)或數(shù)據(jù)單元中的對(duì)應(yīng)開(kāi)始地址。同樣,函數(shù)或數(shù)據(jù)單元的結(jié)束地址在此通常用記號(hào)“endAddress”表示;因此,“endAddressV1”表示原始函數(shù)或數(shù)據(jù)單元的結(jié)束地址,而“endAddressV2”表示在新函數(shù)或數(shù)據(jù)單元中的對(duì)應(yīng)結(jié)束地址。
如以上參考圖5所述的,產(chǎn)生共有函數(shù)單元的HintTable,其包括組合在一張表中的共有函數(shù)單元的信息,所述信息包括索引值、原始文件版本V1的原始函數(shù)單元的開(kāi)始和結(jié)束地址以及新文件版本V2的新函數(shù)單元的開(kāi)始和結(jié)束地址。上面提供的HintTable用作描述共有函數(shù)單元的提示合并的例子,但所述實(shí)施例并不限制于此

參考圖4和圖11以及該HintTable,在塊1102,共有函數(shù)單元的提示合并404的操作開(kāi)始于預(yù)處理器將HintTable的所有n個(gè)記錄標(biāo)記為可用、設(shè)置計(jì)數(shù)器j=1以及從關(guān)聯(lián)的HintTable讀取函數(shù)單元j和單元(j+1)的原始和新版本。在此例中,單元j和單元(j+1)的值對(duì)應(yīng)于提示表的索引值,這里j=1,2,…(n-1),但并不限制于此。此外,j的值初始地設(shè)置為等于1且隨后在進(jìn)行提示合并404和處理了共有單元時(shí)用本領(lǐng)域公知的方法來(lái)增加。所以,在塊1102,讀取與索引值1和2(j+1=1+1=2)關(guān)聯(lián)的共有函數(shù)單元的信息。
在塊1104,預(yù)處理器判定共有函數(shù)單元j的原始版本V1和新版本V2的大小是否相等。該判定通過(guò)在原始版本V1和新版本V2的開(kāi)始和結(jié)束地址之間求差來(lái)完成,如endAddrV1(j)-startAddrV1(j)=endAddrV2(j)-startAddrV2(j),但并不限制于此。當(dāng)原始版本V1和新版本V2具有不同大小的文件時(shí),在塊1112,操作進(jìn)行為判定j的值是否小于量(n-1)。
當(dāng)原始版本V1和新版本V2具有相同大小時(shí),在塊1116,預(yù)處理器判定共有函數(shù)單元j的原始版本V1的結(jié)束地址是否與共有函數(shù)單元(j+1)的原始版本V1的開(kāi)始地址相同,如endAddrV1(j)=startAddrV1(j+1),但并不限制于此。當(dāng)共有函數(shù)單元j的原始版本V1的結(jié)束地址與共有函數(shù)單元(j+1)的原始版本V1的開(kāi)始地址不同時(shí),在塊1112,操作進(jìn)行為判定j的值是否小于量(n-1)。
當(dāng)共有函數(shù)單元j的原始版本V1的結(jié)束地址與共有函數(shù)單元(j+1)的原始版本V1的開(kāi)始地址相同時(shí),在塊1108,預(yù)處理器判定共有函數(shù)單元j的新版本V2的結(jié)束地址是否與共有函數(shù)單元(j+1)的新版本V2的開(kāi)始地址相同,如endAddrV2(j)=startAddrV2(j+1),但并不限制于此。當(dāng)共有函數(shù)單元j的新版本V2的結(jié)束地址與共有函數(shù)單元(j+1)的新版本V2的開(kāi)始地址不同時(shí),在塊1112,操作進(jìn)行為判定j的值是否小于量(n-1)。
當(dāng)共有函數(shù)單元j的新版本V2的結(jié)束地址與共有函數(shù)單元(j+1)的新版本V2的開(kāi)始地址相同時(shí),在塊1110,預(yù)處理器合并共有函數(shù)單元j和共有單元(j+1)的信息以形成共有函數(shù)塊來(lái)替換單元(j+1)的記錄,然后把單元j的記錄標(biāo)記為不可用。在塊1112,操作然后進(jìn)行為判定j的值是否小于量(n-1)。
在塊1112,預(yù)處理器判定j的值是否小于量(n-1)。當(dāng)j的值等于量(n-1),表明所有函數(shù)單元都已預(yù)處理,在塊1116,操作進(jìn)行為輸出所有可用的記錄作為共有函數(shù)塊,并且操作返回。當(dāng)j的值小于量(n-1),表明函數(shù)單元仍然是未預(yù)處理,在塊1114,j的值增加,并且在塊1102,操作進(jìn)行為讀取對(duì)應(yīng)于j的新值的共有函數(shù)單元的信息。如上所述繼續(xù)進(jìn)行預(yù)處理。
下面參考圖11和HintTable說(shuō)明包括共有函數(shù)單元的提示合并的例子。操作開(kāi)始于預(yù)處理器把所有三個(gè)記錄標(biāo)記為可用并從HintTAble中讀取函數(shù)單元1和2的原始和新版本。然后預(yù)處理器判定共有函數(shù)單元1的原始版本V1和新版本V2是否大小相等。該判定通過(guò)在原始版本V1和新版本V2的開(kāi)始和結(jié)束地址之間求差來(lái)完成,如endAddrV1(1)-startAddrV1(1)=endAddrV2(1)-startAddrV2(1)。
用來(lái)自HintTable的真實(shí)值代替產(chǎn)生(0x8062)-(0x8040)=(0x8082)-(0x8060)。
由于原始版本V1和新版本V2大小相等,預(yù)處理器接下來(lái)判定共有函數(shù)單元1的原始版本V1的結(jié)束地址是否與共有函數(shù)單元2的原始版本V1的開(kāi)始地址相同,如endAddrV1(1)=startAddrV1(2)。
用來(lái)自HintTable的真實(shí)值代替產(chǎn)生共有函數(shù)單元1的原始版本V1的結(jié)束地址與共有函數(shù)單元2的原始版本V1的開(kāi)始地址相同的判定,如(0x8062)=(0x8062)。
因?yàn)楣灿泻瘮?shù)單元1的原始版本V1的結(jié)束地址與共有函數(shù)單元2的原始版本V1的開(kāi)始地址相同,接下來(lái)判定共有函數(shù)單元1的新版本V2的結(jié)束地址是否與共有函數(shù)單元2的新版本V2的開(kāi)始地址相同,如endAddrV2(1)=startAddrV2(2)。
用來(lái)自HintTable的真實(shí)值代替產(chǎn)生共有函數(shù)單元1的新版本V2的結(jié)束地址與共有函數(shù)單元2的新版本V2的開(kāi)始地址相同的判定,如(0x8082)=(0x8082)。
響應(yīng)于共有函數(shù)單元1的新版本V2的結(jié)束地址與共有函數(shù)單元2的新版本V2的開(kāi)始地址相同的判定,預(yù)處理器合并共有函數(shù)單元1和共有函數(shù)單元2的信息以形成共有函數(shù)塊如下

繼續(xù)該例子,預(yù)處理器接下來(lái)從HintTable讀取函數(shù)單元2和3的原始和新版本。預(yù)處理器判定共有函數(shù)單元2的原始版本V1和新版本V2是否大小相等。該判定通過(guò)在原始版本V1和新版本V2的開(kāi)始和結(jié)束地址之間求差來(lái)完成,如endAddrV1(2)-startAddrV1(2)=endAddrV2(2)-startAddrV2(2)。
用來(lái)自HintTable的真實(shí)值代替產(chǎn)生(0x8080)-(0x8040)=(0x80a0)-(0x8060),表示原始版本V1和新版本V2大小相等。
預(yù)處理器接下來(lái)判定共有函數(shù)單元2的原始版本V1的結(jié)束地址是否與共有函數(shù)單元3的原始版本V1的開(kāi)始地址相同,如endAddrV1(2)=startAddrV1(3)。
用來(lái)自HintTable的真實(shí)值代替產(chǎn)生判定共有函數(shù)單元2的原始版本V1的結(jié)束地址與共有函數(shù)單元3的原始版本V1的開(kāi)始地址不同的判定,如(0x8080)不等于(0x8086)。
因?yàn)楣灿泻瘮?shù)單元2的原始版本V1的結(jié)束地址與共有函數(shù)單元3的原始版本V1的開(kāi)始地址不同,操作返回并且共有函數(shù)單元2和3不合并以形成共有函數(shù)塊。
合并共有函數(shù)單元之后,上面例子的HintTable的可用記錄如下輸出

一個(gè)實(shí)施例的預(yù)處理器使用與上述關(guān)于共有函數(shù)單元的類似的方式來(lái)執(zhí)行共有數(shù)據(jù)單元的提示合并。參考圖4和圖12,共有數(shù)據(jù)單元的提示合并406的操作開(kāi)始于預(yù)處理器標(biāo)記HintTable的所有n個(gè)記錄、設(shè)置計(jì)數(shù)器j=1以及在塊1202從關(guān)聯(lián)的HintTable讀取數(shù)據(jù)單元j和(j+1)的原始和新版本。單元j和單元(j+1)的值對(duì)應(yīng)于提示表的索引值,這里j=1,2,…(n-1),但并不限制于此。
在塊1204,預(yù)處理器判定共有數(shù)據(jù)單元j的原始版本V1和新版本V2的大小是否相等。該判定通過(guò)在原始版本V1和新版本V2的開(kāi)始和結(jié)束地址之間求差來(lái)完成,如endAddrV1(j)-startAddrV1(j)=endAddrV2(j)-startAddrV2(j),但并不限制于此。當(dāng)原始版本V1和新版本V2具有不同大小的文件時(shí),在塊1212,操作進(jìn)行為判定j的值是否小于量(n-1)。
當(dāng)原始版本V1和新版本V2大小相等時(shí),在塊1206,預(yù)處理器判定共有數(shù)據(jù)單元j的原始版本V1的結(jié)束地址是否與共有數(shù)據(jù)單元(j+1)的原始版本V1的開(kāi)始地址相同,如endAddrV1(j)=startAddrV1(j+1),但并不限制于此。當(dāng)共有數(shù)據(jù)單元j的原始版本V1的結(jié)束地址與共有數(shù)據(jù)單元(j+1)的原始版本V1的開(kāi)始地址不同時(shí),在塊1212,操作進(jìn)行為判定j的值是否小于量(n-1)。
當(dāng)共有數(shù)據(jù)單元j的原始版本V1的結(jié)束地址與共有數(shù)據(jù)單元(j+1)的原始版本V1的開(kāi)始地址相同時(shí),在塊1208,預(yù)處理器判定共有數(shù)據(jù)單元j的新版本V2的結(jié)束地址是否與共有數(shù)據(jù)單元(j+1)的新版本V2的開(kāi)始地址相同,如endAddrV2(j)=startAddrV2(j+1),但并不限制于此。當(dāng)共有數(shù)據(jù)單元j的新版本V2的結(jié)束地址與共有數(shù)據(jù)單元(j+1)的新版本V2的開(kāi)始地址不同時(shí),在塊1212,操作進(jìn)行為判定j的值是否小于量(n-1)。
當(dāng)共有數(shù)據(jù)單元j的新版本V2的結(jié)束地址與共有數(shù)據(jù)單元(j+1)的新版本V2的開(kāi)始地址相同時(shí),在塊1210,預(yù)處理器合并共有數(shù)據(jù)單元j和共有數(shù)據(jù)單元(j+1)的信息以形成共有數(shù)據(jù)塊來(lái)替換單元(j+1)的記錄,然后把單元j的記錄標(biāo)記為不可用。在塊1212,操作進(jìn)行為判定j的值是否小于量(n-1)。
在塊1212,預(yù)處理器判定j的值是否小于量(n-1)。當(dāng)j的值等于量(n-1),表明所有數(shù)據(jù)單元都已預(yù)處理,在塊1216,操作進(jìn)行為輸出HintTable中的可用記錄作為共有數(shù)據(jù)塊,并且操作返回。當(dāng)j的值小于量(n-1),表明數(shù)據(jù)單元未被預(yù)處理,在塊1214,j的值增加,并且在塊1202,操作進(jìn)行為讀取對(duì)應(yīng)于j的新值的共有數(shù)據(jù)單元的信息。如上所述繼續(xù)進(jìn)行預(yù)處理。
所述用于預(yù)處理電子文件的不同版本的系統(tǒng)和方法可應(yīng)用于使用任意數(shù)量的指令架構(gòu)的任意數(shù)量的處理和/或基于處理器的系統(tǒng)的軟件和可執(zhí)行文件。例如,此處的系統(tǒng)和方法可用于ARM架構(gòu),如由D.Jagger和D.Seal的“ARM架構(gòu)參考手冊(cè)”第二版所述。ARM架構(gòu)是基于16/32位嵌入式精簡(jiǎn)指令集計(jì)算機(jī)(RISC)核心的微處理器架構(gòu),并引入Thumb16位指令集。當(dāng)用在ARM架構(gòu)中時(shí),例如,以上提及的可計(jì)算指令將包括ARM/Thumb指令集的“利用鏈接分支(BL)”和“利用鏈接分支以及將模式改變?yōu)锳RM/Thumb(BLX)”指令。此外,以上提及的數(shù)據(jù)指針包括ARM/Thumb指令集的DCD指令。
作為使用上述預(yù)處理的設(shè)備和/或系統(tǒng)的例子,接收和使用增量文件的計(jì)算設(shè)備可以是掌控更新所需的對(duì)應(yīng)軟件應(yīng)用的客戶設(shè)備,例如蜂窩電話、移動(dòng)電子設(shè)備、移動(dòng)通信設(shè)備、個(gè)人數(shù)字助理以及其他基于處理器的設(shè)備。通過(guò)使運(yùn)營(yíng)商和設(shè)備制造商能夠經(jīng)由他們的無(wú)線基礎(chǔ)設(shè)施有效地發(fā)布電子文件內(nèi)容和應(yīng)用,對(duì)范圍從固件到嵌入式應(yīng)用的所有移動(dòng)設(shè)備軟件提供這種支持。
得益于上述預(yù)處理的系統(tǒng)的另一例子包括使用有線串行連接將增量文件從掌控文件差別生成器的設(shè)備傳送到掌控文件更新生成器的設(shè)備的系統(tǒng)。這些系統(tǒng)典型地具有低的傳送速率,并且因?yàn)閭魉退俾实?,減小增量文件大小是一種實(shí)現(xiàn)較快傳送時(shí)間的途徑。
得益于使用預(yù)處理的系統(tǒng)的又一例子包括使用無(wú)線電通信將增量文件從掌控文件差別生成器的設(shè)備傳送到運(yùn)行文件更新生成器的設(shè)備的系統(tǒng)。在經(jīng)受與無(wú)線連接相關(guān)的低可靠性的同時(shí),這些系統(tǒng)也具有低的傳送速率。在這些系統(tǒng)中使用較小的增量文件提供了幾個(gè)優(yōu)點(diǎn)。例如,較小的文件大小導(dǎo)致較快的增量文件傳送時(shí)間。較快的傳送時(shí)間在為設(shè)備用戶節(jié)約時(shí)間的同時(shí)也減少了將錯(cuò)誤引入增量文件中的機(jī)會(huì),從而提高了系統(tǒng)可靠性。而且,利用蜂窩通信,減少的傳送時(shí)間造成為典型地按分鐘為服務(wù)付費(fèi)的消費(fèi)者節(jié)約了成本。
作為另一優(yōu)點(diǎn),較小的增量文件減小了傳送增量文件到客戶設(shè)備所需的帶寬。減小的帶寬使得通過(guò)分配的通道支持更多客戶設(shè)備。如同減少的傳送時(shí)間,這也導(dǎo)致為無(wú)線服務(wù)提供商減少了運(yùn)營(yíng)成本。
用于預(yù)處理文件的原始和新版本作為在原始和新文件之間產(chǎn)生的差別文件的一部分的上述系統(tǒng)包括用于產(chǎn)生差別文件的第一設(shè)備,以及接收差別文件并用差別文件在第二設(shè)備中產(chǎn)生新文件版本的第二設(shè)備。第一設(shè)備包括減小差別文件大小的至少一個(gè)組件,所述減小通過(guò)以下進(jìn)行對(duì)應(yīng)于由代碼行刪除、代碼行添加以及代碼行修改的至少一種所引起的地址偏移來(lái)識(shí)別原始和新版本之間的差別;通過(guò)使用原始版本的文本段的地址與新版本的對(duì)應(yīng)文本段的地址之間的至少一種關(guān)系來(lái)修改原始版本的指令的目標(biāo)地址,來(lái)去除原始和新版本之間所共有的文本段中的所識(shí)別差別;以及產(chǎn)生原始文件的修改版本,所述修改版本包括具有經(jīng)修改目標(biāo)地址的指令。
在一個(gè)實(shí)施例中,去除原始和新版本之間所共有的文本段中的所識(shí)別差別進(jìn)一步包括識(shí)別原始和新版本間所共有的第一和第二文本段,其中原始版本中的第一文本段包括第一可計(jì)算指令而新版本中第二文本段包括第二可計(jì)算指令;識(shí)別原始和新版本間所共有的第三和第四文本段,其中原始版本中的第三文本段包括對(duì)應(yīng)第一可計(jì)算指令的第一目標(biāo)地址,其中新版本中的第四文本段包括對(duì)應(yīng)第二可計(jì)算指令的第二目標(biāo)地址;通過(guò)用第三和第四函數(shù)單元的開(kāi)始地址之間的第一差別及用第一和第二函數(shù)單元的開(kāi)始地址之間的第二差別修改第一指令值,來(lái)從第二可計(jì)算指令產(chǎn)生第二指令值;以及用第二指令值替換第一可計(jì)算指令的第一指令值。
文件預(yù)處理作為一個(gè)實(shí)施例的差別文件產(chǎn)生的部分進(jìn)一步包括通過(guò)修改原始版本中的數(shù)據(jù)指針值來(lái)去除包括指向原始和新版本所共有的數(shù)據(jù)段的數(shù)據(jù)指針的指令中的所識(shí)別差別,其中使用由當(dāng)前數(shù)據(jù)指針指向的原始版本中的數(shù)據(jù)段的開(kāi)始地址與新版本中的對(duì)應(yīng)數(shù)據(jù)段的開(kāi)始地址之間的差別來(lái)修改數(shù)據(jù)指針值。去除包括數(shù)據(jù)指針的指令中的所識(shí)別差別進(jìn)一步包括識(shí)別原始和新版本之間所共有的第一和第二代碼段,其中原始版本中的第一代碼段包括第一數(shù)據(jù)指針,而新版本中的第二代碼段包括第二數(shù)據(jù)指針;識(shí)別原始和新版本之間所共有的第一和第二數(shù)據(jù)單元,其中原始版本中的第一數(shù)據(jù)單元包括對(duì)應(yīng)第一數(shù)據(jù)指針的第一目標(biāo)地址,其中新版本中的第二數(shù)據(jù)單元包括對(duì)應(yīng)第二數(shù)據(jù)指針的第二目標(biāo)地址;通過(guò)用第一和第二數(shù)據(jù)單元的開(kāi)始地址間的差別修改第一指針值,來(lái)從第二數(shù)據(jù)指針產(chǎn)生第二數(shù)據(jù)指針值;以及用第二數(shù)據(jù)指針值替換第一數(shù)據(jù)指針的第一數(shù)據(jù)指針值。
一個(gè)實(shí)施例的系統(tǒng)中的第一設(shè)備用至少一種耦合來(lái)傳送差別文件到第二設(shè)備,其中至少一種耦合是無(wú)線耦合、有線耦合以及混合無(wú)線/有線耦合中的至少一種。
一個(gè)實(shí)施例的系統(tǒng)中的第二設(shè)備包括至少一個(gè)基于處理器的設(shè)備,如個(gè)人計(jì)算機(jī)、便攜式計(jì)算設(shè)備、蜂窩電話、便攜式通信設(shè)備以及個(gè)人數(shù)字助理。
上述用于預(yù)處理文件的原始和新版本作為在原始和新版本之間的差別文件產(chǎn)生的部分的系統(tǒng)包括用于產(chǎn)生差別文件的設(shè)備。該設(shè)備包括用于接收電子文件原始版本和新版本的裝置;用于識(shí)別原始和新版本所共有的代碼單元的裝置;用于識(shí)別代碼單元所共有的指令的裝置,其中所述指令包括指示對(duì)相應(yīng)文件的另一部分處理的指令值;用于從原始版本的第一指令產(chǎn)生第一指令值的裝置;用于從新版本的第二指令產(chǎn)生第二指令值的裝置,其中第二指令對(duì)應(yīng)于第一指令;用于用第二指令值替換第一指令的第一指令值的裝置;以及用于產(chǎn)生包括具有第二指令值的第一指令的原始文件的修改版本的裝置。
上述用于預(yù)處理文件的原始和新版本作為原始和新版本之間的差別文件產(chǎn)生的部分的系統(tǒng)包括相關(guān)的方法。這些方法當(dāng)中有一種方法用于減小包括電子文件的原始版本和新版本之間的經(jīng)編碼差別的差別文件的大小。一個(gè)實(shí)施例的方法包括對(duì)應(yīng)于由代碼行刪除、代碼行添加以及代碼行修改中的至少一種引起的地址偏移,來(lái)識(shí)別原始和新版本之間的差別;通過(guò)使用原始版本的文本段的地址與新版本的對(duì)應(yīng)文本段的地址之間的至少一種關(guān)系修改原始版本的指令目標(biāo)地址,來(lái)去除原始和新版本所共有的文本段中的所識(shí)別差別;以及產(chǎn)生包括具有經(jīng)修改目標(biāo)地址的指令的原始文件的修改版本。
去除共有文本段中的所識(shí)別差別的方法,進(jìn)一步包括識(shí)別原始和新版本間所共有的第一和第二文本段,其中原始版本中第一文本段包括第一可計(jì)算指令,而新版本中第二文本段包括第二可計(jì)算指令;識(shí)別原始和新版本間所共有的第三和第四文本段,其中原始版本中的第三文本段包括對(duì)應(yīng)第一可計(jì)算指令的第一目標(biāo)地址,其中新版本中的第四文本段包括對(duì)應(yīng)第二可計(jì)算指令的第二目標(biāo)地址;通過(guò)用第三和第四函數(shù)單元的開(kāi)始地址之間的第一差別以及用第一和第二函數(shù)單元的開(kāi)始地址之間的第二差別修改第一指令值,來(lái)從第二可計(jì)算指令產(chǎn)生第二指令值;以及用第二指令值替換第一可計(jì)算指令的第一指令值。
一個(gè)實(shí)施例的方法進(jìn)一步包括通過(guò)修改原始版本中的數(shù)據(jù)指針值來(lái)去除包括指向原始和新版本所共有的數(shù)據(jù)段的數(shù)據(jù)指針的指令中的所識(shí)別差別,其中使用由當(dāng)前數(shù)據(jù)指針?biāo)赶虻脑及姹局械臄?shù)據(jù)段的開(kāi)始地址與新版本中的對(duì)應(yīng)數(shù)據(jù)段的開(kāi)始地址之間的差別來(lái)修改數(shù)據(jù)指針值。
去除包括數(shù)據(jù)指針的指令中的所識(shí)別差別進(jìn)一步包括識(shí)別原始和新版本之間所共有的第一和第二代碼段,其中原始版本中的第一代碼段包括第一數(shù)據(jù)指針,而新版本中的第二代碼段包括第二數(shù)據(jù)指針;識(shí)別原始和新版本之間所共有的第一和第二數(shù)據(jù)單元,其中原始版本中的第一數(shù)據(jù)單元包括對(duì)應(yīng)第一數(shù)據(jù)指針的第一目標(biāo)地址,其中新版本中的第二數(shù)據(jù)單元包括對(duì)應(yīng)第二數(shù)據(jù)指針的第二目標(biāo)地址;從第二數(shù)據(jù)指針產(chǎn)生第二數(shù)據(jù)指針值;以及用第二數(shù)據(jù)指針值替換第一數(shù)據(jù)指針的第一數(shù)據(jù)指針值。一個(gè)實(shí)施例的第二數(shù)據(jù)指針值的產(chǎn)生包括用第一和第二數(shù)據(jù)單元的開(kāi)始地址之間的差別來(lái)修改第一數(shù)據(jù)指針值。
一個(gè)實(shí)施例的方法進(jìn)一步包括產(chǎn)生包括具有經(jīng)修改數(shù)據(jù)指針的指令的原始文件的修改版本。
一個(gè)實(shí)施例的方法進(jìn)一步包括合并共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。一個(gè)實(shí)施例的合并包括當(dāng)原始版本的第一數(shù)據(jù)單元與新版本的第一數(shù)據(jù)單元大小相等、原始版本的第一數(shù)據(jù)單元的結(jié)束地址等于原始版本的第二數(shù)據(jù)單元的開(kāi)始地址以及新版本的第一數(shù)據(jù)單元的結(jié)束地址等于新版本的第二數(shù)據(jù)單元的開(kāi)始地址時(shí),組合原始版本的第一和第二數(shù)據(jù)單元并組合新版本的對(duì)應(yīng)第一和第二數(shù)據(jù)單元以形成共有數(shù)據(jù)塊;以及對(duì)另外的可合并數(shù)據(jù)單元重復(fù)該組合操作。所述合并進(jìn)一步包括合并共有文本段以形成共有函數(shù)塊。所述合并還可包括當(dāng)原始版本的第一文本段與新版本的第一文本段大小相等、原始版本的第一文本段的結(jié)束地址等于原始版本的第二文本段的開(kāi)始地址以及新版本的第一文本段的結(jié)束地址等于新版本的第二文本段的開(kāi)始地址時(shí),組合原始版本的第一和第二文本段并組合相應(yīng)新版本的對(duì)應(yīng)第一和第二文本段以形成共有函數(shù)塊;以及對(duì)另外的可合并文本段重復(fù)該組合操作。
上述用于預(yù)處理文件的原始和新版本作為在原始和新版本之間的差別文件產(chǎn)生的部分的系統(tǒng)包括相關(guān)的方法。這些方法當(dāng)中有一種方法用于執(zhí)行文件差分,包括接收電子文件的原始版本和新版本;識(shí)別原始和新版本所共有的代碼單元;識(shí)別代碼單元所共有的指令,其中所述指令包括有關(guān)對(duì)應(yīng)文件的另一部分的指令值;從原始版本的第一指令解碼第一指令值;從新版本的第二指令產(chǎn)生第二指令值,其中第二指令對(duì)應(yīng)于第一指令;用第二指令值替換第一指令的第一指令值;以及產(chǎn)生包括具有第二指令值的第一指令的原始文件的修改版本。
一個(gè)實(shí)施例的方法進(jìn)一步包括從相關(guān)的映射文件中提取共有代碼單元,其中所述共有代碼單元包括共有函數(shù)單元和共有數(shù)據(jù)單元。
一個(gè)實(shí)施例的方法進(jìn)一步包括合并代碼單元的共有函數(shù)單元以形成共有函數(shù)塊。一個(gè)實(shí)施例的合并包括當(dāng)原始版本的第一函數(shù)單元與新版本的第一函數(shù)單元大小相等、原始版本的第一函數(shù)單元的結(jié)束地址等于原始版本的第二函數(shù)單元的開(kāi)始地址以及新版本的第一函數(shù)單元的結(jié)束地址等于新版本的第二函數(shù)單元的開(kāi)始地址時(shí),組合原始版本的第一和第二函數(shù)單元并組合新版本的對(duì)應(yīng)第一和第二函數(shù)單元以形成共有函數(shù)塊;以及對(duì)另外的可合并函數(shù)單元重復(fù)該組合操作。一個(gè)實(shí)施例的方法進(jìn)一步包括編碼所述共有函數(shù)塊。
一個(gè)實(shí)施例的方法進(jìn)一步包括合并代碼單元的共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。一個(gè)實(shí)施例的合并包括當(dāng)原始版本的第一數(shù)據(jù)單元與新版本的第一數(shù)據(jù)單元大小相等、原始版本的第一數(shù)據(jù)單元的結(jié)束地址等于原始版本的第二數(shù)據(jù)單元的開(kāi)始地址以及新版本的第一數(shù)據(jù)單元的結(jié)束地址等于新版本的第二數(shù)據(jù)單元的開(kāi)始地址時(shí),組合原始版本的第一和第二數(shù)據(jù)單元并組合新版本的對(duì)應(yīng)第一和第二數(shù)據(jù)單元以形成共有數(shù)據(jù)塊;以及對(duì)另外的可合并數(shù)據(jù)單元重復(fù)該組合操作。所述方法可以進(jìn)一步包括編碼共有數(shù)據(jù)塊。
在一個(gè)實(shí)施例的方法中,原始和新版本所共有的代碼單元是共有函數(shù)單元,其中第一指令包括第一可計(jì)算指令,而第二指令包括第二可計(jì)算指令,其中產(chǎn)生第二指令值包括用包括目標(biāo)地址的原始和新版本的共有函數(shù)單元的開(kāi)始地址之間的第一差別以及用包括第一和第二可計(jì)算指令的共有函數(shù)單元的開(kāi)始地址之間的第二差別來(lái)修改第一指令值。
一個(gè)實(shí)施例的方法的代碼單元包括函數(shù)單元。在這些方法中,產(chǎn)生第一指令值包括產(chǎn)生第一可計(jì)算指令的當(dāng)前指令地址與第一可計(jì)算指令的目標(biāo)地址之間的差別。產(chǎn)生第二指令值包括產(chǎn)生第一可計(jì)算指令的當(dāng)前指令地址與第一可計(jì)算指令的目標(biāo)地址之間的差別;產(chǎn)生新版本的第一共有函數(shù)單元的開(kāi)始地址與原始版本的對(duì)應(yīng)第一共有函數(shù)單元的開(kāi)始地址之間的差別;以及產(chǎn)生新版本的第二共有函數(shù)單元的開(kāi)始地址與原始版本的對(duì)應(yīng)第二共有函數(shù)單元的開(kāi)始地址之間的差別。
在一個(gè)實(shí)施例的一些方法中,代碼單元包括數(shù)據(jù)單元而指令包括數(shù)據(jù)指針。
在一個(gè)實(shí)施例的方法中,原始和新版本所共有的代碼單元是共有數(shù)據(jù)單元,其中第一指令包括第一數(shù)據(jù)指針而第二指令包括第二數(shù)據(jù)指針,其中第一指令值包括第一數(shù)據(jù)指針值而第二指令值包括第二數(shù)據(jù)指針值,其中產(chǎn)生第二指令值包括通過(guò)用第一和第二數(shù)據(jù)單元的開(kāi)始地址之間的差別修改第一數(shù)據(jù)指針值來(lái)產(chǎn)生第二數(shù)據(jù)指針值。
一個(gè)實(shí)施例的方法進(jìn)一步包括在原始文件的修改版本與新文件之間執(zhí)行文件差分并產(chǎn)生差別文件。該方法還進(jìn)一步包括傳送差別文件到便攜式處理系統(tǒng);以及用差別文件在便攜式處理系統(tǒng)中產(chǎn)生新文件版本。一個(gè)實(shí)施例的方法還進(jìn)一步包括合并代碼單元的共有函數(shù)單元以形成共有函數(shù)塊;合并代碼單元的共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊;以及編碼共有函數(shù)塊和共有數(shù)據(jù)塊以用于在便攜式處理系統(tǒng)中產(chǎn)生新文件版本。
上述用于預(yù)處理文件的原始和新版本作為原始和新版本之間的差別文件產(chǎn)生的部分的系統(tǒng)還包括附加的相關(guān)的方法。這些方法當(dāng)中有一種方法用于判定電子文件之間的差別,包括接收電子文件的原始版本和新版本;識(shí)別原始和新版本之間所共有的第一和第二函數(shù)單元,其中原始版本中的第一函數(shù)單元包括第一可計(jì)算指令而新版本中的第二函數(shù)單元包括第二可計(jì)算指令;識(shí)別原始和新版本之間所共有的第三和第四函數(shù)單元,其中原始版本中的第三函數(shù)單元包括對(duì)應(yīng)第一可計(jì)算指令的第一目標(biāo)地址,其中新版本中的第四函數(shù)單元包括對(duì)應(yīng)第二可計(jì)算指令的第二目標(biāo)地址;從第二可計(jì)算指令產(chǎn)生第二指令值;用第二指令值替換第一可計(jì)算指令的第一指令值;以及產(chǎn)生包括具有第二指令值的第一指令的原始文件的修改版本。
在所述方法下產(chǎn)生第二指令值包括用第三和第四函數(shù)單元的開(kāi)始地址之間的第一差別以及用第一和第二函數(shù)單元的開(kāi)始地址之間的第二差別來(lái)修改第一指令值。
一個(gè)實(shí)施例的方法進(jìn)一步包括識(shí)別原始和新版本之間所共有的第一和第二代碼段,其中原始版本中的第一代碼段包括第一數(shù)據(jù)指針而新版本中的第二代碼段包括第二數(shù)據(jù)指針;識(shí)別原始和新版本之間所共有的第一和第二數(shù)據(jù)單元,其中原始版本中的第一數(shù)據(jù)單元包括對(duì)應(yīng)第一數(shù)據(jù)指針的第一目標(biāo)地址,其中新版本中的第二數(shù)據(jù)單元包括對(duì)應(yīng)第二數(shù)據(jù)指針的第二目標(biāo)地址;從第二數(shù)據(jù)指針產(chǎn)生第二數(shù)據(jù)指針值;用第二數(shù)據(jù)指針值替換第一數(shù)據(jù)指針的第一數(shù)據(jù)指針值;以及產(chǎn)生包括具有第二數(shù)據(jù)指針值的第一數(shù)據(jù)指針的原始文件的修改版本。在一個(gè)實(shí)施例中產(chǎn)生第二數(shù)據(jù)指針值包括產(chǎn)生由當(dāng)前數(shù)據(jù)指針指向的原始版本中的數(shù)據(jù)段的開(kāi)始地址與新版本中的對(duì)應(yīng)數(shù)據(jù)段的開(kāi)始地址之間的差別。
一個(gè)實(shí)施例的方法進(jìn)一步包括合并共有函數(shù)單元以形成共有函數(shù)塊。
一個(gè)實(shí)施例的方法進(jìn)一步包括合并共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。
一個(gè)實(shí)施例的方法進(jìn)一步包括使用原始文件的經(jīng)修改版本和新文件來(lái)產(chǎn)生差別文件。所述方法還進(jìn)一步包括傳送差別文件到便攜式處理系統(tǒng);以及用差別文件在便攜式處理系統(tǒng)中產(chǎn)生新文件版本。
上述用于預(yù)處理文件的原始和新版本作為原始和新版本之間的差別文件產(chǎn)生的部分的系統(tǒng)包括計(jì)算機(jī)可讀介質(zhì)。一個(gè)實(shí)施例的計(jì)算機(jī)可讀介質(zhì)包括可執(zhí)行指令,當(dāng)所述指令在處理系統(tǒng)中執(zhí)行時(shí),通過(guò)以下減小了包括電子文件的原始版本和新版本之間的代碼差別的差別文件大小對(duì)應(yīng)于由代碼行刪除、代碼行添加以及代碼行修改中的至少一種所引起的地址偏移,來(lái)識(shí)別原始和新版本之間的差別;通過(guò)使用原始版本的文本段的地址與新版本的對(duì)應(yīng)文本段的地址之間的至少一種關(guān)系修改原始版本的指令目標(biāo)地址,來(lái)去除原始和新版本所共有的文本段中的所識(shí)別差別;以及產(chǎn)生包括具有經(jīng)修改目標(biāo)地址的指令的原始文件的修改版本。
本發(fā)明的各方面可以實(shí)現(xiàn)為編程到多種電路中的功能性,所述電路包括可編程邏輯器件(PLD)如現(xiàn)場(chǎng)可編程門陣列(FPGA)、可編程陣列邏輯(PAL)器件、電可編程邏輯和存儲(chǔ)器器件及標(biāo)準(zhǔn)的基于蜂窩的器件,以及專用集成電路(ASIC)。實(shí)現(xiàn)本發(fā)明的各方面的一些其他可能性包括帶存儲(chǔ)器的微控制器(如電子可擦除可編程只讀存儲(chǔ)器(EEPROM))、嵌入式微處理器、固件、軟件等等。此外,本發(fā)明的各方面可以在具有基于軟件的電路仿真、離散邏輯(順序的和組合的)、定制器件、模糊(神經(jīng)系統(tǒng)的)邏輯、量子器件以及任意以上器件類型的混合的微處理器中實(shí)施。當(dāng)然基礎(chǔ)的器件技術(shù)可以多種組成類型提供,例如象互補(bǔ)金屬氧化物半導(dǎo)體(CMOS)的金屬氧化物半導(dǎo)體場(chǎng)效應(yīng)晶體管(MOSFET)技術(shù)、象發(fā)射極耦合邏輯(ECL)的雙極技術(shù)、聚合物技術(shù)(例如硅共軛聚合物和金屬共軛聚合物金屬結(jié)構(gòu))、混合模擬和數(shù)字等等。
除非上下文清楚地需要,否則在整個(gè)說(shuō)明和權(quán)利要求中,詞“包括”應(yīng)解釋為與排除或窮盡的意思相對(duì)的內(nèi)含的意義;即,是“包括但不限于”的意思。使用單數(shù)或復(fù)數(shù)的詞也分別包括復(fù)數(shù)和單數(shù)。另外,當(dāng)用于本申請(qǐng)中時(shí),詞“在此”、“在下面”、“以上”、“以下”以及類似詞應(yīng)指整個(gè)該申請(qǐng)而非該申請(qǐng)的任何特殊部分。當(dāng)關(guān)于兩個(gè)或更多條目的列表來(lái)使用詞“或”時(shí),該詞覆蓋所有以下對(duì)該詞的理解列表中的任何條目、列表中的所有條目以及列表中的條目的任意組合。
以上對(duì)本發(fā)明實(shí)施例的說(shuō)明不是要窮盡或把本分明限制為所公開(kāi)的精確形式。盡管為了說(shuō)明的目的在此描述了本發(fā)明的特定實(shí)施例和例子,如本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到的,在本發(fā)明的范圍內(nèi)進(jìn)行各種等效的修改是可能的。這里提供的本發(fā)明的講授可應(yīng)用于其他處理系統(tǒng)和通信系統(tǒng),而不僅用于上述的文件差分系統(tǒng)。
上述各種實(shí)施例的元素和行為可以組合以提供進(jìn)一步的實(shí)施例??梢愿鶕?jù)上述詳細(xì)說(shuō)明而對(duì)本發(fā)明進(jìn)行這些和其他的改變。
所有以上引用和美國(guó)專利及專利申請(qǐng)通過(guò)引用結(jié)合于此。如果需要,可以修改本發(fā)明的各方面,采用上述各種專利和申請(qǐng)的系統(tǒng)、功能和概念以提供本發(fā)明進(jìn)一步的實(shí)施例。
總之,在以下權(quán)利要求中,所使用的術(shù)語(yǔ)不應(yīng)理解為把本發(fā)明限制于說(shuō)明書(shū)和權(quán)利要求中所公開(kāi)的特定實(shí)施例,而應(yīng)理解為包括工作在權(quán)利要求下以提供文件差分的所有處理系統(tǒng)。相應(yīng)地,本發(fā)明不受公開(kāi)內(nèi)容所限制,而本發(fā)明的范圍應(yīng)完全由權(quán)利要求來(lái)確定。
盡管本發(fā)明的某些方面在下面以某種權(quán)利要求的形式出現(xiàn),發(fā)明人以多種權(quán)利要求形式設(shè)想了本發(fā)明的各個(gè)方面。例如,僅僅本發(fā)明的一個(gè)方面描述為在計(jì)算機(jī)可讀介質(zhì)中實(shí)施,但其他方面同樣也可以在計(jì)算機(jī)可讀介質(zhì)中實(shí)施。相應(yīng)地,發(fā)明人保留在提出申請(qǐng)之后添加附加權(quán)利要求的權(quán)利,以便為本發(fā)明的其他方面追加這樣的附加權(quán)利要求形式。
權(quán)利要求
1.一種用于更新電子文件的系統(tǒng),包括第一設(shè)備,用于產(chǎn)生包括電子文件的原始版本和新版本之間的經(jīng)編碼差別的差別文件,其中所述第一設(shè)備包括減小所述差別文件大小的至少一個(gè)組件,所述減小通過(guò)以下進(jìn)行對(duì)應(yīng)于由代碼行刪除、代碼行添加以及代碼行修改中的至少一種所引起的地址偏移,來(lái)識(shí)別所述原始和新版本之間的差別;通過(guò)使用所述原始版本的文本段的地址與所述新版本的對(duì)應(yīng)文本段的地址之間的至少一種關(guān)系而修改所述原始版本的指令目標(biāo)地址,來(lái)去除所述原始和新版本所共有的文本段中的所識(shí)別差別;產(chǎn)生包括具有所述經(jīng)修改目標(biāo)地址的指令的所述原始文件的修改版本;及第二設(shè)備,接收所述差別文件并用所述差別文件在所述第二設(shè)備中產(chǎn)生新文件版本。
2.權(quán)利要求1的系統(tǒng),其中去除進(jìn)一步包括識(shí)別所述原始和新版本間所共有的第一和第二文本段,其中所述原始版本中的第一文本段包括第一可計(jì)算指令,而所述新版本中的第二文本段包括第二可計(jì)算指令;識(shí)別所述原始和新版本間所共有的第三和第四文本段,其中所述原始版本中的第三文本段包括對(duì)應(yīng)所述第一可計(jì)算指令的第一目標(biāo)地址,其中所述新版本中的第四文本段包括對(duì)應(yīng)所述第二可計(jì)算指令的第二目標(biāo)地址;通過(guò)用第三和第四函數(shù)單元的開(kāi)始地址之間的第一差別及用第一和第二函數(shù)單元的開(kāi)始地址之間的第二差別而修改第一指令值,來(lái)從所述第二可計(jì)算指令產(chǎn)生第二指令值;以及用所述第二指令值替換所述第一可計(jì)算指令的第一指令值。
3.權(quán)利要求1的系統(tǒng),進(jìn)一步包括通過(guò)修改所述原始版本中的數(shù)據(jù)指針值來(lái)去除包括指向所述原始和新版本所共有的數(shù)據(jù)段的數(shù)據(jù)指針的指令中的所識(shí)別差別,其中使用由當(dāng)前數(shù)據(jù)指針指向的所述原始版本中的數(shù)據(jù)段的開(kāi)始地址與所述新版本中的對(duì)應(yīng)數(shù)據(jù)段的開(kāi)始地址之間的差別來(lái)修改數(shù)據(jù)指針值。
4.權(quán)利要求3的系統(tǒng),其中去除包括數(shù)據(jù)指針的指令中的所識(shí)別差別進(jìn)一步包括識(shí)別所述原始和新版本之間所共有的第一和第二代碼段,其中所述原始版本中的第一代碼段包括第一數(shù)據(jù)指針而所述新版本中的第二代碼段包括第二數(shù)據(jù)指針;識(shí)別所述原始和新版本之間所共有的第一和第二數(shù)據(jù)單元,其中所述原始版本中的第一數(shù)據(jù)單元包括對(duì)應(yīng)所述第一數(shù)據(jù)指針的第一目標(biāo)地址,其中所述新版本中的第二數(shù)據(jù)單元包括對(duì)應(yīng)所述第二數(shù)據(jù)指針的第二目標(biāo)地址;通過(guò)用所述第一和第二數(shù)據(jù)單元的開(kāi)始地址間的差別而修改第一指針值,來(lái)從所述第二數(shù)據(jù)指針產(chǎn)生第二數(shù)據(jù)指針值;以及用所述第二數(shù)據(jù)指針值替換所述第一數(shù)據(jù)指針的第一數(shù)據(jù)指針值。
5.權(quán)利要求1的系統(tǒng),其中所述第二設(shè)備包括從個(gè)人計(jì)算機(jī)、便攜式計(jì)算設(shè)備、蜂窩電話、便攜式通信設(shè)備以及個(gè)人數(shù)字助理當(dāng)中選擇的至少一種基于處理器的設(shè)備。
6.權(quán)利要求1的系統(tǒng),其中所述第一設(shè)備用至少一種耦合來(lái)傳送差別文件到所述第二設(shè)備,其中所述至少一種耦合為無(wú)線耦合、有線耦合以及混合無(wú)線/有線耦合當(dāng)中的至少一種。
7.一種用于產(chǎn)生差別文件的設(shè)備,包括用于接收電子文件的原始版本和新版本的裝置;用于識(shí)別所述原始和新版本所共有的代碼單元的裝置;用于識(shí)別所述代碼單元所共有的指令的裝置,其中所述指令包括指示處理對(duì)應(yīng)文件的另一部分的指令值;用于從所述原始版本的第一指令產(chǎn)生第一指令值的裝置;用于從所述新版本的第二指令產(chǎn)生第二指令值的裝置,其中所述第二指令對(duì)應(yīng)于所述第一指令;用于以所述第二指令值替換所述第一指令的第一指令值的裝置;以及用于產(chǎn)生包括具有所述第二指令值的第一指令的所述原始文件的修改版本的裝置。
8.一種用于減小包括電子文件的原始版本和新版本之間的經(jīng)編碼差別的差別文件的大小的方法,包括對(duì)應(yīng)于由代碼行刪除、代碼行添加以及代碼行修改中的至少一種所引起的地址偏移,來(lái)識(shí)別所述原始和新版本之間的差別;通過(guò)使用所述原始版本的文本段與所述新版本的對(duì)應(yīng)文本段的地址之間的至少一種關(guān)系而修改所述原始版本的指令的目標(biāo)地址,來(lái)去除所述原始和新版本所共有的文本段中的所識(shí)別差別;以及產(chǎn)生包括具有經(jīng)修改目標(biāo)地址的指令的所述原始文件的修改版本。
9.權(quán)利要求8的方法,其中去除進(jìn)一步包括識(shí)別所述原始和新版本間所共有的第一和第二文本段,其中所述原始版本中的第一文本段包括第一可計(jì)算指令,而所述新版本中的第二文本段包括第二可計(jì)算指令;識(shí)別所述原始和新版本間所共有的第三和第四文本段,其中所述原始版本中的第三文本段包括對(duì)應(yīng)所述第一可計(jì)算指令的第一目標(biāo)地址,其中所述新版本中的第四文本段包括對(duì)應(yīng)所述第二可計(jì)算指令的第二目標(biāo)地址;通過(guò)用第三和第四函數(shù)單元的開(kāi)始地址之間的第一差別及用第一和第二函數(shù)單元的開(kāi)始地址之間的第二差別而修改第一指令值,來(lái)從所述第二可計(jì)算指令產(chǎn)生第二指令值;以及用所述第二指令值替換所述第一可計(jì)算指令的第一指令值。
10.權(quán)利要求8的方法,進(jìn)一步包括通過(guò)修改所述原始版本中的數(shù)據(jù)指針值來(lái)去除包括指向所述原始和新版本所共有的數(shù)據(jù)段的數(shù)據(jù)指針的指令中的所識(shí)別差別,其中使用由當(dāng)前數(shù)據(jù)指針指向的所述原始版本中的數(shù)據(jù)段的開(kāi)始地址與所述新版本的對(duì)應(yīng)數(shù)據(jù)段的開(kāi)始地址之間的差別來(lái)修改數(shù)據(jù)指針值。
11.權(quán)利要求10的方法,其中去除包括數(shù)據(jù)指針的指令中的所識(shí)別差別進(jìn)一步包括識(shí)別所述原始和新版本之間所共有的第一和第二代碼段,其中所述原始版本中的第一代碼段包括第一數(shù)據(jù)指針,而所述新版本中的第二代碼段包括第二數(shù)據(jù)指針;識(shí)別所述原始和新版本之間所共有的第一和第二數(shù)據(jù)單元,其中所述原始版本中的第一數(shù)據(jù)單元包括對(duì)應(yīng)所述第一數(shù)據(jù)指針的第一目標(biāo)地址,其中所述新版本中的第二數(shù)據(jù)單元包括對(duì)應(yīng)所述第二數(shù)據(jù)指針的第二目標(biāo)地址;從所述第二數(shù)據(jù)指針產(chǎn)生第二數(shù)據(jù)指針值;以及用所述第二數(shù)據(jù)指針值替換所述第一數(shù)據(jù)指針的第一數(shù)據(jù)指針值。
12.權(quán)利要求11的方法,其中產(chǎn)生所述第二數(shù)據(jù)指針值包括用所述第一和第二數(shù)據(jù)單元的開(kāi)始地址間的差別來(lái)修改第一數(shù)據(jù)指針值。
13.權(quán)利要求10的方法,進(jìn)一步包括產(chǎn)生所述原始文件的修改版本,所述修改版本包括具有經(jīng)修改數(shù)據(jù)指針的指令。
14.權(quán)利要求10的方法,進(jìn)一步包括合并共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。
15.權(quán)利要求14的方法,其中合并包括當(dāng)所述原始版本的第一數(shù)據(jù)單元與所述新版本的第一數(shù)據(jù)單元大小相等、所述原始版本的第一數(shù)據(jù)單元的結(jié)束地址等于所述原始版本的第二數(shù)據(jù)單元的開(kāi)始地址以及所述新版本的第一數(shù)據(jù)單元的結(jié)束地址等于所述新版本的第二數(shù)據(jù)單元的開(kāi)始地址時(shí),組合所述原始版本的第一和第二數(shù)據(jù)單元并組合所述新版本的對(duì)應(yīng)第一和第二數(shù)據(jù)單元以形成共有數(shù)據(jù)塊;以及對(duì)另外的可合并數(shù)據(jù)單元重復(fù)該組合操作。
16.權(quán)利要求15的方法,進(jìn)一步包括合并共有文本段以形成共有函數(shù)塊。
17.權(quán)利要求16的方法,其中合并包括當(dāng)所述原始版本的第一文本段與所述新版本的第一文本段大小相等、所述原始版本的第一文本段的結(jié)束地址等于所述原始版本的第二文本段的開(kāi)始地址以及所述新版本的第一文本段的結(jié)束地址等于所述新版本的第二文本段的開(kāi)始地址時(shí),組合所述原始版本的第一和第二文本段并組合所述新版本的對(duì)應(yīng)第一和第二文本段以形成共有函數(shù)塊;以及對(duì)另外的可合并文本段重復(fù)該組合操作。
18.一種用于執(zhí)行文件差分的方法,包括接收電子文件的原始版本和新版本;識(shí)別所述原始和新版本所共有的代碼單元;識(shí)別所述代碼單元所共有的指令,其中所述指令包括有關(guān)對(duì)應(yīng)文件的另一部分的指令值;從所述原始版本的第一指令解碼第一指令值;從所述新版本的第二指令產(chǎn)生第二指令值,其中所述第二指令對(duì)應(yīng)于所述第一指令;用所述第二指令值替換所述第一指令的第一指令值;以及產(chǎn)生包括具有所述第二指令值的第一指令的所述原始文件的修改版本。
19.權(quán)利要求18的方法,進(jìn)一步包括從相關(guān)的映射文件中提取共有代碼單元,其中所述共有代碼單元包括共有函數(shù)單元和共有數(shù)據(jù)單元。
20.權(quán)利要求18的方法,進(jìn)一步包括合并所述代碼單元的共有函數(shù)單元以形成共有函數(shù)塊。
21.權(quán)利要求20的方法,其中合并包括當(dāng)所述原始版本的第一函數(shù)單元與所述新版本的第一函數(shù)單元大小相等、所述原始版本的第一函數(shù)單元的結(jié)束地址等于所述原始版本的第二函數(shù)單元的開(kāi)始地址以及所述新版本的第一函數(shù)單元的結(jié)束地址等于所述新版本的第二函數(shù)單元的開(kāi)始地址時(shí),組合所述原始版本的第一和第二函數(shù)單元并組合所述新版本的對(duì)應(yīng)第一和第二函數(shù)單元以形成共有函數(shù)塊;以及對(duì)另外的可合并函數(shù)單元重復(fù)該組合操作。
22.權(quán)利要求20的方法,進(jìn)一步包括編碼所述共有函數(shù)塊。
23.權(quán)利要求18的方法,進(jìn)一步包括合并所述代碼單元的共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。
24.權(quán)利要求23的方法,其中合并包括當(dāng)所述原始版本的第一數(shù)據(jù)單元與所述新版本的第一數(shù)據(jù)單元大小相等、所述原始版本的第一數(shù)據(jù)單元的結(jié)束地址等于所述原始版本的第二數(shù)據(jù)單元的開(kāi)始地址以及所述新版本的第一數(shù)據(jù)單元的結(jié)束地址等于所述新版本的第二數(shù)據(jù)單元的開(kāi)始地址時(shí),組合所述原始版本的第一和第二數(shù)據(jù)單元并組合所述新版本的對(duì)應(yīng)第一和第二數(shù)據(jù)單元以形成共有數(shù)據(jù)塊;以及對(duì)另外的可合并數(shù)據(jù)單元重復(fù)該組合操作。
25.權(quán)利要求23的方法,進(jìn)一步包括編碼所述共有數(shù)據(jù)塊。
26.權(quán)利要求18的方法,其中所述原始和新版本所共有的代碼單元是共有函數(shù)單元,其中所述第一指令包括第一可計(jì)算指令而所述第二指令包括第二可計(jì)算指令,其中產(chǎn)生所述第二指令值包括用包括目標(biāo)地址的所述原始和新版本的共有函數(shù)單元的開(kāi)始地址之間的第一差別以及用包括所述第一和第二可計(jì)算指令的所述原始和新版本的共有函數(shù)單元的開(kāi)始地址之間的第二差別來(lái)修改所述第一指令值。
27.權(quán)利要求18的方法,其中所述代碼單元包括函數(shù)單元。
28.權(quán)利要求27的方法,其中產(chǎn)生所述第一指令值包括產(chǎn)生第一可計(jì)算指令的當(dāng)前指令地址與第一可計(jì)算指令的目標(biāo)地址之間的差別。
29.權(quán)利要求27的方法,其中產(chǎn)生所述第二指令值包括產(chǎn)生第一可計(jì)算指令的當(dāng)前指令地址與第一可計(jì)算指令的目標(biāo)地址之間的差別;產(chǎn)生新版本的第一共有函數(shù)單元的開(kāi)始地址與原始版本的對(duì)應(yīng)第一共有函數(shù)單元的開(kāi)始地址之間的差別;以及產(chǎn)生所述新版本的第二共有函數(shù)單元的開(kāi)始地址與所述原始版本的對(duì)應(yīng)第二共有函數(shù)單元的開(kāi)始地址之間的差別。
30.權(quán)利要求18的方法,其中所述代碼單元包括數(shù)據(jù)單元而所述指令包括數(shù)據(jù)指針。
31.權(quán)利要求18的方法,其中所述原始和新版本所共有的代碼單元是共有數(shù)據(jù)單元,其中所述第一指令包括第一數(shù)據(jù)指針而所述第二指令包括第二數(shù)據(jù)指針,其中所述第一指令值包括所述第一數(shù)據(jù)指針值而所述第二指令值包括所述第二數(shù)據(jù)指針值,其中產(chǎn)生所述第二指令值包括通過(guò)用第一和第二數(shù)據(jù)單元的開(kāi)始地址之間的差別修改所述第一數(shù)據(jù)指針值來(lái)產(chǎn)生第二數(shù)據(jù)指針值。
32.權(quán)利要求18的方法,進(jìn)一步包括在所述原始文件的修改版本與新文件之間執(zhí)行文件差分并產(chǎn)生差別文件。
33.權(quán)利要求32的方法,進(jìn)一步包括將所述差別文件傳送到便攜式處理系統(tǒng);以及用所述差別文件在所述便攜式處理系統(tǒng)中產(chǎn)生新文件版本。
34.權(quán)利要求33的方法,進(jìn)一步包括合并所述代碼單元的共有函數(shù)單元以形成共有函數(shù)塊;合并所述代碼單元的共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊;以及編碼所述共有函數(shù)塊和所述共有數(shù)據(jù)塊以便用于在便攜式處理系統(tǒng)中產(chǎn)生所述新文件版本。
35.一種用于判定電子文件之間的差別的方法,包括接收電子文件的原始版本和新版本;識(shí)別所述原始和新版本之間所共有的第一和第二函數(shù)單元,其中所述原始版本中的第一函數(shù)單元包括第一可計(jì)算指令而所述新版本中的第二函數(shù)單元包括第二可計(jì)算指令;識(shí)別所述原始和新版本之間所共有的第三和第四函數(shù)單元,其中所述原始版本中的第三函數(shù)單元包括對(duì)應(yīng)所述第一可計(jì)算指令的第一目標(biāo)地址,其中所述新版本中的第四函數(shù)單元包括對(duì)應(yīng)所述第二可計(jì)算指令的第二目標(biāo)地址;從所述第二可計(jì)算指令產(chǎn)生第二指令值;用該第二指令值替換所述第一可計(jì)算指令的第一指令值;以及產(chǎn)生包括具有所述第二指令值的第一指令的原始文件的修改版本。
36.權(quán)利要求35的方法,其中產(chǎn)生所述第二指針值包括用所述第三和第四函數(shù)單元的開(kāi)始地址之間的第一差別以及用所述第一和第二函數(shù)單元的開(kāi)始地址之間的第二差別來(lái)修改所述第一指令值。
37.權(quán)利要求35的方法,進(jìn)一步包括識(shí)別所述原始和新版本之間所共有的第一和第二代碼段,其中所述原始版本中的第一代碼段包括第一數(shù)據(jù)指針,而所述新版本中的第二代碼段包括第二數(shù)據(jù)指針;識(shí)別所述原始和新版本之間所共有的第一和第二數(shù)據(jù)單元,其中所述原始版本中的第一數(shù)據(jù)單元包括對(duì)應(yīng)所述第一數(shù)據(jù)指針的第一目標(biāo)地址,其中所述新版本中的第二數(shù)據(jù)單元包括對(duì)應(yīng)所述第二數(shù)據(jù)指針的第二目標(biāo)地址;從所述第二數(shù)據(jù)指針產(chǎn)生第二數(shù)據(jù)指針值;用該第二數(shù)據(jù)指針值替換所述第一數(shù)據(jù)指針的第一數(shù)據(jù)指針值;以及產(chǎn)生包括具有所述第二數(shù)據(jù)指針值的第一數(shù)據(jù)指針的原始文件的修改版本。
38.權(quán)利要求37的方法,其中產(chǎn)生所述第二數(shù)據(jù)指針值包括產(chǎn)生由當(dāng)前數(shù)據(jù)指針?biāo)赶虻脑及姹局械臄?shù)據(jù)段的開(kāi)始地址與所述新版本中的對(duì)應(yīng)數(shù)據(jù)段的開(kāi)始地址之間的差別。
39.權(quán)利要求35的方法,進(jìn)一步包括合并共有函數(shù)單元以形成共有函數(shù)塊。
40.權(quán)利要求35的方法,進(jìn)一步包括合并共有數(shù)據(jù)單元以形成共有數(shù)據(jù)塊。
41.權(quán)利要求35的方法,進(jìn)一步包括使用所述原始文件的修改版本和新文件來(lái)產(chǎn)生差別文件。
42.權(quán)利要求41的方法,進(jìn)一步包括將所述差別文件傳送到便攜式處理系統(tǒng);以及用所述差別文件在所述便攜式處理系統(tǒng)中產(chǎn)生新文件版本。
43.一種計(jì)算機(jī)可讀介質(zhì),包括可執(zhí)行指令,當(dāng)該可執(zhí)行指令在處理系統(tǒng)中執(zhí)行時(shí),減小了包括電子文件的原始版本和新版本之間的經(jīng)編碼差別的差別文件的大小,所述減小通過(guò)以下進(jìn)行對(duì)應(yīng)于由代碼行刪除、代碼行添加以及代碼行修改中的至少一種所引起的地址偏移,來(lái)識(shí)別所述原始和新版本之間的差別;通過(guò)使用所述原始版本的文本段與所述新版本的對(duì)應(yīng)文本段的地址之間的至少一種關(guān)系而修改所述原始版本的指令的目標(biāo)地址,來(lái)去除所述原始和新版本所共有的文本段中的所識(shí)別差別;以及產(chǎn)生包括具有經(jīng)修改目標(biāo)地址的指令的所述原始文件的經(jīng)修改版本。
全文摘要
為例如字節(jié)級(jí)文件差分提供了系統(tǒng)和方法。文件版本之間的軟件/可執(zhí)行的改變包括限定為源代碼改變的主要改變/邏輯改變以及次要改變。次要改變一般由主要改變引起并由軟件編譯器/鏈接器應(yīng)用產(chǎn)生。次要改變包括地址改變、指針目標(biāo)地址改變以及地址偏移改變。所提供的預(yù)處理系統(tǒng)和方法在文件版本間使用近似規(guī)則來(lái)去除/減少次要改變,并把有關(guān)去除這些改變的信息編碼在對(duì)應(yīng)差別文件的信息中。
文檔編號(hào)G06F17/30GK1809818SQ200480017317
公開(kāi)日2006年7月26日 申請(qǐng)日期2004年5月19日 優(yōu)先權(quán)日2003年6月20日
發(fā)明者任力偉, 顧金生 申請(qǐng)人:創(chuàng)道軟件有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1