2010-11-28 16 views
9

मैं वर्तमान में रॉबर्ट लव द्वारा 'लिनक्स कर्नेल डेवलपमेंट' पढ़ रहा हूं और मुझे समझ में नहीं आता कि यह असेंबली क्या कर रही है।लिनक्स कर्नेल विकास

असल में, प्रत्येक प्रक्रिया कर्नेल स्टैक में, struct thread_info है जो ढेर के अंत में रहता है। अब, x86 आर्किटेक्चर पर, हम जाहिरा तौर पर इस (यह मानते हुए 8KB ढेर आकार) निम्नलिखित विधानसभा का उपयोग करके प्राप्त कर सकते हैं

movl $-8192, %eax 
andl %esp, %eax 

तो मूल रूप से Anding 0xffffe000 द्वारा ढेर सूचक। मैं इस बारे में उलझन में हूं कि यहां क्या हो रहा है? मुझे नहीं लगता कि %esp के कम से कम 13 बिट्स का मुखौटा क्यों हमें संरचना में ले जाता है। मुझे पता है कि समझाए जाने के बाद मैं बेवकूफ महसूस करूंगा, लेकिन यह मुझे परेशान कर रहा है।

धन्यवाद।

+0

मैं वर्तमान में इस पुस्तक को पढ़ रहा हूं और मेरे पास और भी बुनियादी सवाल है: आप कैसे जानते हैं कि '-8192'' 0xffffe000' है? सीपीयू के रजिस्टरों में कितनी नकारात्मक संख्याएं संग्रहीत की जाती हैं? –

उत्तर

5

ढेर नीचे बढ़ता है, इसलिए ढेर का अंत ढेर में सबसे कम पता है, और संरचना का प्रारंभिक पता है। और ढेर 8 केबी के गुणकों पर संग्रहीत हैं। इसलिए, 13 कम से कम महत्वपूर्ण बिट्स को मिटाने से ढेर का सबसे कम पता मिलता है और इसलिए संरचना की शुरुआत होती है। इसका कोई मतलब भी है क्या?

+0

लेकिन मैंने सोचा कि% esp ढेर के नीचे की ओर इशारा करता है? जब संरचना को अंत में ढेर पर धकेल दिया जाता है, तो% esp कम हो जाती है। – tbh

+0

स्टैक एक उच्च मेमोरी एड्रेस से शुरू होता है (जब सामान धक्का दिया जाता है, तो स्टैक पॉइंटर कम हो जाता है)। स्टैक के नीचे% esp अंक इंगित करता है, जिसमें यह उस स्थान के निचले भाग के बजाय "वर्तमान" तल को इंगित करता है, जिसमें स्टैक को बढ़ने की अनुमति है। – lijie

+0

आह, मैंने देखा कि संरचना को अभी धक्का दिया गया था जब प्रक्रिया शुरू की जाती है और इसे अपना स्वयं का ढेर दिया जाता है तो स्टैक के गड्ढे में बस नीचे जाने के बजाए सबकुछ का अंत होता है। ठीक है, धन्यवाद lijie – tbh

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