CPU में “You” जोड़ना - 17 वर्षीय लेखक द्वारा CPU के प्रोग्राम चलाने के तरीके की गाइड
(github.com/hackclub)- यह एक तकनीकी व्याख्या है जो बताती है कि कंप्यूटर किसी प्रोग्राम को शुरुआत से अंत तक कैसे चलाता है, और इसका फोकस इस बात को समझने पर है कि बूट होने से लेकर प्रोग्राम चलने तक कंप्यूटर कैसे काम करता है
- यह उन सवालों से शुरू होती है कि प्रोग्राम चलने पर वास्तव में क्या होता है, क्या प्रोग्राम सीधे CPU पर चलते हैं, syscalls क्या हैं और कैसे काम करते हैं, और कई प्रोग्राम एक साथ कैसे चल पाते हैं
- इसकी पृष्ठभूमि में यह समस्या-बोध है कि जो लोग विश्वविद्यालय नहीं जाते, उनके लिए समग्र सिस्टम सामग्री बहुत कम है, इसलिए अलग-अलग गुणवत्ता वाली और कभी-कभी परस्पर विरोधी कई स्रोतों को देखना पड़ता है
- कई हफ्तों की शोध और लगभग 40 पन्नों के नोट्स के आधार पर, यह सीखी हुई बातों को एक मज़बूत लेख में व्यवस्थित करने के उद्देश्य से तैयार की गई सामग्री है
- जो पाठक इसे जल्दी पढ़ना चाहते हैं या जिन्हें लगता है कि वे यह पहले से जानते हैं, उनके लिए Chapter 3: How to Run a Program का लिंक अलग से दिया गया है
1 टिप्पणियां
Hacker News राय
नमस्ते! मैं Lexi हूँ, जिसने यह लेख/मिनीबुक लिखी है
“वेबसाइट खोलने पर क्या होता है?” वाला क्लासिक सवाल तो है, लेकिन मुझे हमेशा “प्रोग्राम चलाने पर क्या होता है?” में ज़्यादा दिलचस्पी रही। करीब 3 महीने पहले इस सवाल का जवाब न दे पाना मुझे इतना खल गया कि मैंने खुद पढ़ने का फैसला किया
प्रोग्रामिंग में जो कुछ भी जानती हूँ, वह सब खुद सीखा है, इसलिए लगा यह भी आसान होगा, लेकिन बिल्कुल नहीं था। ऑपरेटिंग सिस्टम और CPU कैसे काम करते हैं, इस पर ऑनलाइन सामग्री ज़्यादातर बेहद खराब थी, और सामग्री खुद भी बहुत कम थी। इसलिए पढ़ते हुए मैंने सोचा कि खुद ही एक अच्छी सामग्री बनानी चाहिए, और जो सीखा उसे整理 करते-करते 60 पेज का Google Doc बन गया, वहीं से लिखना शुरू किया
लेकिन लिखते-लिखते पता चला कि उस विशाल डॉक्यूमेंट का बड़ा हिस्सा गलत था, और मुझे और रिसर्च करनी पड़ी। बार-बार सुधारते रहने पर भी इंटरनेट पर सामग्री की गुणवत्ता अब भी खराब थी, और लेख को और बेहतर बनाना था। चित्र और डायग्राम भी चाहिए थे, लेकिन मुझे ड्रॉइंग नहीं आती थी, इसलिए Figma खोला और प्रयोग किए, और हैकाथॉन में मिले Wacom टैबलेट से कुछ हिस्से बनाए
करीब 3 महीने बाद अब मेरे पास ऐसा नतीजा है जिस पर मुझे सचमुच गर्व है। भद्दे-से इलस्ट्रेशन समेत Putting the "You" in CPU का अंतिम संस्करण साझा करते हुए खुशी हो रही है। यह काम कंप्यूटर पसंद करने वाले हाई-स्कूल छात्रों की कम्युनिटी Hack Club(https://hackclub.com) के हिस्से के तौर पर बनाया गया
कुछ हफ्ते पहले इसका एक अभी-अधूरा संस्करण संयोग से HN पर चर्चित हुआ था, और मिला फीडबैक मेरे लिए सच में बहुत मूल्यवान था। उसके बाद मैंने काफी सफाई की है, और अब जाकर इसे खुद दुनिया के साथ साझा करने लायक संतुष्ट हूँ
वेबसाइट एक static HTML/CSS प्रोजेक्ट है और सब कुछ मैंने शुरू से खुद लिखा है। खासकर navigation component मुझे पसंद है। उम्मीद है आपको पढ़ने में मज़ा आएगा, और यह ऐसा संसाधन बनेगा जिससे कोई भी सीख सके
कुछ नया खुद सीखते समय ऐसी सामग्री लिखना बहुत अच्छा तरीका है। यह सोचने की प्रक्रिया को साफ करता है, और वे हिस्से सामने लाता है जिन्हें शुरुआत में आप समझा हुआ मानते हैं लेकिन जो अब भी धुंधले होते हैं
अंत की यह पंक्ति भी अच्छी लगी: “यह लेख लिखते समय मैंने GPT-3.5 और GPT-4 से काफी बातचीत की। उन्होंने बहुत झूठ बोले और ज़्यादातर जानकारी बेकार थी, लेकिन समस्याएँ सुलझाने में कभी-कभी बहुत मदद मिली। अगर आप LLM की सीमाएँ जानते हैं और उसकी हर बात पर बेहद शक करते हैं, तो कुल मिलाकर मदद सकारात्मक हो सकती है। हालांकि लेखन खराब है। उससे अपने लिए मत लिखवाइए।” शानदार प्रोजेक्ट है
उदाहरण के लिए “CPU सभी calculations संभालता है। वही बड़ा भाई है। शज़ैम अलाकाब्लैम है…” जैसे संदर्भ में मज़ाकिया वाक्य हटाकर “CPU सभी calculations संभालता है। कंप्यूटर ऑन होते ही वह instructions को एक-एक करके execute करना शुरू कर देता है” जैसा लिखना कहीं ज़्यादा पठनीय लगता है
मैं तकनीकी रूप से बहुत गहरे स्तर का व्यक्ति नहीं हूँ, लेकिन लिखने के पैसे पाने वाले व्यक्ति के तौर पर मुझे ऐसा दिखता है। काम अपने-आप में बेहतरीन है, इसे जारी रखें
ऐसे विषय आम तौर पर undergraduate स्तर के computer architecture और operating systems courses में अच्छी तरह कवर होते हैं। हालांकि आजकल उनका चलन कम हो गया है और वे ज़्यादातर electives बन गए हैं
कई universities ने free lectures उपलब्ध कराए हैं, और इस क्षेत्र के professors की लिखी किताबें भी हैं। अगर आप अधिक आधुनिक रुझानों के करीब देखना चाहें, तो संबंधित technical conference talks भी काफी उपयोगी हैं
फिर भी पढ़ाना एक कम आंकी जाने वाली कला है, और जानकारी को अधिक accessible बनाना या उससे बातचीत को अधिक रोचक बनाना निश्चित रूप से बहुत मूल्यवान है
पहले मैं research engineer के रूप में काम करता था; मेरे मामले में, मैं एक university lab में computer security research करने वाला software engineer था। जैसा कि दूसरे comment में कहा गया कि operating systems course elective है, graduate students में भी ऐसे लोग होते हैं जिनके पास operating systems की इस स्तर की समझ नहीं होती
अच्छी जानकारी ढूँढना मुश्किल जरूर है, लेकिन वह मौजूद है। आपने मुश्किल से मिलने वाली जानकारी को जोड़कर बेहतर रूप में बनाया, यही इसका प्रमाण है। मेरी degree mathematics में है, लेकिन computing knowledge मैंने खुद सीखा। इस तरह सीखने की क्षमता और अत्यधिक technical जानकारी को accessible तरीके से समझाने की क्षमता सच में महत्वपूर्ण है और इसे कम नहीं आंकना चाहिए
मैं सिर्फ दो links साझा करूँगा, वरना यह अंतहीन हो सकता है। पहला, https://git.lain.faith/sys64738/airs-notes.git और linker part की table of contents https://lwn.net/Articles/276782/ है। अगर आपने ELF और linking की बस सतह ही छुई है, तो Ian Lance Taylor की 20-part blog series और अतिरिक्त विषयों में ELF के बारे में वह सब है जो आप जानना चाहते थे, साथ ही ऐसी बातें भी हैं जो आपको यह संदेह करवा देंगी कि commands आखिर काम कैसे करती हैं। ELF का साथी DWARF भी संक्षेप में आता है, जो एक virtual machine भी है और हर बार C++ exception होने पर इस्तेमाल होता है
दूसरा, https://0xax.gitbooks.io/linux-insides/content/ भी एक बेहतरीन project है। यह human-readable तरीके से बताता है कि Linux kernel कई काम कैसे करता है। लगभग पक्का है कि इसे HN पर पहले ही साझा किया जा चुका है
बहुत अच्छी तरह लिखा है, और ऐसे विषय को गहराई से खंगालने के लिए बधाई
आजकल 17 साल के लोग जिन चीज़ों को समझते नहीं, उन्हें जोड़कर “प्रोग्रामिंग” कर लें तो कुछ हद तक चल जाता है, लेकिन मेरा मानना है कि आखिरकार वे एक सीमा से टकराएंगे। इसलिए आप अभी जो कर रहे हैं, वह सिर्फ आपके लिए नहीं बल्कि इस सामग्री से सीखने वाले सभी लोगों के लिए वाकई बहुत मूल्यवान है
बढ़िया काम :) अगर अभी तक नहीं किया है, तो अब emulator आज़माइए। यह बेहद मज़ेदार है
अगर “किसी दिन सीमा से टकराना” है, तो उत्सुक हूं कि वह जल्द होगा या नहीं
मैंने MVC framework शून्य से बनाया, interpreter और compiler भी बनाए, और गलती से machine learning और natural language processing को भी शून्य से फिर से ईजाद करने की कोशिश की। हर तरह के शानदार और मज़ेदार काम किए
फिर मुझे पैसा और prior art का पता चला। जब दूसरे लोग बताते हैं कि “बस इसे इस्तेमाल कर लो”, तो उसे मान लेने से चीज़ें बहुत जल्दी बन जाती हैं। frameworks भी। jQuery ने ज़िंदगी इतनी आसान बना दी, यह देखकर हैरानी हुई
अब कई साल बाद, जो चीज़ें पहले “बस जोड़-तोड़कर इस्तेमाल” लगती थीं, वे अब “काफी low-level का advanced काम” लगती हैं। क्योंकि उन abstractions के ऊपर फिर नई abstractions बना दी गई हैं
आज beginner जिन चीज़ों को “किसी तरह कर लेता है”, वे अगली पीढ़ी के लिए low-level dragon beware zone बन जाएंगी। Programming इस लिहाज़ से कमाल है
बल्कि जिसने programming को academic तरीके से सीखा है, वह कई technologies को basic level पर समझकर आगे बढ़ने वाली स्थितियों में पूरी तरह overwhelmed होने की अधिक संभावना रखता है
अगर किसी बड़ी कंपनी में project manager और designer requirements को सीमित कर दें ताकि आप सिर्फ execution पर ध्यान दे सकें, तो बात अलग है, लेकिन ज़्यादातर लोगों के लिए यह दुर्लभ स्थिति है
मुझे सिर्फ cover पर वाला dinosaur याद था, इसलिए title फिर से खोजना पड़ा
इस guide को पूरा करने के लिए बधाई
अगर आप university नहीं जाते, तो comprehensive systems material बहुत ज़्यादा नहीं मिलता—quality अलग-अलग होती है और कभी-कभी आपस में टकराने वाली बहुत सारी सामग्री खंगालनी पड़ती है—यह बात यहां दिखती है
जो सबसे अच्छी सामग्री मिल सकती है, वह Charles Petzold की Code: The Hidden Language of Computer Hardware and Software है। इसका 2nd edition अभी-अभी आया है
https://codehiddenlanguage.com/
https://mitpress.mit.edu/9780262539807/the-elements-of-compu...
https://www.nand2tetris.org/
यह NAND gates से लेकर function calls तक बहुत अच्छी तरह ले जाता है, और बहुत मज़ेदार interactive तरीके से चलता है। पढ़ते हुए दिमाग में यह कल्पना करने के बजाय कि चीज़ें कैसे चलेंगी, आप खुद बनाते हैं
मैंने अपने CPU assembly और programmable shader language से LED matrix चलाने वाला एक छोटा SIMD/GPU तक बना लिया
15 साल पहले जब खरीदी थी, तो CPU architecture वाले हिस्से पर मेरी आंखें धुंधली हो गई थीं, लेकिन शायद अब मैं तैयार हूं। हाल ही में 2nd edition भी खरीदा है
यह लेख मेरी reading list में है। पहले इसके इस छोटे-से detail ने मेरा दिल जीत लिया था
“हर page के bottom में margin जोड़ा है ताकि reader consistent eye level बनाए रख सके।”
बहुत छोटा और पीछे मुड़कर देखें तो obvious detail है। लेकिन हैरानी की बात है कि यह काफी आरामदायक है। जब मैंने यह notice किया, तो समझ गया कि यह passion project है
लगता है उन्होंने web पर किताब को कैसे present किया जाए, इस पर बहुत सोचा है, और ऐसी नई conventions बनाई हैं जैसी नई पीढ़ी से उम्मीद की जा सकती है। उदाहरण के लिए, ऊपर chapter navigation widget में previous/next chapters का हल्का opaque दिखना मैंने पहली बार देखा
मेरी उम्र लगभग 40 है, और मैंने ऐसा कुछ कभी नहीं किया। अभी-अभी impostor syndrome को शांत करने की कोशिश कर रहा था, अब और करना पड़ेगा
सचमुच बढ़िया काम :p
अभी पर्याप्त समय बाकी है, और जल्दबाज़ी की कोई खास वजह भी नहीं। कोई प्रेरक idea चुनिए, और जितना छोटा free time निकाल सकें, उसमें धीरे-धीरे करते रहिए
मुख्य बात शायद यह है कि वह काम करते हुए आपको खुद पर गर्व महसूस हो। Final result आखिरकार अपने-आप आ जाएगा
OP, अपने काम के लिए उम्र को बहाना मत बनाइए। यह लेख उससे बेहतर है जो ज़्यादातर लोग पूरी ज़िंदगी में कर पाते हैं। शानदार काम
newमें दम तोड़ देने के मामले बहुत हैं। उम्र को marketing element के रूप में इस्तेमाल करने का फैसला किया गया, और यह साफ तौर पर काम आयाअगर कोई 17 साल की उम्र में ऐसा content बना रहा है, तो कल्पना भी नहीं कर सकता कि इस field को profession के तौर पर चुनने पर आगे चलकर वह कितने कमाल के काम करेगा। सच में शानदार
छोटी-मोटी management, उससे भी छोटी corporate goals, और बेमतलब career growth के नीचे उनकी आत्मा न कुचले। वे अभी भी बेहतरीन काम कर रहे हैं, इसलिए काश कोई fellowship जैसी चीज़ हो जो उन्हें tech industry के hamster wheel में अपनी आत्मा घिसे बिना यह जारी रखने दे
OP को Casey Muratori का computerenhance.com course एक बार देखना चाहिए
course के शुरुआती हिस्से का assignment 1978 का Intel 8086 simulator बनाता है। आधुनिक x86_64 assembly भी अभी तक उससे काफी मिलती-जुलती है। वहाँ ऐसी बहुत-सी computer knowledge सीखने को मिलती है जो सच में दूसरी जगह मिलना मुश्किल है
मैं भी लगभग 17 साल का हूँ, इस नज़र से कहूँ तो बहुत अच्छा किया! :^)
सिर्फ 20 मिनट पहले मैं 16-bit integer का पहला byte निकालने का तरीका ढूँढते-ढूँढते endianness के बारे में जान पाया, और आप CPU पर पूरी एक किताब लिख रहे हैं
Crafting Interpreters खत्म करने के बाद ज़रूर पढ़ूँगा। हालाँकि कई और projects की तरह इसकी progress भी पक्का धीमी हो गई है, इसलिए थोड़ा समय लग सकता है lol
बहुत अच्छा लेख है और style भी पसंद आया। लेख और illustrations/memes का combination सच में मज़ेदार था
RISC/CISC terminology को लेकर मैं थोड़ा reserved हूँ, लेकिन यह शायद हर किसी की अपनी preference का मामला हो सकता है >.>
kernel के कुछ हिस्से कैसे काम करते हैं, यह पता लगाने में समय बिताने वाले व्यक्ति के तौर पर मैं समझ सकता हूँ कि यह लेख बनाने की प्रक्रिया कितनी painful रही होगी। फिर भी लेख देखकर लगता है कि यह पूरी तरह worth it था
NT side पर Windows Internals जानने लायक बहुत-सी चीज़ें cover करता है, और Microsoft docs भी खराब नहीं हैं। मेरे हिसाब से वे Linux kernel docs से निश्चित रूप से बेहतर हैं, और बहुत अच्छा starting point हैं
अगर आप Windows के बारे में और जानना चाहते हैं, तो game hacking forums/resources भी recommend करूँगा। उनमें बहुत कुछ filter करना पड़ता है, लेकिन niche topics पर वे कभी-कभी काफी अच्छे information source हो सकते हैं
आखिर में, smartphone पर देखते समय कुछ code blocks का font काफी बड़ा था, इसलिए पढ़ना मुश्किल था। उदाहरण के लिए chapter 6 का
main.cऐसा हैसाथ ही, “अगर आप computers पसंद करने वाले teenager हैं और अभी Hack Club Slack में नहीं हैं, तो अभी join करें” वाला वाक्य मुझे बहुत अच्छी तरह याद दिला देता है कि मैं बूढ़ा हो रहा हूँ lol