सिस्टम कॉल, प्रक्रियाएँ, थ्रेड व CPU नियोजन
fork की लागत क्या, और अवरोधक कॉल उपयोक्ता-स्तरीय थ्रेड हेतु कर्नेल-स्तरीय से भिन्न व्यवहार क्यों करती है। तत्पश्चात् नियोजन, जहाँ अंकगणित रहता है। चार कलनविधियाँ, प्रश्न का एक आकार: आगमन व स्फोट समय दिए, औसत प्रतीक्षा समय निकालें। उसमें से निकलने का विश्वसनीय मार्ग गैंट चार्ट बनाकर संख्याएँ पढ़ लेना है, क्योंकि प्रतीक्षा समय = परिवर्तन समय − स्फोट समय एक तत्समक है जिसे समापन समय ज्ञात होने पर यांत्रिक रूप से लगाया जा सकता है। और किसी गणना से पूर्व एक तथ्य साथ ले जाने योग्य है: लघुतम-शेष-समय-प्रथम औसत प्रतीक्षा समय न्यूनतम करती है, सिद्ध रूप से, अतः यदि कोई विकल्प दावा करे कि उसी निवेश पर कोई अन्य कलनविधि उससे आगे निकली, तो अंकगणित कहीं गलत है।द्वार: सिस्टम कॉल की वास्तविक लागत
उपयोक्ता कोड उपयोक्ता मोड में चलता है, जहाँ विशेषाधिकृत अनुदेश — किसी युक्ति से बात करना, पृष्ठ-सारणी बदलना, संसाधक रोकना — सरलतः अनुपलब्ध हैं। सिस्टम कॉल पार जाने का एकमात्र वैध मार्ग है: प्रोग्राम कॉल-संख्या व उसके तर्क वहाँ रखता है जहाँ परिपाटी कहती है, एक ट्रैप अनुदेश निष्पादित करता है, और हार्डवेयर कर्नेल मोड में बदलकर एक नियत हैंडलर पर कूद जाता है। तब कर्नेल प्रत्येक तर्क सत्यापित करता है, क्योंकि बुलाने वाले पर भरोसा नहीं, कार्य करता है, और लौटता है। open, read, write, fork, exec, wait व exit को सिस्टम कॉल पढ़ें; printf को पुस्तकालय फलन पढ़ें जो अंततः एक सिस्टम कॉल करता है। वह भेद सीधे परीक्षित होता है, और उसका महत्व लागत है: साधारण फलन-कॉल एक कूद है, जबकि सिस्टम कॉल दूसरी ओर तर्क-सत्यापन सहित मोड-परिवर्तन है।
fork() दो बार लौटता है: संतान को 0 मिलता है और जनक को संतान का PID, और वही एक असममिति fork के पश्चात् आने वाले कोड का सम्पूर्ण आधार है। गिनती का प्रश्न उसी से निकलता है। लगातार n अशर्त fork के पश्चात् प्रत्येक विद्यमान प्रक्रिया प्रत्येक चरण पर fork करती है, अतः जनसंख्या हर बार दुगुनी होती है: कुल 2n प्रक्रियाएँ विद्यमान होती हैं और उनमें 2n − 1 नई। अतः तीन fork 8 प्रक्रियाएँ व 7 संतानें देते हैं — 3 नहीं, और 4 नहीं। जाल if (fork() == 0) के भीतर का fork है, जहाँ केवल एक शाखा fork करती रहती है, और तब दुगुना होना रुक जाता है और वृक्ष बनाना पड़ता है। बनाइए; दुगुना करने का सूत्र केवल तब वैध है जब fork अशर्त हों।थ्रेड: एक पता-स्थान, कई प्रवाह
| संसाधन | साझा या निजी? | वह ऐसा क्यों होना ही है |
|---|---|---|
| कोड (टेक्स्ट) खंड | साझा | एक प्रोग्राम; थ्रेड उन्हीं अनुदेशों के भिन्न भाग चलाते हैं |
| वैश्विक व हीप आँकड़े | साझा | यही कारण है कि थ्रेड से संचार सस्ता है — और यही कि उन्हें ताले चाहिए |
| खुली फ़ाइलें, संकेत हैंडलर | साझा | वे प्रक्रिया-स्तरीय संसाधन हैं, प्रति-प्रवाह नहीं |
| स्टैक | निजी | प्रत्येक प्रवाह की अपनी कॉल-शृंखला व अपने स्थानीय चर हैं |
| रजिस्टर, प्रोग्राम काउंटर | निजी | प्रत्येक प्रवाह भिन्न अनुदेश पर है — वही उसे प्रवाह बनाता है |
चार कलनविधियाँ, एक प्रक्रिया-समुच्चय, गणना सहित
नीचे की तुलना एक प्रक्रिया-समुच्चय को चारों कलनविधियों से चलाती है, क्योंकि चार पृथक् उदाहरण क्रम के विषय में कुछ नहीं सिखाते। लें P1(आगमन 0, स्फोट 8), P2(1, 4), P3(2, 9), P4(3, 5)। गैंट चार्ट बनाएँ, प्रत्येक समापन समय पढ़ें, फिर दो तत्समक लगाएँ: परिवर्तन = समापन − आगमन तथा प्रतीक्षा = परिवर्तन − स्फोट। यहाँ कुछ भी स्मरण रखने योग्य नहीं — चलाने योग्य है, और उसी क्रम में, क्योंकि प्रतीक्षा समय पर सीधे तर्क करने का प्रयास ही वहाँ है जहाँ अंकगणित बिगड़ता है।
| कलनविधि | समापन समय | औसत प्रतीक्षा | औसत परिवर्तन |
|---|---|---|---|
| SRTF (पूर्वाधिकारी SJF) | 17, 5, 26, 10 | 6.5 | 13 |
| SJF, अपूर्वाधिकारी | 8, 12, 26, 17 | 7.75 | 14.25 |
| FCFS | 8, 12, 21, 26 | 8.75 | 15.25 |
| राउंड रॉबिन, क्वांटम 4 | 20, 8, 26, 25 | 11.75 | 18.25 |
P2 के आने पर P1 को बाधित नहीं कर सकती, अतः 1.25 खोती है। FCFS अधिक खोती है, और कारण का नाम है: कारवाँ प्रभाव, जहाँ शीर्ष पर एक दीर्घ काम अपने पीछे के प्रत्येक लघु काम को अपनी पूरी लंबाई प्रतीक्षा कराता है। और राउंड रॉबिन इस मापक पर निकृष्टतम है जबकि वही है जिसे आप वस्तुतः तैनात करेंगे, और वही वास्तविक पाठ है: वह औसत प्रतीक्षा समय अनुकूलित ही नहीं कर रही, वह प्रत्युत्तर समय अनुकूलित कर रही है — किसी काम के प्रथम बार चलने से पूर्व की प्रतीक्षा, जिसे राउंड रॉबिन (n−1)q पर परिबद्ध करती है जबकि SJF उसे अपरिबद्ध छोड़ती है। FCFS में 9-इकाई बैच काम के पीछे कोई लघु सहभागी काम कुछ भी कहने हेतु 9 इकाई प्रतीक्षा करता है। राउंड रॉबिन में वह अधिकतम 12 प्रतीक्षा करता है और फिर प्रत्येक चक्र चलता है। नियोजक चुनने का अर्थ है यह चुनना कि आप किस संख्या को बड़ी होने देने से इनकार करते हैं।दूसरा आधा: डिस्क का नियोजन
पाठ्यक्रम की वस्तु CPU व I/O नियोजन है, और दूसरा आधा उसी आकार की भिन्न समस्या है। डिस्क निवेदन की लागत अधिकांशतः अन्वेषण समय है, शीर्ष की यात्रा, अतः नियोजक प्रतीक्षा समय के बजाय कुल शीर्ष-गति न्यूनतम करता है — और मापक पार किए सिलिंडर हैं, जिन्हें आप निवेदन-क्रम से ठीक वैसे गिनते हैं जैसे गैंट चार्ट गिना था। एक उदाहरण, छहों कलनविधियों हेतु गणना सहित: शीर्ष सिलिंडर 53 पर, डिस्क 0 से 199, लंबित निवेदन 98, 183, 37, 122, 14, 124, 65, 67।
| कलनविधि | सेवा-क्रम | गति |
|---|---|---|
| FCFS | 98, 183, 37, 122, 14, 124, 65, 67 | 640 |
| SSTF | 65, 67, 37, 14, 98, 122, 124, 183 | 236 — यहाँ न्यूनतम |
| SCAN (199 तक, फिर उलट) | 65, 67, 98, 122, 124, 183, 199, 37, 14 | 331 |
| C-SCAN (199 तक, 0 पर कूद) | 65, 67, 98, 122, 124, 183, 199, 0, 14, 37 | 382 |
| LOOK (अंतिम निवेदन पर मुड़ना) | 65, 67, 98, 122, 124, 183, 37, 14 | 299 |
| C-LOOK | 65, 67, 98, 122, 124, 183, 14, 37 | 322 |
मुख्य बिंदु
- सिस्टम कॉल मोड-परिवर्तन है, फलन-कॉल नहीं — उसकी लागत वहीं से आती है।
- n अशर्त fork 2n प्रक्रियाएँ देते हैं; सशर्त fork दुगुना करना तोड़ता है, अतः वृक्ष बनाएँ।
- थ्रेड कोड, वैश्विक चर, हीप व खुली फ़ाइलें साझा करते हैं; स्टैक, रजिस्टर व PC निजी रखते हैं।
- उपयोक्ता-स्तरीय थ्रेड में अवरोधक कॉल सम्पूर्ण प्रक्रिया अवरुद्ध करती है, और ऐसी एक प्रक्रिया को एक CPU मिलता है।
- पहले समापन समय निकालें, फिर परिवर्तन = समापन − आगमन, फिर प्रतीक्षा = परिवर्तन − स्फोट।
- औसत प्रतीक्षा समय हेतु SRTF इष्टतम है; यदि कोई विकल्प उसी निवेश पर उससे आगे निकले, अंकगणित गलत है।
- राउंड रॉबिन औसत प्रतीक्षा समय के बदले परिबद्ध प्रत्युत्तर समय लेती है; विशाल क्वांटम उसे FCFS बना देता है।
- चालू → तैयार पूर्वाधिकरण है, और अवरुद्ध → चालू विद्यमान नहीं।
- डिस्क नियोजन सिलिंडर गिनता है: मानक उदाहरण पर FCFS 640, SSTF 236, SCAN 331, LOOK 299।
- SSTF दूरस्थ निवेदनों को भूखा रखती है, इसीलिए SCAN है — SJF बनाम राउंड रॉबिन वाला वही सौदा।
अभ्यास प्रश्न (9)
उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।
कोई प्रोग्राम बिना किसी शर्त व बिना किसी प्रक्रिया के शीघ्र समाप्त होने
fork(); fork(); fork();निष्पादित करता है। अंतिम कथन पूर्ण होने पर कितनी प्रक्रियाएँ विद्यमान हैं?उत्तर देखें
उत्तर: C — 8
8। प्रत्येक प्रक्रिया जो किसीforkपर विद्यमान है उसे निष्पादित करती है, अतः जनसंख्या तीनों कॉल में से प्रत्येक पर दुगुनी होती है: 1 → 2 → 4 → 8। बनी संतानों की गिनती एक कम, 7 है, और विकल्प B वही संख्या उस प्रश्न हेतु देता है जो पूछा नहीं गया — पढ़ें कि प्रश्न “विद्यमान प्रक्रियाएँ” कहता है या “बनी संतान प्रक्रियाएँ”। विकल्प A प्रति कॉल एक संतान गिनता है, जो केवल तब सही होता यदि एकमात्र प्रक्रिया सारा fork करती और संतानें आगे कूद जातीं। दुगुना होना यहाँ ठीक इसलिए टिकता है कि fork अशर्त हैं; दूसरे कोif (fork() == 0)के भीतर रखें और केवल संतानें आगे बढ़ती हैं, अतः वृक्ष बनाना पड़ता है।प्रक्रियाएँ P1, P2, P3, P4 क्रमशः 0, 1, 2, 3 समय पर आती हैं, CPU स्फोट क्रमशः 8, 4, 9, 5। लघुतम-शेष-समय-प्रथम (पूर्वाधिकारी) नियोजन में औसत प्रतीक्षा समय, समय-इकाइयों में, ______ है
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 6.5
6.5। गैंट चार्ट बनाएँ। P1, 0–1 चलती है; P2, स्फोट 4 सहित P1 के शेष 7 के सामने आती है, अतः पूर्वाधिकरण करके 1–5 पूर्णता तक चलती है। t=5 पर शेष कार्य P1 7, P3 9, P4 5 है, अतः P4, 5–10 चलती है, फिर P1, 10–17, फिर P3, 17–26। समापन समय P1 17, P2 5, P3 26, P4 10 हैं। परिवर्तन = समापन − आगमन देता है 17, 4, 24, 7; प्रतीक्षा = परिवर्तन − स्फोट देता है 9, 0, 15, 2, जिनका योग 26, चार प्रक्रियाओं पर = 6.5। दो जाँचें करने योग्य हैं: P2 शून्य प्रतीक्षा करती है क्योंकि उसने आगमन पर तत्काल पूर्वाधिकरण किया, और उत्तर उसी निवेश पर FCFS (8.75) से अधिक नहीं होना चाहिए, क्योंकि इस मापक हेतु SRTF इष्टतम है। 7.75 मिलना अर्थात् t=1 का पूर्वाधिकरण छूटा — वह अपूर्वाधिकारी SJF है।दो थ्रेड एक ही प्रक्रिया के हैं। निम्नलिखित में से कौन उनके बीच साझा हैं?
उत्तर देखें
उत्तर: A — हीप; B — खुले फ़ाइल विवरणकों की सारणी; D — वैश्विक चर
A, B व D। थ्रेड पता-स्थान साझा करने हेतु विद्यमान हैं, अतः उस स्थान में रहने वाला और प्रति-प्रवाह न होने वाला सब कुछ साझा है: हीप, वैश्विक चर, तथा प्रक्रिया-स्तरीय संसाधन जैसे खुली-फ़ाइल सारणी व संकेत हैंडलर। C अपवाद है और थ्रेड का सम्पूर्ण अभिप्राय वही है: नियंत्रण का प्रत्येक प्रवाह भिन्न कॉल-शृंखला सहित भिन्न अनुदेश पर है, अतः प्रत्येक को अपना स्टैक चाहिए, अपने रजिस्टर व प्रोग्राम काउंटर सहित। वही असममिति थ्रेड को सस्ता व संकटपूर्ण दोनों बनाती है — सस्ता क्योंकि दो थ्रेड बिना कर्नेल के किसी हस्तक्षेप के वैश्विक चर से आँकड़े दे सकते हैं, संकटपूर्ण क्योंकि उसी वैश्विक चर को ताला चाहिए। एक उपयोगी प्रति-जाँच: जिसे अमूर्तन तोड़े बिना दोहराया नहीं जा सकता (स्टैक, PC, रजिस्टर) वह निजी है; शेष सब साझा।उन्हीं चार प्रक्रियाओं हेतु — आगमन 0, 1, 2, 3 व स्फोट 8, 4, 9, 5 — औसत प्रतीक्षा समय SRTF में 6.5, अपूर्वाधिकारी SJF में 7.75, FCFS में 8.75 तथा क्वांटम 4 सहित राउंड रॉबिन में 11.75 है। कौन-सा निष्कर्ष सही है?
उत्तर देखें
उत्तर: B — राउंड रॉबिन औसत प्रतीक्षा समय पर हारती है क्योंकि वह उसके स्थान पर परिबद्ध प्रत्युत्तर समय अनुकूलित कर रही है
चारों संख्याएँ एक ही वस्तु मापती हैं, और राउंड रॉबिन उसे न्यूनतम करने का प्रयास ही नहीं कर रही। उसकी प्रत्याभूति प्रत्युत्तर समय पर है — n प्रक्रियाओं व क्वांटम q सहित, कोई काम प्रथम बार चलने से पूर्व लगभग (n−1)q से अधिक प्रतीक्षा नहीं करता — और सहभागी तंत्र उसी संख्या की चिंता करता है, तथा SJF-कुल के नियोजक उसे अपरिबद्ध छोड़ देते हैं। विकल्प A एकमात्र मापक से गलत पाठ निकालता है। विकल्प C जिस दिशा का दावा करता है उसमें असंभव है: औसत प्रतीक्षा समय हेतु SRTF सिद्ध रूप से इष्टतम है, अतः उसी निवेश पर कोई उससे आगे नहीं निकल सकता; बड़ा क्वांटम राउंड रॉबिन को केवल FCFS के 8.75 की ओर धकेलता है, जो अभी भी निकृष्ट है। विकल्प D उलटी दिशा में जाता है — समान स्फोट व समान आगमन-क्रम सहित FCFS, SJF व SRTF सब वही अनुसूची बनाती हैं, अतः क्रम उलटने के बजाय ढह जाता है।उपयोक्ता-स्तरीय थ्रेड प्रयोग करती किसी प्रक्रिया में एक थ्रेड अवरोधक
readसिस्टम कॉल करता है। उस प्रक्रिया के अन्य थ्रेड का क्या होता है?उत्तर देखें
उत्तर: B — वे सब अवरुद्ध हो जाते हैं, क्योंकि कर्नेल केवल एक नियोजनीय इकाई देखता है
वे सब अवरुद्ध हो जाते हैं। उपयोक्ता-स्तरीय थ्रेड प्रक्रिया के भीतर एक पुस्तकालय द्वारा नियोजित होते हैं, अतः कर्नेल ठीक एक नियोजनीय इकाई के विषय में जानता है — प्रक्रिया — और अवरोध वह है जो कर्नेल अपनी ज्ञात इकाइयों के साथ करता है। अतः वह प्रक्रिया अवरुद्ध करता है, और प्रत्येक अन्य थ्रेड रुक जाता है यद्यपि प्रत्येक पूर्णतः चलने योग्य था। विकल्प A कर्नेल-स्तरीय थ्रेड का उत्तर है, जो व्यक्तिगत रूप से दृश्य व पृथक् नियोजनीय हैं, और वह वैषम्य ही परीक्षणीय विषय है। विकल्प C ऐसा कुछ वर्णित करता है जो उपयोक्ता-स्तरीय पुस्तकालय नहीं कर सकता: उसके पास एक CPU है क्योंकि उसके पास एक नियोजनीय इकाई है, और इसीलिए उपयोक्ता-स्तरीय थ्रेड बहुसंसाधक का लाभ नहीं उठा सकते। विकल्प D वास्तविक संकर अभिकल्प (अनेक-से-अनेक) है किंतु प्रश्न वह निर्दिष्ट नहीं करता, और “उपयोक्ता-स्तरीय” को “संकर” पढ़ लेना ही वह चूक है जिसकी परीक्षा हो रही है।कौन-सा प्रक्रिया-अवस्था संक्रमण प्रक्रिया द्वारा नहीं अपितु नियोजक द्वारा कराया जाता है?
उत्तर देखें
उत्तर: C — चालू → तैयार
चालू → तैयार पूर्वाधिकरण है, और सूची में वही एकमात्र संक्रमण है जिसे प्रक्रिया घटित नहीं कराती। नियोजक उसे टाइमर व्यवधान पर करता है, ऐसी प्रक्रिया से CPU लेते हुए जो उसे प्रयोग करने को अभी भी इच्छुक थी — और ठीक वही किसी नियोजन कलनविधि को पूर्वाधिकारी बनाता है। शेष सब प्रक्रिया के स्वयं के कार्य हैं या उसका परिणाम: चालू → अवरुद्ध इसलिए होता है कि प्रक्रिया ने ऐसा कुछ माँगा जिसकी उसे प्रतीक्षा करनी है, चालू → समाप्त क्योंकि उसनेexitबुलाया, और अवरुद्ध → तैयार जब प्रतीक्षित घटना आती है (I/O समापन हैंडलर उसे हिलाता है, पर प्रतीक्षा प्रक्रिया ने कराई)। एक संक्रमण सम्पूर्ण सूची से अनुपस्थित है और अन्यत्र सामान्य भ्रामक है: अवरुद्ध → चालू विद्यमान नहीं। प्रतीक्षा समाप्त करने वाली प्रक्रिया तैयार पंक्ति में सम्मिलित होती है और सबकी भाँति नियोजित होती है।प्रत्येक प्रक्रिया के CPU स्फोट से बड़े क्वांटम सहित राउंड रॉबिन नियोजन किसके समरूप व्यवहार करता है?
उत्तर देखें
उत्तर: B — प्रथम आगत प्रथम सेवित
FCFS। राउंड रॉबिन किसी प्रक्रिया का पूर्वाधिकरण केवल उसका क्वांटम समाप्त होने पर करती है; यदि क्वांटम प्रत्येक स्फोट से बड़ा है, तो कोई क्वांटम कभी समाप्त नहीं होता, अतः प्रत्येक प्रक्रिया तैयार पंक्ति में प्रवेश के क्रम में पूर्णता तक चलती है — और वही FCFS की परिभाषा है। ध्यान दें उत्तर किस पर निर्भर नहीं है: राउंड रॉबिन के चयन में स्फोट-लंबाई की कोई भूमिका नहीं, और इसीलिए क्वांटम कैसे भी नियत हो वह SJF या SRTF (विकल्प A व C) में अपभ्रष्ट नहीं हो सकती। उन्हें स्फोट-लंबाई की सूचना चाहिए जिसे राउंड रॉबिन कभी नहीं देखती। विकल्प D ऐसा तंत्र जोड़ता है जो राउंड रॉबिन के पास नहीं। दूसरी सीमा इसके साथ रखने योग्य है: जैसे क्वांटम शून्य की ओर घटता है, संदर्भ-परिवर्तन लागत s हेतु CPU का उपयोगी अंश q/(q+s) है, अतः उपरिव्यय कार्य को डुबो देता है।उन्हीं चार प्रक्रियाओं पर (आगमन 0, 1, 2, 3; स्फोट 8, 4, 9, 5) FCFS औसत प्रतीक्षा समय 8.75 देती है जबकि अपूर्वाधिकारी SJF 7.75। 1.0 का अंतर किससे आता है?
उत्तर देखें
उत्तर: B — समय 12 पर SJF द्वारा P3 से पूर्व P4 चलाना, जो 9 इकाई प्रतीक्षा P4 से हटाकर P3 पर डालता है
दोनों कलनविधियाँ P1 को 0–8 व P2 को 8–12 चलाती हैं, अतः वे t=12 तक सहमत हैं। वहाँ FCFS, P3 (जो 2 पर आई) लेती है और SJF लघुतर P4, और वही एक पुनर्क्रमण सम्पूर्ण अंतर है। प्रतीक्षा समय FCFS के 0, 7, 10, 18 से SJF के 0, 7, 15, 9 हो जाते हैं: P4, 9 बचाती है और P3, 5 खोती है, चार प्रक्रियाओं पर 4 की शुद्ध बचत = 1.0, जो ठीक वही अंतर है। विकल्प A, SRTF वर्णित करता है, अपूर्वाधिकारी SJF नहीं — वह पूर्वाधिकरण अतिरिक्त 1.25 का है और औसत को 6.5 पर ले जाता है, अतः उसे यहाँ जोड़ना दोहरी गिनती है। विकल्प C व D राउंड रॉबिन का क्वांटम तथा ऐसा लागत-प्रतिरूप ले आते हैं जिसे कोई भी कलनविधि प्रयोग नहीं करती; ऊपर के दोनों औसत शून्य परिवर्तन-लागत सहित निकाले गए हैं।किसी डिस्क में सिलिंडर 0 से 199 हैं और शीर्ष सिलिंडर 53 पर है। लंबित निवेदन, आगमन-क्रम में, 98, 183, 37, 122, 14, 124, 65, 67 हैं। SSTF डिस्क नियोजन में शीर्ष कुल कितने सिलिंडर पार करता है? ______
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 236
236। SSTF सदा निकटतम लंबित निवेदन पर जाती है, अतः उसे अनुरेखित करें: 53 से निकटतम 65 है (12 सिलिंडर), फिर 67 (2), फिर निकटतम 98 के बजाय 37 है (30), फिर 14 (23), और अब ही शीर्ष डिस्क पार करके 98 (84), फिर 122 (24), 124 (2) व 183 (59) जाता है। जोड़ने पर: 12 + 2 + 30 + 23 + 84 + 24 + 2 + 59 = 236। उसी पंक्ति पर FCFS से तुलना करें, जो आगमन-क्रम में सेवा देती है और 640 पार करती है — SSTF 63% बचाती है, और वह एकमात्र महँगी चाल (14 से 98, 84 सिलिंडर) अपरिहार्य है क्योंकि पंक्ति में शीर्ष के दोनों ओर निवेदन हैं। सर्वाधिक सामान्य त्रुटि एक दिशा में बहना है, जो उसके स्थान पर SCAN के 331 या LOOK के 299 देती है: SSTF में दिशा की धारणा ही नहीं, और वह जब भी निकटतम निवेदन पीछे हो तब उलट जाती है।