How do programs work?

Programmer တွေရေးလိုက်တဲ့ program တွေကို ဘယ်လိုတွေ အလုပ်လုပ်သွားပြီး Operating System, CPU, Hardware တွေထိဆင်းသွားတယ်ဆိုတာမျိုး အကြမ်းဖျင်းထောက်နားလည်ထားရင် မဆိုးဘူးလို.မြင်တယ်။

အကုန်သိဖို.ကလဲ မလွယ်ဘူးပေါ့။ သင်တန်းမှာရှင်းပြဖူးတာလေးပါ။ အောက်က Java Hello World Program ပေါ့
public class Main {
public static void main(String[] args) {
System.out.println(“Hello World”);
}
}
အဲဒီ program ကို ကွန်ပျူတာက တိုက်ရိုက် run နိုင်လားဆိုတော့ မ run နိုင်ဘူး။ Computer သည် electornic hardware ဖြစ်တယ် အဲ့တော့ သူသည် electornic on/off နဲ.အလုပ်လုပ်မယ်။ on/off ကို 0 1 အနေနဲ.ပဲသတ်မှတ်ကြတယ်ပေါ့။

ခုနက Java Program ကို run ဖို. ပထမအဆင့်ဘာလုပ်ရလဲဆိုတော့ Java compiler နဲ. compile လုပ်ရတယ်။ Java Compiler သည် Java source code ကိုယူပြီးတော့ byte code ထုတ်လိုက်တယ်။ အထဲမှာ အဆင့်ဆင့် grammar မှန်မမှန်စစ်တယ် နောက် abstract syntax tree ထုတ်တယ် အဲ့ကနေ code generation လုပ်ပြီး bytecode ကိုထုတ်တယ်။
Main အတွက် byte code ဆိုဒါမျိုးလေးရမယ်

public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello World
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 3: 0
line 4: 8
bytecode က အကုန်မဟုတ်သေးဘူး တချို.ဟာတွေ ချန်ခဲ့တာ။ byte code သည် Java Virtual Machine အပေါ်မှာ run လို.ရမယ်။ ဆိုချင်တာက ခုနက bytecode ကို JVM ဆိုတဲ့ software( hardware လဲရှိတယ်) ပေါ်တင် run လိုက်ရင် run နိုင်မယ်ပေါ့။ JVM အကြောင်းက sereis အလိုက်ရေးထားတာရှိတယ် ရှာသာကြည့်။

JVM သည် software ဖြစ်တယ် များသောအားဖြင့် C++ နဲ.ရေးထားတာပေါ့ အဲ့တော့ခုနက bytecode ကို interpret သော်လည်းကောင်း JIT သုံးပြီးတော့သော်လည်း‌ကောင်း runမယ်။

ဟုတ်ပြီ ဒါဆို JVM က C++ နဲ.ရေးထားတာ ။ C++ ကိုရော machine က တန်းနားလည်လားဆိုတော့ နားမလည်ဘူး. အဲ့တော့ C++ ကို machine code ဖြစ်တဲ့ assembly ဖြစ်အောင် ပြောင်းရတယ်။ assembly မှာ CPU instruction နဲ.တူတယ် ဒါပေမဲ့ source text အဲ့တော့ assembly ကို machine instruction ရအောင် assembler နဲ.ပြောင်းရတယ် assemble လုပ်တယ်ခေါ်တယ်။ အဲ့တော့ ခုနက JVM C++ code သည် machine code ဖြစ်သွားပြီ ဒါကို window platform မှာဆို exe လို.ခေါ်မယ် native code ပေါ့.။ Platform ပေါ်တိုက်ရိုက် run နိုင်သော code ပေါ့

Platform ဆိုတာ hardware+ OS ကိုစုပြီးပြောတာ။ ခုနက native code ကို hardware ကချည်းတိုက်ရိုက် run နိုင်လားဆိုတော့ မ run နိုင်ဘူး။ operating system ဆိုတဲ့ software အကူညီယူရတယ်။ Operating System ကနေ JVM native code ကို CPU ပေါ်တင်ပြီး run တယ်။ JVM ကနေ ခုနက bytecode ကို run တယ် အဲ့လိုသွားတယ်။

ဒါဆို System.out.println(“Hello”) ပေါ့ သူ.ကို JVM က တိုက်ရိုက် run နိုင်လား မေးရင် မ run နိုင်ဘူး System class အောက်က out ဆိုတဲ့ PrintStream variable ရဲ. println method သည် native method . native method ဆိုတာ ဉပမာ JVM မှာပေါင်းတာ နှုတ်တာ စားတာ မြှောက်တာလိုမျိုးအတွက် instruction ပါတယ် ၊ ဒါပေမဲ့ file ဖတ်တာ print out လုပ်တာမျိုးလိုကောင်တွေဖို. instruction မပါဘူး . အဲ့တော့ C++ API ကိိုလှမ်းခေါ်ရတယ် JVM ကနေ print ထုတ်ဖို.။

C++ ကနေ print ရောရှိလားဆိုတော့ မရှိဘူး ဘယ်သူ.ခေါ်ရလဲဆိုတော့ Operating System ရဲ. system call ဆိုတာကို ခေါ်ရတယ်။ System call ဆိုတာဘာလဲဆိုတော့ operating system ကနေ user program တွေဖို. ခေါ်လို.ရတဲ့ API ဉပမာ file read, write, memory allocation ဒါမျိုးတွေကို System call လို.ခေါ်တာ။

User Program(JVM) ကနေ ပြီးတော့ OS system call ကိုခေါ်မယ်ဆိုရင် လောလောဆယ် run နေတဲ့ JVM process ကိုခနဖယ်ပြီးတော့ user mode ကနေ kernel mode ကိုပြောင်းရတယ်။ Process Switching လုပ်ရတယ် ဆိုကြပါစို. CPU ပေါ်မှာ ခုနက JVM process run နေတာကနေ OS process ပြန် run အောင် လုပ်လိုက်တာပေါ့။

OS ရဲ. system call ကနေရော print ထုတ်နိုင်လားဆိုတော့ မထုတ်နိုင်ဘူး ။ OS သည် hardware ကိုခိုင်းရမှာ အဲ့တော့ ဘာလုပ်ရလဲဆိုတော့ ဆိုင်ရာ hardware ရဲ. device driver ကိုခေါ်ပြီးတော့လုပ်ခိုင်းရတယ်။
အဲ့မှာ OS သည် device driver ဖို.လိုအပ်တဲ့ information တွေ data တွေ ဆိုင်ရာ memory ပေါ်မှာ ရိုက်တာမျိုး နောက် ဟိုကပြန်လာတဲ့ information ကို interrupt အနေနဲ. စောင့်ဖမ်းတာမျိုးရှိတယ်။ လောလောဆယ် print ထုတ်တဲ့ IO လုပ်နေချိန် တခြား process တွေ အလှည့်ပေးတာမျိုးလဲရှိတယ်။

အဲ့မှာ Hello World လေးက ပေါ်လာတယ်ပေါ့ :3

Original link

crd=>(https://m.facebook.com/story.php?story_fbid=pfbid02pSgUAyK9MhEEYvEgNzhG5FDC3XfnYjpUTCGiM7yJtLDMxQsXETBM8j3ByaK6UUPml&id=1819241055&mibextid=Nif5oz)

Leave a comment