கணிமொழி - ஆனி - ஜூன் 2008

நுழைகையில் நிகழ்பவை...

ம ஸ்ரீ ராமதாஸ், என் ஆர் சி பாஸ், சென்னை
முந்தைய இதழில் வெளியான "யுனிக்ஸ் ஆயத்தத்தின்" தொடர்ச்சி...

முதல் நிலை கடந்ததும் கருவானது கட்டுப்பாட்டை init எனப்படும் பணிக்குத் தந்து விடும். பல்வேறு பராமரிப்பு பணிகளை மேற்கொள்ளும் init, தமது முதற் பணியாக சேமிப்பு தட்டுக்கள் நல்ல நிலையில் உள்ளனவா என சோதிக்கும். வன் பொருட்கள் பழுதடைதல் மின்சாரத் துண்டிப்பு போன்ற காரணங்களால் அவற்றுக்கும் பாதிப்பு நேரிட்டிருக்குமாயின் யுனிக்ஸினுடைய துவக்கத்திற்கு முன்னதாகவே இவற்றை மீட்டிடும் பணிகளை மேற்கொள்வது நல்லது.

பல்வேறு மறைநிரல்களை (daemons) துவக்குவதை init தமது அடுத்தப் பணியாக மேற்கொள்ளும். அச்சுக் கிரமம் (print spooler), இணைய வழங்கி போன்று பின்னணியில் மறைந்து கொண்டு பணிகள் புரிய காத்திருக்கும் நிரல்கள் மறைநிரல்கள் ஆகும். இச்சிறப்பு நிரல்கட்கு ஒன்றுக் கொன்று முரண்படவல்ல பல்வேறு கோரிக்கைகளை ஒருங்கிணைக்க வேண்டியிருக்கும். பிரதியொரு கணினிக்கும் அதன் பண்புகளைப் பொறுத்து துவக்கப்படும் மறைநிரட்களின் தொகுப்பு மாறுபடலாகும்.

தொடர்ந்து பயனர்ளை தயார் படுத்தும் பொருட்டு getty எனும் நிரலை முனையத்தை (terminal) நோட்டமிடும் பொருட்டு init பணியானது துவக்கும். இதுவே நுழைதற்கான தூண்டியை (prompt) முனையத்திற்கு வழங்கும் நிரலாகும். இங்ஙனம் அனைத்து மறைநிரல்களும் பிரதியொரு முனையத்திற்கான getty பணிகளும் துவக்கப் பட்டுவிடுமாயின் நாம் இரண்டாவது இயக்க நிலையை அடைந்ததாக பொருள். இந்நிலையில் நாம் கணினியினுள் நுழைந்து (Log in) நிரல்களை இயக்க தயார் ஆகிறோம்.

பிணைத்தல் (networking) உள்ளிட்ட பிற பணிகளுக்கான மறைநிரட்களை துவக்குவது அடுத்த பணியாகும். இவை பூர்த்தியானதும் நாம் இயக்க நிலை மூன்றினை அடைந்ததாக பொருள். முழுமையாக இயக்க வல்ல தன்மையை கணினியானது இந்நிலையில் அடைகிறது.

நுழைகையில் நிகழ்பவை

நுழைந்திடும் பொருட்டு getty நிரலுக்கு பெயரொன்றை கொடுத்து தங்களை அடையாளப்படுத்திக் கொள்ள வேண்டும். தாங்களிட்ட கடவுச்சொல்லையும் ஏற்று தங்களுக்கு கணினிக்குள் பிரவேசிக்க அனுமதியுள்ளதா என்பதை சரிபார்த்திடும் பொருட்டு அது login எனும் நிரலை இயக்கும். தங்களுக்கு அனுமதியில்லையென்றால் தங்களது முயற்சி தோல்வியில் முடியும். தங்களுக்கு நுழைதற்கு அனுமதியிருப்பின் சில பராமரிப்பு பணிகளை செய்த பின்னர் ஆணை மாற்றியான (command interpreter) மேலோடு (shell) துவக்கப்படும்.

தாங்கள் தங்களது பயனர் பெயரையும் கடவுச் சொல்லையும் தந்து அடையாளப்படுத்திக் கொண்டதும் தாங்களிட்ட பயனர் பெயருக்காக /etc/passwd கோப்பானது தேடப்படும். பயனர் கணக்கு பற்றிய விவரங்களை அக்கோப்பு தாங்கியிருக்கும்.

இவற்றுள் ஒரு களத்தில் (field) உருமாற்றப்பட்ட நிலையில் தங்கள் கடவுச் சொல் காக்கப்பட்டிருக்கும் (வேறு சில அமைப்புகளில் கடவுச் சொல்லை களவு போகாமல் காக்க இன்னும் அதிக முக்கியத்துவம் கொடுத்து /etc/shadow கோப்பிலும் காப்பது வழமை). கணக்கின் கடவுச் சொல்லாக தாங்கள் இட்டது எம்முறையில் காக்கப் பட்டிருக்கிறதோ அதே முறையில் உருமாற்றப்பட்டு (encrypted) login நிரலால் பொருத்தத்திற்காக சரிபார்க்கப்படும். உரையை உருமாற்றுவது போல் உருமாற்றப்பட்டதை மீண்டும் மீட்பது மிகக் கடினமானது.

தாங்கள் ஒரு முறை வெற்றிகரமாக நுழைந்ததும் தங்களது கணக்குடன் தொடர்புடைய அனைத்து சலுகைகளையும் பெறுவீர்கள். தாங்கள் குழுவொன்றின் அங்கமாகவும் கருதப் படலாம். கணினியை நிர்வகிப்பவரால் ஏற்படுத்தப்படும் பயனர்களின் கூட்டமைப்பை குழு எனக் கொள்ளலாம். குழுக்களுக்கு அதன் பயனர்களைப் பொறுத்திலாத சலுகைகளும் இருக்கலாம். ஒரே பயனர் பல்வேறு குழுக்களின் அங்கத்தினராகவும் இருக்கலாம்.

பயனர்களும் குழுக்களும் பெயரொன்றால் வழங்கப்பெற்றாலும் அவை எண் குறியிடப்பட்டே உள்ளூர சேமிக்கப்படுகின்றன. கடவுச் சொல்லிற்கான கோப்பானது தங்களது கணக்கின் பெயரை ஒரு எண்ணுடன் தொடர்புபடுத்துகிறது. /etc/group கோப்பு குழுக்களுக்கு உரிய எண் குறிகளைக் கொண்டிருக்கும்.

தங்களுக்குரிய கோப்புகள் உறையும் இல்ல அடைவினையும் (home directory) தங்கள் கணக்கு கொண்டிருக்கும். தங்களது ஆணைகளை ஏற்க ஆயத்தமாக இருக்கும் ஆணை மாற்றியான மேலோட்டின் அமைப்பினையும் தங்கள் கணக்கே வரையறுக்கும்.

ஆணையிட்டு நடப்பதென்ன

இடும் ஆணைகளை மாற்றி செயற்படுத்த வைக்கும் பொறுப்பினை மேலோடு ஏற்கிறது. இயங்கு தளத்தின் கருவினை மேலோட்டமாக காத்து நிற்பதால் அதனை மேலோடு என அழைப்போமாக. யுனிக்ஸ் இயங்குதளங்களில் இங்ஙனம் மேலோடும் கருவும் பிரிக்கப்பட்டிருப்பது அதன் சிறப்பம்சங்களில் ஒன்று. இவை தங்களுக்குள்ளே அமைப்பு ரீதியான அழைப்புகளின் வாயிலாக உரையாடிக் கொள்கின்றன. இவ்வசதியிருப்பதனால் பல்தரப்பட்ட இடைமுகப்பு விருப்பங்களுக்கிணங்க பல மேலோடுகள் இருப்பது சாத்தியமாகிறது.

தாங்களாக மாற்றியராத பட்சத்தில் சாதாரணமாக தாங்கள் கணினிக்குள் நுழைந்ததும் மேலோடானது '$' தூண்டியைத் (prompt) தரும். ஆயத்த நேரத்திற்கும் தாங்கள் நிரலொன்றை இயக்க தயாரான நேரத்திற்கும் இடையே பல்வேறு காரியங்களை செய்யத் தயாரான நிலையில் இருக்கும் பல்வேறு பணிகளை கொண்டதாகக் தங்கள் கணினியை கருதிக் கொள்ளலாம். இப்பணிகளெல்லாம் சம்பவங்கள் (events) நிகழக் காத்திருப்பவையாக கொள்ளலாம். எலியத்தை (mouse) சொடுக்குவது விசையொன்றைத் தட்டுவது முதலியவற்றை ஒரு சம்பவம் எனக் கொள்ளலாம். பிணையத்தில் தங்கள் கணினி பிணைக்கப்பட்டிருந்நதால் தரவுப் பெட்டியொன்றின் (data packet) வருகையை ஒரு சம்பவமாக கொள்ளலாம்.

இத்தகைய பணிகளுள் கருவும் ஒன்று. பயனரது பிற பணிகள் எப்போது நடைபெற வேண்டும் என்பதை தீர்மானிப்பதால் இது முக்கியத்துவம் வாய்ந்த பணியாகக் கருதப்படுகிறது. மேலும் இதற்கு மட்டுமே கணினியின் வன்பொருட்களை அணுகுதற்கான உரிமை இருக்கிறது. குறிப்பிட்டுச் சொல்லப் போனால் பயனரது பணிகள், விசைப்பலகைகளின் மூலம் உள்ளீடு பெறுவதற்கும், திரைக்கு இயற்றுதற்கும், வட்டிலிருந்து வாசிப்பதற்கும், இயற்றுதற்கும் கருவிற்கு கோரிக்கை (request) வைக்க வேண்டும். இவற்றை நாம் அமைப்பழைப்புகள் (system calls) என்று வழங்கலாம்.

பொதுவாக உள்ளீடு மற்றும் வெளியீடுகளுக்கான அனைத்து அழைப்புகளும் கருவின் வழியாகவே செலுத்தப்படும். பணிகள் ஒன்றோன்று மோதிக்கொள்வதை இது தவிர்க்கிறது. சில குறிப்பிட்ட பணிகளுக்கு கருவினைத் தவிர்த்து உள்ளீட்டு வெளியீட்டு துறைகளை (I/O Ports) அணுகுதற்கு அனுமதி வழங்கப்படுகிறது. பெரும்பாலான யுனிக்ஸ் தளங்களில் வரைகலைக்காக (graphics) பயன்படுத்தப்படும் X வழங்கி இதற்கு சிறந்த உதாரணம்.

மேலோடும் பயனருக்கான ஒரு பணியே. அதற்கு சிறப்பான அந்தஸ்து எதுவும் இல்லை. தாங்கள் தட்டுதற்காக அது விசைப்பலகையின் உள்ளீட்டு வெளியீட்டுத் துறை மீது விழி வைத்து காத்திருக்கும் (கருவின் மூலமாக). கருவானது அவற்றை எவ்வாறு பார்க்கிறதோ அப்படியே அவற்றை தங்களின் திரைக்கு வழங்கும். கருவிற்கு "Enter" இடர்படும் போது தாங்களிட்ட வரியை மேலோட்டிற்கு தள்ளிவிடும். மேலோடானது அதனை விளங்கிக் கொண்டு ஆணைகளாக மாற்ற முயலும்.

'ls' ஆணையிட்டு தாங்கள் அடைவில் இருப்பவை என்ன என்பதை காண "Enter" தட்டுகிறீர்கள் எனக் கொள்வோம். மேலோடானது தன்னகத்தே முன்னமே கொண்ட விதிகளைக் கொண்டு தாங்கள் /bin/ls கோப்பிலுள்ள ஆணையை இயக்க விழைகிறீர்கள் எனக் கண்டு கொள்ளும். கருவிற்கு அமைப்பழைப்பு கொடுத்து சேய் பணியொன்றை (child process) துவக்கி அதற்கு திரை மற்றும் விசைப் பலகைக்கான அனுமதியை வழங்கும். அதனைத் தொடர்ந்து ls தமது பணியை நிறைவு செய்யும் வரை மேலோடு ஓய்வெடுத்துக் கொள்ளச் செல்லும்.

/bin/ls பணி பூர்த்தியடைந்ததும், கருவிற்கு காரியம் முடிந்ததாக வெளிவருதற்கான அமைப்பழைப்பு தரும். கருவானது மேலோட்டினை எழச் செய்து தொடர்ந்து இயங்கும் படி பணிக்கும். மேலோடும் விழித்துக் கொண்டு தூண்டியொன்றைத் தந்து அடுத்த உள்ளீட்டிற்காக காத்திருக்கும்.

'ls' இயங்கிக் கொண்டிருக்கையில் ஏனைய பிற பணிகளும் நடந்து கொண்டிருக்கும். தாங்கள் நீண்டதொரு அடைவினை பட்டியலிடுகிறீர்கள் என வைத்துக் கொள்வோம். அப்படியாயின் வேறு பணிகளை செய்யும் பொருட்டு தாங்கள் புதிய மேலோட்டினைத் துவக்கி அதில் நுழைந்து அங்கே நகலெடுத்தல் உள்ளிட்ட பிற பணிகளை மேற்கொள்ளலாகும். மேலும் ls இயங்குகையில் இணையத்தோடு இணைக்கப்பட்டிருந்நதால் தங்களுக்கு மடல்கள் பெறப்பெற்றும் தங்களது மடல்கள் அனுப்பப்பட்டுக் கொண்டும் இருக்கலாம்.

உள்ளீட்டுக் கருவிகளும் இடர்களும்

உள்ளீட்டுக் கருவிக்கான எளிமையானதொரு எடுத்துக்காட்டு விசைப் பலகையாகும். தாங்கள் ஒரு விசையைத் தட்டும் போதும் விடும் போதும் சம்பவம் (event) ஒன்று விசைப் பலகை கேபிலின் வழியே சமிக்ஞை செய்யப்பட்டு வன்பொருள் இடரொன்று (interrupt) ஏற்படுத்தப்படுகிறது.

இத்தகைய இடர்களை நோட்டமிடும் பணி இயங்கு தளத்தினுடையது. பிரதியொரு இடருக்கும் அதனை கையாளும் முறைமை இருக்கும். இயங்கு தளத்தின் பாகமாகிய இது இடரோடு தொடர்புடைய தரவுகளை (தாங்கள் தட்டிய விட்ட விசைப்பலகையின் மதிப்பு போன்றவை) பணிக்கெடுத்துக் கொள்ளும் வரை மறைத்து வைக்கும்.

கணினியின் நினைவின் (memory) அடிப் பகுதியொன்றிற்கு தங்களது விசையின் மதிப்பை அளிப்பதே விசைப் பலகைக்கான இடர் தாங்கியின் (interrupt handler) பணியாகும். அங்கே இயங்கு தளமானது எந்த நிரலானது விசைப்பலகையிலிருந்து வாசிக்க விழைகிறதோ அதற்கு கட்டுப்பாட்டை தத்து கொடுக்கும். அப்போது இவை ஆராயும் பொருட்டு கிடைக்கப் பெறும்.

சற்றே கடினத்தோடு கையாளக்கூடிய உள்ளீட்டு கருவிகளான பிணையத் தட்டுகளும் வன் தட்டுக்களும் கூட ஒத்த வழியிலேயே பணிபுரிகின்றன. முன்னர் கருவி நிர்வாகிகள் குறித்து குறிப்பிட்டது நினைவில் இருக்கலாம். இவை வடத்தை (Bus) பயன்படுத்தி வன் தட்டின் கோரிக்கை நிறைவேற்றப்பட்டதை சமிக்ஞை செய்யும். வன் தட்டானது இடரொன்றை எழுப்பும். வன் தட்டிற்கான இடர் கையாள்கையானது கோரிய நிரல் பயன்படுத்த ஏதுவாக, தருவிக்கப்பட்ட தரவை நினைவிற்கு நகலெடுக்கும்.

எந்தவொரு இடருக்கும் அதனொடு தொடர்புடைய முன்னுரிமை அளவையும் இருக்கும். அதிக முக்கியத்துவமற்ற இடர்கள் (விசைப்பலகை இடர்கள்) அதிக முக்கியத்துவமுள்ள இடர்களின் (வன்தட்டு சம்பவங்கள் போன்றவை) நிறைவிற்காக காத்திருக்க வேண்டும். கணினியிடமிருந்து பெறப்படும் பதில்கள் சுமுகமாக இருந்திடும் பொருட்டு அதற்கு தேவையான சம்பவங்களுக்கு அதிக முக்கியத்துவம் அளிக்கும் விதமாக யுனிக்ஸ் வடிவமைக்கப் பட்டுள்ளது.

இயங்கு தளத்தின் ஆயத்த நேர செய்திகளில் தாங்கள் இடர் கோரிக்கை (Interrupt Request - IRQ) எண்களுக்கான மேற்கோள்களை காண இயலும். ஒரே இடர் கோரிக்கையை இரு வேறு கருவிகள் பயன்படுத்துவது வன்பொருட்கள் முறையற்று வடிவமைக்கப் பெற வழி வகுப்பும்.

துவங்குகையில் இயங்கு தளமானது எவ்வெண்ணிடப்பட்ட இடரை எக்கருவி பயன்படுத்த வேண்டும் என்பது போன்ற தகவல்களை தெரிந்து கொள்ள வேண்டியது அவசியம். இதன் மூலம் அவ்வொவ்வொன்றையும் சிறப்பாக கையாள இயலும். இரு வேறு கருவிகள் ஒரே இடர் கோரிக்கையைப் பயன்படுத்தினால் தவறான கையாள்கைக்கு இடரானது வழி நடத்தப்படலாம். இது கருவியை முடங்கச் செய்வதோடு இயங்கு தளத்தைக் குழப்பி செயலிழக்கவும் செய்யலாம்.

உடனுக்குடன் பல பணிகளை கணினி கையாள்வது எப்படி?

அப்படி கையாள்வது கிடையாது என்பதுதான் உண்மை. ஒரு நேரத்தில் ஒரு பணியை மாத்திரமே கணினியால் செய்ய இயலும். ஆயினும் கணினியால் காரியங்களை அதிவேகமாக மாற்றிக் கொள்ள இயலும். இதுவே கணினியானது ஒரே நேரத்தில் பலக் காரியங்களை செய்வதாக நம்மை நினைக்க வைக்கிறது. இதற்கு நேரப் பகிர்வு (time sharing) என்று பெயர்.

நேரப் பகிர்வினை நிர்வகிப்பதும் கருவின் காரியங்களுள் ஒன்று. கிரமப்படுத்தும் (scheduler) பகுதியொன்றினைக் கருவானது கொண்டிருக்கும். கரு தவிர்த்த ஏனைய அனைத்துக் காரியங்களைப் பற்றிய தகவல்களை அது தன்னகத்தே கொண்டிருக்கும். 1/60 விநாடிக்கு ஒரு முறை கருவில் நேரஞ்சுட்டப்பட்டு இடரொன்று ஏற்படுத்தப்படும். கிரமப்படுத்தியானது நிகழ்ந்து கொண்டிருக்கும் பணியினை இடைநிறுத்தி தள்ளிப்போட்டு கட்டுப்பாட்டை வேறொரு பணிக்கு கொடுக்கும்.

1/60 விநாடி என்பது சற்றே அதிகமானதாக தோன்றலாம். ஆயினும் இன்றைய மைக்ரோபுராஸர்களில் பல்லாயிரக்கணக்கான ஆணைகளை இயக்க இதுவே போதுமானதாகும். ஆக தாங்கள் பல்வேறு பணிகளைக் கொண்டிருந்தாலுங் கூட ஒவ்வொன்றும் கிடைக்கப் பெரும் இடைவெளிகளில் தமது காரியத்தினைச் சாதித்து கொள்ள இயலும்.

நடைமுறையில் ஒரு நிரலுக்கு அதற்கென ஒதுக்கப்பட்ட ஒட்டுமொத்த நேர அளவு கிடைக்கப் பெறாது போகலாம். I/O கருவியொன்றின் மூலம் இடரானது வருமாயின் கருவானது நிகழ்ந்து கொண்டிருக்கும் பணியை இடை நிறுத்தி இடர் தாங்கியை (interrupt handler) இயக்கிய பின்னர் பணியைச் செய்யத் திரும்பும். அதிக முக்கியத்துவம் வாய்ந்த இடர்கள் பல ஒரு சேர படையெடுப்பது இயல்பான பணிகளை பாதிக்கக் கூடும். இதனை பேரிடர் (trashing) என்று கொள்ளலாம். ஆயினும் நவீன யுனிக்ஸ் தளங்களில் இப்படியொன்றை தோற்றுவிப்பது மிகக் கடினமான காரியம்.

ஒலி, முப்பரிமாண தருவிப்பு போன்ற விதிவிலக்குகளைத் தவிர்த்து நிரல்களின் நேரமென்பது அவைக்கு கிடைக்கப் பெறும் நேரத்தை அரிதாகவே சார்ந்திருக்கும். மேலும் நிரலானது, வன்பொருள் அல்லது பிணைய இணைப்பினின்று தரவொன்றிற்காக காத்திருக்கும் போதே தடங்கல்கள் அதிகம் ஏற்படுகின்றன.

பணிகள் பலவற்றை ஒரு சேர ஆதரிக்க வல்ல இயங்குதளமானது பலப் பணி புரி (mutitasking) இயங்கு தளமாகக் கருதப்படுகிறது. ஆரம்பத்திலிருந்தே பலப் பணிகளை புரிந்திட வேண்டும் எனும் நோக்கத்தோடு வடிவமைக்கப் பட்டமையால் யுனிக்ஸ் குடும்ப இயங்கு தளங்கள் இவ்விடயத்தில் விண்டோஸ் மாகின்டோஷ் போன்ற பிற இயங்கு தளங்களைக் காட்டிலும் அதிகத் திறன் வாய்ந்ததாகத் திகழ்கிறது. திறன் மிக்கதாய் நம்பகத்தன்மை வாய்ந்ததாக திகழ்வதே பிணையச் சேவைகள், தகவல் பரிமாற்றங்கள், இணையச் சேவைகள் போன்றவற்றிற்கு லினக்ஸை உகந்ததொரு தேர்வாக்குகிறது.

தொடரும்...