शेड्यूलिंग, कोर और घटनाएँ · 30 में पाठ 25 · लगभग 15 मिनट
सहकारी शेड्यूलिंग
कार्य बारी-बारी चलाएँ और नीति को CPU निर्देशों से अलग समझें।
01 / समझाएँ
विचार समझें
एक CPU एक समय में एक निर्देश चलाता है। शेड्यूलर चुनता है कि अगला कार्य कौन-सा होगा। सहकारी कार्य स्वयं नियंत्रण छोड़ते हैं; प्रीएम्प्टिव शेड्यूलिंग हर कार्य को सीमित निर्देश अवधि देती है। सिस्टम प्रयोगशाला बदल सकने वाली अवधि और स्पष्ट कार्य घटनाओं के साथ राउंड-रॉबिन शेड्यूलिंग दिखाती है।
VM चुनौती छोटा सहकारी वितरक है: कार्य A अपना काउंटर बढ़ाता है, फिर B अपना। CALL/RETURN बारी बदलना व्यक्त करते हैं। SLEEP माँगा गया विलंब दर्ज करता है; तत्काल CPU जाँच प्रतीक्षा नहीं करती, जबकि समयबद्ध प्रयोगशाला उसे मानती है।
02 / आज़माएँ
होते हुए देखें
आउटपुट क्रम 1 फिर 101 है। विलंब देखने के लिए धीमी गति लें; निर्देश अवधि तुलना के लिए सिस्टम प्रयोगशाला खोलें।
LOAD 1
CALL taskA
CALL taskB
HALT
taskA: PRINT
SLEEP 500
RETURN
taskB: LOAD 101
PRINT
RETURNएक समय में एक निर्देश के लिए एक कदम लें। उदाहरण बदलकर फिर चला सकते हैं।
03 / चुनौती
इसे काम करने दें
0 से 3 तक चक्रों की संख्या पढ़ें। A का काउंटर 0 और B का 100 से शुरू करें। हर चक्र में A को बढ़ाने और छापने के लिए बुलाएँ, फिर B को।
जाँचक संपादक के वर्तमान प्रोग्राम को हर 3 मामले के लिए नई मशीन में चलाता है। वह इनपुट और मेमोरी खुद देता है; प्रयोगशाला का वर्तमान आउटपुट और मेमोरी परिणाम तय नहीं करते।
INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA:
#
RETURN
taskB:
#
RETURNसंकेत चाहिए?
हर कार्य का अलग रजिस्टर है और उसे वितरक को RETURN करना चाहिए।
हल किया समाधान दिखाएँ
प्रोग्राम पढ़ें, हर निर्देश का असर अनुमान करें, फिर प्रयोगशाला में एक-एक कदम चलाएँ।
INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA: LOAD R1
ADD 1
COPY R0 R1
PRINT
SLEEP 0
RETURN
taskB: LOAD R2
ADD 1
COPY R0 R2
PRINT
SLEEP 0
RETURNइमोजी CPU प्रयोगशाला
इमोजी प्रोग्राम
LOAD, ADD या दूसरा निर्देश नाम लिखकर Space दबाएँ ताकि इमोजी जुड़े। Ctrl/⌘ + Enter चलाता/रोकता है; Escape रोकता है; Ctrl/⌘ + ] इंडेंट करता है। Tab फोकस बदलता है। लेबल कोलन लेते हैं। जंप शून्य-आधारित निर्देश पते लेते हैं।
निर्देश मानचित्र और ब्रेकपॉइंट (0)
ब्रेकपॉइंट निर्देश से पहले रोकते हैं। चलाएँ रुके ब्रेकपॉइंट के पार एक बार बढ़ता है; एक कदम सीधे निर्देश चलाता है। स्रोत बदलने से पुराने ब्रेकपॉइंट और मशीन स्थिति साफ़ होते हैं।
CPU रजिस्टर
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
स्टैक और लूप फ़्रेम
SP = 255 − डेटा गहराई − कॉल गहराई। स्टैक मेमोरी से अलग है।
डेटा स्टैक (नीचे → ऊपर)
खाली
कॉल वापसी पते (नीचे → ऊपर)
खाली
लूप फ़्रेम
खाली
आउटपुट और इनपुट
आउटपुट देखने के लिए PRINT चलाएँ।
कतार का इनपुट: खाली
मेमोरी · 256 बाइट · 0 गैर-शून्य
हर खाना पता:मान दिखाता है। R = इस कदम में पढ़ा; W = इस कदम में लिखा। जाँचने या निष्पादन से पहले मान रखने के लिए खाना चुनें। तीर कुंजियों से चलें, पंक्ति के लिए Home/End और पूरी मेमोरी के लिए Ctrl/⌘ + Home/End लें।
निष्पादन रिकॉर्ड · 0 प्रविष्टियाँ
हाल की प्रविष्टियाँ नीचे हैं। अलग पूर्ण पहले/बाद की स्थिति के लिए कोई भी शून्य-आधारित क्रमांक जाँचें।
अपनी चुनौती जाँचें
जब चाहें जाँच सकते हैं। पूर्णता दर्ज करने के लिए हर मामला पास हो।
प्रगति केवल localStorage लेती है। इस ब्राउज़र में रहती है और सर्वर पर नहीं जाती।