Saturday, October 13, 2012

പ്രോഗ്രാം, പ്രോസസ്സ് - 5

ഒരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം  നല്‍കുന്ന സേവനങ്ങള്‍ ഉപയോഗിക്കുന്നത് സിസ്റ്റം കോളുകള്‍ വഴിയാണ്. സാധാരണ പ്രോഗ്രാമിങ്ങ് ഭാഷകളൊക്കെ സിസ്റ്റം കോളുകള്‍ ഉപയോഗിക്കാനുള്ള ഫങ്‌‌ഷനുകള്‍ നല്‍കാറുണ്ട്. ജാവ പോലെയുള്ള വിര്‍ച്ച്വല്‍ മെഷീനുകള്‍ ഉപയോഗിക്കുന്ന അല്ലെങ്കില്‍ ഒരു ഇന്റര്‍പ്രിറ്റര്‍ കൈകാര്യം  ചെയ്യുന്ന  പ്രോഗ്രാമിങ്ങ് ഭാഷകളാണെങ്കില്‍ ഈ സിസ്റ്റം കോളുകള്‍ അവയുടെ ഇന്റര്‍പ്രിറ്റര്‍ തന്നെ കൈകാര്യം ചെയ്യും. പ്രോഗ്രാമര്‍ക്ക് അവയെക്കുറിച്ചറിയണ്ട കാര്യമില്ല. സി/സി++ ഭാഷകളില്‍ ഈ സിസ്റ്റം കോളുകള്‍ നേരിട്ട് ഉപയോഗിക്കാന്‍ സാധിക്കും. യൂണിക്സ്/ലിനക്സ് സിസ്റ്റങ്ങളില്‍ ഒരു പുതിയ പ്രോസസ് ഉണ്ടാക്കാനുള്ള സിസ്റ്റം കോള്‍ ഫോര്‍ക്ക്  (fork) ആണ്. നിലവിലുള്ള ഒരു പ്രോസസ് ഫോര്‍ക്ക് സിസ്റ്റം കോള്‍ ഉപയോഗിക്കുമ്പോള്‍  ആ പ്രോസസിന്റെ മറ്റൊരു പതിപ്പ് സൃഷ്ടിക്കപ്പെടുന്നു. ഈ പതിപ്പിനെ ചൈല്‍ഡ് പ്രോസസ്സ് എന്നും ഫോര്‍ക്ക് സിസ്റ്റം കോള്‍ ഉപയോഗിച്ച പ്രോസസിനെ പേരന്റ് പ്രോസസ്സ് എന്നും  വിളിക്കുന്നു. എല്ലാ പ്രോസസുകള്‍ക്കും ഒരു പ്രോസസ്സ് ഐഡി ഉണ്ടായിരിക്കും. പ്രോസസുകളെ കൈകാര്യം ചെയ്യാന്‍ ഈ പ്രോസസ്സ് ഐഡി ഉപയോഗിക്കാം. ഇതിനെ ചുരുക്കു പിഐഡി (PID) എന്ന് വിളിക്കുന്നു. ലിനക്സ് കെര്‍ണല്‍ അതിന്റെ പ്രാധമിക ക്രമീകരണങ്ങള്‍ ഒക്കെ നടത്തിയ ശേഷം ഇനിറ്റ് (init) എന്ന പ്രോസസ്സിന്റെ സൃഷ്ടിക്കുന്നു. ഈ പ്രോസസ് മാത്രമാണ് ഫോര്‍ക്ക് ഉപയോഗിക്കാതെ സൃഷ്ടിക്കപ്പെടുന്ന ഒരേ ഒരെണ്ണം. ഇനിറ്റ് പ്രോസസ്സിന്റെ പിഐഡി 1 ആയിരിക്കും. തുടക്കത്തില്‍ ആവശ്യമായ ബാക്കിയുള്ള പ്രോസസുകളെ ഒക്കെ സൃഷ്ടിക്കുന്നത് ഇനിറ്റ് ആണ്. അപ്പോള്‍ ഇനിറ്റ് ഒഴികെയുള്ള എല്ലാ പ്രോസസ്സുകള്‍ക്കും  ഒരു പേരന്റ് പ്രോസസ് ഉണ്ടാകും. ഈ പേരന്റ് പ്രോസസിനെ മനസ്സിലാക്കാന്‍ പേരന്റ് പ്രോസസ് ഐഡി - പിപിഐഡി (PPID) ഉപയോഗിക്കുന്നു. ഒരു ചൈല്‍ഡ് പ്രോസസ്സിന്റെ പേരന്റ് പ്രോസസ്സ് പ്രവര്‍ത്തനം നിര്‍ത്തിയാല്‍ ആ ചൈല്‍ഡ് പ്രോസസ്സിനെ ഓര്‍ഫണ്‍ പ്രോസസ്സ് എന്ന് വിളിക്കാം. എല്ലാ ഓര്‍ഫണ്‍ പ്രോസസ്സുകളുടെയും  പേരന്റ് പ്രോസസ്സ് ഇനിറ്റ് ആയിരിക്കും. കെര്‍ണല്‍ എല്ലാ പ്രോസസ്സുകളുടെയും ഒരു പട്ടിക സൂക്ഷിക്കും. ഇതിനെ പ്രോസസ്സ് ടേബിള്‍ എന്ന് വിളിക്കുന്നു. ഇത് എല്ലാ പ്രോസസ്സുകള്‍ക്കും പ്രോസസ്സ് ടേബിളില്‍ ഒരു സ്ഥലം അനുവദിച്ചിരിക്കും. ഇതിനെ ആ പ്രോസസ്സിന്റെ പ്രോസസ്സ് ടേബിള്‍ എന്‍ട്രി എന്ന് വിളിക്കാം. കൂടാതെ ഓരോ പ്രോസസ്സിനും യു-ഏരിയ എന്ന പേരില്‍ അതിനെപ്പറ്റിയുള്ള വിവരങ്ങള്‍ സൂക്ഷിച്ചിരിക്കുന്ന ഒരു സ്ഥലം കൂടിയുണ്ട്. ഒരു പ്രോസസ്സിലെ വിവിധ സെഗ്‌‌മന്റുകളെക്കുറിച്ച് നേരത്തേ പറഞ്ഞിരുന്നല്ലോ. കെര്‍ണലിനും  ഈ സെഗ്മെന്റുകള്‍ ഉണ്ടായിരിക്കും. അവയിലാണ് ഈ വിവരങ്ങള്‍ ശേഖരിക്കപ്പെടുക.

യൂസര്‍ സ്പേസ് - കെര്‍ണല്‍ സ്പേസ്
ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിന്റെ ഹൃദയമായ കെര്‍ണല്‍ ആണ് ഒരു സിസ്റ്റത്തിലെ എല്ലാ പ്രവര്‍ത്തനങ്ങളെയും നിയന്ത്രിക്കുന്നത്. അതില്‍ ഘടിപ്പിച്ചിരിക്കുന്ന ഉപകരണങ്ങളെ പ്രവര്‍ത്തിപ്പിക്കുന്നതും  ഫയലുകളെ കൈകാര്യം ചെയ്യുന്നതും  എല്ലാം  കെര്‍ണല്‍ ആണ്. ഒരു ഫയല്‍ വായിക്കാനോ ഏതെങ്കിലും  ഉപകരണങ്ങളെ ഉപയോഗിക്കാനോ ഒരു പ്രോസസ്സിനും  അവകാശമില്ല. അത് ആവശ്യമായ സന്ദര്‍ഭങ്ങളില്‍ സിസ്റ്റം കോളുകള്‍ വഴി പ്രോസസ്സ് അത് കെര്‍ണലിനോട് ആവശ്യപ്പെടുന്നു. ആ പ്രോസസ്സിന് അതിനുള്ള അനുവാദം നല്‍കാമോ എന്ന് പരിശോധിച്ച ശേഷം കെര്‍ണല്‍ ആവശ്യമായ നടപടികള്‍ എടുക്കുന്നു. കെര്‍ണല്‍ പ്രവര്‍ത്തിക്കുന്ന അവസ്ഥ കൂടുതല്‍ അധികാരങ്ങളുള്ള (privileged) ഒന്നാണ്. ഇതിനെ കെര്‍ണല്‍ മോഡ് എന്ന് വിളിക്കുന്നു. സാധാരണ രീതിയില്‍ ഒരു പ്രോസസ്സ് പ്രവര്‍ത്തിക്കുന്ന അവസ്ഥ യൂസര്‍ മോഡ് എന്നും അറിയപ്പെടുന്നു. യൂസര്‍ മോഡില്‍ ഒരു പ്രോസസ്സിന് അധികാരങ്ങള്‍ വളരെ കുറവാണ്. പ്രോസസ്സ് ഒരു സിസ്റ്റം കോള്‍ ഉപയോഗിക്കുമ്പോള്‍ അത് യൂസര്‍മോഡില്‍ നിന്ന് കെര്‍ണല്‍ മോഡിലേക്ക് മാറുന്നു. കെര്‍ണലുമായി നേരിട്ട് ബന്ധപ്പെട്ടിരിക്കുന്ന വിവരങ്ങള്‍ എല്ലാം കെര്‍ണല്‍ സ്പേസ് എന്ന പദം കൊണ്ടാണ് സൂചിപ്പിക്കുന്നത്. അല്ലാത്തവ യൂസര്‍ സ്പേസും. ഒരു പ്രോഗ്രാമില്‍ ഉപയോഗിച്ചിരിക്കുന്ന ചരങ്ങള്‍ (വേരിയബിളുകള്‍) എല്ലാം  യൂസര്‍ സ്പേസില്‍ ആയിരിക്കും ഉണ്ടാകുന്നത്. പ്രോസസ്സ് ടേബിള്‍, യു-ഏരിയ എന്നിവയെല്ലാം കെര്‍ണല്‍ സ്പേസിലും.

പ്രോസസ്സിന്റെ വിവിധ അവസ്ഥകള്‍ (Process states)
ഒരു പ്രോസസ്സിന്റെ വിവിധ അവസ്ഥകള്‍ താഴെപ്പറയുന്നവയാണ്,
കടപ്പാട്: വിക്കിപീഡിയ
ഹാര്‍ഡ് ഡിസ്കില്‍ നിന്നും  പ്രോഗ്രാമിനെ മെമ്മറിയില്‍ എത്തിച്ചുകഴിഞ്ഞാല്‍ അത് ക്രിയേറ്റഡ് എന്ന അവസ്ഥയിലായിരിക്കും. സൃഷ്ടിക്കപ്പെട്ടു എന്ന അര്‍ഥത്തില്‍. ഒന്നിലധികം  പ്രോസസ്സുകള്‍ പ്രവര്‍ത്തിക്കുന്ന സിസ്റ്റത്തില്‍ സൃഷ്ടിക്കപ്പെട്ട ഉടനെ തന്നെ പ്രോസസ്സിന് പ്രവര്‍ത്തിച്ചു തുടങ്ങാനാകില്ല. ഒരു സമയത്ത് ഒരൊറ്റ പ്രോസസ്സിന് മാത്രമേ പ്രവര്‍ത്തിക്കാന്‍ സാധിക്കുകയുള്ളു എന്നതാണ് ഇതിന് കാരണം. അപ്പോള്‍ ആ പ്രോസസ്സ് കാത്തിരിപ്പ് (വെയിറ്റിങ്ങ്‌‌) അവസ്ഥയിലായിരിക്കും. ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഷെഡ്യൂള്‍ ചെയ്യുന്നതിനനുസരിച്ച് അതിന് പ്രവര്‍ത്തിച്ച് തുടങ്ങാന്‍ സാധിക്കുന്നു. പ്രവര്‍ത്തിച്ചുകൊണ്ടിരിക്കുന്ന അവസ്ഥയാണ് റണ്ണിങ്ങ്. മെയിന്‍ മെമ്മറിയുടെ ലഭ്യതയുടെ അടിസ്ഥാനത്തില്‍ ചിലപ്പോള്‍ പ്രോസസ്സിനെ മെമ്മറിയില്‍ നിന്നും  ഡിസ്കിലേക്ക് സ്വാപ്പ് ചെയ്യാന്‍ സാധ്യതയുണ്ട്. സ്വാപ്പിങ്ങിനെപ്പറ്റി മെമ്മറി മാനേജ്‌‌മെന്റിനെക്കുറിച്ചുള്ള പോസ്റ്റില്‍ വായിക്കാം. കാത്തിരിക്കുന്ന സമയത്ത് മെമ്മറിയില്‍ നിന്ന് ഡിസ്കിലേക്ക് മാറ്റപ്പെട്ട അവസ്ഥയാണ് ഇടതുവശത്ത് താഴെയുള്ളത്. ഇനിയുള്ള അവസ്ഥ ബ്ലോക്ക് ചെയ്യപ്പെട്ട അവസ്ഥയാണ്. ഒരു പ്രോസസ്സിന് പ്രവര്‍ത്തനം തുടരാന്‍ ഏതെങ്കിലും  ഉപകരണത്തില്‍ നിന്നുള്ള സിഗ്നല്‍ ആവശ്യമാണെന്ന് കരുതുക. ഇത് ചിലപ്പോള്‍ ഉപഭോക്താവ് കീബോര്‍ഡില്‍ എന്തെങ്കിലും  അമര്‍ത്താനായിരിക്കാം, ഇന്റര്‍നെറ്റില്‍ നിന്ന് ഒരു പാക്കറ്റ് ലഭിക്കാനായിരിക്കാം. ഇത് പൂര്‍ത്തിയാകുന്നത് വരെ ആ പ്രോസസ്സിന് തുടരാന്‍ സാധിക്കില്ല. ഈ അവസ്ഥയില്‍ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ആ പ്രോസസ്സിനെ ബ്ലോക്ക് ചെയ്‌‌ത് സി പി യു മറ്റൊരു പ്രോസസ്സിനായി വിട്ടു കൊടുക്കുന്നു. ആ അവസ്ഥയില്‍ ചിലപ്പോള്‍ പ്രോസസ്സ് മെമ്മറിയില്‍ നിന്നും  ഡിസ്കിലേക്ക് മാറ്റപ്പെട്ടേക്കാം. ഈ അവസ്ഥയാണ് വലതുവശത്ത് താഴെക്കാണുന്നത്.

ഫോര്‍ക്ക് സിസ്റ്റംകോളിന്റെ പ്രവര്‍ത്തനത്തെപ്പറ്റി വിശദമായി അടുത്ത പോസ്റ്റില്‍.

3 comments:

  1. നന്നായിരിക്കുന്നു സുബിൻ.

    //വിവിധ സെഗ്‌‌മന്റുകളെക്കുറിച്ച് നേരത്തേ പറഞ്ഞിരുന്നല്ലോ. കെര്‍ണലിനും ഈ സെഗ്മെന്റുകള്‍ ഉണ്ടായിരിക്കും. അവയിലാണ് ഈ വിവരങ്ങള്‍ ശേഖരിക്കപ്പെടുക.//

    കെർണലിന്റെ ഏതു സെഗ്മെന്റിലാണെന്ന് ഇവിടെത്തന്നെ പറഞ്ഞാൽ പൂർണത വന്നേനെ

    ReplyDelete
  2. @സുനില്‍,
    അത് കൃത്യമായി സ്റ്റാക്കിലാണോ ഹീപ്പില്‍ ആണോ എന്നെനിക്കുറപ്പില്ല. അതുകൊണ്ട് അങ്ങനെ പരാമര്‍ശിച്ചതാണ്.

    @ശിഖണ്ഡി,
    സ്വാഗതം :)

    ReplyDelete