दिए गए उत्तरों सही हैं लेकिन मैं यह जोड़ना चाहता हूं कि कर्नेल मोड में प्रवेश करने के लिए और अधिक तंत्र हैं। प्रत्येक हालिया कर्नेल प्रत्येक प्रक्रिया 'पता स्थान में "vsyscall" पृष्ठ को मानचित्र करता है। इसमें सबसे कुशल सिस्कल जाल विधि से थोड़ा अधिक शामिल है।
एक नियमित रूप से 32 बिट सिस्टम पर उदाहरण के लिए यह हो सकता है:
0xffffe000: int $0x80
0xffffe002: ret
लेकिन मेरी 64-bitsystem पर मैं जिस तरह से करने के लिए उपयोग और अधिक कुशल पद्धति का उपयोग करके syscall/sysenter निर्देश
0xffffe000: push %ecx
0xffffe001: push %edx
0xffffe002: push %ebp
0xffffe003: mov %esp,%ebp
0xffffe005: sysenter
0xffffe007: nop
0xffffe008: nop
0xffffe009: nop
0xffffe00a: nop
0xffffe00b: nop
0xffffe00c: nop
0xffffe00d: nop
0xffffe00e: jmp 0xffffe003
0xffffe010: pop %ebp
0xffffe011: pop %edx
0xffffe012: pop %ecx
0xffffe013: ret
है
यह बनामस्कूल पृष्ठ कुछ सिस्टमकॉल भी मानचित्र करता है जिन्हें संदर्भ स्विच के बिना किया जा सकता है। मुझे विश्वास है gettimeofday, समय और getcpu वहाँ मैप की जाती हैं पता है, लेकिन मैं getpid बस के रूप में अच्छी तरह से में वहाँ फिट सकता कल्पना।
+1, दिलचस्प सवाल! –
syscall कार्यान्वयन प्रश्न: http://stackoverflow.com/questions/499188/how-is-the-system-call-in-linux- कार्यान्वित – nik
स्वयं को बंद करने के लिए मतदान कर रहा है। वास्तव में डुप्लिकेट है (खोज पर दिखाई नहीं दिया क्योंकि मैंने syscall का उपयोग किया था) –