تدريس تجربه تدريس/ Teaching Experience تجارب درس سيستم عامل
شروع درس
  • درس سیستمهای عامل برای دوره های کارشناسی را معمولاً با مثال‌هایی از تعامل دانشجویان با کامپیوتر و معرفی سیستم عامل شروع می‌کنم:
  • سیستم عامل برنامه ای که مسئول استفاده کارآمد از مجموعه منابع مرتبط است، شامل:
    • سخت افزار، مثل . . .
    • نرم افزار، مثل . . .
    • داده ها، مثل . . .
    • انسان، مثل . . .
  • سیستم عامل به عنوان مدیر منابع (resource manager) مسئول اداره کردن مشکلاتی مثل رقابت در تخصیص منابع است.
    • با توجه به برنامه بودن آن به نکاتی مثل موارد زیر توجه می‌دهم
    • اینکه باید خودش اجرا شود، پس وقت پردازنده و حافظه نیاز دارد
    • قابلیت‌ها، کارایی و کیفیت آن
    • امکان وجود خطا و گونه های مختلف
    • زبان برنامه نویسی سیستم عامل
    • نحوه بار شدن آن و داستان Boot strapping
    • ضرورت ارتباط با آن به صورت گرافیکی یا فرمان
  • به کاربرد و اهمیت درس هم توجه می‌دهم. با درس سیستم عامل عملاً دانشجو اتفاقاتی که در داخل یک سیستم کامپیوتری می افتد را درک می‌کند. این درک چه در تولید نرم افزار، در ارائه خدمت به کمک کامپیوتر، در حل مسائل اجرایی مثل همگام سازی و حتی در زندگی عادی کمک کننده است ( انشاالله در کتاب مهندسی و مدیریت زندگی)
پيش‌نيازها
  • فرض من در این درس این است که دانشجو با برنامه نویسی و ساختمان داده ها آشناست.
  • (بخش قابل توجهی از درس عملاً بیان ساختمان داده های مورد استفاده در سیستم عامل است)
  • اطلاع دانشجو از برنامه نویسی و اطلاع دانشجو از معماری کامپیوتر بسیار کمک کننده است.
  • درس ریز پردازنده می‌تواند به عمق مطالب دریافتی از درس سیستم عامل به شدت اضافه کند.
  • خیلی از دانشجویان درس ریز پردازنده را بعد از سیستم عامل می‌گیرند. اگر در همان موقع هم این ارتباط برای دانشجو شکل بگیرد، باز هم برایش در دراز مدت ارزشمند خواهد بود.
كتاب درسي
  • کتاب آقای William Stallings و ترجمه ای است که با همکاری آقای دکتر پدرام انجام دادیم مرجع من برای درس سیستم عامل در دوره های کارشناسی است. فکر می‌کنم از دیگر گزینه های موجود بهتر است. به ویژه در بین ترجمه های موجود بهترین است.
  • البته باید توجه داشت که این درس نسبت به اکثر درس‌ها سنگین‌تر است و نگارش و ارائه آن هم ساده نیست. یک علت اصلی وابستگی شدید بخش‌های مختلف به یکدیگر است. و شما ناچار هستید هر بخش را از بقیه بخش‌ها جدا کنید و ارائه کنید.
در مورد فصل 1
  • سیستم عامل اولین لایه نرم افزاری است که روی سخت افزار کشیده می‌شود و بیشترین ارتباط را با سخت افزار دارد. بنابراین دانستن یک حداقل‌هایی از سخت افزار لازم است.
    • چرخه دستورالعمل (بدون وقفه)
    • چرخه دستورالعمل (با وقفه)
    • اطلاع از نفس وجود انواع ثبات‌ها، به ویژه ثبات دستورالعمل، ثبات آدرس و ثبات وضعیت
    • به بیان وقفه و چگونگی پردازش وقفه خیلی اهمیت می‌دهم و سعی می‌کنم برای دانشجویان به خوبی روشن باشد که مکانیزم درک وجود وقفه کاملاً سخت افزاری است و کاری که در قبال یک وقفه انجام می‌شود کاملاً نرم افزاری است که اجرای روتین خدماتی مربوط به همان وقفه است.
    • روی تعویض متن و چگونگی سوئیچ کردن پردازنده از اجرای یک برنامه به اجرای روتین خدماتی وقفه تکیه می‌کنم.
    • در مورد سطوح حافظه که استالینگز وقت زیادی صرف می‌کند و در ضمائم هم به آن پرداخته است، من اصلاً آن قدر وقت نمی‌گذارم. سعی می‌کنم با مثالی از زندگی روزمره، مثل یادداشتی که زیر دست یک دانشجوست، آنچه در کیفش هست، آنچه در خوابگاه و آنچه در شهر خود دارد مفهوم سلسله مراتب حافظه، ضریب اصابت و اصل محلیت مراجعات را روشن کنم. می‌توان این قسمت به شروع فصل مدیریت حافظه موکول کرد.
در مورد فصل 2
  • کتاب‌های مرجع متداول، پس از فصل یک که روی معرفی سخت افزار تکیه دارد، در فصل دوم معمولاً به سابقه سیستم عامل، معرفی بعضی مفاهیم مثل چندبرنامگی، حتی فرایند! و ارتباط بخش‌های مختلف و چگونگی اجرای سیستم عامل می‌شوند. اما من معمولاً این کار را نمی‌کنم. مفاهیم مورد نیاز را هم به تدریج که درس جلو می رود، هرجا که لازم باشد و شرایط اجازه دهد معرفی می‌کنم.
  • در عمل بعد از پردازش وقفه (با یا بدون داستان سلسله مراتب حافظه)، وارد بحث مدیریت فرایند می‌شوم.
  • نکته ای که به دانشجویان اهل خواندن کتاب متذکر می‌شوم این است که از درک نکردن مطالب فصل 2 نگران نشوند. چون اکثر مطالب این فصل نقش معرفی دارند و در طول کتاب و درس به تفصیل مطرح می‌شوند. مثل فرایند و حافظه مجازی.
فصل3: مديريت فرايند
  • مفهموم فرایند (process) کلیدی‌ترین مفهوم درس سیستم عامل است. و مدیریت فرایند (process management) مهمترین نقش سیستم عامل و دشوارترین بخش در آموزش این درس و به نظرم در مجموعه حدود 25 درسی است که در علوم و مهندسی کامپیوتر و فناوری اطلاعات ارائه کرده ام.
  • معرفی مفهوم فرایند را با تعریف شروع نمی‌کنم. چرا که هیچ یک از تعاریف موجود جامع نیست. در عوض ضمن بحث مدیریت فرایند (که عملاً حتی بیش از یک سوم درس را می‌گیرد) با به کارگیری این واژه در context های مختلف، دانشجو انشا الله به درک مفهوم فرایند می‌رسد و تعریف را در انتها می آورم.
  • انشا الله در فرصت (های) دیگر یادداشت کردن تجربه تدریس سیستم عامل را ادامه می‌دهم. امید که کمک کننده باشد.
درك فرايند با واژه امر
  • نزدیکترین واژه فارسی که به عنوان معادل process می‌شناسم، امر و جمع آن امور است. این را به خاطر بحث واژه ای مطرح نمی‌کنم. بلکه هدفم درک بهتر مفهوم فرایند است.
  • به عنوان مثال، دانشجویی را در نظر بگیرید که:
    • امور (فرایندهای/فعالیت‌های) مهم زندگی او در شرایط حاضر عبارتست از: تحصیل، خانواده و ورزش؛ این امور (فعالیت‌ها / فرایندها) ادامه دار هستند.
    • البته ممکن است در آینده این امور (فرایندها/ فرایند) تغییر کنند، مثلا ورزش را کلا کنار بگذارد (kill process). یا امر جدیدی، مثل شغل را اضافه کند (create process).
    • دقت کنید که این امور منطقا به موازات هم پیش می‌روند.به اصطلاح همزمان (concurrent) هستد. این فرد هم درس می‌خواند، هم ورزش می‌رود و الی آخر.
    • با این که این فرد یک پردازنده (CPU) که عمرش هست بیشتر ندارد، اما گاهی به خانواده می‌رسد، گاهی به درس، گاهی به ورزش. یعنی وقتش را تقسیم می‌کند (time sharing).
    • اگر مثل خیلی از کامپیوترها، بیشتر از یک پردازنده داشت، می‌توانست در آن واحد مثلا هم درس بخواند و همان لحظه ورزش هم بکند.
    • دقت کنید که این امور مختلف باید با یکدیگر هماهنگ (سنکرون) شوند. مثلا اگر منابع موجود خوب بین آنها تقسیم نشود ممکن است یک امری (فرایندی) منتظر منبع مورد نیازش (مثل پول) مسدود بماند.
  • در داخل کامپیوتر هم امور مختلفی وجود دارد مثل:
    • امر مدیریت حافظه، امر رسیدگی به پرونده ها، امر اداره کرده دستگاه ها این ها امور سیستمی هستند.
    • امر اجرای برنامه Word، امر اجرای IE، امر اجرای یک برنامه پخش موسیقی. اینها امور کاربری هستند.
  • مدیریت فرایندها، دقیقا مدیریت این امور مختلف است. از جمله:
    • ایجاد یک امر (فرایند) جدید؛
    • تغییر الویت یک فرایند، و زمان بندی آنها که کدام اول، کدام دوم؛
    • تخصیص منابع مورد نیاز، مثل حافظه (با کمک برنامه های مخصوص تدارک آن منابع، مثل مدیر حافظه برای تدارک حافظه)؛
    • مدیریت برای تدارک منابع مورد نیاز؛
    • تغییر حالت، مثلا از مسدود به آماده، یا از اجرا به کامل؛
    • رفع مشکلات همزمانی (مسابقه، بن بست، گرسنگی، تولید و مصرف و هماهنگ کردن).
عملکرد سیستم عامل در مقابل عملکرد آدم
  • سیستم‌های عامل متخصص مدیریت منابع موجود هستند، برای مهندسی کردن کاری نمی‌کنند. آدم‌ها علاوه بر مدیریت، باید برای بهتر شدن زندگی، مهندسی هم بکنن.
  • سیستم‌های عامل برای تدارک منابع جدید کاری نمی‌کنند. آدم‌ها مسؤل تدارک منابع جدید هم هستند.
  • سیستم‌های عامل هیچ دخالتی به امور داخل برنامه ها ندارند. در صورتی که آدم‌ها هر کاری که به عهده می‌گیرند، مدیریت و مهندسی داخل اون کار هم به نوعی به عهده شون هست.
  • در کامپیوتر برای یک حادثه یکسان روتین خدمات واحدی به کار میره. اما آدم‌ها در مقابل حادثه های مشابه انسانی بهتره متفاوت عمل کنن. مثلا نمیشه سلام اول و سلام سوم یک فرد خاص را یک جور جواب داد. یا پاسخ به سلام نفر اول با پاسخ به سلام نفر دوم یکسان نیست.
  • کار آدم خیلی سخت‌تر از سیستم عامله.
  • اما آدم عقل داره و هنر آدم اینه که معمولا عقلائی و مبتنی بر دانش عمل می‌کنه (اگه بکنه). با استفاده از آگاهی های رهیافتی ، از راه های میون بر استفاده می‌کنه. در حالی که سیستم‌های عامل برنامه های معمولی هستند و الگوریتمیک عمل می‌کنند.
سناریو برای آموزش سمافور
  • دانشجویان کلاس را در جریان می‌گذارم که می‌خواهم به کمک شما برای درک مفهوم راهنما (semaphore) یک نمایش بازی کنیم.
  • توضیح می‌دهم که سمافور یک متغیر است. متغییر از نوع رکورد که دو تا فیلد دارد:
    • یک عدد صحیح
    • و یک اشاره گر
  • روی تابلو شکلی شبیه شکل زیر می‌کشم که بیانگر ساختمان داده مربوط به یک راهنما (semaphore) است.

semaphore

  • کد مربوط به عمل‌های wait و sigma را هم در دو ستون روی تابلو برای بچه ها آماده می‌کنم.
  • حالا دو تا قلم دستم می‌گیرم و می‌گویم
    • چون دوتا قلم داریم مقدار اولیه این راهنما (مثلا راهنمای s یا t یا با هر اسم دیگر) را مقدار اولیه 2 می‌گذاریم.
    • چون هیچ کس منتظر نیست، فیلد مربوط به اشاره گر را تهی می‌گذارم.
  • از یک دانشجو می‌خواهم که با صدای رسا تقاضای قلم کند.
  • پیرو این تقاضا:
    • کد مربوط به wait را همراه بچه هابرای این سمافور دنبال می‌کنم.
    • در نتیجه روی تابلو مقدار 2 را خط می‌زنم و 1 می‌نویسم.
    • چون طبق شکل، اشاره گر تهی است و کسی (فرایندی) منتظر نیست، قلم را به متقاضی می‌دهم.
  • به بچه ها توجه می‌دهم که این متقاضی به اجرایش (ازهرجا که بود) ادامه می‌دهد. و من کاری ندارم بکنم.
  • تا اینکه از یک دانشجوی دیگر می‌خواهم که درخواست قلم کند.
  • پیرو این تقاضا
    • کد مربوط به wait را دوباره همراه بچه ها دنبال می‌کنم.
    • در نتیجه روی تابلو مقدار 1 را خط می‌زنم و صفر می‌نویسم.
    • چون طبق شکل، اشاره گر تهی است و کسی (فرایندی) منتظر نیست، قلم را به متقاضی می‌دهم.
  • به بچه ها توجه می‌دهم که این متقاضی به اجرایش (ازهرجا که بود) ادامه می‌دهد. و من کاری ندارم بکنم.
  • تا اینکه از دانشجوی سومی می‌خواهم که در خواست قلم کند.
  • پیرو این تقاضا
    • کد مربوط به wait را باز همراه بچه ها دنبال می‌کنم.
    • در نتیجه روی تابلو مقدار صفر را خط می‌زنم و منهای یک می‌نویسم.
    • مطابق کد مربوط به wait چون این بار مقدار متغییر راهنما از صفر کمتر است، دانشجوی متقاضی را به حالت مسدود می‌برم. و از او می‌خواهم بیاید کنار تابلو و اشاره گری که تا حالا تهی بود را تغییر می‌دهم که نام دانشجوی متقاضی اشاره کند.
  • به بچه ها توضیح می‌دهم این دانشجو (فرایند) مسدود است و عملا جدول PCB مربوط به او در صف انتظار این راهنما قرار می‌گیرد.
  • با سؤال و جواب از بچه ها برای هم مشخص است که اگر دانشجوی دیگری تقاضای قلم کند، چون قلم نداریم، باید برود در ته صف انتظار قرار گیرد. به این ترتیب ممکن است صف انتظار دو یا سه دانشجو داشته باشد.
  • حال از دومین دانشجویی که قلم گرفته بود، می‌خواهم که با صدای رسا اعلام کند که قلم را نمی‌خواهد یا در واقع می‌خواهد پس بدهد. (مخصوصا دومین دانشجو، چون ترتیب پس دادن یک resource و ترتیب دریافت می‌تواند کاملا متفاوت باشد)
  • پیرو این تقاضای پس دادن،
    • کد مربوط به signal را همراه بچه ها دنبال می‌کنم.
    • این بار چون مقدار متغییر منفی است و صف متقاضی خالی نیست، قلمی که از آن دانشجو گرفته ام را به اولین دانشجوی در صف می‌دهم و او از صفه خارج می‌شود و سر جایش می‌رود. روی تابلو هم گره مربوط را از لیست تک پیوی انتظار حذف می‌کنم.
  • بچه ها به خوبی می‌توانند تصور کنند که با یک درخواست کد مربوط به wait و با پس دادن، کد مربوط به signal انجام می‌شود. و اگر کسی در صف باشد از صف خارج می‌شود.
  • بچه ها به خوبی حس می‌کنند، تنها موقعی مقدار راهنما می‌تواند مثبت شود که هیچ متقاضی دیگر وجود نداشته باشد.
  • چند نکته:
    • در روند اجرای این نمایش ممکن است بعضی دانشجویان سر شوق بیایند و شوخی بکنند.
      • شما استقبال کنید. همراه بچه ها شوید.
      • و از شرایطی که مطرح می شود، برای بیان اتفاقاتی که ممکن است در داخل کامپیوتر بیفتد توضیح دهید.
    • بهتر است از ابتدای یک جلسه این سناریو را دنبال کنید تا فرصت کافی داشته باشید.
    • از شرایط پیش آمده می‌توانید. برای مرور کردن مفاهیمی که قبلا داشته اید، مثل حالت‌های مختلف فرایند و چگونگی تغییر حالت فرایندها، و انتقال کنترل استفاده کنید.
    • در درس‌های بعد که به راهنما ها کار دارید، می‌توانید با یاد آوری نمایش امروز، درک مطالب جدید را به شدت برای دانشجوی ساده کنید.
    • بهتر است به نقش PCB ها هم تأکید کنید که عملا در سیستم عامل، به جای دانشجو، این PCB مربوط به این فرایند است که در یک صف اضافه می‌شود یا از صفی حذف و به صف دیگری می‌رود. و ممکن است یک PCB در صف‌های متعددی قرار داشته باشد.
 
آمار بازديد از سايت

مهندسي زندگي: راهنماي انتخاب

Selection Guide

این کتاب سعی می‌کند در کمال سادگی و اختصار خواننده را انشاالله برای انتخاب بهتر، سریع‌تر و ارزان‌تر آماده کند. به انتخاب‌های بسیار مهمی توجه می‌دهد که در قریب به اتقاق موارد ناآگاهانه اتخاد می‌شوند. و به نقش نشانه‌ها و نشان دهنده‌ها در انتخاب می‌پردازد.

* * * * *

راهنماي پروژه پاياني

Thesis Guide

شاید وجه تمایز کتاب “راهنمای پروژه‌ی پایانی” علاوه بر سادگی و اختصار، توجه دادن به بعضی تجربه‌ها و راه‌های میانبر عملی یا آگاهی‌های رهیافتی است.

فيلم معرفي كتاب توسط نويسنده

* * * * *

به سوي توليد بهتر نرم ‌افزار؛ اصول مهندسي نرم ‌افزار

Software Engineering

www.sadighim.ir/SEbook

اين كتاب براي دانشجويان رشته‌هاي مختلف رايانه‌، و همچنين افراد شاغل به توليد نرم‌افزار كه زمينه‌ي تحصيلي متفاوتي دارند، نگاشته شده است. درنتيجه به‌صورت يك خودآموز هم، قابل استفاده است.