├── pages ├── hardware.typ ├── main.typ ├── main.pdf ├── cs_intro.pdf ├── hardware.pdf ├── structure.pdf ├── images │ ├── MotherBoard.png │ ├── logic_gates.jpg │ └── turing_machine.jpg ├── structure.typ └── cs_intro.typ ├── CODE_OF_CONDUCT.md ├── LICENSE-WTFPL └── README.md /pages/hardware.typ: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pages/main.typ: -------------------------------------------------------------------------------- 1 | // A Template File To Include all pages in one file -------------------------------------------------------------------------------- /pages/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/main.pdf -------------------------------------------------------------------------------- /pages/cs_intro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/cs_intro.pdf -------------------------------------------------------------------------------- /pages/hardware.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/hardware.pdf -------------------------------------------------------------------------------- /pages/structure.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/structure.pdf -------------------------------------------------------------------------------- /pages/images/MotherBoard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/images/MotherBoard.png -------------------------------------------------------------------------------- /pages/images/logic_gates.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/images/logic_gates.jpg -------------------------------------------------------------------------------- /pages/images/turing_machine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Walker-00/cs-eik/HEAD/pages/images/turing_machine.jpg -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Rules 2 | 3 | **0. Don't be the follower or supporter of dictatorship.** 4 |
5 | **1. If you're from Burma (myanmar) be apart of the CDM (Civil Disobedience Movement)** 6 | -------------------------------------------------------------------------------- /pages/structure.typ: -------------------------------------------------------------------------------- 1 | #let text_style(contents) = [ 2 | #show link: underline 3 | #set page(numbering: "1", number-align: center) 4 | #set text(font: "Maple Mono", lang: "my") 5 | #set heading(numbering: "1.1)") 6 | #set par(justify: true) 7 | #contents 8 | ] -------------------------------------------------------------------------------- /LICENSE-WTFPL: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Everyone is permitted to copy and distribute verbatim or modified 5 | copies of this license document, and changing it is allowed as long 6 | as the name is changed. 7 | 8 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 9 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 10 | 11 | 0. You just DO WHAT THE FUCK YOU WANT TO. 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cs-eik 2 | A project to write a book for everything I know (eik) about computer science with typst. 3 | 4 | ## မိတ်ဆက် 5 | ဒီ project လေးကတော့ ကျွန်တော်နဲ့ contributor တွေသိသလောက် Computer Science နဲ့ ပတ်သက်တဲ့ အကြောင်းအရာတွေကို မြန်မာလူငယ်တွေ အလကား လေ့လာလို့ရအောင် 6 | စုစည်းပြီး ရေးထားတာပါ။ ကျွန်တော်တို့ သိတာတွေပေါင်းရေးတာဖြစ်တဲ့အတွက် မပြည့်စုံတာ မမှန်ကန်တာတွေလည်း ပါနိုင်ပါတယ်။ ဒီအတွက် အမှားပြင်ချင်တာတို့ 7 | ကိုယ်တိုင် ဝင်ရောက် ရေးချင်တာတို့ ဆိုရင် issue ဖွင့်တာဖြစ်ဖြစ် pull request တင်တာဖြစ်ဖြစ် လုပ်ပြီး Speical Thanks ဒါမှမဟုတ် Co-Author နေရာမှာ credit 8 | ရယူလို့ရပါတယ်။ 9 | 10 |
11 | 12 | ## ဒီစာအုပ်ကို လိုက်လုပ်ဖို့ဘာတွေလိုအပ်လဲ 13 | ဘာမှမလိုပါဘူး ကျွန်တော်တို့က တော့အတတ်နိုင်ဆုံး ဘာမှနားမလည် တဲ့သူကို နားလည်အောင် ရှင်းပြသလိုမျိုး ရေးထားမှာဖြစ်တဲ့အတွက်၊ ဘာ backgroud မှ မရှိ ဘာ သချာ် 14 | ဘာ အဂ်လိပ် စာမှမရလဲ လိုက်လုပ်လေ့လာလို့ရအောင် သေချာပြင်ဆင်ပေးထားပါမယ်။ သေချာနားလည်အောင်ရှင်းပြပြီး အလကားရဖို့က ကျွန်တော့တာဝန်ထားပါ သေချာလိုက်လုပ် 15 | ရမှာကတော့ ဖတ်တဲ့သူတာဝန်ပါ။ 16 | 17 |
18 | 19 | ## License And Warning 20 | Lincese ကတော့ `WTFPL` ကို သုံးထားတယ်ဆိုပေမဲ့။ ကိုယ်ကျိုးအတွက် ပြန်လည်ရောင်းချတာမျိုးကို ခွင့်မပြုပါဘူး။ 21 | ခွင့်မပြုလည်း ဘာလုပ်ရတုန်းမေးရင် ဘာမှလုပ်မရပေမဲ့ ကျွန်တော့ရဲ့ အဓိကအိမ်မက်က ပညာရေးတိုင်းကို လူတိုင်း အလကား လေ့လာနိုင်စေချင်တာပါ။ 22 | ပြန်ရှဲတာမျိုး Hard Copy စာအုပ်တွေကို Non-Profit ရောင်းတာမျိုး လူထုအကျိုးပြု နေရာတွေ အဖွဲ့အစည်းတွေ အတွက် funding သဘောမျိုး ရောင်းချတာမျိုး ကတော့ 23 | ခွင့်ပြုချက်မလိုပဲလုပ်ဆောင်လို့ရပါတယ်။ -------------------------------------------------------------------------------- /pages/cs_intro.typ: -------------------------------------------------------------------------------- 1 | #import "structure.typ": * 2 | 3 | #show link: underline 4 | #show: text_style 5 | 6 | #align(center, [= စာအုပ် မိတ်ဆက်]) 7 | 8 | == ဒီစာအုပ်က ဘာအတွက်လဲ 9 | ဒီစာအုပ် ကတော့ ကျွန်တော် နဲ့ ဒီစာအုပ်ရဲ့ Contributors တွေသိတဲ့ Computer Science နဲ့ ပတ်သက်တဲ့ အကြောင်းတွေကို 10 | ရေးထားတာပဲဖြစ်ပါတယ်။ ကျွန်တော်တို့ သိတာတွေရေးတဲ့အတွက် မမှန်ရင်လည်း မမှန်နိုင်သလို မှားလည်းမှားနိုင်ပါတယ်။ အကယ်လို့ 11 | အမှားပြင်ချင်တယ် ကိုယ်သိတာလေးတွေထည့်ရေးပြီး Contributors (Co-Author) credit လိုချင်ရင်တော့ ဒီစာအုပ် project 12 | ရဲ့ #link("https://github.com/Walker-00/cs-eik")[Github Repo] ကို fork လုပ်ပြီးတော့ဖြစ်ဖြစ် 13 | issue ဖွင့်ပြီး အကြံပေးတာဖြစ်ဖြစ် လုပ်လို့ရပါတယ်။ ကျွန်တော်တို့ရဲ့ Main ရည်ရွယ်ချက်က Computer Science ကိုဘာ 14 | Background မှ မရှိတဲ့ သူကနေစပြီး စိတ်ပါဝင်စားတဲ့ ဘယ်သူပဲဖြစ်ဖြစ် ဘာတန်ဖိုးမှ ပေးစရာမလိုပဲ အလကား လေ့လာနိုင်ဖို့ 15 | အတွက်ရည်ရွယ်ပါတယ်။ 16 | 17 | == Authors တွေရဲ့ အသိပေးချက် 18 | ဒီစာအုပ်က စစချင်းတော့ အရမ်းပြည့်စုံမှာ မဟုတ်သလို ကိုယ်သိချင်တဲ့ အကြောင်းအရာတွေ ကိုယ်သိပြီးသား အကြောင်းအရာတွေလည်း စစချင်း 19 | မပါနိုင်သေးပါဘူး။ ကျွန်တော်လည်း အလုပ်တစ်ဖက် သင်တန်းတစ်ဖက်နဲ့ လုပ်နေရတာကြောင့်ပါ။ ဒါပေမဲ့ လိုတာတွေကို နည်းနည်းစီဖြည့်ဖြည့်ပြီး 20 | အဆင်ပြေလောက်တဲ့ အချိန်ကျရင် edition တစ်ခုချင်းစီ ထုတ်ပေးသွားမှာပါ။ 21 | 22 | == License and Code Of Conduct 23 | ဒီ project ရဲ့ license ကိုတော့ #link("http://www.wtfpl.net/")[WTFPL] သုံးထားပါတယ်။ License 24 | အရ ဘာမဆိုလုပ်လို့ရတယ်ဆိုပေမဲ့။ Non-Profit Sharing အတွက်ပဲ ခွင့်ပြုပါတယ်။ ပြန်ရောင်းတာမျိုး မလုပ်ဖို့ ခွင့်ပန်ပါတယ်။ 25 | အကယ်၍ တစ်ယောက်ယောက်က ရောင်းခဲ့ရင်လည်း။ ဒီစာအုပ်ဟာ Online Book PDF file အနေနဲ့ အလကားဖတ်လို့လည်း ရသလို၊ 26 | ကိုယ်တိုင် သိသလောက်ဝင်ရေးလို့ရတယ် ဆိုတာ အသိပေးပါရစေ။ ပြန်ရောင်းပေမဲ့ profit ထဲက 25%+ လောက်လိုအပ်တဲ့ နေရာတွေကို ပြန်ပြီး 27 | Donate လုပ်ပေးရင် ကောင်းပါမယ်ဗျ။ 28 | 29 | #pagebreak() 30 | 31 | #align(center, [= Computer Science မိတ်ဆက်]) 32 | \ 33 | == Computer Science ဆိုတာဘာလဲ 34 | *Computer* ဆိုတာက user က ပေးတဲ့ ညွှန်ကြားချက်တွေအတိုင်း အတိအကျလုပ်ဆောင်ပြီး\ ပြဿနာတွေ ဖြေရှင်းပေးရတဲ့ 35 | စက်ပစ္စည်းဖြစ်ပါတယ်။ အသေးစိတ်နဲ့ အမျိုးအစားတွေကိုတော့ Computer အတွက်သီးသန့်အပိုင်းမှာ ဆက်ရှင်းပြပေးပါမယ်။ *Science* 36 | ဆိုတာကတော့ မြန်မာလိုဆို သိပ္ပံဖြစ်ပြီး အရာရာတိုင်းကို လေ့လာတဲ့ နယ်ပယ်ဖြစ်ပါတယ်။တစ်ကယ်ဆို Science နဲ့တင် အဓိပ္ပါယ်ကပြီးပြီ\ ဆိုပေမဲ့လည်း 37 | တစ်ခါတစ်လေ သူ့နောက်မှာ * Engineering* ပါလာတတ်ပါတယ်။ တစ်ကယ်လည်း ပါသင့်တယ်လို့ထင်ပါတယ်။ ဘာလို့လဲဆိုတော့ 38 | Engineering ဆိုတာက Science က လေ့လာလို့ရလာတဲ့ အချက်အလက်တွေကို သုံးပြီး အပြင်လောကရဲ့ ပြဿနာတွေကို ဖြေရှင်းတဲ့ နယ်ပယ်ပါ။ 39 | ဆိုတော့ အတိုခေါက် ချုံ့ရရင် * Computer Science Engineering* ဆိုတာ user ရဲ့ ညွှန်ကြားချက်တွေအတိုင်း အတိအကျ 40 | လုပ်ဆောင်ပေးတဲ့ စက်ပစ္စည်းကိုလေ့လာပြီး ပြင်ပ ကမ္ဘာက ပြဿနာတွေကို ဖြေရှင်းပေးရတဲ့ နယ်ပယ် လို့အဓိပ္ပါယ်ရပါတယ်။\ 41 | \ 42 | 43 | == Computer ဆိုတာဘာလဲ 44 | Computer တွေကနေရာတိုင်းမှာ ရှိနေပါပြီ၊ သွားတိုက်တံနဲ့ အိပ်ယာခင်းကစလို့ ဒုံးပျံတွေ ကားတွေ မှာပါ မရှိမဖြစ်သဘောမျိုး 45 | ပါဝင်လာပါတယ်၊ ဖုန်းတွေဆိုတာလည်း Computer အသေးစားလေးပါ။ Computer မှာ Analog နဲ့ Digital ဆိုပြီး 46 | နှစ်မျိုးရှိပါသေးတယ် အဲ့နှစ်မျိုးရဲ့ အသေးစိတ်ကွဲပြားပုံကိုတော့နောက်မှရှင်းပြပါမယ်။ အဓိက ကတော့ Computer ဆိုတာ ပေးထားတဲ့ အသေးစိတ် 47 | ညွှန်ကြားချက်တွေအတိုင်း(*Algorithms*) သေချာ အတွက်အချက်လုပ်ပြီး ပြဿနာတွေကို ဖြေရှင်းပေးရတဲ့ စက်လို့ကောက်ချက်ချလို့ရပါတယ်။ 48 | Computer က အတွက်အချက်တင် လုပ်တာနဲ့တင် Computer လို့ခေါ်ပြီလားဆိုတော့ ဟုတ်တယ်လဲ ပြောရသလို မဟုတ်လဲမဟုတ်ပါဘူး။ ကျွန်တော်တို့ 49 | ဒီနေ့ခေတ်အမြင်နဲ့ကြည့်ရင် ဂဏန်းလေးတွေတင် တွက်ချက်ပြီး ပြန်ထုတ်ပေးရတာနဲ့တင် မလုံလောက်တော့ပါဘူး အချက်အလက်တွေကို သိမ်းထားနိုင်ရမယ် 50 | Computer တစ်လုံးနဲ့တစ်လုံး ချိတ်ဆက်ပြီး အချက်အလက်တွေကို ပို့ပေးနိုင်ရမယ်။ လူတွေ ရဲ့ နေ့စဥ် လိုအပ်ချက်တွေကို ဖြည့်စည်းပေးနိုင်တဲ့အပြင် 51 | အလုပ်ခွင် သုံးဖြစ်ဖြစ် တစ်ကိုယ်ရည် သုံးပဲဖြစ်ဖြစ် ဘယ်အတွက်သုံးသုံး လွယ်ကူ နေဖို့ အံ့ဝင်ခွင်ကျဖြစ်ဖို့ ဆို တစ်ခြားလိုအပ်တဲ့ အချက်အလက်တွေကို သိမ်းဖို့ 52 | Storage တွေ Program တွေအတွက် Memory တွေ ချိတ်ဆက်ဖို့ Network တွေလို စက်ပိုင်းဆိုင်ရာ ပစ္စည်းတွေ အပြင် အဲ့လို 53 | စက်ပိုင်းဆိုင်ရာ ပစ္စည်းတွေကို ထိန်းချုပ်ဖို့ စနစ် ပိုင်းဆိုင်ရာ Software တွေ လူတွေ အသုံးပြုဖို့ နဲ့ လိုအင်တွေကိုဖြည့်စည်းပေးနိုင်ဖို့ User 54 | ပိုင်းဆိုင်ရာ Software တွေပါလိုပါတယ်။ ဆိုတော့ ကျွန်တော်တို့ ဒီနေ့ခေတ်အမြင်နဲ့ကြည့်ရင်တော့ အဲ့တာတွေအကုန်ပါတဲ့ စက်ပစ္စည်းကို Computer 55 | လို့ခေါ်ဝေါ်ကြပါတယ်။ 56 | 57 | == Computer တွေမှာ အမျိုးအစားဘယ်နှခုရှိသလဲ 58 | ကျွန်တော် သိသလောက်တော့ Analog Computer နဲ့ Digital Computer ဆိုပြီး နှစ်မျိုးရှိပါတယ်။ ဒီနေ့ခေတ်မှာတော့ Digital 59 | Computer တွေကိုပဲသုံးလာကြပါတယ်။ သူတို့နှစ်ခုအကြောင်းကို သီးသန့်ခွဲပြီး ရှင်းပြပေးပါမယ်။ 60 | 61 | === Analog Computer ဆိုတာဘာလဲ 62 | ရှင်းအောင်ပြောရရင်တော့ Analog Computer ဆိုတာ Binary(1, 0) Input တွေအစား physical input တွေ 63 | ဥပမာ: လျှပ်စစ် အားတွေတို့ နဲ့ တစ်ခြား ပြင်ပမှာ ရှိတဲ့ အရာဝတ္ထု တွေကို သုံးပြီး ပြဿနာတွေကို ဖြေရှင်းပေးတာပါ။ သူ့တို့ကိုတော့ ဒီခေတ် 64 | modern computer တွေမှာ တွေ့ရမှာမဟုတ်တော့ပါဘူး ဘာလို့လဲဆိုတော့ သူတို့က personal usage အတွက်မကောင်းဘူး ပြင်ပမှာ ရှိတဲ့ 65 | physical input တွေကိုသုံးတဲ့အတွက် မြန်ပေမဲ့ Digital လောက် စိတ်မချရသလို မတိကျဘူး အဲ့အတွက် အရေးကြီးတဲ့ အတွက်အချက်တွေအတွက် 66 | ဆိုရင် Analog ကို သုံးလို့မရပါဘူး။ ဒါပေမဲ့ သူ့ရဲ့ အားသာချက်တွေအရဆိုရင် သူက မြန်တယ်, အားသုံးတာလဲနည်းပါတယ်။ 67 | ဒီအားနည်းချက်အားသာချက်တွေက သူဟာ physical input အပေါ်မူတည်နေတာကြောင့်ပါ။ ဥပမာ လျှပ်စစ် ကိုပဲ physical 68 | input ယူတယ်လို့ ထားလိုက်ပါ။ ဘယ်လောက် volt ဘယ်လောက် အားပေးလဲကစပြီး တစ်ခါတစ်ခါ input ချိန်းတာနဲ့ အရင် 69 | အတိုင်းအတိအကျအဖြေပြန်ရဖို့ဆိုတာ မဖြစ်နိုင်သလောက်ကိုဖြစ်ပါတယ် အဲ့တာကြောင့်သူ့ရဲ့ အားနည်းချက် မတိကျတာက ဖြစ်လာတာပါ။ ဒါပေမဲ့ တွက်ချက်မှု 70 | တိုင်းက input အားပေးလိုက်တာနဲ့ တန်းပြီး တွက်တော့ realtime မှာ ဖြစ်တဲ့အတွက် အရမ်းမြန်ပါတယ် အဲ့တာကတော့ 71 | သူ့ရဲ့အားသာချက်ပါ။ ကမ္ဘာ့ ပထမဆုံး Computer ဖြစ်တဲ့ Analog Computer ကို 1821 မှာ သချ်ာပညာရှင် Charles 72 | Babbage က Design ဆွဲခဲ့ပါတယ်။ သူက စက်အားအပေါ်မှပဲ မူတည်ပြီး Design ဆွဲခဲ့ပြီး Binary(0, 1) အစား 73 | deimal(0~9) ကိုသုံးပါတယ်။ 74 | 75 | === Digital Computer ဆိုတာဘာလဲ 76 | Digital Computer ကတော့ Analog Computer တွေလို input ကို ပြင်ပ အရာဝတ္ထု တွေကနေယူတာမဟုတ်ပဲ Binary 77 | Number လို့ခေါ်တဲ့ 0 နဲ့ 1 ကို input အဖြစ်ယူပြီး Logic Gate တွေကိုသုံးပြီး ပေးတဲ့ အချက်အလက်တွေကို အတွက်ချက်ပြီး 78 | ပြဿနာတွေကိုဖြေရှင်းပေးတာပါ။ modern computer အကုန်လုံးလိုလိုက ဒီ Digital Computer တွေပဲ ဖြစ်ပါတယ်။ Logic 79 | Gate တွေအကြောင်းကို Cpu အပိုင်းမှာ ရှင်းပြပေးပါမယ်။ သူ့ကို ခွဲပြီးရှင်းပြရရင် အရေးကြီးတဲ့အပိုင်းသုံးပိုင်းခွဲလို့ရတယ်။ ပထမဆုံးနဲ့ 80 | အောက်ဆုံး အပိုင်းကတော့ စက်ပစ္စည်းပိုင်း(Hardware), အဲ့ဒီ Hardware ပိုင်းမှာတော့ စောနကပြောတဲ့ တွက်ချက်တာတွေလုပ်ဖို့ Logic 81 | Gate တွေပါတဲ့ Cpu ရယ် အချက်အလက်တွေသိမ်းဖို့ HDD တို့ SSD တို့လို့ Storage device တွေရယ် Program တွေ အသုံးပြုနေစဥ် 82 | အချက်အလက်တွေသိမ်းတာနဲ့ တစ်ခြားကိစ္စ တွေလုပ်ဖို့ DDR တို့ DIMM တို့လို RAM(Random Access Memory) ရယ် 83 | IO(Input/Output) အတွက် Monitor တို့ Keyboard တို့ နဲ့ Mouse တွေအပြင် တခြား Wifi တို့ bluetooth 84 | တို့လည်း ပါဝင်ပါတယ်။ ဒုတိယအနေနဲ့ကတော့ System Software ပိုင်းပါ သူ့မှာတော့ စောနက စက်ပိုင်းဆိုင်ရာ ကိုထိန်းချုပ်ဖို့နဲ့ 85 | User ပိုင်းဆိုင်ရာ Software တွေအတွက် စက်ပိုင်းဆိုင်ရာ Hardware ကို management လုပ်ပေးရတဲ့ BIOS တို့, Kernel 86 | တို့ နဲ့ Bootloader တို့လို Software တွေပါဝင်ပါတယ်။ တတိယအနေနဲ့ကတော့ User Software ပိုင်းပါ အဲ့တာတွေကတော့ 87 | ကျွန်တော်တို့နဲ့ ရင်းနှီးပြီးသား Facebook တို့ Discord တို့နဲ့ တစ်ခြား Software တွေပါဝင်ပါတယ်။ Computer 88 | ရဲ့အလုပ်လုပ်ပုံက ကျွန်တော်တို့ လူတွေနဲ့စင်ပါတယ်။ ကျွန်တော်တို့ ဦးဏှောက်က မျက်စိ၊ နား၊ လျှာ စတဲ့ နေရာတွေကနေ အချက်အလက်တွေကိုယူ တွက်ချက်ပြီး 89 | ခြေတို့ လက်တို့ ကနေ အချက်အလက်နဲ့ သက်ဆိုင်သလို ပြန်လည် တုံ့ပြန်ပေးတဲ့အပြင်၊ လုပ်ဆောင်နေစဥ် အတွင်းလိုအပ်တဲ့အချက်အလက်တွေကို Short Term 90 | Memory ထဲမှာသိမ်းပြီး အရေးကြီးတဲ့အချက်အလက်တွေကိုတော့ Long Term Memory ထဲထည့်ပြီး နောက်သုံးလို့ရအောင်သိမ်းပါတယ်။ 91 | Computer ကလဲ အဲ့အတိုင်းပါပဲ Program တွေ Keyboard တွေနဲ့ Mouse တွေလို Input device တွေကနေ အချက်အလက်တွေယူပြီး 92 | အတွက်အချက်တွေလုပ်ဆောင်ပေးပြီး Monitor တို့ Printer တို့လို Output Device တွေကနေ အချက်အလက်တွေကိုပြန်ပေးတယ်။ 93 | အဲ့လိုတွက်ချက်နေတုန်းမှာ ခနတာ မှတ်စရာရှိတာတွေကို RAM ထဲမှာ ခနမှတ်ထားပြီးတော့ အရေးကြီးတဲ့ သိမ်းစရာ file တို့လို အချက်အလက်တွေကို 94 | စောနက HDD တို့ SSD တို့လို Storage device တွေထဲမှာ သိမ်းပေးပါတယ်။ ဆိုတော့အဲ့တာကိုကြည့်ရင် Computer နဲ့ လူနဲ့က 95 | တော်တော်လေးကိုတူကိုတွေ့နိုင်ပါတယ်။ တစ်ခါတစ်လေမှာ Digital Computer ဆိုတဲ့ အသုံးအနှုန်းအစား Turing Machine 96 | လို့ခေါ်လို့လဲရပါတယ်။ Turing Machine အကြောင်းကိုတော့ သက်သက်ရှင်းပြပေးပါမယ်။ 97 | 98 | == Turing Machine နဲ့ Turing Complete ဆိုတာဘာလဲ 99 | Turing Machine ကို 1936 မှာ UK က သချ်ာ ပညာရှင် Alan Turing ကနေပြီးတော့ ပထမဆုံး Design 100 | ရေးဆွဲခဲ့ပါတယ်။ သူ့ Design မှာ အချက်အလက်တွေပါတဲ့ တိပ်ခွေရယ်၊ ညွှန်ကြားချက်တွေထည့်ဖို့ ကိုယ်ထည် ရယ်၊ အဲ့ဒီ ကိုယ်ထည်ထဲက 101 | ညွှန်ကြားချက်တွေအတိုင် တိပ်ခွေပေါ်က အချက်အလက်တွေကို ဖတ်/ပြင် ဖို့ အရာတစ်ခုရယ်ပါ(ခဲတံဖြစ်ဖြစ် ဘောပင်ဖြစ်ဖြစ်လို့ပဲ မှတ်ကြည့်လိုက်ပါ။)။ သူ့ရဲ့ 102 | အလုပ်လုပ်ပုံကလဲ သူ့ရဲ့ Design အတိုင်းပဲ ရိုးရှင်းပါတယ်။ အဲ့ဒီ ခဲတံက တိပ်ပေါ်က အချက်အလက်ကိုဖတ်မယ် ပြီးရင် သူ့ရဲ့ ကိုယ်ထည်ထဲက 103 | ညွှန်ကြားချက်ရဲ့ ကဘယ်အခြေအနေမှာ ရှိနေလဲ အဲ့အခြေအနေမှာ ဘာညွှန်ကြားထားသလဲဆိုတာအပေါ်မူတည်ပြီးတော့ ခဲတံက တိပ်ပေါ်က အချက်အလက်ကို 104 | ပြင်ရမယ်ဆိုပြင်တယ် မဟုတ်ရင် နောက်အချက်အလက်တစ်ခုစီကိုသွားပါတယ်။ Design ရော အလုပ်လုပ်ပုံရောက ရိုးရှင်းပေမဲ့ သူ့ရဲ့ 105 | စွမ်းဆောင်နိုင်စွမ်းက အတွက်အချက်(Compute) လုပ်လို့ရတဲ့ ညွှန်ကြားချက်(Algorithms) မှန်သမျှကို တွက်ဖို့ လုံလောက်တဲ့အချိန်နဲ့ 106 | အချက်အလက်ပေးဖို့ လုံလောက်တဲ့ နေရာရှိရင် အပေါင်း အနုတ်ကစလို့ နာဇီ လျှို့ဝှက် code တွေဖေါက်တာ အထိ အခုခေတ် computer 107 | တိုင်းလုပ်နိုင်တာအကုန်လုံးကိုလုပ်နိုင်စွမ်းရှိပါတယ်။ တစ်ကယ်လဲ Alan Turing နဲ့ တစ်ခြား သချ်ာ ပညာရှင်တွေပေါင်းပြီး ဒုတိယ 108 | ကမ္ဘာစစ်မှာ နာဇီတွေရဲ့ လျှို့ဝှက် code ကို ဖောက်ဖို့ *bombe* လို့ခေါ်တဲ့ Turing Machine ကိုဆောက်ခဲ့ပြီး ဒုတိယ ကမ္ဘာစစ်ကို 109 | ခန့်မှန်း ထားတာထက် 2 နှစ်ကနေ 4 နှစ်အထိ တိုအောင်လုပ်ပေးနိုင်ခဲ့ပါတယ်။ စစ်ပွဲအပြီးမှာတော့ Alan Turing နဲ့ John von 110 | Neumann တို့ပေါင်းပြီးတော့ *The ENIAC* လို့ခေါ်တဲ့ ကမ္ဘာပထမဦးဆုံး reprogrammable ဖြစ်တဲ့ လျှပ်စစ် Computer 111 | ကို Design ဆွဲခဲ့ပါတယ်။ နောက်တစ်ချက် အနေနဲ့ကတော့ Alan Turing ဟာ Computer တွေလူတွေလို စွမ်းဆောင်နိုင်လား 112 | ကိုစမ်းသက်ဖို့အတွက် Turing Test ကိုပါ ရေးသားခဲ့ပါတယ်။ ရှင်းရှင်းပြောရရင်တော့ AI တွေကို စမ်းဖို့အတွက် 113 | ဥာဏ်စမ်းသဘောမျိုးပါ၊ ဒါ့အတွက် သူ့ကို *Father of Modern Computer and AI* ဆိုပြီး တစ်ချို့ကခေါ်ကြပါတယ်။ 114 | Turing Complete ဆိုတာကတော့ရှင်းပါတယ်၊ Turing Machine လုပ်နိုင်သမျှ လုပ်နိုင်တဲ့ အရာကိုခေါ်တာပါ။ ဥပမာဆို 115 | Minecraft ရဲ့ Red Stone တို့ complex quantum system တို့ Game Of Life တို့လိုပါ။ Minecraft ရဲ့ 116 | Red Stone နဲ့ Minecraft ပြန်ရေးလို့ရသလို Game Of Life နဲ့ AI ဆောက်လို့ရပါတယ်။ ဒါတွေအားလုံးဟာ Alan 117 | Turing နဲ့ Turing Completeness Theorem ကြောင်းပါ။ ဒါပေမဲ့ Alan Turing ဟာ သူ့ရဲ့ အတွေးခေါ်တွေပေါ် 118 | မူတည်ပြီး တိုးတက်လာမဲ့ ခေတ်ကြီးကို ကြည့်မသွားခဲ့ရရှာပါဘူး။ Alan Turing ကို 1952 မှာ UK ရဲ့ အစိုးရကနေ Gay ဖြစ်တဲ့အတွက် 119 | ဟော်မုန်းဆေးတွေအတင်းသောက်ခိုင်းခဲ့ရာကနေ 1954 မှာ သူ့ကိုယ်သူ အဆုံးစီရင်ခဲ့ပါတယ်။ 120 | 121 | #figure( 122 | image("images/turing_machine.jpg", width: 50%), 123 | caption: [Turing Machine ပုံ], 124 | ) 125 | 126 | #pagebreak() 127 | #align(center, [= Computer Hardware များအကြောင်း]) 128 | 129 | == မိတ်ဆက် 130 | Computer Hardware ဆိုတာကတော့ Computer တစ်လုံးမှာ အလုပ်လုပ်ဆောင်ဖို့နဲ့ တစ်ခြားလိုအပ်တဲ့ လုပ်ဆောင်ချက်တွေကို CPU နဲ့ 131 | တွဲပြီးလုပ်ဆောင်ပေးဖို့ ထည့်သွင်းထားတဲ့ စက်ပစ္စည်း တွေပဲဖြစ်ပါတယ်။ အဲ့လိုမျိုး Hardware တွေအများကြီးရှိပါတယ်။ ဒါပေမဲ့ 132 | ကျွန်တော်သိသလောက်အနည်းငယ်ကိုပဲ ထည့်ပြီးရှင်းပြပေးထားပါမယ်။ 133 | 134 | == CPU (Central Processing Unit) 135 | CPU ဆိုတာကတော့ Turing Machine ထဲက ခဲတံလေးလိုပါပဲ၊ သူက RAM(တိပ်)ထဲက အချက်အလက် တွေကိုဖတ်ပြီး Software(ကိုယ်ထည်) 136 | ကပေးတဲ့ ညွှန်ကြားချက်တွေအတိုင်း RAM ထဲက အချက်အလက်တွေကို ဖတ်/ပြင်ပေးတဲ့ဟာပါ။ သူက Computer Hardware တွေထဲမှာ အရေးကြီးတဲ့ 137 | အပိုင်းမှာပါတယ်။ ဥမာဆို လူလိုပဲ လူရဲ့ ခြေ/လက် တို့လို့ အစိတ်အပိုင်းတွေမပါ ရင်မကောင်းပေမဲ့ အသက်တော့ရှင်နိုင်ပါသေးတယ်။ ဒါပေမဲ့ 138 | အချက်အလက်တွေကို တွက်ချက် သိမ်းစည်းထားပေးမဲ့ ဦးဏှောက် မရှိရင် အသက်မရှင်နိုင်ပါဘူး။ 139 | 140 | === CPU မှာဘာတွေပါလဲ ဘယ်လိုအလုပ်လုပ်လဲ 141 | Modern Computer တွေမပေါ်ခင် အရင်ထွက်ခဲ့တဲ့ *The ENIAC* တို့လို Computer တွေမှာ Vacuum Tube လို့ခေါ်တဲ့ 142 | မီးသီးလိုပုံစံ လျှပ်စစ် diode တွေကို သုံးခဲ့ကြပါတယ်။ Vacuum Tube တစ်ခုမှာ Anode, Grid နဲ့ Cathode ဆိုပြီး 143 | အပိုင်းသုံးပိုင်းပါပါတယ် အသေးစိတ်ကိုတော့ အောက်မှာ ရှင်းပြပေးပါမယ်။ ကျွန်တော်တို့ LED မီးတွေမပေါ်ခင်က သုံးခဲ့တဲ့ မီးသီးတွေ နဲ့ 144 | စင်ပါတယ်။ ဒါပေမဲ့ modern CPU တွေမှာ Vacuum တွေအစား သူတို့နဲ့ လုပ်ဆောင်ပုံချင်းတူတဲ့ transistor တွေကိုပဲသုံးပါတယ်။ 145 | transistor တွေအပြင် CPU မှာ Logic Gate တွေ ယာယီမှတ်ထားဖို့ register တွေ နဲ့ နာရီပါပါတယ်။ 146 | 147 | === Vacuum တွေကဘယ်လိုအလုပ်လုပ်လဲ 148 | Anode ကို အပေါင်းအားပေးထားတဲ့ ဝါယာနဲ့ဆက်ပြီး အဲ့ဝါယာမှာ မီးသီးတစ်လုံးကိုလဲတင်ထားကြည့်လိုက်ပါ။ Grid ကိုလဲ 149 | အပေါင်းအားပေးထားလိုက်ပါ။ သူ့မှာ ပါတဲ့ Cathode ကို လျှပ်စစ် အားပေးလိုက်ပြီးဆိုရင် Cathode က အရမ်းပူလာပြီး 150 | electrons တွေထုတ်လွှတ်ပေးပါတယ်။ အဲ့ဒီ electrons တွေက အနှတ်အားဖြစ်တဲ့အတွက်ကြောင့် ဆန့်ကျင်ဖက် အားရှိတဲ့ စောနက 151 | အပေါင်းအားပေးထားတဲ့ Grid ဆီကို သွားပါတယ်။ ဒါပေမဲ့ တစ်ချို့ electrons တွေက Grid မှာ ပါတဲ့ အပေါက်တွေကနေ 152 | လွတ်ထွက်သွားပြီး အပေါင်းအားရှိတဲ့ Anode ဆီကို သွားပါတယ်။ အဲ့ဒီမှာ အပေါင်းအားနဲ့ အနှတ်အားပေါင်းပြီး လျှပ်စစ် စီးသွားကာ 153 | စောနက တင်ထားတဲ့မီးသီးလင်းလာပါလိမ့်မယ်။ ဒါပေမဲ့ အဲ့တာက Grid က အပေါင်းအားဖြစ်နေတဲ့အတွက်ကြောင့်ပါ။ ကျွန်တော်တို့က 154 | အဲ့ဒီအပေါင်းအားအစား Grid ကို အနှတ်အားပေးလိုက်ရင် Cathode ကလာတဲ့ အနုတ်အား electrons တွေက အားတူတဲ့အတွက်ကြောင့် 155 | ဆန့်ကျင်ပြီး Anode ဆီကို မရောက်တဲ့အတွက်ကြောင့် မီးလည်းမလင်းတော့ပါဘူး။ အဲ့မှာ ကျွန်တော်တို့က မီးလင်းတာကို 1 မီးမလင်းတာကို 0 156 | အဖြစ်ယူလိုက်ရင် 1/0 Binary ရပါပြီ။ ဒါကတော့ အရင်က Computer Cpu တွေအလုပ်လုပ်တဲ့ပုံပါ။ 157 | 158 | === Transistor တွေ ကဘာတွေလဲ ဘယ်လိုအလုပ်လုပ်လဲ 159 | Vacuum Tube တွေက အရမ်းအားသုံးလွန်းတာရယ် အရမ်းလေးတာရယ် နဲ့ တစ်ခြား အကြောင်းတွေကြောင့် သာမာန် လူတွေသုံးစွဲဖို့ 160 | တတ်နိုင်ဖို့ဆိုတာမဖြစ်နိုင်ပါဘူး။ ဒီအတွက် December 23 1947 မှာ Bell Lab ကမ္ဘာပထမဦးဆုံး transistor ကို 161 | ထုတ်လုပ်ခဲ့ပါတယ်။ သူ့မှာ အဓိကပါဝင်တာက သဲကနေရတဲ့ silicon ရယ် ကျောက်တုံးကရတဲ့ phosphorus ရယ် boron 162 | ရယ်ပါပါတယ်။ သူ့ရဲ့ အလုပ်လုပ်ပုံက စောနက Vacuum Tube ပုံစံနဲ့အတူတူပါပဲ။ silicon ရဲ့ အပြင်အခွံမှာ(outermost 163 | shell) electron 4 လုံးပါပါတယ် ဒါပေမဲ့ နောက် 4 လုံးပါရင် အရမ်း တည်ငြိမ်(stable) ဖြစ်သွားမှာဖြစ်တဲ့အတွက်ကြောင့် 164 | silicon က သူ့ရဲ့ အနီးဆုံးမှာရှိတဲ့ တစ်ခြား silicon 4 ခုနဲ့ ထပ်ပေါင်းတဲ့အခါမှာ အရမ်း stable ဖြစ်တဲ့ crystal 165 | lattice ပုံစံ(structure) ဖြစ်သွားကျပါတယ်။ ဒါပေမဲ့ အဲ့လို stable ဖြစ်သွားတာကြောင့် အား(energy) အလုံအလောက်ရတဲ့ 166 | တစ်ချို့ electron တွေပဲ အဲ့ဒီ structure ကနေထွက်ပြီး လွတ်လွတ်လပ်လပ် သွားနိုင်ပါတယ် (အိမ်ပြေးတွေ)။ ဒါပေမဲ့အဲ့ ထဲက silicon 167 | Atom တစ်လုံးကို စောနက ကျောက်တုံးကရတဲ့ phosphorus Atom တစ်လုံးနဲ့ လဲလိုက်တဲ့အခါမှာ phosphorus ရဲ့ outermost 168 | shell မှာ electron 5 လုံးပါတဲ့အတွက်။ စောနကလို stable ဖြစ်တဲ့ structure ရဖို့ ပိုနေတဲ့ electron တစ်လုံးက 169 | အပြင်ကို လွတ်ထွက်သွားပြီး စောနကလို stable ဖြစ်တဲ့ structure ပြန်ဖြစ်သွားပါတယ်။ အဲ့ကောင်ကိုတော့ *N-Type* လို့ခေါ်ပါတယ် 170 | ဘာလို့လဲဆိုတော့ silicon နဲ့ phosphorus စောနက အချိုးအတိုင်းထပ်ထည့်တဲ့ အခါ structure ကပိုကြီးလာပြီး 171 | အနုတ်အား(Negatively charged) ရှိတဲ့ electron တွေလွတ်ထွက်တာ ပိုများလာပါတယ်။ အဲ့ဒီအတွက် အဲ့ကောင်ကနေ အနှတ် 172 | လျှပ်စစ်အားထွက်တယ် စောနက Cathode လိုပါ။ ဒါပေမဲ့ ကျွန်တော်တို့က electron ပိုများတဲ့ phosphorus အစား 3 လုံးပဲရှိတဲ့ 173 | boron ကို ထည့်လိုက်တဲ့အခါ သူနဲ့ အနီးမှာရှိတဲ့ electron တွေကို ယူပါတော့တယ် အဲ့ဒီမှာပဲ အပေါင်းအားရှိတဲ့ အပေါက်တွေ ကစပြီး 174 | လွတ်ထွက်ပါတော့တယ်။ သူ့ကို *P-Type* လို့ခေါ်ပါတယ်။ N-Type အတိုင်းပဲ boron နဲ့ silicon တွေကို အချိုးအတိုင်းထပ်ထည့်တဲ့ 175 | အခါ အပေါင်းအားရှိတဲ့ အပေါက်တွေပိုများလာပါတယ်။ Grid နဲ့ နည်းနည်း ကွဲပေမဲ့ သူ့ကို အဲ့တိုင်းမျိုးလို့ပဲမှတ်ထားလို့ရပါတယ်။ 176 | transistor မှာ P-Type ရော N-Type ရော နှစ်မျိုးလုံးကို N-Type ကို ဘေးနှစ်ဘက်ကထား P-Type ကို 177 | အလယ်မှာထားပြီး N-Type နှစ်ခုရဲ့ဘေးမှာ လျှပ်စစ်သွားလို့ရအောင် *Source* နဲ့ *Drain* လို့ခေါ်တဲ့ ဝါယာသဘောမျိုးနဲ့ 178 | P-Type ရဲ့အပေါ်မှာ လျှပ်စစ်အားပေးဖို့အတွက် *Gate* လို့ခေါ်တဲ့ ဝါယာသဘောမျိုးပါပါတယ်။ Gate ကနေ လျှပ်စစ်မပေးခင်မှာ 179 | N-Type က electron တွေက P-Type မှာရှိတဲ့ အပေါက်တွေထဲရောက်သွားပြီး stable ဖြစ်ကာ နောက်ထပ် Source ကပေးတဲ့ 180 | လျှပ်စစ်အားတွေကို အားယူပေးတဲ့ Drain စီ မရောက်အောင် တားထားတဲ့ နံရံသဘောမျိုးဖြစ်လာပါတယ်။ အဲ့ကောင်ကို Depletion layer 181 | လို့လဲခေါ်ပါတယ်။ ဒါပေမဲ့ Gate ကနေ အပေါင်းအားပေးလိုက်တဲ့အခါ အဲ့ဒီ layer မှာ အပေါက်သဘောမျိုး ဖြစ်လာတဲ့အခါ အဲ့အပေါက်ကနေ 182 | electron တွေသွား Drain ကိုရောက်တဲ့အခါ လျှပ်စစ်အားကိုဖြစ်စေပါတယ်။ 183 | 184 | === Logic Gates ဆိုတာဘာလဲ 185 | Logic Gates တွေမှာ အဓိကအနေနဲ့ *NOT* Gate, *AND* Gate နဲ့ *OR* Gate ဆိုပြီး သုံးခုရှိပါတယ်။ 186 | နောက်ထပ်အများကြီးထပ်ရှိပါသေးတယ်။ ဒါပေမဲ့ ဒီသုံးခုကိုပဲ ရှင်းပြပေးထားပါမယ်။ Logic Gate အကြောင်းရှင်းအောင်ပြောရရင်တော့ 187 | Transistor နဲ့ Resistor တွေကို နေရာအလိုက်ပေါင်းပြီး တစ်ခုရဲ့ output ကို တစ်ခုက input အနေနဲ့ ယူပြီး 188 | အလုပ်လုပ်တယ်လို့မှတ်ထားလို့ရတယ်။ AND Gate က input current နှစ်ခုလုံး 1 အပေါင်းအား ဖြစ်နေမှ 1 အပေါင်း output 189 | အဖြစ်ပြန်ထွက်ပေးပါတယ်။ တစ်ခုက အနှတ်အားဖြစ်နေတာတို့ နှစ်ခုလုံးက အနှတ်အားဖြစ်နေတာတို့ ဆိုရင် အနှတ်အားပဲပြန်ထွက်ပေးပါတယ်။ AND 190 | ကို လုပ်ကြည့်ချင်ရင် ပထမဆုံး Transistor နှစ်ခု A,B ကိုယူ A ရဲ့ Source နဲ့ Gate ကို အားပေးဖို့အတွက် ဝါယာတစ်ခုနဲ့ချိတ် 191 | A Drain ကိုတော့ B ရဲ့ Source နဲ့ ချိတ် B ရဲ့ Gate ကို အားပေးဖို့ ဝါယာနဲ့ချိတ်။ ရလဒ်ထွက်မဲ့ B ရဲ့ Drain ကိုတော့ 192 | မီးသီးဖြစ်ဖြစ် တစ်ခုခုနဲ့ ချိတ်ကြည့်ထားလိုက်။ A ရဲ့ Source ကို အားပေးလိုက်ပြီး A နဲ့ B ရဲ့ Gate ကို အားမပေးဘဲ နေရင် မီးသီး 193 | လုံးဝလင်းလာမှာ မဟုတ်ဘူး ဘာလို့လဲဆိုတဲ့ နှစ်ခုလုံးက 0 ဖြစ်နေတဲ့အတွက်ကြောင့် လျှပ်စစ်က A ကနေ B ကိုမသွားနိုင်ဘူး။ ဒါဆို A ရဲ့ Gate 194 | ကိုပဲ အားပေးရရင်ရမလား။ လုံးဝလင်းလာမှာမဟုတ်ပြန်ပါဘူး ဘာလို့လဲဆိုတော့ A က 1 ဖြစ်ပြီး B က 0 ဖြစ်နေလို့ပါ။ A က 195 | အားထုတ်ပေးတယ်။ B မှာလည်း အားဝင်ပေမဲ့ B ကပြန်မထွက်တဲ့အခါမလင်းပြန်ပါဘူး။ အဲ့လိုပဲ B က 1 ဖြစ်ပြီး A က 0 ဖြစ်နေရင်လဲ A 196 | ကအားက B ကိုမရောက်တဲ့အတွက်ကြောင့် လင်းမှာမဟုတ်ပါဘူး။ နှစ်ခုလုံး 1 ဖြစ်နေမှသာ A နဲ့ B က နှစ်ခုလုံး 197 | အားပြန်ထုတ်ပေးနိုင်လို့လင်းမှာပါ။ OR ဆိုတာကတော့ A ဒါမှမဟုတ် B က အပေါင်းဖြစ်ရင် လျှပ်စစ်ထွက်ပေးတာပါ။ Not ကတော့ 198 | ပြောင်းပြန်ပြန်ပေးတာပါ လျှပ်စစ် input ပေးနေရင် သူက ဘာ output မှ ထုတ်မပေးပါဘူး။ input မပေးရင်တော့ output 199 | ပေးပါတယ်။ ဥပမာ ပေးရရင်တော့ AND Gate ဆိုတာ နှစ်ဖက်အပြန်အလှန်ရှိတဲ့ချစ်ခြင်း၊ OR Gate က တစ်ဖက်သက်ချစ်ခြင်း။ Not 200 | Gate က ကန့်လန့်တိုက်ချစ်ခြင်းပါ။ 201 | 202 | #figure(image("images/logic_gates.jpg"), caption: [Logic Gates တစ်ချို့ပုံ]) 203 | 204 | === CPU တွေဘယ်လိုအလုပ်လုပ်လဲ Clock Speed ဆိုတာဘာလဲ 205 | ကျွန်တော်တို့ အစ က CPU တွေက Memory ထဲက Data တွေကို Read Write လုပ်ပြီး အလုပ်လုပ်တာနဲ့ Logic Gate တွေက 206 | ဘယ်လိုအလုပ်လုပ်လဲလုပ်လဲ ပြောခဲ့ပြီးပါပြီ။ ဒီတစ်ခါမှတော့ သူတို့နှစ်ခုပေါင်းပြီး ဘယ်လိုအလုပ်လုပ်တာလဲဆိုတာပြောပြပါမယ်။ CPU မှာ 207 | Fetch-Decode-Execute လို့ခေါ်တဲ့ FDE ကိုလုပ်ဆောင်ပေးပါတယ်။ စစချင်းမှာ CPU က Program ကပြောထားတဲ့ Memory 208 | ရဲ့ အစ ကိုသွားပြီး အဲ့ဒီ Memory Address ကို Fetch လုပ်ကာ သူ့ရဲ့ register ထဲမှာ ခနသိမ်းပေးထားပါတယ်။ သိမ်းပြီး 209 | သွားတဲ့နောက် Decode အဆင့်ကျ စောနက register ထဲက Memory Address သွားပြီး အဲ့ဒီ Address ထဲမှာ သိမ်းထားတဲ့ 210 | Value ဒါမှမဟုတ် လုပ်ဆောင်ရမဲ့ နောက်ထပ် အချက်အလက် ကိုယူပါတယ်။ Execute အဆင့်မှာတော့ အဲ့ဒီနောက်ဆုံး သိမ်းထားတဲ့ 211 | register ထဲက အချက်အလက် ဒါမှမဟုတ် ညွှန်ကြားချက်ကို လုပ်ဆောင်ပေးပါတယ်။ အဲ့ကောင်ကိုပဲ Memory Address တစ်ခုချင်းစီ 212 | တိုးပြီး လုပ်ဆောင်ပေးသွားတာပါ။ အဲ့ဒါမျိုးကို CPU Clocking ဖြစ်တယ်လို့ခေါ်ပါတယ်။ အဲ့ကောင်တွေက Cpu ထဲမှာ တစ်စက္ကန့်ကို 213 | Billion နဲ့ချီပြီးဖြစ်နေတာပါ။ အဲ့ကောင်ကို Hz တို့ GHz တို့လို unit တွေနဲ့တိုင်းပါတယ်။ CPU Clock Rate များလေလေ CPU 214 | ကမြန်မြန် တွက်ချက်ပေးနိုင်လေပါပဲ။ 215 | 216 | Fun Fact အနေနဲ့ကတော့ CPU ထုတ်လုပ်တဲ့ နေရာ စက်ရုံတွေက ဆေးရုံက ခွဲစိတ်ခန်း ထက်ကို ပိုပြီး သန့်ရှင်းနေရပါတယ်။ 217 | ဘာလို့လဲ ဆိုတော့ CPU လုပ်တဲ့ နေရာမှာ အမှားပါတာ Radiation ဖြစ်တာ တစ်ခုခုဖြစ်သွားရင် Bit Flip ဆိုတာ ဖြစ်သွားနိုင်ပါတယ်။ 218 | Bit Flip ဆိုတာကတော့ Computer ရဲ့ CPU က အလုပ်လုပ်ပေးတဲ့ binary number မှာ ပုံမှန်မဟုတ်ပဲ ပြောင်းလဲတာကိုခေါ်တာပါ။ 219 | ဥပမာ ပုံမှန်က 010 ဆိုပြီး ရှိရမဲ့ အစား Radiate ဖြစ်သွားပြီး 100 ဖြစ်သွားတာတို့ 001 ဖြစ်သွားတာတို့လို ပြောင်းသွားတာကို ဆိုလိုတာပါ။ 220 | သာမာန်ကြည့်ရင်တော့ ဘာမှမဟုတ်လောက်ဘူးထင်ရပေမဲ့ တစ်ကဲ့ အရေးကြီးတဲ့ မဲပေးတာတို့ ဆေးရုံက system တွေမှာတို့ အာကာသ system တွေ 221 | မှာလို တစ်ကဲ့ အရေးကြီးတဲ့ နေရာတွေဆို လူ့အသက်တွေ သာမက ကြီးမားတဲ့ ဆုံးရှုံးမှုတွေ အများကြီးဖြစ်စေနိုင်ပါတယ်။ 222 | 223 | == Motherboard ဆိုတာဘာလဲ 224 | Motherboard ဆိုတာဘာရယ်မဟုတ်ပါဘူး ကျွန်တော်တို့ မြင်ဖူးနေကျ လျှပ်စစ်ပစ္စည်းတွေမှာ ပါနေကျ စိမ်းစိမ်းအပြားကြီး 225 | PCB(Printed Circuit Board) အကြီးစား သဘောမျိုးကို Computer မှာလိုအပ်တဲ့ Hardware တွေချိတ်ဆက်ဖို့အတွက် 226 | သီးသန့်ပြင်ဆင်ထားတဲ့ဟာပါ။ သူ့ရဲ့ အဓိကအလုပ်ကတော့ Hardware တွေတစ်ခုနဲ့တစ်ခုကို ချိတ်စက်ပြီး ထိန်းချုပ်ဖို့ပါ။ သူက အချက်အလက်တွေကို 227 | မြန်မြန်ဆန်ဆန် လိုတဲ့ Display တို့ Gpu တို့နဲ့ DRAM တို့လိုကောင်တွေကို CPU နဲ့တစ်ခါတည်း ချိတ်ဆက်ပေးပါတယ်။ နောက်ထပ် CPU နဲ့ 228 | တစ်ခါတည်း ချိတ်ထားတဲ့ကောင်ကတော့ Chipset ပါ (North Bridge နဲ့ South Bridge လို့ခွဲပြီးတော့လဲပါတတ်ပါတယ်။) 229 | သူက အရမ်းမြန်ဖို့မလိုတဲ့ USB device တို့ Storage တို့နဲ့ Speaker တို့တွေ နဲ့ ချိတ်ပေးထားပါတယ်။ 230 | 231 | #figure( 232 | image("images/MotherBoard.png", width: 50%), 233 | caption: [Mother Board Circuit ချိတ်ဆက်ပုံအချို့], 234 | ) 235 | 236 | #pagebreak() 237 | 238 | == RAM (Random Access Memory) 239 | သူကတော့ အများစုနဲ့ ရင်းနှီးပြီးသားဖြစ်မှာပါ။ သူ့ကိုတော့ CPU တွက်ချက်နေတဲ့အချိန်အတွင်း အချက်အလက်တွေ ပေးဖို့ နဲ့ 240 | ခနတာသိမ်းစည်းဖို့အတွက် အဓိကသုံးပါတယ်။ CPU က ဘယ်ကလာတဲ့ Data ပဲဖြစ်ဖြစ် SSD တို့ HDD တို့ကနေလာတဲ့ Data ဆိုရင်တောင် 241 | RAM ထဲမှာ ထည့်ပြီးမှ process လုပ်ပေးလို့ရတာပါ။ အဲ့တာကြောင့် သူ့ကို Working Memory လို့လဲခေါ်ပါသေးတယ်။ ဒါဆို ဘာလို့ 242 | compute လုပ်တဲ့အခါ SSD တို့လို ကောင်တွေမသုံးပဲ RAM ကိုပဲသုံးတာလဲ။ အဖြေကတော့ရှင်းပါတယ် မြန်လို့ပါ နည်းနည်း တင်မြန်တာမဟုတ် 243 | ပါဘူး။ အဆပေါင်း 3000 ကျော်လောက်ကိုမြန်ပါတယ်။ ဘာလို့လဲဆိုတော့ HDD မှာဆို data read/write က လည်နေတဲ့ CD ပေါ်က 244 | သံလိုက်စွမ်းအားအတိုင်း လုပ်ဆောင်ပေးတာဖြစ်တဲ့အတွက် အရမ်းနှေးပါတယ်။ SSD က HDD ထက်ဆိုအများကြီးပိုမြန်ပေမဲ့ သူကလဲ 3D ပုံစံ 245 | Trillion တွေနဲ့ချီပြီး Memory Cell တွေနဲ့ Terabytes နဲ့ ချီတဲ့ Data တွေကို သိမ်းထားပေးနိုင်ပေမဲ့။ 246 | rw(read/write) speed မှာကျ 30~50 microseconds လောက်ကြာပါတယ်။ ဒါပေမဲ့ Ram ကကျ 2D array ပုံစံ 247 | Billion နဲ့ ချီတဲ့ Memory Cell တွေနဲ့ဖြစ်တာကြောင့် Gb နည်းနည်းလောက်ပဲ ထည့်ထားနိုင်ပေမဲ့ rw speed မှာကျ 1 248 | nanosecond ပဲကြာပါတယ်။ အဆပေါင်း 3000 တောင်ကွာပါတယ်။ ဒါကြောင့် RAM ကိုပဲသုံးတာပါ။ 249 | 250 | == Storage Devices 251 | Storage Device တွေက Data တွေကို အချိန်အကြာကြီး သိမ်းထားတဲ့နေရာမှာသုံးပါတယ်။ Storage Device တွေအများကြီး 252 | ရှိပါတယ်။ ဥပမာဆိုရင် Floppy Disk တို့ USB တို့ ကျွန်တော်တို့ အရင်က ဇာတ်ကားခွေတွေထည့်တဲ့ CD ပြားတို့ HDD တို့ SSD 253 | (Solid State Drive) တို့ပါ။၊ သူတို့တွေထဲက အကုန်လုံးလိုလို က လုပ်ဆောင်ပုခြင်းတူကြပါတယ်။ 1, 0 Data တွေကို electron 254 | charge တွေအနေနဲ့ Array ပုံစံ သိမ်းပေးပြီး ပြန်ထုတ်ပေးပါတယ်။ SDD မှာဆို အဲ့လိုသိမ်းပေးတဲ့ Memory cell ကို Charge 255 | Trap Flash လို့ခေါ်ပါတယ်။ (ကျွန်တော် ပိုပြီးအသေးစိတ် Data တွေဘယ်လို Memory cell ထဲမှာသိမ်းလည်း။ 256 | သူတို့ဘယ်လိုအလုပ်လုပ်လဲဆိုတာကတော့ ဒီ edition မှာ အချိန်မမှီရင် နောက် edition မှထည့်ပေးပါမယ်။) 257 | 258 | == BIOS(Basic Input Output System) 259 | သူက Motherboard မှာ တစ်ခါတည်းပါလာတတ်ပါတယ်။ သူက Hardware လည်းဟုတ်တယ်လို့ပြောရသလို။ Software 260 | လည်းဟုတ်ပါတယ်။ အများစုကတော့ MotherBoard ရဲ့ Firmware(Hardware တစ်ခုခုကို တိုက်ရိုက်ထိန်းချုပ်ပေးတဲ့ Software) 261 | လို့လည်းခေါ်ပါတယ်။ သူရဲ့ အဓိကအလုပ်ကတော့ CMOS ထဲက သိမ်းထားတဲ့ Hardware Setting တွေကို ထိန်းချုပ်ပေးပြီး Bootable 262 | Drive(Operating System ဒါမှမဟုတ် Bootloader တို့လို Software ထည့်ထားတဲ့ boot လုပ်လို့ရတဲ့ Device) ကို 263 | စတင် run ပေးရပါတယ်။ သူက နှေးတာရယ် Storage များတာတွေကို Handle မလုပ်နိုင်တာရယ်ကြောင့် နောက်ပိုင်း PC တွေမှာ 264 | UEFI ကိုသုံးလာကြပါတယ်။ UEFI က BIOS လိုပါပဲ ဒါပေမဲ့ ပိုမြန်တဲ့အပြင် Exabytes (1 exa = 1073741824 GB, 265 | 1073741 TB) နဲ့ချီတဲ့ partition ပေါင်း 128 ခုကို Handle နိုင်ပါတယ်။ BIOS ကကျ တော့ အများဆုံး 2.2 TB 266 | Storage နဲ့ partition 4 ခုကိုပဲ Handle လုပ်ပေးနိုင်ပါတယ်။ BIOS တွေက ဘာမှ မလုပ်ခင် Bootable Device 267 | တွေကို မစတင်ပေးခင်မှာ Power On Self Test(POST) လို့ခေါ်တဲ့ Test ကို run ပြီး Computer နဲ့ချိတ်ထားတဲ့ 268 | Keyboard တွေ Battery တွေ Display တွေအလုပ်လုပ်လားစစ်ပေးပါတယ်။ အကယ်၍ အလုပ်မလုပ်တာတို့ လဲသင့်တာတို့ဆိုရင် Aleart 269 | Screen သဘောမျိုးပြပေးပါတယ်။ ကျွန်တော်တို့ Computer အဟောင်းတွေ Bettery မကောင်းတာတွေကိုင်ဖူးရင် သတိထားမိမှာပါ။ 270 | Power ဖွင့်လိုက်ချင်း Boot တက်မသွားပဲ Your Bettery health is blabla ဆိုပြီး Aleart ပြပါတယ်။ သူက 271 | MotherBoard အပေါ်လိုက်ပြီး version တွေကွဲနိုင်ပါတယ်။ သူက MotherBoard တစ်ခုဆို တစ်ခုတည်းအတွက်ပဲအလုပ်လုပ်ပြီး 272 | တစ်ခြား အမျိုးအစားတွေအတွက်အလုပ်မလုပ်ပါဘူး။ ဒါကြောင့် General ဖြစ်တဲ့ BIOS ဆိုတာလုံးဝကို မဖြစ်နိုင်သလောက်ကိုဖြစ်ပါတယ်။ 273 | 274 | #pagebreak() 275 | 276 | #align(center, [= System Software များအကြောင်း]) 277 | 278 | == မိတ်ဆက် 279 | System Software ဆိုတာကတော့ Hardware ကို တိုက်ရိုက် control လုပ်ပေးတဲ့ Software တွေပါ။ ကျွန်တော်တို့ သုံးနေကျ 280 | Discord တို့လို Facebook တို့လို Code တွေနဲ့ ရေးထားတာပါပဲ ဒါပေမဲ့ သူတို့က Hardware တွေကို တိုက်ရိုက်ထိန်းချုပ်ပေးပြီး အဲ့ဒီ 281 | Facebook တို့ Discord တို့လို User Software တွေ Hardware ကိုသုံးဖို့အတွက် API ပြန်ထုတ်ပေးရပါတယ်။ သူ့မှာ 282 | အဓိကအားဖြင့်တော့ BIOS, Bootloader, Kernel, Kernel Drivers & Modules တွေပါဝင်ပါတယ်။ BIOS 283 | အကြောင်းကိုတော့ ကျွန်တော်တို့ ရှင်းပြပြီးပါပြီ။ ကျန်တာတွေကို ဆက်ရှင်းပြပေးပါမယ်။ 284 | 285 | == Bootloader 286 | Bootloader ဆိုတာ BIOS ပြီးရင် ဒုတိယ run ပေးတဲ့ Software ပါ BIOS ကနေ POST run ပြီးရင် 287 | Bootloader ရှိတဲ့ MBR ဆိုတဲ့ partition မှာ သွားရှာပြီး run ပေးရပါတယ်။ ဒါပေမဲ့ UEFI မှာတော့ Bootloader 288 | file ထည့်ဖို့ partition သက်သက်ဆောက်ပေးရပါတယ်။ သူကနေမှ Operating System တွေရဲ့ Kernel File တွေရှိတဲ့ 289 | Drive Location ကို ရှာပေးပြီး User ကြိုက်တဲ့ OS ကို boot နိုင်အောင်ပြပေးရပါတယ်။ သူက Physical Memory ကိုလဲ 290 | Map လုပ်ပေးရပြီး Virtual Memory address တွေပြန်ထုတ်ပေးရပါတယ်။ user ကြိုက်တဲ့ Os ကိုရွေးပြီး သွားပြီဆိုရင် အဲ့ OS 291 | နဲ့ဆိုင်တဲ့ Kernel code file ကို Memory ထဲမှာ run ပေးပြီး Map လုပ်ထားတဲ့ Memory တွေကို control 292 | လုပ်ဖို့ပေးလိုက်ရပါတယ်။ bootloader code ကို ကြည့်ချင်ရင် ကျွန်တော့ #link("https://github.com/Walker-00/chaos/tree/rust/bootloader")[Github Repo] မှာ 293 | ကြည့်ကြည့်လို့ရပါတယ်။ 294 | 295 | == Operating System (OS) 296 | ပထမဆုံးအနေနဲ့ကတော့ OS ဆိုတာ Operating System ပါ Online Shop မဟုတ်ပါဘူး။ သူက BIOS ကလွဲလို့ System 297 | Software တွေအကုန်လုံး စုပေါင်းပြီး User Software တွေအတွက် Syscall လို Api တွေပြန်ထုတ်ပေးဖို့လိုတဲ့ အရာတွေအကုန် 298 | ပေါင်းပြီး OS လို့ခေါ်ပါတယ်။ သူ့မှာ အဓိကပါတာကတော့ Kernel, Kernel Driver တွေ Kernel Modules တွေ 299 | Bootloader တို့ပါပါတယ်။ OS တွေအများကြီးရှိပါတယ်။ ကိုယ်တိုင်လုပ်ချင်ရင်တောင်အရမ်းကြီးမခတ်ပဲလုပ်ရပါတယ်။ ကျွန်တော် ဒီထဲမှာ 300 | တစ်ခုရေးပြဖို့လည်းရှိပါတယ်။ နောက် edition ကျရင်ပေါ့။ အဲ့ထဲကမှ နာမည်ကြီးတဲ့ တစ်ချို့ OS တွေက Windows, Mac, 301 | Gnu/Linux, BSD, RTOS တို့လိုကောင်မျိုးတွေပါ။ User Software တွေက Os တစ်ခုနဲ့ တစ်ခုမှာ ကွဲပါတယ်။ Windows 302 | User Software (.exe file, ex. Discord.exe Windows file) တွေကို Gnu/Linux တို့ Mac တို့မှာ 303 | Native run မရပါဘူး။ ဘာလို့လဲဆိုတော့ Os တစ်ခုနဲ့တစ်ခု Hardware တွေ Handle လုပ်ပုံခြင်း Program File 304 | Header တွေ Syscall Api တွေထုတ်ပေးပုံခြင်းမတူလို့ပါ။ ရှင်းရှင်းပြောရရင် OS တစ်ခုနဲ့ တစ်ခု အကုန်လုံးလိုလိုကွဲပါတယ်။ 305 | အရမ်း Simple ဖြစ်တဲ့ စာပဲ ထုတ်ပြသေးတဲ့ OS လေးကို Rust နဲ့ ရေးနည်း ကြည့်ချင်ရင် ကျွန်တော့ရဲ့ #link("https://github.com/Walker-00/chaos")[ChaOS] 306 | ဆိုတဲ့ OS လေးကို ကြည့်ကြည့်လို့ရပါတယ်။ 307 | 308 | == Kernel 309 | Kernel ဆိုတာကတော့ Software ရဲ့ CPU သဘောပါပဲ သူမပါပဲ ဘယ် program မှ run လို့မရဘူးလို့ကိုပြောရပါတယ်။ 310 | ဘာလို့လဲဆိုတော့ သူကနေမှ Hardware တွေကို Software တွေသုံးလို့ရအောင် Map လုပ်ပြီး API တွေပြန် ပေးရတာပါ။ ကိုယ်တိုင် လိုတဲ့ 311 | Hardware Driver တွေ Memory Map လုပ်တာတွေကို မလုပ်တတ်ရင်တော့ Kernel မပါပဲ ဘာ Software မှရေးမရပါဘူး။ 312 | သူက ပထမဆုံး ဘာမှမလုပ်ခင် Device တွေကို စစ်ပြီး လိုအပ်တဲ့ Device Driver တွေ Kernel Modules တွေကို 313 | စတင်ပေးပါတယ်။ ဥပမာ Display အတွက် VGA Driver တို့ GPU Driver တို့နဲ့ Binder Modules တို့လိုပါ။ ဒါတွေကို 314 | စပေးပြီးပြီးဆိုရင်တော့ သူက Systemd တို့ Openrc တို့လို Init process ကိုစတင်ပေးပါတယ်။ သူက ဘာလုပ်ပေးရတာလဲဆိုတော့ 315 | အများကြီးပါပဲ User Config လုပ်ထားတဲ့ Background process တို့နဲ့ လိုအပ်တဲ့ Wifi တို့ Bluetooth တို့လို 316 | Service တွေကို စတင်ပေး ရပါတယ်။ အဲ့ဒါအပြင် မတူတဲ့ File System တွေတို့ Disk တို့ကို သုံးလိုရအောင်လုပ်ပေးရပါတယ်။ 317 | နောက်ပြီး User Login ဝင်တာတို့ကိုလည်း Handle လုပ်ပေးရပါတယ်။ အရှင်းဆုံးမှတ်ထားရရင်တော့ Init System တွေက 318 | Kernel က လိုတဲ့ Driver တွေ Module တွေစတင်ပေးပြီးရင် ကျန်တဲ့ စပေးဖို့ လိုအပ်တဲ့ဟာတွေကို စပေးတဲ့ဟာလို့မှတ်ထားလို့ရပါတယ်။ 319 | Kernel ရဲ့ အလုပ်ကအဲ့မှာတင်ပြီး သွားတာမဟုတ်ပဲ အများကြီးကျန်ပါသေးတယ်။ သူက ကျွန်တော်တို့ User Software တွေ Hardware 320 | ကိုသုံးဖို့ Api တွေပြန်ထုတ်ပေးရပါတယ်။ အဲ့ Program run လိုက်တဲ့အချိန်မှာလဲ သူရဲ့ Header က မှန်ရဲ့လား ဘယ် Syscall 321 | တွေသုံးထားလဲ။ ဘယ် Syscall ဆို ဘယ် Driver ကိုသုံးရမှာလဲ။ Thread တွေထပ်ထုတ်ပေးရမလား ဒီ Data တွေကို ဘယ် Memory 322 | Address မှာ သွားသိမ်းပေးရမလဲ ဒီလို အောက်ခြေသိမ်း အလုပ်တွေအကုန် သူမှာတာဝန်ရှိပါတယ်။ Kernel မှာ Monolithic 323 | Kernel, MicroKernel နဲ့ တစ်ခြားအမျိုးအစားတွေရှိပါသေးတယ်။ သူတို့အပေါ်မူတည်ပြီး Kernel က ဘယ်နေရာမှာကောင်းတယ်။ 324 | ဘယ်လို handle လုပ်တယ်။ ဒါတွေကွဲပါသေးတယ်။ အဲ့ဒီလို အသေးစိတ်တွေကိုတော့ နောက် edition မှာထည့်ပေးပါမယ်။ အရမ်း Simple 325 | ဖြစ်တဲ့ Rust နဲ့ ရေးထားတဲ့ Kernel နဲ့ VGA Device Driver ကို ကျွန်တော့ရဲ့ #link("https://github.com/Walker-00/chaos/tree/rust/src")[Github Repo] မှာ 326 | ကြည့်ကြည့်လို့ရပါတယ်။ 327 | 328 | == Device Driver 329 | Device Driver လို့လဲခေါ်တဲ့ Kernel Driver တွေကို Kernel က Hardware တွေကို handle လုပ်ဖို့ အတွက်သုံးပါတယ်။ 330 | သူတို့တွေက Kernel အပေါ်မူတည်ပြီး ပါတဲ့ပုံနဲ့ လုပ်ဆောင်ပုံတွေကွာပါတယ်။ ဥပမာ Linux တို့လို Monolithic Kernel 331 | မျိုးမှာဆိုရင် Kernel Driver တွေက Kernel code ထဲမှာ Kernel ထဲမှာ တစ်ခါတည်းပါပြီးသားပါ manual လဲ 332 | install လို့ရပါတယ် ။ ဒါ့အတွက်ကြောင့် Linux ကအရမ်းမြန်ပါတယ်။ ဒါပေမဲ့ Windows တို့လို MicroKernel တွေမှာတော့ 333 | တစ်ခါတည်းမပါပဲ ကိုယ်တိုင် install ရပါတယ်။ သူတို့တွေက Kernel ပြီးရင် အရမ်းအရေးပါတဲ့ System Software 334 | တွေဖြစ်ပါတယ်။ သူတို့မပါရင် ဘယ် Hardware ကိုမှ သုံးလို့ရမှာမဟုတ်ပါဘူး။ တစ်ခါတစ်လေမှာ ကိုယ် Graphic card 335 | ပြောင်းလိုက်တာတို့ ကိုယ့် Pc ထဲကနေ တစ်ခုခုပြောင်းလိုက်တာတို့ဆိုရင် Windows မှာချက်ချင်းသုံးမရပဲ Linux မှာကျ 336 | ရနေတာတွေရှိပါလိမ့်မယ်။ အဲ့တာ သူတို့ မတူတဲ့ Kernel နှစ်ခု ကြောင့်ပါ စောနကပြောသလို Windows မှာ Device တစ်ခုခုပြောင်းလိုက်လို့ 337 | မရရင် အဲ့တာ Driver မရှိလို့ပါ။ Linux မှာကျ လိုတဲ့ Driver တွေအကုန်ပါပြီး သားဆိုတော့ ချက်ချင်းရပါတယ်။ FOSS 338 | (Free And Open Source Software) မဟုတ်တဲ့ Driver တစ်ချို့လောက်ကိုသာ ကိုယ်တိုင်သွင်းရင်သွင်းရမှာပါ။ 339 | 340 | == Shell 341 | Shell ဆို တာကတော့ User Software နဲ့ System Software နှစ်ခုကြားမှရှိတဲ့ကောင်လို့ပြောလို့ရပါမယ်။ ဥပမာပြောရရင် 342 | Bios လိုပါပဲ။ သူက Os ကို User တွေသုံးလို့ရအောင် CLI (Command Line Interface) တို့လိုမျိုးနဲ့ program run 343 | တာတွေ program တွေကို Script လုပ်ပြီး run တာတွေဒီလိုမျိုးတွေကို လုပ်ဆောင်ပေးပါတယ်။ သူက User Software တစ်ခုပါပဲ 344 | ဒါပေမဲ့ သူက တစ်ခြား User Software တွေကို Os နဲ့ ချိတ်ဆက်ပြီး အလုပ်လုပ်ပေးဖို့ Layer သဘောမျိုးထားပေးထားတာပါ။ 345 | အဲ့ဒီအတွက် သူမှာ I/O pipeline တွေ Program run တာတွေ File Manage လုပ်တာတွေအတွက် Build-In Command 346 | တွေပါပါတယ်။ အခုခေတ် Modern Shell တွေမှာ ဆိုရင် သူတို့နဲ့ ချိတ်ဆက်ဖို့ Customize လုပ်ဖို့ plugin တွေပါထည့်လို့ရတဲ့အပြင် 347 | Scripting Language အနေနဲ့ပါသုံးလို့ရပါတယ်။ Scripting နဲ့ Programming Language ကွာတာက 348 | Programming က သူ့ရဲ့ Library တွေကိုသုံးပေမဲ့ Scripting က တစ်ခြား Program တွေကို Library 349 | သဘောမျိုးသုံးပါတယ်။ Shell တွေအများကြီး ရှိပါတယ်။ Linux နဲ့ Mac တို့လို Unix base Os တွေမှာဆိုရင် Bash Shell 350 | ကို Default အနေနဲ့ ပါလာတတ်ပါတယ်။ Windows မှာ ဆို Poweshell တို့ Ms-Dos တို့ရှိပါတယ်။ ဒါ့အပြင် Linux တို့လို 351 | unix base တွေအတွက် nushell, zsh, fish ဆိုပြီး အများကြီးရှိပါသေးတယ်။ 352 | 353 | #pagebreak() 354 | 355 | #align(center, [= User Software များအကြောင်း]) 356 | 357 | == မိတ်ဆက် 358 | User Software ဆိုတာကတော့ ကျွန်တော်တို့ နေ့စဥ်သုံးနေတဲ့ Facebook တို့ Discord တို့လို Software တွေကို ပြောတာပါ။ ဒီထဲက 359 | အများစုက Os ကို ထိန်ချုပ်ပေးတာ Os ကပေးတဲ့ Api တွေကို Programming Language သုံးပြီး ရေးထားတဲ့ Program 360 | တွေပါပါတယ်။ `Hello World` Program လေးကစလို့ Telegram တို့ Youtube တွေထိ အပါအဝင် User Software 361 | တွေ Billion နဲ့ ချီပြီး ရှိပါတယ်။ ဒီထဲမှာ Facebook တို့လို Youtube တို့လိုကောင်တွေပါမှာမှန်း အများစုသိကြပါတယ်။ ဒါပေမဲ့ 362 | အများစုမသိတဲ့ Os ကို ထိန်းချုပ်ပေးတဲ့ Os က Api တွေကို သုံးပြီး တစ်ခြား User Software တွေပိုပြီး လွယ်လွယ်ကူကူသုံးရအောင် 363 | ထပ်ပြီး Api ထုတ်ပေးတဲ့ System Level User Software တွေကိုပဲ ပြောပေးသွားပါမယ်။ 364 | 365 | == Display Server 366 | ကျွန်တော်တို့ သာမာန် computer သုံးတဲ့ သူတွေ computer ဖွင့်လိုက်ရင် ကျွန်တော်တို့ Mouse တွေကိုင်ပြီး သုံးလို့ရမဲ့ Firefox တို့လို 367 | Application Window တွေပေါ်လာဖို့အတွက် Graphical User Interface လို့ခေါ်တဲ့ GUI ကိုတွေ့ရမှာပါ။ ဒါပေမဲ့ သူက 368 | ရိုးရှင်းမနေပါဘူး ကျွန်တော်တို့ Gui တွေမပေါ်ခင် Cli ဆိုတဲ့ Command Line Interface လို့ခေါ်တဲ့ Shell Command တွေ 369 | သုံးလို့ပဲရခဲ့တာပါ သူ့မှာ ဘာ Graphic မှမပါပါဘူး။ ဒါပေမဲ့ နောက်ပိုင်းမှာတော့ Display Server တွေပေါ်လာပါတယ်။ 370 | သူတို့က ဘာလုပ်ပေးတာလဲဆိုတော့ ဒီ Computer Screen တို့ Monitor, Keyboard နဲ့ Mouse တို့လို ကောင်တွေရဲ့ အပြောင်းအလဲကို 371 | ယူပြီး ဘာတွေပြောင်းလဲသွားတယ် Mouse ဆိုရင်လဲ User ကဘယ် position မှာ ဘာလုပ်လိုက်တယ် ဆိုတာကို Program လုပ်ပြီး 372 | လုပ်ချင်တာလုပ်ဖို့ Api ပြန်ထုတ်ပေးရတဲ့ကောင်တွေပါ အဲ့ဒီ Api တွေကို Programming Language တစ်ခုနဲ့သုံးပြီး Window 373 | Manager လို့ခေါ်တဲ့ ကျွန်တော်တို့ လက်ရှိသုံးနေတဲ့ GUI ကြီး ကို ဖြစ်လာအောင် ထောက်ပံ့ပေးရပါတယ်။ သူ့မှာဆိုရင် Xorg တို့ Wayland 374 | တို့ဆိုပြီးအမျိုးမျိုးရှိပါတယ်။ Windows မှာဆိုရင်တော့ WDDM (Windows Display Driver Model) ကိုသုံးပါတယ်။ 375 | 376 | == Window Manager and Desktop Environment 377 | စောနကပြောခဲ့သလိုပါပဲ Window Manager ဆိုတာ Display Server က ပြန်ထုတ်ပေးတဲ့ Api တွေကို သုံးပြီး Developer 378 | စိတ်တိုင်းကျ Developer ကြိုက်တဲ့ Design philosophy အတိုင်း တစ်ခြား User Software တွေရဲ့ window တွေကို 379 | Keyboard နဲ့ Mouse ကဖြစ်သွားတဲ့ Event တွေအတိုင်း handle လုပ်ပေးရတာပါ။ ဥပမာဆိုရင် Application 380 | Window အသေးအကျယ် ချုံ့ချဲ့ လုပ်တာတို့ Layout Style ချိန်းတာတို့ စာရိုက်တာတို့ နဲ့တစ်ခြားဟာတွေအများကြီးပါ။ သူတို့တွေက လည်း 381 | အများကြီးရှိပါတယ်။ Kde မှာဆို Kwin, Xfce ရဲ့ Xfwm, Xorg မှာဆိုရင် i3, bspwm, dwm နဲ့ Wayland အတွက်ဆို 382 | Hyprland တို့ river တို့လို မျို'အများကြီး ရှိပါတယ်။ window manager တွေက ပေါ့ပါးတယ်။ Customizable 383 | အရမ်းဖြစ်တာကြောင့် #link("https://reddit.com/r/unixporn")[Linux Customization] အတွက် 384 | နာမည်ကြီးပါတယ်။ Desktop Environment ဆိုတာကတော့ Window Manager ကိုမှ additional User 385 | Software တွေတွဲပြီးပါတာကိုပြောတာပါ။ ဥပမာဆိုရင် Window Manager မှာ Setting App တို့ ဘာတို့မပါပါဘူး။ 386 | ကိုယ်တိုင် Config File ထဲကနေ ဝင်ပြင်တာတို့လိုမျိုးလုပ်ရပါတယ်။ ဒါပေမဲ့ Desktop Environment မှာကျ 387 | အဲ့လိုမျိုးတွေတစ်ခါတည်းပါတဲ့အပြင် Movie ကြည့်တဲ့ App သီချင်းနားထောင်တဲ့ App ဒါတွေအကုန် ပါလာပါတယ်။ အဲ့ဒီအတွက်ကြောင့် သာမာန် 388 | user တွေအတွက်ကောင်းပေမဲ့၊ စက်သိပ့်မကောင်းတဲ့သူတွေ အရမ်းများတာမလိုချင်ပဲ minimal ပဲကြိုက် တဲ့သူတွေအတွက်ကျ မလိုတာတွေအများကြီး 389 | ပါတဲ့အတွက် အရမ်း bloat ဖြစ်ပါတယ်။၊ Desktop Environment တွေလည်း အများကြီး ရှိပါတယ်။ Kde တို့ Gnome တို့ 390 | Xfce တို့လိုပါ။ Simple ဖြစ်တဲ့ Window Manager ကို rust မှာ ဘယ်လိုရေးရလဲဆိုတာကို ကျွန်တော့ရဲ့ #link( 391 | "https://github.com/Walker-00/sswm", 392 | )[SSWM (Saffron Spring Window Manager)] Github Repo လေးမှာ ဝင်ကြည့်လို့ရပါတယ်။ 393 | 394 | #pagebreak() 395 | 396 | #align(center, [= တစ်ခြား Computer Science နဲ့ ပတ်သက်တဲ့ အကြောင်းအရာများ]) 397 | 398 | == Networking အကြောင်း 399 | Computer တွေကလည်း လူတွေလိုပါပဲ လူတွေ တစ်ယောက်နဲ့ တစ်ယောက် စကားပြော အဖွဲ့အစည်းဖွဲ့ကြ အသိပညာတွေ မျှဝေကြသလိုပဲ။ 400 | Computer တွေကလည်း သူတို့အချင်းချင်း ချိတ်ဆက်ပြီး အသုံးပြုသူလိုချင်တဲ့ အချက်အလက်တွေ ရှာတာ တွေလုပ်ဆောင်ပေးရပါတယ်။ 401 | ဒီနေရာမှာ Networking ကိုသိဖို့လိုလာပါတယ်၊ ကိုယ်တွေ တစ်ယောက်နဲ့ တစ်ယောက် စကားပြောဖို့ အလုပ်အကိုင် အခွင်အလမ်းတွေရချင်လို့ 402 | ဘာသာစကားတွေ သင်သလိုပါပဲ Computer Networking ကို သေချာနားလည်ထားတာကလည်း Internet အလုပ်လုပ်ပုံနဲ့ Computer 403 | တွေ ဘယ်လို ချိတ်ဆက်ပြီး ဘယ်လိုတွေအလုပ်လုပ်ကြသလဲ ဆိုတာကို နားလည်လာစေမဲ့အပြင် Network Engneering, System Admin နဲ့ 404 | Cyber Sce တို့လို လစာကောင်းတဲ့ အလုပ်ခွင်ထဲ ဝင်ဖို့ Foundation လည်း ရလာစေပါတယ်။ 405 | 406 | === Computer ရဲ့ Networking ဆိုတာဘာလဲ 407 | လူအများစုက Networking ကို Internet ဒါမှမဟုတ် WWW ( World Wide Web ) နဲ့ အထင်မှားတတ်ကြပါတယ်။ 408 | တစ်ကယ်တော့ မတူပါဘူး Networking ဆိုတာ Internet နဲ့ WWW တို့လို နည်းပညာတွေ ဖြစ်ပေါ်အောင် ပံ့ပိုးပေးထားတဲ့ အဓိက ထောက်တိုင်ကြီးပါ။ 409 | မတူညီတဲ့ Networking စနစ်တွေ ဥပမာ TCP, UDP စတဲ့ နည်းပညာတွေ အပေါ်မှာ မူတည်ပြီး Internet နဲ့ WWW တို့ကဖြစ်ပေါ်လာရတာပါ။ 410 | Networking မှာတော့ မတူညီတဲ့ Networks တွေရှိမယ်။ Network အလိုက် မတူညီတဲ့ လုပ်ဆောင်မှုတွေလုပ်ဆောင်လို့ရတယ်။ 411 | အချက်အလက်တွေ ပို့ဖို့ မတူညီတဲ့ အချက်အလက်ပို့တဲ့ Protocol တွေရှိမယ်။ Protocol အလိုက် မတူညီတဲ့ အားသာချက်အားနည်းချက် လုပ်ဆောင်လို့ရတာတွေရှိတယ်။ 412 | သူတို့အချင်းချင်း စကားပြောဖို့ ဘယ်သူကပြောနေတယ်ဆိုတာ သိဖို့ မတူညီတဲ့ IP တွေရှိမယ်။ Networking လုပ်တဲ့ အခါ အရမ်းခတ်လာပြီလို့ ထင်လာရင် 413 | ရည်းစာစာ ပို့တာနဲ့ နှိုင်းယှဥ်ပြီးတွေးကြည့်ပါ ကျွန်တော်လည်း တစ်ချို့ ခတ်မယ်ထင်ရတဲ့ နေရာတွေမှာ ယှဥ်ပြီး ပြောပြပေးပါမယ်။ 414 | 415 | === Networks တွေ Network Interface တွေ Protocol တွေ IP တွေက ဘာတွေလဲ 416 | Computer Network ဆိုတာကတော့ တစ်ခုထက်ပိုတဲ့ Computer တွေချိတ်ဆက်ထားတာကို ခေါ်တာပါ။ ဥပမာဆိုရင် Wifi/Router စက်နဲ့ ချိတ်ဆက်ထားတာတို့ ပါ။ 417 | နေရာနဲ့လိုက်ပြီး Network ရဲ့ နာမည်နဲ့ အသုံးပြုပုံတွေကလည်း ကွာနိုင်ပါတယ်။ ဥပမာ Home Network ဆိုရင် အိမ်မှာရှိတဲ့ Computer အချင်းချင်း File Share တာတို့ 418 | ဘာတို့လုပ်ကြတယ် School Network ဆိုရင် ကျောင်းနဲ့ဆိုင်တာ ဘာညာပေါ့ နားမလည်သေးရင် လူတွေရဲ့ Network နဲ့မှန်းကြည့်လို့ရပါတယ်။ ဥပမာ အိမ်က မိသားစုနဲ့ဆိုရင် 419 | နေချင်သလိုနေ ပြောချင်တာပြောလုပ်တယ်၊ ကျောင်းမှာဆိုရင် ကျောင်းက သူတွေနဲ့ စာအကြောင်း ဘာညာ ဒိလိုပေါ့။ 420 | Internet ဆိုတာကတော့ Inter Network ရဲ့အတိုကောက်ပါ သူက Network တွေအများကြီးစုစီးထားတဲ့ Network တစ်ခုပါပဲ ဥပမာ School Network နဲ့ Home Network 421 | ချိတ်ဆက်ပြီး School Network ကနေ Home Network ကို စာတွေပို့တာ ဘာညာသဘောမျိုးပါ။ 422 | Network Interface ဆိုတာကတော့ Network တစ်ခုကို Computer က ဘယ်လိုချိတ်ဆက်ထားတာလဲ ဆိုတာကိုခေါ်တာပါ။ ဥပမာ အိမ်တစ်အိမ် နဲ့ နောက်တစ်အိမ် 423 | ဘယ်လိုချိတ်ဆက်ထားတာလား တစ်နိုင်ငံနဲ့ တစ်နိုင်ငံ ဘယ်လိုချိတ်ဆက်ထားတာလဲ ကုန်းလမ်း/ရေလမ်း ဒီလိုမျိုးတွေပါ ချိတ်ဆက်ထားတဲ့ ပုံစံအပေါ်မူတည်ပြီး ပို့ဆောင်ဆက်သွယ်ဖို့နည်းတွေ 424 | ကောင်းတာဆိုးတာတွေလည်းကွာမှာပေါ့။ 425 | Protocol ဆိုတာကတော့ Computer တစ်လုံးနဲ့တစ်လုံး Network အတွင်း ဘယ်လိုနည်းနဲ့ အချက်အလက်တွေ ပို့ပေးမလဲဆိုတာကို ခေါ်တာပါ။ ဥပမာ ရည်းစားစာ ပေးတယ်ထားပါတော့ 426 | သူ့စီကို စာရောက်ဖို့က မြန်တယ် အကုန်အကျသက်သာတယ် ဒါပေမဲ့ ပါးချခံရနိုင်တယ်။ Messenger တို့ဘာတို့ကပို့ရင်တော့ မြန်မယ် နည်းနည်း ပိုက်ဆံကုန်မယ် (ဒေတာဖိုး) ဒါပေမဲ့ 427 | Friend ဖြစ်ဖို့ acc သိဖို့ဘာညာလိုတယ်၊ စာတိုက်က ပို့ရင်ကျ ကြာမယ် အိမ်လိပ်စာသိဖို့လိုမယ် ပိုက်ဆံကုန်မယ် ဒါပေမဲ့ အမြဲလိုလို ပို့ရတယ်။ ဒီလောက်ဆိုရင် နားလည်လောက်မှာပါ။ (နားမလည်လည်း အောက်ရောက်မှထပ်ဖတ်) 428 | IP Address ( Internet Protocol Address ) ဆိုတာကတော့ စောနက ဥပမာထဲက အိမ်လိပ်စာတို့ Messenger Acc တို့လိုပါပဲ Computer တစ်ခုနဲ့ တစ်ခု အချက်အလက်ပို့ဖို့ဆိုရင် 429 | သူ့ရဲ့ တည်နေရာကို သိမှရမှာပါ ဒါကြောင့် Computer တစ်လုံးရဲ့ လိပ်စာကို IP Address လို့ခေါ်ကြပါတယ်။ 430 | 431 | === Network Interface ထဲက Wired Networks နဲ့ Wireless Networks တွေအကြောင်း 432 | Network Interfaces တွေမှာလည်း Wired နဲ့ Wireless ဆိုပြီး ပြန်ကွဲပါသေးတယ်။ ဥပမာ Router စက် ဒါမှမဟုတ် အများစုသိကြတဲ့ Wi-Fi ( တစ်ကဲ့ အခေါ်အဝေါ်အမှန်က Router နော် ) စက်ကနေ 433 | Computer တွေကို Internet ချိတ်ရင် Ethernet ဆိုတဲ့ Wired Network နဲ့ Wi-Fi ( Wireless Fidelity ) လို့ခေါ်တဲ့ Wireless Network ဆိုပြီး နှစ်မျိုးရှိပါတယ်။ 434 | နှစ်မျိုးလုံးမှာတော့ သူတို့ အားသာချက်နဲ့ အားနည်းချက် ကိုယ်စီရှိပါတယ်။ Wired Network တွေရဲ့ အားသာချက်ကတော့ Wireless Network တွေထက် ပိုမြန်မြန် data တွေပို့ပေးနိုင်တယ်။ 435 | Wireless Network တွေလောက်အလုပ်သိပ့် မရှုပ်ဘူး ဝါယာ ကြိုးကနေချိတ်ပြီး အချက်အလက် တွေကို တိုက်ရိုက်ပေးတာဆိုတော့ကွာ တစ်ခုခု ဝင်နှောက်ယှက်လို့ နှေးသွားတာတို့ ဘာတို့ မဖြစ်ဘူး။ 436 | ဒါပေမဲ့ စောနကပြောတဲ့အတိုင်း ဝါယာကြိုးကနေ လုပ်ရတာဖြစ်တဲ့အတွက်ကွာ ချိတ်နိုင်တဲ့ အကွာအဝေးကကျ ကြိုးအပေါ်မှာပဲ မူတည်တယ် ပိုဝေးဝေး မှာနေပြီး ချိတ်ချင်ရင် ကြိုးရှည်ရှည်လိုတာပေါ့။ 437 | ဒါကြောင့် Wired Network တွေက Personal Use အဖြစ်သုံးကျတာပဲများတယ် ဥပမာဆို Gamer တွေတို့ Cloud Server တွေတို့ဆိုရင်ကျ လိုင်းကျတာဘာညာ မလိုချင်ဘူးကွာ 438 | အဲ့တာကြောင့် Wired Network ထဲက Ethernet ဆိုတဲ့ ကောင်ကိုသုံးတယ်။ Wired Network ထဲက တစ်ချို့ကို ပြောရရင်တော့ စောနက Ethernet ပါတယ် USB တို့ Thunderbolt တို့ပါတယ်။ 439 | Wireless မှာကကျတော့ သူက ကြိုးကနေမဟုတ်ဘူး လေထဲကနေ လေထုကြိမ်နှုန်းတွေကိုသုံးပြီး အချက်အလက်တွေ ပို့ပေးတယ်။ ဒါကြောင့် Wireless တွေမှာဆို အမြန်နှုန်းကို frequency လို့ခေါ်တဲ့ 440 | ကြိမ်နှုန်းနဲ့တိုင်းတယ်။ ကြိမ်နှုန်းများလေလေ အချက်အလက် ပို့ပေးတာ မြန်လေလေဆိုပေမဲ့ သူ့ရဲ့ အကွာအဝေးက Limit ရှိပါတယ် Limit ကျော်သွားရင်တော့ ချိတ်ဆက်မှုက ရပ်တန့်သွားမှာပါ။ 441 | Wireless နဲ့ချိတ်ပြီး အချက်အလက်ပို့ကြတဲ့ Computer အချင်းချင်း ဝေးကွာသွားကြရင် ဖြစ်ဖြစ် သူတို့ နှစ်ခုကြားထဲမှာ နံရံလိုဟာမျိုးက ကြားခံနေရင်ပဲဖြစ်ဖြစ် ကြိမ်နှုန်းက နှေးသွားနိုင်ပါတယ်။ 442 | ဒီလိုပါပဲ လူနှစ်ယောက်ချစ်ကြလို့ ဝေးသွားရင်ဖြစ်ဖြစ် ကြားလူပေါ်လာရင်ဖြစ်ဖြစ် အချစ်တွေလည်း လျှော့သွားနိုင်ပါတယ်။ 443 | 444 | === Ipv4 နဲ့ Ipv6 445 | 446 | #pagebreak() 447 | 448 | == Multi Media 449 | 450 | === Computer ရဲ့ Multi Media ဆိုတာဘာပြောတာလဲ 451 | 452 | === Media File တွေဘယ်လိုအလုပ်လုပ်သလဲ 453 | 454 | #pagebreak() 455 | 456 | == နည်းပညာပိုင်းဆိုင်ရာ ကိုယ်ရေးအချက်အလက်တေွ နဲ့ နည်းပညာ လုံခြုံရေးအကြောင်း 457 | 458 | === နည်းပညာပိုင်ဆိုင်ရာ ကိုယ်ရေးအချက်အလက်ဆိုတာဘာလဲ အရေးကြီးလား 459 | 460 | === နည်းပညာလုံခြုံရေး အကြောင်း 461 | 462 | #pagebreak() 463 | 464 | #align([= Computer တွေကို ကိုယ်လိုရာ ခိုင်းစေချင်း (Programming)]) 465 | 466 | == Programming ဆိုတာဘာလဲ 467 | 468 | == Programming Language တွေကဘာတွေလဲ 469 | 470 | == Programming Language အမျိုးအစားတွေနဲ့အကြံပေးချက်များ 471 | 472 | #pagebreak() 473 | 474 | == Python Programming 475 | #link("https://www.youtube.com/watch?v=rfscVS0vtbw")[Python Programming လေ့လာဖို့အတွက် Resource လေးပါ] 476 | 477 | == C Programming 478 | #link("https://youtube.com/playlist?list=PLBlnK6fEyqRhX6r2uhhlubuF5QextdCSM&si=dqSfUNwiJGSv7b6E")[C Programming လေ့လာဖို့ Resource လေးပါ] 479 | 480 | == Rust Programming 481 | #link("https://drive.google.com/drive/folders/1I-w-_-UaXi3fESfANAxU0MG-mwdnyl50?usp=drive_link")[ဒါကတော့ ကျွန်တော့ရဲ့ မြန်မာလို Rust Course လေးပါ] 482 | #pagebreak() 483 | 484 | #align(center, [= စာအုပ်လေး ပိုပြည့်စုံအောင် ဖြည့်စည်းပေးကြတဲ့ Contributors များ]) 485 | \ 486 | \ 487 | \ 488 | - Linus Walker [#link("https://facebook.com/walker.fbi")[Facebook Acc], #link("https://github.com/Walker-00")[Github Acc], #link("mailto:rissk_it@proton.me")[Mail]] 489 | --------------------------------------------------------------------------------