සියලුම නවීන CPU වලට දැනට ක්රියාත්මක වන යන්ත්ර උපදෙස් වලට බාධා කිරීමේ හැකියාව ඇත . කිසිවක් සිදු නොවූවාක් මෙන් පසුව ක්රියාත්මක කිරීම නැවත ආරම්භ කිරීමට හැකි වන පරිදි ඔවුන් ප්රමාණවත් තරම් රාජ්යයක් (සාමාන්යයෙන්, නමුත් සෑම විටම, තොගයේ) ඉතිරි කරයි (බාධා කළ උපදෙස් මුල සිටම නැවත ආරම්භ වේ). ඉන්පසු ඔවුන් බාධාකාරී හසුරුවන්නෙකු ක්රියාත්මක කිරීමට පටන් ගනී , එය තවත් යන්ත්ර කේතයක් වන නමුත් විශේෂ ස්ථානයක තබා ඇති බැවින් එය කල්තියා කොතැනදැයි CPU දැන ගනී. බාධා කිරීම් හසුරුවන්නන් සැමවිටම මෙහෙයුම් පද්ධතියේ කර්නලයේ කොටසකි : විශාලතම වරප්රසාදය සමඟ ක්රියාත්මක වන සංරචකය සහ අනෙකුත් සියලුම සංරචක ක්රියාත්මක කිරීම අධීක්ෂණය කිරීමේ වගකීම දරයි. 1,2
බාධා කිරීම් සමමුහුර්ත විය හැකි අතර , එයින් අදහස් වන්නේ ඒවා දැනට ක්රියාත්මක කර ඇති උපදෙස් වලට හෝ අසමමුහුර්ත දෙයකට සෘජු ප්රතිචාරයක් ලෙස CPU විසින්ම අවුලුවන බවයි , එයින් අදහස් වන්නේ ඒවා අනපේක්ෂිත වේලාවක සිදුවන්නේ බාහිර සිදුවීමක් නිසා, ජාලයට පැමිණෙන දත්ත වැනි බවයි. වරාය. සමහර අය අසමමුහුර්ත බාධා සඳහා "බාධා" යන යෙදුම වෙන් කර ඇති අතර ඒ වෙනුවට සමමුහුර්ත බාධා "උගුල්", "දෝෂ" හෝ "ව්යතිරේක" ලෙස හඳුන්වයි, නමුත් එම වචන සියල්ලටම වෙනත් අර්ථයන් ඇත, එබැවින් මම "සමමුහුර්ත බාධා කිරීම්" සමඟ බැඳී සිටිමි.
දැන් බොහෝ නවීන මෙහෙයුම් පද්ධතිවල ක්රියාවලි පිළිබඳ සංකල්පයක් ඇත . එහි මූලික වශයෙන්, මෙය පරිගණකයට එකවර එකකට වඩා වැඩියෙන් ක්රියාත්මක කළ හැකි යාන්ත්රණයකි, නමුත් මෙහෙයුම් පද්ධති මතක ආරක්ෂණය වින්යාස කරන ආකාරය පිළිබඳ ප්රධාන අංගයක් වන අතර එය බොහෝ දෙනාගේ ලක්ෂණයකි (නමුත් අහෝ, තවමත් සියල්ලම නොවේ ) නවීන CPUs. එය අථත්ය මතකය සමඟ ගමන් කරයි, එය මතක ලිපින සහ RAM හි සත්ය ස්ථාන අතර සිතියම් වෙනස් කිරීමේ හැකියාවයි. මතක ආරක්ෂණය මඟින් මෙහෙයුම් පද්ධතියට එක් එක් ක්රියාවලියට තමන්ගේම පුද්ගලික RAM ප්රමාණයක් ලබා දිය හැකිය. මෙහෙයුම් පද්ධතියට (කිසියම් ක්රියාවලියක් වෙනුවෙන් ක්රියා කිරීම) RAM හි කලාප කියවීමට-පමණක්, ක්රියාත්මක කළ හැකි, සහයෝගීතා ක්රියාවලීන් සමූහයක් අතර බෙදා ගැනීමට යනාදිය නම් කිරීමට ඉඩ ලබා දේ. කර්නලය. 3
සෑම ක්රියාවලියක්ම මතකයට ප්රවේශ වන තාක් කල් CPU වින්යාසගත කර ඇති ආකාරයට පමණක් මතක ආරක්ෂාව නොපෙනේ. ක්රියාවලියක් නීති රීති උල්ලං When නය කරන විට, CPU විසින් සමමුහුර්ත බාධාවක් ජනනය කරනු ඇත. එය නිතිපතා සිදුවන්නේ ක්රියාවලිය සැබවින්ම නීති කඩ නොකළ බවය, ක්රියාවලිය දිගටම කරගෙන යාමට ඉඩ දීමට පෙර කර්නලයට පමණක් යම් වැඩක් කළ යුතුය. නිදසුනක් ලෙස, වෙනත් දෙයක් සඳහා RAM හි ඉඩ නිදහස් කිරීම සඳහා ක්රියාවලියක මතකයේ පිටුවක් swap ගොනුවට "ඉවත් කිරීම" අවශ්ය නම්, කර්නලය එම පිටුව ප්රවේශ කළ නොහැකි ලෙස සලකුණු කරයි. ඊළඟ වතාවේ ක්රියාවලිය එය භාවිතා කිරීමට උත්සාහ කරන විට, CPU විසින් මතක ආරක්ෂණ බාධාවක් ජනනය කරනු ඇත; කර්නලය පිටුව swap වෙතින් ලබා ගනී, එය තිබූ තැනට නැවත තබයි, නැවත ප්රවේශ විය හැකි බව සලකුණු කර ක්රියාත්මක කිරීම නැවත ආරම්භ කරයි.
නමුත් ක්රියාවලිය ඇත්ත වශයෙන්ම නීති කඩ කළා යැයි සිතමු. එය කිසි විටෙකත් RAM සිතියම් ගත කර නැති පිටුවකට ප්රවේශ වීමට උත්සාහ කළේය, නැතහොත් එය යන්ත්ර කේතයක් නොමැති බව සලකුණු කර ඇති පිටුවක් ක්රියාත්මක කිරීමට උත්සාහ කළේය. සාමාන්යයෙන් "යුනික්ස්" ලෙස හැඳින්වෙන මෙහෙයුම් පද්ධතිවල පවුල මෙම තත්වය සමඟ කටයුතු කිරීම සඳහා සං als ා භාවිතා කරයි . 4 සංඥ නැවතුම් සමාන, නමුත් ඔවුන් කර්නලය විසින් ජනනය සහ වෙනුවට දෘඩාංග විසින් ජනනය හා කර්නලය විසින් කෙනෙක්ම, වඩා, ක්රියාදාමයන් විසින් කෙනෙක්ම, ඇත. ක්රියාවලි මඟින් සං signal ා හසුරුවන්නන් අර්ථ දැක්විය හැකියඔවුන්ගේ කේතයෙන්, ඔවුන් සිටින තැන කර්නලයට කියන්න. එම සං signal ා හසුරුවන්නන් අවශ්ය විටෙක සාමාන්ය පාලනයේ ප්රවාහයට බාධා කරමින් ක්රියාත්මක කරනු ඇත. සං als ා සියල්ලටම අංක සහ නම් දෙකක් ඇත, ඉන් එකක් ගුප්ත අක්ෂර මාලාවක් වන අතර අනෙක තරමක් අඩු ගුප්ත වාක්ය ඛණ්ඩයකි. ක්රියාවලියක් මඟින් මතක ආරක්ෂණ නීති කඩන විට ජනනය වන සං signal ාව (සම්මුතිය අනුව) අංක 11 වන අතර, එහි නම් SIGSEGV
සහ “ඛණ්ඩනය කිරීමේ දෝෂය” වේ. 5,6 කි
සං als ා සහ බාධා කිරීම් අතර වැදගත් වෙනසක් වන්නේ සෑම සං .ාවක් සඳහාම පෙරනිමි හැසිරීමක් තිබීමයි. සියළුම බාධා කිරීම් සඳහා හසුරුවන්නන් නිර්වචනය කිරීමට මෙහෙයුම් පද්ධතිය අපොහොසත් වුවහොත් එය මෙහෙයුම් පද්ධතියේ දෝෂයකි, තවද CPU අතුරුදහන් වූ හසුරුවන්නෙකු ඉල්ලා සිටීමට උත්සාහ කරන විට මුළු පරිගණකයම බිඳ වැටෙනු ඇත. නමුත් සියලුම සං als ා සඳහා සං hand ා හසුරුවන්නන් අර්ථ දැක්වීමට ක්රියාවලීන් බැඳී නොමැත. කර්නලය ක්රියාවලියක් සඳහා සං signal ාවක් ජනනය කරන්නේ නම් සහ එම සං signal ාව එහි පෙරනිමි හැසිරීමෙන් ඉතිරි වී ඇත්නම්, කර්නලය ඉදිරියට ගොස් පෙරනිමිය කුමක් කළත් ක්රියාවලියට කරදර නොවනු ඇත. බොහෝ සං als ා වල පෙරනිමි හැසිරීම් එක්කෝ "කිසිවක් නොකරන්න" හෝ "මෙම ක්රියාවලිය අවසන් කරන අතර සමහර විට මූලික ඩම්ප් එකක් ද නිපදවනු ඇත." SIGSEGV
දෙවැන්නකි.
ඉතින්, නැවත බැලීමට, අපට මතක ආරක්ෂණ නීති කඩ කළ ක්රියාවලියක් ඇත. CPU විසින් ක්රියාවලිය අත්හිටුවා සමමුහුර්ත බාධාවක් ජනනය කළේය. කර්නලය එම බාධා කිරීම් සිදු SIGSEGV
කර ක්රියාවලිය සඳහා සං signal ාවක් ජනනය කළේය . ක්රියාවලිය සං signal ා හසුරුවන්නෙකු සකසා නැතැයි උපකල්පනය කරමු SIGSEGV
, එබැවින් කර්නලය පෙරනිමි හැසිරීම සිදු කරයි, එය ක්රියාවලිය අවසන් කිරීම වේ. මෙය _exit
පද්ධති ඇමතුමට සමාන බලපෑම් ඇති කරයි : විවෘත ලිපිගොනු වසා ඇත, මතකය අවලංගු කර ඇත.
මේ දක්වා කිසිවක් මිනිසෙකුට දැකිය හැකි කිසිදු පණිවිඩයක් මුද්රණය කර නොමැති අතර කවචය (හෝ, වඩාත් සාමාන්යයෙන්, දැන් අවසන් වී ඇති ක්රියාවලියේ මව් ක්රියාවලිය ) කිසිසේත් සම්බන්ධ වී නොමැත. SIGSEGV
නීති කඩ කළ ක්රියාවලියට මිස එහි මවුපියන්ට නොවේ . මෙම ඉදිරි මෙම අනුපිළිවෙල පියවර, නමුත්, තම දරුවන් ළමා අවසන් කර ඇති බව මව් ක්රියාවලිය දැනුවත් කිරීමට ය. මෙම මව් දැනටමත් එක් භාවිතා, මෙම නිවේදනය සඳහා නැවතී ඇත විට සරලතම වන කිහිපයක් විවිධ ක්රම, එය සිදුවිය හැකි ය wait
පද්ධතිය ඇමතුම් ( wait
, waitpid
, wait4
, ආදිය). එවැනි අවස්ථාවකදී, කර්නලය මඟින් එම පද්ධතියේ ඇමතුම නැවත ලබා දෙන අතර මව් ක්රියාවලියට පිටවීමේ තත්වය යනුවෙන් කේත අංකයක් සපයනු ඇත.. 7 මෙම පිටවීමේ තත්ත්වය මව් දැනුම් ඇයි දරුවා ක්රියාවලිය අවසන් කළ බවත්; මෙම අවස්ථාවේ දී, සං .ාවක පෙරනිමි හැසිරීම හේතුවෙන් දරුවා අවසන් කළ බව ඉගෙන ගනු ඇත SIGSEGV
.
දෙමව්පියන්ගේ ක්රියාවලිය පණිවිඩයක් මුද්රණය කිරීමෙන් සිදුවීම මිනිසෙකුට වාර්තා කළ හැකිය; කවච වැඩසටහන් සෑම විටම පාහේ මෙය කරයි. ඒ සඳහා ඔබේ crsh
කේතය ඇතුළත් නොවේ, නමුත් එය කෙසේ හෝ සිදු වේ, මන්ද සී පුස්තකාල චර්යාව system
අංගසම්පූර්ණ කවචයක් ධාවනය කරයි /bin/sh
, එනම් “හුඩ් යට”. crsh
යනු grandparent මෙම තත්වය තුළ, මව්-ක්රියාවලි දැනුම්දීම මඟින් /bin/sh
ක්ෂේත්රය මඟින් එහි සුපුරුදු පණිවිඩය මුද්රණය කරයි. ඊට /bin/sh
වඩා වැඩි යමක් නැති නිසාත්, සී පුස්තකාලය ක්රියාත්මක කිරීමෙන් එම පිටවීමේ දැනුම්දීම system
ලැබෙනු ඇත. හි ප්රතිලාභ අගය පරීක්ෂා කිරීමෙන් එම පිටවීමේ දැනුම්දීම ඔබේ කේතයේ දැකිය හැකියsystem
; නමුත් මුනුබුරාගේ ක්රියාවලිය සෙග්ෆෝල්ට් එකකින් මිය ගිය බව එය ඔබට නොකියනු ඇත, මන්ද එය පරිභෝජනය කරනු ලැබුවේ අතරමැදි ෂෙල් ක්රියාවලියෙනි.
පාද සටහන්
සමහර මෙහෙයුම් පද්ධති කර්නලයේ කොටසක් ලෙස උපාංග ධාවක ක්රියාත්මක නොකරයි ; කෙසේ වෙතත්, සියලු බාදා පේනු තවමත් කර්නලය කොටසක් විය, දෘඪාංග කිසිම දේකට ඉඩ නැති නිසා ඇති ද, එසේ මතක ආරක්ෂාව මාන කරන කේතය කරන්නේ නමුත් මේ දේවල් කිරීමට කර්නලය.
කර්නලයට වඩා වරප්රසාද ලත් “හයිපර්වයිසර්” හෝ “අතථ්ය යන්ත්ර කළමණාකරු” නමින් වැඩසටහනක් තිබිය හැකි නමුත් මෙම පිළිතුරේ අරමුණු සඳහා එය දෘඩාංගයේ කොටසක් ලෙස සැලකිය හැකිය .
කර්නලය වැඩසටහනකි , නමුත් එය ක්රියාවලියක් නොවේ ; එය පුස්තකාලයක් වැනි ය. සියළුම ක්රියාදාමයන් ඔවුන්ගේ කේතයට අමතරව වරින් වර කර්නල් කේතයේ කොටස් ක්රියාත්මක කරයි. කර්නල් කේතය පමණක් ක්රියාත්මක කරන "කර්නල් නූල්" ගණනාවක් තිබිය හැකි නමුත් ඒවා මෙහි අප ගැන තැකීමක් නොකරයි.
යුනික්ස් ක්රියාත්මක කිරීමක් ලෙස සැලකිය නොහැකි ඔබට තවදුරටත් ගනුදෙනු කිරීමට සිදුවිය හැකි එකම සහ එකම මෙහෙයුම් පද්ධතිය වන්නේ වින්ඩෝස් ය. මෙම තත්වය තුළ එය සං als ා භාවිතා නොකරයි. (ඇත්ත වශයෙන්ම, එය නොවේ ඇති සංඥා; වින්ඩෝස් මත <signal.h>
. අතුරු මුහුණත සම්පූර්ණයෙන්ම C පුස්තකයන් විසින් සැකකරු ඇත) එය "ලෙස හඳුන්වන දෙයක් භාවිතා ව්යුහගත හැර කටයුතු " වෙනුවට.
සමහර මතක ආරක්ෂණ උල්ලං lations SIGBUS
නයන් වෙනුවට ("බස් දෝෂය") ජනනය කරයි SIGSEGV
. මේ දෙක අතර රේඛාව අවිනිශ්චිත වන අතර එය පද්ධතියෙන් පද්ධතියට වෙනස් වේ. ඔබ හසුරුවන්නෙකු නිර්වචනය කරන වැඩසටහනක් ලියා ඇත්නම් SIGSEGV
, බොහෝ විට එකම හසුරුවන්නා නිර්වචනය කිරීම හොඳ අදහසකි SIGBUS
.
“ඛණ්ඩනය කිරීමේ දෝෂය” යනු මුල් යුනික්ස් ධාවනය කළ එක් පරිගණකයකින් මතක ආරක්ෂණ උල්ලං for නය කිරීම් සඳහා ජනනය කරන ලද බාධකයේ නමයි , බොහෝ විට පීඩීපී -11 . " ඛණ්ඩනය " යනු මතක ආරක්ෂණ වර්ගයකි , නමුත් වර්තමානයේ "ඛණ්ඩනය කිරීමේ දෝෂය " යන වචනය සාමාන්යයෙන් ඕනෑම ආකාරයක මතක ආරක්ෂණ උල්ලං to නයකට යොමු කරයි.
දරුවෙකු අවසන් වී ඇති බව දෙමාපිය ක්රියාවලියට දැනුම් දිය හැකි අනෙක් සියලු ක්රම, දෙමව්පියන් ඇමතීමෙන් wait
සහ පිටවීමේ තත්වයක් ලැබීමෙන් අවසන් වේ. පළමුවෙන්ම වෙනත් දෙයක් සිදු වේ.
crsh
, එය "කඩාවැටීම" ලෙස උච්චාරණය කරනු ඇතැයි මම සිතුවෙමි. එය සමානව ගැලපෙන නමක් දැයි මට විශ්වාස නැත.