මෙහෙයුම් පද්ධති: පහසු කෑලි තුනක්. 1 කොටස: හැඳින්වීම (පරිවර්තනය)

මෙහෙයුම් පද්ධති හැඳින්වීම

හේ හබ්ර්! මම ඔබේ අවධානයට ලිපි මාලාවක් ගෙන ඒමට කැමතියි - මගේ මතය අනුව එක් රසවත් සාහිත්‍යයක පරිවර්තන - OSTEP. මෙම ද්‍රව්‍යය unix වැනි මෙහෙයුම් පද්ධතිවල ක්‍රියාකාරිත්වය ගැඹුරින් සාකච්ඡා කරයි, එනම් ක්‍රියාවලි සමඟ වැඩ කිරීම, විවිධ උපලේඛන, මතකය සහ නවීන මෙහෙයුම් පද්ධතියක් සාදන වෙනත් සමාන සංරචක. ඔබට මෙහි සියලුම ද්‍රව්‍යවල මුල් පිටපත දැක ගත හැකිය මෙහි. පරිවර්ථනය වෘත්තීය නොවන ලෙස (තරමක් නිදහසේ) සිදු කර ඇති බව කරුණාවෙන් සලකන්න, නමුත් මම සාමාන්‍ය අර්ථය රඳවා ගැනීමට බලාපොරොත්තු වෙමි.

මෙම විෂය පිළිබඳ රසායනාගාර කටයුතු මෙහි සොයාගත හැකිය:
- මුල්: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- මුල්: github.com/remzi-arpacidusseau/ostep-code
- මගේ පුද්ගලික අනුවර්තනය: github.com/bykvaadm/OS/tree/master/ostep

ඔබට මගේ නාලිකාව ද පරීක්ෂා කළ හැකිය විදුලි පණිවුඩ =)

වැඩසටහන් මෙහෙයුම

වැඩසටහනක් ක්රියාත්මක වන විට කුමක් සිදුවේද? ක්රියාත්මක වන වැඩසටහනක් එක් සරල දෙයක් කරයි - එය උපදෙස් ක්රියාත්මක කරයි. සෑම තත්පරයකම, RAM වෙතින් ප්‍රොසෙසරය මඟින් මිලියන ගණනක් සහ සමහර විට බිලියන ගණනක් උපදෙස් ලබා ගනී, අනෙක් අතට එය ඒවා විකේතනය කරයි (උදාහරණයක් ලෙස, එය මෙම උපදෙස් කුමන වර්ගයට අයත් දැයි හඳුනා ගනී) සහ ඒවා ක්‍රියාත්මක කරයි. මෙය අංක දෙකක් එකතු කිරීම, මතකයට ප්‍රවේශ වීම, කොන්දේසියක් පරීක්ෂා කිරීම, ශ්‍රිතයකට පැනීම යනාදිය විය හැකිය. එක් උපදෙස් ක්‍රියාත්මක කිරීමෙන් පසු, ප්‍රොසෙසරය තවත් එකක් ක්‍රියාත්මක කිරීමට යයි. එබැවින් උපදෙස් වලින් පසු උපදෙස්, වැඩසටහන අවසන් වන තෙක් ඒවා ක්රියාත්මක කරනු ලැබේ.
මෙම උදාහරණය ස්වභාවිකව සරල ලෙස සලකනු ලැබේ - ඇත්ත වශයෙන්ම, ප්‍රොසෙසරය වේගවත් කිරීම සඳහා, නවීන දෘඪාංග මඟින් උපදෙස් පිටතට ක්‍රියාත්මක කිරීමට, හැකි ප්‍රතිඵල ගණනය කිරීමට, උපදෙස් එකවර ක්‍රියාත්මක කිරීමට සහ ඒ හා සමාන උපක්‍රම ඔබට ඉඩ සලසයි.

Von Neumann ගණනය කිරීමේ ආකෘතිය

අප විසින් විස්තර කරන ලද කාර්යයේ සරල ආකාරය Von Neumann ගණනය කිරීමේ ආකෘතියට සමාන වේ. වොන් නියුමන් යනු පරිගණක පද්ධතිවල පුරෝගාමීන්ගෙන් කෙනෙකි, ඔහු ක්‍රීඩා න්‍යායේ කතුවරුන්ගෙන් කෙනෙකි.. වැඩසටහන ක්‍රියාත්මක වන අතරතුර, වෙනත් සිදුවීම් සමූහයක් සිදු වේ, තවත් බොහෝ ක්‍රියාවලි සහ තෙවන පාර්ශවීය තාර්කික වැඩ, එහි ප්‍රධාන අරමුණ වන්නේ පද්ධතිය දියත් කිරීම, ක්‍රියාත්මක කිරීම සහ නඩත්තු කිරීම සරල කිරීමයි.
වැඩසටහන් ක්‍රියාත්මක කිරීම පහසු කිරීම (හෝ එකවර වැඩසටහන් කිහිපයක් ක්‍රියාත්මක කිරීමට පවා ඉඩ දීම) සඳහා වගකිව යුතු මෘදුකාංග සමූහයක් ඇත, එමඟින් වැඩසටහන් එකම මතකය බෙදා ගැනීමට සහ විවිධ උපාංග සමඟ සන්නිවේදනය කිරීමට ඉඩ සලසයි. එවැනි මෘදුකාංග කට්ටලයක් (මෘදුකාංග) අත්‍යවශ්‍යයෙන්ම මෙහෙයුම් පද්ධතිය ලෙස හඳුන්වනු ලබන අතර එහි කර්තව්‍යයන් අතර පද්ධතිය නිවැරදිව හා කාර්යක්ෂමව ක්‍රියා කරන්නේද යන්න අධීක්ෂණය කිරීම මෙන්ම මෙම පද්ධතියේ කළමනාකරණයේ පහසුව සහතික කිරීමද ඇතුළත් වේ.

මෙහෙයුම් පද්ධතිය

මෙහෙයුම් පද්ධතියක්, OS ලෙස කෙටියෙන් හැඳින්වෙන්නේ, පරිගණක සම්පත් කළමනාකරණය කිරීමට සහ පරිගණකයක් සමඟ පරිශීලක අන්තර්ක්‍රියා සංවිධානය කිරීමට නිර්මාණය කර ඇති අන්තර් සම්බන්ධිත වැඩසටහන් සමූහයකි..
මෙහෙයුම් පද්ධතිය එහි කාර්යක්ෂමතාවය පළමු ස්ථානයේ සාක්ෂාත් කර ගනී, වඩාත්ම වැදගත් තාක්ෂණය හරහා - තාක්ෂණය අථත්යකරණය. OS භෞතික සම්පතක් (ප්‍රොසෙසරය, මතකය, තැටිය, ආදිය) සමඟ අන්තර්ක්‍රියා කරන අතර එය වඩාත් සාමාන්‍ය, වඩා බලවත් සහ භාවිතයට පහසු ආකාරයක් බවට පරිවර්තනය කරයි. එබැවින්, සාමාන්‍ය අවබෝධයක් සඳහා, ඔබට මෙහෙයුම් පද්ධතිය අථත්‍ය යන්ත්‍රයක් සමඟ ඉතා දළ වශයෙන් සංසන්දනය කළ හැකිය.
පරිශීලකයින්ට මෙහෙයුම් පද්ධතියට විධාන ලබා දීමට සහ අථත්‍ය යන්ත්‍රයේ හැකියාවන් භාවිතා කිරීමට ඉඩ දීම සඳහා (වැඩසටහනක් ක්‍රියාත්මක කිරීම, මතකය වෙන් කිරීම, ගොනුවකට ප්‍රවේශ වීම සහ යනාදිය), මෙහෙයුම් පද්ධතිය නමින් යම් අතුරු මුහුණතක් සපයයි. API (යෙදුම් ක්‍රමලේඛන අතුරුමුහුණත) සහ ඔබට ඇමතුම් ලබා ගත හැකි (ඇමතුම්). සාමාන්‍ය මෙහෙයුම් පද්ධතියක් මඟින් පද්ධති ඇමතුම් සිය ගණනක් ලබා ගැනීමට ඉඩ සලසයි.
අවසාන වශයෙන්, අථත්‍යකරණය මඟින් බහු වැඩසටහන් ක්‍රියාත්මක කිරීමට (එමගින් CPU බෙදා ගැනීමට) සහ එකවර ඒවායේ උපදෙස් සහ දත්ත වෙත ප්‍රවේශ වීමට (මෙමගින් මතකය බෙදා ගැනීමට) සහ තැටි වෙත ප්‍රවේශ වීමට (එමගින් I/O උපාංග බෙදා ගැනීමට) ඉඩ ලබා දෙන බැවින්, මෙහෙයුම් පද්ධතිය a ලෙසද හැඳින්වේ. සම්පත් කළමනාකරු. සෑම ප්‍රොසෙසරයක්ම, තැටියක් සහ මතකයක්ම පද්ධතියේ සම්පතක් වන අතර, මේ අනුව, මෙහෙයුම් පද්ධතියේ එක් කාර්යභාරයක් වන්නේ මෙම මෙහෙයුම් පද්ධතිය සඳහා වන කාර්යය මත පදනම්ව, මෙම සම්පත් කළමනාකරණය කිරීම, කාර්යක්ෂමව, අවංකව හෝ අනෙක් අතට එය කිරීමයි. නිර්මාණය කර ඇත.

CPU අථත්‍යකරණය

පහත වැඩසටහන සලකා බලන්න:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

මෙහෙයුම් පද්ධති: පහසු කෑලි තුනක්. 1 කොටස: හැඳින්වීම (පරිවර්තනය)

එය විශේෂ ක්‍රියාවක් සිදු නොකරයි, ඇත්ත වශයෙන්ම, එය කරන්නේ ශ්‍රිතයක් කැඳවීම පමණි භ්රමණය(), එහි කාර්යය වන්නේ කාල පරික්ෂාව හරහා චක්‍රීය කිරීම සහ තත්පරයක් ගත වූ පසු ආපසු පැමිණීමයි. මේ අනුව, පරිශීලකයා තර්කයක් ලෙස සම්මත කළ තන්තුව එය දින නියමයක් නොමැතිව පුනරාවර්තනය කරයි.
අපි මෙම වැඩසටහන ක්‍රියාත්මක කර තර්කයක් ලෙස "A" අක්ෂරය පාස් කරමු. ප්රතිඵලය විශේෂයෙන් සිත්ගන්නා සුළු නොවේ - පද්ධතිය සරලව "A" අක්ෂරය වරින් වර පෙන්වන වැඩසටහනක් ක්රියාත්මක කරයි.
දැන් අපි එකම වැඩසටහනේ බොහෝ අවස්ථා ක්‍රියාත්මක වන විට විකල්පය උත්සාහ කරමු, නමුත් එය පැහැදිලි කිරීම සඳහා විවිධ අකුරු ප්‍රතිදානය කරන්න. මෙම අවස්ථාවේ දී, ප්රතිඵලය තරමක් වෙනස් වනු ඇත. අපට එක් ප්‍රොසෙසරයක් තිබියදීත්, වැඩසටහන එකවර ක්‍රියාත්මක වේ. එය සිදු වන්නේ කෙසේද? නමුත් මෙහෙයුම් පද්ධතිය දෘඪාංග හැකියාවන්ගේ උපකාරයෙන් තොරව මායාවක් නිර්මාණය කරන බව පෙනී යයි. පද්ධතියට බහු අතථ්‍ය ප්‍රොසෙසර ඇති බවට මිත්‍යාව, තනි භෞතික ප්‍රොසෙසරයක් න්‍යායාත්මකව අනන්ත සංඛ්‍යාවක් බවට පත් කර එමගින් පෙනෙන වැඩසටහන් එකවර ක්‍රියාත්මක වීමට ඉඩ සලසයි. මෙම මායාව ලෙස හැඳින්වේ CPU අථත්‍යකරණය.
මෙම පින්තූරය බොහෝ ප්‍රශ්න මතු කරයි, උදාහරණයක් ලෙස, වැඩසටහන් කිහිපයක් එකවර ක්‍රියාත්මක කිරීමට අවශ්‍ය නම්, කුමන එකක් දියත් කරන්නේද? OS හි "ප්රතිපත්ති" මෙම ප්රශ්නයට වගකිව යුතුය. OS හි බොහෝ ස්ථානවල ප්‍රතිපත්ති භාවිතා වන අතර මෙවැනි ප්‍රශ්න වලට පිළිතුරු සපයන අතර OS ක්‍රියාත්මක කරන මූලික යාන්ත්‍රණ වේ. එබැවින් සම්පත් කළමනාකරුවෙකු ලෙස OS හි කාර්යභාරය.

මතක අථත්‍යකරණය

දැන් අපි මතකය බලමු. නවීන පද්ධතිවල මතකයේ භෞතික ආකෘතිය බයිට් අරාවක් ලෙස නිරූපණය කෙරේ.. මතකයෙන් කියවීමට, ඔබ සඳහන් කළ යුතුය සෛල ලිපිනයඑයට ප්‍රවේශ වීමට. දත්ත ලිවීමට හෝ යාවත්කාලීන කිරීමට, ඔබ දත්ත සහ එය ලිවිය යුතු කොටුවේ ලිපිනයද සඳහන් කළ යුතුය.
වැඩසටහන ක්‍රියාත්මක කිරීමේදී මතකය නිරන්තරයෙන් ප්‍රවේශ වේ. වැඩසටහනක් එහි සම්පූර්ණ දත්ත ව්‍යුහය මතකයේ ගබඩා කර විවිධ උපදෙස් ක්‍රියාත්මක කිරීමෙන් එයට ප්‍රවේශ වේ. උපදෙස්, මේ අතර, මතකයේ ගබඩා කර ඇත, එබැවින් එය ඊළඟ උපදෙස් සඳහා එක් එක් ඉල්ලීම සඳහා ද ප්‍රවේශ වේ.

malloc () ඇමතුම

ඇමතුම භාවිතා කරමින් මතක කලාපයක් වෙන් කරන පහත වැඩසටහන සලකා බලන්න malloc () (https://youtu.be/jnlKRnoT1m0):

මෙහෙයුම් පද්ධති: පහසු කෑලි තුනක්. 1 කොටස: හැඳින්වීම (පරිවර්තනය)

වැඩසටහන කරුණු කිහිපයක් ඉටු කරයි. පළමුව, එය යම් මතකයක් වෙන් කරයි (පේළිය 7), පසුව වෙන් කළ සෛලයේ ලිපිනය (රේඛාව 9) මුද්‍රණය කරයි, වෙන් කළ මතකයේ පළමු ස්ලට් එකට බිංදුව ලියයි. ඊළඟට, වැඩසටහන "p" විචල්‍යයේ ලිපිනයෙහි මතකයේ ගබඩා කර ඇති අගය වැඩි කරන ලූපයකට ඇතුල් වේ. එය තමාගේම ක්‍රියාවලි හැඳුනුම්පත ද මුද්‍රණය කරයි. එක් එක් ධාවන ක්‍රියාවලිය සඳහා ක්‍රියාවලි ID අනන්‍ය වේ. පිටපත් කිහිපයක් දියත් කිරීමෙන් පසු, අපි සිත්ගන්නා ප්‍රති result ලයක් මත පැකිළෙනු ඇත: පළමු අවස්ථාවේ දී, ඔබ කිසිවක් නොකර පිටපත් කිහිපයක් ධාවනය කරන්නේ නම්, ලිපිනයන් වෙනස් වනු ඇත. නමුත් මෙය අපගේ න්‍යායට යටත් නොවේ! නවීන බෙදාහැරීම් පෙරනිමියෙන් මතක සසම්භාවීකරණය සක්‍රීය කර ඇති බැවින් නිවැරදියි. එය අක්රිය කර ඇත්නම්, අපි අපේක්ෂිත ප්රතිඵලය ලබා ගනිමු - එකවර ක්රියාත්මක වන වැඩසටහන් දෙකක මතක ලිපින ගැලපේ.

මෙහෙයුම් පද්ධති: පහසු කෑලි තුනක්. 1 කොටස: හැඳින්වීම (පරිවර්තනය)

එහි ප්‍රතිඵලයක් වශයෙන්, ස්වාධීන වැඩසටහන් දෙකක් ඔවුන්ගේ පුද්ගලික ලිපින අවකාශයන් සමඟ ක්‍රියා කරන බව පෙනී යන අතර, ඒවා භෞතික මතකයේ මෙහෙයුම් පද්ධතිය මගින් සිතියම්ගත කර ඇත.. එමනිසා, එක් වැඩසටහනක් තුළ මතක ලිපින භාවිතා කිරීම අන් අයට කිසිදු ආකාරයකින් බලපාන්නේ නැත, සහ සෑම වැඩසටහනකටම එය සම්පූර්ණයෙන්ම ලබා දී ඇති භෞතික මතකයක් ඇති බව පෙනේ. කෙසේ වෙතත්, යථාර්ථය නම් භෞතික මතකය මෙහෙයුම් පද්ධතිය විසින් කළමනාකරණය කරන ලද හවුල් සම්පතකි.

අනුකූලතාව

මෙහෙයුම් පද්ධති තුළ ඇති තවත් වැදගත් මාතෘකාවක් වන්නේ - අනුකූලතාව. එකම වැඩසටහනක් තුළ එකවර බොහෝ දේ සමඟ වැඩ කිරීමේදී ඇතිවිය හැකි පද්ධතියේ ගැටළු ගැන කතා කිරීමේදී මෙම යෙදුම භාවිතා වේ. මෙහෙයුම් පද්ධතිය තුළම පවා අනුකූලතා ගැටළු මතු වේ. පෙර මතකය සහ ප්‍රොසෙසර අථත්‍යකරණ උදාහරණ වලදී, මෙහෙයුම් පද්ධතිය එකවර බොහෝ දේ කළමනාකරණය කරන බව අපට වැටහුණි - එය පළමු ක්‍රියාවලිය ආරම්භ කරයි, පසුව දෙවැන්න සහ යනාදිය. පෙනෙන පරිදි, මෙම හැසිරීම සමහර ගැටළු වලට තුඩු දිය හැකිය. එබැවින්, උදාහරණයක් ලෙස, නවීන බහු-නූල් වැඩසටහන් එවැනි දුෂ්කරතා අත්විඳිති.

පහත වැඩසටහන සලකා බලන්න:

මෙහෙයුම් පද්ධති: පහසු කෑලි තුනක්. 1 කොටස: හැඳින්වීම (පරිවර්තනය)

ප්රධාන කාර්යයේ ඇති වැඩසටහන ඇමතුම භාවිතයෙන් නූල් දෙකක් නිර්මාණය කරයි pthread_create(). මෙම උදාහරණයේ දී, ත්‍රෙඩ් එකක් එකම මතක අවකාශයේ අනෙකුත් ශ්‍රිතයන් සමඟින් ක්‍රියාත්මක වන ශ්‍රිතයක් ලෙස සැලකිය හැකිය, පැහැදිලිවම එකවර එක් ශ්‍රිතයකට වඩා ක්‍රියාත්මක වේ. මෙම උදාහරණයේ දී, සෑම නූල් එකක්ම ආරම්භ කර ශ්‍රිතය ක්‍රියාත්මක කරයි worker() එය සරලව විචල්‍යය වැඩි කරයි,.

අපි මෙම වැඩසටහන 1000 ක තර්කයකින් ධාවනය කරමු. ඔබ අනුමාන කළ පරිදි, එක් එක් නූල් විචල්‍යය 2000 වාරයක් වැඩි කළ නිසා ප්‍රතිඵලය 1000 විය යුතුය. කෙසේ වෙතත්, සෑම දෙයක්ම එතරම් සරල නැත. වැඩි පුනරාවර්තන අනුපිළිවෙලකින් වැඩසටහන ක්‍රියාත්මක කිරීමට උත්සාහ කරමු.

මෙහෙයුම් පද්ධති: පහසු කෑලි තුනක්. 1 කොටස: හැඳින්වීම (පරිවර්තනය)

උදාහරණයක් ලෙස, 100000 අංකයක් ඇතුළත් කිරීමෙන්, අපි ප්‍රතිදානය 200000 අංකය ලෙස දැකීමට බලාපොරොත්තු වෙමු. කෙසේ වෙතත්, අපි 100000 අංකය කිහිප වතාවක් ධාවනය කළහොත්, අපට නිවැරදි පිළිතුර නොපෙනේවා පමණක් නොව, විවිධ වැරදි පිළිතුරු ද ලැබේ. පිළිතුර පවතින්නේ අංකය වැඩි කිරීම සඳහා මෙහෙයුම් තුනක් අවශ්‍ය වේ - මතකයෙන් අංකය උපුටා ගැනීම, වැඩි කිරීම සහ පසුව අංකය නැවත ලිවීම. මේ උපදෙස් සියල්ල පරමාණුකව ක්‍රියාත්මක නොවන නිසා (සියල්ල එකවර) මේ වගේ අමුතු දේවල් වෙන්න පුළුවන්. මෙම ගැටළුව වැඩසටහන්කරණයේදී හැඳින්වේ ධාවන තත්ත්වය. නොදන්නා මොහොතක නොදන්නා බලවේග ඔබගේ ඕනෑම මෙහෙයුමක ක්‍රියාකාරිත්වයට බලපෑම් කළ හැකි විට.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න