├── 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 |
--------------------------------------------------------------------------------