آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 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

توھان پڻ چيڪ ڪري سگھو ٿا منھنجي چينل تي ٽيليگرام =)

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

ڇا ٿيندو جڏهن هڪ پروگرام هلندي آهي؟ ھلندڙ پروگرام ھڪڙو سادو ڪم ڪري ٿو - اھو ھدايتن تي عمل ڪري ٿو. هر سيڪنڊ، لکين ۽ ممڪن طور تي اربين هدايتون پروسيسر طرفان رام مان حاصل ڪيون وينديون آهن، بدلي ۾ اهو انهن کي ڊيڪوڊ ڪري ٿو (مثال طور، اهو سڃاڻي ٿو ته اهي هدايتون ڪهڙي قسم سان تعلق رکن ٿيون) ۽ انهن تي عمل ڪري ٿو. اهو ٿي سگهي ٿو ٻه نمبر شامل ڪرڻ، ميموري تائين رسائي، حالت چيڪ ڪرڻ، هڪ فنڪشن ڏانهن ٽپو ڏيڻ، وغيره. ھڪڙي ھدايت تي عمل ڪرڻ کان پوء، پروسيسر ٻئي جي عمل ڪرڻ لاء اڳتي وڌندو آھي. ۽ اھڙيءَ طرح ھدايت کان پوءِ ھدايتون، انھن تي عمل ڪيو ويندو جيستائين پروگرام ختم ٿئي.
هي مثال قدرتي طور تي آسان سمجهيو ويندو آهي - حقيقت ۾، پروسيسر کي تيز ڪرڻ لاء، جديد هارڊويئر توهان کي هدايتن تي عمل ڪرڻ جي اجازت ڏئي ٿو، ممڪن نتيجن جي حساب سان، هدايتون هڪ ئي وقت تي عمل ڪرڻ، ۽ اهڙيون چالون.

وان نيومن جي حساب جو ماڊل

اسان جي طرفان بيان ڪيل ڪم جو آسان روپ، حساب جي وان نيومن ماڊل سان ملندڙ جلندڙ آهي. وون نيومن ڪمپيوٽر سسٽم جي علمبردارن مان هڪ آهي، هو گيم ٿيوري جي ليکڪن مان هڪ آهي.. جڏهن پروگرام هلي رهيو آهي، ٻين واقعن جو هڪ گروپ ٿئي ٿو، ٻيا ڪيترائي عمل ۽ ٽئين پارٽي جي منطق جو ڪم، جنهن جو بنيادي مقصد سسٽم جي لانچ، آپريشن ۽ سار سنڀال کي آسان ڪرڻ آهي.
اتي سافٽ ويئر جو هڪ سيٽ آهي جيڪو پروگرامن کي هلائڻ لاءِ آسان بڻائي ٿو (يا هڪ ئي وقت ڪيترن ئي پروگرامن کي هلائڻ جي اجازت ڏئي ٿو)، پروگرامن کي هڪ ئي ميموري شيئر ڪرڻ جي اجازت ڏئي ٿو، انهي سان گڏ مختلف ڊوائيسن سان رابطي ۾. سافٽ ويئر جي اهڙي سيٽ (سافٽ ويئر) کي لازمي طور تي آپريٽنگ سسٽم چئبو آهي ۽ ان جي ڪمن ۾ نگراني شامل آهي ته سسٽم صحيح ۽ موثر طريقي سان ڪم ڪري، انهي سان گڏ هن سسٽم جي انتظام جي آسانيء کي يقيني بڻائي.

آپريٽنگ سسٽم

آپريٽنگ سسٽم، مختصر طور تي OS، ڪمپيوٽر جي وسيلن کي منظم ڪرڻ ۽ ڪمپيوٽر سان صارف جي رابطي کي منظم ڪرڻ لاء ٺهيل پروگرامن جو هڪ سيٽ آهي..
او ايس پهرين جاء تي ان جي اثرائتي حاصل ڪري ٿي، سڀ کان اهم ٽيڪنڪ ذريعي - ٽيڪنڪ ورچوئلائيزيشن. او ايس هڪ جسماني وسيلن (پروسيسر، ميموري، ڊسڪ، وغيره) سان رابطو ڪري ٿو ۽ ان کي پاڻ ۾ وڌيڪ عام، وڌيڪ طاقتور، ۽ استعمال ڪرڻ آسان بڻائي ٿو. تنهن ڪري، هڪ عام سمجھڻ لاء، توهان تمام گهڻو ڪري سگهو ٿا آپريٽنگ سسٽم کي هڪ مجازي مشين سان.
صارفين کي آپريٽنگ سسٽم کي حڪم ڏيڻ جي اجازت ڏيڻ ۽ اهڙيء طرح ورچوئل مشين جي صلاحيتن کي استعمال ڪرڻ جي اجازت ڏيڻ لاء (جهڙوڪ پروگرام هلائڻ، ميموري مختص ڪرڻ، فائل تائين رسائي، وغيره)، آپريٽنگ سسٽم ڪجهه انٽرفيس مهيا ڪري ٿو جنهن کي سڏيو ويندو آهي. API (ايپليڪيشن پروگرامنگ انٽرفيس) ۽ جنهن تي توهان ڪال ڪري سگهو ٿا (ڪال). هڪ عام آپريٽنگ سسٽم اجازت ڏئي ٿو سوين سسٽم ڪالون ڪيون وڃن.
آخرڪار، جيئن ته ورچوئلائيزيشن ڪيترن ئي پروگرامن کي هلائڻ جي اجازت ڏئي ٿي (اهڙيء طرح سي پي يو کي حصيداري ڪرڻ)، ۽ هڪ ئي وقت انهن جي هدايتن ۽ ڊيٽا تائين رسائي (اهڙيء طرح ميموري شيئرنگ)، ۽ ڊسڪ تائين رسائي (اهڙيء طرح I/O ڊوائيسز کي حصيداري ڪرڻ)، آپريٽنگ سسٽم پڻ سڏيو ويندو آهي. ريسورس مئنيجر. هر پروسيسر، ڊسڪ ۽ ميموري سسٽم جو هڪ وسيلو آهي، ۽ اهڙيء طرح آپريٽنگ سسٽم جي ڪردارن مان هڪ آهي انهن وسيلن کي منظم ڪرڻ، ان کي موثر، ايمانداري، يا ان جي برعڪس، انهي ڪم تي منحصر ڪري ٿو جنهن لاء هي آپريٽنگ سسٽم. ٺهيل آهي.

سي پي يو ورچوئلائيزيشن

هيٺ ڏنل پروگرام تي غور ڪريو:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 1: تعارف (ترجمو)

اهو ڪو خاص عمل نٿو ڪري، حقيقت ۾، اهو سڀ ڪجهه ڪري ٿو هڪ فنڪشن کي سڏيندو آهي اسپين()، جنهن جو ڪم اهو آهي ته ٽائيم چيڪ ڪرڻ ۽ هڪ سيڪنڊ گذرڻ کان پوءِ واپسي. اهڙيء طرح، اهو اڻڄاتل اسٽرنگ کي ورجائي ٿو جيڪو صارف هڪ دليل جي طور تي منظور ڪيو.
اچو ته هن پروگرام کي هلون ۽ ان کي پاس ڪريون "A" ڪردار کي دليل طور. نتيجو خاص طور تي دلچسپ نه آهي - سسٽم صرف هڪ پروگرام تي عمل ڪري ٿو جيڪو وقتي طور تي "اي" ڪردار ڏيکاري ٿو.
ھاڻي اچو ته ھي اختيار آزمائيون جڏھن ھڪ ئي پروگرام جا ڪيترائي مثال ھل رھيا ھجن، پر ان کي صاف ڪرڻ لاءِ مختلف اکر ڪڍو. هن معاملي ۾، نتيجو ڪجهه مختلف ٿيندو. ان حقيقت جي باوجود ته اسان وٽ هڪ پروسيسر آهي، پروگرام هڪ ئي وقت تي عمل ڪيو ويندو آهي. اهو ڪيئن ٿيندو؟ پر اهو ظاهر ٿئي ٿو ته آپريٽنگ سسٽم، هارڊويئر صلاحيتن جي مدد کان سواء، هڪ برم پيدا ڪري ٿو. اهو خيال آهي ته سسٽم ۾ ڪيترائي ورچوئل پروسيسر آهن، هڪ واحد جسماني پروسيسر کي نظرياتي طور تي لامحدود تعداد ۾ تبديل ڪري ٿو ۽ انهي سان گڏ بظاهر پروگرامن کي هڪ ئي وقت هلائڻ جي اجازت ڏئي ٿو. هن illusion سڏيو ويندو آهي سي پي يو ورچوئلائيزيشن.
هي تصوير ڪيترن ئي سوالن کي جنم ڏئي ٿي، مثال طور، جيڪڏهن هڪ ئي وقت ڪيترن ئي پروگرامن کي هلائڻ چاهين ٿا، انهن مان ڪهڙو شروع ڪيو ويندو؟ او ايس جون ”پاليسيون“ هن سوال جا ذميوار آهن. پاليسيون OS ۾ ڪيترن ئي هنڌن تي استعمال ڪيون وينديون آهن ۽ سوالن جا جواب هن طرح، ۽ بنيادي ميڪانيزم آهن جيڪي OS لاڳو ڪن ٿا. ان ڪري OS جو ڪردار وسيلا مينيجر طور.

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

هاڻي اچو ته ياداشت تي نظر. جديد سسٽم ۾ ياداشت جي جسماني ماڊل کي بائيٽ جي هڪ صف طور پيش ڪيو ويو آهي.. ميموري مان پڙهڻ لاء، توهان کي وضاحت ڪرڻ جي ضرورت آهي سيل ايڊريسان تائين رسائي حاصل ڪرڻ لاء. ڊيٽا کي لکڻ يا تازه ڪاري ڪرڻ لاء، توهان کي ڊيٽا ۽ سيل جو پتو پڻ بيان ڪرڻ گهرجي جتي ان کي لکڻو آهي.
پروگرام جي عمل جي دوران ياداشت کي مسلسل رسائي حاصل ڪئي وئي آهي. هڪ پروگرام پنهنجي سموري ڊيٽا جي جوڙجڪ کي ميموري ۾ محفوظ ڪري ٿو ۽ مختلف هدايتن تي عمل ڪندي ان تائين رسائي حاصل ڪري ٿو. هدايتون، ساڳئي وقت، ميموري ۾ پڻ ذخيرو ٿيل آهن، تنهنڪري اهو پڻ ايندڙ هدايتن لاء هر درخواست لاء رسائي آهي.

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

تبصرو شامل ڪريو