လည်ပတ်မှုစနစ်များ- လွယ်ကူသောအပိုင်းသုံးပိုင်း။ အပိုင်း ၁- နိဒါန်း (ဘာသာပြန်)

Operating Systems မိတ်ဆက်

မင်္ဂလာပါ Habr။ ကျွန်ုပ်၏အမြင်တွင် စိတ်ဝင်စားဖွယ်ကောင်းသော စာပေတစ်ခု၏ ဘာသာပြန်ဆောင်းပါးများ- OSTEP ကို ​​သင့်အာရုံကို တင်ပြလိုပါသည်။ ဤအကြောင်းအရာသည် Unix ကဲ့သို့သော လည်ပတ်မှုစနစ်များ၏ လုပ်ဆောင်မှုကို အတော်လေး နက်နက်နဲနဲ ဆန်းစစ်သည်၊ ပြောရရင်၊ လုပ်ငန်းစဉ်များ၊ အချိန်ဇယားဆွဲမှုများ၊ မန်မိုရီနှင့် ခေတ်မီ OS ပေါင်းစပ်ထားသည့် အခြားသော အလားတူ အစိတ်အပိုင်းများနှင့် အလုပ်လုပ်ပါသည်။ ပစ္စည်းအားလုံး၏ မူရင်းကို ဤနေရာတွင် ကြည့်ရှုနိုင်ပါသည်။ ဒီမှာ. ဘာသာပြန်ခြင်းကို ပရော်ဖက်ရှင်နယ်ကျကျ (လွတ်လွတ်လပ်လပ်) ရေးသားထားခြင်းမဟုတ်ကြောင်း ကျေးဇူးပြု၍ မှတ်သားထားပါ၊ သို့သော် ယေဘူယျအဓိပ္ပါယ်ကို ကျွန်ုပ်ဆက်လက်ထိန်းသိမ်းထားရန် မျှော်လင့်ပါသည်။

ဤအကြောင်းအရာအတွက် ဓာတ်ခွဲခန်းကို ဤနေရာတွင် တွေ့နိုင်သည်-
- မူရင်း- pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- မူရင်း- github.com/remzi-arpacidusseau/ostep-code
- ကျွန်ုပ်၏ ပုဂ္ဂိုလ်ရေးအရ လိုက်လျောညီထွေဖြစ်အောင် github.com/bykvaadm/OS/tree/master/ostep

ကျွန်ုပ်၏ ချန်နယ်တွင်လည်း ကြည့်ရှုနိုင်ပါသည်။ ကြေးနန်းစာ =)

ပရိုဂရမ်လည်ပတ်မှု

ပရိုဂရမ်တစ်ခုလည်ပတ်နေချိန်တွင် ဘာဖြစ်သွားသနည်း။ လုပ်ဆောင်နေသည့် ပရိုဂရမ်သည် ရိုးရှင်းသောအရာတစ်ခုကို လုပ်ဆောင်သည် - ၎င်းသည် ညွှန်ကြားချက်များကို လုပ်ဆောင်သည်။ စက္ကန့်တိုင်း၊ သန်းနှင့်ချီသော ညွှန်ကြားချက်များကို RAM မှ ပရိုဆက်ဆာမှ ပြန်လည်ရယူပြီး ၎င်းတို့အား ကုဒ်နံပါတ်များ ထုတ်ပေးသည် (ဥပမာ၊ ဤညွှန်ကြားချက်အမျိုးအစားကို အသိအမှတ်ပြုသည်) နှင့် ၎င်းတို့ကို လုပ်ဆောင်သည်။ ၎င်းသည် နံပါတ်နှစ်ခုကို ပေါင်းထည့်ခြင်း၊ မမ်မိုရီဝင်ရောက်ခြင်း၊ အခြေအနေတစ်ခု စစ်ဆေးခြင်း၊ လုပ်ဆောင်ချက်တစ်ခုသို့ ခုန်ခြင်းစသည်ဖြင့် ဖြစ်နိုင်သည်။ ညွှန်ကြားချက်တစ်ခုအား အကောင်အထည်ဖော်ပြီးနောက် ပရိုဆက်ဆာသည် အခြားတစ်ခု၏လုပ်ဆောင်မှုဆီသို့ ဆက်လက်လုပ်ဆောင်သည်။ ထို့ကြောင့် ညွှန်ကြားချက်ကို သင်ကြားပြီးနောက်၊ ပရိုဂရမ် ပြီးဆုံးသည့်တိုင်အောင် ၎င်းတို့ကို စီမံဆောင်ရွက်သည်။
ဤဥပမာကို သဘာဝအတိုင်း ရိုးရှင်းအောင်ပြုလုပ်ထားသည်ဟု ယူဆသည် - အမှန်မှာ၊ ပရိုဆက်ဆာကို အရှိန်မြှင့်ရန်အတွက် ခေတ်မီဟာ့ဒ်ဝဲသည် သင့်အား ညွှန်ကြားချက်များကို အလှည့်အပြောင်း၊ ဖြစ်နိုင်သည့်ရလဒ်များကို တွက်ချက်ရန်၊ ညွှန်ကြားချက်များကို တစ်ပြိုင်နက်တည်းလုပ်ဆောင်ရန်နှင့် အလားတူလှည့်ကွက်များကို လုပ်ဆောင်နိုင်စေမည်ဖြစ်သည်။

Von Neumann ၏ တွက်ချက်မှုပုံစံ

ကျွန်ုပ်တို့ ဖော်ပြထားသော ရိုးရှင်းသော အလုပ်ပုံစံသည် Von Neumann တွက်ချက်မှုပုံစံနှင့် ဆင်တူသည်။ Von Neumann သည် ကွန်ပြူတာစနစ်များ၏ ရှေ့ဆောင်များထဲမှ တစ်ဦးဖြစ်ပြီး ဂိမ်းသီအိုရီရေးသားသူလည်းဖြစ်သည်။. ပရိုဂရမ်ကို လုပ်ဆောင်နေချိန်တွင်၊ အခြားသော ဖြစ်ရပ်များစွာ၊ အခြားသော လုပ်ငန်းစဉ်များစွာနှင့် ပြင်ပမှ ယုတ္တိဗေဒဆိုင်ရာ လုပ်ဆောင်မှုများ၊ အဓိက ရည်ရွယ်ချက်မှာ စနစ်၏ စတင်မှု၊ လည်ပတ်မှုနှင့် ပြုပြင်ထိန်းသိမ်းမှုတို့ကို ရိုးရှင်းစေရန်ဖြစ်သည်။
ပရိုဂရမ်များကို လွယ်ကူစွာလည်ပတ်စေရန် (သို့မဟုတ် ပရိုဂရမ်များစွာကို တစ်ချိန်တည်းတွင် လုပ်ဆောင်ရန်ခွင့်ပြုခြင်း)၊ ပရိုဂရမ်များကို တူညီသောမှတ်ဉာဏ်ကို မျှဝေရန်နှင့် မတူညီသောစက်ပစ္စည်းများနှင့် ဆက်သွယ်နိုင်စေရန်အတွက် တာဝန်ရှိသည့်ဆော့ဖ်ဝဲအစုတစ်ခုရှိပါသည်။ ထိုကဲ့သို့သော ဆော့ဖ်ဝဲလ် (ဆော့ဖ်ဝဲလ်) အစုအဝေးကို အခြေခံအားဖြင့် လည်ပတ်မှုစနစ်ဟုခေါ်တွင်ပြီး ၎င်း၏လုပ်ငန်းတာဝန်များမှာ စနစ်မှန်ကန်ပြီး ထိရောက်မှုရှိမရှိကို စောင့်ကြည့်စစ်ဆေးခြင်းအပြင် ဤစနစ်၏စီမံခန့်ခွဲမှုကို လွယ်ကူစေခြင်းလည်း ပါဝင်သည်။

operating system ကို

OS တစ်ခုဟု အတိုကောက်ခေါ်သော လည်ပတ်မှုစနစ်သည် ကွန်ပျူတာအရင်းအမြစ်များကို စီမံခန့်ခွဲရန်နှင့် အသုံးပြုသူ၏ အပြန်အလှန်ဆက်သွယ်မှုကို စုစည်းရန် ဒီဇိုင်းထုတ်ထားသော အပြန်အလှန်ဆက်စပ်ပရိုဂရမ်အစုအဝေးတစ်ခုဖြစ်သည်။.
OS သည် အရေးကြီးဆုံးနည်းပညာဖြစ်သော နည်းပညာအားဖြင့် ပထမနေရာ၌ ၎င်း၏ထိရောက်မှုကို ရရှိသည်။ virtualization. OS သည် ရုပ်ပိုင်းဆိုင်ရာအရင်းအမြစ်များ (ပရိုဆက်ဆာ၊ မန်မိုရီ၊ ဒစ်ခ်စသည်) နှင့် အပြန်အလှန်အကျိုးသက်ရောက်ပြီး ၎င်းကို ပိုမိုယေဘူယျ၊ ပိုမိုအားကောင်းပြီး အသုံးပြုရလွယ်ကူသောပုံစံအဖြစ် ပြောင်းလဲပေးသည်။ ထို့ကြောင့်၊ ယေဘူယျနားလည်ရန်အတွက်၊ သင်သည် operating system ကို virtual machine တစ်ခုနှင့် အကြမ်းဖျင်း နှိုင်းယှဉ်နိုင်သည်။
အသုံးပြုသူများအား လည်ပတ်မှုစနစ်အား အမိန့်များပေးနိုင်ရန် ခွင့်ပြုကာ၊ ထို့ကြောင့် ပရိုဂရမ်တစ်ခုလုပ်ဆောင်ခြင်း၊ မှတ်ဉာဏ်ခွဲဝေခြင်း၊ ဖိုင်တစ်ခုရယူခြင်းစသည်ဖြင့်) ပရိုဂရမ်ကို virtual machine ၏စွမ်းရည်များကို အသုံးပြုနိုင်ရန်၊ API ကို (အပလီကေးရှင်း ပရိုဂရမ်းမင်း အင်တာဖေ့စ်) နှင့် ဖုန်းခေါ်ဆိုမှု (ခေါ်ဆိုမှု) တို့ ပြုလုပ်နိုင်သည်။ ပုံမှန်လည်ပတ်မှုစနစ်သည် ရာနှင့်ချီသော စနစ်ခေါ်ဆိုမှုများကို ပြုလုပ်နိုင်စေပါသည်။
နောက်ဆုံးအနေဖြင့်၊ virtualization သည် ပရိုဂရမ်များစွာကို run ရန် (CPU ကိုမျှဝေခြင်း) နှင့် ၎င်းတို့၏ ညွှန်ကြားချက်များနှင့် ဒေတာများကို တစ်ပြိုင်နက် ဝင်ရောက်ကြည့်ရှုနိုင်သည် (ထို့ကြောင့် memory မျှဝေခြင်း) နှင့် disks များ (ထို့ကြောင့် I/O စက်ပစ္စည်းများကို မျှဝေခြင်း) တို့ကို ခွင့်ပြုပေးသောကြောင့်၊ လည်ပတ်မှုစနစ်ကိုလည်း ခေါ်ဆိုပါသည်။ အရင်းအမြစ်မန်နေဂျာ။ ပရိုဆက်ဆာ၊ ဒစ်ခ်နှင့် မမ်မိုရီ တစ်ခုစီသည် စနစ်၏ အရင်းအမြစ်တစ်ခုဖြစ်ပြီး၊ ထို့ကြောင့် ဤလည်ပတ်မှုစနစ်၏ အခန်းကဏ္ဍများထဲမှ တစ်ခုသည် ဤလည်ပတ်မှုစနစ်၏ လုပ်ဆောင်မှုအပေါ် မူတည်၍ ထိရောက်စွာ၊ ရိုးသားစွာ လုပ်ဆောင်ခြင်း သို့မဟုတ် အပြန်အလှန်အားဖြင့် ဤအရင်းအမြစ်များကို စီမံခန့်ခွဲရန် တာဝန်ဖြစ်လာသည်။ ဒီဇိုင်းထုတ်ထားသည်။

CPU virtualization

အောက်ပါအစီအစဉ်ကို စဉ်းစားပါ။
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

လည်ပတ်မှုစနစ်များ- လွယ်ကူသောအပိုင်းသုံးပိုင်း။ အပိုင်း ၁- နိဒါန်း (ဘာသာပြန်)

၎င်းသည် မည်သည့် အထူးလုပ်ဆောင်ချက်များကိုမျှ လုပ်ဆောင်ခြင်းမရှိပါ၊ အမှန်မှာ ၎င်းလုပ်ဆောင်သမျှသည် လုပ်ဆောင်ချက်တစ်ခုဟုခေါ်ဆိုခြင်းဖြစ်သည်။ ချည်ငင်() ၏တာဝန်မှာ တစ်စက္ကန့်လွန်ပြီးနောက် အချိန်စစ်ဆေးပြီး ပြန်ရန်ဖြစ်သည်။ ထို့ကြောင့်၊ ၎င်းသည် အသုံးပြုသူအား အငြင်းအခုံတစ်ခုအဖြစ် ဖြတ်သွားသော စာကြောင်းကို အကန့်အသတ်မရှိ ပြန်လုပ်သည်။
ဒီပရိုဂရမ်ကို run ပြီး argument အဖြစ် "A" ကို ကျော်လိုက်ကြရအောင်။ ရလဒ်သည် အထူးစိတ်ဝင်စားစရာမဟုတ်ပါ - စနစ်သည် ဇာတ်ကောင် "A" ကို အခါအားလျော်စွာ ပြသသည့် ပရိုဂရမ်တစ်ခုကို ရိုးရိုးရှင်းရှင်း လုပ်ဆောင်သည်။
ယခု တူညီသော ပရိုဂရမ်များစွာကို လုပ်ဆောင်နေသော်လည်း ပိုမိုရှင်းလင်းစေရန် စာလုံးအမျိုးမျိုးကို ထုတ်ထုတ်သည့်အခါ ရွေးချယ်မှုကို စမ်းကြည့်ကြပါစို့။ ဤကိစ္စတွင်၊ ရလဒ်သည်အနည်းငယ်ကွဲပြားလိမ့်မည်။ ကျွန်ုပ်တို့တွင် ပရိုဆက်ဆာတစ်ခုရှိသော်လည်း၊ ပရိုဂရမ်ကို တစ်ပြိုင်နက်လုပ်ဆောင်သည်။ ဘယ်လိုဖြစ်တာလဲ? ဒါပေမယ့် ဟာ့ဒ်ဝဲရဲ့ စွမ်းဆောင်နိုင်ရည်အကူအညီမပါဘဲ လည်ပတ်မှုစနစ်ဟာ ထင်ယောင်ထင်မှားဖြစ်စေတဲ့ အရာတစ်ခု ဖန်တီးပေးကြောင်း ထွက်ပေါ်လာပါတယ်။ စနစ်တွင် ပရိုဆက်ဆာအများအပြားရှိ၍ ရုပ်ပိုင်းဆိုင်ရာပရိုဆက်ဆာတစ်ခုတည်းကို သီအိုရီအရ အကန့်အသတ်မရှိသော အရေအတွက်အဖြစ် ပြောင်းလဲကာ တစ်ပြိုင်နက်ဟုထင်ရသော ပရိုဂရမ်များကို လုပ်ဆောင်နိုင်စေသည်ဟု ထင်ယောင်ထင်မှားဖြစ်စေသည်။ ဒါကို သက္ကာယလို့ ခေါ်တယ်။ CPU virtualization.
ဤပုံတွင် ပရိုဂရမ်များစွာကို တစ်ပြိုင်နက်တည်း လုပ်ဆောင်လိုပါက၊ မည်သည့်အရာကို စတင်လုပ်ဆောင်မည်နည်း၊ OS ၏ "မူဝါဒများ" သည် ဤမေးခွန်းအတွက် တာဝန်ရှိပါသည်။ မူဝါဒများကို OS ရှိ နေရာများစွာတွင် အသုံးပြုပြီး ဤကဲ့သို့သော မေးခွန်းများကို ဖြေပေးကာ OS အကောင်အထည်ဖော်သည့် အခြေခံ ယန္တရားများဖြစ်သည်။ ထို့ကြောင့် OS ၏ အခန်းကဏ္ဍသည် အရင်းအမြစ်မန်နေဂျာအဖြစ် ရှိသည်။

Memory virtualization

ကဲ Memory ကိုကြည့်ရအောင်။ ခေတ်မီစနစ်များတွင် memory ၏ရုပ်ပိုင်းဆိုင်ရာပုံစံကို bytes ၏ array တစ်ခုအဖြစ်ကိုယ်စားပြုသည်။. Memory မှဖတ်ရန်၊ သင်သတ်မှတ်ရန်လိုအပ်သည်။ ဆဲလ်လိပ်စာဝင်ရောက်ရန်။ ဒေတာကို ရေးရန် သို့မဟုတ် အပ်ဒိတ်လုပ်ရန်၊ ၎င်းကို ရေးရမည့်နေရာတွင် ဆဲလ်၏ ဒေတာနှင့် လိပ်စာကိုလည်း သင် သတ်မှတ်ရပါမည်။
ပရိုဂရမ်လုပ်ဆောင်နေစဉ်အတွင်း Memory သည် အဆက်မပြတ်ဝင်ရောက်နေပါသည်။ ပရိုဂရမ်တစ်ခုသည် ၎င်း၏ဒေတာဖွဲ့စည်းပုံတစ်ခုလုံးကို memory တွင်သိမ်းဆည်းပြီး ညွှန်ကြားချက်အမျိုးမျိုးကိုလုပ်ဆောင်ခြင်းဖြင့် ၎င်းကိုဝင်ရောက်ကြည့်ရှုသည်။ ညွှန်ကြားချက်များကို Memory ထဲတွင်လည်း သိမ်းဆည်းထားသောကြောင့် နောက်ညွှန်ကြားချက်အတွက် တောင်းဆိုမှုတစ်ခုစီအတွက် ၎င်းကို ဝင်ရောက်ကြည့်ရှုနိုင်မည်ဖြစ်သည်။

malloc() ခေါ်သည်။

ခေါ်ဆိုမှုကို အသုံးပြု၍ မမ်မိုရီ၏ ဧရိယာကို ခွဲဝေပေးသည့် အောက်ပါပရိုဂရမ်ကို သုံးသပ်ကြည့်ပါ။ malloc () (https://youtu.be/jnlKRnoT1m0):

လည်ပတ်မှုစနစ်များ- လွယ်ကူသောအပိုင်းသုံးပိုင်း။ အပိုင်း ၁- နိဒါန်း (ဘာသာပြန်)

ပရိုဂရမ်သည် အရာများစွာကို လုပ်ဆောင်သည်။ ပထမဦးစွာ၊ ၎င်းသည် မမ်မိုရီအချို့ (လိုင်း 7) ကို ခွဲဝေပေးသည်၊ ထို့နောက် ခွဲဝေချထားပေးသည့်ဆဲလ် (လိုင်း 9) ၏လိပ်စာကို ပရင့်ထုတ်ကာ၊ ခွဲဝေချထားပေးသော မမ်မိုရီ၏ ပထမအထိုင်သို့ သုညဟုရေးသည်။ ထို့နောက်၊ ပရိုဂရမ်သည် “p” variable ရှိ လိပ်စာတွင် မှတ်ဉာဏ်တွင် သိမ်းဆည်းထားသော တန်ဖိုးကို တိုးပေးသည့် ကွင်းဆက်တစ်ခုသို့ ဝင်ရောက်သည်။ ၎င်းသည် ၎င်းကိုယ်တိုင်၏ လုပ်ငန်းစဉ် ID ကို ပရင့်ထုတ်သည်။ လုပ်ငန်းစဉ် ID သည် လုပ်ဆောင်နေသည့် လုပ်ငန်းစဉ်တစ်ခုစီအတွက် သီးသန့်ဖြစ်သည်။. မိတ္တူများစွာကို ထုတ်လွှတ်လိုက်ခြင်းဖြင့် ကျွန်ုပ်တို့သည် စိတ်ဝင်စားစရာကောင်းသော ရလဒ်ကို အံတုမိလိမ့်မည်- ပထမကိစ္စတွင်၊ သင်သည် ဘာမှမလုပ်ဘဲ မိတ္တူများစွာကို ဖွင့်လိုက်လျှင် လိပ်စာများသည် ကွဲပြားသွားပါမည်။ ဒါပေမယ့် ဒါက ကျွန်တော်တို့ရဲ့ သီအိုရီအောက်မှာ မကျပါဘူး။ ခေတ်မီဖြန့်ဝေမှုများတွင် ပုံမှန်အားဖြင့် မမ်မိုရီကျပန်းလုပ်ဆောင်ခြင်းကို ဖွင့်ထားသောကြောင့် မှန်ပါသည်။ ၎င်းကို ပိတ်ပါက ကျွန်ုပ်တို့ မျှော်လင့်ထားသည့် ရလဒ်ကို ရရှိသည် - တစ်ပြိုင်နက် လုပ်ဆောင်နေသည့် ပရိုဂရမ်နှစ်ခု၏ မှတ်ဉာဏ်လိပ်စာများသည် တူညီမည်ဖြစ်သည်။

လည်ပတ်မှုစနစ်များ- လွယ်ကူသောအပိုင်းသုံးပိုင်း။ အပိုင်း ၁- နိဒါန်း (ဘာသာပြန်)

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

ရှေ့နောက်ညီညွတ်မှု

လည်ပတ်မှုစနစ်များအတွင်း အရေးပါသော အကြောင်းအရာများအနက် နောက်တစ်ခုမှာ - ညီညွတ်မှု. ဤအသုံးအနှုန်းသည် တူညီသောပရိုဂရမ်တစ်ခုအတွင်း အရာများစွာကို တပြိုင်နက်တည်း လုပ်ဆောင်သည့်အခါတွင် ဖြစ်ပေါ်နိုင်သော စနစ်ရှိ ပြဿနာများအကြောင်း ပြောသောအခါတွင် ဤအသုံးအနှုန်းကို အသုံးပြုသည်။ လည်ပတ်မှုစနစ်အတွင်း၌ပင် ညီညွတ်မှုပြဿနာများ ပေါ်ပေါက်လာသည်။ ယခင် memory နှင့် processor virtualization ဥပမာများတွင်၊ OS သည် အရာများစွာကို တစ်ပြိုင်နက်တည်း စီမံခန့်ခွဲကြောင်း ကျွန်ုပ်တို့ သဘောပေါက်သည် - ၎င်းသည် ပထမလုပ်ငန်းစဉ်ကို စတင်သည်၊ ထို့နောက် ဒုတိယ၊ စသည်ဖြင့်။ ထွက်ပေါ်လာသည့်အတိုင်း ဤအပြုအမူသည် ပြဿနာအချို့ကို ဦးတည်သွားစေနိုင်သည်။ ထို့ကြောင့် ဥပမာအားဖြင့် ခေတ်မီသော ကြိုးမျိုးစုံ ပရိုဂရမ်များသည် ထိုကဲ့သို့သော အခက်အခဲများကို တွေ့ကြုံခံစားရသည်။

အောက်ပါအစီအစဉ်ကို စဉ်းစားပါ။

လည်ပတ်မှုစနစ်များ- လွယ်ကူသောအပိုင်းသုံးပိုင်း။ အပိုင်း ၁- နိဒါန်း (ဘာသာပြန်)

ပင်မလုပ်ဆောင်ချက်ရှိ ပရိုဂရမ်သည် ခေါ်ဆိုမှုကို အသုံးပြု၍ စာတွဲနှစ်ခုကို ဖန်တီးသည်။ pthread_create(). ဤဥပမာတွင်၊ thread တစ်ခုအား အခြားလုပ်ဆောင်ချက်များနှင့်အတူ တူညီသော memory space တွင် လုပ်ဆောင်နေသည့် function တစ်ခုအဖြစ် ယူဆနိုင်ပြီး၊ တစ်ချိန်တည်းတွင် function တစ်ခုထက်ပို၍ လုပ်ဆောင်နေပါသည်။ ဤဥပမာတွင်၊ thread တစ်ခုစီသည် လုပ်ဆောင်ချက်ကို စတင်ပြီး လုပ်ဆောင်သည်။ worker() သည် variable ကိုရိုးရှင်းစွာတိုးစေသည်။,.

အငြင်းအခုံ 1000 ဖြင့် ဤပရိုဂရမ်ကို run ကြပါစို့။ သင် ခန့်မှန်းထားသည့်အတိုင်း၊ ကြိုးတစ်ခုစီသည် ကိန်းရှင်ကို အကြိမ် 2000 တိုးထားသောကြောင့် ရလဒ်သည် 1000 ဖြစ်သင့်သည်။ သို့သော်၊ အရာအားလုံးသည် ဤမျှလောက်မရိုးရှင်းပါ။ ထပ်ခါထပ်ခါ ထပ်ခါထပ်ခါ ပြင်းအားအစီအစဥ်ဖြင့် ပရိုဂရမ်ကို run ကြပါစို့။

လည်ပတ်မှုစနစ်များ- လွယ်ကူသောအပိုင်းသုံးပိုင်း။ အပိုင်း ၁- နိဒါန်း (ဘာသာပြန်)

ဥပမာ၊ 100000 ကို ဂဏန်းတစ်ခုထည့်သွင်းခြင်းဖြင့်၊ အထွက်ကို နံပါတ် 200000 အဖြစ်မြင်ရမည်ဟု ကျွန်ုပ်တို့ မျှော်လင့်ပါသည်။ သို့သော်၊ ကျွန်ုပ်တို့သည် နံပါတ် 100000 ကို အကြိမ်များစွာ run ပါက အဖြေမှန်ကို မြင်ရုံတင်မကဘဲ အမျိုးမျိုးသော မှားယွင်းသော အဖြေများကိုလည်း ရရှိမည်ဖြစ်သည်။ ကိန်းဂဏန်းကို တိုးမြှင့်ရန်အတွက် လုပ်ဆောင်ချက်သုံးမျိုး လိုအပ်သည် - မှတ်ဉာဏ်မှ နံပါတ်ကို ထုတ်ယူခြင်း၊ တိုးခြင်းနှင့် နံပါတ်ကို ပြန်ရေးခြင်း စသည့်အချက်တွင် အဖြေမှာ အကျုံးဝင်ပါသည်။ ဤညွှန်ကြားချက်အားလုံးကို အက်တမ်နည်းအရ (အားလုံးတစ်ပြိုင်နက်တည်း) လုပ်ဆောင်ခြင်းမဟုတ်သောကြောင့်၊ ဤကဲ့သို့သော ထူးဆန်းသည့်အရာများ ဖြစ်ပွားနိုင်သည်။ ဤပြဿနာကို programming ဟုခေါ်သည်။ ပြိုင်ပွဲအခြေအနေ. မသိသောအခိုက်အတန့်တွင် အမျိုးအမည်မသိသော တပ်ဖွဲ့များသည် သင်၏ လုပ်ဆောင်ချက်တစ်ခုခု၏ စွမ်းဆောင်ရည်ကို ထိခိုက်စေနိုင်သည်။

source: www.habr.com

မှတ်ချက် Add