செமாஃபோர் (நிரலாக்கம்)
முன்னுரைகீழ்க்கண்ட செய்முறைகளைப் பயன்படுத்தி மட்டுமே சேமாஃபோரை அணுக முடியும். கீழே விளக்கப்பட்டிருக்கும் காரணங்களுக்காக அட்டாமிக்காக (atomic) குறிக்கப்பட்டிருப்பவை இடைமறிக்கப்படக் கூடாது, அதாவது இந்த புரோகிராமைச் செய்வதற்கு இது செயல்பட்டுக் கொண்டிருக்க வேண்டும் என்று அமைப்பு முடிவு செய்திருந்தால், அந்த செயல்முறைக்கு இடையில் அது இடைமறிக்கப்படக்கூடாது. procedure V (S : Semaphore);
begin
(சேமாஃபோர் விவாதத்தின் மதிப்பில் ஒன்றை அதிகரிக்கிறது;
இந்த அதிகரிப்பு ஒரு மாற்ற முடியாத செயல்முறையாக ஆகும், அதாவது அட்டாமிக் ஆகும்.*)
S := S + 1;
end;
procedure P (S : Semaphore);
begin
(*சேமாஃபோர் அதன் மதிப்பில் ஒன்றைக் குறைக்கிறது
இறுதி மதிப்பு எதிர்மறையாக இல்லாத வகையில், உடனடியாக இவ்வாறு குறைத்துவிடுகிறது. இந்த ெயல்முறையும் ஒரு மாற்ற முடியாத செயல்முறையாக ஆகும், அதாவது அட்டாமிக் ஆகும். *)
repeat
Wait();
until S > 0;
S := S - 1;
end;
மாறுபடும் S இன் அதிகரிப்பு இடைமறிக்கப்படக் கூடாது என்பதையும், S என்பது பூஜ்ஜியத்தை விட அதிகமாக இருந்தால், P செயல்முறையும் இடைமறிக்கப்படக் கூடாது என்பதையும் கவனிக்கவும். பிற செயல்முறைகள் செயல்பாட்டிற்கு வருவதைத் தடுக்க டெஸ்ட்-அண்ட்-செட் (ஆர்க்கிடெக்சரின் நெறிமுறைக் கட்டளைத் தொகுப்பு இதற்கு ஏற்றதாக இருந்தால் மட்டும்) அல்லது (யூனிபுரோசஸர் அமைப்புகளில்) இடைமறிப்புகளைத் (interrupts) தவிர்ப்பது போன்ற சிறப்புக் குறிப்புகளைப் பயன்படுத்தி இதைச் செய்யலாம். செயல்பாட்டில் இல்லாத ஆதாரங்களின் எண்ணிக்கையே சேமாஃபோரின் எண்ணிக்கை மதிப்பாகும். (ஒரேயொரு ஆதாரம் மட்டும் இருந்தால், 0 அல்லது 1 என்ற மதிப்புகளுடன் ஒரு "பைனரி சேமாஃபோர்" பயன்படுத்தப்படுகிறது) ஓர் ஆதாரம் கிடைக்கும் வரை அடிப்படை பெயர்களான புரோகிராமிங் மொழியான ALGOL 68 லும், லினக்ஸ் கெர்னலிலும்[7] மற்றும் சில ஆங்கில பாடப்புத்தகங்களிலும், நெருக்கடி-காத்திருப்பைத் தவிர்க்க, சேமாஃபோர் செயல்பாடுகளின் ஒரு இணைப்பு வரிசையைக் (வழக்கமாக முதலில் வருபவர் முதலில் செல்லலாம் என்ற பாணியில்) கொண்டிருக்கக் கூடும். பூஜ்ஜியம் மதிப்பைக் கொண்டிருக்கும் சேமாஃபோரில் ஒரு செயல்முறை ஒப்பீடுஒரு பொது அறையில் இருக்கும் கழிவறைகளாக ஆதாரங்களையும், அந்தக் கழிவறைகளுக்குச் செல்ல காத்திருக்கும் நபர்களாக செயல்முறைகளையும், ஏதாவதொரு கழிவறைக்காக வரிசையில் நபர்கள் காத்திருக்கிறார்கள் அல்லது ஏற்கனவே அவர்கள் கழிவறையைப் பயன்படுத்திக் கொண்டிருக்கிறார்கள் என்பதாக கற்பனை செய்து கொள்ளுங்கள். கழிவறைக்கு வெளியில் உட்கார்ந்திருக்கும் ஒரு நபர், அந்த சமயத்தில் எத்தனை கழிவறைகள் காலியாக இருக்கின்றன, யார் அடுத்ததாக போக வேண்டும் என்று தீர்மானிக்கிறார். காலியாக இருக்கும் கழிவறைகளின் எண்ணிக்கை தான், சேமாஃபோரின் மதிப்பு, இது காலியாக இருக்கும் ஆதாரங்களைக் (கழிவறைகளை) குறிக்கிறது. ஒரு செயல்பாடு (நபர்) கழிவறையை அணுக வேண்டுமானால், சேமாஃபோரானது (பொறுப்பாளர்) வரிசையில் காத்திருக்க வேண்டுமா அல்லது காலியாக இருக்கும் கழிவறையைப் பயன்படுத்தலாமா என்று கூறுவார். கழிவறை காலியாக இருந்தால் அதில் நுழைய நபருக்கு (செயல்பாட்டிற்கு) வாய்ப்பு கிடைக்கும், பிறகு கழிவறைகளின் எண்ணிக்கையில் ஒன்று குறையும் ( காலியாக இருக்கும் கழிவறைகளை விசாரிப்பது (ஆதாரம் காலியாக இருக்கிறதா என்று பரிசோதிக்கும் செயல்பாடு), காலியான கழிவறைகளின் (ஆதாரங்களின்) எண்ணிக்கையை மீண்டும் மீண்டும் குறிப்பிடுவது, வரிசையில் காத்திருப்பது போன்ற செயல்பாடுகள் மற்ற செயல்பாடுகளால் தொந்தரவு செய்யப்படக்கூடாது. இது தான் அட்டாமிக் நடவடிக்கை என்றழைக்கப்படுகிறது. இந்த வரிசையானது முதலில் வருபவர் முதலில் வெளியில் செல்லலாம் என்ற அடிப்படையில் இருக்கும், அதாவது வரிசையில் முதலில் இருக்கும் நபருக்கு முதலில் காலியாகும் கழிவறையைப் பயன்படுத்த வாய்ப்பளிக்கப்படும். இருந்தாலும் கூட, வரிசையில் எங்கோ நிற்கும் ஒருவர் அவசரமாக பயன்படுத்த விரும்பினாலும் இந்த வரிசை மாற்றி அமைக்கப்படலாம் (அதாவது, செயல்பாடு அதிக முன்னுரிமை பெற்றிருந்தால் மாற்றி அமைக்கப்படும்). கவுண்டிங் சேமாஃபோர் கருத்தை, சேமாஃபோரில் இருந்து ஒரு 'யூனிட்டிற்கு' மேலாக ஏறும் அல்லது திரும்பும் திறனுடன் விரிவுபடுத்தலாம். இவ்வாறுதான் சேமாஃபோர் யூனிக்ஸ் இயங்கு தளத்தில் வேலை செய்கிறது. மாற்றி அமைக்கப்பட்ட procedure P (S : Semaphore; I : Integer);
begin
(* மொத்த செயல்பாடும் அட்டாமிக் ஆகும்*)
S >= 1 என்று வரும் வரை திரும்ப திரும்ப செய்யவும்;
S := S - I
end;
procedure V (S : Semaphore; I : Integer);
begin
S := S + I (* அட்டாமிக் செயல்பாடு *)
end;
இன்று புரோகிராமர்களால் பயன்படுத்தப்படும் சேமாஃபோர்கள்பொதுவாக வேறு எந்த வகையான ஒத்தியக்கத்திற்கு இயல்பாகவே பொருந்தி வராத புரோகிராமிங் மொழிகளில் சேமாஃபோர் பயன்படுத்தப்பட்டு வருகிறது. பெரும்பாலான இயங்கு தளங்களில் இவை ப்ரிமிட்டிவ் சின்க்ரோனைசேசன் இயங்குமுறையாக இருக்கின்றன. புரோகிராமிங் மொழி விரிவாக்கத்தில் இருக்கும் போக்கு, கணினித்திரை போன்ற ஒத்தியக்கத்திற்கு சிறந்த கட்டமைப்பு வடிவத்தில் இருக்கிறது (இருந்தாலும், இந்த நவீன கட்டமைப்புகள் சேமாஃபோர்களை திரைக்குப் பின்னால் இருந்து தான் பயன்படுத்துகின்றன). (மல்டி-ரிசோர்ஸ்) முட்டுக்கட்டைகளுடன் செயல்படும் போது இருக்கும் அவற்றின் செயல்திறமின்மையோடு கூட, புரோகிராமர்களின் ஒருசில சிறிய தவறுகளிலும் அவை புரோகிராமர்களைக் கைவிட்டுவிடுகின்றன, அதாவது ஒரு செயல்முறையில் ஏற்கெனவே கையாளப்பட்டு வரும் ஒரு சேமாஃபோரை அதிலிருந்து நீக்குவது மற்றும் நீக்கப்பட்ட சேமாஃபோரை மீண்டும் வெளியிடுவதற்கு மறந்துவிடுவது போன்ற சிறிய தவறுகளிலும் புரோகிராமர்களை இவை கைவிட்டுவிடுகின்றன. உதாரண பயன்பாடுசேமாஃபோருடன் எண்கள் இணைந்திருப்பதால், பல இழைகள் (threads) புறநிலையில் இருந்து ஒத்துழைப்பைப் பெற வேண்டிய போது அவை நிறுவப்படுகின்றன. பின்வரும் உதாரணத்தை கவனியுங்கள்:
ஒரு கவுண்டிங் சேமாஃபோருக்கு அப்பாற்பட்டு, பிளாக்கிங் சேமாஃபோர் என்பதும் ஒன்று உண்டு. ஒரு பிளாக்கிங் சேமாஃபோர் என்பது, பூஜ்ஜியத்தில் துவக்கப்படும். சேமாஃபோர் பிளாக்குகளில் P செயல்பாட்டைச் செய்யும் எந்தவொரு இழையின் மீதும் இதன் தாக்கம் இருக்கும். வன்பொருள் ஒத்துழைப்புபொதுவாக, தேவைப்படும் பின்புல மறைவு செயல்பாடுகளைச் (automicity operations) செய்ய சேமாஃபோரின் பயன்பாட்டிற்கு வன்பொருள் ஒத்துழைப்பு தேவைப்படுகிறது. பெரும்பாலும், தகவல் குறியீடுகளைக் (instructions) கொண்டிருக்கும் கணினி இயந்திர மொழிகள் குறிப்பாக சேமாஃபோர்களை மனதில் வைத்தே வடிவமைக்கப்பட்டு இருக்கின்றன. இந்தச் சிறப்பு தகவல் குறியீடுகள் நினைவகத்திற்கு ஒரு ரீட்-மாடிஃபை-ரைட் சுழற்சியைக் (read-modify-write cycle) கொண்டு செல்கின்றன, இவை தடையில்லாமல் இருப்பது மட்டுமில்லாமல், பிற புரோசஸர்கள் அல்லது உள்ளீட்டு/வெளியீட்டு சாதனங்களால் அதே நினைவக இடத்தில் நடைபெறும் ஏனைய எல்லா செயல்பாடுகளையும் தவிர்த்துவிடுகிறது. இந்தச் சிறப்பு தகவல் குறியீடுகள் பயன்படுத்தப்படும் சேமாஃபோர் வழிமுறை சோதனைச் செய்வதையும், ஒரு சேமாஃபோரை ஒரே அட்டாமிக் செயல்பாட்டில் மாற்றுவதற்கும் உத்திரவாதம் அளிக்கிறது. பைனரி சேமாஃபோரும், மியூடெக்சும்ஒரு மியூடெக்ஸ் என்பது பைனரி சேமாஃபோர் (அதாவது, 1-இன் திறனுடன் கூடிய ஒரு சேமாஃபோர்) ஆகும், வழக்கமாக உரிமைஉடைமை (ownership), பாதுகாப்பு அல்லது மீள்சுழற்சி (recursivity) ஆகியவற்றிற்கு ஏற்ப முன்னுரிமை மாற்றி அளிப்பது போன்ற சிறப்பு வசதிகளையும் உள்ளடக்கி இருக்கும். மியூடெக்ஸ் மற்றும் சேமாஃபோர் இரண்டிற்கும் இடையிலான வேறுபாடுகள் இயங்குதள அமைப்பைச் சார்ந்திருக்கிறது, இருந்தாலும் மியூடெக்ஸ்கள் சிறப்பார்ந்த மற்றும் விரைவான செயல்பாடுகளுக்காக நிறுவப்படுகின்றது. மியூடெக்ஸ்கள் பரஸ்பர விடுபாட்டிற்காக (mutual exclusion) (போஸ்ட்/ரிலீஸ் செயல்முறை இழைக்கு மறுக்கப்படுவது பெண்ட்/அக்யூர் என்று அழைக்கப்படுகிறது) மட்டுமே உரியவை என்றும், பைனரி சேமாஃபோர்கள் நிகழ்வு அறிவிப்புகளை (event notification) (எந்தவித இழையிலிருந்தும் எடுக்கும் முன்கூட்டிய திறன்) காட்டுவதற்கானவை என்று கருதப்படுகின்றன. குறிப்புகள் மற்றும் குறிப்புதவிகள்
பிற வலைத்தளங்கள்
|
Portal di Ensiklopedia Dunia