آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 1: تعارف (ترجمہ)

آپریٹنگ سسٹمز کا تعارف

ہیلو، حبر! میں آپ کی توجہ میں مضامین کا ایک سلسلہ پیش کرنا چاہتا ہوں - ایک ادب کے تراجم جو میری رائے میں دلچسپ ہے - OSTEP۔ یہ مواد یونکس جیسے آپریٹنگ سسٹمز کے کام کا کافی گہرائی سے جائزہ لیتا ہے، یعنی پروسیس، مختلف شیڈیولرز، میموری اور اسی طرح کے دوسرے اجزاء کے ساتھ کام جو جدید OS بناتے ہیں۔ آپ یہاں تمام مواد کی اصل دیکھ سکتے ہیں۔ یہاں. براہ کرم نوٹ کریں کہ ترجمہ غیر پیشہ ورانہ طور پر کیا گیا تھا (کافی آزادانہ)، لیکن مجھے امید ہے کہ میں نے عام معنی کو برقرار رکھا ہے۔

اس موضوع پر لیبارٹری کا کام یہاں پایا جا سکتا ہے:
- اصل: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- اصل: github.com/remzi-arpacidusseau/ostep-code
- میری ذاتی موافقت: github.com/bykvaadm/OS/tree/master/ostep

آپ میرا چینل بھی دیکھ سکتے ہیں۔ ۔ =)

پروگرام آپریشن

جب کوئی پروگرام چل رہا ہو تو کیا ہوتا ہے؟ چلنے والا پروگرام ایک آسان کام کرتا ہے - یہ ہدایات پر عمل کرتا ہے۔ ہر سیکنڈ، لاکھوں اور ممکنہ طور پر اربوں ہدایات پروسیسر کے ذریعے RAM سے حاصل کی جاتی ہیں، بدلے میں یہ ان کو ڈی کوڈ کرتا ہے (مثال کے طور پر، یہ پہچانتا ہے کہ یہ ہدایات کس قسم کی ہیں) اور ان پر عمل درآمد کرتا ہے۔ یہ دو نمبروں کا اضافہ، میموری تک رسائی، حالت کی جانچ کرنا، کسی فنکشن میں کودنا، وغیرہ ہو سکتا ہے۔ ایک ہدایت پر عمل درآمد کے بعد، پروسیسر دوسری ہدایات پر عمل درآمد کرنے کے لیے آگے بڑھتا ہے۔ اور اس طرح ہدایات کے بعد ہدایات، پروگرام ختم ہونے تک ان پر عمل کیا جاتا ہے۔
اس مثال کو فطری طور پر آسان سمجھا جاتا ہے - درحقیقت، پروسیسر کو تیز کرنے کے لیے، جدید ہارڈویئر آپ کو باری باری ہدایات پر عمل کرنے، ممکنہ نتائج کا حساب لگانے، ہدایات کو بیک وقت انجام دینے، اور اسی طرح کی چالوں کی اجازت دیتا ہے۔

وان نیومن ماڈل آف کمپیوٹیشن

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

آپریٹنگ سسٹم

ایک آپریٹنگ سسٹم، جسے مختصراً OS کہا جاتا ہے، ایک دوسرے سے منسلک پروگراموں کا ایک سیٹ ہے جو کمپیوٹر کے وسائل کو منظم کرنے اور کمپیوٹر کے ساتھ صارف کے تعامل کو منظم کرنے کے لیے ڈیزائن کیا گیا ہے۔.
OS سب سے اہم تکنیک یعنی تکنیک کے ذریعے پہلی جگہ اپنی تاثیر حاصل کرتا ہے۔ ورچوئلائزیشن. OS ایک فزیکل ریسورس (پروسیسر، میموری، ڈسک، وغیرہ) کے ساتھ تعامل کرتا ہے اور اسے خود سے زیادہ عام، زیادہ طاقتور، اور استعمال میں آسان شکل میں تبدیل کرتا ہے۔ لہذا، ایک عام فہم کے لیے، آپ آپریٹنگ سسٹم کا ایک ورچوئل مشین سے موازنہ کر سکتے ہیں۔
صارفین کو آپریٹنگ سسٹم کو کمانڈ دینے اور اس طرح ورچوئل مشین کی صلاحیتوں کو استعمال کرنے کی اجازت دینے کے لیے (جیسے پروگرام چلانا، میموری مختص کرنا، فائل تک رسائی وغیرہ)، آپریٹنگ سسٹم کچھ انٹرفیس فراہم کرتا ہے جسے کہا جاتا ہے۔ API (ایپلی کیشن پروگرامنگ انٹرفیس) اور جس پر آپ کال (کال) کرسکتے ہیں۔ ایک عام آپریٹنگ سسٹم سینکڑوں سسٹم کالز کرنے کی اجازت دیتا ہے۔
آخر میں، چونکہ ورچوئلائزیشن ایک سے زیادہ پروگراموں کو چلانے کی اجازت دیتی ہے (اس طرح CPU کا اشتراک)، اور ساتھ ہی ان کی ہدایات اور ڈیٹا تک رسائی (اس طرح میموری کا اشتراک)، اور ڈسک تک رسائی (اس طرح I/O ڈیوائسز کا اشتراک)، آپریٹنگ سسٹم کو بھی کہا جاتا ہے۔ وسائل مینیجر. ہر پروسیسر، ڈسک اور میموری سسٹم کا ایک وسیلہ ہے، اور اس طرح آپریٹنگ سسٹم کا ایک کردار ان وسائل کو منظم کرنے کا کام بن جاتا ہے، اسے مؤثر طریقے سے، ایمانداری سے، یا اس کے برعکس، اس کام پر منحصر ہے جس کے لیے یہ آپریٹنگ سسٹم۔ ڈیزائن کیا گیا ہے.

CPU ورچوئلائزیشن

مندرجہ ذیل پروگرام پر غور کریں:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 1: تعارف (ترجمہ)

یہ کوئی خاص عمل نہیں کرتا، درحقیقت، یہ صرف ایک فنکشن کو کہتے ہیں۔ سوت کاتنا()، جس کا کام ٹائم چیک کے ذریعے چکر لگانا اور ایک سیکنڈ گزر جانے کے بعد واپس آنا ہے۔ اس طرح، یہ غیر معینہ مدت تک اس سٹرنگ کو دہراتا ہے جسے صارف نے بطور دلیل پاس کیا تھا۔
آئیے اس پروگرام کو چلائیں اور اسے دلیل کے طور پر "A" کیریکٹر پاس کریں۔ نتیجہ خاص طور پر دلچسپ نہیں ہے - سسٹم صرف ایک پروگرام چلاتا ہے جو وقتا فوقتا "A" کردار کو ظاہر کرتا ہے۔
اب آئیے آپشن کو آزماتے ہیں جب ایک ہی پروگرام کی بہت سی مثالیں چل رہی ہوں، لیکن اسے واضح کرنے کے لیے مختلف حروف کو آؤٹ پٹ کرنا۔ اس صورت میں، نتیجہ کچھ مختلف ہو جائے گا. اس حقیقت کے باوجود کہ ہمارے پاس ایک پروسیسر ہے، پروگرام ایک ساتھ چلایا جاتا ہے۔ یہ کیسے ہوتا ہے؟ لیکن یہ پتہ چلتا ہے کہ آپریٹنگ سسٹم، ہارڈ ویئر کی صلاحیتوں کی مدد کے بغیر، ایک وہم پیدا کرتا ہے۔ یہ وہم کہ سسٹم میں ایک سے زیادہ ورچوئل پروسیسر ہیں، ایک ہی فزیکل پروسیسر کو نظریاتی طور پر لامحدود تعداد میں تبدیل کرتے ہیں اور اس طرح بظاہر پروگراموں کو بیک وقت چلنے کی اجازت دیتے ہیں۔ اس وہم کو کہتے ہیں۔ CPU ورچوئلائزیشن.
یہ تصویر بہت سے سوالات کو جنم دیتی ہے، مثال کے طور پر اگر ایک ہی وقت میں کئی پروگرام چلنا چاہیں تو کون سا لانچ کیا جائے گا؟ OS کی "پالیسیاں" اس سوال کے لیے ذمہ دار ہیں۔ پالیسیاں OS میں بہت سی جگہوں پر استعمال ہوتی ہیں اور اس طرح کے سوالات کے جوابات دیتی ہیں، اور وہ بنیادی میکانزم ہیں جنہیں OS نافذ کرتا ہے۔ اس لیے بطور ریسورس مینیجر OS کا کردار۔

میموری ورچوئلائزیشن

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

malloc() کال کریں۔

مندرجہ ذیل پروگرام پر غور کریں، جو کال کا استعمال کرتے ہوئے میموری کا ایک علاقہ مختص کرتا ہے۔ malloc () (https://youtu.be/jnlKRnoT1m0):

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 1: تعارف (ترجمہ)

پروگرام کئی چیزیں کرتا ہے۔ سب سے پہلے، یہ کچھ میموری (لائن 7) مختص کرتا ہے، پھر مختص سیل (لائن 9) کا پتہ پرنٹ کرتا ہے، مختص میموری کے پہلے سلاٹ پر صفر لکھتا ہے۔ اگلا، پروگرام ایک لوپ میں داخل ہوتا ہے جس میں یہ "p" متغیر میں ایڈریس پر میموری میں ذخیرہ شدہ قدر کو بڑھاتا ہے۔ یہ خود کی پروسیس ID کو بھی پرنٹ کرتا ہے۔ عمل کی ID ہر چلنے والے عمل کے لیے منفرد ہے۔. کئی کاپیاں شروع کرنے کے بعد، ہم ایک دلچسپ نتیجہ پر ٹھوکر کھائیں گے: پہلی صورت میں، اگر آپ کچھ نہیں کرتے اور صرف کئی کاپیاں چلاتے ہیں، تو پتے مختلف ہوں گے۔ لیکن یہ ہمارے نظریہ کے تحت نہیں آتا! درست، چونکہ جدید تقسیم میں میموری کی رینڈمائزیشن بطور ڈیفالٹ فعال ہوتی ہے۔ اگر یہ غیر فعال ہے، تو ہمیں متوقع نتیجہ ملتا ہے - بیک وقت چلنے والے دو پروگراموں کے میموری ایڈریس مل جائیں گے۔

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 1: تعارف (ترجمہ)

نتیجے کے طور پر، یہ پتہ چلتا ہے کہ دو آزاد پروگرام ان کے اپنے ذاتی ایڈریس اسپیس کے ساتھ کام کرتے ہیں، جو بدلے میں آپریٹنگ سسٹم کے ذریعہ جسمانی میموری میں میپ کیے جاتے ہیں۔. لہذا، ایک پروگرام کے اندر میموری ایڈریسز کا استعمال کسی بھی طرح سے دوسروں کو متاثر نہیں کرے گا، اور ہر پروگرام کے لیے ایسا لگتا ہے کہ اس کی اپنی جسمانی میموری ہے، مکمل طور پر اسے دی گئی ہے۔ تاہم، حقیقت یہ ہے کہ جسمانی میموری آپریٹنگ سسٹم کے زیر انتظام ایک مشترکہ وسیلہ ہے۔

مستقل مزاجی

آپریٹنگ سسٹمز کے اندر ایک اور اہم موضوع ہے - مستقل مزاجی. یہ اصطلاح اس وقت استعمال ہوتی ہے جب سسٹم میں موجود مسائل کے بارے میں بات کی جاتی ہے جو ایک ہی پروگرام کے اندر ایک ہی وقت میں بہت سی چیزوں کے ساتھ کام کرتے وقت ہو سکتی ہیں۔ آپریٹنگ سسٹم کے اندر بھی مستقل مزاجی کے مسائل پیدا ہوتے ہیں۔ پچھلی میموری اور پروسیسر ورچوئلائزیشن کی مثالوں میں، ہم نے محسوس کیا کہ OS ایک ہی وقت میں بہت سی چیزوں کا انتظام کرتا ہے - یہ پہلا عمل شروع کرتا ہے، پھر دوسرا، وغیرہ۔ جیسا کہ یہ نکلا، یہ رویہ کچھ مسائل کا باعث بن سکتا ہے۔ لہذا، مثال کے طور پر، جدید ملٹی تھریڈڈ پروگرام ایسی مشکلات کا سامنا کرتے ہیں۔

مندرجہ ذیل پروگرام پر غور کریں:

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 1: تعارف (ترجمہ)

مین فنکشن میں پروگرام کال کا استعمال کرتے ہوئے دو تھریڈ بناتا ہے۔ pthread_create(). اس مثال میں، ایک تھریڈ کو دوسرے فنکشنز کے ساتھ ایک ہی میموری اسپیس میں چلنے والے فنکشن کے طور پر سوچا جا سکتا ہے، واضح طور پر ایک سے زیادہ فنکشن ایک ہی وقت میں چل رہے ہیں۔ اس مثال میں، ہر تھریڈ شروع ہوتا ہے اور فنکشن کو انجام دیتا ہے۔ worker() جس کے نتیجے میں صرف متغیر میں اضافہ ہوتا ہے۔,.

آئیے اس پروگرام کو 1000 کی دلیل کے ساتھ چلاتے ہیں۔ جیسا کہ آپ نے اندازہ لگایا ہوگا، نتیجہ 2000 ہونا چاہیے کیونکہ ہر تھریڈ نے متغیر کو 1000 بار بڑھایا ہے۔ تاہم، سب کچھ اتنا آسان نہیں ہے. آئیے پروگرام کو مزید تکرار کے ساتھ چلانے کی کوشش کرتے ہیں۔

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 1: تعارف (ترجمہ)

ایک نمبر ڈالنے سے، مثال کے طور پر، 100000، ہم آؤٹ پٹ کو نمبر 200000 کے طور پر دیکھنے کی توقع رکھتے ہیں۔ تاہم، اگر ہم نمبر 100000 کو کئی بار چلاتے ہیں، تو ہم نہ صرف صحیح جواب دیکھیں گے، بلکہ مختلف غلط جوابات بھی حاصل کریں گے۔ اس کا جواب یہ ہے کہ نمبر بڑھانے کے لیے تین آپریشنز کی ضرورت ہوتی ہے - نمبر کو میموری سے نکالنا، انکریمنٹ کرنا، اور پھر نمبر کو واپس لکھنا۔ چونکہ یہ تمام ہدایات جوہری طور پر نافذ نہیں کی جاتی ہیں (ایک ہی وقت میں)، اس طرح کی عجیب چیزیں ہوسکتی ہیں. اس مسئلے کو پروگرامنگ میں کہا جاتا ہے۔ دوڑ کی حالت. جب کسی نامعلوم لمحے میں نامعلوم قوتیں آپ کے کسی بھی آپریشن کی کارکردگی کو متاثر کر سکتی ہیں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں