2010-04-12 13 views
5

तो मैं दूसरे दिन भाषाओं के बारे में सोच रहा था, और उसने मुझे मारा कि इंटरनेट के साथ बातचीत करने वाली संकलित भाषा में लिखे गए किसी भी कार्यक्रम को तब असेंबली में अनुवादित किया जाता है जिसे इंटरनेट से बातचीत करना पड़ता है। मैंने सी ++ को थोड़ा बेहतर समझने में मदद करने के लिए अभी कुछ x86 असेंबली सीखना शुरू कर दिया है, और मैं इस बात से परेशान हूं कि इंटरनेट का उपयोग करने जैसे कुछ कम स्तर कैसे कुछ कर सकता है।असेंबली भाषा इंटरनेट की तरह कुछ कैसे बातचीत करती है?

मुझे यकीन है कि इस प्रश्न का पूरा उत्तर SO SO में फिट होने से कहीं अधिक है, लेकिन क्या कोई मुझे शायद मूल सारांश दे सकता है?

+4

यहां एक समान प्रश्न है। http://stackoverflow.com/questions/1837582/how-to-write-to-read-from-network-card-in-x86-assembly इसके अलावा, आपको याद रखना होगा कि "इंटरनेट तक पहुंच" एक तार पर किसी अन्य कंप्यूटर पर टीसीपी/आईपी संदेशों में प्रारूपित डेटा भेज रहा है। यह मेरे लिए भी एक epiphany था जब मुझे एहसास हुआ कि इसके बारे में जादुई कुछ भी नहीं था। –

+2

पूरा इंटरनेट 1 और 0 के पर चलता है, या बल्कि, संपूर्ण इंटरनेट इंटरैक्टिंग मशीन कोड स्निपेट की अविश्वसनीय संख्या का उत्पाद है। मुझे लगता है कि तर्कसंगत रूप से और अधिक आश्चर्यजनक। :) – deceze

उत्तर

12

उपयोगकर्ता-अंतरिक्ष प्रोग्राम जो सभी आधुनिक प्रणालियों में "इंटरनेट से बातचीत करते हैं", अंतर्निहित ऑपरेटिंग सिस्टम में system calls जारी करके ऐसा करते हैं, जो एक टीसीपी/आईपी स्टैक के लिए एपीआई की आपूर्ति करता है।

प्रणाली सवाल में कॉल (जैसे socket, listen, accept, और आगे) आम तौर पर एक सी स्तर पर लिखित हैं, लेकिन प्रत्येक विशेष ओएस कार्यान्वयन में वे निश्चित रूप से, मशीन कोड के लिए अनुवाद कर देगा। लेकिन क्या मूल्य विशेष रजिस्टरों में जाते हैं, या विशेष रजिस्टरों द्वारा इंगित स्मृति में स्थान, आदि बहुत मामूली और पूरी तरह से सिस्टम-विशिष्ट है।

यदि आप सोच रहे हैं कि कर्नेल और डिवाइस ड्राइवरों में "सिस्टम से इंटरैक्ट्स" (सिस्टम कॉल के जवाब में) में मशीन कोड (शायद सी से संकलित) कैसे होता है, तो यह दोनों इन-बिल्डिंग और रखरखाव करके ऐसा करता है। मेमोरी डेटा स्ट्रक्चर, विभिन्न चीजों की स्थिति को ट्रैक करने के लिए, और अंतर्निहित हार्डवेयर (जैसे इंटरप्ट्स, आई/ओ बंदरगाहों, मेमोरी मैप किए गए डिवाइस क्षेत्रों, या जो भी विशेष आर्किटेक्चर उपयोग करता है) के साथ बातचीत करके - जैसे कि यह (कहता है) एक वीडियो प्रदर्शन, या एक डिस्क डिवाइस।

+1

हाँ ... इस तरह के एक छोटे से उपयोगकर्ता-मोड प्रोग्राम की कल्पना करना मुश्किल है, लेकिन वास्तव में यह एक लाइब्रेरी को कॉल कर रहा है जो कुछ उच्च स्तरीय (सी/सी ++) में लिखा गया था जो तब होता है कंपाइलर द्वारा असेंबली कोड के एक बंच में अनुवाद किया गया, जो कि कुछ वास्तव में निम्न स्तर पर, दुनिया के दूसरी तरफ ईथरनेट केबल के माध्यम से 5-वोल्ट हाई और 0-वोल्ट लोव का गुच्छा भेजता है ... (अगर मैं समझता हूं सही ढंग से) – Adam

+1

अच्छी तरह से तकनीकी रूप से भौतिक ईथरनेट दालें केवल आपके राउटर तक जाती हैं। राउटर तब अगली राउटर में आपकी ओर से उन्हें पुनः प्रेषित करने के लिए ज़िम्मेदार है, और अगला राउटर उन्हें पुनः प्रेषित करने आदि के लिए ज़िम्मेदार है। –

2

यह निर्भर करता है। जब आप सी में लिखी गई एक वेब स्क्रिप्ट के बारे में पढ़ते हैं, तो यह वास्तव में एक सीजीआई प्रोग्राम है। सीजीआई एक प्रोटोकॉल है, एक भाषा नहीं। सीजीआई REQUEST_METHOD, "foo = bar? Baz = 42" QUERY_STRING में "GET", "POST", आदि को "GET", "POST", आदि में डालने के लिए निर्दिष्ट करता है, stdin में डेटा पोस्ट करें, इन तक पहुंचने के लिए, CGI प्रोग्राम सिस्टम कॉल का उपयोग करता है। वेब सर्वर एक वेब स्क्रिप्ट के साथ संवाद करने के लिए सीजीआई का उपयोग करता है। एक प्रोग्राम जो इंटरनेट पर संचार करता है, सिस्टम सॉकेट एपीआई का उपयोग कर सकता है।

संक्षेप में, ऑपरेटिंग सिस्टम सभी संचार करता है। कार्यक्रम सिर्फ सही सिस्टम कॉल करता है।

यदि आपको आश्चर्य है कि ऑपरेटिंग सिस्टम इंटरनेट पर कैसे संचार करता है, तो जवाब यह है कि ओएस कर्नेल एक आईओ पोर्ट, मेमोरी-मैप किए गए आईओ आदि पर नेटवर्क कार्ड के साथ इंटरफ़ेस करने के लिए ड्राइवर का उपयोग करता है .. ओएस और नेटवर्क कार्ड सब कुछ एक साथ काम करने के लिए इंटरनेट प्रोटोकॉल मानकों को लागू करें।

0

आपको कुछ पीआईसी वेब-सर्वर परियोजनाओं को देखने के लिए क्या करना है। उनमें से कुछ असेंबली में लिखे गए वेब-सर्वर हैं और 8-बिट हार्डवेयर पर चल रहे हैं। यह आपको एक स्पष्ट विचार देगा कि इंटरनेट के माध्यम से बाकी दुनिया के साथ बातचीत करने के लिए असेंबली के रूप में कम स्तर के रूप में कुछ कैसे उपयोग किया जा सकता है।

यह मूल रूप से शामिल है

  1. नेटवर्किंग हार्डवेयर के साथ इंटरफेस करने कुछ निम्न स्तर ड्राइवर (परत 2) लेखन - इस ईथरनेट या यहाँ तक कि मोडेम (पर्ची के साथ) का उपयोग हो सकता है।
  2. टीसीपी/आईपी पैकेट को संसाधित करने के लिए अगली परतें - आईपी और टीसीपी लिखें। इसे कुछ असेंबली जादू की आवश्यकता होगी क्योंकि ये प्रक्रियाएं काफी शामिल हैं।
  3. एप्लिकेशन परत लिखें - चाहे वह एक वेब-सर्वर या ग्राहक हो या जो भी हो - जो अंतर्निहित परतों का शोषण करता है।

उम्मीद है कि यह कुछ संदेह को साफ़ करता है।

0

क्या यह कहना उचित है कि कार्यक्रम के बावजूद कुछ बिंदु पर कोड "असेंबली" भाषा के कुछ रूपों में (उचित अवधि की कमी के लिए) परिवर्तित हो जाता है (मुझे लगता है कि एक से अधिक है) जिसके बाद एक मशीन कोड से संबंध "एक से एक" संबंध? यह सुनिश्चित नहीं है कि .NET और ILASM/Java और इसके संबंधित बाइटकोड इस में फिट कैसे हैं, लेकिन मैंने सोचा कि यह सब कुछ किसी बिंदु पर असेंबली में बदल गया है और फिर मशीन कोड।

संबंधित मुद्दे