ලිනස් ටොවල්ඩ්ස් (torvalds@cs.helsinki.fi)
අඟහරුවාදා, 6 අගෝස්තු 1996 12:47:31 +0300 (EET DST)
වර්ග කළ පණිවිඩ: [දිනය] [නූල්] [විෂය] [කර්තෘ]
ඊළඟ පණිවිඩය: බර්න්ඩ් පී. සිලර්: "නැවත: get_hash_table හි අපොයි"
පෙර පණිවිඩය: ලිනස් ටොවල්ඩ්ස්: "නැවත: I / O ඉල්ලීම් ඇණවුම් කිරීම"
1996 අගෝස්තු 5 වන දින මොන් හි පීටර් පී. අයිසර්ලෝ මෙසේ ලිවීය.
නූල් පිළිබඳ සංකල්පය අප පැහැදිලිව තබා ගත යුතුය. බොහෝ අය ක්රියාවලියක් සමඟ නූල් පටලවා ගන්නා බවක් පෙනේ. පහත දැක්වෙන සාකච්ඡාව වර්තමාන ලිනක්ස් තත්ත්වය පිළිබිඹු නොකරයි, නමුත් ඉහළ මට්ටමේ සාකච්ඡාවක රැඳී සිටීමට දරන උත්සාහයකි.
නැත!
“නූල්” සහ “ක්රියාවලි” වෙනම ආයතන යැයි සිතීමට හේතුවක් නැත. එය සාම්ප්රදායිකව සිදු වන්නේ එලෙස ය, නමුත් මම පෞද්ගලිකව සිතන්නේ එය එසේ සිතීම විශාල වැරැද්දක් බවයි. එසේ සිතීමට ඇති එකම හේතුව historical තිහාසික ගමන් මලු ය.
නූල් සහ ක්රියාවලි දෙකම සැබවින්ම එක් දෙයක් පමණි: “ක්රියාත්මක කිරීමේ සන්දර්භය”. විවිධ අවස්ථා කෘතිමව වෙන්කර හඳුනා ගැනීමට උත්සාහ කිරීම ස්වයං සීමා කිරීමකි.
මෙයින් COE ලෙස හැඳින්වෙන “ක්රියාත්මක කිරීමේ සන්දර්භය” යනු එම COE හි සියලුම රාජ්යයන්ගේ සමූහයකි. එම රාජ්යයට CPU තත්වය (රෙජිස්ටර් යනාදිය), MMU තත්වය (පිටු සිතියම්කරණය), අවසර තත්වය (uid, gid) සහ විවිධ “සන්නිවේදන තත්වයන්” (විවෘත ලිපිගොනු, සං signal ා හසුරුවන්නන් යනාදිය) ඇතුළත් වේ. සාම්ප්රදායිකව, “නූල්” සහ “ක්රියාවලියක්” අතර වෙනස ප්රධාන වශයෙන් නූල් වල CPU තත්වයක් (+ සමහර විට වෙනත් අවම තත්වයක්) ඇති අතර අනෙක් සියලුම සන්දර්භය පැමිණෙන්නේ ක්රියාවලියෙනි. කෙසේ වෙතත්, එය COE හි සමස්ත තත්වය බෙදීමේ එක් ක්රමයක් පමණක්
වන අතර එය කිරීමට සුදුසුම ක්රමය යැයි පවසන කිසිවක් නොමැත. ඒ ආකාරයේ රූපයකට ඔබව සීමා කිරීම නිකම්ම මෝඩකමකි.
ලිනක්ස් මේ ගැන සිතන ආකාරය (සහ මම වැඩ දේවල් අවශ්ය ආකාරයට) එහි වේ වේ එය "ක්රියාවලිය" හෝ "නූල්" ලෙස එවැනි දෙයක්. ඇත්තේ COE හි සම්පූර්ණත්වය පමණි (ලිනක්ස් විසින් "කාර්යය" ලෙස හැඳින්වේ). විවිධ COE වලට ඔවුන්ගේ සන්දර්භයේ කොටස් එකිනෙකා සමඟ බෙදා ගත හැකි අතර, එම බෙදාගැනීමේ එක් උපකොටසක් සාම්ප්රදායික “නූල්” / “ක්රියාවලිය” සැකසුම වේ, නමුත් එය සැබවින්ම උප කුලකයක් ලෙස දැකිය යුතුය (එය වැදගත් උප කුලකයක් වන නමුත් එම වැදගත්කම පැමිණේ සැලසුමෙන් නොව ප්රමිති වලින්: ලිනක්ස් වලට ඉහළින් ප්රමිති-අනුකූල නූල් වැඩසටහන් ක්රියාත්මක කිරීමට අපට අවශ්යය).
කෙටියෙන් කිවහොත්: නූල් / ක්රියාවලි සිතීමේ ක්රමය වටා සැලසුම් නොකරන්න. කර්නලය සැලසුම් කළ යුත්තේ COE චින්තන ක්රමය වටා වන අතර, පසුව pthreads පුස්තකාලයට COE දෙස බැලීමට එම ක්රමය භාවිතා කිරීමට කැමති පරිශීලකයින්ට සීමිත pthreads අතුරුමුහුණත අපනයනය කළ හැකිය.
නූල් / ක්රියාවලියට වඩා COE යැයි ඔබ සිතන විට කළ හැකි දේ පිළිබඳ උදාහරණයක් ලෙස:
- ඔබට යුනික්ස් සහ / හෝ ක්රියාවලිය / නූල් වල සාම්ප්රදායිකව කළ නොහැකි බාහිර "සීඩී" වැඩසටහනක් කළ හැකිය (මෝඩ උදාහරණය, නමුත් අදහස නම් සාම්ප්රදායික යුනික්ස් වලට පමණක් සීමා නොවන මෙවැනි "මොඩියුල" ඔබට තිබිය හැකි බවයි. / නූල් සැකසුම). කරන්න:
ක්ලෝන (CLONE_VM | CLONE_FS);
දරුවා: ක්රියාත්මක කරන්න ("බාහිර-සීඩී");
/ * "ක්රියාත්මක කරන්න ()" වීඑම් එක විසුරුවා හරිනු ඇත, එබැවින් අපි CLONE_VM භාවිතා කළ එකම හේතුව ක්ලෝන කිරීමේ ක්රියාව වේගවත් කිරීමයි * /
- ඔබට ස්වභාවිකවම "vfork ()" කළ හැකිය (එයට අවම කර්නල් ආධාරකයක් අවශ්ය වේ, නමුත් එම සහාය CUA ක්රමයට හොඳින් සිතීමේ ක්රමයට ගැලපේ):
ක්ලෝන (CLONE_VM);
දරුවා: දිගටම ධාවනය කරන්න, අවසානයේ ක්රියාත්මක කරන්න ()
මව: ක්රියාත්මක වන තෙක් බලා සිටින්න
- ඔබට බාහිර "IO ඩීමන්ස්" කළ හැකිය:
ක්ලෝන (CLONE_FILES);
දරුවා: විවෘත ගොනු විස්තර යනාදිය
මව: දරුවා විවෘත කළ fd භාවිතා කර vv.
ඉහත සඳහන් සියල්ලම ඔබ නූල් / ක්රියාවලි චින්තනයට බැඳී නැති නිසා. උදාහරණයක් ලෙස වෙබ් සේවාදායකයක් ගැන සිතන්න, එහිදී CGI ස්ක්රිප්ට් "ක්රියාත්මක කිරීමේ නූල්" ලෙස සිදු කරයි. සාම්ප්රදායික නූල් සමඟ ඔබට එය කළ නොහැක, මන්ද සාම්ප්රදායික නූල් සෑම විටම මුළු ලිපින අවකාශයම බෙදා ගත යුතුය, එබැවින් ඔබට වෙබ් සේවාදායකයේම කිරීමට අවශ්ය සෑම දෙයක්ම සම්බන්ධ කිරීමට සිදුවනු ඇත (“නූල්” ධාවනය කළ නොහැක තවත් ක්රියාත්මක කළ හැකි).
සඳහා උදාහරණයක් කොටස් වෙනුවට "ක්රියාත්මක සන්දර්භය" ප්රශ්නයක් ලෙස මේ චින්තනය, ඔබගේ කාර්යයන් දැන් බාහිර වැඩසටහන් ක්රියාත්මක කිරීමට තීරණය (= මව් සිට ලිපිනය අවකාශය වෙන්) හැකි ආදිය ඔවුන් කිරීමට අවශ්ය නම්, හෝ ඔවුන් හැකි මව් සමඟ සියල්ල හැර සඳහා ලිපිගොනු විස්තර කරන්නන් (එමඟින් උප "නූල්" වලට දෙමව්පියන් ගැන කරදර වීමට අවශ්ය නොවී ගොනු විශාල ප්රමාණයක් විවෘත කළ හැකිය: උප "නූල්" පිටවන විට ඒවා ස්වයංක්රීයව වැසෙන අතර එය මවුපියන් තුළ fd භාවිතා නොකරයි) .
උදාහරණයක් ලෙස නූල් සහිත "inetd" ගැන සිතන්න. ඔබට අඩු පොදු කාර්ය දෙබලක + ක්රියාත්මක කිරීමට අවශ්යය, එබැවින් ලිනක්ස් ක්රමයෙන් ඔබට “දෙබලක ()” භාවිතා කිරීම වෙනුවට බහු-නූල් සහිත inetd එකක් ලියනු ලැබේ, එහිදී සෑම නූල් එකක්ම CLONE_VM සමඟ නිර්මාණය කර ඇත (ලිපින අවකාශය බෙදා ගන්න, නමුත් ගොනුව බෙදා නොගන්න විස්තර කරන්නන් ආදිය). එවිට දරුවාට එය බාහිර සේවාවක් නම් (ක්රියාත්මක කළ හැකිය), හෝ සමහර විට එය අභ්යන්තර ක්රියාකාරී සේවාවන්ගෙන් එකක් විය හැකිය (echo, timeofday) සමහර විට එය සිදු වී පිටවන විට.
ඔබට "නූල්" / "ක්රියාවලිය" සමඟ එය කළ නොහැක.
ලිනස්