بخش اول : آشنایی با سیستم عامل UNIX
تاریخچه :
UNIX نام سیستم عاملی است که اولین بار توسط یک گروه تحقیقاتی در آزمایشگاههای Bell متعلق به شرکت AT&T طراحی و ایجاد گردید.این سیستم عامل ابتدا بر روی چندین مینی کامپیوتر ساخت شرکت DEC نصب شده و بتدریج با توسعه آن بر روی دیگر کامپیوترها عرضه و ارائه گردید.
چگونگی تولد و رشد سیستم عامل unix با دیگر سیستم های عامل متفاوت است.ورود این سیستم عامل به دنیای تکنولوژی از سمت دنیای تجارت نبوده و این خود دلیلی است برای همه گیر شدنش. این سیستم عامل که توسط کن تامپسون در سال ١٩۶۹طراحی شد، گروههای برنامه نویسان را در توسعه برنامه ها حمایت می کرد و در جهت ساده تر کردن نحوه ارتباط (dialogue) بین انسان و ماشین می کوشید. البته این سیسنم عامل یکباره نوشته نشد، بلکه در پاسخ به نیازهای برنامه نویسی در پروژه های خاص بتدریج تکامل یافت و تا به امروز نیز به این سیر تکاملی ادامه داده است. در این بخش خلاصه ای از این سیر تکاملی را می بینیم.
۱۹۶۹در آزمایشگاه AT&T کن تامپسون بخاطر مسائل کامپیوتر ها و منابعی که در دست داشت. پروژه Multics را متوقف کرد و کار روی ماشین PDP-7 را شروع کرد و برای این ماشین یک فایل سیستم، یک مفسر فرمان و چند برنامه مفید دیگر طراحی نمود.
۱۹۶۹کن تامپسون و دنیس ریچی زبان B را طراحی کرده و unix را به این زبان دوباره نویسی کردند. و روی ماشین PDP-11 آزمایش نمودند.
۱۹۷۳دنیس ریچی زبان B را دوباره نویسی کرده و آن را زبان C نامید و unix را دوباره به این زبان نوشت.
۱۹۷۵ نسخه ۶از unix بعنوان اولین نسخه قابل ارائه در دسترس عموم قرار گرفت.
۱۹۷۸ نسخه هفتم unix نوشته شد.
۱۹۸۰ در دانشگاه برکلی کالیفورنیا فعالیت زیادی روی unix انجام و برنامه های مفید فراوانی برای این سیستم عامل تهیه شد. بخصوص نرم افزار مربوط به شبکه در این دانشگاه نوشته شد. نسخه هایی از unix که در این دانشگاه نوشته شدند، نام BSD گرفتند. از جمله امکانات این نسخه، termcap,csh,vi را می توان نام برد.
۱۹۸۱ اتحادیه جهانی /user/group تشکیل و کمپانی SCO با همکاری شرکت مایکروسافت نسخه xenix را تولید کرد.
۱۹۸۲ سیستم سوم از نسخه unix نوشته شد (کندترین نسخه unix)
۱٩۸۳ سیستم ۵(system 5) نوشته شد که ۳۰درصد از نسخه قبلی سریعتر است.
١٩۸۵ سیستم 5.2 نوشته شد. (System 5 Relase 2)
۱۹۸۶ سیستم 5.3 نوشته شد. (S5R3)
۱۹۸۷ سیستم 5.4 نوشته شد. (S5R4)
اسامی نسخه های مختلف unix عبارتند از:
BSD – نسخه های نوشته شده در دانشگاه برکلی که بیشتر در زمینه های علمی و مهندسی نوشته شده اند.
Xenix – نسخه نوشته شده در کمپانی SCO که روی کامپیوترهای شخصی و سیستم های desletop قابل پیاده شدن است.
Unix system 5 – نسخه هایی از unix که در زمینه های اداری و مالی و تجاری نوشته شده و روی ماشین های متوسط تا کامپیوترهای بزرگ قابل پیاده شدن است.
SunOs – نسخه هایی از unix که روی ماشین های Sun پیاده می شوند دارای محیط های گرافیکی و شبکه NFs است.
S5R4 – این نسخه از unix جدیدترین و آخرین نسخه unix نوشته شده توسط AT&T است و روی بیشتر ماشین ها قابل ارائه است و بعنوان unix استاندارد شناخته شده است. این نسخه در جهت تکمیل و تصحیح نسخه قبلی نوشته شده است. بغیر از رفع مسائلی که استفاده کنندگان unix احساس می کردند، این نسخه آسانتر، سریعتر و بهتر تز نسخه قبلی عمل می نماید.
آشنایی با سیستم عامل
در یک تعریف ساده می توان گفت که سیستم عامل برنامه ای است که سخت افزار را کنترل می کند. یک سیستم عامل برنامه ای است که سهولت استفاده از کامپیوتر و نتایج آن را برای کاربران فراهم می سازد. پایه ای ترین وظیفه یک سیستم عامل مدیریت منابع (Resources) سیستم است.مهمترین منابعی که یک سیستم عامل مدیریت می کند عبارتند از:
پردازشگر cpu
حافظه اصلی
حافظه جانبی
دستگاه های ورودی و خروجی (I/O)
داده ها (Data)
تعریف رابط کاربری (محیطی که کاربران از طریق آن با سیستم ارتباط برقرار می کنند)
امکان اشتراک داده ها بین کاربران مختلف
مدیریت ورودی و خروجی
زمانبندی منابع بین کاربران مختلف
بازیابی سیستم پس از بروز خطا
ویژگی های سیستم عامل unix
۱- multiprogramming : چند برنامه در آن واحد روی primary storage ،Resident شده اند و پروسسور بین آنها switch می کند. علت موفقیت این مشخصه، بعنوان وسیله ای درافزایش بازدهی سیستم، تفاوت در سرعت دستگاههای ورودی و خروجی، پروسسور مرکزی است. وقتی برنامه ای تقاضای I/O می کند در حالت single user پروسسور به حالت idle در می آید. شاید در یک بار صبر کردن تا ۵۰۰۰۰سیکل پروسسور wait انجام شود. استفاده از چنین زمانی برای انجام برنامه ای دیگر توسط پردازنده مرکزی کارایی سیستم را افزایش می دهد.
۲ – Time sharing : در این روش پردازنده مرکزی جسمی است که توسط تمام کاربران و پروسس ها، استفاده می شود. به این ترتیب که زمان cpu بین پروسس های مختلف سیستم و کاربران تقسیم می شود و به هر یک کسری از زمان cpu تعلق می گیرد.
۳ – Multi user : در صورتیکه در هر لحظه بیش از یک کاربر بتواند از سیستم استفاده کند سیستم multi user یا چند کاربره نامیده می شود.
۴ – Multi Tasking : امکان اجرای برنامه به صورت fore ground و back ground
۵ – دارا بودن file system بصورت سلسله مراتبی و تامین protection برای داده های سیستم
۶ – Generality : بدین معنا که سک روش واحد بتواند اهداف چند گانه ای را برآورده کند که این امر از دو طریق حاصل شده است:
الف – وجود system callهای یکسان برای خواندن و نوشتن روی فایل ها و deviceها و بافرهای موجود بین پروسس ها
ب – نامگذاری و protection یکسان برای فایل های داده، Directory ها و Device ها
۷ – قابلیت حمل (Transportability) : سیستم عامل unix به آسانی قابل حمل است. برای یک سیستم جدید، با دستکاری اندک بر روی کدهای سیستم عامل unix می توان آن را جهت نصب آماده نمود. توانایی حمل سیستم عامل unix از یک نوع کامپیوتر به کامپیوتر دیگر دلیل اصلی موفقیت آن می باشد.
ساختار سیستم عامل unix
سیستم عامل unix شامل چهار بخش اصلی زیر است:
1)kernel 2)file system 3)shell 4)commands
۱- kernel :
که در قلب سیستم عامل قرار دارد و سخت افزار را کنترل می کند. تمام سیستم عامل ها یک kernel دارند و بر اساس فرامین مختلف قسمتهایی از سیستم کامپیوتری را فعال یا غیر فعال می سازد. در سیستم عامل unix سعی بر این بوده است که kernel وظایف کمتری را انجام دهد. بطوریکه اغلب وظایف سیستم عامل توسط برنامه های سودمند انجام می شود. در سیستم عامل unix هر پروسس یک برنامه در حال اجرا می باشد.
وظایف kernel عبارتند از:
زمانبندی پروسس ها
اختصاص حافظه اصلی
مدیریت فضای دیسک
نظارت بر انتقال داده ها مابین حافظه اصلی و دستگاههای جانبی
اختیار دادن به تقاضاها مابین حافظه اصلی و دستگاههای جانبی
پروسس ها دو حالت دارند:
user mode
kernel mode
در user mode پروسس های user در cpu اجرا شده و به داده های کاربر دسترسی دارند و در حالت kernel پردازنده پروسس های سیستم را اجرا کرده و به داده های سیستم دسترسی دارد. پروسس های سیستم دارای اولویت بالاتری نسبت به پروسس های کاربران هستند و سریعتر از کاربران، cpu را در اختیار می گیرند. پروسس های کاربران بر اساس زمان لازم جهت اجرا طبقه بندی می شوند.
تخصیص حافظه های اصلی و فرعی
همانطور که قبلا ذکر شد در هر لحظه مقداری پروسس در حالت اجرا در حافظه اصلی قرار دارند و فقط یکی از آن ها پردازنده یا cpu را برای اجرا در اختیار دارد.
پروسس هایی که برای اجرا آماده هستند (Ready) در حافظه فرعی قرار دارند. اگر یکی از پرویی هایی که روی حافظه فرعی قرار دارد دارای اولویت بالاتری نسبت به پروسس های موجود در حافظه اصلی باشد باید به حافظه اصلی منتقل شود و پردازنده را در اختیار بگیرد. برای انتقال یک پروسس به حافظه اصلی ابتدا فضای آزاد موجود در حافظه اصلی چک شده و در صورتیکه به اندازه کافی بزرگ نباشد (به اندازه مورد نیاز پروسس) باید یکی از پروسس های موجود در حافظه اصلی به حافظه فرعی منتقل گردد. (swap out) برای انجام این کار پروسس هایی که زمان بیشتری در حافظه اصلی بوده اند، دارای اولویت بالاتری برای انتقال به حافظه فرعی یا swap out می باشند. اختصاص حافظه به پروسس ها از وظایف kernel بوده و عمل انتقال پروسس ها از حافظه فرعی به اصلی و بالعکس را swapping می گویند.
حافظه فرعی اصطلاحا یک swap device نامیده شده و در صورتیکه در زمان انتقال، تمام پروسس های موجود در حافظه اصلی به این device منتقل گردد، سیستم عامل یک swapping system و در صورتیکه فقط صفحه ای (یک page) ازروسس ها به این device منتقل گردد، سیستم عامل یک paging system نامیده می شود.
کنترل دستیابی به دستگاههای جانبی
در سیستم عامل unix به ازاء هر دستکاه جانبی سخت افزاری مانند ترمینال، چاپگر، دیسکت و ... یک برنامه نرم افزاری (device driver) وجود دارد که ویژگیهای آن را به سیستم معرفی می کند. Device driver ها از اجزاء kernel می باشند.
برنامه معرفی هر دستگاه جدید به سیستم عامل ابتدا باید device driver آن تهیه شده و سپس این برنامه به kernel ملحق (link) شده و kernel جدید ایجاد شود.
کنترل هر دستگاه از طریق device driver متناظر و به یکی از دو شیوه زیر انجام می پذیرد:
1- (structured I/O) Block device I/O system
برای دستگاههایی مانند دیسک سخت و فلاپی
2- (unstructured I/O) character or raw device I/O system
برای دستگاههایی مانند ترمینال یا چاپگرهای خطی اگر دسترسی به اطلاطات دستگاه جانبی بصورت بلوک به بلوک باشد دستگاه block device نامیده می شود مانند دیسک و نوار. اینگونه دستگاهها برای انتقال اطلاعات به سیستم اصلی از مکانیزم buffering استفاده می کنند. اگر انتقال اطلاعات مابین دستگاه جانبی و سیستم اصلی بدون استفاده از buffering و حرف به حرف صورت گیرد دستگاه character device نامیده می شود.
هر دستگاه جانبی یک نام مانند نام یک فایل داشته و مانند یک فایل با آن برخورد می شود. نوع این فایل (دستگاه جانبی) با دیگر فایل های درون سیستم متفاوت بوده و آن را device special file می نامند.
نوع فراخوانی های سیستم (system calls) نظیر write، read، close و open که در مورد فایل های عادی بکار برده می شود، به همان شکل برای special file ها نیز قابل استفاده هستند.
- فایل سیستم (file system) :
فایل سیستم ساختمانی برای ذخیره و بازیابی اطلاعات ارائه می دهد. هر فایل سیستم دیسک را به چهار منطقه تقسیم می کند:
a- boot block b- super block c- ilist d- data
a- boot block : اولین بلاک حافظه جانبی برای استفاده سیستم رزرو می شود که حاوی اطلاعات لازم جهت راه اندازی سیستم می باشد. این بلاک به نام boot block شناخته شده است.
b- super block : بلاک یک را super block می نامند. این بلاک شامل مجموعه اطلاعاتی است که وضعیت ایل سیستم را مشخص می کند. این اطلاعات عبارتند از :
- سایز فایل سیستم
- تعداد inode های موجود
- آدرس اولین بلاک حاوی اطلاعات
- تعداد کل بلاکهای موجود
- تعداد بلاکهای آزاد
تعداد inode های آزاد
زمان آخرین update فایل سیستم
Device های فایل سیستم
c- ilist : این ناحیه شامل یک لیست پیوندی از inode ها می باشد. inode ساختاری به طول ۶۴ بایت می باشد و شماره آن از ۱ آغاز می شود و حاوی اطلاعات زیر می باشد:
- شماره user فایل (uid)
- شماره گروه فایل (gid)
- آدرس فیزیکی محتوای فایل روی دیسک
- سایز فایل
- زمان ایجاد فایل
- نوع فایل
- زمان آخرین دستیابی به فایل
- زمان آخرین تغییر روی فایل
- protection های فایل (مجوزهای کاربر، گروه و دیگران)
- تعداد لینکهای فایل
Inode شماره ۱ برای سیستم رزرو شده است و inode شماره ۲ مربوط به فهرست ریشه می باشد.
d- Data : فضای آزاد باقی مانده روی دیسک بصورت یک link list از بلوکهای در دسترس دیسک نگهداری می شوند.
سیستم عامل unix حداقل یک فایل سیستم روی هارد دیسک اولیه دارد. این فایل سیستم root نام دارد و با علامت / مشخص می شود. فایل سیستم root شامل برنامه ها و دایرکتوری هایی است که توسط سیستم عامل ایجاد می شود. مسیرهای معمول در unix عبارتند از:
/ : نام دایرکتوری root است
/bin : شامل اکثر دستورالعمل های مورد استفاده می باشد
/dev : شامل فایلهای ویژه (special device file) می باشد
/dev/console : فایلهای مربوط به console
/dev/tty : اطلاعات مربوط به ترمینال های سیستم در آن نگهداری می شود