سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

۴ مطلب با موضوع «درس سیستم عامل» ثبت شده است

تمرین شماره ۳: شناخت ساختار فایل لینوکس

هدف این تمرین آشنایی با ساختار فایلی سیستم عامل لینوکس و همچنین ساختار آدرس دهی این سیست عامل هست

شرح تمرین:

  1. تو این تمرین شاخه های اصلی لینوکس رو تا ۱ سطح به صورت درختی کشیده و توضیح بدین هر شاخه برای چه منظوری هست. مثلا شاخه /boot به چه دردی میخوره. تو اینترنت منابع خیلی زیادی برای این کار وجود داره
  2. تعداد فایل های هر شاخه رو بنویسین (روش بدست اوردن تعداد فایل ها رو بفرمایین)
  3. یک کاربر عادی (خود کاربری که باهاش کار میکنین) تو کدوم شاخه ها قابلیت نوشتن و تغییر محتویات رو داره؟
  4. نمره اضافی: سعی کنین لینوکس رو خراب کنین. جوری که بوت نشه. بهترین روش، بیشتری نمره رو میگیره.


تمرین شماره ۲: نوشتن یک برنامه شل ساده در لینوکس

هدف از این تمرین آشنایی با ساختار ساخت و ارتباط پردازش ها با همدیگر تو محیط سیستم عامل هست.

تو این تمرین، باید یه محیط شل (همون محیط ورود دستور مثل داس) نوشته بشه. یه تعداد فرمان صادر میشه و اجرا میشه. خروجی باید چاپ بشه و دستور بعدی از کاربر گرفته بشه.

یه مستند خیلی خوب برای این کار.

http://nicku.org/ossi/lab/processes/processes-lg.pdf

توضیح اضافی:

برنامه رو تو یه ویرایشگر متن لینوکسی ویرایش کنین (مثل gedit) و اون رو یه جایی ذخیره کنین (مثلا /home/user/oslab)

برنامه رو با دستور زیر کامپایل کنین:

(اول به مسیری که برنامه رو نوشتین برین، مثلا)

cd /home/user/oslab
gcc program.c -o shell

اگر خطایی روی صفحه ننوشت، با دستور زیر اجراش کنین:

./shell
۰ موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۱۲:۵۵
حامد شیخلو

صفحه مربوط به درس سیستم عامل در ترم پاییز سال 92 در وبسایت zcs راه اندازی شد.

تمرینات در این صفحه قرار خواهد گرفت و جوابها در همانجا ارسال خواهد شد.

کلید مربوط به ثبت نام در کلاس اعلام شده است، در صورت نیاز ایمیل بزنید تا ارسال کنم.

۰ موافقین ۰ مخالفین ۰ ۲۳ اسفند ۹۲ ، ۱۴:۵۴
حامد شیخلو

این مساله برای اولین بار توسط دایجسترا مطرح شد. در کتاب سیستم عامل سیلبرشاتس به صورت زیر آمده است:

"در یک آرایشگاه به تعداد n صندلی برای انتظار موجود و یک صندلی آرایشگری موجود است. اگر مشتری در مغازه نباشد، آرایشگر در این فرصت میخوابد. اگر یک مشتری وارد مغازه شد و همه صندلی ها پر باشد، مغازه را ترک میکند، اگر آرایشگر مشغول باشد، اما صندلی انتظار موجود باشد، مشتری در یک صندلی خالی مینشیند. اگر آرایشگر خوابیده باشد، مشتری او را بیدار میکند. یک برنامه برای هماهنگ سازی مشتری و ارایشگر بنویسید."

میتوان اطلاعات زیر را برای فهم بهتر مساله اشاره کرد:

  • پردازش مشتری یک تابع با عنوان getHairCut را فراخوانی میکند.
  • اگر پردازش مشتری زمانی که مغازه پر است وارد شود، میتواند balk را که چیزی بازگشت نمیدهد فراخوانی کند.
  • پردازش آرایشگر باید cutHair را فراخوانی کند.
  • زمانی که آرایشگر تابع cutHair را فراخوانی میکند، باید دقیقا یک پردازش getHairCut را فراخوانی کرده باشد.

مقدار درهی های اولیه:

customers = 0
mutex = Semaphore(1)
customer = Semaphore(0)
barber = Semaphore(0)

مقدار customers، تعداد مشتری های موجود در مغازه را مدیریت میکند و با میوتکس محافظت میشود.

آرایشگر برای customer منتظر میشود تا وارد مغازه شود و آنگاه مشتری منتظر مغازه دار میشود تا اجازه دهد که مشتری بر روی صندلی بنشیند.

کد مربوط به مشتری:

mutext.wait()
	if customers == n+1:
		mutext.signal()
		balk()
	customer += 1
mutex.signal()

customer.signal()
barber.wait()
getHairCut()

mutex.wait()
	customer -=1
mutex.signal()

اگر تعداد n صندلی پر باشد و یکی هم روی صندلی آرایش نشسته باشد (میشود n+1 نفر) یعنی مغازه پر است. مشتری در این شرایط وارد میشود و تابع bulk را صدا میزند. در غیر این صورت هر مشتری به مغازه دار یک سیگنال میدهد و منتظر آرایشگر میشود.

کد  آرایشگر:

customer.wait()
barber.signal()
cutHair()

Hilzer’s barbershop

در کتاب استالینگز یک مساله آرایشگر پیچیده تر مطرح شده است:

"مغازه دارای سه صندلی آرایش و سه آرایشگر و همچنین یک فضای انتظار که برای مشتری های جدید. تعداد مشتری هایی که میتواند منتظر باشند، 20 نفر میباشند.

یک مشتری در صورت پر بودن مغازه وارد نمیشود. یک مشتری که منتظر است میتواند روی کاناپه بشیند یا اگر کاناپه پر بود، بیاستد. زمانی که یک آرایشگر خالی است، مشتری که بیشتری زمان انتظار را دارد سرویس داده میشود. زمانی که یک جا در کاناپه خالی شد، مشتری که بیشتری زمان سرپا بوده، مینشیند. زمانی که کار آرایش تمام شد، آرایشگر دستمزد را میگیرد، اما چونکه یک صندوق داریم، در هر لحظه هزینه یک مشتری دریافت میشود. آرایشگر زمان خود را بین آرایش کردن، پول گرفتن و خوابیدن تقسیم میکند."


میتوان گفت مسائل زیر در زمانبندی باید مد نظر باشد:

  • مشتری این توابع را به ترتیب اجرا میکند: enterShop, sitOnSofa, sitInBarberChair, pay, exitShop
  • آرایشگر توابع cutHair و AcceptPayment را فراخوانی میکند.
  • مشتری در صورت پر بودن مغازه نمیتواند وارد مغازه شود.
  • اگر کاناپه پر باشد، مشتری نمیتواند sitOnSofa را اجرا کند، مگر اینکه یکی از مشتری ها sitOnBarberChair را اجرا کرده باشد.
  • اگر تمام صندلیهای آرایش پر باشد، یک مشتری که وارد مغازه میشود، نمیتواند sitOnBarberChair را اجرا کند، مگر آنکه یکی از مشتریها Pay را اجرا کرده باشد.
  • مشتری باشد ابتدا pay را اجرا کند و سپس آرایشگر acceptPayment را اجرا کند.
  • آرایشگر باید ابتدا acceptPayment را اجرا کند و سپس مشتری exitShop را اجرا کند.

دشواری مساله در مکانهایی است که باید بر روی آنها انتظار انجام شود.

مقداردهی های مساله:

customers = 0
mutex = Semaphore(1)
standingRoom = Fifo(16)
sofa = Fifo(4)
chair = Semaphore(3)
barber = Semaphore(0)
customer = Semaphore(0)
cash = Semaphore(0)
receipt = Semaphore(0)

کر مربوط به مشتری:

mutex.wait()
if customers == 20:
mutex.signal()
exitShop()
customers += 1
mutex.signal()

standingRoom.wait()
enterShop()

sofa.wait()
sitOnSofa()
standingRoom.signal()

chair.wait()
sitInBarberChair()
sofa.signal()

customer.signal()
barber.wait()
getHairCut()

pay()
cash.signal()
receipt.wait()

mutex.wait()
customers -= 1
mutex.signal()

exitShop()

کد مربوط به آرایشگر:

customer.wait()
barber.signal()
cutHair()

cash.wait()
acceptPayment()
receipt.signal()
۶ موافقین ۰ مخالفین ۰ ۲۴ آذر ۹۲ ، ۱۵:۴۳
حامد شیخلو

در این پست، تمرینات هر جلسه قرار داده خواهد شد و زمان تحویل هر کدام نیز مشخص میشود

  • تمرینات سری چهارم:

1. تمرینات فصل دوم کتاب سیلبرشاتس، ویرایش 9. تمرینات شماره:
1,2,3,4,7,8,13,15,16,18,21,22,23

2. توضیح در مورد تکنولوژی IaaS، SaaS، PaaS

3. مساله برنامه نویسی: تمرین برنامه نویسی شماره 26 از کتاب سیلبرشاتس را انجام دهید (بعد از تمرینات کتاب، تمرینات برنامه نویسی قرار دارد).

آخرین زمان تحویل، جلسه یکشنبه، 26 آبان

  • تمرینات سری پنجم

1. تمرین برنامه نویسی: نوشتن یک برنامه رابط کاربری متنی مشابه شل لینوکس
رابط کاربری اصلی سیستم عامل لینوکس، متنی است که به عنوان ترمینال شناخته میشود. در این رابط کاربری کاربر نام برنامه مورد نظر خود را وارد میکند و محیط کاربری آن برنامه را همراه با پارامتر های مربوطه اجرا میکند. برای مثال به منظور لیست کردن محتوای یک فایل متنی از برنامه cat استفاده میشود، در رابط کاربری دستور زیر وارد میشود:
$cat <file name>

با وارد کردن این دستور، برنامه شل، برنامه cat را همراه با پارامتر آن (در اینجا نام فایل) فراخوانی میکند. بعد از اجرای برنامه منتظر دستور دیگری از ورودی میشود.

برنامه نوشته شده باید دارای ویژگی های زیر باشد:

  1. از کاربر نام برنامه را بگیرد و آن برنامه را اجرا کند
  2. قابلیت دریافت پارامتر های برنامه را داشته باشد
  3. بعد از اتمام اجرای برنامه منتظر دستورات جدید باشد
  4. دستور تغییر شاخه cd را بتواند اجرا کند
  • تمرینات سری ششم

1. تفاوت ها و شباهت های مفاهیم زیر را عنوان کنید:
MultiCore, ManyCore, MultiProcessor, Distributed System

2. تمرین برنامه نویسی:

یک برنامه به زبان سی یا هر زبان دلخواه دیگر دز محیط لینوکس بنویسید و سیگنال CTRL+C (در حالت عادی از برنامه خارج میشود) را در آن مدیریت کنید (مثلا یک پیغام چاپ کند)

3. در مورد نحوه مدیریت نخ های پردازشی در زبان جاوا تحقیق کنید.

(زمان امتحان میان ترم-چهارشنبه 20 آذر ماه- مواد امتحانی شامل 5 فصل اول کتاب سیلبرشاتز میباشد و منبع امتحانی کتاب سیسلبرشاتز و اسلاید های کتاب استالینگز میباشد)

  • تمرینات سری هفتم

1. تمرینات فصل چهارم کتاب سیلبرشاتس، ویرایش 9. تمرینات شماره:
1, 2, 3, 6 ,8, 11, 13, 15 ,18
    ۵ موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۲ ، ۱۴:۱۶
    حامد شیخلو