1 system organization 15th October 2009, 3:10 pm
ζ. ζ. †
MITR Reader
ကၽြန္ေတာ္တုိ႔ assembly အေၾကာင္း မေလ့လာခင္ ကြန္ပ်ဴတာရဲ႕ system organization ကို အရင္ ေလ့လာလုိက္ရေအာင္ဗ်ာ။
ဒီေန႔ ေခတ္ အသံုးအမ်ားဆံုး ျဖစ္တဲ့ 80×86 ကြန္ပ်ဴတာေတြမွာ ဒီဇိုငး္ပညာရွင္ john von neumann တည္ေဆာက္ခဲ့တဲ့ vna architecture ကို အသံုးျပဳၾကတယ္
vna architecture ကို အဓိက အစိတ္အပိုင္း ၃ ခုနဲ႔ ဖြဲ႔စည္းထားပါတယ္။
CPU, memory နဲ႔ input/output(I/O) device တို႔ပါပဲ
[You must be registered and logged in to see this image.]
The System Bus
vna architecture မွာ system bus ေတြကို cpu, memory နဲ႔ I/O device ေတြၾကား data ပို႔ေဆာင္ဖို႔ အသံုးျပဳပါတယ္။
အဓိက bus ၃ ခုရွိတယ္။ address bus, data bus နဲ႔ control bus တို႔ပါပဲ။
အဲဒီ bus ၃ မ်ဳိးဟာ အသံုးျပဳတဲ့ processor ေပၚမူတည္ၿပီး ကြဲၿပားႏုိင္တယ္။
(bus မွာ wire တစ္ခုခ်င္းစီက ထုတ္လႊတ္တဲ့ voltage level အနည္းအမ်ား ေပၚမူတည္ၿပီးေတာ့ 0 နဲ႔ 1 ကို ေဖာ္ျပတယ္။
bus တစ္ခုနဲ႔တစ္ခု အသံုးျပဳတဲ့ voltage ေတြက processors ေပၚမူတည္ၿပီး ကြဲၿပားႏုိင္ပါတယ္။ )
The Data Bus
data bus ကို data ေတြ အကူးအေျပာင္းလုပ္ရာမွာ အသံုးျပဳတယ္။
ဒီ bus ရဲ႔ size က processors ေပၚမူတည္ၿပီး ကြဲျပားႏုိင္တယ္
ပံုမွန္အားျဖင့္ data bus မွာ data line ၈ ၊ ၁၆ ၊ ၃၂ ၊ ၆၄ line ထိပါဝင္တယ္။
data bus မွာ ပါဝင္တဲ့ data line ေတြက one memory cycle(one clock) မွာ processor က လုပ္ေဆာင္ႏုိင္တဲ့ data ပမာဏကို ရည္ညႊန္းတာပါ။
ဥပမာ- 8 bits data bus processors ေတြက one memory cycle မွာ 1 byte(8 bits ) ပမာဏ ရွိတဲ့ data ကို handle လုပ္ႏုိင္တယ္။
ဒါေၾကာင့္ data bus မွာပါဝင္တဲ့ data line အနည္းအမ်ားေပၚမူတည္ၿပီး processor ေတြရဲ႕ data handling rate ေတြကြာ သြားတယ္။
အဲဒါေၾကာင့္ပဲ တစ္ျခား bus ေတြထက္ data bus က system ရဲ႔ performance အေပၚ သက္ေရာက္မႈ႔၇ွိလာရတယ္။
8088 နဲ႔ 80188 microprocessors မွာ data line ၈ လုိင္း( 8 bits ) ပါတယ္။
8086 , 80186, 80286, 80386SX processors ေတြမွာ 16 bits data bus ကိုအသံုးျပဳတယ္။
80386DX ကေတာ့ 32 bits ကိုအသံုးျပဳတယ္။
pentiumTM နဲ႔ Pentium Pro processors ေတြမွာ 64 bits data bus ကို အသံုးျပဳၾကတယ္။
The Address Bus
address bus က်ေတာ့ ဘယ္ေနရာက data ကို data bus က access လုပ္ရမလဲ ဆိုတာ သတ္မွတ္ေပးတယ္။
memory location နဲ႔ I/O devices ေတြကို ခြဲျခားႏုိင္ဖို႔ အတြက္ device တစ္ခုခ်င္းစီမွာ သီးျခား address bus ေတြ သတ္မွတ္ထားတယ္။
software တစ္ခုက memory location ဒါမွမဟုတ္ I/O device တစ္ခုခုကို access လုပ္ဖို႔လုိအပ္လာရင္ address bus ေပၚမွာ address တစ္ခု ကုိ assign ခ်ေပးပါတယ္။
အဲဒါဆိုရင္ assign ခ်ေပးတဲ့ address နဲ႔ ကိုက္ညီတဲ့ device ရဲ႕ address bus က data ေတြကို data bus ေပၚတင္ေပးပါလိမ့္မယ္။
address bus ရဲ႕ bit ပမာဏ (address line) ေပၚမူတည္ၿပီး cpu က assign ခ်ေပးႏုိင္တဲ့ address အေရအတြက္ ကြဲျပားသြားပါတယ္။
address line က n ဆိုရင္ cpu က address ကို 2^n ထိ assign ခ်ေပးပါတယ္။
8088 နဲ႔ 8086 မွာ address bus ကို 20 bit သတ္မွတ္ထားပါတယ္။
ဒါေၾကာင့္မို႔ ပံုေသနည္းအရ address အေရအတြက္ေပါင္း 2^20= 1,048,576 ထိ assign ခ်ေပးႏုိင္ပါတယ္။
ေနာက္ထုတ္မယ့္ 80×86 processors ေတြဆုိရင္ေတာ့ 48 bit ထိ addres bus ေတြတိုးခ်ဲ႕လာႏုိင္တယ္။ [You must be registered and logged in to see this image.]
The Control Bus
control bus ကေတာ့ processors နဲ႔ က်န္တဲ့ system ေတြၾကား ဘယ္လုိ ဆက္သြယ္မလဲဆုိတာကို ထိန္းခ်ဳပ္ပါတယ္။
control bus မွာ read and write control , system clocks, interupt line, status line ဆုိၿပီး control line ေတြပါဝင္ၾကတယ္။
read and write control line ႏွစ္ခုက data bus ေပၚက data ေတြ သြားတဲ့ လမ္းေၾကာင္း ကိုထိန္းခ်ဳပ္ပါတယ္။
အကယ္၍ line ႏွစ္ခုလံုးက logic one ျဖစ္ခဲ့ရင္ cpu နဲ႔ memory-I/O ေတြ တစ္ခုနဲ႔ တစ္ခု ဆက္သြယ္ျခင္းမရွိေၾကာင္းသိႏုိင္ပါတယ္။
read line က logic zero ျဖစ္ခဲ့ရင္ memory က ေန cpu ကုိ ေဒတာေတြ ကူးေျပာင္းေနပါလိမ့္္မယ္။
write line က logic zero ျဖစ္ခဲ့ရင္ေတာ့ cpu ကေန memory ကို ေဒတာေတြ ကူးေျပာင္းပါလိမ့္မယ္။
ကၽြန္ေတာ္တို႔ address bus က memory နဲ႔ I/O device ကို မတူညီတဲ့ address ေတြနဲ႔ ခြဲျခားသတ္မွတ္ေပးတယ္ဆိုတာ သိခဲ့ၾကၿပီးပါၿပီ။
ဒါေပမယ့္ အဲဒီ ႏွစ္ခုကို သီးျခား address bus ေတြအသံုးျပဳၿပီး သတ္မွတ္တာမဟုတ္ပါဘူး
အဲဒီ ႏွစ္ခုအတြက္ line တစ္ခုထဲမွာပဲ share လုပ္ၿပီး သံုးတာပါ။
အဲဒီ ႏွစ္ခုကို address နဲ႔ ခြဲျခားဖုိ႔ အတြက္ Control bus ကပဲ သီးျခား line တစ္ခုနဲ႔ လုပ္ေဆာင္ေပး ရပါတယ္။
What exactly is a memory location?
ကၽြန္ေတာ္တို႔ address bus က အမ်ားဆံုး 2^n အေရအတြက္ရွိတဲ့ memory location ကုိပဲ assign ခ်ေပးႏုိင္တယ္ဆိုတာ သိခဲ့ၾကပါၿပိ။
အဲဒီေတာ့ memory location ဆုိတာ အတိအက်ဘာကို ဆိုလုိတာလဲ ေလ့လာလုိက္ရေအာင္။
80×86 processors ေတြက memory ေတြကို address assign လုပ္ရမွာ byte အေျချပဳစနစ္ကို အသံဳးျပဳပါတယ္။
အဲဒီေတာ့ ကၽြန္ေတာ္တို႔ memory ေတြကို byte ေတြ နဲ႔ တည္ေဆာက္ထားတဲ့ array တစ္ခုအေနနဲ႔ စဥ္းစားၾကည့္ရေအာင္။
အဲဒါဆိုရင္ ပထမဦးဆံုး byte ရဲ႕ address က zero ျဖစ္ၿပီးေတာ့ ေနာက္ဆံုး byte အတြက္ေတာ့ 2^n-1 ျဖစ္လာလိမ့္မယ္။
20 bit address bus ရွိတဲ့ 8088 processors အတြက္ဆိုရင္ ခုလိုမ်ဳးိရလာပါလိမ့္မယ္။
Memory: array [0..1048575] of byte;
ဒါဆိုရင္ ေအာက္က ညီမွ်ျခင္း ေလးက ဘာကို ေျပာခ်င္တာလဲ ၾကည့္လုိက္ရေအာင္။
Memory [125] := 0
125 ဆိုတာ memory address ကို ရည္ညႊန္းၿပီးေတာ့ 0 ဆိုတာက value ကိုညႊန္းပါတယ္
ဒါေၾကာင့္ ညီမွ်ျခင္းအရေျပာရရင္ cpu က data bus ေပၚမွာ တန္ဖိုး zero , address bus ေပၚမွာ address 125 သတ္မွတ္ပါလိမ့္မယ္။
[You must be registered and logged in to see this image.]
CPU := Memory [125]
ဒီညီမွ်ျခင္းက်ေတာ့ cpu က address bus ေပၚက address 125 မွာ ရွိတဲ့ memory က value ကို ဖတ္ပါလိမ့္မယ္။
[You must be registered and logged in to see this image.]
ဒီညီမွ်ျခင္းေတြက Memory ထဲက byte တစ္ခုထဲကို access လုပ္တဲ့ ေနရာမွာ အသံုးဝင္ပါတယ္။
ဒါေပမယ့္ ကၽြန္ေတာ္တို႔ က byte တစ္ခုခ်င္းစီနဲ႔ပဲ အလုပ္လုပ္မွာ မဟုတ္ဘူးေလ။
အကယ္၍ processor က word ေတြ double word ေတြ ကို access လုပ္ရမယ္ ဆို ကၽြန္ေတာ္တို႔ ဘယ္လုိ လုပ္ၾကမလဲ။
memory က byte အေျချပဳ စနစ္ (byte ေတြနဲ႔ ဖြဲ႔စညး္ထားတဲ့ array) ျဖစ္ေနတာေၾကာင့္ 8 bit value ထက္ႀကီးတဲ့ data ေတြကို ကၽြန္ေတာ္တို႔ ဘယ္လုိ access လုပ္ၾကမလဲ
ေျဖရွင္းနည္းေတြက computer system ေပၚမူတည္ၿပီး ကြဲျပားျပန္ပါတယ္။
80×86 ကြန္ပ်ဴတာေတြမွာေတာ့ စကားလံုး တစ္လံုး(8 byte)အတြက္ အဲဒီ စကားလံုးရဲ႕L.O byte ကို သတ္မွတ္ထားတဲ့ address ေပၚမွာ သိမ္းၿပီးေတာ့ H.O byte ကိုေတာ့ အဲဒီ address ရဲ႕ ကပ္လွ်က္ location မွာ သိမ္းဆည္းပါတယ္။
ဒါေၾကာင့္ စကားလံုးတစ္လံုးအတြက္ဆို ကပ္လွ်က္ memory address ၂ ခု အသံုးျပဳရပါတယ္။
အဲလုိပဲ double word ေတြအတြက္ဆုိ ကပ္လွ်က္ memory location ၄ ခု အသံုးျပဳရပါတယ္။
L.O byte သိမ္းဆည္းထားတဲ့ address ကို အဲဒီ word ရဲ႕ address အျဖစ္သတ္မွတ္ပါတယ္။
[You must be registered and logged in to see this image.]
ကၽြန္ေတာ္တို႔ data bus နဲ႔ address bus မွာရွင္းခဲ့တာေတြ ကို ျပန္သံုးသပ္ၾကည့္ရေအာင္ဗ်ာ ။
8088 နဲ႔ 80188 processors ေတြ one clock cycle မွာ အကူးအေျပာင္းလုပ္ႏုိင္တဲ့ ေဒတာပမာဏက memory address တစ္ခုမွာသိမ္းႏုိင္တဲ့ ေဒတာ ပမာဏ (8 bit)နဲ႔ တူညီေနပါတယ္။
အကယ္၍ အဲဒီ processor ေတြက 4 bit ပမာဏ ရွိတဲ့ ေဒတာ ကို access လုပ္ခ်င္ရင္ ပထမ address က ရည္ညႊန္းတဲ့ 8 bit တစ္ခုလံုးကို ဖတ္ရပါလိမ့္မယ္။
ၿပီးမွ မလုိအပ္တဲ့ bit ေတြကို ignore လုပ္ပါတယ္။
တစ္ခုမွတ္ရမွာက processors ေတြ က data access လုပ္ရာမွာ သူဖတ္ခ်င္တဲ့ေနရာက စဖတ္လုိ႔မရပါဘူး
address bus က သတ္မွတ္ေပးထားတဲ့ memory location တစ္ခုရဲ႕ အစဦးဆံုး bit ကေနပဲ စဖတ္ရပါတယ္။
အကယ္၍ address တစ္ခု က ေဒတာကို ဖတ္မယ္ဆိုရင္ အဲဒီ address တစ္ခုလံုးမွာ ရွိတဲ့ 8 bit အားလံဳးကိုဖတ္ရပါတယ္ ။
8 bit ထက္ ပိုလည္းမပို လုိလည္းမလုိပါဘူး။
ၿပီးေတာ့ address ေတြက ကိန္းျပည့္ေတြအေနနဲ႔ပဲတည္ရွိပါတယ္ 125 ဆို 125 ေပါ့ေနာ္။
8 bit ထက္ ပိုငယ္တဲ့ data packet ကို access လုပ္ဖုိ႔ address 125.5 ဆိုတာမရွိပါဘူး။
အကယ္၍ cpu က one clock cycle မွာ address တစ္ခုစီက 8 bit ပဲ access လုပ္ႏိုင္မယ္ဆုိရင္
8086, 80186, 80286, and 80386sx processor ေတြက်ေတာ့ေရာ။
အဲဒီ processor ေတြလည္း 8 bit address bus ကိုပဲသံုးတာပါပဲ။
ဒါေပမယ့္ သူတို႔က one clock cycle မွာ 8 bit ထက္ ပိုတဲ့ data ကို access လုပ္ႏုိင္ပါတယ္။
သူတို႔ေတြက်ေတာ့ multiple memory operation နဲ႔ အလုပ္လုပ္ပါတယ္။
one operation မွာ one data packet (8 bit) ကို access လုပ္ေစပါတယ္။
[You must be registered and logged in to see this image.]
16 bit data bus ရွိတဲ့ processor ေတြက်ေတာ့ memory ကုိ ေနရာ ႏွစ္ေနရာခြဲသိမ္းပါတယ္ ။
even bank နဲ႕ odd bank ဆိုၿပီးေတာ့ေပါ့။
ျပန္ၿပီး access လုပ္ေတာ့ L.O byte ကို အရင္ဆံုး ဖတ္ပါတယ္။
ေနာက္မွာ ကပ္လွ်က္ address က H.O byte ကို ဖတ္ပါတယ္။
အဲဒိနည္းမွာ ျပႆနာႏွစ္ခုရွိပါတယ္။
အကယ္၍ address 125 မွာ L.O byte ရွိၿပီးေတာ့ address 126 မွာ H.O byte ရွိတယ္ဆုိပါစုိ႔။
[You must be registered and logged in to see this image.]
အဲဒါဆိုရင္ ပံု မွာျပထားတဲ့အတုိငး္ data bus line ၈ ကေန ၁၅ က odd bank(address 125) မွာရွိတဲ့ data ကို H.O byte အျဖစ္ ဖတ္မယ္။
ေနာက္ data bus line ၀ ကေန ၇ က even bank(address 126) မွာရွိတဲ့ data ကို L.O byte အျဖစ္ ဖတ္ပါတယ္။
အဲဒါဆုိရင္ cpu က L.O byte မွာရွိရမယ့္ data ကို H.O byte မွာ ထားမိၿပီးေတာ့ H.O byte မွာ ရွိရမယ့္ data က်ေတာ့ L.O byte ဆီ ေရာက္သြားလိမ့္မယ္။
ဒါေပမယ့္ ဒီလုိမ်ဳိးျဖစ္လာခဲ့ရင္ 80×86 cpu ေတြက data bus ၈ ကေန ၁၅ ထိ မွာ သိမ္းထားတဲ့ data ကို L.O byte အျဖစ္ automatic ေျပာင္းေပးပါတယ္။
ဒါေပမယ့္ delay ေတာ့ရွိတာေပါ့ေနာ္။
ေနာက္ ျပႆနာတစ္ခုက ပိုဆုိးပါတယ္။
cpu က word ေတြကို access လုပ္တဲ့ေနရာမွာ address မတူတဲ့ byte ႏွစ္ခုကို access လုပ္ရမွာပါ။
အဲ့ဒီေတာ့ ဘယ္ address ကို ဒီ word ရဲ႕ address အျဖစ္ယူမွာလဲ။
80×86 cpus ေတြကေတာ့ even bank က address ကို ယူပါတယ္။
အကယ္၍ odd address မွာ L.O byte ရွိရင္ရာ။ ေစာနကေျပာခဲ့သလုိပါပဲ
80×86 cpu ေတြမွာ address ကို ဘယ္ေတာ့မွ odd နဲ႔ မေဖာ္ျပပါဘူ။
အၿမဲတမ္း even နဲ႔ပဲေဖာ္ျပၾကပါတယ္။
သီအုိရီအရ ဆိုရင္ cpu က address ၁၂၅ နဲ႔ ၁၂၆ မွာရွိတဲ့ data ကိုယူမယ္ဆုိရင္ cpu က ၁၂၄ ကို ပဲျပန္ညႊန္းပါလိမ့္မယ္။
ၿပီးေတာ့ ၁၂၄ မွာရွိတဲ့ value ကို L.O byte အျဖစ္သတ္မွတ္ၿပီး 125 က value ကိုေတာ့ H.O byte အျဖစ္သတ္မွတ္ပါလိမ့္မယ္။
ကၽြန္ေတာ္တုိ႔ လုိခ်င္တဲ့ 125 နဲ႔ 126 က value ကို ေတာ့ ရမွာမဟုတ္ပါဘူး။
ဒါေပမယ့္ 16 bit 80x86 CPUs ေတြက ဒီျပႆနာကို ေျဖရွင္းထားပါတယ္။
အကယ္၍ odd address က value ကိုသာ program က access လုပ္မယ္ဆိုရင္ cpu က program ကေတာင္းတဲ့ address အတုိင္း အတိအက်လုပ္ေပးပါတယ္။
တစ္ခုေတာ့ရွိတာေပါ့ေနာ္အကယ္၍ address 125 က ေဒတာဆိုပါစို႔။
သူက ၁၂၄ ၁၂၅ နဲ႔ ၁၂၆ က ေဒတာေတြကို access လုပ္ပါတယ္ ။ ကုိက္ညီတဲ့ byte ႏွစ္ခုကို သာ ေရြးယူရပါတယ္။ ၿပီးေတာ့ data bus မွာတစ္ခါျပန္ၿပိး
L.O နဲ႔ H.O byte ျပန္ေျပာင္းေပးရပါတယ္။
အဲဒါေၾကာင့္ odd address မွာ သိမ္းထားတဲ့ value ကို access လုပ္မယ္ဆိုရင္ even address ထက္ပိုၾကာပါတယ္။
ဒါေၾကာင့္ program ရဲ႕ speed ကိုျမန္ေစခ်င္ရင္ memory arrangement ကို ဂရုစုိက္သင့္ပါတယ္။
ႏို႔မုိ႔ ဆို ကုိယ့္ program က လုိအပ္တာထက္ ႏွစ္ဆေလာက္ေႏွးေနလိမ့္မယ္။
ကၽြန္ေတာ္တို႔ assembly ေရးတယ္ဆိုတာ ျမန္ေစခ်င္လုိ႔ပဲမဟုတ္လား
၁၆ bit က 2 banks သံုးသလုိ 32 bit 80x86 processors (the 80386, 80486, and Pentium Overdrive) ေတြက bank ၄ ခုသံုးပါတယ္။
၃၂ bit cpu ေတြမွာလည္း 16 bit cpu လုိပဲ ျပႆနာေတြၾကံဳေတြ႔ရပါတယ္။
ဒါေပမယ့္ ျပႆနာေပၚႏုိင္ေျခက 16 bit ထက္ တစ္ဝက္ေလာက္နည္းပါတယ္။
အကယ္၍ word ရဲ႕ value ကို သိမ္းထားတဲ address က ၄ နဲ႔စားလုိ႔မ ျပတ္ရင္ single memory operation နဲ႔တင္ access လုပ္လုိ႔မျပတ္ပဲ two memory operation နဲ႔ လုပ္ရပါတယ္။
[You must be registered and logged in to see this image.]
အဲဒီေတာ့ ကၽြန္ေတာ္တုိ႔ ခုေလ့လာခဲ့တဲ့ system bus ေတြ မွာ ေနာက္ဆံုးနိဂံုးခ်ဳပ္လုိက္ရင္ word value ဆုိရင္ even address မွာပဲ သိမ္းသင့္ၿပီးေတာ့
double word ေတြဆိုရင္ေတာ့ 4 နဲ႔စားလုိ႔ျပတ္တဲ့ address မွာ သိမ္းသင့္ပါတယ္။
အဲဒါဆိုရင္ ကၽြန္ေတာ္တို႔ရဲ႕ program က ပိုၿပီးျမန္ဆန္လာပါလိမ့္မယ္။
System Timing
ခု ကၽြန္ေတာ္တို႔ေတြ လက္ရွိသံုးေနတဲ့ computer ေတြက အရင္ တံုးက ထက္ ပိုမုိျမန္ဆန္လာေနေပမယ့္ သူတို႔ ေတြ အေသးငယ္ဆံုး လုပ္ငန္းတစ္ခုကိုလုပ္ေဆာင္ရာမွာ လုိအပ္တဲ့ အခ်ိန္ကို ကၽြန္ေတာ္တို႔ တြက္ခ်က္ႏိုင္ပါေသးတယ္။
VNA architecture(Von Neumann) ကြန္ပ်ဴတာေတြမွာဆုိရင္ လုပ္ငန္းစဥ္ေတြအားလံုးကို အစဥ္လုိက္ လုပ္ေဆာင္ပါတယ္။
ကြန္ပ်ဴတာတစ္ခုက ႀကိဳတင္သတ္မွတ္ထားတဲ့ အစီအစဥ္အတုိင္းပဲ လုပ္ေဆာင္ႏိုင္ပါတယ္။
အကယ္၍
I:=J;
I:=I*5+2
ဆိုတဲ့ sequence မွာဆိုရင္ I:=I*5+2 ကိုအရင္လုပ္ေဆာင္မွာမဟုတ္ပါဘူး
အဲဒါဆိုရင္ေသခ်ာတာတစ္ခုကေတာ့ ဘယ္ဟာကို အရင္ လုပ္ၿပီး ဘယ္တစ္ခုကို ေနာက္မွလုပ္မလဲဆုိတာ ထိန္းခ်ဳပ္ဖုိ႔ လုိအပ္လာပါတယ္
ကၽြန္ေတာ္တို႔ program ကို ျမန္ဆန္ေစဖုိ႔ဆိုရင္ cpu ေတြက statement ေတြကို ဘယ္လုိ execute လုပ္သလဲနဲ႔ အဲလုိ execute လုပ္ဖုိ႔ အခ်ိန္ဘယ္ေလာက္ၾကာလဲ သိဖို႔ လုိအပ္ပါတယ္။
အဲဒါကို သိဖို႔အတြက္ ကၽြန္ေတာ္တို႔ system clock အေၾကာင္း သိထားရပါမယ္။ [You must be registered and logged in to see this image.]
မနက္ျဖန္မွ ဆက္တင္လုိက္ေတာ့မယ္ေနာ္။ မနက္ျဖန္ဆိုရင္ CPU registe နဲ႔ mov function အေၾကာင္းပါတင္ေပးပါ့မယ္။
စိတ္ဆိုးနဲ႔ admin ေရ စာေမးပြဲမၿပီးေသးလုိ႔ပါ။
[You must be registered and logged in to see this image.]
ဒီေန႔ ေခတ္ အသံုးအမ်ားဆံုး ျဖစ္တဲ့ 80×86 ကြန္ပ်ဴတာေတြမွာ ဒီဇိုငး္ပညာရွင္ john von neumann တည္ေဆာက္ခဲ့တဲ့ vna architecture ကို အသံုးျပဳၾကတယ္
vna architecture ကို အဓိက အစိတ္အပိုင္း ၃ ခုနဲ႔ ဖြဲ႔စည္းထားပါတယ္။
CPU, memory နဲ႔ input/output(I/O) device တို႔ပါပဲ
[You must be registered and logged in to see this image.]
The System Bus
vna architecture မွာ system bus ေတြကို cpu, memory နဲ႔ I/O device ေတြၾကား data ပို႔ေဆာင္ဖို႔ အသံုးျပဳပါတယ္။
အဓိက bus ၃ ခုရွိတယ္။ address bus, data bus နဲ႔ control bus တို႔ပါပဲ။
အဲဒီ bus ၃ မ်ဳိးဟာ အသံုးျပဳတဲ့ processor ေပၚမူတည္ၿပီး ကြဲၿပားႏုိင္တယ္။
(bus မွာ wire တစ္ခုခ်င္းစီက ထုတ္လႊတ္တဲ့ voltage level အနည္းအမ်ား ေပၚမူတည္ၿပီးေတာ့ 0 နဲ႔ 1 ကို ေဖာ္ျပတယ္။
bus တစ္ခုနဲ႔တစ္ခု အသံုးျပဳတဲ့ voltage ေတြက processors ေပၚမူတည္ၿပီး ကြဲၿပားႏုိင္ပါတယ္။ )
The Data Bus
data bus ကို data ေတြ အကူးအေျပာင္းလုပ္ရာမွာ အသံုးျပဳတယ္။
ဒီ bus ရဲ႔ size က processors ေပၚမူတည္ၿပီး ကြဲျပားႏုိင္တယ္
ပံုမွန္အားျဖင့္ data bus မွာ data line ၈ ၊ ၁၆ ၊ ၃၂ ၊ ၆၄ line ထိပါဝင္တယ္။
data bus မွာ ပါဝင္တဲ့ data line ေတြက one memory cycle(one clock) မွာ processor က လုပ္ေဆာင္ႏုိင္တဲ့ data ပမာဏကို ရည္ညႊန္းတာပါ။
ဥပမာ- 8 bits data bus processors ေတြက one memory cycle မွာ 1 byte(8 bits ) ပမာဏ ရွိတဲ့ data ကို handle လုပ္ႏုိင္တယ္။
ဒါေၾကာင့္ data bus မွာပါဝင္တဲ့ data line အနည္းအမ်ားေပၚမူတည္ၿပီး processor ေတြရဲ႕ data handling rate ေတြကြာ သြားတယ္။
အဲဒါေၾကာင့္ပဲ တစ္ျခား bus ေတြထက္ data bus က system ရဲ႔ performance အေပၚ သက္ေရာက္မႈ႔၇ွိလာရတယ္။
8088 နဲ႔ 80188 microprocessors မွာ data line ၈ လုိင္း( 8 bits ) ပါတယ္။
8086 , 80186, 80286, 80386SX processors ေတြမွာ 16 bits data bus ကိုအသံုးျပဳတယ္။
80386DX ကေတာ့ 32 bits ကိုအသံုးျပဳတယ္။
pentiumTM နဲ႔ Pentium Pro processors ေတြမွာ 64 bits data bus ကို အသံုးျပဳၾကတယ္။
The Address Bus
address bus က်ေတာ့ ဘယ္ေနရာက data ကို data bus က access လုပ္ရမလဲ ဆိုတာ သတ္မွတ္ေပးတယ္။
memory location နဲ႔ I/O devices ေတြကို ခြဲျခားႏုိင္ဖို႔ အတြက္ device တစ္ခုခ်င္းစီမွာ သီးျခား address bus ေတြ သတ္မွတ္ထားတယ္။
software တစ္ခုက memory location ဒါမွမဟုတ္ I/O device တစ္ခုခုကို access လုပ္ဖို႔လုိအပ္လာရင္ address bus ေပၚမွာ address တစ္ခု ကုိ assign ခ်ေပးပါတယ္။
အဲဒါဆိုရင္ assign ခ်ေပးတဲ့ address နဲ႔ ကိုက္ညီတဲ့ device ရဲ႕ address bus က data ေတြကို data bus ေပၚတင္ေပးပါလိမ့္မယ္။
address bus ရဲ႕ bit ပမာဏ (address line) ေပၚမူတည္ၿပီး cpu က assign ခ်ေပးႏုိင္တဲ့ address အေရအတြက္ ကြဲျပားသြားပါတယ္။
address line က n ဆိုရင္ cpu က address ကို 2^n ထိ assign ခ်ေပးပါတယ္။
8088 နဲ႔ 8086 မွာ address bus ကို 20 bit သတ္မွတ္ထားပါတယ္။
ဒါေၾကာင့္မို႔ ပံုေသနည္းအရ address အေရအတြက္ေပါင္း 2^20= 1,048,576 ထိ assign ခ်ေပးႏုိင္ပါတယ္။
ေနာက္ထုတ္မယ့္ 80×86 processors ေတြဆုိရင္ေတာ့ 48 bit ထိ addres bus ေတြတိုးခ်ဲ႕လာႏုိင္တယ္။ [You must be registered and logged in to see this image.]
The Control Bus
control bus ကေတာ့ processors နဲ႔ က်န္တဲ့ system ေတြၾကား ဘယ္လုိ ဆက္သြယ္မလဲဆုိတာကို ထိန္းခ်ဳပ္ပါတယ္။
control bus မွာ read and write control , system clocks, interupt line, status line ဆုိၿပီး control line ေတြပါဝင္ၾကတယ္။
read and write control line ႏွစ္ခုက data bus ေပၚက data ေတြ သြားတဲ့ လမ္းေၾကာင္း ကိုထိန္းခ်ဳပ္ပါတယ္။
အကယ္၍ line ႏွစ္ခုလံုးက logic one ျဖစ္ခဲ့ရင္ cpu နဲ႔ memory-I/O ေတြ တစ္ခုနဲ႔ တစ္ခု ဆက္သြယ္ျခင္းမရွိေၾကာင္းသိႏုိင္ပါတယ္။
read line က logic zero ျဖစ္ခဲ့ရင္ memory က ေန cpu ကုိ ေဒတာေတြ ကူးေျပာင္းေနပါလိမ့္္မယ္။
write line က logic zero ျဖစ္ခဲ့ရင္ေတာ့ cpu ကေန memory ကို ေဒတာေတြ ကူးေျပာင္းပါလိမ့္မယ္။
ကၽြန္ေတာ္တို႔ address bus က memory နဲ႔ I/O device ကို မတူညီတဲ့ address ေတြနဲ႔ ခြဲျခားသတ္မွတ္ေပးတယ္ဆိုတာ သိခဲ့ၾကၿပီးပါၿပီ။
ဒါေပမယ့္ အဲဒီ ႏွစ္ခုကို သီးျခား address bus ေတြအသံုးျပဳၿပီး သတ္မွတ္တာမဟုတ္ပါဘူး
အဲဒီ ႏွစ္ခုအတြက္ line တစ္ခုထဲမွာပဲ share လုပ္ၿပီး သံုးတာပါ။
အဲဒီ ႏွစ္ခုကို address နဲ႔ ခြဲျခားဖုိ႔ အတြက္ Control bus ကပဲ သီးျခား line တစ္ခုနဲ႔ လုပ္ေဆာင္ေပး ရပါတယ္။
What exactly is a memory location?
ကၽြန္ေတာ္တို႔ address bus က အမ်ားဆံုး 2^n အေရအတြက္ရွိတဲ့ memory location ကုိပဲ assign ခ်ေပးႏုိင္တယ္ဆိုတာ သိခဲ့ၾကပါၿပိ။
အဲဒီေတာ့ memory location ဆုိတာ အတိအက်ဘာကို ဆိုလုိတာလဲ ေလ့လာလုိက္ရေအာင္။
80×86 processors ေတြက memory ေတြကို address assign လုပ္ရမွာ byte အေျချပဳစနစ္ကို အသံဳးျပဳပါတယ္။
အဲဒီေတာ့ ကၽြန္ေတာ္တို႔ memory ေတြကို byte ေတြ နဲ႔ တည္ေဆာက္ထားတဲ့ array တစ္ခုအေနနဲ႔ စဥ္းစားၾကည့္ရေအာင္။
အဲဒါဆိုရင္ ပထမဦးဆံုး byte ရဲ႕ address က zero ျဖစ္ၿပီးေတာ့ ေနာက္ဆံုး byte အတြက္ေတာ့ 2^n-1 ျဖစ္လာလိမ့္မယ္။
20 bit address bus ရွိတဲ့ 8088 processors အတြက္ဆိုရင္ ခုလိုမ်ဳးိရလာပါလိမ့္မယ္။
Memory: array [0..1048575] of byte;
ဒါဆိုရင္ ေအာက္က ညီမွ်ျခင္း ေလးက ဘာကို ေျပာခ်င္တာလဲ ၾကည့္လုိက္ရေအာင္။
Memory [125] := 0
125 ဆိုတာ memory address ကို ရည္ညႊန္းၿပီးေတာ့ 0 ဆိုတာက value ကိုညႊန္းပါတယ္
ဒါေၾကာင့္ ညီမွ်ျခင္းအရေျပာရရင္ cpu က data bus ေပၚမွာ တန္ဖိုး zero , address bus ေပၚမွာ address 125 သတ္မွတ္ပါလိမ့္မယ္။
[You must be registered and logged in to see this image.]
CPU := Memory [125]
ဒီညီမွ်ျခင္းက်ေတာ့ cpu က address bus ေပၚက address 125 မွာ ရွိတဲ့ memory က value ကို ဖတ္ပါလိမ့္မယ္။
[You must be registered and logged in to see this image.]
ဒီညီမွ်ျခင္းေတြက Memory ထဲက byte တစ္ခုထဲကို access လုပ္တဲ့ ေနရာမွာ အသံုးဝင္ပါတယ္။
ဒါေပမယ့္ ကၽြန္ေတာ္တို႔ က byte တစ္ခုခ်င္းစီနဲ႔ပဲ အလုပ္လုပ္မွာ မဟုတ္ဘူးေလ။
အကယ္၍ processor က word ေတြ double word ေတြ ကို access လုပ္ရမယ္ ဆို ကၽြန္ေတာ္တို႔ ဘယ္လုိ လုပ္ၾကမလဲ။
memory က byte အေျချပဳ စနစ္ (byte ေတြနဲ႔ ဖြဲ႔စညး္ထားတဲ့ array) ျဖစ္ေနတာေၾကာင့္ 8 bit value ထက္ႀကီးတဲ့ data ေတြကို ကၽြန္ေတာ္တို႔ ဘယ္လုိ access လုပ္ၾကမလဲ
ေျဖရွင္းနည္းေတြက computer system ေပၚမူတည္ၿပီး ကြဲျပားျပန္ပါတယ္။
80×86 ကြန္ပ်ဴတာေတြမွာေတာ့ စကားလံုး တစ္လံုး(8 byte)အတြက္ အဲဒီ စကားလံုးရဲ႕L.O byte ကို သတ္မွတ္ထားတဲ့ address ေပၚမွာ သိမ္းၿပီးေတာ့ H.O byte ကိုေတာ့ အဲဒီ address ရဲ႕ ကပ္လွ်က္ location မွာ သိမ္းဆည္းပါတယ္။
ဒါေၾကာင့္ စကားလံုးတစ္လံုးအတြက္ဆို ကပ္လွ်က္ memory address ၂ ခု အသံုးျပဳရပါတယ္။
အဲလုိပဲ double word ေတြအတြက္ဆုိ ကပ္လွ်က္ memory location ၄ ခု အသံုးျပဳရပါတယ္။
L.O byte သိမ္းဆည္းထားတဲ့ address ကို အဲဒီ word ရဲ႕ address အျဖစ္သတ္မွတ္ပါတယ္။
[You must be registered and logged in to see this image.]
ကၽြန္ေတာ္တို႔ data bus နဲ႔ address bus မွာရွင္းခဲ့တာေတြ ကို ျပန္သံုးသပ္ၾကည့္ရေအာင္ဗ်ာ ။
8088 နဲ႔ 80188 processors ေတြ one clock cycle မွာ အကူးအေျပာင္းလုပ္ႏုိင္တဲ့ ေဒတာပမာဏက memory address တစ္ခုမွာသိမ္းႏုိင္တဲ့ ေဒတာ ပမာဏ (8 bit)နဲ႔ တူညီေနပါတယ္။
အကယ္၍ အဲဒီ processor ေတြက 4 bit ပမာဏ ရွိတဲ့ ေဒတာ ကို access လုပ္ခ်င္ရင္ ပထမ address က ရည္ညႊန္းတဲ့ 8 bit တစ္ခုလံုးကို ဖတ္ရပါလိမ့္မယ္။
ၿပီးမွ မလုိအပ္တဲ့ bit ေတြကို ignore လုပ္ပါတယ္။
တစ္ခုမွတ္ရမွာက processors ေတြ က data access လုပ္ရာမွာ သူဖတ္ခ်င္တဲ့ေနရာက စဖတ္လုိ႔မရပါဘူး
address bus က သတ္မွတ္ေပးထားတဲ့ memory location တစ္ခုရဲ႕ အစဦးဆံုး bit ကေနပဲ စဖတ္ရပါတယ္။
အကယ္၍ address တစ္ခု က ေဒတာကို ဖတ္မယ္ဆိုရင္ အဲဒီ address တစ္ခုလံုးမွာ ရွိတဲ့ 8 bit အားလံဳးကိုဖတ္ရပါတယ္ ။
8 bit ထက္ ပိုလည္းမပို လုိလည္းမလုိပါဘူး။
ၿပီးေတာ့ address ေတြက ကိန္းျပည့္ေတြအေနနဲ႔ပဲတည္ရွိပါတယ္ 125 ဆို 125 ေပါ့ေနာ္။
8 bit ထက္ ပိုငယ္တဲ့ data packet ကို access လုပ္ဖုိ႔ address 125.5 ဆိုတာမရွိပါဘူး။
အကယ္၍ cpu က one clock cycle မွာ address တစ္ခုစီက 8 bit ပဲ access လုပ္ႏိုင္မယ္ဆုိရင္
8086, 80186, 80286, and 80386sx processor ေတြက်ေတာ့ေရာ။
အဲဒီ processor ေတြလည္း 8 bit address bus ကိုပဲသံုးတာပါပဲ။
ဒါေပမယ့္ သူတို႔က one clock cycle မွာ 8 bit ထက္ ပိုတဲ့ data ကို access လုပ္ႏုိင္ပါတယ္။
သူတို႔ေတြက်ေတာ့ multiple memory operation နဲ႔ အလုပ္လုပ္ပါတယ္။
one operation မွာ one data packet (8 bit) ကို access လုပ္ေစပါတယ္။
[You must be registered and logged in to see this image.]
16 bit data bus ရွိတဲ့ processor ေတြက်ေတာ့ memory ကုိ ေနရာ ႏွစ္ေနရာခြဲသိမ္းပါတယ္ ။
even bank နဲ႕ odd bank ဆိုၿပီးေတာ့ေပါ့။
ျပန္ၿပီး access လုပ္ေတာ့ L.O byte ကို အရင္ဆံုး ဖတ္ပါတယ္။
ေနာက္မွာ ကပ္လွ်က္ address က H.O byte ကို ဖတ္ပါတယ္။
အဲဒိနည္းမွာ ျပႆနာႏွစ္ခုရွိပါတယ္။
အကယ္၍ address 125 မွာ L.O byte ရွိၿပီးေတာ့ address 126 မွာ H.O byte ရွိတယ္ဆုိပါစုိ႔။
[You must be registered and logged in to see this image.]
အဲဒါဆိုရင္ ပံု မွာျပထားတဲ့အတုိငး္ data bus line ၈ ကေန ၁၅ က odd bank(address 125) မွာရွိတဲ့ data ကို H.O byte အျဖစ္ ဖတ္မယ္။
ေနာက္ data bus line ၀ ကေန ၇ က even bank(address 126) မွာရွိတဲ့ data ကို L.O byte အျဖစ္ ဖတ္ပါတယ္။
အဲဒါဆုိရင္ cpu က L.O byte မွာရွိရမယ့္ data ကို H.O byte မွာ ထားမိၿပီးေတာ့ H.O byte မွာ ရွိရမယ့္ data က်ေတာ့ L.O byte ဆီ ေရာက္သြားလိမ့္မယ္။
ဒါေပမယ့္ ဒီလုိမ်ဳိးျဖစ္လာခဲ့ရင္ 80×86 cpu ေတြက data bus ၈ ကေန ၁၅ ထိ မွာ သိမ္းထားတဲ့ data ကို L.O byte အျဖစ္ automatic ေျပာင္းေပးပါတယ္။
ဒါေပမယ့္ delay ေတာ့ရွိတာေပါ့ေနာ္။
ေနာက္ ျပႆနာတစ္ခုက ပိုဆုိးပါတယ္။
cpu က word ေတြကို access လုပ္တဲ့ေနရာမွာ address မတူတဲ့ byte ႏွစ္ခုကို access လုပ္ရမွာပါ။
အဲ့ဒီေတာ့ ဘယ္ address ကို ဒီ word ရဲ႕ address အျဖစ္ယူမွာလဲ။
80×86 cpus ေတြကေတာ့ even bank က address ကို ယူပါတယ္။
အကယ္၍ odd address မွာ L.O byte ရွိရင္ရာ။ ေစာနကေျပာခဲ့သလုိပါပဲ
80×86 cpu ေတြမွာ address ကို ဘယ္ေတာ့မွ odd နဲ႔ မေဖာ္ျပပါဘူ။
အၿမဲတမ္း even နဲ႔ပဲေဖာ္ျပၾကပါတယ္။
သီအုိရီအရ ဆိုရင္ cpu က address ၁၂၅ နဲ႔ ၁၂၆ မွာရွိတဲ့ data ကိုယူမယ္ဆုိရင္ cpu က ၁၂၄ ကို ပဲျပန္ညႊန္းပါလိမ့္မယ္။
ၿပီးေတာ့ ၁၂၄ မွာရွိတဲ့ value ကို L.O byte အျဖစ္သတ္မွတ္ၿပီး 125 က value ကိုေတာ့ H.O byte အျဖစ္သတ္မွတ္ပါလိမ့္မယ္။
ကၽြန္ေတာ္တုိ႔ လုိခ်င္တဲ့ 125 နဲ႔ 126 က value ကို ေတာ့ ရမွာမဟုတ္ပါဘူး။
ဒါေပမယ့္ 16 bit 80x86 CPUs ေတြက ဒီျပႆနာကို ေျဖရွင္းထားပါတယ္။
အကယ္၍ odd address က value ကိုသာ program က access လုပ္မယ္ဆိုရင္ cpu က program ကေတာင္းတဲ့ address အတုိင္း အတိအက်လုပ္ေပးပါတယ္။
တစ္ခုေတာ့ရွိတာေပါ့ေနာ္အကယ္၍ address 125 က ေဒတာဆိုပါစို႔။
သူက ၁၂၄ ၁၂၅ နဲ႔ ၁၂၆ က ေဒတာေတြကို access လုပ္ပါတယ္ ။ ကုိက္ညီတဲ့ byte ႏွစ္ခုကို သာ ေရြးယူရပါတယ္။ ၿပီးေတာ့ data bus မွာတစ္ခါျပန္ၿပိး
L.O နဲ႔ H.O byte ျပန္ေျပာင္းေပးရပါတယ္။
အဲဒါေၾကာင့္ odd address မွာ သိမ္းထားတဲ့ value ကို access လုပ္မယ္ဆိုရင္ even address ထက္ပိုၾကာပါတယ္။
ဒါေၾကာင့္ program ရဲ႕ speed ကိုျမန္ေစခ်င္ရင္ memory arrangement ကို ဂရုစုိက္သင့္ပါတယ္။
ႏို႔မုိ႔ ဆို ကုိယ့္ program က လုိအပ္တာထက္ ႏွစ္ဆေလာက္ေႏွးေနလိမ့္မယ္။
ကၽြန္ေတာ္တို႔ assembly ေရးတယ္ဆိုတာ ျမန္ေစခ်င္လုိ႔ပဲမဟုတ္လား
၁၆ bit က 2 banks သံုးသလုိ 32 bit 80x86 processors (the 80386, 80486, and Pentium Overdrive) ေတြက bank ၄ ခုသံုးပါတယ္။
၃၂ bit cpu ေတြမွာလည္း 16 bit cpu လုိပဲ ျပႆနာေတြၾကံဳေတြ႔ရပါတယ္။
ဒါေပမယ့္ ျပႆနာေပၚႏုိင္ေျခက 16 bit ထက္ တစ္ဝက္ေလာက္နည္းပါတယ္။
အကယ္၍ word ရဲ႕ value ကို သိမ္းထားတဲ address က ၄ နဲ႔စားလုိ႔မ ျပတ္ရင္ single memory operation နဲ႔တင္ access လုပ္လုိ႔မျပတ္ပဲ two memory operation နဲ႔ လုပ္ရပါတယ္။
[You must be registered and logged in to see this image.]
အဲဒီေတာ့ ကၽြန္ေတာ္တုိ႔ ခုေလ့လာခဲ့တဲ့ system bus ေတြ မွာ ေနာက္ဆံုးနိဂံုးခ်ဳပ္လုိက္ရင္ word value ဆုိရင္ even address မွာပဲ သိမ္းသင့္ၿပီးေတာ့
double word ေတြဆိုရင္ေတာ့ 4 နဲ႔စားလုိ႔ျပတ္တဲ့ address မွာ သိမ္းသင့္ပါတယ္။
အဲဒါဆိုရင္ ကၽြန္ေတာ္တို႔ရဲ႕ program က ပိုၿပီးျမန္ဆန္လာပါလိမ့္မယ္။
System Timing
ခု ကၽြန္ေတာ္တို႔ေတြ လက္ရွိသံုးေနတဲ့ computer ေတြက အရင္ တံုးက ထက္ ပိုမုိျမန္ဆန္လာေနေပမယ့္ သူတို႔ ေတြ အေသးငယ္ဆံုး လုပ္ငန္းတစ္ခုကိုလုပ္ေဆာင္ရာမွာ လုိအပ္တဲ့ အခ်ိန္ကို ကၽြန္ေတာ္တို႔ တြက္ခ်က္ႏိုင္ပါေသးတယ္။
VNA architecture(Von Neumann) ကြန္ပ်ဴတာေတြမွာဆုိရင္ လုပ္ငန္းစဥ္ေတြအားလံုးကို အစဥ္လုိက္ လုပ္ေဆာင္ပါတယ္။
ကြန္ပ်ဴတာတစ္ခုက ႀကိဳတင္သတ္မွတ္ထားတဲ့ အစီအစဥ္အတုိင္းပဲ လုပ္ေဆာင္ႏိုင္ပါတယ္။
အကယ္၍
I:=J;
I:=I*5+2
ဆိုတဲ့ sequence မွာဆိုရင္ I:=I*5+2 ကိုအရင္လုပ္ေဆာင္မွာမဟုတ္ပါဘူး
အဲဒါဆိုရင္ေသခ်ာတာတစ္ခုကေတာ့ ဘယ္ဟာကို အရင္ လုပ္ၿပီး ဘယ္တစ္ခုကို ေနာက္မွလုပ္မလဲဆုိတာ ထိန္းခ်ဳပ္ဖုိ႔ လုိအပ္လာပါတယ္
ကၽြန္ေတာ္တို႔ program ကို ျမန္ဆန္ေစဖုိ႔ဆိုရင္ cpu ေတြက statement ေတြကို ဘယ္လုိ execute လုပ္သလဲနဲ႔ အဲလုိ execute လုပ္ဖုိ႔ အခ်ိန္ဘယ္ေလာက္ၾကာလဲ သိဖို႔ လုိအပ္ပါတယ္။
အဲဒါကို သိဖို႔အတြက္ ကၽြန္ေတာ္တို႔ system clock အေၾကာင္း သိထားရပါမယ္။ [You must be registered and logged in to see this image.]
မနက္ျဖန္မွ ဆက္တင္လုိက္ေတာ့မယ္ေနာ္။ မနက္ျဖန္ဆိုရင္ CPU registe နဲ႔ mov function အေၾကာင္းပါတင္ေပးပါ့မယ္။
စိတ္ဆိုးနဲ႔ admin ေရ စာေမးပြဲမၿပီးေသးလုိ႔ပါ။
[You must be registered and logged in to see this image.]