පරිගණක මෙහෙයුම් පද්ධති
මෙහෙයුම් පද්ධති |
---|
බොහෝමයක් වේලාවට පරිගණකයන් පණගැන්වීමේ දී පළමුවම ධාවනය වන කේතය මෙහෙයුම් පද්ධතිය නොවේ. පරිගණකයේ ක්රියාත්මක වන පළමු කේතය සාමාන්යයෙන් ෆ්ලෑෂ් ROM හි ගබඩා කර ඇති අතර ෆර්ම් වෙයාර් මගින් ඇතුල් වේ. මෙය සමහරක් විට BIOS හෝ බූට් ROM (boot ROM) ලෙස හදුන්වනු ලැබේ. ෆර්ම් වෙයාර් මෙහෙයුම් පද්ධති කර්නලය (සාමාන්යයෙන් තැටියෙන් හෝ සමහර විට ජාලය හරහා ) ඇතුල්කර ක්රියාත්මක කරන අතර පරිශීලකයා තිරය මත දකින ප්රථම චිත්රක හෝ වදන් ප්රතිදානයට වගකිව යුත්තේ ද (firmware) ෆර්ම් වෙයාර්ය.
ලිනක්ස් , Mac OS X , මයික්රොසොෆ්ට් වින්ඩෝස් හා සෝලාරිස් (Solaris) නූතන බහුලව භාවිතා වන මෙහෙයුම් පද්ධති අතර වේ. මෙයින් වැඩතලය (desktop) මත වඩාත්ම ජනප්රිය වින්ඩෝස් වන අතර සේවාදායක පසුබිම් වලදී ලිනක්ස් වෙයි. ලිනක්ස් Mac OS X හා MS වින්ඩෝස් සියල්ලටම සේවාදායක හා පුද්ගලික වෙනස්කම් පවතී. මයික්රොසොෆ්ට් වින්ඩෝස් හැරුණු කොට පෙර සදහන් කරන ලද සියලු මෙහෙයුම් පද්ධති සැලසුම් කිරීමට දිරි ගැන්වීම හෝ කෙළින්ම සැලසුමම ලබා ගන්නේ යුනික්ස් මෙහෙයුම් පද්ධතියෙනි. 1960 පසු භාගයේ දී බෙල් පර්යේෂණාගාරවල නිපදවන ලද යුනික්ස් , බොහෝමයක් නොමිලේ බෙදා හරින හෝ වාණිජමය මෙහෙයුම් පද්ධතිවල දියුණුවට හේතු විය.
බොහෝමයක් පරිශීලකයන් මෙහෙයුම් පද්ධතිය , ඩෙක්ස්ටොප් වටපිටාවට සමාන කරයි.
මෙහෙයුම් පද්ධති - ඉතිහාසය
ප්රථම පරිගණකයේ මෙහෙයුම් පද්ධතියක් නොතිබුනි. 60 දශකය මුල් භාගය වන විට පරිගණක වෙළඳාම්කරුවන් කාණ්ඩ සැකසුම් ප්රවර්ධනය කිරීමේ ක්රමවේදයන්, ලැයිස්තුගත කිරීම හා කාර්ය ක්රියාත්මක කිරීමේ ක්රම වේදයන් සංවර්ධිත කිරීම සඳහා තරමක් පුළුල් මෙවලම් සැපයීමට ක්රියා කලහ. මේ සඳහා උදාහරණ ලෙස UNIVAC මා Control Date ආයතන මඟින් නිපදවන ලදි.· MS-DOS මඟින් මෙහෙයුම් පද්ධතියක ආකාර ලක්ෂණ බොහෝමයක් ඉදිරිපත් කරනු ලැබිනි. තැටි ප්රවේශය මේ සඳහා නිදසුනකි. කෙසේ වුවත් බොහෝමයක් මෙහෙයුම් පද්ධති මෙය සම්පුර්ණයෙන්ම මඟහැර කෙලින්ම දෘඩාංග මත ක්රියාත්මක වීමට ඉඩකඩ සකසා දිනි.
· මෙහෙයුම් පද්ධති මුලින්ම යොදා ගෙන තිබුනේ මහා පරිගණක වලදීය. එහෙත් පසුව මුලික ක්ෂුද්ර පරිගණක මෙහෙයුම් පද්ධති කළමනාකරණය ලැයිස්තුගත කිරීම භාවිතා කර වරකට එක් වැඩසටහනක් පමණක් ක්රියාකිරීමට අවකාශ සලසා දිනි. සෑම වැඩසටහනක්ම එය ක්රියාත්මක වන කාල පරිච්ඡේදය පුරාවටම එම පරිගණකය කෙරේ පුර්ණ පාලනයකින් යුක්ත විය. බහුකාර්යකරණය (කාල සම්භාවිත කිරීම) මහා පරිගණකවල භාවිතයට මුලින්ම පැමිණියේ 60 දශකයේදීය.
· 1969-70 කාල පරිච්ඡේදයේ දී ප්රථම වතාවට UNIX මුලින්ම PDP-7 හා පසුව PDP-11 මඟින් ඉදිරිපත් විණි. එය ඉතා ඉක්මණින් වේදිකා කිහිපයක් හරහා කාල සම්භාවිතය ක්රියාත්මක වීමේ සාර්ථකත්වය පෙන්වුයේ පුර්වක්ර බහුකාර්යකරණය, උසස් මතක කළමනාකරණය, මතක ආරක්ෂණය සහ අනෙකුත් උසස් ලක්ෂණ සඳහා සංග්රාහකයෙක් ලෙස ක්රියා කරමිනි. UNIX ඉතා ඉක්මනින් මහා පරිගණක හා මධ්ය පරිගණක මෙහෙයුම් පද්ධයක් ලෙස ජනප්රියත්වයට පත්විණි. · 1980 මුල් භාගයේ දී IBM-PC හා IBM PC XT ඇතුළු ක්ෂුද්ර පරිගණක කිහිපයක් UNIX ආකාර මෙහෙයුම් පද්ධතියක් වන Microsoft Xenix ධාවනය කිරීමේ හැකියාව පෙන්විය. තවද Microsoft ආයතනය විසින් ඔවුන්ගේ ඒක පරිශිලක මෙහෙයුම් පද්ධති වෙනුවට බදු පරිශිලක මෙහෙයුම් පද්ධතියක් ලෙස ඉතා අධික අලෙවිකරණ ව්යාපෘතියකට බදුන් කෙරිණි. නමුත් මෙම පුද්ගලික පරිගණකයේ මෙහෙයුම් පද්ධතිය(CPU) මඟින් එහි කරන කාර්ය මතක ආරක්ෂණය හා ද්විත්ව මාධ්ය මෙහෙයුම ක්රියාකිරීමට අවස්ථාව සලසා දීමට අපොහොසත් විය. එම නිසා Microsoft Xenix සහයෝගි බහුකාර්යකරණය මත විශ්වාසය තැබු අතර ආරක්ෂිත මතකයන්ද එහි නොවීය.
· 80286 මුලික IBM PCAT පරිගණකය වු කලි ද්විත්ව මාධ්ය මෙහෙයුම් ක්රියාත්මක කිරීම හා මතක ආරක්ෂණය සැලසීමට සමත් වු ප්රථම පරිගණකය හා සම්භාවය Mac-OS හා Microsoft Windows 1.0-Me සහයෝගි බහුකාර්යණයට උසස් වු අතර ඒවා ආරක්ෂිත මතකයන්ගෙන් ලබා ගත හැකි ආයෝජන උපරිම වශයෙන් ලබා ගැනීමේදී සිමාසහිත විය. මෙම මෙහෙයුම් පද්ධති මත ධාවනය වන යෙදුම් ක්රමලේඛ ඒවා ක්රියාත්මක නොවන අවස්ථාවන්හිදි ලැයිස්තුගතකරණයට CPUහි කාලය ඉතිරිකර දීම සඳහා පෙර නිමිතිව හෝ ක්රමවේදයක් භාවිතා කර එය ඉටු කර දීම හෝ මිශ්ර කළ යුතු විය.
· Windows NT සඳහා පාදක වු මෙහෙයුම් පද්ධති කාර්යාලය, Digital Equipment Corporation හි VMS නිර්මාණය කළ කණ්ඩායම විසින්ම නිමවන ලද්දකි. මෙම මෙහෙයුම් පද්ධති UNIX ආකාර වු අතර එය සියලු වැඩසටහන් සඳහා වු ආරක්ෂිත මාධ්ය මෙහෙයුම්, කාර්ය මතක ආරක්ෂණය, පුර්වක්ර බහුකාර්යකරණය, අතථ්ය(Vertual) ගොනු පද්ධති සඳහා සහයෝගය හා නොයෙකුත් මේආදි සේවා සපයන්නෙකු ලෙස නිර්මිතය.
· සම්භාවනීය AmigaOS හා Windows 1.0-Me යන මෙහෙයුම් පද්ධති සකසුන්වන් මඟින් ධාවන කාලයේදී ආදේශනය කරන ලද සම්පත් නියමාකාර ලෙස සලකුණු කර ගැනීමට අසමත් විය. එක් සකසුවක් අවසන් කිරීමට සිදු වු විට එය මඟින් එතෙක් භාවිතා වෙමින් තිබු සම්පත් වෙනත් වැඩසටහනක් වෙනුවෙන් නිදහස් කිරීම නැවත පරිගණකය පණගන්වන තෙක් සිදුකල නොහැකි විය.
එමෙන්ම විවෘත මුදුකාංග මෙහෙයුම් පද්දතියක් ලෙස උබුන්ටු(UBUNTU)හැදින්විය හැක.ලෝකයේ මිලියන 12 ජනතාවක් උබුන්ටු භාවිතාකරයි.සබැඳියෙහි ශීර්ෂය මගින් නොමිලේ උබුන්ටු සිඩිතැටියක් ගෙදරටම ගෙන්වාගත හැක.
කෙන් තොම්සන් (Ken Thompson) ඔහුගේ MULTICS ව්යාපෘතියේ අත්දැකීම් මත පදනම්ව යුනික්ස් ලිවීමට යොදාගත් BCPL මත පදනම්ව, B ලියන ලදී. B C හි මඟින් ප්රතිස්ථාපනය වූ අතර යුනික්ස්, සෑම නූතන මෙහෙයුම් පද්ධතිකටම බලපෑම් ඇති කරන විශාල සංකීර්ණ අන්තර්ව බැඳුනු මෙහෙයුම් පද්ධති පවුලක් බවට වර්ධනය විය. (ඉතිහාසය බලන්න) යුනික්ස් වැනි පවුල මෙහෙයුම් පද්ධතිවල ස්වභාවයෙන් වෙනස් කාණ්ඩයකි. එයට සිස්ටම් System V, BSD, හා ලිනක්ස් වැනි ප්රධාන උප ඒකක කිහිපයක් ඇතුළත් වේ. යුනික්ස් යන නාමය ද ඕපන් ගෘප් හි වෙළඳ නාමයක් වන අතර එහි අර්ථ දැක්වීමට ගැලපෙන මෙහෙයුම් පද්ධතියක් සඳහා යෙදීමට අවසර ලබා දී ඇත. “යුනික්ස් වැනි” බහුලව භාවිතා වන්නේ නියම යුනික්ස්ට සමාන මෙහෙයුම් පද්ධති සමූහයක් හැඳින්වීමටය. යුනික්ස් වැනි මෙහෙයුම් පද්ධති යන්ත්ර නිර්මිත විශාල ප්රමාණයක් මත ධාවනය වේ. ඒවා ව්යාපාර කටයුතුවලදි සේවා දායකවල සහ අධ්යාපනික හා ඉංජිනේරුමය කටයුතුවලදී වර්ක්ස්ටේෂන් (workstations) වල බහුලව භාවිතා වේ. GNU ලිනක්ස් හා BSD වැනි නිදහස් මෘදුකාංග යුනික්ස් ආදේශක මෙම අංශවල ජනප්රිය වේ. ලිනක්ස් වෙළඳපොළ කොටස බොහෝ වෙනස් බෙදාහැරීම් අතර බෙදී යයි. නොවෙල් (Novell) හා රෙඩ් හැට් (Red Hat) මඟින් සිදු කරන මහා පරිමාණ ව්යවසාය පන්තියේ බෙදා හැරීම් සංස්ථා මඟින් භාවිතා කරන නමුත් සමහරක් ගෘහස්ථ පරිශීලකයන් ද එම නිපැයුම් භාවිතා කරයි. ඓතිහාසිකව ගෘහස්ථ පරිශීලකයන් ස්ථාපනය කළේ ඔවුන්ගේම බෙදා හැරීමකි. නමුත් 2007 දී ගෘහස්ථ PC සඳහා උබුන්ටු ලිනක්ස් බෙදා හැරීම ඩෙල් (Dell) සමාගම ආරම්භ කළ අතර වර්තමානයේ වෝල්මාර්ට් (Walmart) සමාගම GOS v2 සමඟ පහත් අන්තයේ පරිගණක ඉදිරිපත් කරයි. වැඩතලය (desktop) මත ලිනක්ස් , වර්ධනය කරන හා විනෝදාංශමය මෙහෙයුම් පද්ධති දියුණු කරන ප්රජා අතර ජනප්රිය වේ. (පහත බලන්න) නිදහස් මෙහෙයුම් පද්ධති සඳහා වෙළඳ පොළ කොටස් දත්ත සාමාන්යයෙන් නිරවද්ය නොවේ. එසේ වන්නේ ඒවා නියෝජනයන් යටතේ භාවිතා කර මිළ දි නොගන්නා බැවිනි. අනෙක් අතට නිදහස් මෙහෙයුම් පද්ධතිවල මුළු බාගත කිරීම් මත පදනම්ව ඇති වෙළඳ පොළ කොටස් දත්ත බොහෝ විට විශාල මවා පෑමකි. මන්ද යත් මෙහෙයුම් පද්ධති ගණනාවක් ගැනීමට ආර්ථිකව ප්රශ්නයක් නොමැති නිසා පරිශීලකයන් මෙහෙයුම් පද්ධති කිහිපයක් බාගත කර වඩා සුදුසු දෙය තෝරා ගනියි. HP හි HP-UX හා IBM හි AIX වැනි සමහරක් යුනික්ස් ආදේශක එම නිෂ්පාදකයාගේම දෘඩාංගවල පමණක් ධාවනය වන ලෙස සකසා ඇත. සෝලාරිස් (Solaris) වැනි අනෙක්වාට x86 සේවා දායක හා PC ඇතුලුව විවිධ වර්ගවල දෘඩාංග මත ධාවනය විය හැක. ඇපල්හි මැක් OS X මාච් (Mach) හා ෆ්රී BSD මඟින් ඇපල්හි මුල් කාලීන (යුනික්ස් නොවූ) මැක් OS ප්රතිස්ථාපනය කර ඇත. යුනික්ස් අන්තර් ක්රියාකාරීත්වය සොයා බලන ලැබුවේ POSIX සම්මත ප්රකාශයට පත් කිරීමෙනි. POSIX සම්මතය විවිධ යුනික්ස් ආදේශක සඳහාම නිර්මාණය කර තිබුණත් ඕනෑම මෙහෙයුම් පද්ධතියකට යෙදිය හැකි වේ.
තථ්ය-කාල මෙහෙයුම් පද්ධති
තථ්ය-කාල මෙහෙයුම් පද්ධතියක් (RTOS) යනු ස්ථාවර නියමිත කාලයක් සහිත යෙදුම් සඳහා අරමුණු කර ඇති බහු කාර්ය කරණ මෙහෙයුම් පද්ධතියකි (තථ්ය-කාල පරිගණනය). කුඩා නිහිත පද්ධති, මෝටර්රථ එන්ජින් පාලක, කාර්මික රොබෝවරුන්, අභ්යාවකාශයානා, කාර්මික පාලන, සහ සමහරක් මහා පරිමාණ මෙහෙයුම් පද්ධති යන දේ මෙවන් යෙදුම් වලට අයත් වෙති.
නිහිත පද්ධති විසින් ඒ සඳහාම කැපවු විවිධ මෙහෙයුම් පද්ධති රැසක් භාවිතා කරයි. සමහර අවස්ථාවලදී විශේෂ කාර්යය ක්රමලේඛයක් නිපදවීමට "මෙහෙයුම් පද්ධති මෘදුකාංග” සෘජුවම යෙදුම් හා සම්බන්ධ කර ඇත. ඇති සරලම නිහිත පද්ධතිවල, මෙහෙයුම් පද්ධතිය හා යෙදුම අතර වෙනසක් දැකිය නොහැකි වේ. එක්තරා කාල අවශ්යතාවයක් ඇති නිහිත පද්ධති තථ්ය කාල මෙහෙයුම් පද්ධති (real-time operating system) ලෙස හඳුන්වයි.නිශ්චිත කාලයක් නියම කර ඇති නිහිත පද්ධති වන VxWorks, eCos, QNX මෙන්ම RTLinux වැනි තථ්ය කාල මෙහෙයුම් පද්ධති ඇත.
Palm 05, windows CE, BSD සහ Linux වැනි මෙහෙයුම් පද්ධති තථ්ය කාල පරිගණනයට ආධාර නොකලත් සමහර නිහිත පද්ධති ඒවා භාවිතා කරයි.
Windows CE හි මේස පරිගණකයෙහි Windows වලට සමාන යෙදුම් ක්රමලේඛ සහිත අතුරු මුහුණතක් (API) පවතී. එසේ වුවත් මේස පරිගණකයෙහි Windows හි ඇති කේත පදනම (Code base) හා Windows CE හි සමානකම් නැත.
කෙසේ වෙතත් මෑත කාලයේදී Linux විසින් නිහිත මෙහෙයුම් පද්ධති අතර ප්රමුඛස්ථානය ලබා ගෙන ඇත්තේ පහත කරුණු හේතුකර ගෙනය. කුලී ගෙවිය යුතු නැතිවීම, පුළුල් හැකියාව, උසස් කාර්ය සාධනය හා අඩුවෙන් මතකය වැය වීම යන කරුණු පදනම් කරගෙනය.
JAVA, C++, VB, PHP වැනි විවිධ පරිගණක භාෂා පිළිබද දැනීමක් ඔබට ඇති. නමුත් ඔබ නිර්මාණය කරන වැඩසටහනක් පරිගණකය තුළ ක්රියාත්මක වන තත්වයට පත් වන්නේ කෙසේද කියා ඔබ නොදන්නවා විය හැකියි. මෙම දැනුම නොමැතිව පරිගණක වැඩසටහනක් සැලසුම්කරණය, වැඩසටහනක ඇති වැරදි සෙවීම (debug) වැනි පරිගණක වැඩසටහන්කරණයේදි අත්යාවශ්ය වන කටයුතු සිදු කිරීම අපහසුයි. මෙම ලිපි පෙළෙන් බලාපොරොත්තු වන්නේ පරිගණකයක මෘදුකාංග අංශය ක්රියාත්මක වන ආකාරය පිළිබද යම් අවබෝධයක් ලබාදීමයි. පරිගණක වැඩසටහනක ක්රියාකාරීත්වය, මෙහෙයුම් පද්ධතියක ක්රියාකාරීත්වය, මතුවිය හැකි ගැටලු ආදිය පිළිබද මෙම ලිපි පෙළෙහි ඇතුළත් වෙනවා. මෙහිදී සිදු කරන්නෙ න්යායාත්මකව ක්රියාවලිය පැහැදලි කිරීමක් බැවින් පරිගණකයක් තුළ මේවා භාවිත වන ආකාරයෙහි යම් වෙනස්කම් පැවතිය හැකියි.
Process එකක ව්යුහය 01
අප විසින් සකසනු ලබන program එකක් අවසානයේ පරිගණකය තුළ ක්රියාත්මක වන්නේ 1 සහ 0 සමුදායක් ලෙස (machine code) බව ඔබ දන්නවා ඇති. එනම් පරිගණකය හදුනාගන්නේ 1 සහ 0 සදහා වූ වෙනස් වෝල්ටීයතා මට්ටම් දෙකක් පමණයි. එසේ නම් සංකීර්ණ කාර්යයන් සිදුකරන software එකක් මෙලෙස 1 සහ 0 මගින් ක්රියාත්මක වන්නේ කෙලෙසද යන ගැටලුව ඔබටත් තිබිය හැකියි. මෙම ලිපි පෙළෙන් එම ක්රියාවලිය පිළිබද යම් අවබෝධයක් ලබා දීමට බලාපොරොත්තු වනවා. මෙම ක්රියාවලිය පැහැදිලි කිරීමට අවශ්ය මූලික දැනුම ලබා දීම සදහා ප්රථමයෙන්ම program එකක් run වීමට අදාළ මූලික ක්රියාවලිය කෙටියෙන් සළකා බලමු.
ප්රථමයෙන්ම hard disk එකේ තියෙන program එක main memory එකට රැගෙන යනවා. program එකක් යනු instruction සමුදායකි. මේ එක් එක් instruction එක processor එක මගින් ක්රියාත්මක කිරීම තමයි program එකක් execute කරනව කියල කරන්නෙ.
main memory එකේ දත්ත ගබඩා කර තැබිය හැකි ස්ථාන වලට memory locations කියල කියනවා. එක් එක් memory location එකට අනන්ය වූ address එකක් තියෙනවා. එමගින් අවශ්ය memory location එක හදුනාගන්න පුළුවන්. processer(cpu) එක ඇතුලෙ තියෙන program counter(pc) එක මගින් දැන් execute කල යුතු instruction එක තියෙන memory location එකේ memory address එක ගබඩා කරල තියාගන්නවා. මෙම instruction එක cpu එක ඇතුළට ගෙනත් instruction register කියල තැනක තැන්පත් කරනවා. register එකක් කියන්නෙත් memory location එකක් වගේම එකක්. බොහෝ වෙලාවට ඒවා තියෙන්නෙ cpu එක ඇතුලෙ. එම නිසා memory එකට වඩා ගොඩක් වේගවත්. ඉන් පස්සෙ පරිගණකය instruction register එකේ තියෙන instruction එක කියවල ඒක ක්රියාත්මක කරනවා. main memory එකේ ඇති දත්තයක් කියවීම main memory එකේ දත්තයක් තැනපත් කිරීම register වල ඇති දත්ත වලින් ගණිතකර්ම සිදු කිරීම වැනි විවිධ instructions මෙලෙස execute කළ හැකියි. එක් instruction එකක් execute කිරීමෙන් පසු ඊලග instruction එක cpu එකේ instruction register එකට ගෙන ආ යුතුයි. ඒ සදහා program counter එකෙහි මීලග instruction එක ඇති memory address එක සටහන් කල යුතුයි. ඉන්පසු පෙර පරිදිම මීලග instruction එක execute කල යුතුයි
අප විසින් සකස් කරන program එකක් අවසන් වශයෙන් පරිගණකය තුළ execute වීම සිදුවන ආකාරය පැහැදිලි කරන්නට මෙම ලිපියෙන් බලාපොරොත්තු වෙනවා. මේකෙදි කතා කරන්නෙ execute වීමට අවශ්ය මූලිකම දේවල් ටිකක් ගැන විතරයි.
අපි program එකක් සකස් කළ විට ඒක ගොඩක් සංවිධානාත්මකව තියෙනවා. ඒක බලපු ගමන් අපට එයින් සිදුවන දේ පැහැදිලිව තේරුම් ගන්න පුළුවන්. නමුත් පරිගණකයට ඒ දේ කරන්න බැහැ. එයට එකින් එක සිදු කල යුතු සියලුම දේවල් කියන්න ඕනි. මේ අපි තේරුම් ගත යුතු වැදගත්ම දෙයක්. කල යුතු ඉතාමත් සුළු පියවරක් උනත් පරිගණකයට අපි විසින් කියන්න ඕනි. මේක මෙහෙම කියද්දි හොදට දන්න දෙයක් කියල හිතුනත් ඒක එච්චර ලේසියෙන් තේරුම් යන්නෙ නෑ. ඒ ගැන හොදින් හිතල බලන්න. ඒත් ඔබ code එකක් ලියද්දි මේ හැම පියවරක්ම ලියන්නෙ නෑනෙ. ඒත් ඔබ code එක compile කලාම compiler එක ඔබ වෙනුවෙන් ඒ දේවල් සිදු කරල දෙනවා. Assembly code එකක් ලියද්දි ඔබ මේ කරුණ ගැන හරියටම තේරුම් අරගෙන තියෙන්න ඕනි. මොකද assembly code එකක් කියන්නෙ compile කලාට පස්සෙ ලැබෙන එකක්.
අපි සරල code එකක් භාවිතා කරල මේ ක්රියාවලිය පැහැදිලි කර ගනිමු.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int main() { int a = 10; int b = 5; int c = add(a,b); return 0; } int add(int x, int y) { int z = x+y; return z; } |
ඉහත code එක compile කලාම කලින් කිව්ව විදියට compiler එක ඔබ වෙනුවෙන් අවශ්ය එකතු කිරීම් කරල RAM එක තුළ එක් එක් instruction එක තැබිය යුතු memory address දක්වාම වූ සියලු විස්තර file එකකට ලියනවා. එම program එක run වෙද්දි RAM එක තුළ දත්ත පහත විදියට විහිදෙනවා කියල හිතමු.
assembly code ලිවීමේ දී සලකන විවිධ segment භාවිත කරන ක්රියාවලිය මදකට අමතක කරන්න. මේකෙ පැහැදිලි කරන්නෙ එක් method එකකට අදාල දත්ත එක තැනක තියෙනව කියල සලකලයි.
ඉහත පින්තූරයේ තියෙන විදියට memory address 1000-1050 වන තුරු main method එකත් 1100-1120 වන තුරු add method එකත් තියෙනව කියල හිතමු. Code එක compile කරන කොටම මොන memory address වලද program එක ලියවෙන්න ඕනි කියන එක file එකේ ලියවෙනවා. මොකද jump statement එකක් එහෙම තිබ්බොත් යන්න ඕනි මොන memory address එකටද කියන එක program එක දැනන් ඉන්න ඕනි. Code එක compile කරද්දිම memory address ලියවෙනවා නම් ප්රශ්නයක් තියෙනවා. Program එක compile කරන්නෙ එක වෙලාවක ඒත් ඊට පස්සෙ විවිධ වෙලා වලදි ඒක run කරනව. නමුත් ඒ හැම වෙලාවකදිම එකම memory එකේ ස්ථාන හිස්ව තියෙනවා කියල කියන්න බැහැ. මොකද එකම වෙලාවෙ program කිහිපයක් වැඩ කරන්න පුළුවන්නෙ. නමුත් අපි දැනට සලකමු අපේ program එකට මුළු memory එකම භාවිත කරන්න පුළුවන් කියල. එහෙම උනොත් ඉහත code එකේ ගැටලුවක් එන්නෙ නෑ. ඒත් ඉහත code එකේ main method එකත් add method එකත් file දෙකක ලියල තියෙනව නම් ඒ file දෙක වෙන වෙනම compile කරන්න පුළුවන්නෙ. එතකොට....????
එතකොට එක් file එකක් අනිත් file එක භාවිත කරන memory address පිළිබද අවබෝධයක් නැහැ. File දෙකම එකම memory address භාවිත කරන්න ඉඩ තියෙනවා. එවිට එම program එක run වෙන්න විදියක් නැහැ. මෙම තත්වය මග හරවා ගන්නෙ linker එක භාවිතයෙන්.
main.c | |
1 2 3 4 5 6 7 8 | int main() { int a = 10; int b = 5; int c = add(a,b); return 0; } |
add.c | |
1 2 3 4 5 6 | int add(int x, int y) { int z = x+y; return z;
main method එක main.c file එකෙත් add method එක add.c file එකෙත් තියෙනව කියල හිතමු. compiler එකෙන් මේ file දෙක main.o add.o කියල file දෙකකට වෙන වෙනම compile කරනව කියල හිතමු. linker එකෙන් කරන්නෙ මේ file දෙකේ තියෙන දත්ත තනි file එකකට අලුතෙන් ලියන එක. එහෙම ලියද්දි memory address වල ගැටලුවක් වෙන්නෙ නැති විදියට memory එකේ තැන් දෙකකට එන විදියටයි ඒක ලියන්නෙ.
|
No comments:
Post a Comment