Monday, September 26, 2016

OS Dev සදහා part 2


මෙහෙයුම් පධ්‍යතියක් සවර්ධනය කිරීම සදහා පියවරේදී අපි මූලික ලෙස tools කිහිපයක අවශ්‍යතාව තියෙනවා.හේතුව සාමාන්‍ය පරිගණක වැඩසහනක් මෙන් නොව මෙය සැමවිටම ලියන්නේ එක එල්ලේ පරිගණක hardware වලින් නිසා ටිකක් සංකීර්ණ අවස්තාවක්.පරිගණකයේ කිසිම කේත ගොනුවකට හදුන්වාදීමක් කරලා නොමැති අවස්ථාවන් තිබෙන නිසා අපිට සැමවිටම එම කේතයන් තනියෙන් hardware සමග ගනුදෙනු කරන්න මුල් අවතාවෙදීම සිදුවෙනවා

මොන වගේ platform එකකද OS dev කිරීමට වඩාත් සුදුසු වෙන්නේ ?

මෙය බොහෝ අයට දැනෙන එක ගැටළුවක් පරිගණක වැඩසටහන් සැකසීමේදී ප්‍රධාන කේත ක්‍රියාවලිය එනම් ප්‍රථමික ක්‍රියාවලිය සිදුවෙන්නේ hardware මූලික කොටගෙන නිසා.Ubuntu හෝ වෙනත් Linux OS එකක් තියෙනවා නම් ගොඩක් වෙලාවට වැඩේ සාර්ථක ලෙස කරගන්න පුළුවන්.
Compiling permission සදහා පරිගණක platform එකෙන් සහය නොකන්වන OS භාවිතා කරන්න එපා.විශේෂයෙන් apple mac එකේදී කෙලින්ම compiling permission ටිකක් ගැටළු මතුවෙන්න ඉඩකඩ වැඩි (පුද්ගලිකව මගේ මතය) ඔබ windows භාවිතා කරනවා නම් windows සංස්කරණ වලදී windows xp භාවිතා කරනවා නම් වඩාත් සුදුසුයි.windows අලුත්ම සංස්කරණ උනත් ගැටළුවක් ඇතිවන්නේ නෑ.ඒ වගේම ඔබට Ubuntu හෝ වෙනත් Linux කර්නල් එකක් භාවිතා කරන්න පුළුවන් නම් එයද වඩාත් සුදුසුයි

මොනාද භාවිතා කරන පරිගණක භාෂා ?

Operating system එකක් ලියන්න විවිධ වර්ගයේ language භාවිතා කරනවා.බොහෝ විශ්වාස කරනවා C පරිගණක භාෂාවෙන් මූලික සැකැස්ම සකසන්න පුළුවන් කියලා.නමුත් එය මිත්‍යා විශ්වාසයක් විතරයි C පරිගණක භාෂාව භාවිතා කරන්න කලින් මූලිකවම අපි භාවිතා කරන්නේ Assembly පරිගණක භාෂාවයි.මෙය භාවිතා කරන්න සාමාන්‍ය අයුරින් නම් පරිගණකයේ ඇති සියලුම අභ්‍යන්තර කිර්යාවලියන් දන සිටිය යුතුයි.
නමුත් මූලික ලෙස අපි Assembly පරිගණක භාෂාවේන් භාවිතා කරන්නේ කුඩා ක්‍රියාවලියක් නිසා දෙවනුව අපි C පරිගණක භාෂාවේ වැඩසටහනක හදුන්වාදීමක් කරන නිසා එතැන් සිට වැඩසහන දුවන්නේ C පරිගණක භාෂාවෙන් සකසන ලද පරිගණක වැඩසහන් හරහායි..

bපි මෙතැනදී භාවිතා කරනවා Assembly පරිගණක භාෂාව මූලික වශයෙන් පරිගණකයේ තිබෙන kernel එක හදුන්වාදීමට.එතනින් පසු අපි කර්නල් එක සැකසීම සදහා C භාවිතා කරනවා.

OS එක test කරන්න ධාවනය කරන්නේ මොකේද?

කේතයන් compile කිරීමෙන් පස්සේ ඊලග ක්‍රියාවලිය වෙන්නේ එය දාවන කිරීමයි එහිදී මූලික ලෙස Image CD editor එකක් මගින් compile කරගත් binary file ටික iso,img,md ලෙස හෝ සකසලා virtual pc, virtual machine , VMware හෝ කෘතීමව physical memory සකසන ඕනෑම virtual පරිගණක මෘදුකාංයක් මගින් එය boot කරන්න පුළුවන්

Compiler එක මොකක්ද?

GNU C compiler එකෙන් මූලික ලෙස C  කේත compile කරන්න පුළුවන් විශේෂයෙන් C භාවිතයෙන් සකසන කේත වැඩසටහන් සහ ASM – Assembly කේත ගොනු compile කිරීමට NASM Compiler එක භාවිතා කරන්න පුළුවන්.


Booting


BIOS ගැන බොහෝ අය දන්නා නිසා මම මෙතැනදී පැහැදිලි කරන්නේ නෑ.BIOS එකෙන් අපගේ bootable device ට සම්බන්ධ කරලා එතනින් එහාට කුඩා GRUB1 එකට හදුනාගැනීමක් කරනවා


GRUB 1

GRUB1 එකේ ප්‍රධාන කාර්ය වෙන්නේ බයෝස් එකෙන් අපේ device එක (උදාහනරයක් විදිහට hard disk, cd rom) බූට් එකේදී වෙන ක්‍රියාවලිදී කියවනු ලබන පළමු sector එකට ඇතුලත් කරලා තියන කියවීමයි.මම අර කලින් කිව්වා වගේ මෙතැනදී GRUB1 කුඩා වැඩසහනක් ලෙස ක්‍රියාත්මක වෙන්නේ GRUB2 හදුන්වාදිමටයි.මෙය Assembly වලින් අනිවාර්යෙන් ලිවිය යුතුයි.
 
 
GRUB 2

GRUB2 සිදුවන්නේ අපගේ boot loader ක්‍රියාවලියෙන් kernel එකට call කිරීමයි.මෙතැනදී GRUB 1 සහ Kernel එකට හරහා API එකක් ලෙස මෙය භාවිතා වෙනවා.C වලින් ලියන kernel එක හදුනවාදීම සහ C කේත සියල්ල හදුනා ගැනීම module ක්‍රමයට පිලිගනිවීම මෙහිදී සිදුකරනවා.programming language එකකදී පවා kernel එකෙන් කෝල් කරන්නේ අවසාන ක්‍රියාවලිය මෙතැනයි.

Boot loader

බුට් ලෝඩර් එකෙන් සැමවිටම සිදුවන්නේ එක ක්‍රියාවලියක් පමණයි.එනම් GRUB1 සහ GRUB2 යන ක්‍රියාවලියන් දෙක මගින් kernel එකට සම්බන්ධ කිරීමයි.


තවද boot loader GRUB1 එක ධාවන කිරීමේදී කුඩා ගැටළුවක් ඔබට දැන් මතුවනවා නිසැකයි.මෙතැනදී ඔබ සිතනවා ති පරිගණකයේ ඇති memory drive එකේ තිබෙන දත්ත සියල්ල කෙසේද පළමු දත්තය මගින් කියවන්නේ කියන එක ගැන.

පරිගකන්යේ මතක කියවීමේදී එය sectors වලට බෙදාගෙන කියවන සංකල්පයක් ඔබ අසා ඇත එකේ තිබෙන rows ක්‍රමයෙන් කියවීම සහ පළමු row එක boot loader එකට අදාළ වැඩසටහන තිබෙන බවද ඔබ අසා ඇත.

සාමන්යෙන් පරිගණකයේ memoryයේ කියවන පළමු දත්තය ක්‍රමලේකනය කිරීමේදී හදුන්වන ස්ථානය  0x1BADB002 ලෙස නම් කරනවා.තවත multi boot flag එනම්  දෙවන boot loader දෙවනි ක්‍රියාවලියේදී සැමවිටම ගන්නේ 0x0.

ඔබ දන්නවා ඇති මෙතැනදී CHECKSUM programme එක. එය memory උපකරණයේ ඇති දෝෂ විශ්ලේෂණ ක්‍රියාවලියයි.එය සැමවිටම සමග ඊලග grob1 එක යොදා ගන්නේ memory එක කියවන පළමු දත්තය 0x1BADB002 සහ multi boot flag හි තිබෙන 0x0 කියන sector දෙක එකතු කිරීමේ ගණනයෙන්




ඊලග ලිපියෙන් කියලා දෙන්නම ASM කේතයක් (Assembly) boot loader එකට ලියන විදිහ ගැන

1 comment:

  1. "ඊලග ලිපියෙන් කියලා දෙන්නම ASM කේතයක් (Assembly) boot loader එකට ලියන විදිහ ගැන"


    ඉක්මනට ඒ ලිපිය දාන්න

    ReplyDelete