国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
匯編語(yǔ)言

匯編語(yǔ)言和CPU以及內(nèi)存,端口等硬件知識(shí)是連在一起的. 這也是為什么匯編語(yǔ)言沒(méi)有通用性的原因. 下面簡(jiǎn)單講講基本知識(shí)(針對(duì)INTEL x86及其兼容機(jī))
============================
x86匯編語(yǔ)言的指令,其操作對(duì)象是CPU上的寄存器,系統(tǒng)內(nèi)存,或者立即數(shù). 有些指令表面上沒(méi)有操作數(shù), 或者看上去缺少操作數(shù), 其實(shí)該指令有內(nèi)定的操作對(duì)象, 比如push指令, 一定是對(duì)SS:ESP指定的內(nèi)存操作, 而cdq的操作對(duì)象一定是eax / edx.

在匯編語(yǔ)言中,寄存器用名字來(lái)訪問(wèn). CPU 寄存器有好幾類(lèi), 分別有不同的用處:

1. 通用寄存器:
EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP(這個(gè)雖然通用,但很少被用做除了堆棧指針外的用途)

這些32位可以被用作多種用途,但每一個(gè)都有"專(zhuān)長(zhǎng)". EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器. EBX 是"基地址"(base)寄存器, 在內(nèi)存尋址時(shí)存放基地址. ECX 是計(jì)數(shù)器(counter), 是重復(fù)(REP)前綴指令和LOOP指令的內(nèi)定計(jì)數(shù)器. EDX是...(忘了..哈哈)但它總是被用來(lái)放整數(shù)除法產(chǎn)生的余數(shù). 這4個(gè)寄存器的低16位可以被單獨(dú)訪問(wèn),分別用AX,BX,CX和DX. AX又可以單獨(dú)訪問(wèn)低8位(AL)和高8位(AH), BX,CX,DX也類(lèi)似. 函數(shù)的返回值經(jīng)常被放在EAX中.

ESI/EDI分別叫做"源/目標(biāo)索引寄存器"(source/destination index),因?yàn)樵诤芏嘧址僮髦噶钪? DS:ESI指向源串,而ES:EDI指向目標(biāo)串.

EBP是"基址指針"(BASE POINTER), 它最經(jīng)常被用作高級(jí)語(yǔ)言函數(shù)調(diào)用的"框架指針"(frame pointer). 在破解的時(shí)候,經(jīng)常可以看見(jiàn)一個(gè)標(biāo)準(zhǔn)的函數(shù)起始代碼:

push ebp ;保存當(dāng)前ebp
mov ebp,esp ;EBP設(shè)為當(dāng)前堆棧指針
sub esp, xxx ;預(yù)留xxx字節(jié)給函數(shù)臨時(shí)變量.
...

這樣一來(lái),EBP 構(gòu)成了該函數(shù)的一個(gè)框架, 在EBP上方分別是原來(lái)的EBP, 返回地址和參數(shù). EBP下方則是臨時(shí)變量. 函數(shù)返回時(shí)作 mov esp,ebp/pop ebp/ret 即可.

ESP 專(zhuān)門(mén)用作堆棧指針.

2. 段寄存器:
CS(Code Segment,代碼段) 指定當(dāng)前執(zhí)行的代碼段. EIP (Instruction pointer, 指令指針)則指向該段中一個(gè)具體的指令. CS:EIP指向哪個(gè)指令, CPU 就執(zhí)行它. 一般只能用jmp, ret, jnz, call 等指令來(lái)改變程序流程,而不能直接對(duì)它們賦值.
DS(DATA SEGMENT, 數(shù)據(jù)段) 指定一個(gè)數(shù)據(jù)段. 注意:在當(dāng)前的計(jì)算機(jī)系統(tǒng)中, 代碼和數(shù)據(jù)沒(méi)有本質(zhì)差別, 都是一串二進(jìn)制數(shù), 區(qū)別只在于你如何用它. 例如, CS 制定的段總是被用作代碼, 一般不能通過(guò)CS指定的地址去修改該段. 然而,你可以為同一個(gè)段申請(qǐng)一個(gè)數(shù)據(jù)段描述符"別名"而通過(guò)DS來(lái)訪問(wèn)/修改. 自修改代碼的程序常如此做.
ES,FS,GS 是輔助的段寄存器, 指定附加的數(shù)據(jù)段.
SS(STACK SEGMENT)指定當(dāng)前堆棧段. ESP 則指出該段中當(dāng)前的堆棧頂. 所有push/pop 系列指令都只對(duì)SS:ESP指出的地址進(jìn)行操作.

3. 標(biāo)志寄存器(EFLAGS):

該寄存器有32位,組合了各個(gè)系統(tǒng)標(biāo)志. EFLAGS一般不作為整體訪問(wèn), 而只對(duì)單一的標(biāo)志位感興趣. 常用的標(biāo)志有:

進(jìn)位標(biāo)志C(CARRY), 在加法產(chǎn)生進(jìn)位或減法有借位時(shí)置1, 否則為0.
零標(biāo)志Z(ZERO), 若運(yùn)算結(jié)果為0則置1, 否則為0
符號(hào)位S(SIGN), 若運(yùn)算結(jié)果的最高位置1, 則該位也置1.
溢出標(biāo)志O(OVERFLOW), 若(帶符號(hào))運(yùn)算結(jié)果超出可表示范圍, 則置1.

JXX 系列指令就是根據(jù)這些標(biāo)志來(lái)決定是否要跳轉(zhuǎn), 從而實(shí)現(xiàn)條件分枝. 要注意,很多JXX 指令是等價(jià)的, 對(duì)應(yīng)相同的機(jī)器碼. 例如, JE 和JZ 是一樣的,都是當(dāng)Z=1是跳轉(zhuǎn). 只有JMP 是無(wú)條件跳轉(zhuǎn). JXX 指令分為兩組, 分別用于無(wú)符號(hào)操作和帶符號(hào)操作. JXX 后面的"XX" 有如下字母:

無(wú)符號(hào)操作: 帶符號(hào)操作:
A = "ABOVE", 表示"高于" G = "GREATER", 表示"大于"
B = "BELOW", 表示"低于" L = "LESS", 表示"小于"
C = "CARRY", 表示"進(jìn)位"或"借位" O = "OVERFLOW", 表示"溢出"
S = "SIGN", 表示"負(fù)"
通用符號(hào):
E = "EQUAL" 表示"等于", 等價(jià)于Z (ZERO)
N = "NOT" 表示"非", 即標(biāo)志沒(méi)有置位. 如JNZ "如果Z沒(méi)有置位則跳轉(zhuǎn)"
Z = "ZERO", 與E同.

如果仔細(xì)想一想,就會(huì)發(fā)現(xiàn) JA = JNBE, JAE = JNB, JBE = JNA, JG = JNLE, JGE= JNL, JL= JNGE, ....

4. 端口

端口是直接和外部設(shè)備通訊的地方。外設(shè)接入系統(tǒng)后,系統(tǒng)就會(huì)把外設(shè)的數(shù)據(jù)接口映射到特定的端口地址空間,這樣,從該端口讀入數(shù)據(jù)就是從外設(shè)讀入數(shù)據(jù),而向外設(shè)寫(xiě)入數(shù)據(jù)就是向端口寫(xiě)入數(shù)據(jù)。當(dāng)然這一切都必須遵循外設(shè)的工作方式。端口的地址空間與內(nèi)存地址空間無(wú)關(guān),系統(tǒng)總共提供對(duì)64K個(gè)8位端口的訪問(wèn),編號(hào)0-65535. 相鄰的8位端口可以組成成一個(gè)16位端口,相鄰的16位端口可以組成一個(gè)32位端口。端口輸入輸出由指令I(lǐng)N,OUT,INS和OUTS實(shí)現(xiàn),具體可參考匯編語(yǔ)言書(shū)籍。

 

 

匯編語(yǔ)言的準(zhǔn)備知識(shí)--給初次接觸匯編者(2)

匯編指令的操作數(shù)可以是內(nèi)存中的數(shù)據(jù), 如何讓程序從內(nèi)存中正確取得所需要的數(shù)據(jù)就是對(duì)內(nèi)存的尋址.

INTEL 的CPU 可以工作在兩種尋址模式:實(shí)模式和保護(hù)模式. 前者已經(jīng)過(guò)時(shí),就不講了, WINDOWS 現(xiàn)在是32位保護(hù)模式的系統(tǒng), PE 文件就基本是運(yùn)行在一個(gè)32位線性地址空間, 所以這里就只介紹32位線性空間的尋址方式.

其實(shí)線性地址的概念是很直觀的, 就想象一系列字節(jié)排成一長(zhǎng)隊(duì),第一個(gè)字節(jié)編號(hào)為0, 第二個(gè)編號(hào)位1, .... 一直到4294967295(十六進(jìn)制FFFFFFFF,這是32位二進(jìn)制數(shù)所能表達(dá)的最大值了). 這已經(jīng)有4GB的容量! 足夠容納一個(gè)程序所有的代碼和數(shù)據(jù). 當(dāng)然, 這并不表示你的機(jī)器有那么多內(nèi)存. 物理內(nèi)存的管理和分配是很復(fù)雜的內(nèi)容, 初學(xué)者不必在意, 總之, 從程序本身的角度看, 就好象是在那么大的內(nèi)存中.

在INTEL系統(tǒng)中, 內(nèi)存地址總是由"段選擇符:有效地址"的方式給出.段選擇符(SELECTOR)存放在某一個(gè)段寄存器中, 有效地址則可由不同的方式給出. 段選擇符通過(guò)檢索段描述符確定段的起始地址, 長(zhǎng)度(又稱(chēng)段限制), 粒度, 存取權(quán)限, 訪問(wèn)性質(zhì)等. 先不用深究這些, 只要知道段選擇符可以確定段的性質(zhì)就行了. 一旦由選擇符確定了段, 有效地址相對(duì)于段的基地址開(kāi)始算. 比如由選擇符1A7選擇的數(shù)據(jù)段, 其基地址是400000, 把1A7 裝入DS中, 就確定使用該數(shù)據(jù)段. DS:0 就指向線性地址400000. DS:1F5278 就指向線性地址5E5278. 我們?cè)谝话闱闆r下, 看不到也不需要看到段的起始地址, 只需要關(guān)心在該段中的有效地址就行了. 在32位系統(tǒng)中, 有效地址也是由32位數(shù)字表示, 就是說(shuō), 只要有一個(gè)段就足以涵蓋4GB線性地址空間, 為什么還要有不同的段選擇符呢? 正如前面所說(shuō)的, 這是為了對(duì)數(shù)據(jù)進(jìn)行不同性質(zhì)的訪問(wèn). 非法的訪問(wèn)將產(chǎn)生異常中斷, 而這正是保護(hù)模式的核心內(nèi)容, 是構(gòu)造優(yōu)先級(jí)和多任務(wù)系統(tǒng)的基礎(chǔ). 這里有涉及到很多深層的東西, 初學(xué)者先可不必理會(huì).

有效地址的計(jì)算方式是: 基址+間址*比例因子+偏移量. 這些量都是指段內(nèi)的相對(duì)于段起始地址的量度, 和段的起始地址沒(méi)有關(guān)系. 比如, 基址=100000, 間址=400, 比例因子=4, 偏移量=20000, 則有效地址為:

100000+400*4+20000=100000+1000+20000=121000. 對(duì)應(yīng)的線性地址是400000+121000=521000. (注意, 都是十六進(jìn)制數(shù)).

基址可以放在任何32位通用寄存器中, 間址也可以放在除ESP外的任何一個(gè)通用寄存器中. 比例因子可以是1, 2, 4 或8. 偏移量是立即數(shù). 如: [EBP+EDX*8+200]就是一個(gè)有效的有效地址表達(dá)式. 當(dāng)然, 多數(shù)情況下用不著這么復(fù)雜, 間址,比例因子和偏移量不一定要出現(xiàn).

內(nèi)存的基本單位是字節(jié)(BYTE). 每個(gè)字節(jié)是8個(gè)二進(jìn)制位, 所以每個(gè)字節(jié)能表示的最大的數(shù)是11111111, 即十進(jìn)制的255. 一般來(lái)說(shuō), 用十六進(jìn)制比較方便, 因?yàn)槊?個(gè)二進(jìn)制位剛好等于1個(gè)十六進(jìn)制位, 11111111b = 0xFF. 內(nèi)存中的字節(jié)是連續(xù)存放的, 兩個(gè)字節(jié)構(gòu)成一個(gè)字(WORD), 兩個(gè)字構(gòu)成一個(gè)雙字(DWORD). 在INTEL架構(gòu)中, 采用small endian格式, 即在內(nèi)存中,高位字節(jié)在低位字節(jié)后面. 舉例說(shuō)明:十六進(jìn)制數(shù)803E7D0C, 每?jī)晌皇且粋€(gè)字節(jié), 在內(nèi)存中的形式是: 0C 7D 3E 80. 在32位寄存器中則是正常形式,如在EAX就是803E7D0C. 當(dāng)我們的形式地址指向這個(gè)數(shù)的時(shí)候,實(shí)際上是指向第一個(gè)字節(jié),即0C. 我們可以指定訪問(wèn)長(zhǎng)度是字節(jié), 字或者雙字. 假設(shè)DS EDX]指向第一個(gè)字節(jié)0C:

mov AL, byte ptr DS EDX] ;把字節(jié)0C存入AL
mov AX, word ptr DS EDX] ;把字7D0C存入AX
mov EAX, dword ptr DS EDX] ;把雙字803E7D0C存入EAX

在段的屬性中,有一個(gè)就是缺省訪問(wèn)寬度.如果缺省訪問(wèn)寬度為雙字(在32位系統(tǒng)中經(jīng)常如此),那么要進(jìn)行字節(jié)或字的訪問(wèn),就必須用byte/word ptr顯式地指明.

缺省段選擇:如果指令中只有作為段內(nèi)偏移的有效地址,而沒(méi)有指明在哪一個(gè)段里的時(shí)候,有如下規(guī)則:

如果用ebp和esp作為基址或間址,則認(rèn)為是在SS確定的段中;
其他情況,都認(rèn)為是在DS確定的段中。

如果想打破這個(gè)規(guī)則,就必須使用段超越前綴。舉例如下:

mov eax, dword ptr [edx] ;缺省使用DS,把DS EDX]指向的雙字送入eax
mov ebx, dword ptr ES EDX] ;使用ES:段超越前綴,把ES EDX]指向的雙字送入ebx

堆棧:

堆棧是一種數(shù)據(jù)結(jié)構(gòu),嚴(yán)格地應(yīng)該叫做“棧”。“堆”是另一種類(lèi)似但不同的結(jié)構(gòu)。SS 和 ESP 是INTEL對(duì)棧這種數(shù)據(jù)結(jié)構(gòu)的硬件支持。push/pop指令是專(zhuān)門(mén)針對(duì)棧結(jié)構(gòu)的特定操作。SS指定一個(gè)段為棧段,ESP則指出當(dāng)前的棧頂。push xxx 指令作如下操作:

把ESP的值減去4;
把xxx存入SS ESP]指向的內(nèi)存單元。

這樣,esp的值減小了4,并且SS ESP]指向新壓入的xxx. 所以棧是“倒著長(zhǎng)”的,從高地址向低地址方向擴(kuò)展。pop yyy 指令做相反的操作,把SS ESP]指向的雙字送到y(tǒng)yy指定的寄存器或內(nèi)存單元,然后把esp的值加上4。這時(shí),認(rèn)為該值已被彈出,不再在棧上了,因?yàn)樗m然還暫時(shí)存在在原來(lái)的棧頂位置,但下一個(gè)push操作就會(huì)把它覆蓋。因此,在棧段中地址低于esp的內(nèi)存單元中的數(shù)據(jù)均被認(rèn)為是未定義的。

最后,有一個(gè)要注意的事實(shí)是,匯編語(yǔ)言是面向機(jī)器的,指令和機(jī)器碼基本上是一一對(duì)應(yīng)的,所以它們的實(shí)現(xiàn)取決于硬件.有些看似合理的指令實(shí)際上是不存在的,比如:

mov DS edx], ds ecx] ;內(nèi)存單元之間不能直接傳送
mov DS, 1A7 ;段寄存器不能直接由立即數(shù)賦值
mov EIP, 3D4E7 ;不能對(duì)指令指針直接操作.

 


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
探索Windows的內(nèi)部機(jī)制所需的基礎(chǔ) [轉(zhuǎn)]

索Windows的內(nèi)部機(jī),分析Windows各種系統(tǒng)機(jī)能的實(shí)現(xiàn)方式,并不那么難。只要有一定的基礎(chǔ)就可以開(kāi)始這方面的學(xué)習(xí)。以我的學(xué)習(xí)經(jīng)歷來(lái)說(shuō),我覺(jué)得在開(kāi)始深入學(xué)習(xí)Windows之前,最好有如下的基礎(chǔ):

1.       熟練使用C語(yǔ)言   你至少要對(duì)C中的指針了如指掌,知道如何使用指針訪問(wèn)數(shù)組。知道數(shù)組并不是僅可通過(guò)下標(biāo)來(lái)訪問(wèn)的。如果你看過(guò)很多遍《C缺陷和陷阱》并認(rèn)為這本書(shū)很棒。那就太好了。

 

 

2.       一定的匯編基礎(chǔ)   了解基本的匯編語(yǔ)句,對(duì)x86架構(gòu)的匯編指令有基本的了解。如果在學(xué)校認(rèn)真學(xué)習(xí)過(guò)匯編語(yǔ)言這門(mén)課,那么就足夠了。在深入學(xué)習(xí)Windows時(shí),你會(huì)遇到不少匯編代碼,很多時(shí)候你需要使用一些工具來(lái)反編譯一些東西,此時(shí)你匯編水平的高低就直接有影響了。

 

 

3.       對(duì)Windows API很熟悉 可以直接用API開(kāi)發(fā)小規(guī)模的程序,了解Windows的消息機(jī)制,至少要看過(guò)《Windows程序設(shè)計(jì)》(上、下),如果深入學(xué)習(xí)過(guò)《Windows核心編程》那就更好。

 

 

4.       掌握基本的數(shù)據(jù)結(jié)構(gòu)   至少應(yīng)該達(dá)到能很容易的用C實(shí)現(xiàn)一個(gè)雙向鏈表吧?基本上掌握了《數(shù)據(jù)結(jié)構(gòu)》這門(mén)課,就差不多了。否則,學(xué)習(xí)中遇到的很多復(fù)雜結(jié)構(gòu),將會(huì)使你陷入云霧里,不知如何下手。

 

 

5.       學(xué)習(xí)過(guò)《操作系統(tǒng)》 對(duì)處理器調(diào)度、虛擬內(nèi)存、I/O設(shè)備管理有基本的認(rèn)識(shí)。知道什么是中斷,引入中斷的目的對(duì)CPU的工作方式有基本了解。這門(mén)課算是總的理論基礎(chǔ)課了。你對(duì)這門(mén)課的掌握程度將直接影響你的學(xué)習(xí)進(jìn)度,尤其是你要看《Windows Internals 4th》這本書(shū)時(shí)。

 

 

6.       對(duì)面向?qū)ο笥幸欢ǖ牧私?nbsp; 

 

 

上面是一些基本的硬性要求,下面的是一些軟性要求:

1.       要經(jīng)常問(wèn):為什么?   沒(méi)有質(zhì)疑的精神,探索從何而言?

2.       要有耐心   學(xué)習(xí)是一個(gè)較長(zhǎng)的過(guò)程,探索Windows內(nèi)部時(shí),有時(shí)確實(shí)讓人很有挫折感,這時(shí)千萬(wàn)不要急躁,耐心才能保證你終有所成。

3.       要細(xì)心     這個(gè)。。。。不用說(shuō)了吧?

4.       要多思考   不要把書(shū)中內(nèi)容當(dāng)作金科玉律。

5.       要多總結(jié)   這樣知識(shí)才能變成自己的。

 

 

當(dāng)然,有一本好書(shū),也是必須的。我推薦如下:

《Inside Windows 2000》或者《Windows Internals 4th》

《Undocumented Windows 2000 Secrets》

 

 

或許有人認(rèn)為沒(méi)有必要探索Windows的內(nèi)部機(jī)制,這個(gè)問(wèn)題仁者見(jiàn)仁、智者見(jiàn)智,不過(guò)我相信你如果對(duì)Windows的內(nèi)部機(jī)制有很深的了解,那么你一定能寫(xiě)出更高效、更能利用系統(tǒng)優(yōu)勢(shì)的程序來(lái)。并且,當(dāng)程序出現(xiàn)Bug時(shí),我相信你更有把握解決它們。知其然,而不知其所以然的感覺(jué),確實(shí)很糟J

 

 

上述僅是個(gè)人所見(jiàn),不足之處還請(qǐng)多多指教。

IMaxSoft 發(fā)表于2005-05-27 9:39 AM
還有一點(diǎn),熟練編寫(xiě)WDM驅(qū)動(dòng),熟練使用SoftIce,Windbg,
IDA等調(diào)試反匯編工具,深厚的匯編功底,HOHO


baiyuanfan 發(fā)表于2005-06-01 11:57 AM
IA32 ASM非常重要,還要大致知道C如何被編譯為ASM


jg 發(fā)表于2005-06-07 4:49 PM
要看你想要在windows上面作甚么,如果是用戶模式寫(xiě)一些小的開(kāi)發(fā),又根本不在意性能,我覺(jué)得沒(méi)有必要了解細(xì)節(jié),不如花時(shí)間在別的地方。但如果你需要寫(xiě)驅(qū)動(dòng),或者寫(xiě)服務(wù)器上的東東,就需要了解你所關(guān)心的細(xì)節(jié)。但我的體會(huì)是光靠看一兩本書(shū)是根本沒(méi)用的,真正寫(xiě)起東西來(lái)怎么都不靈,在微軟不同的build之間的差別都很大,很都認(rèn)為應(yīng)該可以work的東西就是不行,在微軟的文檔里又找不到細(xì)節(jié),難道真的要連上windbg一個(gè)一個(gè)的看數(shù)據(jù)結(jié)構(gòu)。linux也有同樣的問(wèn)題,盡管你可以看代碼,可是又有幾個(gè)人有時(shí)間看完你需要了解的那部分代碼呢?


Kendiv 發(fā)表于2005-06-07 6:05 PM
只要在Windows上開(kāi)發(fā)涉及系統(tǒng)層的東西,我認(rèn)為還是需要了解系統(tǒng)整體的運(yùn)行機(jī)理的,要知道系統(tǒng)的各個(gè)組件之間有著千絲萬(wàn)縷的聯(lián)系。在對(duì)整體有了一定的了解后,在根據(jù)具體需要進(jìn)行深入挖掘。Windows個(gè)版本之間的差別肯定是存在的,有時(shí)即使打了個(gè)補(bǔ)丁,可能就會(huì)有很大不同了。但,這些只是表面而已,很多本質(zhì)的東西還是一致的。要不然也不會(huì)有操作系統(tǒng)這門(mén)課了,即使Linux很多東西與Windows也是一致的。如果只是開(kāi)發(fā)用戶態(tài)的小東西,那么VB、Delphi就足夠了。確實(shí)用不著如此深入。不過(guò),我這里的東西不是給這方面的人準(zhǔn)備的。這些是給那些永遠(yuǎn)喜歡問(wèn)為什么的朋友準(zhǔn)備的。

 

 

 

 

 

 

 

 

 

 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
轉(zhuǎn)帖]微軟事務(wù)處理服務(wù)(MTS)介紹

  微軟事務(wù)處理服務(wù)(MTS)代表了一類(lèi)新的產(chǎn)品,它使開(kāi)發(fā)和布置高性能的、可變尺度的、可靠的分布式應(yīng)用程序更加容易。這是通過(guò)將以組件為基礎(chǔ)的開(kāi)發(fā)和布置技術(shù)與事務(wù)處理控制器的可變尺度性、可靠性結(jié)合起來(lái)而實(shí)現(xiàn)的。

  為什么使用微軟事務(wù)處理服務(wù)?

  微軟事務(wù)處理服務(wù)被設(shè)計(jì)用于使的構(gòu)造 高性能的、可變尺度的、可靠的internet和intranet應(yīng)用程序更加容易。多年以前,我們就能構(gòu)造這些應(yīng)用程序了,但它所要求的才賦和投資超出了大多數(shù)公司的能力。

  MTS以已被證實(shí)的事務(wù)處理方法為基礎(chǔ),但它的重要性超出了事務(wù)處理控制器的領(lǐng)域,它對(duì)分布式、以組件為基礎(chǔ)的服務(wù)器應(yīng)用程序定義了一個(gè)簡(jiǎn)單的 編程模式和執(zhí)行環(huán)境。

  應(yīng)用程序由能夠提供商業(yè)應(yīng)用功能的微軟ActiveX組件組合而成。這些組件似乎被開(kāi)發(fā)用于單用戶。通過(guò)在MTS環(huán)境下安裝這些組件來(lái)執(zhí)行它們,服務(wù)器應(yīng)用程序能高性能的、可靠的自動(dòng)改變尺度以支持同時(shí)存在的多客戶。

  MTS 被特別設(shè)計(jì)用于允許服務(wù)器應(yīng)用程序在一個(gè)很大的用戶范圍內(nèi)變化(從小的單用戶系統(tǒng)到高容量的網(wǎng)絡(luò)服務(wù)器)。它還具有通常只有高檔的事務(wù)處理系統(tǒng)才具有的魯棒性和完整性。

  下面這部分對(duì)開(kāi)發(fā)一個(gè)優(yōu)秀的服務(wù)器應(yīng)用程序的復(fù)雜性作一個(gè)簡(jiǎn)單的回顧。

  我們從三個(gè)不同角度來(lái)討論這個(gè)問(wèn)題:

  第一、它強(qiáng)調(diào)了一個(gè)網(wǎng)絡(luò)服務(wù)器為提供合理水平服務(wù)所必須作的工作。

  第二、它論述了當(dāng)構(gòu)造以組件為基礎(chǔ)的應(yīng)用程序所引起的問(wèn)題。

  第三、它描述了即使是在錯(cuò)誤發(fā)生時(shí),維持應(yīng)用程序的完整的重要性。

  MTS提供了一個(gè)應(yīng)用程序編程模式,使得開(kāi)發(fā)者避開(kāi)了這些復(fù)雜之處,允許開(kāi)發(fā)者將精力集中于程序的功能上,并降低了構(gòu)造程序所需的費(fèi)用和時(shí)間。

  服務(wù)器基本結(jié)構(gòu):

  服務(wù)器要有一個(gè)高級(jí)的基礎(chǔ)。從零開(kāi)始建造一個(gè)網(wǎng)絡(luò)應(yīng)用服務(wù)器不是一件容易的事。完成實(shí)際的商業(yè)功能,例如處理在線書(shū)庫(kù)的訂單,實(shí)際只是工作的一小部分。典型的服務(wù)器系統(tǒng)必須有一個(gè)高級(jí)基礎(chǔ)來(lái)獲取可接受的性能和尺度。

  應(yīng)用程序服務(wù)開(kāi)發(fā)者必須親自經(jīng)常開(kāi)發(fā)基本構(gòu)件中的許多部分。舉個(gè)例子,序調(diào)用提供了豐富的服務(wù),系統(tǒng)開(kāi)發(fā)者仍必須作下面的工作:

  注冊(cè)目錄系統(tǒng)服務(wù)器;

  管理服務(wù)器處理池和線程池;

  最后,服務(wù)器需要為多用戶請(qǐng)求提供的服務(wù)管理線程池,而不只是針對(duì)一個(gè)單用戶。使多客戶同時(shí)請(qǐng)求使用共享數(shù)據(jù)和資源的要求同步。這要求高級(jí)鎖定協(xié)議能解釋死鎖、條件競(jìng)爭(zhēng)、資源匱乏及其他性能上的問(wèn)題。管理客戶內(nèi)容,包括數(shù)據(jù)庫(kù)連接和數(shù)據(jù)結(jié)構(gòu)的全視圖。(目標(biāo)視圖)

  客戶緩沖狀況以改善潛在慢速網(wǎng)絡(luò)通行。

  完成安全保障以確保商業(yè)功能和對(duì)象僅提供給被授權(quán)者。

  完成管理和確認(rèn)工具以允許服務(wù)器的遠(yuǎn)程安裝和管理。

  MTS提供了一個(gè)應(yīng)用程序/服務(wù)器基本結(jié)構(gòu)來(lái)滿足上面的要求。

  構(gòu)造以組件為基礎(chǔ)的應(yīng)用程序:

  從組件構(gòu)造應(yīng)用程序?qū)﹂_(kāi)發(fā)者有極大的吸引力并且是面向?qū)ο笥?jì)算的早期目標(biāo)之一。由于它提供了一個(gè)自然的方法來(lái)封裝商業(yè)功能,因而對(duì)開(kāi)發(fā)服務(wù)器應(yīng)用程序更具吸引力。

  然而,組件工程程序比它原來(lái)顯現(xiàn)出來(lái)的要困難。早期對(duì)象系統(tǒng)的一個(gè)根本弱點(diǎn)是缺乏共同的框架來(lái)允許開(kāi)發(fā)者無(wú)論是在同一進(jìn)程或是交叉進(jìn)程,都能將不同部分創(chuàng)造的對(duì)象結(jié)合到一個(gè)完整的程序里。組件對(duì)象模型(COM)解決了這個(gè)問(wèn)題。

  然而,簡(jiǎn)單的用一個(gè)COM模型來(lái)從組件構(gòu)造服務(wù)器應(yīng)用程序是不夠的。該組件必須使用共同的服務(wù)框架。那些自己構(gòu)造服務(wù)器框架的開(kāi)發(fā)者使用其他組的組件開(kāi)發(fā)程序的機(jī)會(huì)就會(huì)很小。

  MTS程序工程師和編程界面提供了一個(gè)共同的框架來(lái)構(gòu)造以組件為基礎(chǔ)的服務(wù)器應(yīng)用程序。

  保持程序的完整性:

  非常重要的一點(diǎn)是,商業(yè)系統(tǒng)應(yīng)能準(zhǔn)確的維持商業(yè)狀態(tài)。例如,一個(gè)在線書(shū)庫(kù)必須可靠的跟蹤訂單。若不然,將會(huì)產(chǎn)生巨大的收入損失?,F(xiàn)存的訂單可能丟失或在取訂單、填訂單的時(shí)候有延時(shí),不滿意的用戶可能會(huì)轉(zhuǎn)到別處作生意。

  維持商業(yè)系統(tǒng)的完整性從不容易,特別在發(fā)生錯(cuò)誤以后。具有諷刺意義的是,即使計(jì)算機(jī)變的越來(lái)越可靠,系統(tǒng)作為一個(gè)整體變得更加不可靠。對(duì)提供internet和intranet連接到數(shù)十、數(shù)百、甚至可能數(shù)萬(wàn)個(gè)服務(wù)器上的無(wú)數(shù)桌式計(jì)算機(jī)來(lái)講,錯(cuò)誤是常事。

  對(duì)分布式程序的要求使問(wèn)題復(fù)雜化。商業(yè)事務(wù),如訂書(shū),逐漸地卷入多個(gè)服務(wù)者,必須證實(shí)其信用,書(shū)必須船運(yùn),必須管理存貨目錄,并且客戶必須有資金。這一切都使在多服務(wù)器上的多個(gè)數(shù)據(jù)庫(kù)更新成為必須。分布式開(kāi)發(fā)者必須預(yù)料到程序的某一部分能在其他部分發(fā)生錯(cuò)誤后繼續(xù)運(yùn)行。這些防錯(cuò)方案是單個(gè)程序的好幾倍。

  商業(yè)程序經(jīng)常被要求將多個(gè)工作協(xié)調(diào)為單個(gè)商業(yè)事務(wù)。一個(gè)在線書(shū)庫(kù)絕對(duì)不能在沒(méi)有處理恰當(dāng)?shù)挠唵吻熬腿グ才叛b運(yùn)的日程,同時(shí)也不可能向用戶收取費(fèi)用而不通知其送貨日期。協(xié)調(diào)這些工作使它們都發(fā)生或都不發(fā)生,若無(wú)特殊系統(tǒng)支持是非常困難的。

  即使在發(fā)生錯(cuò)誤時(shí)要確保程序最小單位的更新,是很不容易的。尤其當(dāng)一個(gè)應(yīng)用程序分布在多個(gè)數(shù)據(jù)庫(kù)和系統(tǒng)上時(shí)。使用在設(shè)計(jì)上隱藏了其可完成性的多種組件造成了這個(gè)問(wèn)題。

  當(dāng)多個(gè)用戶獲取同一組件時(shí)程序也必須能提供一致的行為。對(duì)同一本書(shū)同時(shí)的定單不應(yīng)產(chǎn)生只送一本書(shū)給兩個(gè)用戶的情況。除非程序被正確書(shū)寫(xiě),資源競(jìng)爭(zhēng)最終將引起不一致性。這些問(wèn)題很難解決并將花很多錢(qián)。并且隨著程序增長(zhǎng)和費(fèi)用增多而更可能發(fā)生。這也是由于使用組件引起的。

  MTS使用以組件為基礎(chǔ)的編程完整事務(wù)使得你能開(kāi)發(fā)出魯棒,分布式的,以組件為基礎(chǔ)的程序。

  MTS工程師

  這部分對(duì)MTS工程師主要元素作一簡(jiǎn)介

  這些元素包括:

  ActiveX組件,完成應(yīng)用程序功能。

  事務(wù)管理服務(wù)執(zhí)行者,為程序組件運(yùn)行服務(wù)。

  服務(wù)處理,提供存放程序組件的代理處理環(huán)境。

  資源管理者(RM),管理程序的可耐階段,例如包括相關(guān)數(shù)據(jù)庫(kù)系統(tǒng)和事務(wù)性消息隊(duì)列。

  資源分配者,管理進(jìn)程內(nèi)組件非耐久性共享數(shù)據(jù),例子包括數(shù)據(jù)庫(kù)連接池,管理隊(duì)列。

  微軟分布事務(wù)協(xié)調(diào)者,允許通過(guò)多個(gè)資源管理者,分配者和程序組件協(xié)調(diào)事務(wù)。

  微軟事務(wù)服務(wù)器組件:程序組件使商業(yè)行為模式化。這些組件了完整商業(yè)規(guī)則,提供視圖和程序狀態(tài)變化情況??紤]在線書(shū)庫(kù)的例子。用在數(shù)據(jù)庫(kù)系統(tǒng)中的記錄代表商務(wù)的耐久狀態(tài),如掛起訂單,方便的目錄,可接受帳單。應(yīng)用程序組件刷新?tīng)顟B(tài)以反映如新定單和目錄發(fā)送的變化。

  MTS程序組件是ActiveX處理中服務(wù)器(DDL)。通過(guò)使用Microsoft Visual Basic,Visual C++,Visual J++或任何與ActiveX相兼容的開(kāi)發(fā)工具,你可以創(chuàng)造并實(shí)現(xiàn)這些組件。

  ActiveX以COM為基礎(chǔ),包括:

  界面概念,客戶從對(duì)象請(qǐng)求服務(wù)的方法;

  通過(guò)處理器和機(jī)器界限與透明對(duì)象的連接;

  確認(rèn)組件,動(dòng)態(tài)裝載和執(zhí)行組件的機(jī)制;

  對(duì)象能通過(guò)MTS工程師支持多界面,并提供給用戶查詢支持對(duì)象的特殊界面的方法。并允許組件提供不同水平的功能并逐漸引入新版本。

  MTS擴(kuò)展了COM以提供一個(gè)通用的服務(wù)器程序框架。除了上面提到的COM內(nèi)在的特性外,MTS還處理服務(wù)器注冊(cè),進(jìn)程,線程管理,內(nèi)容管理,共享資源的管理和同步化,以及以組件為基礎(chǔ)的安全性管理。

  將事務(wù)引入到程序模板作為獲得最小單元更新和在組件、數(shù)據(jù)庫(kù)系統(tǒng)及網(wǎng)絡(luò)邊界達(dá)到一致性的機(jī)制。每個(gè)組件都有一個(gè)事務(wù)屬性指出組件的事務(wù)性語(yǔ)義。這允許事務(wù)性內(nèi)容被MTS自動(dòng)管理。MTS使用戶避免了復(fù)雜的服務(wù)事件,使用戶可以專(zhuān)注于完成商業(yè)功能。由于在MTS下運(yùn)行組件可充分利用事務(wù)服務(wù)程序,用戶可以把程序當(dāng)成各自獨(dú)立的狀態(tài)來(lái)編寫(xiě)程序。MTS處理同時(shí)事件,資源池,內(nèi)容管理及其他系統(tǒng)水平的復(fù)雜的事件。事務(wù)系統(tǒng),與數(shù)據(jù)庫(kù)服務(wù)器和其他類(lèi)型的資源管理協(xié)同工作,確保同時(shí)事務(wù)是強(qiáng)大的、一致的、有恰當(dāng)?shù)姆蛛x性,并且,一旦完成,變化是可耐久的。

  應(yīng)用程序作為ActiveX的組件來(lái)分配,稱(chēng)為包裹。包裹定義了錯(cuò)誤分離和信任邊界。

  事務(wù)管理服務(wù)執(zhí)行器:

  事務(wù)管理服務(wù)執(zhí)行器是一個(gè)動(dòng)態(tài)連接庫(kù)(DDL),它對(duì)事務(wù)管理服務(wù)組件提供運(yùn)行時(shí)服務(wù)。這些服務(wù)包括線程管理和內(nèi)容管理。這些動(dòng)態(tài)連接庫(kù)被加載到應(yīng)用程序組件的宿主進(jìn)程中,并且在后臺(tái)透明的執(zhí)行。

  服務(wù)進(jìn)程:

  服務(wù)進(jìn)程是應(yīng)用程序組件執(zhí)行的宿主系統(tǒng)進(jìn)程,對(duì)數(shù)十、成百、上千個(gè)客戶提供服務(wù)。你可以配置多個(gè)服務(wù)進(jìn)程在一個(gè)計(jì)算機(jī)上執(zhí)行。每個(gè)服務(wù)進(jìn)程反映了一個(gè)分立的信任邊界和錯(cuò)誤絕緣域。

  其他的進(jìn)程環(huán)境也能讓?xiě)?yīng)用程序組件在其上運(yùn)行。這使你可以分配應(yīng)用程序以適合不同的分布、性能和錯(cuò)誤絕緣要求。例如,你可以配置MTS組件直接加載到微軟SQL服務(wù)器上或微軟網(wǎng)絡(luò)信息服務(wù)器(IIS)上。你還可以直接將它們配置到客戶進(jìn)程中去。

  資源管理者:

  資源管理者是一種系統(tǒng)服務(wù),它管理耐久數(shù)據(jù)。服務(wù)器應(yīng)用程序使用資源管理者維持應(yīng)用程序的耐久狀態(tài),如方便的存貨目錄記錄,到期訂單以及可接受帳目。資源管理者于事務(wù)管理者協(xié)同工作,以保證應(yīng)用程序的最小性和分立性。微軟SQL服務(wù)器,耐久的消息隊(duì)列和事務(wù)性的文件系統(tǒng)都是資源管理者的例子。

  最小性保證了在一個(gè)特殊事務(wù)中所有的更新都能完成(并能持久)或者被放棄并回到原來(lái)的狀態(tài)。一致性意味著一個(gè)事務(wù)是系統(tǒng)狀態(tài)的正確轉(zhuǎn)化,保存了狀態(tài)變量。

  分立使得同時(shí)事務(wù)不會(huì)得知其他事務(wù)的信息和未完成的結(jié)果,以免引起應(yīng)用程序狀態(tài)的不穩(wěn)定。資源管理者應(yīng)用以事務(wù)為基礎(chǔ)的同步協(xié)議來(lái)分離活動(dòng)事務(wù)管理程序未完成的工作。

  耐久性意味著對(duì)已管理資源(如數(shù)據(jù)庫(kù)記錄)的更新,能不受錯(cuò)誤的影響,包括通訊錯(cuò)誤,進(jìn)程錯(cuò)誤和服務(wù)系統(tǒng)錯(cuò)誤。事務(wù)管理的日志甚至能允許你在磁盤(pán)介質(zhì)失效后恢復(fù)耐久狀態(tài)。

  最小性和分立性協(xié)同工作使得事務(wù)管理程序看起來(lái)是立刻發(fā)生的。事務(wù)管理程序的中間狀態(tài)對(duì)外面來(lái)說(shuō)是不可見(jiàn)的,并且產(chǎn)生了這樣一個(gè)結(jié)果:或者所有的工作都完成了,或者沒(méi)有一個(gè)完成了。這允許我們?cè)诰帉?xiě)應(yīng)用程序組件時(shí),可以把事務(wù)管理程序當(dāng)作順序發(fā)生而不考慮其同時(shí)性,這對(duì)應(yīng)用程序開(kāi)發(fā)者是一個(gè)非常大的簡(jiǎn)化。

  MTS支持資源管理者來(lái)完成OLE事務(wù)管理協(xié)議或X/Open XA協(xié)議。有開(kāi)發(fā)資源管理者的工具包。

一個(gè)資源分配者在一個(gè)進(jìn)程內(nèi)代表應(yīng)用程序組件管理非耐久性的共享數(shù)據(jù)。資源分配者與資源管理者相似,但沒(méi)有擔(dān)保或耐久性。MTS提供兩種資源分配者:

  ODBC資源分配者

  共享屬性管理者

  并提供了一個(gè)工具包來(lái)開(kāi)發(fā)資源分配者

  ODBC資源分配者:

  ODBC資源分配者使用標(biāo)準(zhǔn)開(kāi)放數(shù)據(jù)連接界面為事務(wù)服務(wù)器管理數(shù)據(jù)連接池。ODBC資源分配者維護(hù)數(shù)據(jù)庫(kù)連接池,快速和有效的分配給對(duì)象連接。連接被自動(dòng)列在對(duì)象的事務(wù)處理程序中。資源分配者能自動(dòng)的回收和重用連接。ODBC資源分配者是一個(gè)動(dòng)態(tài)連接庫(kù),它對(duì)用戶透明的提供這種功能并且內(nèi)構(gòu)在MTS的特性里。

  共享屬性管理者:

  共享特性管理者對(duì)定義的應(yīng)用程序,進(jìn)程寬度,屬性(變量)進(jìn)行同步管理。你可以使用它來(lái)維護(hù)一個(gè)Web頁(yè)面沖浪計(jì)數(shù)器,常量數(shù)據(jù)的緩沖,或者提供高速緩沖來(lái)避免數(shù)據(jù)庫(kù)的過(guò)熱點(diǎn)。(例如產(chǎn)生唯一的接收成員)。

  微軟分布式事務(wù)管理協(xié)調(diào)者:

  微軟分布式事務(wù)管理協(xié)調(diào)者是一個(gè)系統(tǒng)服務(wù),用于協(xié)調(diào)跨越多個(gè)資源管理者的事務(wù)。即使事務(wù)可能在分立的計(jì)算機(jī)上跨越了多個(gè)資源管理者,它也能當(dāng)作最小事務(wù)來(lái)完成。

  微軟分布式事務(wù)管理協(xié)調(diào)者最早作為微軟SQL服務(wù)器6.5版本的一部分發(fā)布,并且包含在MTS里。它完成了兩階段承諾協(xié)議來(lái)保證事務(wù)處理結(jié)果(完成的或拋棄的)在所有的資源管理者中是一致的。

  微軟分布式事務(wù)管理協(xié)調(diào)者確保最小性,不管是在錯(cuò)誤(節(jié)點(diǎn)沖突、網(wǎng)絡(luò)崩潰或資源管理者、應(yīng)用程序的錯(cuò)誤動(dòng)作),條件競(jìng)爭(zhēng)(事務(wù)管理程序開(kāi)始工作而一個(gè)資源管理者正在放棄)還是可提供性(一個(gè)資源管理者裝備了一個(gè)事務(wù)但沒(méi)有返回)發(fā)生時(shí)。

  微軟分布式事務(wù)管理協(xié)調(diào)者支持符合OLE事務(wù)管理或X/Open XA協(xié)議的資源管理者。

  結(jié)論:

  微軟事務(wù)管理服務(wù)器將改變?nèi)藗冮_(kāi)發(fā)商業(yè)應(yīng)用程序的方法。組件基礎(chǔ)技術(shù)、面向?qū)ο蠹夹g(shù)與針對(duì)分布式、在線事務(wù)處理的時(shí)間驗(yàn)證技術(shù)的結(jié)合將使得布置由被購(gòu)買(mǎi)的通常構(gòu)造的組件組成的應(yīng)用程序更加容易。經(jīng)濟(jì)上的優(yōu)點(diǎn)將產(chǎn)生商業(yè)組件的一個(gè)新市場(chǎng)。這種情況,反過(guò)來(lái)說(shuō),使得原來(lái)沒(méi)有解決的問(wèn)題得到商業(yè)上的解決。

  微軟事務(wù)處理服務(wù)已經(jīng)分兩階段展開(kāi)。初始時(shí),分布式事務(wù)處理協(xié)調(diào)器在1996年4月作為微軟SQL服務(wù)器版本3.5的一部分發(fā)布。它提供了通過(guò)相異數(shù)據(jù)存儲(chǔ)庫(kù)的分布式兩階段承諾。

  在1996年11月,微軟事務(wù)服務(wù)器發(fā)布。它提供了可靠的、可變尺度的、分布式的運(yùn)行ActiveX組件所需的編程環(huán)境和運(yùn)行時(shí)執(zhí)行環(huán)境。

  了解更多的信息:

  查詢微軟事務(wù)管理服務(wù)器的最新信息,可到其Web站點(diǎn)(http://www.microsoft.com/transaction/

  也可以參考<<事務(wù)處理:概念和技術(shù)>> 作者:Jim Gray&Andreas Reuter ,Morgan Kaufmann出版社,1993年。

  本文所包括的內(nèi)容作為最新出版物代表了微軟公司在所討論問(wèn)題上的最新觀點(diǎn)。因?yàn)槲④洷仨殞?duì)市場(chǎng)情況作出反應(yīng),微軟不承諾解釋這些內(nèi)容,也不保證在出版日期以后的內(nèi)容的準(zhǔn)確性。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
COM, COM+ and .NET 的區(qū)別
創(chuàng)建事務(wù)性腳本 (用mts管理事務(wù)、組件)
.net下開(kāi)發(fā)COM 組件(1)
com+
Windows Server 2008 更精簡(jiǎn)更安全
了解OLE及ActiveX
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服