Saturday, September 29, 2012

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

വിര്‍ച്ച്വല്‍ മെമ്മറി

വിര്‍ച്ച്വല്‍ മെമ്മറിയുടെ ആവശ്യകതയെക്കുറിച്ചും  അത് എന്താണെന്നും  ഇതിനു മുന്‍പത്തെ പോസ്റ്റില്‍ പറഞ്ഞു. അതിന്റെ പ്രവര്‍ത്തന രീതികളെക്കുറിച്ച് വിശദമായി. ഇന്ന് ഡെസ്ക്‌‌ടോപ്പ് കമ്പ്യൂട്ടറുകളില്‍ ഏറ്റവുമധികം  ഉപയോഗിക്കപ്പെടുന്ന ഇന്റലിന്റെ x86 കുടുംബത്തിലുള്ള പ്രോസസറുകളുടെ പ്രവര്‍ത്തന രീതി അടിസ്ഥാനമാക്കിയാണ് തുടര്‍ന്നുള്ള വിശദീകരണങ്ങള്‍. വിര്‍ച്ച്വല്‍ മെമ്മറിയുടെ പ്രവര്‍ത്തനത്തെ കാണിക്കുന്ന ചിത്രം നോക്കൂ,
കടപ്പാട്: വിക്കിപീഡിയ
ലഭ്യമായ റാമും ഹാര്‍ഡ് ഡിസ്കും  ചേര്‍ന്നതാണ് വിര്‍ച്ച്വല്‍ മെമ്മറി. ഇന്നത്തെ മിക്കവാറും ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളും  ഓരോ പ്രോസസിനും  അതിന്റെ സ്വന്തമായ ഒരു അഡ്രസ് സ്പേസ് അനുവദിക്കുന്നു. ആ പ്രോഗ്രാമും  അതിന്റെ അനുബന്ധ ഫയലുകളും  ഒക്കെ ലോഡ് ചെയ്യാനുള്ള അഡ്രസ്സുകളുടെ പരിധിയെ ആണ് അഡ്രസ്സ് സ്പേസ് എന്ന് വിളിക്കുന്നത്. ഓരോ പ്രോഗ്രാമിനും  അതിനുള്ളിലെ ഫങ്ഷനുകള്‍, വേരിയബിളുകള്‍ തുടങ്ങിയവക്കൊക്കെ കമ്പൈലര്‍ തന്നെ നല്‍കിയിരിക്കുന്ന അഡ്രസ്സ് ഉണ്ടാകും. ഇതിന്റെ തുടക്കവും  ഒടുക്കവുമൊക്കെ എല്ലാ പ്രോഗ്രാമുകളിലും  ഒന്നായിരിക്കും. ഈ അഡ്രസ്സുകളെ വിര്‍ച്ച്വല്‍ അഡ്രസ്സ് എന്നാണ് വിളിക്കുന്നത്. ഈ അഡ്രസ്സ് റാമിലെ ശരിക്കുമുള്ള അഡ്രസ്സുമായി ബന്ധമില്ലാത്തതാണ്. എന്ന് മാത്രവുമല്ല കുറച്ച് മാത്രം റാം ഉള്ള കമ്പ്യൂട്ടറുകളില്‍ ചിലപ്പോഴൊന്നും  ആ അഡ്രസ്സുകള്‍ ഉണ്ടായിരിക്കുകയുമില്ല. ഒരു 32ബിറ്റ് പ്രോസസറിന്  നാല് ജി ബി വരെയുള്ള അഡ്രസ്സുകളെ കൈകാര്യം ചെയ്യാന്‍ സാധിക്കും. (2^32 = 4294967296). ഇന്നത്തെ മിക്കവാറും  കമ്പ്യൂട്ടറുകളില്‍ ഇത്രയും  തന്നെ റാം ഉണ്ടായിരിക്കുമല്ലോ. അപ്പോള്‍ വിര്‍ച്ച്വല്‍ മെമ്മറി ശരിക്കും  ആവശ്യമാണോ എന്ന സംശയം സ്വാഭാവികമായും  ഉണ്ടാകാം. ഈ 4 ജി ബി റാമില്‍ തന്നെ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം, ആ സമയത്ത് പ്രവര്‍ത്തിക്കുന്ന വിവിധ പ്രോഗ്രാമുകള്‍ എന്നിവക്കൊക്കെ സ്ഥലം‌‌ കണ്ടെത്തണം. എക്സിക്യൂട്ടബിള്‍ ഫയലിന്റെ വലിപ്പമല്ല ഒരു പ്രോഗ്രാമിന് പ്രവര്‍ത്തന സമയത്ത് ആവശ്യമായി വരുന്ന മെമ്മറിയുടെ വലിപ്പം  എന്ന കാര്യം ഓര്‍ക്കേണ്ടതാണ്. കമ്പ്യൂട്ടറിന്റെ അടിസ്ഥാന പ്രമാണങ്ങളില്‍ ഒന്നാണ് കൈകാര്യം ചെയ്യപ്പെടണ്ട വിവരങ്ങള്‍ നിര്‍ബന്ധമായും  മെമ്മറിയില്‍ ഉണ്ടായിരിക്കണം എന്നത്. 800x600 റെസല്യൂഷന്‍ ഉള്ള ഒരു ചിത്രം കൈകാര്യം ചെയ്യുന്ന ഒരു പ്രോഗ്രാമിന് ഈ ചിത്രത്തിന്റെ വിവരങ്ങള്‍ മുഴുവന്‍ മെമ്മറിയില്‍ സൂക്ഷിക്കണമെങ്കില്‍, 8ബിറ്റ് ആര്‍ജി‌‌ബി ചിത്രമാണെങ്കില്‍ 800x600x8x3 ബൈറ്റുകള്‍ ആവശ്യമായി വരും. ആകെ 11520000 ബൈറ്റുകള്‍ (10.986328125എംബി). ഈ പത്ത് എംബി ഈ പ്രോഗ്രാമിന്റെ എക്സിക്യൂട്ടബിള്‍ ഫയലില്‍ ഉള്‍പ്പെടുന്നില്ല. ആ ഫയലിന്റെ വലിപ്പം ഇതിലും  കുറവായിരിക്കുകയും  ചെയ്യാം. എന്നാല്‍ ആ ഫയലിന്റെ അകത്ത് രേഖപ്പെടുത്തിയിരിക്കുന്ന അഡ്രസ്സുകളില്‍ ഈ ഭാഗം കൂടി ഉണ്ടായിരിക്കും. മെമ്മറിയില്‍ ലോഡ് ചെയ്യപ്പെടുന്ന അവസരത്തില്‍ അതിന് ഈ അഡ്രസ്സുകള്‍ കൂടി നല്‍കേണ്ടതുണ്ട്. ഒരു പ്രോഗ്രാം പ്രവര്‍ത്തിക്കുമ്പോള്‍ സിസ്റ്റം മോണിറ്റര്‍/ടാസ്ക് മാനേജര്‍ തുറന്ന് ആ പ്രോഗ്രാം ഉപയോഗിക്കുന്ന മെമ്മറിയുടെ അളവ് നോക്കൂ, പിന്നെആ പ്രോഗ്രാമിന്റെ എക്സിക്യൂട്ടബിള്‍ ഫയലിന്റെ വലിപ്പവും. അപ്പോള്‍ഈ വ്യത്യാസം മനസ്സിലാകും. ചിലപ്പോളൊക്കെ ആപ്രോഗ്രാം മറ്റ് പ്രോഗ്രാമുകളെ പ്രവര്‍ത്തിപ്പിക്കുന്നുണ്ടാകും. അതിനാല്‍ ആദ്യത്തെ പ്രോഗ്രാം തന്നെയാണ് ആ മെമ്മറി മുഴുവന്‍ ഉപയോഗിക്കുന്നത് എന്ന് കരുതരുത്.

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

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

 പ്രോഗ്രാമുകളില്‍ ഉപയോഗിക്കുന്നത് വിര്‍ച്ച്വല്‍ അഡ്രസ്സുകള്‍ ആണെന്ന് നേരത്തേ‌ പറഞ്ഞു. ചില പ്രോസസറുകള്‍ ഈ വിര്‍ച്ച്വല്‍ അഡ്രസ് തന്നെ ഉപയോഗിക്കും. മിക്കവാറും അത് പ്രോസസര്‍ പ്രവര്‍ത്തിക്കുന്ന മോഡിനെ അടിസ്ഥാനമാക്കിയിരിക്കും. ഉദാഹരണത്തിന് ഇന്റല്‍ പ്രോസസറുകള്‍ പ്രവര്‍ത്തിച്ച് തുടങ്ങുമ്പോള്‍ റിയല്‍ മോഡില്‍ ആണ് ഉണ്ടാവുക. അവക്ക് ആ സമയത്ത് 16 ബിറ്റ് അഡ്രസ്സുകള്‍ മാത്രമേ കൈകര്യം ചെയ്യാന്‍ സാധിക്കുകയുള്ളു. ഈ അഡ്രസ്സുകള്‍ റാമിലുള്ള ഫിസിക്കല്‍ അഡ്രസ്സുകള്‍ ആയിരിക്കും. ഇതിനെ പിന്നീട് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം പ്രൊട്ടക്റ്റഡ് മോഡിലേക്ക് മാറ്റും. അതിനു ശേഷം അവ വിര്‍ച്ച്വല്‍ അഡ്രസ്സുകള്‍ ആയിരിക്കും ഉപയോഗിക്കുന്നത്. പ്രോസസര്‍ വിര്‍ച്ച്വല്‍ അഡ്രസ്സ് ഉപയോഗിച്ചാലും ആ അഡ്രസ്സില്‍ ഉള്ള വിവരങ്ങള്‍ റാമില്‍ ആയിരിക്കുമല്ലോ ഉണ്ടാകുന്നത്. പ്രോസസറിനാവശ്യമായ വിവരങ്ങള്‍ റാമില്‍ നിന്ന് എത്തിച്ചുകൊടുക്കുന്ന ഭാഗത്തിന് ആ അഡ്രസ്സുമായി ബന്ധപ്പെട്ട റാമിലെ ഫിസിക്കല്‍ അഡ്രസ് അറിയേണ്ടതുണ്ട്. ഇത് ചെയ്യുന്നത് മെമ്മറി മാനേജ്‌‌മെന്റ് യൂണിറ്റ് (mmu) ആണ്. ചില പ്രോസസറുകള്‍ക്കുള്ളില്‍ തന്നെ ഈ ഭാഗം ഉണ്ടായിരിക്കും. ഇത് പ്രത്യേകം ചിപ്പില്‍ പ്രോസസറിന് പുറത്തും  ആകാം. പ്രോസസര്‍ ഉപയോഗിക്കുന്ന വിര്‍ച്ച്വല്‍ അഡ്രസ്സില്‍ (പ്രോസസറിന്റെ കാര്യത്തില്‍ ഇതിനെ ലോജിക്കല്‍ അഡ്രസ്സ് എന്ന് പറയാറുണ്ട്) ഒരു ഭാഗം പേജിന്റെ അഡ്രസ്സും (ബേസ് അഡ്രസ്സ്) ബാക്കിഭാഗം ആ പേജിനുള്ളിലെ ഒരു സ്ഥാനവും  (ഓഫ്‌‌സെറ്റ് - അതായത് വേണ്ട വിവരം ആ പേജിന്റെ തുടക്കത്തില്‍ നിന്ന് എത്ര ബൈറ്റ് മാറിയാണ് എന്നത്) ആയിരിക്കും. എംഎംയു പേജുകളുടെ റാമിലുള്ള അഡ്രസ് ഉള്‍പ്പെടുന്ന ഒരു പട്ടിക സൂക്ഷിച്ചിരിക്കുന്നു. ഇതിനെ ടി എല്‍ ബി (TLB - Translation Look-aside Buffer) എന്ന് പറയുന്നു. ടി എല്‍ ബിയിലെ ഓരോ വിവരത്തെയും പേജ് ടേബിള്‍ എന്‍ട്രി (PTE - Page Table Entry) എന്ന് പറയുന്നു. ഇതില്‍ ഓരോ പേജിന്റെയും റാമിലെ ശരിക്കുള്ള അഡ്രസ്സ്, ആ പേജിന് മെമ്മറിയില്‍ എത്തിയതിനു ശേഷം മാറ്റം സംഭവിച്ചിട്ടുണ്ടോ, ഏതൊക്കെ പ്രോസസുകള്‍ക്ക് ആ പേജ് വായിക്കാനോ മാറ്റം വരുത്താനോ അനുവാദമുണ്ട് എന്ന വിവരങ്ങള്‍ ഒക്കെ ഉണ്ടാകും. ഈ ചിത്രം നോക്കൂ,
ചിത്രത്തിന് കടപ്പാട്: വിക്കിപീഡിയ
പ്രവര്‍ത്തനത്തിന് കൂടുതല്‍ പേജുകള്‍ ആവശ്യമായി വരികയും റാമില്‍ അവയെ ഉള്‍ക്കൊള്ളാനുള്ള സ്ഥലം ഇല്ലാതിരിക്കുകയും  ചെയ്യുമ്പോള്‍ അവയെ ഹാര്‍ഡ് ഡിസ്കിലേക്ക് താല്‍ക്കാലികമായി മാറ്റുന്നു. സ്വാപ്പിങ്ങ് എന്നാണ് ഈ പ്രക്രിയയെ വിളിക്കുന്നത്. മിക്കവാറും യൂണിക്സ്/ലിനക്സ് സിസ്റ്റങ്ങളില്‍ ഇതിനായി ഒരു പ്രത്യേക ഡിസ്ക് പാര്‍ട്ടീഷ്യന്‍ തന്നെ കാണുമല്ലോ. ഹാര്‍ഡ് ഡിസ്കിലേക്ക് വിവരങ്ങള്‍ എഴുതുന്നത് അധികം സമയം വേണ്ട പ്രക്രിയ ആയതിനാല്‍ സ്വാപ്പിങ്ങ് കമ്പ്യൂട്ടറിന്റെ വേഗതയെ ബാധിക്കും. ചിലപ്പോളൊക്കെ ആവശ്യമായ പേജ് ഡിസ്കില്‍ നിന്ന് മെമ്മറിയില്‍ എത്തിക്കാന്‍ മെമ്മറിയില്‍ ഉള്ള പേജുകളെ നീക്കം ചെയ്യേണ്ടിവരും. അപ്പോള്‍ നീക്കം ചെയ്ത പേജ് ഉടനെ തന്നെ ആവശ്യമായി വന്നാല്‍ വേറൊരു പേജിനെ നീക്കം ചെയ്ത ശേഷം ആ പേജിനെ മെമ്മറിയിലേക്ക് കൊണ്ടുവരേണ്ടിവരും. ഇത് തുടര്‍ന്നുകൊണ്ടിരുന്നാല്‍ കമ്പ്യൂട്ടര്‍ ആകെ മന്ദഗതിയില്‍ ആവുകയും പ്രോഗ്രാമുകള്‍ പ്രവര്‍ത്തിക്കാത്തതുപോലെ തോന്നുകയും ചെയ്യും. ട്രാഷിങ്ങ് (Trashing) എന്നാണ് ഈ അവസ്ഥയുടെ പേര്. ഇത് അത്ര സാധാരണയായ ഒരു അവസ്ഥയല്ല.

ഒരേ പ്രോഗ്രാമിന്റെ തന്നെ വിവിധ പേജുകള്‍ മെമ്മറിയില്‍ തുടര്‍ച്ചയല്ലാത്ത സ്ഥലങ്ങളില്‍ ആയിരിക്കാം. ഇത് ഫ്രാഗ്മെന്റേഷന്‍ എന്നറിയപ്പെടുന്നു. എന്നാല്‍ ഇതൊന്നും ഒരിക്കലും  പ്രവര്‍ത്തിച്ചുകൊണ്ടിരിക്കുന്ന പ്രോഗ്രാം അറിയുന്നില്ല. പ്രോഗ്രാമിന്റെ നോട്ടത്തില്‍ അതിന് തുടര്‍ച്ചയായ, വളരെ വലിപ്പമുള്ള ഒരു മെമ്മറി സ്പേസ് ഉള്ളതായാണ് തോന്നുക. ഇത് തന്നെയാണ് വിര്‍ച്ച്വല്‍ മെമ്മറിയുടെ ഉദ്ദേശ്യവും.

Wednesday, September 26, 2012

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

ഒരു പ്രോഗ്രാമിനെ പ്രോസസ്സ് ആക്കി മാറ്റാന്‍ അതിനെ ഡിസ്കില്‍ നിന്ന് റാമിലേക്ക് കൊണ്ടുവരേണ്ടതുണ്ട്. മിക്കവാറും കമ്പ്യൂട്ടറുകളില്‍ ലഭ്യമായ ആകെ റാമിന്റെ വലിപ്പം പ്രോഗ്രാമിന്റെ വലിപ്പത്തെക്കാള്‍ കുറവായിരിക്കും. ഇന്നുള്ള മിക്കവാറും  സിസ്റ്റങ്ങളില്‍ ഈ പ്രശ്നമില്ലെങ്കില്‍ കൂടി ഒന്നിലധികം  പ്രോഗ്രാമുകള്‍ പ്രവര്‍ത്തിക്കുമ്പോള്‍ ആകെയുള്ള റാം തികയാതെ വരും. ഒരു കമ്പ്യൂട്ടറില്‍ ഉള്ള മുഴുവന്‍ റാമും സാധാരണ പ്രോഗ്രാമുകള്‍ക്ക് ഉപയോഗിക്കാന്‍ സാധിക്കുകയില്ല. അതില്‍ തന്നെ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം, ഹാര്‍ഡ് ഡിസ്കിനായുള്ള കാഷ്/കാഷെ ഒക്കെ വേണം. സാധാരണ ഹാര്‍ഡ് ഡിസ്കില്‍ നിന്ന് വിവരങ്ങള്‍ വായിക്കേണ്ടിവരികയും  എഴുതേണ്ടിവരികയും  ഒക്കെ ചെയ്യുമ്പോള്‍ നേരിട്ട് ഡിസ്കിലേക്ക് അപ്പോള്‍ തന്നെ ഡാറ്റ എഴുതില്ല. അത് മെയിന്‍ മെമ്മറിയിലുള്ള ബഫര്‍ കാഷിലേക്ക് ആണ് പോകുന്നത്. ഡിസ്കിലേക്ക് വിവരങ്ങള്‍ എഴുതാന്‍ സമയം കൂടുതല്‍ വേണമെന്നതിനാല്‍ അവയെ പിന്നീട് സൗകര്യമനുസരിച്ച് ഡിസ്കിലേക്ക് എഴുതുകയാണ് ചെയ്യാറ്. കമ്പ്യൂട്ടറുകള്‍ ശരിയായി ഷട്ട് ഡൗണ്‍ ചെയ്യാതെ ഓഫാക്കുമ്പോള്‍ വിവരങ്ങള്‍ നഷ്ടപ്പെടുന്നതിന്റെ പ്രധാന കാരണം ഇതാണ്.

ഈ മെമ്മറി പ്രശ്നം പരിഹരിക്കാന്‍ വിര്‍ച്ച്വല്‍ മെമ്മറി എന്ന സംവിധാനം ഉപയോഗിക്കുന്നു. വിര്‍ച്ച്വല്‍ എന്നതിന്റെ അര്‍ഥം സൂചിപ്പിക്കുന്നത് പോലെതന്നെ ശരിക്ക് ഇല്ലാത്തതും  എന്നാല്‍ ഉണ്ടന്ന് തോന്നിപ്പിക്കുന്നതും  ആയ ഒരു മെമ്മറി. ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളിലെ മെമ്മറി മാനേജ്മെന്റ് യൂണിറ്റ് ആണ് ഈ സംവിധാനത്തെ പ്രവര്‍ത്തിപ്പിക്കുന്നത്. ശരിക്കും വിര്‍ച്ച്വല്‍ മെമ്മറി പ്രോസസറിന് ഒരു അധിക ഭാരമാണ്. എന്നാല്‍ ഇതില്ലാതെ പ്രവര്‍ത്തിക്കുക വിഷമവും  ആണ്. വളരെ വേഗത ആവശ്യമായ ആര്‍റ്റിഒഎസ്സുകളില്‍ പൊതുവെ വിര്‍ച്ച്വല്‍ മെമ്മറി ഉപയോഗിക്കാറില്ല. ഇന്നുള്ള മിക്കവാറും പ്രോസസറുകളില്‍ ഈ മെമ്മറി മാനേജ്‌‌മെന്റ് എളുപ്പത്തിലാക്കാനുള്ള സംവിധാനങ്ങള്‍ ഉണ്ട്. പേജ് ടേബിളുകളും സെഗ്‌‌മന്റ് രെജിസ്റ്ററുകളും ഒക്കെ.

മെമ്മറി മാനേജ്മെന്റിനെക്കുറിച്ച് പറയുമ്പോള്‍ കാഷ് മെമ്മറി കൂടി പരാമര്‍ശിക്കേണ്ടതായുണ്ട്. പ്രോസസറുകളുടെ ഒക്കെ പരസ്യം കാണുമ്പോള്‍ 2എംബി എല്‍2 കാഷ് എന്നൊക്കെ എഴുതിയിരിക്കുന്നത് കാണാമല്ലോ. പ്രോസസറുകള്‍ വളരെ വേഗത്തില്‍ പ്രവര്‍ത്തിക്കുന്നവയാണ്. 1GHz ഒക്കെ വേഗതയുള്ളവ ഇന്ന് സാധാരണയാണല്ലോ. എന്നാല്‍ റാം ഉള്‍പ്പെടെയുള്ള മെമ്മറികള്‍ക്ക് ഇത്ര വേഗതയില്ല. മാത്രമല്ല കമ്പ്യൂട്ടറിലെ മദര്‍ബോര്‍ഡില്‍ വിവര കൈമാറ്റത്തിനായുള്ള ബസ്സുകള്‍ക്കും  ഇത്ര വേഗതയില്ല. 733MHz ഒക്കെയാണ് ഇന്ന് സാധാരണയായുള്ള ബസ് വേഗത. അതിനാല്‍ത്തന്നെ പ്രോസസ് ചെയ്യാനാവശ്യമായ വിവരങ്ങള്‍ മെമ്മറിയില്‍ നിന്ന് വായിച്ചെടുക്കുന്ന സമയത്ത് പ്രോസസര്‍ ഉപകാരപ്രദമായ കാര്യങ്ങള്‍ ഒന്നും  തന്നെ ചെയ്യുന്നില്ല. മേല്‍പ്പറഞ്ഞ വേഗതകള്‍ ഉള്ള സിസ്റ്റങ്ങളില്‍ ആകെ സമയത്തിന്റെ പത്തിലൊന്‍പതും വിവരങ്ങള്‍ക്കായി കാത്തിരിക്കുകയാണ് പ്രോസസര്‍ ചെയ്യുന്നത്. ഈ പ്രശ്നത്തിന് ഒരു ചെറിയ പരിഹാരമാണ് കാഷ് മെമ്മറി. ഇത് പ്രോസസറിനുള്ളില്‍ തന്നെ ഉള്ള വേഗത കൂടിയ ഒരു മെമ്മറിയാണ്. കൂടെക്കൂടെ ഉപയോഗിക്കേണ്ടിവരുന്ന പ്രോഗ്രാം  ഭാഗങ്ങള്‍ ഇതില്‍ തന്നെ ശേഖരിക്കുന്നു. അത് വഴി പ്രോസസറിന് വേഗത്തില്‍ വിവരങ്ങള്‍ ലഭ്യമാകും. ഈ മെമ്മറി മെയിന്‍ മെമ്മറിക്കും പ്രോസസറിനും  ഇടയിലായി വരുന്നു. ഇതിന്റെ നിര്‍മ്മാണം ചെലവേറിയതായതിനാല്‍ (ഒരു ബൈറ്റ് ശേഖരിക്കാനാവശ്യമായ സ്ഥലത്തിന്റെ നിര്‍മ്മാണച്ചെലവ്) വലിപ്പമേറിയ കാഷ് മെമ്മറി കമ്പ്യൂട്ടറിന്റെ നിര്‍മ്മാണച്ചെലവ് കൂട്ടുന്നു. കാഷ് മെമ്മറി ലഭ്യമായ കംപ്യൂട്ടറുകളില്‍ പ്രോസസര്‍ വിവരങ്ങള്‍ക്കായി ആദ്യം അന്വേഷിക്കുന്നത് കാഷില്‍ ആയിരിക്കും. അവിടെ ലഭ്യമല്ലെങ്കില്‍ റാമില്‍.

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

Thursday, September 20, 2012

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

യൂണിക്സ്/ലിനക്സ് സിസ്റ്റങ്ങളിലെ ഫയല്‍ സിസ്റ്റങ്ങളെക്കുറിച്ചും ഫയല്‍ മാനേജ്‌‌മെന്റിനെക്കുറിച്ചും  ഒരു ഏകദേശ ധാരണ കിട്ടിയിരിക്കും എന്ന് കരുതുന്നു. ഏതൊരു വിവിധോപയോഗ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിലെയും സുപ്രധാനമായ ഭാഗമാണ് പ്രോസസ് മാനേജ്‌‌മെന്റ്. യൂണിക്സ്/ലിനക്സ് സിസ്റ്റങ്ങള്‍ ഇത് എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്ന് തുടര്‍ന്നുള്ള പോസ്റ്റുകളില്‍.

ആദ്യം തന്നെ പ്രോഗ്രാം, പ്രോസസ്സ്, ത്രെഡ് ഇവയൊക്കെ എന്താണെന്ന് നോക്കാം. ഒരു പ്രോഗ്രാം എന്നത് എക്സിക്യൂട്ട് ചെയ്യാന്‍ അല്ലെങ്കില്‍ പ്രവര്‍ത്തിപ്പിക്കാന്‍ സാധിക്കുന്ന ഒരു ഫയല്‍ ആണ്. യന്ത്രഭാഷയിലുള്ള നിര്‍ദ്ദേശങ്ങള്‍ അടങ്ങിയിരിക്കുന്ന ഈ ഫയലുകളില്‍ വിവരങ്ങള്‍ ക്രമീകരിക്കുന്നതിന് പ്രത്യേക രീതികള്‍ അവലംബിക്കുന്നു. ഓരോ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളും  ഓരോ തരത്തിലാണ് എക്സിക്യൂട്ടബിള്‍ ഫയലുകള്‍ രേഖപ്പെടുത്തുന്നത്. വിന്‍ഡോസില്‍ പോര്‍ട്ടബില്‍ എക്സിക്യൂട്ടബിള്‍ ഫോര്‍മാറ്റ് (PE), യൂണിക്സ്/ലിനക്സ് സിസ്റ്റങ്ങളില്‍ എക്സിക്യൂട്ടബിള്‍ ലിങ്കബിള്‍ ഫോര്‍മാറ്റ് (ELF) എന്നിവയാണ് പൊതുവേ ഉപയോഗിച്ച് വരുന്നത്. ഇതിനു പുറമേ a.out, COFF, HEX  തുടങ്ങിയ നിരവധി ക്രമീകരണ രീതികളും  ഉപയോഗത്തിലുണ്ട്.

പ്രോസസ്സ് എന്ന് പറയുന്നത് പ്രവര്‍ത്തന സജ്ജമായ അല്ലെങ്കില്‍ പ്രവര്‍ത്തിച്ചുകൊണ്ടിരിക്കുന്ന പ്രോഗ്രാമുകളെ ആണ്. ഇതിനായി ഡിസ്കില്‍ നിന്ന് പ്രോഗ്രാമുകളെ മൊത്തമായോ ഭാഗികമായോ പ്രധാന മെമ്മറിയിലേക്ക് (RAM) കൊണ്ടുവരേണ്ടതുണ്ട്. ഇവിടെയാണ് വിര്‍ച്ച്വല്‍ മെമ്മറി, സെഗ്‌‌മെന്റേഷന്‍, സ്വാപ്പിങ്ങ് തുടങ്ങിയവയൊക്കെ വരുന്നത്.

ത്രെഡ് എന്ന് പറയുന്നത് ഒരു പ്രോസസ്സിലെ തന്നെ സ്വതന്ത്രമായ ഒരു ഭാഗത്തെ ആണ്. ഒന്നിലധികം  പ്രോസസറുകള്‍ ഉള്ള കമ്പ്യൂട്ടറുകളില്‍ ആണ് ഇവയുടെ ഉപയോഗം  പ്രസക്തമാകുന്നത്. ഒരു പ്രോഗ്രാമിലെ തന്നെ പരസ്പരം ബന്ധപ്പെട്ടിരിക്കുന്നതും  എന്നാല്‍ സ്വന്തം  നിലയില്‍ പ്രവര്‍ത്തിക്കാന്‍ സാധിക്കുന്നതുമായ ഭാഗങ്ങളെ ത്രെഡ്ഡുകള്‍ ആക്കി മാറ്റുന്നത് വഴി അവയെ സമാന്തരമായി പ്രവര്‍ത്തിപ്പിക്കാനും  പ്രോസസ്സിങ്ങ് വേഗത്തിലാക്കാനും  സാധിക്കും. നമുക്ക് ഒരു വീഡിയോ പ്ലയര്‍ ഉദാഹരണമായി എടുക്കാം. ഒരു വീഡിയോ ഫയല്‍ ഡിസ്കില്‍ നിന്ന് വായിക്കുക, അതിലെ വീഡിയോ, ഓഡിയോ ഭാഗങ്ങള്‍ വേര്‍തിരിക്കുക, അവയെ ഡീകോഡ് ചെയ്യുക, സ്ക്രീനില്‍ ഫ്രെയിമുകള്‍ വരക്കുക, ശബ്ദ സംവിധാനത്തിലൂടെ ഓഡിയോഭാഗം കേള്‍പ്പിക്കുക എന്നിവയൊക്കെ അതിലെ വിവിധ ഭാഗങ്ങളാണ്. മീഡിയ പ്ലെയര്‍ പ്രോഗ്രാം  ഒരൊറ്റ പ്രോസസ്സായി പ്രവര്‍ത്തിക്കുന്നു. മേല്‍പ്പറഞ്ഞ ഭാഗങ്ങള്‍ അവയിലെ വിവിധ ത്രെഡുകള്‍ ആയി പ്രവര്‍ത്തിക്കുന്നു.
 
ഒരു പ്രോസസറിന് ഒരു സമയത്ത് ഒരു പ്രോഗ്രാം  മാത്രമേ പ്രവര്‍ത്തിപ്പിക്കാന്‍ സാധിക്കുകയുള്ളു. എന്നാലും നമ്മളൊക്കെ ഒന്നില്‍ കൂടുതല്‍ പ്രോഗ്രാമുകള്‍ ഒരേ സമയത്ത് പ്രവര്‍ത്തിപ്പിക്കാറുണ്ട്. ടൈപ്പ് ചെയ്തുകൊണ്ടിരിക്കുമ്പോള്‍ പാട്ട് കേള്‍ക്കുന്നതുപോലെ. ഒരേ സമയത്ത് പ്രവര്‍ത്തിച്ചുകൊണ്ടിരിക്കുന്ന വിവിധ പ്രോഗ്രാമുകളെ വേഗത്തില്‍ മാറ്റിക്കൊണ്ടിരിക്കുകയാണ് ഇവിടെയൊക്കെ ചെയ്യുന്നത്. ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം ഓരോ പ്രോസസ്സുകളെയും ഒരു നിശ്‌‌ചിത സമയത്തേക്ക് പ്രവര്‍ത്തിക്കാന്‍ അനുവദിക്കുന്നു. അതിനു ശേഷം അടുത്ത പ്രോസസ്സിന് സി പി യു വിട്ടുകൊടുക്കുന്നു. ഇത് വളരെ വേഗത്തില്‍ സംഭവിക്കുന്നതിനാല്‍ പ്രോഗ്രാമുകളൊക്കെ ഒരേ സമയം  പ്രവര്‍ത്തിക്കുന്നു എന്ന തോന്നല്‍ ഉപയോക്താവിന് ഉണ്ടാകുന്നു. ഷെഡ്യൂളിങ്ങ് എന്നാണ് ഈ പ്രക്രിയയുടെ പേര്. ഇതിന് വിവിധ രീതികള്‍ അവലംബിക്കാറൂണ്ട്. പ്രവര്‍ത്തിപ്പിക്കേണ്ട പ്രോഗ്രാമുകളുടെ വലിപ്പം, പ്രാധാന്യം  എന്നിവക്കൊക്കെ അനുസരിച്ച് ഓരോ പ്രോഗ്രാമിനും  പ്രവര്‍ത്തിക്കാനനുവദിക്കപ്പെടുന്ന സമയത്തില്‍ മാറ്റമുണ്ടാകാം.
 
ഇതിനോടൊപ്പം തന്നെ റിയല്‍ ടൈം ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളുടെ കാര്യം കൂടി പ്രതിപാദിക്കുന്നു. നാം സാധാരണയായി ഉപയോഗിക്കുന്ന ലിനക്സും  വിന്‍ഡോസുമൊക്കെ ജെനറല്‍ പര്‍പ്പസ് ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങള്‍ (ജിപിഒഎസ്) എന്ന വിഭാഗത്തിലുള്ളവയാണ്. ഇവയെല്ലാം പൊതുവായ കാര്യങ്ങള്‍ക്ക് വേണ്ടി ഉപയോഗിക്കപ്പെടുന്നു. എല്ലാ ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളുടെയും  അടിസ്ഥാന പ്രവര്‍ത്തന രീതി പുറമേ നിന്നുണ്ടാകുന്ന സംഭവങ്ങളോട് (ഈവന്റുകള്‍) പ്രതികരിക്കുക എന്നതാണ്. ഉദാഹരണത്തിന് ഉപഭോക്താവ് ഒരു ഫയലിനു മുകളില്‍ മൗസ് ഉപയോഗിച്ച് ക്ലിക്ക് ചെയ്യുന്നു എന്ന് കരുതുക. ആ ഫയലിനെ പ്രവര്‍ത്തിപ്പിക്കാന്‍ ആവശ്യമായ പ്രോഗ്രാം തുറക്കേണ്ടതുണ്ട്. ഇതിനായി ആകെ വേണ്ടിവരുന്ന സമയത്തെ പ്രതികരണ സമയം  എന്ന് വിളിക്കാം (Response time). ഈ പ്രതികരണ സമയം  സാധാരണ രീതിയില്‍ അത്ര പ്രധാനമല്ല. ഇപ്പോള്‍ ഞാന്‍ ഒരു എംപി3 ഫയലിനെ തുറക്കുമ്പോള്‍ മൗസ് ക്ലിക്ക് ചെയ്യുന്ന സമയം  മുതല്‍ ആ പാട്ട് പാടിത്തുടങ്ങുന്നത് വരെയുള്ള ഇടവേള അല്പം  കൂടുതല്‍ ആണെങ്കില്‍ പോലും  പ്രശ്നങ്ങള്‍ ഒന്നും  ഉണ്ടാകുന്നില്ല. എന്നാല്‍ വിമാനങ്ങളിലോ മിസ്സൈല്‍ നിയന്ത്രണ സംവിധാനങ്ങളിലോ വാഹനങ്ങളുടെ ബ്രേക്ക്, ഇന്ധന നിയന്ത്രണ സംവിധാനം എന്നിവയിലൊക്കെ ഒരു ഈവന്റിനോടുള്ള പ്രതികരണം അല്പം താമസിച്ച് പോയാല്‍ ഉള്ള അവസ്ഥ ഒന്ന് ആലോചിച്ച് നോക്കൂ. ഇങ്ങനെയുള്ള സാഹചര്യങ്ങളില്‍ പ്രതികരണത്തിനായി എടുക്കുന്ന ഇടവേള വളരെ കുറവായിരിക്കണം. വേറൊരു രീതിയില്‍ പറഞ്ഞാല്‍ ഒരു നിശ്ചിത സമയത്തിനുള്ളില്‍ ഒരു സംഭവത്തോടുള്ള പ്രതികരണം ഉണ്ടായില്ലെങ്കില്‍ ആ സിസ്റ്റം തന്നെ നശിച്ച് പോകുന്ന അവസ്ഥ ഉണ്ടായേക്കും. ഈ ഇടവേള വളരെ കുറവായ/കുറവായിരിക്കേണ്ട സാഹചര്യങ്ങളില്‍ ഉപയോഗിക്കുന്നവയാണ് റിയല്‍ ടൈം  ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം (ആര്‍റ്റിഒഎസ്). ഇതില്‍ തന്നെ ഹാര്‍ഡ് ആര്‍റ്റിഒഎസ്സുകളും  സോഫ്റ്റ് ആര്‍റ്റിഒഎസ്സുകളും  ഉണ്ട്. ഒരു സംഭവത്തോടുള്ള പ്രതികരണം നിശ്ചിത സമയത്തില്‍ തന്നെ ഉണ്ടായില്ലെങ്കില്‍ കൂടി ചില സാഹചര്യങ്ങളില്‍ അത് പരാജയപ്പെട്ടു എന്ന് പറയാന്‍ സാധിക്കില്ല. ഇങ്ങനെയുള്ളവയാണ് സോഫ്റ്റ് ആര്‍റ്റിഒസ്സുകള്‍. നിശ്ചിത സമയത്തിനുള്ളില്‍ പ്രതികരണം ഉണ്ടായില്ലെങ്കില്‍ അതിനെ പൂര്‍ണ്ണ പരാജയം എന്ന് വിളിക്കുന്നവയാണ് ഹാര്‍ഡ് ആര്‍റ്റിഒഎസ്സുകള്‍. ഈ സമയനിഷ്ഠ നഷ്ടമായാല്‍ ഉണ്ടാകുന്ന നഷ്ടങ്ങളും  വലുതായിരിക്കും.


Monday, September 10, 2012

ഫയല്‍ സിസ്റ്റങ്ങള്‍ - 4

ഇന്ന് ഉപയോഗത്തിലിരിക്കുന്ന മിക്കവാറും ഫയല്‍ സിസ്റ്റങ്ങളില്‍ ഓരോ ഫയലിനും വിവിധ തരത്തിലുള്ള അനുമതികള്‍ ഉണ്ട്. ഒരൊറ്റ ഉപഭോക്താവിനെ മാത്രം പിന്‍തുണക്കുന്ന ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളില്‍ ഇതിന് പ്രസക്തിയില്ല. എന്നാല്‍ ഒരേ സമയം ഒന്നിലധികം ആളുകള്‍ക്ക് ഉപയോഗിക്കാന്‍ സാധിക്കുന്ന ആധുനിക ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളില്‍ ഓരോ ഉപഭോക്താവിന്റെയും ഫയലുകളെ മറ്റുള്ളവര്‍ ഉപയോഗിക്കുന്നതില്‍ നിന്നും അവയില്‍ മാറ്റങ്ങള്‍ വരുത്തുന്നതില്‍ നിന്നും സംരക്ഷിക്കേണ്ടതുണ്ട്.

ലിനക്സില്‍ ഓരോ ഫയലിന്റെയും അനുമതി മൂന്ന് വിഭാഗങ്ങളായാണ് ക്രമീകരിച്ചിരിക്കുന്നത്. ആ ഫയല്‍ ഉണ്ടാക്കിയ ആള്‍ അഥവാ ആ ഫയലിന്റെ ഉടമ (യൂസര്‍), ഉടമ ഉള്‍പ്പെടുന്ന ഉപഭോക്താക്കളുടെ കൂട്ടം (ഗ്രൂപ്പ്), മറ്റുള്ളവര്‍ (അതേഴ്സ്) എന്നിങ്ങനെ. ഈ മൂന്ന് വിഭാഗങ്ങളില്‍ ഉള്ളവര്‍ക്കും വായിക്കുക (റീഡ്), എഴുതുക/മാറ്റം വരുത്തുക (റൈറ്റ് ), പ്രവര്‍ത്തിപ്പിക്കുക (എക്സിക്യൂട്ട്) എന്നിങ്ങനെ അനുമതികള്‍ കൊടുത്തിരിക്കും. താഴെക്കൊടുത്തിരിക്കുന്ന ചിത്രം നോക്കൂ,
1 എന്നുള്ളത് ഒരു വിഭാഗത്തിന്ആ പ്രവര്‍ത്തി ചെയ്യാന്‍ അനുവാദമുണ്ട് എന്നും 0 അനുവാദമില്ല എന്നും സൂചിപ്പിക്കുന്നു.ഈ ചിത്രത്തില്‍ കാണുന്നതുപോലെ ആണെങ്കില്‍ ഉടമക്ക്ആ ഫയലിനെ വായിക്കാനും, മാറ്റം വരുത്താനും പ്രവര്‍ത്തിപ്പിക്കാനും ഉള്ള അനുവാദമുണ്ട്. കൂട്ടത്തിനും മറ്റുള്ളവര്‍ക്കുംആ ഫയലിനെ വായിക്കാന്‍ മാത്രമേ അനുവാദമുള്ളു. ഈ ബിറ്റുകളെ ബൈനറി സംഘ്യ ആയി പരിഗണിച്ചാല്‍ഒക്റ്റല്‍ നമ്പര്‍ സിസ്റ്റത്തില്‍ 0744 എന്ന് എഴുതാന്‍ സാധിക്കും. ഈ രീതിയിലാണ് സാധാരണ ഫയല്‍ അനുമതികള്‍ എഴുതാറുള്ളത്. 0660 എന്നാണെങ്കില്‍ ഉടമക്കും കൂട്ടത്തിനും വായിക്കാനും എഴുതാനും അനുവാദമുണ്ട്, മറ്റുള്ളവര്‍ക്ക് ആ ഫയല്‍ ഉപയോഗിക്കാന്‍ സാധിക്കില്ല എന്നാണ്. (ബൈനറിയില്‍ 110 110 000, ഏറ്റവും  ഇടതുവശത്തുള്ള 0 ഈ സംഘ്യ ഒക്റ്റല്‍ സംഘ്യാ രീതിയി എഴുതപ്പെട്ടതാണ് എന്നതിനെ സൂചിപ്പിക്കുന്നു.) ലിനക്സിലെ ls കമാന്റ് ഉപയോഗിക്കുമ്പോള്‍ ഇതിനെ rwxrwxrwx എന്നാണ് കാണിക്കാറൂള്ളത്. r - read, w - write, x - execute. ആദ്യത്തെ മൂന്നെണ്ണം ഉടമയുടെയും പിന്നീടുള്ളവ യഥാക്രമം കൂട്ടത്തിന്റെയും മറ്റുള്ളവരുടെയും അനുമതികള്‍ ആണ്. 0744 എന്ന അനുവാദത്തെ rwxr--r-- എന്ന് എഴുതാം. 0660 ത്തിനെ rw-rw---- എന്നും.

ലിനക്സ് റൂട്ട് ഫയല്‍ സിസ്റ്റത്തിലെ /etc പോലെയുള്ള ഡയറക്റ്ററികളില്‍ ചില പ്രോഗ്രാമുകളുടെ ക്രമീകരണങ്ങള്‍ സൂക്ഷിച്ചിരിക്കുന്ന ഫയലുക്കള്‍ക്ക് ചില പ്രത്യേക അനുവാദങ്ങള്‍ നിര്‍ബന്ധമാണ്. ആ അനുവാദങ്ങളില്‍ മാറ്റം വരുത്തിയാല്‍ അത്തരം പ്രോഗ്രാമുകള്‍ പിന്നീട് പ്രവര്‍ത്തിക്കാന്‍ വിസമ്മതിക്കും. ഉദാഹരണത്തിന് sudo പ്രോഗ്രാമിന്റെ ക്രമീകരണങ്ങള്‍ ഉള്‍ക്കൊള്ളുന്ന ഫയലായ /etc/sudoers ഇന്റെ അനുവാദങ്ങള്‍ നോക്കൂ, നിങ്ങളുടെ കമ്പ്യൂട്ടറില്‍ ഒരു റൂട്ട് യൂസര്‍ ഇല്ലെങ്കില്‍ ഇത് പരീക്ഷിക്കരുത്. സാധാരണ ഉബുണ്ടു/ഡെബിയന്‍ സിസ്റ്റങ്ങളില്‍ ഡിഫാള്‍ട്ട് ആയി ഒരു റൂട്ട് യൂസര്‍ ഉണ്ടാകില്ല. നിങ്ങള്‍ ഇത് പരീക്ഷിക്കുന്നുണ്ടെങ്കില്‍ അതിനു മുന്‍പേ sudo passwd root എന്ന കമാന്റ് ഉപയോഗിച്ച് റൂട്ട് യൂസറുടെ പാസ് വേര്‍ഡ്  ക്രമീകരിക്കേണ്ടതാണ്. പിന്നീട് su കമാന്റ് വഴി റൂട്ട് ആയി ലോഗിന്‍ ചെയ്ത് ഈ ഫയലിന്റെ അനുവാദങ്ങള്‍ പഴയപടി ആക്കാം. അതുവരെ പിന്നെ sudo കമാന്റും  അതുമായി ബന്ധപ്പെട്ട gksu പോലെയുള്ള കമാന്റുകളും പ്രവര്‍ത്തിക്കുകയില്ല. ഇത് വലിയ പ്രശ്നങ്ങള്‍ ഉണ്ടാക്കും.
subin@anna:~$ ls -l /etc/sudoers
-r--r----- 1 root root 723 Jan 31  2012 /etc/sudoers
ആദ്യം കാണുന്നത് അനുവാദം, പിന്നെ ലിങ്കുകളുടെ എണ്ണം (പിന്നാലെ), പിന്നെ ഉടമ, കൂട്ടം, ഫയല്‍ ഉണ്ടാക്കിയ തീയതി, ഫയലിന്റെ പേര് എന്നിങ്ങനെ. ഈ ഫയലിന്റെ ഉടമ റൂട്ട് ആണ്. റൂട്ടിനും പിന്നെ റൂട്ട് ഉപഭോക്താക്കളുടെ കൂട്ടത്തിനും  മാത്രമേ ഈ ഫയല്‍ വായിക്കാന്‍ അനുവാദമുള്ളു. ഇനി ഈ ഫയലിന്റെ ഉടമയെ മാറ്റി നോക്കാം,

subin@anna:~$ sudo chown subin:subin /etc/sudoers
subin@anna:~$ ls -l /etc/sudoers
-r--r----- 1 subin subin 723 Jan 31  2012 /etc/sudoers
ഇപ്പോള്‍ ഫയലിന്റെ ഉടമ സുബിന്‍ ആണ്. ഇനി ഞാന്‍ sudo പ്രോഗ്രാം  പ്രവര്‍ത്തിപ്പിക്കാന്‍ ശ്രമിക്കുമ്പോള്‍,
subin@anna:~$ sudo fdisk -l
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
എന്ന എറര്‍ സന്ദേശമാണ് കിട്ടുക.അനുവാദങ്ങള്‍ പഴയപടി ആക്കിയാല്‍ ഇത് വീണ്ടും  പ്രവര്‍ത്തിച്ച് തുടങ്ങും.

പ്രവര്‍ത്തിപ്പിക്കാന്‍ കഴിയുന്ന ഫയലുകള്‍ക്ക് (എക്സിക്യൂട്ടബിള്‍ ഫയലുകള്‍) ലിനക്സില്‍ മറ്റുചില അനുവാദങ്ങള്‍ കൂടിയുണ്ട്. സെറ്റ് യുഐഡി, സെറ്റ്ജിഐഡി തുടങ്ങിയവ. ഒരു കമ്പ്യൂട്ടര്‍ സിസ്റ്റത്തില്‍ ചില കാര്യങ്ങള്‍ ചെയ്യാന്‍ അഡ്മിനിസ്ട്രേറ്റര്‍ യൂസര്‍ അഥവാ റൂട്ട് യൂസറിന് മാത്രമേ അനുവാദമുള്ളു. എന്നിരുന്നാലും  ചിലപ്പോള്‍ സാധാരണ ഉപഭോക്താക്കള്‍ക്കും  ഇത്തരം കാര്യങ്ങള്‍ ചെയ്യേണ്ടതായി വരും. ഒരേ പ്രോഗ്രാം തന്നെ വിവിധ ഉപഭോക്താക്കള്‍ പ്രവര്‍ത്തിക്കുമ്പോള്‍ അവയുടെ പ്രവര്‍ത്തനം  വിവിധ രീതിയിലായിരിക്കും. ഒരു സിസ്റ്റത്തില്‍ ഒരു പുതിയ ഉപഭോക്താവിനെ ചേര്‍ക്കുന്നത്, ഉള്ള ഒരാളെ നീക്കം ചെയ്യുന്നത് തുടങ്ങിയ കാര്യങ്ങള്‍ ഒക്കെ റൂട്ടിന് മാത്രമായി നീക്കി വച്ചാല്‍ പോലും  ഉപഭോക്താക്കള്‍ അവരവരുടെ പാസ്‌‌വേര്‍ഡുകള്‍ മാറ്റുന്നത്, വേറൊരു കമ്പ്യൂട്ടറിനെ നെറ്റ്‌‌വര്‍ക്കില്‍ ping ചെയ്യുന്നത് തുടങ്ങിയവ പ്രത്യേക അധികാരങ്ങള്‍ വേണ്ടീവരുന്ന കാര്യങ്ങളാണ്. ഇതിനായി ഉള്ള പ്രൊഗ്രാമുകള്‍ സാധാരണയായി ചെയ്യുന്നത് setuid, setgid പോലെയുള്ള സിസ്റ്റം കോളുകള്‍ ഉപയോഗിച്ച് അവയുടെ അധികാരങ്ങള്‍ താല്‍ക്കാലികമായി ഉയര്‍ത്തുകയാണ്. പക്ഷേ ഏതൊരു പ്രോഗ്രാമിനും  ഇങ്ങനെ ചെയ്യാന്‍ അവസരമുണ്ടായാല്‍ ദുഷ്ടപ്രോഗ്രാമുകള്‍ക്ക് കമ്പ്യൂട്ടറിലെ ഏത് ഫയല്‍ വേണമെങ്കിലും  മായ്ചുകളയാനോ മാറ്റം  വരുത്താനോ ഒക്കെ സാധിക്കുമല്ലോ. അതിനാല്‍ സെറ്റ് യുഐഡി, സെറ്റ്ജിഐഡി തുടങ്ങിയ അനുവാദങ്ങള്‍ ഉള്ള ഫയലുകള്‍ക്ക് മാത്രമേ ഇത് ചെയ്യാന്‍ സാധിക്കുകയുള്ളു.

ഇനി ബാക്കിയുള്ള പ്രത്യേക അനുവാദം സ്റ്റിക്കി ബിറ്റ് ആണ്. ഇതും  എക്സിക്യൂട്ടബിള്‍ ഫയലുകള്‍ക്ക് മാത്രമായി ഉള്ള അനുവാദമാണ്. ഈ അനുവാദമുള്ള ഫയലുകള്‍ (പ്രോഗ്രാം) എക്സിക്യൂട്ട് ചെയ്ത ശേഷവും  (പ്രോസസ്) അവയെ മെമ്മറി അല്ലെങ്കില്‍ സ്വാപ്പ് ഏരിയയില്‍ തന്നെ തുടരാന്‍ അനുദിക്കും. വീണ്ടും  എക്സിക്യൂട്ട് ചെയ്യുമ്പോള്‍ വേഗത്തില്‍ പ്രവര്‍ത്തനമാഅംഭിക്കാന്‍ ഇതിനാല്‍ അവക്ക് സാധിക്കുന്നു.

ഒക്റ്റല്‍സംഖ്യാരീതിയില്‍ രേഖപ്പെടുത്തുമ്പോള്‍ സ്റ്റിക്കിബിറ്റ് 01000, സെറ്റ്‌‌ജിഐഡി 02000, സെറ്റ്‌‌യുഐഡി 04000 എന്നിങ്ങനെയാണ് രേഖപ്പെടുത്തുക. നേരത്ത് പറഞ്ഞ മൂന്ന് അനുവാദങ്ങളുമായി ചേര്‍ക്കുമ്പോള്‍ മൊത്തം  നാല് അക്കങ്ങളാകും. ഉദാഹരണത്തിന് 04777 എന്ന അനുവാദമാണെങ്കില്‍ എല്ലാവര്‍ക്കും  വായിക്കാനും മാറ്റം വരുത്താനും  പ്രവര്‍ത്തിപ്പിക്കാനും  കഴിയും, കൂടെ പ്രവര്‍ത്തന സമയത്ത് യു ഐ ഡി സെറ്റ് ചെയ്യാനുള്ള അനുവാദവും.