Friday, July 26, 2013

ലിനക്സ് കെർണൽ: സോഴ്സ് കോഡ്

ഫിൻലൻഡുകാരനായ ലിനസ് ടൊർവാൾഡ്സ് ഹെൽസിങ്കി യൂണിവേഴ്സിറ്റിയിൽ വിദ്യാർത്ഥി ആയിരിക്കുന്ന സമയത്ത് തന്റെ ഇരുപത്തി ഒന്നാം വയസ്സിൽ ഒരു ഹോബി ആയി വികസിപ്പിച്ച് തുടങ്ങിയ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം കെർണൽ ആണ് ലിനക്സ് കെർണൽ. അക്കാലത്ത് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളെപ്പറ്റി പഠിക്കുന്ന വിദ്യാർത്ഥികൾക്കിടയിലും യൂണിവേഴ്സിറ്റികളിലും വളരെ പ്രചാരമുണ്ടായിരുന്ന മറ്റൊരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ആയിരുന്നു മിനിക്സ്. ആൻഡ്ര്യൂ എസ് ടാനൻബോം ആയിരുന്നു ഈ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിന്റെ ശിൽപ്പി. മൈക്രോ കെർണൽ രീതിയിലുള്ള ഒരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റമായിരുന്നു മിനിക്സ്. മിനിക്സിന്റെ പല രീതികളിലും അതൃപ്തനായിരുന്ന ടൊർവാൾഡ്സ് സ്വന്തമായി ഒരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം എഴുതാൻ ആരംഭിക്കുകയായിരുന്നു. 1991 ഇൽ ആണ് ലിനക്സ് കെർണലിന്റെ ആദ്യ പതിപ്പ് പുറത്തിറങ്ങിയത്. comp.os.minix എന്ന ന്യൂസ് ഗ്രൂപ്പിൽ ആയിരുന്നു ലിനസ് ഇതിന്റെ പ്രഖ്യാപനം നടത്തിയത്. പോസിക്സ് മാനദണ്ഡങ്ങൾ അനുസരിക്കുന്നതും ഇന്റൽ എക്സ് 86 പ്രോസസ്സറുകളിൽ മാത്രം പ്രവർത്തിക്കുന്നതും ആയിരുന്നു ആദ്യത്തെ ലിനക്സ് കെർണൽ.

ലിനക്സ് കെർണലിന്റെ രൂപകൽപ്പനയെയും പോർട്ടബിലിറ്റിയെയും സംബന്ധിച്ച് ലിനസ് ടൊർവാൾഡ്സും ആൻഡ്ര്യൂ എസ് ടാനൻബോമും തമ്മിൽ ഒരു സംവാദം നടന്നിരുന്നു. സോഫ്റ്റ്റ്റ്‌വെയർ മേഖലയിൽ പ്രവർത്തിക്കുന്നവർ ഇതിനെ ചരിത്രപരമായ ഒരു സംവാദമെന്ന് വിശേഷിപ്പിക്കാറുണ്ട്. ഒരു കമ്പ്യൂട്ടർ പ്രോഗ്രാമിന് തീരെ മാറ്റങ്ങളില്ലാതെയോ വളരെ ചെറിയ മാറ്റങ്ങളോട് കൂടിയോ പല കമ്പ്യൂട്ടറുകളിൽ പ്രവർത്തിക്കാൻ സാധിക്കുന്നതിനെ ആണ് ആ പ്രോഗ്രാമിന്റെ പോർട്ടബിലിറ്റി എന്ന് പറയുന്നത്. അസംബ്ലി ഭാഷയിൽ എഴുതപ്പെട്ട പ്രോഗ്രാമുകൾ ഒട്ടും പോർട്ടബിൽ ആയിരിക്കില്ല. ഓരോ പ്രോസസ്സറുകൾക്കും അതിന്റെ സ്വന്തമായ അസംബ്ലി ഭാഷകൾ ഉണ്ട് എന്നതിനാലാണിത്. സി, സി++, ജാവ തുടങ്ങിയ ഭാഷകളിൽ എഴുതപ്പെടുന്ന പ്രോഗ്രാമുകൾ മിക്കവാറും പോർട്ടബിൾ ആണ്. ഓരോ സി പ്രോഗ്രാമും അത് പ്രവർത്തിക്കേണ്ട പ്രോസസ്സറിന്റെ അസംബ്ലി ഭാഷയിലേക്ക് ആദ്യം തർജ്ജിമ ചെയ്യപ്പെടുന്നു. ആ സംവാദം നടക്കുന്ന സമയത്ത് എന്തൊക്കെ പോരായ്മകൾ ആയിരുന്നോ ലിനക്സ് കെർണലിൽ ആരോപിക്കപ്പെട്ടത് അവയൊക്കെ ഇന്ന് പരിഹരിക്കപ്പെട്ടിട്ടുണ്ട്. ഇന്നത്തെ ലിനക്സ് കെർണൽ നിരവധി പ്രോസസ്സറുകളിൽ പ്രവർത്തിക്കാൻ കഴിവുള്ളതാണ്. ആം, സ്പാർക്ക്, പവർ പിസി, എക്സ്86, ബ്ലാക്ക്ഫിൻ, ആൽഫ, മിപ്സ്, എസ് എച്ച് തുടങ്ങി നിരവധി പ്രോസസ്സർ ആർക്കിട്ടെക്ചറുകളിൽ ലിനക്സിന് പ്രവർത്തിക്കാൻ സാധിക്കുന്നു. ഇതുകൊണ്ട് തന്നെ വ്യാവസായികാടിസ്ഥാനത്തിൽ ലിനക്സിന് വലിയ സ്വീകാര്യത ലഭിച്ചു. നിരവധി വൻകിട കമ്പനികളും ആളുകളും ലിനക്സിന്റെ വികസനത്തിൽ സഹായിക്കുന്നു.

ലോകമെമ്പാടുമുള്ള ആയിരക്കണക്കിനു പ്രോഗ്രാമർമാർ ലിനക്സ് കെർണലിനു സംഭാവനകൾ നൽകുന്നുണ്ട്. പൂർണ്ണമായും ഓപ്പൺ സോഴ്സ് ആണ് ലിനക്സ് കെർണൽ. ആർക്ക് വേണമെങ്കിലും ഇതിന്റെ സോഴ്സ് കോഡ് കാണാനും പകർത്താനും മാറ്റങ്ങൾ വരുത്തി ഉപയോഗിക്കാനും സാധിക്കും. ജിഎൻയു ജെനറൽ പബ്ലിക്ക് ലൈസൻസ് 2 അനുമതി പ്രകാരമാണ് ലിനക്സ് കെർണൽ വിതരണം ചെയ്യുന്നത്. ഇതിൽ നിന്ന് മാറ്റങ്ങൾ വരുത്തി ഉണ്ടാക്കുന്ന കെർണലുകൾക്കും ഇതിൽ വരുത്തുന്ന മാറ്റങ്ങൾക്കും ഇതേ അനുമതി ബാധകമായിരിക്കും.

ലിനക്സ് കെർണൽ https://www.kernel.org/pub/, https://www.kernel.org യിൽ നിന്ന് കമ്പ്രസ്സ്ഡ് ആർക്കൈവ് ആയി ഡൗൺലോഡ് ചെയ്യാൻ സാധിക്കും. ഡിസ്ട്രിബ്യൂട്ടഡ് ഡെവലപ്പ്‌മെന്റ് രീതി ആണ് ലിനക്സ് കെർണൽ വികസിപ്പിക്കാൻ ഉപയോഗിക്കുന്നത്. ഇതിനെ എളുപ്പത്തിലാക്കാൻ ലിനസ് ടൊർവാൾഡ്സ് തന്നെ രൂപകൽപ്പന ചെയ്ത ഗിറ്റ് (git) എന്ന വേർഷൻ കണ്ട്രോൾ സിസ്റ്റം ഉപയോഗിക്കുന്നു. ഇത് ഉപയോഗിക്കുന്നത് വഴി കെർണലിൽ വരുത്തിയ മാറ്റങ്ങൾ പിൻതുടരാനും ഈ മാറ്റങ്ങൾ പ്രധാന കെർണലിലേക്ക് സമർപ്പിക്കാനും വിവിധ പതിപ്പുകളെ ഒരേ സമയം കൈകാര്യം ചെയ്യാനും എല്ലാം എളുപ്പത്തിൽ സാധിക്കും. ഉദാഹരണത്തിന് ലിനക്സ് കെർണലിലെ പ്രധാന ഡെവലപ്പർമാർ എല്ലാം അവർ വികസിപ്പിക്കുന്ന ഭാഗങ്ങളിൽ മാത്രം മാറ്റങ്ങൾ വരുത്തുന്നവർ ആണ്. ഓരോരുത്തരും അവരുടെ ശാഖകൾ രൂപീകരിച്ച് ആ ശാഖകളിൽ മാത്രം പ്രവർത്തിക്കുന്നു. ആവശ്യമായ മാറ്റങ്ങൾ വരുത്തിക്കഴിയുമ്പോൾ പ്രധാന ശാഖയിലേക്ക് ഈ മാറ്റങ്ങൾ ചേർക്കുന്നു. ലിനക്സ് കെർണലിൽ പതിനായിരക്കണക്കിന് ഫയലുകൾ ഉണ്ട്. ഓരോരുത്തരും മാറ്റങ്ങൾ വരുത്തുന്ന ഫയലുകളിലെ മാറ്റങ്ങൾ പ്രധാന ശാഖയിൽ വരുത്തുന്നത് സാധാരണഗതിയിൽ വിഷമമേറിയ പ്രവർത്തി ആണ്. ഈ മാറ്റങ്ങൾ മറ്റേതെങ്കിലും ഭാഗത്തിന്റെ പ്രവർത്തനത്തെ ബാധിക്കുമെങ്കിൽ അവ നീക്കം ചെയ്യേണ്ടി വരും. ഈ കാര്യങ്ങളെല്ലാം ഗിറ്റ് ഉപയോഗിച്ച് എളുപ്പത്തിൽ ചെയ്യാൻ സാധിക്കുന്നു. കമ്പ്യൂട്ടറിൽ ഗിറ്റ് പ്രോഗ്രാം ഇൻസ്റ്റാൾ ചെയതാൽ https://git.kernel.org/cgit/ യിൽ നിന്നും ഗിറ്റ് ഉപയോഗിച്ചും ലിനക്സ് കെർണലിന്റെ ഒരു പതിപ്പ് ശേഖരിക്കാൻ സാധിക്കും.

ലിനക്സ് കെർണലിനെ മൊത്തത്തിൽ രണ്ട് ഭാഗമായി തരം തിരിക്കാം. 
1. ആർക്കിട്ടെക്ചറുകളുമായി ബന്ധപ്പെട്ട ഭാഗം - ഇത് കെർണലിലെ പോർട്ടബിൾ അല്ലാത്ത ഭാഗമാണ്. ഓരോ ആർക്കിട്ടെക്ചറുകൾക്കും ഈ ഭാഗത്തിൽ പ്രത്യേകമായ പ്രോഗ്രാമുകൾ/ഫയലുകൾ ഉണ്ടായിരിക്കും.
2. എല്ലാ ആർക്കിട്ടെക്ചറുകൾക്കും പൊതുവായ ഭാഗം - ഈ ഭാഗം പോർട്ടബിൾ ആയ ഭാഗമാണ്. ഇത് എല്ലാ ആർക്കിട്ടെക്ചറുകൾക്കും പൊതുവായുള്ളത് ആയിരിക്കും. ആർക്കിട്ടെക്ചറുകൾക്കനുസരിച്ച് ഈ ഭാഗങ്ങൾക്ക് മാറ്റമുണ്ടാകില്ല.

ലിനക്സ് കെർണൽ സോഴ്സിലെ വിവിധ ഡയറക്റ്ററികളെക്കുറിച്ച് അടുത്ത ഭാഗത്തിൽ.

Monday, July 15, 2013

ഫീഡ്ബാക്ക് ടൈം, ഭാവി പരിപാടികൾ

കഴിഞ്ഞ പോസ്റ്റുകളിൽ ഒക്കെ എങ്ങനെ ഒരു കാര്യം ചെയ്യാൻ എന്നതിൽ നിന്ന് വ്യത്യസ്തമായി ലിനക്സ് സിസ്റ്റങ്ങളുടെ ആന്തരിക പ്രവർത്തന രീതികൾ വിശദീകരിക്കാനാണ് ഞാൻ ശ്രമിച്ചത്. ഒരു പ്രത്യേക എറർ എങ്ങനെ പരിഹരിക്കാം എന്ന് വിശദീകരിക്കുന്നതിനു പകരം ആ എററിലേക്ക് നയിക്കുന്ന കാര്യങ്ങൾ സ്വയം ചിന്തിച്ച് മനസ്സിലാക്കാൻ ആളുകളെ പ്രേരിപ്പിക്കാൻ ആണ് ഞാൻ ഇഷ്ടപ്പെടുന്നത്. ഇത് എത്രത്തോളം ആളുകൾക്ക് സഹായകരമായിട്ടുണ്ട് എന്ന് എനിക്ക് അറിയില്ല. പഴയ പോസ്റ്റുകളെക്കുറിച്ചും ഇനി അറിയാൻ താല്പര്യമുള്ള വിഷയങ്ങളെക്കുറിച്ചും എഴുത്തിന്റെയും വിഷയങ്ങൾ അവതരിപ്പിക്കുന്നതിന്റെയും ശൈലിയെക്കുറിച്ചും വായനക്കാരുടെ അഭിപ്രായങ്ങൾ അറിയാൻ താല്പര്യമുണ്ട്. ഗൂഗിൾ പ്ലസ്സിലോ, മെയിലിലോ പോസ്റ്റിൽ കമന്റായോ അഭിപ്രായങ്ങൾ അറിയിക്കൂ. ഏതെങ്കിലും പഴയ പോസ്റ്റുകളിൽ വിവരങ്ങൾ കൂട്ടിച്ചേർക്കാനോ തിരുത്താനോ കൂടുതൽ വിശദീകരിക്കാനോ ചെയ്യേണ്ടതുണ്ടെങ്കിൽ അതും അറിയിക്കുന്നത് നന്നായിരിക്കും.

പഴയ പോസ്റ്റുകളിൽ ഒരു ലിനക്സ് സിസ്റ്റത്തിലെ ഘടകങ്ങൾ എന്തൊക്കെ ആണെന്നും ഓരോന്നിന്റെയും ആവശ്യമെന്താണെന്നും ഞാൻ വിവരിച്ചിരുന്നു. ഈ ഘടകങ്ങൾ എല്ലാം കൂട്ടിച്ചേർത്ത് എങ്ങനെ പ്രവർത്തന സജ്ജമായ ഒരു ലിനക്സ് സിസ്റ്റം തയ്യാറാക്കാം എന്നാണ് ഇനി വരുന്ന ഏതാനും പോസ്റ്റുകളിൽ ഞാൻ വിവരിക്കാൻ പോകുന്നത്. പരീക്ഷണത്തിന് പ്രത്യേകമായ ഒരു സിസ്റ്റം ആവശ്യമില്ലാതെ ക്യു-എമു (qemu) ഇമുലേറ്റർ ഉപയോഗിച്ച് ഒരു ആം അധിഷ്ഠിത സിസ്റ്റം തയ്യാറാക്കുന്ന വിധം പരീക്ഷിക്കാം എന്ന് കരുതുന്നു. ഇതിനോടൊപ്പം തന്നെ പോർട്ടിങ്ങ്, ക്രോസ്സ് കമ്പൈലിങ്ങ്, ഇമുലേഷൻ, വിർച്ച്വലൈസേഷൻ എന്നിവയെക്കുറിച്ചുള്ള വിശദീകരണങ്ങളും ചേർക്കുന്നതായിരിക്കും.

ഇന്റർ‌ പ്രോസസ്സ് കമ്യൂണിക്കേഷൻ, നെറ്റ്‌വർക്കിങ്ങ്, സോക്കറ്റുകൾ തുടങ്ങിയ ഭാഗത്ത് ചില വിഷയങ്ങൾ വിട്ടുപോയിട്ടുണ്ട്. ഇടക്കാലത്ത് ജോലിത്തിരക്ക്, വിവാഹം തുടങ്ങിയവകൊണ്ട് നേരിട്ട സമയക്കുറവ് പോസ്റ്റുകളിലെ വിശദീകരണം കുറക്കാനും കാരണമായി. സിസ്റ്റം പ്രോഗ്രാമിങ്ങ് ഭാഗങ്ങളിൽ താല്പര്യമില്ലാത്ത, തന്റെ ലിനക്സ് അധിഷ്ഠിത സിസ്റ്റം എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് അറിയാൻ താല്പര്യമുള്ള ഒരാൾ അറിഞ്ഞിരിക്കേണ്ട കാര്യങ്ങൾ പഴയ പോസ്റ്റുകളിൽ ഉൾപ്പെടുത്താൻ സാധിച്ചു എന്ന് ഞാൻ കരുതുന്നു. ഇത് എത്രത്തോളം സഹായകമായിരുന്നു, മനസ്സിലാക്കാൻ എളുപ്പമായിരുന്നോ, ഇതിന്റെ സഹായത്തോടെ എന്തെങ്കിലും പുതിയ കാര്യങ്ങൾ മനസ്സിലാക്കാൻ സാധിച്ചോ എന്നൊക്കെ അറിയാൻ ഒരു താല്പര്യം.. അഭിപ്രായങ്ങൾ അറിയിക്കുമല്ലോ..

ഗൂഗിൾ പ്ലസ് പ്രൊഫൈൽ: https://plus.google.com/u/0/106314097353629534444/posts
ഇ-മെയിൽ വിലാസം: ptsubin അറ്റ് gmail ഡോട്ട് com

ലിനക്സ് ഡിസ്ട്രിബ്യൂഷൻ

ലിനക്സ് അധിഷ്ഠിത സിസ്റ്റങ്ങളെ പ്രചരിപ്പിക്കുന്നതിനും ജനകീയമാക്കുന്നതിനും ലിനക്സ് ഡിസ്ട്രിബ്യൂഷനുകൾക്ക് വലിയ പങ്കുണ്ട്. ലിനക്സ് എന്നത് ഒരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം കെ‌‌ർണൽ മാത്രമാണ്. ഒരു കെർണൽ തനിച്ച് തികച്ചും ഉപയോഗശൂന്യമാണ്. കെർണലിന്റെ പ്രധാന ധർമ്മം പ്രോഗ്രാമുകളെ പ്രവർത്തിപ്പിക്കാനും അവക്ക് ഉപകരണങ്ങളെ ഉപയോഗിക്കാനും ഉള്ള വിവിധ സേവനങ്ങൾ ലഭ്യമാക്കുക എന്നതാണ്. ആരും ഉപയോഗിക്കുന്നില്ലെങ്കിൽ പണിയായുധങ്ങൾ ഉപകാരപ്രദമായ ഒന്നും തന്നെ സ്വയം ചെയ്യില്ലല്ലോ. ഇതുപോലെ തന്നെ ആണ് കെർണൽ മാത്രമായാൽ ഉള്ള അവസ്ഥ.

ലിനക്സ് ഒരു പോസിക്സ് അനുകൂല ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ആയതിനാൽ പോസിക്സ് മാനദണ്ഡങ്ങൾ ഉപയോഗിക്കുന്ന പ്രോഗ്രാമുകൾ ഒക്കെ അതിൽ പ്രവർത്തിക്കുന്നു. ആദ്യകാലത്ത് ഗ്നു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിനു വേണ്ടി എഴുതപ്പെട്ട പ്രോഗ്രാമുകൾ ആയിരുന്നു ലിനക്സ് കെർണലിനൊപ്പം ഉപയോഗിക്കപ്പെട്ടിരുന്നത്. അങ്ങനെ ഗ്നു/ലിനക്സ് എന്ന പ്രയോഗം നിലവിൽ വന്നു. ഇന്നും ലിനക്സിൽ ഉപയോഗിക്കപ്പെടുന്ന മിക്ക പ്രോഗ്രാമുകളും ഗ്നു പ്രോജക്റ്റിൽ നിന്നുള്ളവയാണ്. ഗ്നു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം പൂർണ്ണമായ രീതിയിൽ പ്രവർത്തന സജ്ജമായിട്ടില്ലെങ്കിലും ലിനക്സ് കെർണലിനൊപ്പം ഗ്നു അപ്ലിക്കേഷനുകൾ വ്യാപകമായി ഉപയോഗിച്ച് വരുന്നു. ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസില്ലാതെ പൂർണ്ണമായി ഒരു കമ്പ്യൂട്ടർ ഉപയോഗയോഗ്യമാക്കാൻ ലിനക്സ് കെർണൽ, ഗ്നു കോർ യൂട്ടിലിറ്റീസ്, ലിനക്സ് യൂട്ടിലിറ്റീസ്, ബാഷ് അല്ലെങ്കിൽ സമാനമായ ഒരു ഷെൽ പ്രോഗ്രാം എന്നിവ മതിയാകും. എംബെഡ്ഡഡ് ഉപകരണങ്ങൾക്കായി ബിസിബോക്സ് എന്ന പേരിൽ ഷെൽ അടക്കമുള്ള പ്രോഗ്രാമുകളുടെ ഒരു പാക്കേജും ലഭ്യമാണ്. ലിനക്സ് കെർണലും ബിസിബോക്സും ഉണ്ടെങ്കിൽ ഏറ്റവും ചുരുങ്ങിയ രീതിയിലുള്ള ഒരു ലിനക്സ് സിസ്റ്റം ഉണ്ടാക്കാൻ സാധിക്കും.

ഒരു ലിനക്സ് ഡിസ്ട്രിബ്യൂഷൻ എന്നത് അല്പ്പം കൂടി വിശാലമായ ഒരു ആശയമാണ്. ലിനക്സ് കെർണൽ അടിസ്ഥാനമാക്കിയ ഒരു സമ്പൂർണ്ണ കമ്പ്യൂട്ടർ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ആയിരിക്കും ഓരോ ലിനക്സ് ഡിസ്ട്രിബ്യൂഷനും. ഒരു ലിനക്സ് ഡിസ്ട്രിബ്യൂഷനിൽ ഒഴിച്ച്കൂടാൻ കഴിയാത്ത ഭാഗങ്ങൾ ഏതൊക്കെ ആണെന്ന് നോക്കാം.
1. ലിനക്സ് കെർണൽ - ലിനക്സ് അധിഷ്ഠിത സിസ്റ്റം ആയതിനാൽ ഇത് ഇല്ല്ലാതെ സാധിക്കില്ല.
2. ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റ് - ഒരു ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസും ടെക്സ്റ്റ് എഡിറ്റർ, വെബ്‌‌ ബ്രൗസർ, മീഡീയ പ്ലെയർ, ഫയൽ മാനേജർ തുടങ്ങിയ അവശ്യ പ്രോഗ്രാമുകളുടെ കൂട്ടവും.
3. പാക്കേജ് മാനേജർ - പുതിയ പ്രോഗ്രാമുകൾ സജ്ജീകരിക്കാനും സജ്ജീകരിക്കപ്പെട്ടവ നീക്കം ചെയ്യാനും പുതുക്കാനും സൗകര്യമൊരുക്കുന്ന സംവിധാനം.
4. ഇൻസ്റ്റാളർ - പുതിയ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം കമ്പ്യൂട്ടറിൽ സജ്ജമാക്കാൻ സഹായിക്കുന്ന പ്രോഗ്രാം. ചില ഡിസ്ട്രിബ്യൂഷനുകൾ സജ്ജമാക്കൽ ആവശ്യമില്ലാതെ ഒരു യു‌‌എസ്ബി ഡ്രൈവിൽ നിന്നോ സിഡിയിൽ നിന്നോ നേരിട്ട് ഉപയോഗിക്കാൻ സാധ്യമായ ലൈവ്‌‌ സിസ്റ്റം സംവിധാനവും ലഭ്യമാക്കുന്നുണ്ട്.

ഇവക്കു പുറമേ വിവിധ ഡിസ്ട്രിബ്യൂഷനുകൾ കമ്പ്യൂട്ടറിലെ ഉപകരണങ്ങളുടെ ക്രമീകരണങ്ങളും മറ്റും എളുപ്പമാക്കുന്നതിനായി വിവിധ സൗകര്യങ്ങളും ലഭ്യമാക്കുന്നു. ലിനക്സ് കെർണൽ അധിഷ്ഠിതമായ സിസ്റ്റങ്ങളുടെ സജ്ജീകരണവും ഉപയോഗവും എളുപ്പമാക്കുക എന്നതാണ് ഡിസ്ട്രിബ്യൂഷനുകളുടെ പ്രധാന ലക്ഷ്യം. ലിനക്സ് കെ‌‌ർണലും പതിനായിരത്തിൽ പരം പ്രോഗ്രാമുകളും ഏത് രീതിയിൽ വേണമെങ്കിലും മാറ്റങ്ങൾ വരുത്താനുള്ള അനുവാദത്തോടെ സൗജന്യമായി ലഭ്യമായിരിക്കുന്നത് നിരവധി ഡിസ്ട്രിബ്യൂഷനുകൾ പിറവിയെടുക്കുന്നതിലേക്ക് നയിച്ചിട്ടുണ്ട്. ഇന്ന് ലഭ്യമായ മിക്ക ഡിസ്ട്രിബ്യൂഷനുകളും അവ ഉരുത്തിരിഞ്ഞ് മാതൃ ഡിസ്ട്രിബ്യൂഷനുകളും വിവരിക്കുന്ന ഒരു ചിത്രം ഇവിടെ ലഭ്യമാണ്.

വിവിധ മേഖലകളിൽ പ്രവർത്തിക്കുന്ന ആളുകൾക്ക് അനുയോജ്യമായ രീതിയിൽ വിവിധ പ്രവർത്തനങ്ങൾക്ക് യോജിക്കുന്ന അനവധി ലിനക്സ് ഡിസ്ട്രിബ്യൂഷനുകൾ ഇന്ന് ലഭ്യമാണ്. ഇവയുടെ ഒരു പട്ടികയും ചുരുങ്ങിയ വിവരണവും ഇവിടെ ലഭ്യമാണ്.

ബിസിബോക്സും ലിനക്സ് കെർണലും ഉപയോഗിച്ച് ഒരു കൊച്ചു ലിനക്സ് സിസ്റ്റം തയ്യാറാക്കുന്ന രീതി അടുത്ത ഭാഗത്തിൽ.

Sunday, July 14, 2013

ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ്

ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകൾ കമ്പ്യൂട്ടറുകളുടെ ഉപയോഗത്തെ എളുപ്പമാക്കുന്നതിലും ജനകീയമാക്കുന്നതിലും വളരെ വലിയ പങ്കാണ് വഹിച്ചത്. ഷെല്ലിൽ കമാന്റുകൾ ഉപയോഗിച്ച് കമ്പ്യൂട്ടറുകളെ പ്രവർത്തിപ്പിക്കുന്നതിനു പകരം മൗസും കീബോർഡും മറ്റും ഉപയോഗിച്ച് മെനു, ഐക്കൺ എന്നിവ വഴി കൂടുതൽ എളുപ്പത്തിൽ കമ്പ്യൂട്ടർ പ്രവർത്തിപ്പിക്കാൻ സാധിച്ചതിലൂടെ കമാന്റുകൾ ഓർത്ത് വയ്ക്കേണ്ട ആവശ്യം ഇല്ലാതായി. സിറോക്സ് കമ്പനി ആണ് ആദ്യത്തെ ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ് അവതരിപ്പിച്ചത്. യൂണിക്സ് സിസ്റ്റങ്ങളിൽ ആദ്യമായി ഉപയോഗിച്ച ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ് സ്റ്റാൻഫോർഡ് യൂണിവേഴ്സിറ്റിയിൽ വികസിപ്പിക്കപ്പെട്ട W Window System ആയിരുന്നു. ഇതിൽ നിന്നും പ്രചോദനമുൾക്കൊണ്ട് എംഐറ്റി യിൽ വച്ച് X Windows System വികസിപ്പിക്കപ്പെട്ടു. എക്സ് വിൻഡോസ് സിസ്റ്റത്തെ ഒരു ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ് എന്ന് വിളിക്കാൻ സാധിക്കില്ല. ഇത് ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകൾ നിർമ്മിക്കാനാവശ്യമായ അടിസ്ഥാന ഘടകങ്ങളെ ലഭ്യമാക്കുന്ന ഒരു പ്രോഗ്രാമും പ്രോഗ്രാമുകളും എക്സ് സെർവറും തമ്മിലുള്ള ആശയ വിനിമയ രീതി നിർവ്വചിക്കുന്ന ഒരു പ്രോട്ടോക്കോളും ഉൾപ്പെട്ടതാണ്. പ്രോഗ്രാമുകൾക്ക് ജാലകങ്ങൾ ഉണ്ടാക്കാനും അവ സ്ക്രീനിൽ നീക്കാനും, മൗസ് കീബോർഡ് തുടങ്ങിയവ ഉപയോഗിച്ച് അതിനെ നിയന്ത്രികാനും ഉള്ള സൗകര്യങ്ങൾ എക്സ് ഒരുക്കിത്തരുന്നു. പരമ്പരാഗത യൂണിക്സ് സിസ്റ്റങ്ങളുടെ ഉപയോഗ രീതി പരിഗണിച്ച് നെറ്റ്‌‌വർക്ക് വഴി ബന്ധിപ്പിച്ചിരിക്കുന്ന ഗ്രാഫിക്കൽ ടെർമിനലുകളിൽ ഉപയോഗിക്കാൻ അനുയോജ്യമായ രീതിയിൽ ആണ് എക്സ് വികസിപ്പിക്കപ്പെട്ടത്. ഇത് ഗ്രാഫിക്കൽ ഹാർഡ്‌‌വെയറുകളുടെ വിവരങ്ങൾ പ്രോഗ്രാമ്മറിൽ നിന്നും ഉപയോക്താവിൽ നിന്നും മറച്ചുവയ്ക്കുന്ന ഒരു പാളി പോലെ പ്രവർത്തിക്കുന്നു. (Hardware Abstraction Layer). അതിനാൽ തന്നെ ഇതുപയോഗിക്കുന്ന പ്രോഗ്രാമുകൾക്ക് അത് പ്രവർത്തിക്കുന്ന കമ്പ്യൂട്ടറിലെ ഗ്രാഫിക്കൽ ഹാർഡ്‌‌വെയർ ഏതായാലും ഒരേപോലെ പ്രവർത്തിക്കാൻ സാധിക്കും. അല്ലായിരുന്നെങ്കിൽ ഓരോ പ്രോഗ്രാമിനും ഓരോ ഗ്രാഫിക്സ് കാർഡിലും പ്രവർത്തിക്കാനുള്ള പതിപ്പുകൾ വെവ്വേറെ തയ്യാറാക്കണ്ട വരുമായിരുന്നു. എക്സ് വിൻഡോസ് സിസ്റ്റത്തിന്റെ ഘടന വിശദീകരിക്കുന്ന ചിത്രം നോക്കൂ,
കടപ്പാട്: വിക്കിപീഡിയ
ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസിനാവശ്യമായ ഘടകങ്ങൾ ലഭ്യമാക്കുക എന്നതിനപ്പുറം മെനു, ബട്ടണുകൾ, വിൻഡോകൾ ഒക്കെ എങ്ങനെ ദൃശ്യമാകണമെന്നതിനെപ്പറ്റി എക്സ് ഒരു നിർബന്ധവും വയ്ക്കുന്നില്ല. ഇത് സാധാരണയായി ചെയ്യുന്നത് എക്സ് ഉപയോഗിക്കുന്ന പ്രോഗ്രാമുകൾ ആണ്. അതിനാൽ തന്നെ എക്സ് ഉപയോഗിക്കുന്ന ജിയുഐ കൾ എല്ലാം ഒരുപോലെ ആയിരിക്കില്ല. ഇന്നത്തെ ലിനക്സ് അധിഷ്ഠിത കമ്പ്യൂട്ടറുകളിൽ ഇത് ചെയ്യുന്നത് ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റിലെ വിൻഡോ മാനേജർ ആണ്. ഒരു ഡെക്സ്ടോപ്പ് എൻവയോൺമെന്റ് എന്നത് ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ്, ഐക്കണുകൾ, വിവിധ പ്രോഗ്രാമുകൾ എന്നിവയുടെ ഒരു കൂട്ടമാണ്. ഗ്നോം‌‌, കെഡി‌‌ഇ, Xfce, LXDE എന്നിവയൊക്കെ ഇന്ന് യൂണിക്സ് രീതിയിലുള്ള ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളിൽ വളരെയധികം ഉപയോഗിക്കപ്പെടുന്ന ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റുകൾ ആണ്. ഇവ ലിനക്സിൽ മാത്രമല്ല പ്രവർത്തിക്കുന്നത്. ഒരു ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റിൽ കമ്പ്യൂട്ടർ പ്രവർത്തിപ്പിക്കാൻ ആവശ്യമായ പ്രോഗ്രാമുകളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. കുറഞ്ഞത് ഒരു വെബ്‌‌ ബ്രൗസർ, ഫയൽ മാനേജർ, മീഡിയ പ്ലെയർ, ടെർമിനൽ ഇമുലേറ്റർ, ടെക്സ്റ്റ് എഡിയർ എന്നിവ ഇതിൽ ഉൾപ്പെട്ടിരിക്കും. ഇതിനു പുറമെ വിവിധ ഡെസ്ക്ടോപ്പുകൾ ക്രമീകരിക്കാനും ഉപയോഗിക്കാനും ആവശ്യമായ ക്രമീകരണങ്ങൾ, വിവിധ ഉപകരണങ്ങൾ ക്രമീകരിക്കാനുള്ള സംവിധാനങ്ങൾ, മൗസ് പോയിന്ററുകൾ, തീമുകൾ, ഐക്കണുകൾ, വാൾ പേപ്പറുകൾ ഒക്കെ ഇതിൽ ഉൾപ്പെടുന്നു. വിവിധ പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കാനും അവയെ നിയന്ത്രിക്കാനും ഉള്ള സൗകര്യം ആണ് ഇവയിലെ അടിസ്ഥാന ഘടകം. പ്രോഗ്രാമുകളുടെ ഐക്കണുകളിൽ മൗസ് ഉപയോഗിച്ച് അമർത്തുമ്പോൾ അവയെ പ്രവർത്തിപ്പിക്കുകയും ക്ലോസ് ബട്ടൺ അമർത്തുമ്പോൾ അവയുടെ പ്രവർത്തനം അവസാനിപ്പിക്കുകയും ഒക്കെ ഇതിന്റെ കടമകളിൽ ഉൾപ്പെടുന്നു. ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകളുടെ വരവോടെ കമാന്റ് ലൈൻ ഇന്റർഫേസുകളുടെ കാലം അവസാനിച്ചില്ല. വിദഗ്ധരായ ഉപയോക്താക്കൾക്ക് പലപ്പോളും ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകളിലേതിനെക്കാൾ എളുപ്പത്തിലും സൗകര്യപ്രദമായും കമാൻഡ് ലൈനിൽ ചില കാര്യങ്ങൾ ചെയ്യാൻ സാധിക്കും. അതിനാൽ തന്നെ ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസിനുള്ളിൽ കമാന്റ് ലൈൻ ഇന്റർഫേസുകൾ ലഭ്യമാക്കുന്ന ടെർമിനൽ ഇമുലേറ്ററുകൾ ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റുകളിലെ അവിഭാജ്യ ഘടകം തന്നെയാണ്.

ഓരോ പ്രോഗ്രാമിനും അതിന്റേതായ വിൻഡോ എന്ന രീതി പിന്തുണക്കുന്ന എല്ലാ ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകളിലും ഒരു വിൻഡോ മാനേജർ ഉണ്ടായിരിക്കും. സ്ക്രീനിൽ വിൻഡോസിന്റെ സ്ഥാനം മാറ്റാനും വിവിധ വിൻഡോകൾ മാറിമാറി ഉപയോഗിക്കാനും ഉള്ള സംവിധാനം നൽകുക, വിൻഡോ സ്ക്രീനിൽ എങ്ങനെ ദൃശ്യമാകുന്നു എന്ന് നിർവ്വചിക്കുക (അവയുടെ കെട്ടും മട്ടും ഒക്കെ ഉൾപ്പെടെ) എന്നിവയാണ് ഇവയുറ്റെ ധർമ്മങ്ങൾ. വിൻഡോ മാനേജറുകൾ വിവിധ തരത്തിൽ ഉണ്ട്. കോമ്പോസിറ്റിങ്ങ് വിൻഡോ മാനേജർ, സ്റ്റാക്കിങ്ങ് വിൻഡോ മാനേജർ, ടൈലിങ്ങ് വിൻഡോ മാനേജർ, ഡൈനാമിക്ക് വിൻഡോ മാനേജർ എന്നിങ്ങനെ. ഇന്ന് സാധാരണ ഉപയോഗിക്കപ്പെടുന്ന വിൻഡോ മാനേജറുകൾ ഒക്കെ കോമ്പോസിറ്റിങ്ങ് വിഭാഗത്തിൽ പെടുന്നവയാണ്. ഓരോ‌ പ്രോഗ്രാമിന്റെയും വിൻഡോകൾ വെവ്വേറെ വരച്ച ശേഷം അവയെ ഒന്നിച്ച് ചേർത്ത് ഒരു സ്ക്രീനിൽ വരക്കുന്ന രീതി ആണ് ഇവ പിൻതുടരുന്നത്. ഇങ്ങനെ ചെയ്യുന്നതിനൊപ്പം അവയുടെ ബാഹ്യരൂപത്തിൽ ആകർഷകമായ പ്രതീതികൾ ചേർക്കാനും സാധിക്കുന്നു. കോംപിസ് (Compiz) ഉപയോഗിച്ച് വിൻഡോകളിൽ വിവിധ 3ഡി ഇഫക്റ്റുകൾ ഉണ്ടാക്കിയെടുക്കാൻ സാധിക്കും. ഗ്നോം 2 വരെ ഉണ്ടായിരുന്ന മെറ്റാസിറ്റി, ഗ്നോം 3 ഇൽ ഉള്ള മട്ടർ (Mutter), കെഡി‌‌ഇ യിലെ കെ വിൻ, കോംപിസ്, വിൻഡോസിലെ ഡെസ്ക്ടോപ്പ് വിൻഡോ മാനേജർ ഒക്കെ കോമ്പോസിറ്റിങ്ങ് വിൻഡോ മാനേജറുകൾക്ക് ഉദാഹരണമാണ്.

എക്സ് വിൻഡോ സിസ്റ്റം അടിസ്ഥാനമാക്കി ആണ് ഇന്ന് ലിനക്സിൽ പ്രവർത്തിക്കുന്ന ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകൾ ഒക്കെ വികസിപ്പിച്ചിരിക്കുന്നത്. ഉബുണ്ടു ലിനക്സിന്റെ നിർമ്മാതാക്കളായ കാനോനിക്കൽ കമ്പനി വികസിപ്പിച്ചെടുക്കുന്ന മറ്റൊരു ഡിസ്പ്ലേ സെ‌‌ർവർ ആണ് മിർ. എക്സ് വിൻഡോസ് സെർവറിന് പകരം വയ്ക്കാനാവുന്ന ഒരു ആധുനിക ഡിസ്പ്ലേ സെ‌‌ർവറായിരിക്കും ഇത് എന്ന് കാനോനിക്കൽ പ്രതീക്ഷിക്കുന്നു. എക്സ് ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്ന ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റുകൾക്ക് മാറ്റങ്ങളൊന്നുമില്ലാതെ തന്നെ മിർ ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ സാധിക്കും എന്നാണ് അവർ അവകാശപ്പെടുന്നത്.

ലിനക്സ് ഡിസ്ട്രിബ്യൂഷനുകളെക്കുറിച്ച് അടുത്ത പോസ്റ്റ്.

Saturday, July 13, 2013

ടെർമിനൽ

ലിനക്സ്/യൂണിക്സ് സിസ്റ്റങ്ങൾ മൾട്ടി യൂസർ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം വിഭാഗത്തിൽ പെടുന്നവ ആണ്. ഒന്നിലധികം ഉപയോക്താക്കൾക്ക് ഒരേ സമയം ഈ കമ്പ്യൂട്ടറുകൾ ഉപയോഗിക്കാൻ സാധിക്കും. വിൻഡോസ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഒന്നിലധികം യൂസർ അക്കൗണ്ടുകളെ ഒരേ കമ്പ്യൂട്ടറിൽ അനുവദിക്കുന്നുണ്ട്. എന്നാൽ ഒരു ഉപയോക്താവ് ലോഗ് ഔട്ട് ചെയ്താൽ മാത്രമേ അടുത്ത ഉപയോക്താവിന് ലോഗിൻ ചെയ്യാൻ സാധിക്കുകയുള്ളു. റിമോട്ട് അസിസ്റ്റൻസ്, ടീം വ്യൂവർ തുടങ്ങിയവ ഉപയോഗിച്ച് ഒന്നിലധികം ആളുകൾ ഒരു ഡെസ്ക്‌‌ടോപ്പിനെ നിയന്ത്രിക്കുനത് മൾട്ടി യൂസർ എൻവയോൺമെന്റുമായി തെറ്റിദ്ധരിക്കരുത്. വിൻഡോസ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഒരു മൾട്ടി യൂസർ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം അല്ല.

പരമ്പരാഗത യൂണിക്സ് സിസ്റ്റങ്ങളെ താഴെക്കൊടുത്തിരിക്കുന്ന രീതിയിൽ കാണാവുന്നതാണ്


ഓരോ ടെർമിനൽ ഉപകരണങ്ങളും വ്യത്യസ്തമാകാം. അക്ഷരങ്ങളും അക്കങ്ങളും ചിഹ്നങ്ങളും മാത്രം കാണാൻ സാധിക്കുന്ന ടെക്റ്റ് ഓൺളി ടെർമിനലുകളും ഗ്രാഫിക്കൽ ടെർമിനലുകളും ഉണ്ട്. സീരിയൽ പോർട്ട് വഴിയോ നെറ്റ്‌‌വർക്ക് വഴിയോ കമ്പ്യൂട്ടറുമായി ഘടിപ്പിക്കാവുന്ന ടെലി ടൈപ്പ് ടെർമിനലുകൾ ഒരുകാലത്ത് നിലവിലുണ്ടായിരുന്നു. യൂണിക്സ് വികസിപ്പിക്കപ്പെട്ട സമയത്തെ കമ്പ്യൂട്ടർ സിസ്റ്റങ്ങൾ ഇന്നത്തേത് പോലെ മൈക്രോ പ്രോസസ്സർ അതിഷ്ഠിതമായ പേഴ്സണൽ കമ്പ്യൂട്ടറുകൾ ആയിരുന്നില്ല. വർക്ക് സ്റ്റേഷനുകൾക്കും മിനി കമ്പ്യൂട്ടറുകൾക്കും ഒക്കെയായി എഴുതപ്പെട്ട ഒരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റമായിരുന്നു യൂണിക്സ്. ഒന്നിലധികം ഉപയോക്താക്കളെ പിൻതുണക്കുക എന്നത് അതിന്റെ അടിസ്ഥാന ആവശ്യമായിരുന്നു. പേഴ്സണൽ കമ്പ്യൂട്ടറിൽ നിന്ന് വ്യത്യസ്തമായി ഓരോ ഉപയോക്താക്കൾക്കും ലഭ്യമാകുക ഒരു ഡിസ്പ്ലേയും കീബോർഡും മാത്രമാണ്. സി പി യു, ഡിസ്കുകൾ ഒക്കെ പൊതുവായി എല്ലാവർക്കും കൂടി ആയിരിക്കും.

ഒരു ഉപയോക്താവ് കമ്പ്യൂട്ടറുമായി ടെർമിനൽ ഉപകരണം ഘടിപ്പിക്കുമ്പോൾ കമ്പ്യൂട്ടറിൽ getty (get teletype) പ്രോഗ്രാം അത് കണ്ടെത്തുകയും ഉഅയോക്താവിനോട് യൂസർ നെയിം, പാസ്‌‌വേർഡ് ഇവ എന്റർ ചെയ്യാൻ ആവശ്യപ്പെടുകയും ചെയ്യുന്നു. അതിനു ശേഷം ഉപയോക്താവിന് ഒരു കമാന്റ് ലൈൻ ഇന്റർഫേസ് (ഷെൽ) ലഭിക്കുന്നു. അതുവഴി ഉപയോക്താവിന് പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കാൻ സാധിക്കുന്നു. ഓരോ യൂണിക്സ് പ്രോഗ്രാമും ഓരോ‌ കണ്ട്രോളിങ്ങ് ടെർമിനലുമായി ബന്ധിപ്പിക്കപ്പെട്ടിരിക്കും. പ്രോഗ്രാമിന്റെ ഇൻപുട്ട്, ഔട്ട്പുട്ട് തുടങ്ങിയവ ഈ ടെർമിനലിൽ നിന്നും ടെർമിനലിലേക്കും ആയിരിക്കും. എന്നാൽ ഡെമോൺ പ്രോസസ്സുകൾ (സർവ്വീസുകൾ) ടെർമിനലുകളുമായി ബന്ധിക്കപ്പെട്ടിരിക്കില്ല. ഈ പ്രോസസ്സുകൾ തുടങ്ങുമ്പോൾ അവ ടെർമിനലുമായി ബന്ധിപ്പിക്കപ്പെട്ടിരിക്കുമെങ്കിലും അവ അവയുടെ ഇൻപുട്ട് ഔട്ട്പുട്ട് സ്ട്രീമുകളുടെ ഫയൽ ഡിസ്ക്രിപ്റ്റർ ക്ലോസ് ചെയ്ത് ടെർമിനലുകളിൽ നിന്ന് സ്വയം വിച്ഛേദിക്കുന്നു.

ഇന്നത്തെ ഡെസ്ക്ടോപ്പ് കമ്പ്യൂട്ടറുകളിൽ ടെർമിനൽ ഉപകരണങ്ങൾ ഉപയോഗിക്കാറില്ലെങ്കിലും ഇതേ രീതി തന്നെയാണ് പിൻതുടരുന്നത്. ടെർമിനൽ ഉപകരണങ്ങൾക്ക് പകരമായി ടെർമിനൽ ഇമുലേറ്റർ പ്രോഗ്രാമുകൾ ഇന്ന് ഉപയോഗിക്കപ്പെടുന്നു. PuTTY, Konsole, Gnome Terminal, Xterm തുടങ്ങി അനവധി ടെർമിനൽ ഇമുലേറ്റർ പ്രോഗ്രാമുകൾ ലഭ്യമാണ്. Telnet, SSH, rlogin തുടങ്ങിയ വിവിധ പ്രോട്ടോക്കോളുകൾ അടിസ്ഥാനമാക്കി ആണ് ഇവ പ്രവർത്തിക്കുന്നത്. ഗ്രാഫിക്കൽ ടെർമിനലുകൾക്കായി X Window System (X11) ഉപയോഗിക്കുന്നു. ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസുകൾ ലഭ്യമാക്കാനുള്ള പ്രോട്ടോക്കോൾ ആണിത്. ഇതിനെ അടിസ്ഥാനമാക്കി ആണ് വിവിധ ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റുകൾ (Gnome, KDE, Xfce, LXDE) തുടങ്ങിയവ പ്രവർത്തിക്കുന്നത്. ഒരു ക്ലയന്റ് - സെർവർ സംവിധാനമാണിത്. ഒരു ടെർമിനൽ ഇമുലേറ്റർ ഉപയോഗിക്കുമ്പോൾ ലഭിക്കുന്ന ടെർമിനലിനെ വിർച്ച്വൽ ടെർമിനൽ എന്ന് വിളിക്കുന്നു.

ഡെസ്ക്ടോപ്പ് കമ്പ്യൂട്ടറുകളിലും ടെർമിനലുകൾ ലഭ്യമാണ്. CTRL+ALT+F1 - F12 കീകൾ ഉപയോഗിച്ച് ഓരോ ടെർമിനലുകളും ലഭ്യമാക്കാം. ഇതിൽ ഒന്നുമുതൽ ആറുവരെയുള്ള ടെർമിനലുകൾ ടെക്സ്റ്റ് ടെർമിനലുകളും അതിനു ശേഷമുള്ളവ ഗ്രാഫിക്കൽ ടെർമിനലുകളും ആണ്. tty1, tty2 ... എന്നിങ്ങനെ ഇവക്ക് പേരുകൾ നൽകിയിരിക്കുന്നു. CTRL+ALT+F1 അമർത്തി tty1 ലേക്ക് പോകാം. അവിടെ യൂസർ നെയിമും പാസ്‌‌വേർഡും ടൈപ്പ് ചെയ്താൽ ഷെൽ ലഭിക്കും. തിരികെ ഗ്രാഫിക്കൽ ഇന്റർഫേസിലേക്ക് മടങ്ങി വരാൻ CTRL+ALT+F7 ഉപയോഗിക്കാം. ആദ്യത്തെ ഗ്രാഫിക്കൽ ടെർമിനൽ  ആയ tty7 ഇൽ ആണ് X സാധാരണയായി ആരംഭിക്കുന്നത്. നിങ്ങളുടെ മോണിറ്റർ ഈ ടെർമിനലുമായി ഘടിപ്പിക്കപ്പെട്ടിരിക്കുന്ന ഒരു ഗ്രാഫിക്കൽ ടെർമിനൽ ഉപകരണമായി കണക്കാക്കാവുന്നതാണ്. സിസ്റ്റം സ്റ്റാർട്ടപ്പിൽ X സെർവർ പ്രവർത്തനമാരംഭിക്കുകയും അത് tty7 ഉമായി ബന്ധിപ്പിക്കപ്പെടുകയും ചെയ്യുന്നു. 

ടെർമിനൽ ഇമുലേറ്ററുകൾ വഴി ലഭിക്കുന്ന വിർച്ച്വൽ ടെർമിനലുകൾ ബന്ധിപ്പിക്കപ്പെട്ടിരിക്കുക സ്യൂഡോ ടെർമിനലുകളുമായി (Pseudo terminal) ആയിരിക്കും. ഇവക്ക് പേരുകൾ നൽകുന്നത് pts/0, pts/1 എന്നിങ്ങനെ ആണ്. ഉപയോഗിച്ചുകൊണ്ടിരിക്കുന്ന ഷെൽ ഏത് ടെർമിനലുമായി ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു എന്നറിയാൻ tty എന്ന കമാന്റ് ഉപയോഗിക്കാം. ഇത് ഓരോ ടെർമിനലുകളിൽ പരീക്ഷിച്ച് നോക്കൂ. കമ്പ്യൂട്ടറിൽ ഒരു സമയത്ത് ലോഗിൻ ചെയ്തിരിക്കുന്ന ആളുകളുടെ വിവരങ്ങൾ കാണാനും അവർ ഉപയോഗിക്കുന്ന ടെർമിനൽ ഏതെന്നറിയാനും w കമാൻഡോ who കമാൻഡോ ഉപയോഗിക്കാം. ps -e കമാൻഡ് ഉപയോഗിച്ച് കമ്പ്യൂട്ടറിൽ പ്രവർത്തിച്ചുകൊണ്ടിരിക്കുന്ന പ്രോസസ്സുകളും അവയുടെ കണ്ട്രോളിങ്ങ് ടെർമിനലും കാണാൻ സാധിക്കും. ഇതിൽ നിരവധി പ്രോസസ്സുകളുടെ TTY എന്ന കോളത്തിൽ ? എന്ന് മാത്രമേ കാണൂ. അവ ഒരു ടെർമിനലുമായും ബന്ധിക്കപ്പെട്ടിട്ടില്ല എന്നതാണ് ഇത് സൂചിപ്പിക്കുന്നത്. അവ ഏത് തരം പ്രോസസ്സ് ആയിരിക്കും എന്ന് ഊഹിക്കാമല്ലോ..

ഒരു ലിനക്സ് കമ്പ്യൂട്ടറിൽ നെറ്റ്‌‌വർക്ക് വഴി ssh പ്രോഗ്രാം ഉപയോഗിച്ച് ലോഗിൻ ചെയ്ത് നിരവധി ആളുകൾക്ക് ഒരേ സമയത്ത് ആ കമ്പ്യൂട്ടറിനെ ഉപയോഗിക്കാൻ സാധിക്കും. ssh -Y ഓപ്ഷൻ ഉപയോഗിച്ചാൽ ഗ്രാഫിക്കൽ ഇന്റർഫേസ് ഉപയോഗിക്കുന്ന പ്രോഗ്രാമുകളെയും പ്രവർത്തിപ്പിക്കാൻ സാധിക്കും.

ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ്, ഡെസ്ക്ടോപ്പ് എൻവയോൺമെന്റ് എന്നിവയെപ്പറ്റി അടുത്ത പോസ്റ്റ്..

ലിനക്സ് സിസ്റ്റം സ്റ്റാർട്ടപ്പ് - 3

ഇനിറ്റ് പ്രോസസ്സ് ആണ് ലിനക്സ്/യൂണിക്സ് സിസ്റ്റങ്ങളിലെ ആദ്യത്തെ യൂസർ പ്രോസസ്സ് എന്ന് പറഞ്ഞുവല്ലോ. കെർണൽ കമ്പ്യൂട്ടറിലെ ഹാർഡ്‌‌വെയറിനെ പ്രവർത്തനസജ്ജമാക്കിയ ശേഷം ഉപഭോക്താവിന്‌ കമ്പ്യൂട്ടർ ഉപയോഗിക്കാൻ സജ്ജമാക്കുന്ന വിവിധ ക്രമീകരണങ്ങൾ നടത്തുന്നത് ഇനിറ്റ് പ്രോസസ്സ് ആണ്. ഇതിനായി ഇനിറ്റ് മുൻകൂട്ടി ക്രമീകരിച്ചിരിക്കുന്ന വിവിധ സർവ്വീസുകൾ ആരംഭിക്കുന്നു. യൂണിക്സ് സിസ്റ്റങ്ങളിൽ ഈ സർവ്വീസുകളെ ഡെമോൺ പ്രോസസ്സുകൾ എന്നാണ് വിളിക്കുന്നത്. യൂണിക്സ് കീഴ്‌‌വഴക്കം അനുസരിച്ച് ഈ പ്രോസസ്സുകളുടെ പേരിന്റെ അവസാനം d എന്ന അക്ഷരം ചേർക്കാറുണ്ട്. നിങ്ങളുടെ കമ്പ്യൂട്ടറീലെ ഡെമോൺ പ്രോസസ്സുകൾ ഏതൊക്കെയാണെന്നറിയാൻ ഒരു ടെർമിനൽ തുറന്ന് ps -e എന്ന് ടൈപ്പ് ചെയ്ത് എന്റർ അമർത്തി നോക്കൂ, udevd, syslogd, smbd തുടങ്ങി വിവിധ പ്രോസസ്സുകൾ കാണാൻ സാധിക്കും. ഇനിറ്റ് പ്രോസസ്സ് ഒരിക്കൽ ആരംഭിച്ചാൽ കമ്പ്യൂട്ടർ ഓഫ് ചെയ്യുന്നത് വരെ പ്രവർത്തിച്ചുകൊണ്ടിരിക്കും. ഈ പ്രോസസ്സ് പ്രവർത്തനം അവസാനിപ്പിച്ചാൽ കെർണൽ പാനിക്ക് അവസ്ഥ ഉണ്ടാകുകയും കമ്പ്യൂട്ടർ റീസ്റ്റാർട്ട് ആകുകയും ചെയ്യും. (ഈ അവസരത്തിലെ കെർണലിന്റെ പെരുമാറ്റം ഓരോ യൂണിക്സ് സിസ്റ്റങ്ങളിലും വ്യത്യസ്തമായിരിക്കും).

വിവിധ യൂണിക്സ് സിസ്റ്റങ്ങളിൽ വിവിധ ഇനിറ്റ് പ്രോഗ്രാമുകൾ ആയിരിക്കും ഉണ്ടായിരിക്കുക. ലിനക്സ് ഡിസ്ട്രിബ്യൂഷനുകൾ ഉപയോഗിക്കുന്ന ചില ഇനിറ്റ് പ്രോഗ്രാമുകൾ താഴെ കൊടുക്കുന്നു.

1. സിസ്‌‌ വി ഇനിറ്റ് (SysV Init)
യൂണിക്സ് സിസ്റ്റങ്ങളിൽ പരമ്പരാഗതമായി ഉപയോഗിച്ച് വന്നിരുന്ന ഇനിറ്റ് പ്രോഗ്രാമാണിത്. ഈ പ്രോഗ്രാമിന്റെ പ്രവർത്തനം /etc/inittab എന്ന ക്രമീകരണ ഫയലിനെ അടിസ്ഥാനമാക്കി ആണ്. /etc/init.d/ എന്ന ഡയറക്റ്ററിയിൽ ആണ് വിവിധ സർവ്വീസുകൾ നിർവചിച്ചിരിക്കുന്ന ഫയലുകൾ ഉണ്ടായിരിക്കുക. ഇത് സർവ്വീസുകളെ ഒന്നിനു ശേഷം ഒന്നായി ആരംഭിക്കുന്നു.

2. സിസ്റ്റംഡി (Systemd)
താരതമ്യേന പുതിയ ഒരു ഇനിറ്റ് പ്രോഗ്രാമാണ് സിസ്റ്റംഡി. സിസ്റ്റം ഡെമോൺ എന്നതിന്റെ ചുരുക്കമാണ് ഇത്. വിവിധ സർവ്വീസുകൾ നിർവചിക്കാനും നിയന്ത്രിക്കാനുമുള്ള ഒരു മെച്ചപ്പെട്ട് ചട്ടക്കൂട് ലഭ്യമാക്കുക എന്നതാണ് ഇതിന്റെ ലക്ഷ്യം. ഫെഡോറ, ആർച്ച് ലിനക്സ് തുടങ്ങിയ വിവിധ ലിനക്സ് സിസ്റ്റങ്ങളിലെ ഇനിറ്റ് പ്രോസസ്സായി ഇപ്പോൾ സിസ്റ്റംഡി ഉപയോഗിക്കപ്പെടുന്നു. ഒന്നിനു പുറകെ ഒന്നായി പ്രോസസ്സുകൾ ആരംഭിക്കുന്ന പരമ്പരാഗത രീതിയിൽ നിന്ന് വ്യത്യസ്തമായി സമാന്തരമായി തന്നെ പ്രോസസ്സുകൾ ആരംഭിക്കാൻ സിസ്റ്റംഡി ക്ക് സാധിക്കുന്നു. ഇതുവഴി കമ്പ്യൂട്ടർ ബൂട്ട് ചെയ്യാൻ ആവശ്യമായ സമയം കുറക്കാൻ സാധിക്കും.

3. അപ്‌‌സ്റ്റാർട്ട് (Upstart)
ഉബുണ്ടു ലിനക്സ് ഡിസ്ട്രിബ്യൂഷന്റെ നിർമ്മാതാക്കളായ കാനോനിക്കൽ കമ്പനി വികസിപ്പിച്ചെടുത്ത് ഇനിറ്റ് പ്രോഗ്രാം ആണ് അപ്‌‌സ്റ്റാർട്ട്. പരമ്പരാഗത രീതിയിൽ മുൻകൂട്ടി തീരുമാനിക്കപ്പെട്ട ക്രമത്തിൽ സർവ്വീസുകൾ ആരംഭിക്കുന്നതിൽ നിന്ന് വ്യത്യസ്തമായി വിവിധ സംഭവങ്ങളുടെ (events) അടിസ്ഥാനത്തിൽ സർവ്വീസുകൾ ആരംഭിക്കുകയും അവസാനിപ്പിക്കുകയും ചെയ്യുന്ന രീതി ആണ് അപ്‌‌സ്റ്റാർട്ട് പിൻതുടരുന്നത്. നോക്കിയയുടെ മെമോ, ഗൂഗിൾ ക്രോം ഓ എസ്, ഉബുണ്ടൂ തുടങ്ങിയവ അപ്‌‌സ്റ്റാർട്ട് ആണ് ഇനിറ്റ് പ്രോഗ്രാമായി ഉപയോഗിക്കുന്നത്. കമ്പ്യൂട്ടറിന്റെ ബൂട്ടിങ്ങ് സമയം പത്തുസെക്കന്റിലും താഴേക്ക് കുറക്കാൻ അപ്‌‌സ്റ്റാർട്ട് വഴി സാധ്യമായി.

4. ആൻഡ്രോയിഡ് ഇനിറ്റ്
ആൻഡ്രോയിഡ് ഒരു ലിനക്സ് കെർണൽ അധിഷ്ഠിത ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ആണെന്നറിയാമല്ലോ. ആൻഡ്രോയിഡിനും സ്വന്തമായി ഒരു ഇനിറ്റ് പ്രോഗ്രാം ഉണ്ട്. പരമ്പരാഗത രീതി തന്നെ ആണ് ഈ ഇനിറ്റ് പ്രോഗ്രാമും പിൻതുടരുന്നത്.

ഇവക്ക് പുറമെ മാക് ഓഎസ്, സോളാരിസ്, ബിഎസ്‌‌ഡി തുടങ്ങിയ യൂണിക്സ് സിസ്റ്റങ്ങൾക്കൊക്കെ തന്നെ അവയുടെ ഇനിറ്റ് പ്രോഗ്രാമുകൾ ഉണ്ട്. കമ്പ്യൂട്ടറിന്റെ പ്രവർത്തന ആരംഭത്തിൽ സർവ്വീസുകൾ ആരംഭിക്കുന്നതോടെ ഇനിറ്റ് പ്രോസസ്സിന്റെ പ്രവർത്തനം അവസാനിക്കുന്നില്ല. ഈ സർവ്വീസുകൾ ഏതെങ്കിലും പ്രവർത്തനരഹിതമായാൽ അവയെ പുനരാരംഭിക്കൽ, വിവിധ റൺ ലെവലുകളിലെ ക്രമീകരണങ്ങൾ, സിസ്റ്റം ഷട്ട് ഡൗൺ ആരംഭിക്കുമ്പോൾ സർവ്വീസുകളെ അവസാനിപ്പിക്കൽ ഒക്കെ ഇനിറ്റ് പ്രോസസ്സിന്റെ കടമയാണ്.

യൂണിക്സ് സിസ്റ്റങ്ങളിൽ അവയുടെ ഓരോ സമയത്തെ പ്രവർത്തന സ്ഥിതിയെ റൺലെവൽ എന്ന് വിളിക്കുന്നു. ലിനക്സ് സിസ്റ്റങ്ങളിൽ 6 വ്യത്യസ്ത റൺ ലെവലുകൾ ഉണ്ട്. 
റൺലെവൽ 0 - സിസ്റ്റം ഹാൾട്ട് (ഓഫ് ആയിരിക്കുന്ന അവസ്ഥ)
റൺലെവൽ 1 - സിങ്കിൽ യൂസർ മോഡ് (ഒരൊറ്റ ഉപയോക്താവ് മാത്രം. അഡ്മിനിസ്ട്രേറ്റർ യൂസറിന്റെ അനുവാദങ്ങളോടെ ഉള്ള അറ്റകുറ്റപ്പണികൾക്കായി ഉപയോഗിക്കപ്പെടുന്നു)
റൺലെവൽ 2 - നെറ്റ്‌‌വർക്കിങ്ങ് ഇല്ലാത്ത ഒന്നിലധികം ഉപയോക്താക്കളെ പിൻതുണക്കുന്ന അവസ്ഥ.
റൺലെവൽ 3 - നെറ്റ്‌‌വർക്കിങ്ങ് പിൻതുണ അടക്കം ഒന്നിലധികം ഉപയോക്താക്കളെ പിൻതുണക്കുന്ന അവസ്ഥ
റൺലെവൽ 4 - ഉപയോഗത്തിൽ ഇല്ല.
റൺലെവൽ 5 - നെറ്റ്‌‌വർക്കിങ്ങ് പിൻതുണ, ഒന്നിലധികം ഉപയോക്താക്കൾക്കുള്ള പിൻതുണ, ഗ്രാഫിക്കൽ യൂസർ ഇന്റർഫേസ്
റൺലെവൽ 6 - സിസ്റ്റം റീസ്റ്റാർട്ട്

ഇനിറ്റ് കമാന്റ് ഉപയോഗിച്ച് റൺലെവലുകൾ മാറ്റാൻ സാധിക്കും. init 6 എന്ന കമാന്റ് കമ്പ്യൂട്ടർ റീസ്റ്റാർട്ട് ചെയ്യാൻ ഉപയോഗിക്കാം. (ഇതൊരു സുരക്ഷിതമായ മാർഗ്ഗമല്ല).

ലിനക്സിലെ മൾട്ടി യൂസർ പിൻതുണ, ടെർമിനലുകൾ, ഗ്രാഫിക്കൽ ഇന്റർഫേസ് എന്നിവയെപ്പറ്റി അടുത്ത പോസ്റ്റ്.

Friday, July 12, 2013

ലിനക്സ് സിസ്റ്റം സ്റ്റാർട്ടപ്പ് - 2

ലിനക്സ് കെർണൽ ഇമേജ് കമ്പ്രസ്സ്ഡ് ആയിരിക്കും എന്ന് നേരത്തേ പറഞ്ഞിരുന്നല്ലോ. സാധാരണ കമ്പ്യൂട്ടറുകളിൽ /boot ഡയറക്ടറിയിൽ ഉള്ള കെർണൽ ഇമേജ് (vmlinuz) ഒരു ഡീ-കമ്പ്രസ്സർ പ്രോഗ്രാമിൽ ലിനക്സ് കെർണൽ ഇമേജ് കൂടി ഉൾപ്പെടുത്തിയ ഫയൽ ആണ്. ബൂട്ട് ലോഡർ ഈ ഇമേജിനെ മെമ്മറിയിൽ പകർത്തിയതിനുശേഷം അതിന്റെ പ്രവർത്തിപ്പിച്ച് തുടങ്ങുമ്പോൾ ഈ ഡീ-കമ്പ്രസ്സർ ആണ് ആദ്യം പ്രവർത്തിക്കുന്നത്. ബൂട്ട് ലോഡർ പ്രവർത്തനക്ഷമമാക്കി വച്ച സീരിയൽ പോർട്ടോ ഡിസ്പ്ലേ ഡിവൈസോ ആയിരിക്കും ഈ സമയത്ത് കെർണൽ ഉപയോഗിക്കുന്നത്. ഡീ കമ്പ്രസ്സ് ചെയ്ത ലിനക്സ് കെർണൽ മെമ്മറിയിൽ മുൻകൂട്ടി നിശ്ചയിക്കപ്പെട്ട സ്ഥലത്തായിരിക്കും ഉണ്ടാവുക. ഡീ കമ്പ്രഷൻ പൂർണ്ണമായ ശേഷം ഈ മെമ്മറി അഡ്രസ്സിൽ നിന്ന് പ്രവർത്തനം പുനരാരംഭിക്കപ്പെടുന്നു. എല്ലാ സി പ്രോഗ്രാമുകൾക്കും പ്രവർത്തിക്കുന്നതിനാവശ്യമായ ചുറ്റുപാടുകൾ കെർണലിനും ആവശ്യമാണല്ലോ. സ്റ്റാക്ക്, ഹീപ്പ് തുടങ്ങിയവ ഒക്കെ ആദ്യം ബൂട്ട് ലോഡർ തയ്യാറാക്കുമെങ്കിലും അത് ഡീ കമ്പ്രസ്സറിന്റെ ഉപയോഗത്തിനു വേണ്ടി ആണ്. ലിനക്സ് കെർണലിന് പ്രവർത്തിക്കാനാവശ്യമായ സ്റ്റാക്ക്, ഹീപ്പ് തുടങ്ങിയവ ഒക്കെ തയ്യാറാക്കുന്നത് ഡീ കമ്പ്രസ്സർ പ്രോഗ്രാം ആണ്. ഇതും ലിനക്സ് കെർണൽ സോഴ്സ് കോഡിന്റെ ഭാഗം തന്നെ ആണ്.

കെർണൽ പ്രവർത്തനമാരംഭിച്ചാൽ ആദ്യം ചെയ്യുന്നത് അത് പ്രവർത്തിക്കുന്ന കമ്പ്യൂട്ടർ ആർക്കിട്ടെക്ചറിന് പ്രത്യേകമായുള്ള ക്രമീകരണങ്ങൾ ആയിരിക്കും. സാധാരണ ഇന്റൽ പ്രോസസ്സർ അധിഷ്ഠിതമായ കമ്പ്യൂട്ടറുകളിൽ ഇത് സമാനമായിരിക്കുമെങ്കിലും ലിനക്സ് പ്രവർത്തിക്കുന്ന ഓരോ വ്യത്യസ്ത ആർക്കിട്ടെക്ചറിലും ഇത് വ്യത്യസ്തമായിരിക്കും. വ്യത്യസ്ത ആം പ്രോസസ്സറുകൾ അടിസ്ഥാനമാക്കിയുള്ള് ഉപകരണങ്ങളിൽ പോലും ഇത് വ്യത്യസ്തമായിരിക്കും. പ്രവർത്തിക്കുന്ന ഉപകരണത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ ലിനക്സിനു നൽകുന്നത് ബൂട്ട് ലോഡർ ആണ്. ആം അധിഷ്ഠിത ഉപകരണങ്ങളിൽ ബൂട്ട് ലോഡർ ATAGS എന്ന ഒരു സ്ട്രക്ചറിൽ ആയിരിക്കും ഈ വിവരങ്ങൾ കൈമാറുന്നത്. എല്ലാ ഉപകരണങ്ങളിലും ബൂട്ട് ലോഡർ ലിനക്സ് കെർണലിന് കമാന്റ് ലൈൻ ആർഗ്യുമെന്റ്സ് കൈമാറിയിരിക്കും. സാധാരണ ടെർമിനലിൽ പ്രോഗ്രാമുകൾ ഉപയോഗിക്കുമ്പോൾ അവക്ക് നൽകുന്ന ആർഗ്യുമെന്റിന് സമാനമാണിത്. ലിനക്സ് റൂട്ട് ഫയൽ സിസ്റ്റം ഉൾക്കൊള്ളുന്ന ഡിസ്ക്, ബൂട്ടിങ്ങ് സമയത്ത് സീരിയൽ കൺസോളായി ഉപയോഗിക്കേണ്ട ഉപകരണം, ഉപകരണത്തിൽ ലഭ്യമായ മെമ്മറി തുടങ്ങി വിവിധ വിവരങ്ങൾ ഇതിൽ ഉണ്ടായിരിക്കും. ഇത് ഉപകരണങ്ങൾക്കനുസരിച്ച് മാറിക്കൊണ്ടിരിക്കുകയും ചെയ്യും. ഇതിലെ ഒരു പ്രധാനപ്പെട്ട ഭാഗം വിർച്ച്വൽ മെമ്മറി ഉപയോഗത്തിനാവശ്യമായ സെഗ്മെന്റുകളും പേജുകളും ഹാർഡ്‌വെയറും ക്രമീകരിക്കുക എന്നതാണ്. മെമ്മറി മാനേജ്മെന്റ് യൂണിറ്റ് എല്ലാ ആധുനിക പ്രോസസ്സറുകളുടെയും ഭാഗമാണ്. ഇന്റൽ പ്രോസസ്സറുകളിൽ ഈ സമയത്ത് സിപിയു റിയൽ മോഡിൽ നിന്നും പ്രൊട്ടക്റ്റഡ് മോഡിലേക്കും മാറുന്നു.

ഉപകരണത്തിനാവശ്യമായ പ്രത്യേക ക്രമീകരണങ്ങൾക്ക് ശേഷം കെർണൽ സിസ്റ്റത്തിലെ വിവിധ ഉപകരണങ്ങളെ പ്രവർത്തനസജ്ജമാക്കുവാൻ ആരംഭിക്കുന്നു. ലിനക്സ് ഡിവൈസ് ഡ്രൈവറുകൾ രണ്ട് രീതിയിൽ കെർണലിലേക്ക് ചേർക്കാൻ സാധിക്കും. ഒന്ന് കെർണൽ കമ്പൈലേഷൻ സമയത്ത് കെർണലിൽ ഇമേജിൽ തന്നെ ഉൾപ്പെടുത്തുക, രണ്ട്, മൊഡ്യൂളുകൾ ആയി കമ്പൈൽ ചെയ്ത് കെർണൽ പ്രവർത്തിക്കുന്ന സമയത്ത് അതിലേക്ക് ചേർക്കുക. ആദ്യത്തെ രീതിയിൽ ഇമേജിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന ഡ്രൈവറുകൾ ഈ ഘട്ടത്തിൽ പ്രവർത്തനസജ്ജമാക്കപ്പെടുന്നു. ഉപകരണങ്ങൾ ക്രമീകരിച്ചതിനു ശേഷം കെർണൽ അതിന്റെ പ്രവർത്തനത്തിന്റെ മൂന്നാം ഘട്ടത്തിലേക്ക് പ്രവേശിക്കുന്നു.

ഡീ കമ്പ്രസ്സിങ്ങ്, പ്രത്യേക ക്രമീകരണങ്ങൾ എന്നീ ഘട്ടങ്ങൾ ഓരോ ഉപകരണത്തിലും ഓരോ രീതിയിൽ ആണെങ്കിലും ശേഷമുള്ള മൂന്നാം ഭാഗം എല്ലാ ഉപകരണങ്ങളിലും ഒരുപോലെ ആണ്. ഇതിനെ ഹാർഡ്‌വെയർ ഇൻഡിപ്പൻഡന്റ് എന്ന് പറയാം. ഈ ഭാഗത്ത് കെർണൽ ആദ്യം ചെയ്യുന്നത് പ്രോസസ്സുകൾ ആരംഭിക്കാൻ ആവശ്യമായ ക്രമീകരണങ്ങൾ നടത്തുകയാണ്. ഈ ഘട്ടത്തിൽ എത്തുമ്പോൾ കമ്പ്യൂട്ടറിൽ ഒരു പ്രോസസ്സ് മാത്രമേ ഉണ്ടാവുകയുള്ളു. ഇതിന്റെ പി ഐ ഡി 0 ആയിരിക്കും. ഇത് ലിനക്സ് കെർണൽ പ്രോസസ്സ് ആണ്. ഇതിനെ സ്വാപ്പർ (Swapper) എന്നും വിളിക്കാറുണ്ട്. പ്രോസസ്സ് ടേബിൾ, ഷെഡ്യൂളിങ്ങിനാവശ്യമായ വിവരങ്ങൾ എന്നിവ ക്രമീകരിച്ച ശേഷം ലിനക്സ് കെർണൽ ആദ്യത്തെ യൂസർ പ്രോസസ്സ് ആരംഭിക്കുന്നു. ഇതാണ് ഇനിറ്റ് പ്രോസസ്സ്. ഇനിറ്റ് പ്രോസസ്സിന്റെ പി ഐ ഡി 1 ആയിരിക്കും. ഇനിറ്റ് ആരംഭിക്കുന്ന പ്രോസസ്സുകളുടെയും പേരന്റ് പ്രോസസ്സ് പ്രവർത്തനം അവസാനിപ്പിച്ച ചൈൽഡ് പ്രോസസ്സുകളുടെയും പേരന്റ് പ്രോസസ്സ് ഇനിറ്റ് ആണ്. ലിനക്സ് കെർണൽ നേരിട്ട് സൃഷ്ടിക്കുന്ന ഒരു പ്രത്യേക പ്രോസസ്സ് ആണിത്. ഇനിറ്റ് പ്രോസസ്സിന്റെ യൂസർ ഐഡി 0 (റൂട്ട്) ആയിരിക്കും. ഇനിറ്റ് പ്രോസസ്സിന്റെ എക്സിക്യൂട്ടബിൾ സാധാരണയായി /sbin/init ആണ്. മറ്റേതെങ്കിലും എക്സിക്യൂട്ടബിൾ ഇനിറ്റ് ആയി ഉപയോഗിക്കണമെങ്കിൽ ബൂട്ട് ലോഡറിന്റെ കമാന്റ് ലൈൻ ആർഗ്യുമെന്റ് ലിസ്റ്റിൽ init=<ഇനിറ്റ് പ്രോഗ്രാമിന്റെ പാത്ത്> എന്ന് ചേർക്കാവുന്നതാണ്.

ഇനിറ്റ് പ്രോസസ്സ് ആരംഭിക്കുന്നതോടെ എക്സിക്യൂഷൻ കെർണൽ സ്പേസിൽ നിന്ന് യൂസർ സ്പേസിലേക്ക് മാറുന്നു. യൂസർ സ്പേസ് സിസ്റ്റം കോളുകൾ ഉപയോഗിക്കുമ്പോളും ഉപകരണങ്ങളിൽന്നിന്നുള്ള ഇന്ററപ്റ്റുകൾ ഉണ്ടാവുകയും ചെയ്യുമ്പോൾ ആണ് എക്സിക്യൂഷൻ പിന്നീട് കെർണൽ സ്പേസിലേക്ക് മാറുന്നത്.

ഇനിറ്റ് പ്രോസസ്സിനെക്കുറിച്ച് വിശദമായി അടുത്ത പോസ്റ്റ്.

Friday, July 05, 2013

ലിനക്സ് സിസ്റ്റം സ്റ്റാർട്ടപ്പ് - 1

പഴയ പോസ്റ്റുകളിൽ നിന്നും ഫയൽ സിസ്റ്റം, പ്രോസസ്സ് മാനേജ്മെന്റ് എന്നിവയെക്കുറിച്ച് ഒരു ധാരണ ലഭിച്ചിട്ടുണ്ടാകും എന്ന് കരുതുന്നു. ഒരു ലിനക്സ് സിസ്റ്റം പ്രവർത്തനമാരംഭിക്കുന്ന പ്രക്രിയ ആണ് ഈ പോസ്റ്റിൽ വിശദീകരിക്കാൻ ശ്രമിക്കുന്നത്. പ്രധാനമായും ഇന്റൽ x86 പ്രോസസ്സർ അടിസ്ഥാനമാക്കിയുള്ള ഒരു പിസിയിലും ARM പ്രോസസ്സർ അധിഷ്ഠിത സിസ്റ്റത്തിലും എങ്ങനെ ഒരു ലിനക്സ് സിസ്റ്റം ബൂട്ട് ചെയ്യുന്നു എന്ന് നോക്കാം.

സാധാരണ ഇന്റൽ പ്രോസസ്സർ (ഇത് നിർമ്മിക്കുന്നത് ഇന്റൽ തന്നെ ആകണമെന്നില്ല. ഇന്റൽ x86, x86_64 ഒരു ആർക്കിട്ടെക്ചർ ആണ്. എഎംഡി യും ഇതേ ആർക്കിട്ടെക്ചറിൽ പ്രോസസ്സറുകൾ നിർമ്മിക്കുന്നുണ്ട്) അധിഷ്ഠിതമായ പേഴ്സണൽ കമ്പ്യൂട്ടറുകൾ ഒക്കെ ഐബിഎം പിസി മാനദണ്ഡങ്ങൾ പാലിക്കുന്നവ ആണ്. ഇതിൽ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിന്റെ ലോഡിങ്ങ്, ബൂട്ടിങ്ങ് ഒക്കെ പ്രതിപാദിച്ചിട്ടുണ്ട്. എന്നാൽ ആം പ്രോസസ്സറുകൾ ഉപയോഗിക്കുന്ന കമ്പ്യൂട്ടറുകൾക്ക് ഇതുപോലെ വ്യക്തമായ ഒരു മാനദണ്ഡം ഒന്നുമില്ല. ഓരോന്നിലും ഓരോ രീതിയിൽ ആയിരിക്കും ബൂട്ടിങ്ങ്. ഈ വ്യത്യാസങ്ങൾ ഒക്കെ ലിനക്സ് കെർണൽ/മറ്റേതെങ്കിലും ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ലോഡ് ചെയ്യുന്നത് വരെ മാത്രമേ കാണുകയുള്ളു. അതിനാൽ തന്നെ ലിനക്സിന്റെ സ്റ്റാർട്ടപ്പ് എല്ലാ സിസ്റ്റങ്ങളിലും ഒരുപോലെ തന്നെ ആയിരിക്കും.

ഒരു പിസി ഓൺ ചെയ്യുമ്പോൾ ആദ്യമായി പ്രവർത്തിച്ചുതുടങ്ങുക അതിലെ ബയോസ് (BIOS) ആണ്. ബയോസ് ആ കമ്പ്യൂട്ടറിൽ ഘടിപ്പിച്ചിരിക്കുന്ന ഉപകരണങ്ങളെ പ്രവർത്തിപ്പിക്കാൻ ആരംഭിക്കുകയും അവയുടെ പ്രവർത്തനത്തെ സംബന്ധിച്ച ചില അടിസ്ഥാന പരിശോധനകൾ നടത്തുകയും ചെയ്യുന്നു. ഇതിനെ പവർ ഓൺ സെൽഫ് ടെസ്റ്റ് (POST) എന്ന് വിളിക്കുന്നു. പോസ്റ്റിനു ശേഷം ബയോസ് സിസ്റ്റത്തിൽ ഘടിപ്പിച്ചിരിക്കുന്ന ഡിസ്കുകൾ പരിശോധിക്കുന്നു. അവയിലേതെങ്കിലും ഒരു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഉൾക്കൊള്ളുന്നുണ്ടോ എന്നറിയാനാണ് ഈ പരിശോധന. അങ്ങനെ ഉള്ള ഡിസ്കുകളുടെ മാസ്റ്റർ ബൂട്ട് റെക്കോഡിൽ (MBR) ബൂട്ടബിൾ എന്ന് രേഖപ്പെടുത്തിയിരിക്കും. ഏതൊക്കെ ഡിസ്ക് ഡ്രൈവുകൾ ഏത് ക്രമത്തിൽ പരിശോധിക്കണം എന്ന് ക്രമീകരിക്കാനുള്ള സൗകര്യങ്ങൾ ആധുനിക ബയോസുകൾ എല്ലാം നൽകുന്നുണ്ട്. ബൂട്ടബിൾ ആയ ഡിസ്കുകളുടെ മാസ്റ്റർ ബൂട്ട് റെക്കോഡിൽ അതിലുള്ള ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തെ മെമ്മറിയിലേക്ക് കൊണ്ടുവരാനുള്ള പ്രോഗ്രാം ഉണ്ടായിരിക്കും. കൂടുതൽ വിശദീകരണം ഇവിടെ. ബയോസ് ഈ പ്രോഗ്രാമിനെ ഡിസ്കിൽ നിന്ന് വായിച്ച് കമ്പ്യൂട്ടറിന്റെ റാമിൽ മുൻകൂട്ടി നിശ്ചയിക്കപ്പെട്ട ഒരു മെമ്മറി വിലാസത്തിലേക്ക് പകർത്തുന്നു. അതിനുശേഷം ആ വിലാസത്തിലുള്ള നിർദ്ദേശങ്ങൾ പാലിക്കാൻ പ്രോസസ്സറിനോട് ആവശ്യപ്പെടുന്നു. ഇത്രയുമാണ് ബൂട്ടിങ്ങ് സമയത്തെ ബയോസിന്റെ കടമകൾ. റാമിൽ പകർത്തപ്പെട്ട ഈ പ്രോഗ്രാം ബൂട്ട് ലോഡർ എന്നറിയപ്പെടുന്നു. ഇന്ന് ബൂട്ട് ലോഡറുകൾ പല ഘട്ടങ്ങളായി ആണ് പ്രവർത്തിക്കുക. അതിനാൽ ബയോസ് ലോഡ് ചെയ്യുന്ന ഈ ചെറിയ ഭാഗത്തെ ബൂട്ട് ലോഡറിന്റെ ഒന്നാം ഘട്ടം എന്ന് വിളിക്കാം. ഈ ഒന്നാം ഭാഗത്തിന്റെ ജോലി ഡിസ്കിൽ നിന്ന് അല്പം കൂടി വലിപ്പമുള്ള രണ്ടാം ഘട്ട പ്രോഗ്രാമിനെ റാമിലേക്ക് പകർത്തൽ ആണ്. പിസി മാനദണ്ഡങ്ങൾ അടിസ്ഥാനമാക്കി പ്രവർത്തിക്കുന്ന ബയോസ് ആദ്യഘട്ടത്തിൽ ഡിസ്കിന്റെ എംബിആറിൽ നിന്ന് 512 ബൈറ്റുകൾ മാത്രമേ വായിക്കൂ എന്നതിനാലാണ് ഈ രീതി ആവശ്യമായി വരുന്നത്.

ആം പ്രോസസ്സർ അധിഷ്ഠിതമായ സിസ്റ്റങ്ങൾ ബൂട്ടിങ്ങിനായി പ്രത്യേക മാനദണ്ഡങ്ങൾ ഒന്നും ഉപയോഗിക്കുന്നില്ലെങ്കിലും ഈ പ്രവർത്തനം മിക്കവാറും സിസ്റ്റങ്ങളിൽ സമാനമാണ്. മിക്ക ആം അധിഷ്ഠിത സിസ്റ്റങ്ങളും ആം അധിഷ്ഠിത എസ്ഒ‌സി (സിസ്റ്റം ഓൺ ചിപ്പ്) ആണ് ഉപയോഗിക്കപ്പെടുന്നത്. ടിഐ ഒമാപ് (TI OMAP), ക്വാൽക്കോം സ്നാപ്‌ഡ്രാഗൺ, സാംസങ്ങ് എക്സിനോസ് തുടങ്ങിയവ ഒക്കെ പ്രസിദ്ധമായ ചില ആം അധിഷ്ഠിത എസ് ഓ സി കൾ ആണ്. എസ് ഓ സി യിൽ പ്രോസസ്സർ കോർ, റാം, റോം, ഐ/ഒ കണ്ട്രോളറുകൾ തുടങ്ങിയവ എല്ലാം ഒരൊറ്റ ചിപ്പിൽ തന്നെ ഉൾക്കൊള്ളിച്ചിരിക്കും. ഇവയിൽ എല്ലാം ഒരു റീഡ് ഒൺലി മെമ്മറിയിൽ ബൂട്ട് റോം എന്ന പേരിൽ ഒരു ചെറിയ പ്രോഗ്രാം ഉണ്ടാകും. ഈ ബൂട്ട് റോം പിസിയിലെ ബയോസിന് സമാനമാണെന്ന് പറയാം. എന്നാൽ ബൂട്ടിങ്ങിനു ശേഷം അനുബന്ധ ഉപകരണങ്ങളെ പ്രവർത്തിപ്പിക്കാൻ ഈ ബൂട്ട് റോമിന്റെ ആവശ്യമില്ല. മിക്കവാറും ഒരു ബൂട്ട് ലോഡറിനെയോ പ്രോഗ്രാമിനെയോ പ്രവർത്തിപ്പികുക, ഡിസ്കിൽ നിന്നോ മെമ്മറി കാർഡിൽ നിന്നോ, സീരിയൽ/യുഎസ്ബി ഇന്റർഫേസുകളിൽ നിന്നോ പ്രോഗ്രാമുകൾ/ഡാറ്റ സ്വീകരിച്ച് ഫ്ലാഷ് മെമ്മറിയിലേക്ക് എഴുതുക തുടങ്ങിയ പല കാര്യങ്ങൾ ബൂട്ട് റോമുകൾ പിന്തുണക്കാറുണ്ട്. ഇതിന്റെ പ്രവർത്തനത്തിനായുള്ള ക്രമീകരണങ്ങൾ പിന്നുകളും ജമ്പറുകളും ഉപയോഗിച്ചാണ് ചെയ്യാറ്. ഒരു ആം അധിഷ്ഠിത ഡെവലപ്പ്മെന്റ് ബോർഡ് വാങ്ങിയാൽ എസ് ഡി കാർഡിൽ നിന്ന് ബൂട്ട് ചെയ്യാൻ, യു എസ് ബി യിൽ നിന്ന് ബൂട്ട് ചെയ്യാൻ എന്നിങ്ങനെ ജമ്പർ ക്രമീകരണങ്ങൾ അതിൽ പ്രതിപാദിച്ചിരിക്കും. (നിർബന്ധമില്ല). മൊബൈൽ ഫോണുകളിലും മറ്റും ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം, ബൂട്ട് ലോഡർ തുടങ്ങിയവ ഉണ്ടാവുക ഫ്ലാഷ് മെമ്മറിയിൽ ആയിരിക്കും. ചില ബോർഡുകൾ എസ് ഡി കാർഡുകളും ഉപയോഗിക്കാറുണ്ട്. പവർ ഓൺ ചെയ്യുമ്പോൾ ആദ്യം എസ് ഓ സി യിലെ ബൂട്ട് ലോഡർ എസ് ഡി/ഫ്ലാഷ് കണ്ട്രോളറുകൾ പ്രവർത്തനക്ഷമമാക്കുകയും ബോർഡിൽ ആവശ്യമായ ക്രമീകരണങ്ങൾ നടത്തുകയും ചെയ്യും. അതിനുശേഷം ഫ്ലാഷ്/എസ് ഡി കാർഡിൽ നിന്ന് ബൂട്ട് ലോഡർ റാമിലേക്ക് പകർത്തുകയും അതിനെ പ്രവർത്തിപ്പിക്കുകയും ചെയ്യും.

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

ലിനക്സ് കെർണൽ ഒരു മോണോലിത്തിക്ക് കെർണലാണ്. കമ്പൈൽ ചെയ്യപ്പെട്ട കെർണൽ ഒരൊറ്റ എക്സിക്യൂട്ടബിൾ ഫയൽ ആയിരിക്കും. ഈ ഫയൽ ഇ എൽ എഫ് ഫോർമാറ്റിൽ ആയിരിക്കും ഉണ്ടാവുക. മാത്രമല്ല വലിപ്പം കുറക്കാൻ ഇത് കമ്പ്രസ്സും ചെയ്തിരിക്കും. യു-ബൂട്ട് ബൂട്ട് ലോഡർ ആണ് ഉപയോഗിക്കുന്നതെങ്കിൽ അതിന് മനസ്സിലാകുന്ന യു ഇമേജ് എന്ന ഫോർമാറ്റിൽ ആയിരിക്കും കെർണൽ. ഇതിനെ ഡിസ്കിൽ നിന്ന് വായിച്ചെടുത്ത് മെമ്മറിയിലേക്ക് പകർത്തിയ ശേഷം അതിലെ ഇ എൽ എഫ് വിവരങ്ങൾ അനുസരിച്ച് അതിലെ വിവിധ സെഗ്മെന്റുകൾ മെമ്മറിയിൽ ക്രമീകരിക്കേണ്ടതുണ്ട്. ഇതും ബൂട്ട് ലോഡറിന്റെ കടമയാണ്. ലിനക്സ് കെർണലിനു മാത്രമല്ല, എല്ലാ എക്സിക്യൂട്ടബിൾ ഫയലുകൾക്കും പ്രവർത്തിക്കാൻ ഈ സഹായം ആവശ്യമാണ്. ലിനക്സ് കെർണൽ പ്രവർത്തിച്ച് തുടങ്ങിയാൽ കെർണൽ ഇത് ചെയ്തുകൊള്ളും.

ബൂട്ട് ലോഡർ ലിനക്സ് കെർണലിനെ മെമ്മറിയിൽ ക്രമീകരിച്ചതിനു ശേഷം നിയന്ത്രണം കെർണലിനു കൈമാറുന്നു. ഇവിടെ നിന്ന് സിസ്റ്റത്തിന്റെ പൂർണ്ണ നിയന്ത്രണം കെർണലിനായിരിക്കും. കെർണലിന്റെ സ്റ്റാർട്ടപ്പ് വിശദമായി അടുത്ത ഭാഗത്തിൽ.

Saturday, February 23, 2013

ഇന്റര്‍ പ്രോസസ്സ് കമ്യൂണിക്കേഷന്‍ - 2 : പൈപ്പുകള്‍

ഒന്നിലധികം പ്രോസസ്സുകള്‍ക്ക് ഒരു കുഴലിലൂടെ എന്നവണ്ണം വിവരങ്ങള്‍ കൈമാറാന്‍ സാധിക്കുന്ന ഒരുപാധിയാണ് പൈപ്പുകള്‍. ഇവക്ക് രണ്ട് അറ്റങ്ങള്‍ ഉണ്ടാകും. ഒരറ്റത്ത് എഴുതപ്പെടുന്ന വിവരങ്ങള്‍ അടുത്ത അറ്റത്തുനിന്ന് വായിച്ചെടുക്കാം. പൈപ്പുകള്‍ കമാന്റ്‌‌ ലൈന്‍ ഇന്റര്‍ഫേസുകളില്‍ നല്കുന്ന സൗകര്യങ്ങള്‍ ചില്ലറയല്ല. ഒരു കമാന്റിന്റെ ഔട്ട്പുട്ട് മറ്റൊരു കമാന്റിന്റെ ഇന്‍പുട്ടായി നല്‍കാന്‍ സാധിക്കുന്നത് വഴി ഒന്നിലധികം ലളിതമായ കമാന്റുകള്‍ ഉപയോഗിച്ച് ഒരു സങ്കീര്‍ണ്ണമായ ജോലി ചെയ്യാന്‍ സാധിക്കുമല്ലോ.

ഒരു പൈപ്പിന്റെ എഴുതാനുള്ള അറ്റത്ത് എഴുതപ്പെടുന്ന കാര്യങ്ങള്‍ മറ്റേ അറ്റത്തുനിന്ന് വായിക്കപ്പെടുന്നത് വരെ കെര്‍ണല്‍ അതിന്റെ മെമ്മറിയില്‍ സൂക്ഷിച്ചു വയ്ക്കുന്നു. ഇങ്ങനെ സൂക്ഷിക്കപ്പെടാന്‍ സാധിക്കുന്ന വിവരങ്ങളുടെ അളവ് സംബന്ധിച്ച് ചില നിബന്ധനകളോ നിയന്ത്രണങ്ങളോ ഉണ്ടെങ്കിലും വിവിധ സിസ്റ്റങ്ങളില്‍ അവ വ്യത്യസ്തമായിരിക്കും. പോസിക്സ് മാനദണ്ഡമനുസരിച്ച് ഇതിന്റെ വലിപ്പം കുറഞ്ഞത് 512 ബൈറ്റുകള്‍ ആയിരിക്കണം എന്നതാണ്. മെമ്മറിയുടെ ലഭ്യത അനുസരിച്ച് കൂടിയ വലിപ്പം എത്രവേണമെങ്കിലും ആകാം. ലിനക്സില്‍ ഇത് 4096 ബൈറ്റുകള്‍ ആണ്. അതായത് ലിനക്സിലെ ഒരു പൈപ്പിന് സംഭരിക്കാന്‍ സാധിക്കുന്ന ഡാറ്റയുടെ പരമാവധി വലിപ്പം 4096 ബൈറ്റുകള്‍ ആണ്. ഇതില്‍ കൂടുതല്‍ ഡാറ്റ കൈമാറ്റം ചെയ്യേണ്ടത് ആവശ്യമാണെങ്കില്‍ എഴുതുന്ന പ്രോസസ്സിന് തുടര്‍ച്ചയായി എഴുതുന്നതില്‍ നിയന്ത്രണങ്ങള്‍ ഒന്നും ഇല്ല. എന്നാല്‍ പൈപ്പ് ഒരിക്കല്‍ നിറഞ്ഞ് കഴിഞ്ഞാല്‍ മറ്റൊരു പ്രോസസ്സ് അതില്‍ നിന്ന് ഡാറ്റ വായിക്കുന്നത് വരെ ഈ എഴുത്തിന് തുടരാന്‍ സാധിക്കുകയില്ല. വായിക്കേണ്ട അറ്റത്ത് നിന്നും ഒരു പ്രോസസ്സ് ഡാറ്റ വായിച്ചെടുത്ത് കഴിഞ്ഞാല്‍ ആ വായിച്ച അത്ര വിവരങ്ങള്‍ പൈപ്പില്‍ നിന്ന് നീക്കം ചെയ്യപ്പെടുന്നു. കൂടുതല്‍ വിവരങ്ങള്‍ എഴുതാന്‍ പ്രോസസ്സ് കാത്തുനില്‍ക്കുന്നുണ്ടെങ്കില്‍ അതിന് ഈ കാലിലായ സ്ഥലം നിറയുന്നത് വരെ വീണ്ടും എഴുതാവുന്നതാണ്.

പൈപ്പിലേക്ക് വിവരങ്ങള്‍ എഴുതുകയോ പൈപ്പില്‍ നിന്ന് വായിക്കുകയോ ചെയ്യുന്ന സമയത്ത് എഴുതാന്‍ സ്ഥലമില്ലാതെ വരിക/വായിക്കാന്‍ പൈപ്പില്‍ വിവരങ്ങള്‍ ഇല്ലാതെ വരിക എന്ന രണ്ട് സാഹചര്യങ്ങള്‍ ഉണ്ടാകാം. ഈ അവസരങ്ങളില്‍ അതിനായി ശ്രമിക്കുന്ന പ്രോസസ്സ് എങ്ങനെ പെരുമാറും എന്നതിന്റെ അടിസ്ഥാനത്തില്‍ ഇന്‍പുട്ട്/ഔട്ട്പുട്ട് പ്രക്രിയകള്‍ രണ്ട് തരത്തില്‍ ആകാം. (ഇവ ബാക്കി ഫയൽ ഇൻപുട്ട്/ഔട്ട്പുട്ടുകൾക്കും ബാധകമാണ്)

1. ബ്ലോക്കിങ്ങ് ഐഒ: പൈപ്പിലേക്ക്/ഫയലിലേക്ക് എഴുതാനോ അവയിൽ നിന്ന് വായിക്കാനോ ശ്രമിക്കുമ്പോൾ വിവരം/സ്ഥലം ലഭ്യമല്ലെങ്കിൽ കെർണൽ ആ പ്രോസസ്സിനെ താൽക്കാലികമായി സസ്പെൻഡ് ചെയ്യുന്നു. പ്രോസസ്സ് വെയിറ്റ് അവസ്ഥയിലേക്ക് പോകും. വിവരങ്ങൾ ലഭ്യമാകുമ്പോൾ പഴയ നിലയിലേക്ക് തിരിച്ച് വരികയും പ്രവർത്തനം തുടരുകയും ചെയ്യും. ശരിക്കും ഈ അവസ്ഥാ മാറ്റങ്ങളൊക്കെ പ്രോസസ്സിന്റെ അറിവോടെ അല്ല നടക്കുന്നത്.

2. നോൺ ബ്ലോക്കിങ്ങ് ഐഒ: ഈ രീതിയിലാണെങ്കിൽ വിവരങ്ങൾ/സ്ഥലം ലഭ്യമല്ലാതെ വരുമ്പോൾ ആ റൈറ്റ്/റീഡ് പ്രോസസ്സ് താൽക്കാലികമായി ആ പ്രവർത്തനം സാധ്യമല്ല എന്ന എറർ കോഡോടെ അവസാനിപ്പിക്കപ്പെടുന്നു. ഇവിടെ പ്രോസസ്സ് വിവര/സ്ഥല ലഭ്യതക്കായി കാത്തു നിൽക്കുന്നില്ല.

ആദ്യമേ‌ തന്നെ സൂചിപ്പിച്ചതുപോലെ പൈപ്പുകള്‍ രണ്ട് വിധത്തിലുണ്ട്. പേരുള്ളവയും ഇല്ലാത്തവയും. ആദ്യം പേരില്ലാത്ത പൈപ്പുകളെക്കുറിച്ച് വിശദീകരിക്കാം.

പേരില്ലാത്ത പൈപ്പുകള്‍ (Unnamed Pipes)
ഇത്തരം പൈപ്പുകളുടെ സവിശേഷത അവയെ  പരസ്പരം ബന്ധപ്പെട്ടിട്ടില്ലാത്ത പ്രോസസ്സുകള്‍ക്ക് ഉപയോഗിക്കാന്‍ സാധിക്കില്ല എന്നതാണ്‌. ഈ പൈപ്പിനെ സൃഷ്ടിക്കുന്ന പ്രോസസ്സിനും അതിന്റെ ചൈല്‍ഡ് പ്രോസസ്സുകള്‍ക്കും മാത്രമേ ഈ പൈപ്പ് ഉപയോഗിക്കാന്‍ സാധിക്കുകയുള്ളു.ഒരു പ്രോസസ്സ് അതിൽ തുറന്ന് വച്ചിരിക്കുന്ന ഫയലുകളൊക്കെ തുറന്നതിനു ശേഷം സൃഷ്ടിക്കപ്പെടുന്ന ചൈൽഡ് പ്രോസസ്സുകൾക്ക് കൂടി ഉപയോഗിക്കാൻ സാധിക്കും എന്നതാണ് ഇതിന്റെ അടിസ്ഥാനം. എന്നാൽ മറ്റൊരു പ്രോസസ്സിന് തുറക്കാൻ പാകത്തിൽ ഈ പൈപ്പുമായി ബന്ധപ്പെട്ട ഫയൽ ഡിസ്കിലോ ഫയൽ സിസ്റ്റത്തിലോ കാണില്ല. അതിനാൽത്തന്നെ അതിനെ സൃഷ്ടിച്ച പ്രോസസ്സിന് മാത്രമേ അതിനെക്കുറിച്ചുള്ള വിവരങ്ങളും ലഭ്യമാവുകയുള്ളു. ഇവയുടെ ഉപയോഗത്തിന് താഴെക്കൊടുത്തിരിക്കുന്ന ഉദാഹരണം നോക്കൂ,

 /* Creating an unnamed pipe */  
 #include <unistd.h>  
 #include <stdio.h>  
   
 int main(void)  
 {  
     int fd[2];  
     pid_t pid;  
   
     char hello[] = "Hello child";  
     char reply[] = "Got it parent..";  
     char buffer[100];  
   
     if (pipe(fd) == -1) {  
         perror("pipe");  
         return;  
     }  
   
     pid = fork();  
     if (pid < 0) {  
         perror("fork");  
         return;  
     }  
   
     if (pid != 0) {  
         printf("\nParent: writing hello to pipe\n");  
         printf("Wrote %d bytes\n",write(fd[1],hello,sizeof(hello)));  
         sleep(2);  
         printf("\nParent: Reading pipe\n");  
         printf("Read %d bytes\n",read(fd[0],buffer,sizeof(buffer)));  
         printf("Data: %s\n\n",buffer);  
         return;  
     } else {  
         sleep(1);  
         printf("\nChild: Reading pipe\n");  
         printf("Read %d bytes\n",read(fd[0],buffer,sizeof(buffer)));  
         printf("Data: %s\n",buffer);  
         printf("\nChild: writing reply to pipe\n");  
         printf("Wrote %d bytes\n",write(fd[1],reply,sizeof(reply)));  
         return;  
     }  
   
     return 0;  
 }  
   

പേരില്ലാത്ത പൈപ്പുകള്‍ സൃഷ്ടിക്കാന്‍ pipe() സിസ്റ്റം  കോളാണ് ഉപയോഗിക്കുന്നത്. ഇതിന്റെ ആര്‍ഗ്യുമെന്റായി നല്‍കുന്നത് രണ്ട് ഫയല്‍ ഡിസ്ക്രിപ്റ്ററുകള്‍ ഉള്ള ഒരു അറേ ആണ്. ഇതില്‍ ഒരെണ്ണം  ആ പൈപ്പിന്റെ റീഡ് എന്‍ഡും  മറ്റേത് റൈറ്റ് എന്‍ഡും  ആണ്. fd[0] പൈപ്പില്‍ നിന്ന് വായിക്കാനും  fd[1] പൈപ്പിലേക്ക് എഴുതാനും  ഉപയോഗിക്കുന്നു. ഒരു ചൈല്‍ഡ് പ്രോസസ്സിന് അതിന്റെ പേരന്റ് പ്രോസസ്സില്‍ തുറക്കപ്പെട്ട എല്ലാ ഫയല്‍ ഡിസ്ക്രിപ്റ്ററുകളും  ലഭ്യമാകും. അതിനാല്‍ പൈപ്പ് സൃഷ്ടിക്കപ്പെടുന്നത് fork നടക്കുന്നതിന്റെ മുന്‍പ് ആയിരിക്കണം. പ്രോഗ്രാമിലെ fork ഉപയോഗത്തെ പറ്റി സംശയമുണ്ടെങ്കില്‍ പ്രോസസ്സ് മാനേജ്മെന്റ് പോസ്റ്റിലെ ഫോര്‍ക്കിന്റെ ഉപയോഗം  പരാമര്‍ശിച്ചിരിക്കുന്ന ലേഖനം  വായിക്കൂ.

പേരുള്ള പൈപ്പുകൾ (Named Pipes) ഈ പൈപ്പുകൾ ഫയൽ സിസ്റ്റത്തിൽ സാധാരണ ഫയലുകളെ പോലെ തന്നെ പ്രവർത്തിക്കുന്നു. അതിനാൽ ഈ ഫയലുകളുടെ പേരറിയുന്ന ഏത് പ്രോസസ്സിനും അതറിയാവുന്ന മറ്റ് പ്രോസസ്സുകളുമായുള്ള ആശയവിനിമയത്തിന് ഈ പൈപ്പ് ഉപയോഗിക്കാം. പേരുള്ള പൈപ്പുകള്‍ സൃഷ്ടിക്കാന്‍ ഉപയോഗിക്കുന്ന സിസ്റ്റം  കോള്‍ mkfifo ആണ്. ഇതിന്റെ ഉപയോഗം  താഴെപ്പറയുന്നത് പോലെ ആണ്,

int mkfifo(const char *pathname, mode_t mode);

ആദ്യത്തെ പരാമീറ്റര്‍ പൈപ്പിന്റെ പാത്ത് ആണ്. ഫയല്‍ സിസ്റ്റത്തിലെ ഏത് പാത്ത് വേണമെങ്കിലും  നല്കാവുന്നതാണ്. ഒരു സാധാരണ ഫയല്‍ നിര്‍മ്മിക്കപ്പെടുമ്പോളുള്ള പരിമിതികള്‍ ഒക്കെ ഇവിടെയും ബാധകമായിരിക്കും. രണ്ടാമത്തെ പരാമീറ്റര്‍ ആ പൈപ്പിന്റെ അനുമതികള്‍ നിര്‍ണ്ണയിക്കുന്നു. (ഫയല്‍ അനുമതികളെക്കുറിച്ചുള്ള പോസ്റ്റ് കാണുക). വിജയകരമായി ഒരു പൈപ്പ് നിര്‍മ്മിക്കപ്പെട്ടാല്‍ ഈ സിസ്റ്റം  കോള്‍ 0 റിട്ടേണ്‍ ചെയ്യുന്നു. വിജയകരമല്ലെങ്കില്‍ -1. ഉദാഹരണത്തിന്

mkfifo("myfifo", 0644);

എന്ന രീതിയില്‍ ഉപയോഗിച്ചാല്‍ അപ്പോളത്തെ വര്‍ക്കിങ്ങ് ഡയറക്ടറിയില്‍ myfifo എന്ന പേരില്‍ ഈ പൈപ്പ് സൃഷ്ടിക്കപ്പെടും. ഉപഭോക്താവിന് വായിക്കാനും  എഴുതാനും  ബാക്കിയുള്ളവര്‍ക്ക് എഴുതാന്‍ മാത്രവും  ഉള്ള അനുമതികളായിരിക്കും  ഇതിന് നല്‍കപ്പെടുക. സൃഷ്ടിക്കപ്പെട്ടതിന് ശേഷം  open, read, write, close സിസ്റ്റം  കോളൂകളുപയോഗിച്ച് മറ്റ് ഫയലുകളെ കൈകാര്യം  ചെയ്യുന്നത് പോലെ തന്നെ ഇവയേയും  കൈകാര്യം  ചെയ്യാവുന്നതാണ്.