لینکس سسٹم کال کیا ہے؟

What Is Linux System Call



اس سے پہلے کہ ہم لینکس سسٹم کال کی تعریف پر غور کریں اور اس پر عمل درآمد کی تفصیلات کا جائزہ لیں ، بہتر یہ ہے کہ ایک عام لینکس سسٹم کی مختلف سافٹ وئیر پرتوں کی وضاحت کے ساتھ آغاز کیا جائے۔

لینکس دانا ایک خاص پروگرام ہے جو آپ کے ہارڈ ویئر پر سب سے کم دستیاب سطح پر چلتا اور چلتا ہے۔ اس کے پاس کمپیوٹر پر چلنے والی ہر چیز کو ترتیب دینے کا کام ہے ، بشمول کی بورڈ ، ڈسک ، اور نیٹ ورک ایونٹس کو سنبھالنے سے لے کر متعدد پروگراموں کو متوازی طور پر چلانے کے لیے ٹائم سلائس فراہم کرنا۔







جب دانا صارف کے درجے کا پروگرام چلاتا ہے ، تو یہ میموری کی جگہ کو ورچوئلائز کرتا ہے تاکہ پروگراموں کو یقین ہو کہ یہ میموری میں چلنے والا واحد عمل ہے۔ ہارڈ ویئر اور سافٹ ویئر کی تنہائی کا یہ حفاظتی بلب سیکورٹی اور وشوسنییتا کو بڑھاتا ہے۔ ایک غیر مستحق ایپلی کیشن دوسرے پروگراموں سے تعلق رکھنے والی میموری تک رسائی حاصل نہیں کر سکتی ، اور اگر وہ پروگرام کریش ہو جائے تو دانا ختم ہو جاتا ہے تاکہ یہ باقی نظام کو نقصان نہ پہنچا سکے۔



لینکس سسٹم کالز کے ساتھ رکاوٹ کو ختم کرنا۔

غیر مستحق ایپلی کیشنز کے درمیان تنہائی کی یہ پرت سسٹم پر موجود دیگر ایپلی کیشنز اور صارفین کی حفاظت کے لیے ایک بہترین حد فراہم کرتی ہے۔ تاہم ، کمپیوٹر اور بیرونی دنیا کے دوسرے عناصر کے ساتھ انٹرفیس کرنے کے کسی بھی طریقے کے بغیر ، پروگرام زیادہ تر کچھ حاصل کرنے کے قابل نہیں ہوں گے۔



بات چیت کو آسان بنانے کے لیے ، دانا ایک سافٹ ویئر گیٹ نامزد کرتا ہے جو چلنے والے پروگرام کو یہ درخواست کرنے کی اجازت دیتا ہے کہ دانا اس کی جانب سے کام کرے۔ یہ انٹرفیس سسٹم کال کے نام سے جانا جاتا ہے۔





چونکہ لینکس ہر چیز کے UNIX فلسفے کی پیروی کرتا ہے ایک فائل ہے ، بہت سے افعال کسی فائل کو کھولنے اور پڑھنے یا لکھنے سے انجام دیئے جاسکتے ہیں ، جو ایک آلہ ہوسکتا ہے۔ ونڈوز پر ، مثال کے طور پر ، آپ بے ترتیب بائٹس تک رسائی کے لیے CryptGenRandom نامی فنکشن استعمال کر سکتے ہیں۔ لیکن لینکس پر ، یہ فائل/dev/urandom کو کھول کر اور معیاری فائل ان پٹ/آؤٹ پٹ سسٹم کالز کا استعمال کرتے ہوئے اس سے بائٹس پڑھ کر کیا جا سکتا ہے۔ یہ اہم فرق ایک آسان سسٹم کال انٹرفیس کی اجازت دیتا ہے۔

ویفر-ٹین ریپر۔

زیادہ تر ایپلی کیشنز میں ، سسٹم کالز براہ راست دانا پر نہیں کی جاتی ہیں۔ عملی طور پر تمام پروگرام معیاری سی لائبریری سے منسلک ہوتے ہیں ، جو لینکس سسٹم کالز کے ارد گرد ایک پتلی لیکن اہم چادر فراہم کرتا ہے۔ لائبریری اس بات کو یقینی بناتی ہے کہ فنکشن دلائل درست پروسیسر رجسٹر میں کاپی کیے جاتے ہیں پھر متعلقہ لینکس سسٹم کال جاری کرتے ہیں۔ جب کال سے ڈیٹا موصول ہوتا ہے تو ، ریپر نتائج کی ترجمانی کرتا ہے اور اسے مسلسل پروگرام میں واپس کرتا ہے۔



پردے کے پیچھے

ایک پروگرام میں ہر فنکشن جو سسٹم کے ساتھ تعامل کرتا ہے بالآخر سسٹم کال میں ترجمہ کیا جاتا ہے۔ اسے عمل میں دیکھنے کے لیے ، آئیے ایک بنیادی مثال سے شروع کریں۔

باطلمرکزی() {
}

یہ شاید سب سے معمولی سی پروگرام ہے جو آپ کبھی دیکھیں گے۔ یہ مین انٹری پوائنٹ کے ذریعے کنٹرول حاصل کرتا ہے اور پھر باہر نکل جاتا ہے۔ یہ ایک قیمت بھی واپس نہیں کرتا ہے کیونکہ مین کو باطل قرار دیا گیا ہے۔ فائل کو ctest.c کے طور پر محفوظ کریں اور آئیے اسے مرتب کریں:

جی سی سی ٹیسٹج -ctest

ایک بار جب یہ مرتب ہوجاتا ہے ، ہم فائل کا سائز 8664 بائٹس دیکھ سکتے ہیں۔ یہ آپ کے سسٹم پر تھوڑا سا مختلف ہو سکتا ہے ، لیکن یہ تقریباk 8 کلو ہونا چاہیے۔ داخل ہونے اور باہر نکلنے کے لیے یہ بہت زیادہ کوڈ ہے! اس کے 8 کلو کی وجہ یہ ہے کہ libc رن ٹائم شامل کیا جا رہا ہے۔ یہاں تک کہ اگر ہم علامتوں کو چھین لیتے ہیں ، تب بھی یہ 6k سے زیادہ ہے۔

اس سے بھی آسان مثال میں ، ہم لینکس سسٹم کو باہر نکلنے کے لیے کال کر سکتے ہیں بجائے اس کے کہ ہمارے لیے ایسا کرنے کے لیے C رن ٹائم پر انحصار کریں۔

باطل_ شروع کریں() {
asm('movl $ 1 ،٪ eax'
xorl٪ ebx،٪ ebx؛
'$ 0x80')؛
}

یہاں ہم 1 کو EAX رجسٹر میں منتقل کرتے ہیں ، EBX رجسٹر کو صاف کریں (جو دوسری صورت میں ریٹرن ویلیو پر مشتمل ہوتا ہے) پھر لینکس سسٹم کال انٹرپٹ 0x80 (یا اعشاریہ 128) کو کال کریں۔ یہ رکاوٹ ہماری کال پر کارروائی کرنے کے لیے دانا کو متحرک کرتی ہے۔

اگر ہم اپنی نئی مثال مرتب کرتے ہیں ، جسے asmtest.c کہا جاتا ہے ، اور علامتوں کو نکال دیں اور معیاری لائبریری کو خارج کردیں:

جی سی سی-s-nostdlib asmtest.ج -o asmtest

ہم 1k سے کم بائنری تیار کریں گے (میرے سسٹم پر ، اس سے 984 بائٹس حاصل ہوتے ہیں)۔ اس کوڈ میں سے زیادہ تر قابل عمل ہیڈر ہیں۔ اب ہم براہ راست لینکس سسٹم کال کر رہے ہیں۔

تمام عملی مقاصد کے لیے۔

تقریبا تمام معاملات میں ، آپ کو کبھی بھی اپنے سی پروگراموں میں براہ راست سسٹم کال کرنے کی ضرورت نہیں ہوگی۔ اگر آپ اسمبلی زبان استعمال کرتے ہیں ، تاہم ، ضرورت پیدا ہوسکتی ہے۔ تاہم ، اصلاح میں ، یہ بہتر ہوگا کہ سی لائبریری کے افعال کو نظام کال کریں اور اسمبلی کی ہدایات میں صرف آپ کی کارکردگی کا اہم کوڈ شامل ہو۔

سسٹم کال ٹیوٹوریلز کو پروگرام کرنے کا طریقہ

تمام سسٹم کالز کی فہرست۔

اگر آپ لینکس کے لیے تمام دستیاب سسٹم کالز کی فہرست دیکھنا چاہتے ہیں تو آپ ان حوالہ صفحات کو چیک کر سکتے ہیں: LinuxHint.com پر سسٹم کالز کی مکمل فہرست ، filippo.io/linux-syscall-table/ اور یا syscalls.kernelgrok.com۔