ကွန်ပျူတာ ပရိုဂရမ်

ကွန်ပျူတာ ပရိုဂရမ် (computer program သို့ Software Program သို့ program) ဆိုသည်မှာ ကွန်ပျူတာအား မိမိ ခိုင်းစေလိုသည့် အလုပ်တစ်ခုကို လုပ်ဆောင်ရန် အတွက် ရေးသားထားသော ညွှန်ကြားချက် အစီအစဉ် စာရင်း ပင် ဖြစ်သည်။ ကွန်ပျူတာများ အလုပ်လုပ်နိုင်ရန် အတွက် ပရိုဂရမ်များ လိုအပ်ပြီး ပုံမှန်အားဖြင့် ပရိုဂရမ်မှ ညွှန်ကြားချက်များကို ဗဟို ပရိုဆက်ဆာ ထဲတွင် ပြုလုပ်လေ့ ရှိသည်။ ပရိုဂရမ်တွင် ကွန်ပျူတာမှ ညွှန်ကြားချက် အတိုင်း တိုက်ရိုက် နားလည် လုပ်ဆောင်နိုင်သော အိတ်ဇ်ကျူတေဘယ်လ် (executable ) ပုံသဏ္ဌာန် ရှိသကဲ့သို့ လူသားများမှ ဖတ်ရှုနားလည်နိုင်သော ရင်းမြစ်ကုဒ် ပုံသဏ္ဌာန် ဖြင့်လည်း ရှိနိုင်သည်။ ထိုသို့သောရင်းမြစ်ကုဒ် ပုံသဏ္ဌာန်မှာ ကွန်ပျူတာ နားလည်နိုင်သော အိတ်ဇ်ကျူတေဘယ်လ် ပုံသဏ္ဌာန်သို့ ပြောင်းလဲပစ်နိုင်သည်။ သို့သော်လည်း ရင်းမြစ်ကုဒ် ပုံသဏ္ဌာန် ရှိသဖြင့်သာ ပရိုဂရမ်မာ တို့ အနေနှင့် အယ်လ်ဂေါ်ရစ်သမ် (algorithms) များကို ပိုမိုလွယ်ကူစွာ တီထွင် ပြုပြင်မွမ်းမံ နိုင်ကြသည်။

ကွန်ပြူတာ source code များကို အသက်မွေးဝမ်းကျောင်းပြု ကွန်ပျူတာ ပရိုဂရမ်မာ များက ရေးသားလေ့ရှိသည်။ ရင်းမြစ်ကုဒ် ကို imperative programming သို့ declarative programming ဆောင်သော programming language တို့ဖြင့်ရေးသည်။ Source code ကို compiler များက executable file အဖြစ်ပြောင်းပေးသည်။ သို့မဟုတ်ပါကလည်း interpreter သို့ hardware တွင်ထည့်ထားသော interpreter ၏ အကူအညီဖြင့် central processing unit မှ execute လုပ်နိုင်သည်။

ကွန်ပျူတာ ပရိုဂရမ် (သို့) ပရိုဂရမ် သည် ကွန်ပျူတာတစ်လုံးတွင် လုပ်ငန်းဆောင်တာများကို
လုပ်ဆောင်နိုင်ရန်အတွက် အထူးရေးသားထားသော ညွှန်ကြားချက် အစီအစဉ်များဖြစ်သည်။ ကွန်ပျူတာ၏စီပီယူတွင် ပရိုဂရမ်၏ ညွှန်ကြားချက်များကို executionလုပ် ဆောင်ရန်အတွက်ကွန်ပျူတာ ပရိုဂရမ် လိုအပ်သည်။

ပရိုဂရမ်တွင် ကွန်ပျူတာမှညွှန်ကြားချက်များကို တိုက်ရိုက်ခေါ်ယူအသုံးပြုနိုင်သော လုပ်ငန်းများလုပ်ဆောင်နိုင်သည့် executable ဖွဲ့စည်းပုံ ပါရှိသည်။ ပရိုဂရမ်တွင်ပါရှိသော လူသားများဖတ်၍
နားလည်နိုင်သော ရင်းမြစ်ကုဒ် ဖွဲ့စည်းပုံသည် ၎င်း၏ အယ်လ်ဂေါ်ရစ်သမ်  ကို ပရိုဂရမ်ရေးသားသူများမှ လေ့လာမှုနှင့် ဖွံ့ဖြိုးမှု တို့အတွက် စွမ်းဆောင်ပေးနိုင်သည်။ ကွန်ပြူတာပရိုဂရမ်များနှင့် ၎င်းနှင့်စပ်ဆက်လျက် ရှိသော ဒေတာ စုစည်းထားခြင်းကို ဆော့ဖ်ဝဲဟုညွှန်းဆိုကြသည်။
ကွန်ပြူတာ၏ ရင်းမြစ်ကုဒ် များကို ကွန်ပြူတာပရိုဂရမ်ရေးသားသူများ မှ ရေးသားကြသည်။ ရင်းမြစ်ကုဒ် များကို အလုပ်လုပ်ဆောင်စေသောဖိုင် များသို့ compilerဖြင့်ပြောင်းပြီး
စီပီယူမှ ခေါ်ယူ၍အလုပ်လုပ်ဆောင်သည်။ ကွန်ပြူတာပရိုဂရမ်များအား interpreter ၏အကူအညီဖြင့် (သို့) ဟာဒ်ဝဲ အတွင်းတွင် အပြီးတပ်ဆင်ထားခြင်းဖြင့် လုပ်ငန်းများလုပ်ဆောင်စေသည်။
ကွန်ပျူတာပရိုဂရမ်များကို စစ်စတမ် ဆော့ဖ်ဝဲ နှင့် အသုံးချ ဆော့ဖ်ဝဲ ဟူ၍ခွဲခြားထားသည်။ ကွန်ပျူတာတစ်လုံးတွင် ပရိုဂရမ်တစ်ခုထက်မက များပြားစွာ တစ်ချိန်တည်းတွင်
အလုပ်လုပ်ဆောင်နေနိုင်သည်။၎င်းကို multitasking ခေါ်ဆိုကြသည်။

## ပရိုဂရမ်းမင်း
ပရိုဂရမ်များတွင်ပါရှိသော ရင်းမြစ်ကုဒ်များကို စမ်းသပ်စစ်ဆေးခြင်း၊ ခွဲခြမ်းစိပ်ဖြာခြင်း၊ ပိုမိုကောင်းမွန်အောင် ပြုပြင်ခြင်း နှင့်အခြား ပရိုဂရမ်ရေးသူများမှ ရှိပြီးသားပရိုဂရမ်များတွင် ပူးပေါင်းပါဝင်စေခြင်းဖြင့် ပြင်ဆင်နိုင်ကြသည်။ ထိုသို့ လုပ်ဆောင်ကြခြင်းကို ဆော့ဖ်ဝဲ ဖွံ့ဖြိုးရေးဟုခေါ်ဆိုကြသည်။
အင်ဂျင်နီယာနည်းစနစ်များ ကဲ့သို့လုပ်ဆောင်ကြရသဖြင့် ဆော့ဖ်ဝဲ အင်ဂျင်နီယာရင်းဟူသောအသုံးမှာလည်း တွင်ကျယ်လာသည်။

### Paradigms
ကွန်ပြူတာ ပရိုဂရမ်များကိုimperative နှင့် declarative ဟူ၍ ပရိုဂရမ်းမင်းဘာသာစကား စီစဉ်နေရာချထားမှု မူအရ အဓိကခွဲခြားထားသည်။ imperative ပုံစံမူဖြင့် ရေးသားထားသော ပရိုဂရမ် များသည်
ကြေညာခြင်း၊ဖော်ပြခြင်း၊ထုတ်ပြန်ခြင်းတို့ကိုယုတ္တိကို အသုံးပြုခြင်းအားဖြင့် သတ်မှတ်ကြသည်။ ကြေညာခြင်းတွင် variableအမည်ကို datatype သို့ ပြောင်း၍အတူတကွ ပူးပေါင်းထားသည်။ဥပမာ var x: interger ;
ဖော်ပြခြင်းသည် တန်ဖိုးနှင့်လည်းသက်ဆိုင်သည်။ဥပမာ 2+2 သည် 4 ဖြစ်သည်။ ထုတ်ပြန်ခြင်းတွင် ဖော်ပြချက်များကို ပုံသေထိန်းမထားခြင်း (သို့) ပုံသေထိန်းမထားသော
တန်ဖိုးများကို ပရိုဂရမ်၏ control flow တွင် ဖော်ပြသတ်မှတ်ခြင်းကို သတ်မှတ်ပေးသည်။ဥပမာ x :2+2; if x=4 then do_something() ;  ။imperative ဘာသာစကားကို ဝေဖန်နိုင်သည့် အချက်မှာ ပုံသေမထားသောကိန်းများကို class တစ်ခုတွင်
ထုတ်ပြန်ထားရာ non-local variables ကိုခေါ်ယူနိုင်ခြင်းဖြစ်သည်။

### (compiling or interpreting)ဘာသာပြန်ခြင်း
ကွန်ပြူတာ ပရိုဂရမ်းမင်း ဘာသာစကားဖြင့် ရင်းမြစ်ကုဒ်ဟုခေါ်သော ကွန်ပြူတာပရိုဂရမ်များသည် လူသားများဖတ်၍ရသော ပုံစံများဖြစ်သည်။ ရင်းမြစ်ကုဒ်များကို compiler အားအသုံးပြု၍ အလုပ်လုပ်၍ရစေသော  executable image များအဖြစ်သို့ ပြောင်းပေးခြင်းဖြင့်သော်လည်းကောင်း၊ interpreter အားအသုံးပြု၍ တိုက်ရိုက်လုပ်ငန်းလုပ်ဆောင်စေခြင်းဖြင့်လည်းကောင်း လုပ်ငန်းများကိုလုပ်ဆောင်စေသည်။compiler (သို့) interpreter ဖြင့် လုပ်ငန်းလုပ်ဆောင်စေသော ပရိုဂရမ်များသည် batch process တွင် လူသားတို့၏ တုံပြန်မှုများမပါရှိဘဲ လုပ်ဆောင်ကြသည်။ သို့သော် interpreter ဖြင့် လုပ်ဆောင်သော ပရိုဂရမ်များသည် interactive session တွင် အသုံးပြုသူမှ commands များထည့်သွင်းရန်လိုအပ်လျှင် ခွင့်ပြုပေးသည်။ ထိုအခြေအနေတွင် ပရိုဂရမ်၏လုပ်ဆောင်ချက်သည် အစီအစဉ်တကျလုပ်ဆောင်နေသော ခွဲခြားထားသည့် ခိုင်းစေမှုများသာဖြစ်သည်။ လုပ်ဆောင်ချက်တစ်ခုစီသို့ ခိုင်းစေမှု (သို့) ညွှန်ကြားမှုပေးပို့ရန် ကွန်ပြူတာဘာသာစကားတစ်ခု အသုံးပြုခြင်းကို scripting language ဟုခေါ်ကြသည်။

interpreter သည် statement တစ် ကြောင်းခြင်းစီအား တိုက်ရိုက် decode ဒီကုတ် လုပ်ရသဖြင့် compiler နှင့်ယှဉ်လျှင် လုပ်ဆောင်မှုနှေးကွေးသည်။

ထို့ပြင်ပရိုဂရမ်များကို လုပ်ငန်းများလုပ်ဆောင်စေရန် ကွန်ပြူတာတွင် interpreter အမြဲရှိနေရန်လိုအပ်သည်။ ပရိုဂရမ်များကို လုပ်ငန်းများလုပ်ဆောင်စေရန် ကွန်ပြူတာတွင် interpreter အမြဲရှိနေရန်လိုအပ်သည်။compilier အားအသုံးပြု၍ အလုပ်လုပ်၍ရစေသော ပရိုဂရမ်များသည် လုပ်ငန်းများလုပ်ဆောင်စေရန် compilier အားမလိုအပ်ချေ။

## Execution and Storage (လုပ်ဆောင်မှုနှင့်သိုလှောင်မှု)
အထူးသဖြင့် ကွန်ပြူတာပရိုဂရမ်များကို  အသုံးပြုသူမှ တိုက်ရိုက်သော်လည်းကောင်း၊ သွယ်ဝိုက်၍သော်လည်းကောင်း ခေါ်ယူအသုံးပြုလုပ်ဆောင်စေမှုမစတင်မီအချိန်ထိ non-volatile memory တွင် သိမ်းဆည်းထားသည်။   အသုံးပြုသူမှ  ပရိုဂရမ်တစ်ခုကို အသုံးပြုရန်တောင်းဆိုပါက operation system မှ အဆိုပါပရိုဂရမ်ကိုrandom access memory ပေါ်သို့ ခေါ်ယူပေးသည်။ ထို့နောက် စီပီယူမှ အဆိုပါပရိုဂရမ်ကို အဆုံးသပ်ရပ်တန့်မှု့ မတိုင်မီအထိ ညွှန်ကြားချက်များအတိုင်း လုပ်ဆောင်စေသည်။ အဆုံးသပ်ရပ်တန့်မှု့သည် အသုံးပြုသူမှ ရပ်တန့်ခြင်း (သို့) ကွန်ပြူတာ၏ ဟာဒ်ဝဲ ၊ဆော့ဝဲ ပြဿနာအမှားများကြာင့် ဖြစ်နိုင်သည်။

### Embedded programs(မြှပ်ထားသော ပရိုဂရမ်)
အချို့ကွန်ပြူတာ ပရိုဂရမ်များကို အမာထည်ပစ္စည်း(ဟာဒ်ဝဲ)ထဲတွင် ပုံသေမြှပ်နှံထားသည်။ ကွန်ပြူတာစတင်လုပ်ဆောင်ရန် လိုအပ်သော အစောဆုံးကွန်ပြူတာပရိုဂရမ်ကိုread-only memory ထဲတွင် သိုလှောင်ထားသည်။ ကွန်ပြူတာစတင်လုပ်ဆောင်သည့်ဖြစ်စဉ်တွင် စစ်စတမ်(system)တစ်ခု၏လိုအပ်သော သက်ဆိုင်သည့် အစိတ်အပိုင်းများကို  ပထမ processor registers မှ device controllers၊ device controllersမှတဆင့် memory contents များအထိ ရွေးချယ်လုပ်ဆောင်သည်။ လုပ်ဆောင်မှုပထမအဖြစ် 
အစောဆုံးကွန်ပြူတာပရိုဂရမ်သည် operating system ကိုခေါ်ယူ၍ ပရိုဂရမ်ကောင်တာ ကိုထည့်သွင်းကာ ပုံမှန်လုပ် ဆောင်မှုများကို လုပ်ဆောင်စေသည်။ လုပ်ဆောင်မှုများကို ထိန်းချုပ်ရန် ဟာဒ်ဝဲများထဲတွင် ဖင်းဝဲ  များအားအသေမြုပ်နှံထည့်သွင်းထားကြသည်။ ဖင်းဝဲ(firmware)ကို ပြောင်းလဲရန်မလိုသော (သို့) ပြောင်းလဲပေးရန်အခြေအနေနည်းပါးသော ကွန်ပြူတာ ပရိုဂရမ်များနှင့် ပါဝါပိတ်လိုက်လျှင် ပရိုဂရမ်ပျောက်ပျက် မသွားစေရန်လိုအပ်သောနေရာများတွင် အသုံးပြုကြသည်။