प्रोसेस, थ्रेड और निष्पादन की अवस्थाएँ
सीखने के लक्ष्य और पूर्वज्ञान
इस पाठ के बाद आप stored program और process का अंतर, threads के साझा संसाधन, ready/running/blocked अवस्थाओं के बदलाव, तथा concurrency और parallel execution का अंतर समझ सकेंगे। Instructions, variables और function calls का सामान्य ज्ञान पर्याप्त है। यह OS का प्रारंभिक पाठ है; system calls, process creation APIs, IPC और thread implementations का पूरा अध्ययन नहीं।
1. Program काम का विवरण है; process उसका एक निष्पादन है
Executable file में instructions और data का विवरण होता है। उसे शुरू करने पर बदलती हुई state वाला execution instance बनता है। इसलिए एक ही calculator को दो बार शुरू करने पर दो processes हो सकते हैं, भले दोनों का code एक ही file से आया हो। उनका input, registers और काम की प्रगति समान होना आवश्यक नहीं।
बीच में रोके गए execution को आगे बढ़ाने के लिए OS को उसका execution context रखना पड़ता है। इसमें अगले instruction का पता बताने वाला program counter, register values, तथा memory और resources के प्रबंधन की जानकारी महत्वपूर्ण है। Process control block ऐसी प्रबंधन जानकारी का वैचारिक OS record है; उसकी वास्तविक बनावट system पर निर्भर करती है। यह न मानें कि PCB में process की पूरी memory की copy रखी होती है।
Process का अपना address space होता है, अर्थात वे memory locations जिन्हें वह address कर सकता है। सामान्य protected-process model में अलग processes के virtual address spaces अलग होते हैं। दो processes में समान संख्यात्मक virtual address होने से storage साझा सिद्ध नहीं होता। Explicit shared memory और दूसरे IPC तरीके संभव हैं, लेकिन प्रश्न में बताए बिना उन्हें मान नहीं लेना चाहिए।
2. Threads: एक process के भीतर अलग execution paths
Thread का अपना program counter, register state और stack होता है। एक process के threads सामान्यतः उसका address space साझा करते हैं, जिसमें code, global data और heap objects आते हैं। Open files जैसे process-level resources भी साझा होते हैं। अलग stacks के कारण दो threads एक ही समय पर अलग function calls के भीतर हो सकते हैं।
“हर thread का अपना stack है” का अर्थ memory-protection की गारंटी नहीं है। ये stacks shared address space में हैं। यदि किसी stack object का valid reference साझा किया जाए और उसकी lifetime उपयुक्त हो, तो दूसरा thread उसे access कर सकता है। Thread-local storage भी ordinary global variable से अलग है। इसलिए पहले पहचानें कि किस object को access किया जा रहा है; केवल source program में उसका नाम देखना पर्याप्त नहीं।
हल किया गया उदाहरण: एक process में T1 और T2 threads, शुरू में 4 मान वाला global count और heap array H हैं। T1 यदि H[0] बदलता है, तो T2 उसी H[0] को access कर सकता है। दोनों threads की current instruction positions अलग हो सकती हैं। कोई दूसरा असंबंधित process P2 केवल H नाम का array घोषित करने से इस H को साझा नहीं करने लगता। Shared update सही synchronization से हुआ है या नहीं, यह अलग प्रश्न है जिसे अगले पाठों में देखेंगे।
3. जानबूझकर छोटा रखा गया state model
आगे के traces में हर process का एक schedulable thread और machine का एक CPU execution slot है। Suspended states और implementation-specific विवरण शामिल नहीं हैं।
- Ready: CPU पर चलने के लिए योग्य है, लेकिन अभी चुना नहीं गया है।
- Running: इस समय CPU पर instructions चला रहा है।
- Blocked या waiting: किसी निश्चित घटना, जैसे blocking I/O पूरा होने, से पहले आगे नहीं बढ़ सकता।
“New” और “terminated” इस मुख्य तीन-state model के आसपास creation और completion बताते हैं। Ready process CPU चयन की प्रतीक्षा करता है; blocked process उस घटना की प्रतीक्षा करता है जो उसे फिर योग्य बनाएगी। दोनों को केवल “प्रतीक्षारत” कहने से scheduling के लिए आवश्यक अंतर छिप जाता है।
Dispatch पर ready → running, preemption पर running → ready, प्रतीक्षा आवश्यक होने पर running → blocked, और संबंधित घटना पूरी होने पर blocked → ready होता है। घटना पूरी होना तुरंत CPU मिलने की गारंटी नहीं है। Dispatch तुरंत बाद हो सकता है, लेकिन पहले eligibility वापस आती है। इस model में कोई ready process पहले चले बिना blocking I/O request नहीं करता।
4. हल की गई समयरेखा: नाम नहीं, घटनाएँ देखें
A और B समय 0 पर ready हैं। पहले A चुना जाता है। A को 2 CPU units, फिर 3 elapsed units का blocking I/O, फिर 1 अंतिम CPU unit चाहिए। B को बिना I/O के 4 CPU units चाहिए। Policy non-preemptive है: running process block होने या समाप्त होने तक CPU रखता है। CPU दूसरे process को चलाते समय I/O आगे बढ़ सकता है और हर overhead शून्य है।
| समय-अंतराल या घटना | A | B | कारण |
|---|---|---|---|
| [0,2) | Running | Ready | A का पहला CPU burst |
| समय 2 | Blocked होता है | Dispatch होता है | A का I/O शुरू; B योग्य है |
| [2,5) | Blocked | Running | A का I/O और B का CPU काम साथ आगे बढ़ते हैं |
| समय 5 | Ready होता है | Running रहता है | A का I/O पूरा; B को preempt नहीं करते |
| [5,6) | Ready | Running | B की चौथी CPU unit समय 6 पर पूरी होती है |
| [6,7) | Running | Terminated | A अपनी अंतिम CPU unit पूरी करता है |
A के 3 units CPU पर, 3 blocked और 1 ready में जाते हैं: arrival से completion तक 3+3+1=7 units। B के 2 units ready और 4 running में, कुल 6 units हैं। CPU समय 0 से 7 तक लगातार काम करता है, इसलिए इसी window में utilization 7/7=100% है। इसका अर्थ यह नहीं कि A ने कभी प्रतीक्षा नहीं की। CPU utilization पूरी machine का माप है, किसी एक process के waiting time का नहीं।
सीमांत जाँच: यदि B को केवल 1 CPU unit चाहिए होती, तो वह समय 3 पर समाप्त होता, जबकि A समय 5 तक blocked रहता। कोई और ready process न होने पर CPU [3,5) में idle होता, भले एक अधूरा process मौजूद है। “Process मौजूद है” और “process ready है” एक बात नहीं।
5. Concurrency, parallelism और switching
एक CPU execution slot पर दो threads बारी-बारी से प्रगति कर सकते हैं, बिना उनके instructions एक ही क्षण चलाए। यह concurrency है, CPU parallelism नहीं। दो execution slots पर दो runnable threads साथ चल सकते हैं, लेकिन slots उपलब्ध होने मात्र से scheduler का उन्हें साथ चलाना निश्चित नहीं होता।
Context switch चल रहे execution context को बदलता है। System call OS की service के लिए नियंत्रित request है। दोनों एक बात नहीं: system call दूसरे thread पर switch किए बिना उसी thread में लौट सकता है। Timer interrupt preemption करा सकता है, भले program ने कोई OS service न माँगी हो। केवल mode बदलने से process switch सिद्ध नहीं होता।
Multithreaded process के अलग threads अलग execution states में हो सकते हैं। ऊपर process-level trace इसलिए सही है क्योंकि हर process में स्पष्ट रूप से एक thread दिया था। उसके “एक process, एक state” सरलीकरण से यह निष्कर्ष न निकालें कि process के सभी threads हमेशा साथ चलेंगे या साथ block होंगे।
मुख्य बातें और सामान्य गलतियाँ
- Processes गिनते समय executable filenames नहीं, execution instances गिनें।
- Shared data और हर thread के execution context को अलग पहचानें।
- Ready का अर्थ योग्य; blocked का अर्थ किसी घटना की जरूरत बाकी है।
- I/O completion सामान्यतः eligibility लौटाता है, तुरंत चलने की गारंटी नहीं।
- एक CPU tasks को interleave कर सकता है; तब भी synchronization की समस्या संभव है।
- हर system call को process switch, blocked process को CPU इस्तेमाल करने वाला, या अलग stacks को threads के बीच isolation न मानें।
मौलिक अभ्यास: छह single-correct MCQ
ये मौलिक प्रश्न हैं, पिछले वर्षों के प्रश्न नहीं। हर प्रश्न में ठीक एक विकल्प चुनें। प्रश्न की सभी मान्यताएँ लागू रहेंगी।
C01. दो threads एक सामान्य process के हैं। कौन-सी चीज सामान्यतः हर thread की अलग होती है?
A. Heap address space B. Program counter और register state C. Process address space का executable code D. Process-level open-file resources
उत्तर: B
A: Threads सामान्यतः process का address space और heap objects साझा करते हैं।
B: हर thread को अलग execution position और register values चाहिए ताकि वह स्वतंत्र रूप से फिर चल सके।
C: Threads साझा code में अलग positions पर हो सकते हैं; साझा code का अर्थ एक program counter नहीं।
D: इस model में open-file resources सामान्यतः process स्तर पर साझा होते हैं।
C02. कोई blocked process अपना I/O पूरा करता है और दूसरा process non-preemptively चलता रहता है। अगले dispatch से पहले पहले process की state क्या होगी?
A. Running B. Terminated C. Ready D. उसी पूरे हुए I/O पर अब भी blocked
उत्तर: C
A: उसे dispatch नहीं किया गया और CPU पर दूसरा process है।
B: I/O request पूरी होना process का समाप्त होना नहीं।
C: आवश्यक घटना पूरी होने से eligibility लौट गई, पर CPU चयन की प्रतीक्षा बाकी है।
D: बताया गया I/O अब बाधा नहीं; कोई दूसरी blocking condition नहीं दी।
C03. A और B समय 0 पर आते हैं; A पहले चलता है। A को CPU 2, फिर blocking I/O 3, फिर CPU 1 चाहिए; B को CPU 4 चाहिए। एक CPU, non-preemptive execution, overlap करने वाला I/O और zero overhead हों तो A कब पूरा होगा?
A. 5 B. 6 C. 7 D. 10
उत्तर: C
A: समय 5 पर A का I/O पूरा होता है, अंतिम CPU burst नहीं।
B: B समय 6 पर पूरा है; A की अंतिम CPU unit बाकी है।
C: A समय 0–2 चलता, 2–5 blocked, B के पूरा होने तक 5–6 ready, फिर 6–7 चलता है।
D: सभी CPU और I/O durations जोड़ने से A के I/O और B के CPU का overlap छूटता है।
C04. एक CPU execution slot वाली machine पर T1 और T2 बारी-बारी से चलते हैं। कौन-सा कथन निकलता है?
A. वे CPU पर साथ चले बिना concurrent हो सकते हैं। B. उन्हें CPU instructions एक साथ चलाने होंगे। C. उनके process address spaces अलग होने ही चाहिए। D. Race condition असंभव है।
उत्तर: A
A: Interleaving concurrency देता है; एक execution slot पर CPU execution एक साथ नहीं होता।
B: एक क्षण में उस single slot पर केवल एक thread चलता है।
C: एक process के threads भी बारी-बारी चल सकते हैं; address spaces अलग होना नहीं निकलता।
D: Shared read और बाद के write के बीच switch होने से race संभव है।
C05. System call के बारे में कौन-सा कथन सही है?
A. यह हमेशा नया process शुरू करता है। B. यह हमेशा caller समाप्त करता है। C. यह हमेशा दूसरे process पर switch करता है। D. यह दूसरे thread पर context switch किए बिना उसी thread में लौट सकता है।
उत्तर: D
A: जानकारी लेने जैसी कई services नया process नहीं बनातीं।
B: Process exit एक service है, हर system call का व्यवहार नहीं।
C: Service request और चल रहे execution context का बदलना अलग घटनाएँ हैं।
D: System call OS service लेता है; लौटने से पहले दूसरा thread चुनना आवश्यक नहीं।
C06. केवल एक अधूरा process है और वह I/O पर blocked है। कोई दूसरा schedulable काम ready नहीं। घटना पूरी होने तक CPU क्या कर सकता है?
A. उस blocked process का अगला ordinary instruction फिर भी चलाए B. कोई योग्य process न होने से idle रहे C. Process को terminated घोषित करे D. उसे schedule करके I/O duration शून्य करे
उत्तर: B
A: Blocked का अर्थ है कि execution आगे बढ़ने से पहले बताई घटना आवश्यक है।
B: अधूरा, पर blocked process CPU को व्यस्त रखना आवश्यक नहीं बनाता।
C: घटना की प्रतीक्षा का अर्थ completion नहीं।
D: Scheduling से दी हुई device-wait duration गायब नहीं होती।
स्रोत और दायरा
यह मौलिक प्रारंभिक पाठ आधिकारिक GATE 2027 CS syllabus के Section 8, Operating System, से जुड़ा है। इससे OS या पूरा syllabus समाप्त नहीं होता। Syllabus विषय की प्रासंगिकता और मूल textbook references आधारभूत concepts की जाँच के लिए हैं। उदाहरण, समयरेखाएँ और अभ्यास मौलिक हैं।
- Official GATE 2027 CS syllabus
- OSTEP: The Abstraction: The Process
- OSTEP: Concurrency: An Introduction
स्रोत जाँचे गए: 2026-10-14।
प्रगति सहेजने के लिए साइन इन करें। साइन इन