بخش اول : آشنايي با سيستم عامل 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) نوشته شد که ۳۰درصد از نسخه قبلي سريعتر است.
١٩۸۵ سيستم ۵٫۲ نوشته شد. (System 5 Relase 2)
۱۹۸۶ سيستم ۵٫۳ نوشته شد. (S5R3)
۱۹۸۷ سيستم ۵٫۴ نوشته شد. (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 شامل چهار بخش اصلي زير است:
۱)kernel 2)file system 3)shell 4)commands
۱- kernel :

که در قلب سيستم عامل قرار دارد و سخت افزار را کنترل مي کند. تمام سيستم عامل ها يک kernel دارند و بر اساس فرامين مختلف قسمتهايي از سيستم کامپيوتري را فعال يا غير فعال مي سازد. در سيستم عامل unix سعي بر اين بوده است که kernel وظايف کمتري را انجام دهد. بطوريکه اغلب وظايف سيستم عامل توسط برنامه هاي سودمند انجام مي شود. در سيستم عامل unix هر پروسس يک برنامه در حال اجرا مي باشد.

وظايف kernel عبارتند از:
a- زمانبندي پروسس ها
b- اختصاص حافظه اصلي
c- مديريت فضاي ديسک
d- نظارت بر انتقال داده ها مابين حافظه اصلي و دستگاههاي جانبي
e- اختيار دادن به تقاضاها مابين حافظه اصلي و دستگاههاي جانبي

پروسس ها دو حالت دارند:
– 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 متناظر و به يکي از دو شيوه زير انجام مي پذيرد:
۱- (structured I/O) Block device I/O system

براي دستگاههايي مانند ديسک سخت و فلاپي
۲- (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 : اطلاعات مربوط به ترمينال هاي سيستم در آن نگهداري مي شود
/temp : محلي براي نگهداري فايل هاي موقت
/etc : شامل برنامه هاي کاربردي مي باشد
/home : حاوي فهرست هاي مربوط به کاربران است
/mnt : براي mount کردن فايل سيستم ها به فهرست root مورد استفاده قرار مي گيرد
هارد ديسک اوليه مي تواند به بيش از يک فايل سيستم تقسيم شود. يکي از معمول ترين تقسيمات فايل سسيستم استفاده کننده ها از /u است که توسط آن حساب کاربران از فايل سيستم ريشه (/) اجرا مي شود.فايل سيستم هاي جديد مي تواند توسط مديريت سيستم ايجاد و هر گاه مورد نياز بود mount يا unmount شود.
نگهداري اطلاعات در فايل سيستم از وظايف سيستم عامل است. از دست دادن اطلاعات اتفاق نادري است زيرا فايل سيستم در برابر تخريب اطلاعات بسيار مقاوم است. سيستم عامل unix از برنامه (file system check) fsck براي تعمير فايل سيستم خراب شده استفاده مي کند.fsck در هنگام بوت، بطور اتوماتيک فايل سيستم root را چک مي کند و پيامهايي که مي فرستد بصورت زبر است:

Phase 1- check block and sizes
Phase 2- pathnames
Phase 3- connectivity
Phase 4- reference counts
Phase 5- check free list
هنگامي که سيستم بطور غير معمول terminate شده باشد، fsck براي تميز کردن فايل سيستم از مدير سئوال مي کند و در صورت تاييد او، فايل سيستم تميز مي گردد.

۳- shell :
بين سيستم عامل و استفاده کننده قرار مي گيرد و ارتباط دهنده اين دو مي باشد. وظيفه shell خواندن دستورات وارده و تفسير آن بعنوان درخواستي جهت اجراي برنامه، دسترسي به فايل ها يا ايجاد خروجي است.

Shell همچنين داراي زبان برنامه نويسي قدرتمندي با قابليت کنترل جريان اجراي برنامه ها (حتي بصورت شرطي) است. Shellهاي رايج در سيستم عامل unix عبارتند از: rshell، jshell، kshell، cshell و shell استاندارد
۴- commands :
دستورها (commands) اسامي برنامه هايي هستند که استفاده کننده تقاضاي اجراي آنها را از کامپيوتر مي نمايد. شکل کلي دستورات unix بصورت زير است:

Command [-options] [arguments] [file names]

مثال :
ls -rl /home
نکته : – اضافه کردن . به انتهاي نام فايل، آن را مخفي مي نمايد
– با اضافه کردن ; به انتهاي يک دستور مي توان چند دستور را در يک خط فرمان اجرا کرد.
مثال:
Data;who;ls

دريافت دستورها در Unix :
به منظور استفاده از امکانات سيستم، از يک shell استفاده مي شود. Shell در واقع يک برنامه است که دستورات ورودي کاربر را گرفته و آنها را اجرا مي نمايد. در سيستم MS-DOS اين کار توسط برنامه command.com انجام مي شود. از مهم ترين انواع shell در Unix
مي توان به BASH، CSH و TCSH و همچنين X Window که امکان استفاده تؤام ماوس و صفحه کليد را مي دهد نام برد.

شروع و پايان کاربرد :
يک کامپيوتر با سيستم Unix در يک مرکز کامپيوتر همواره روشن نگاه داشته مي شود و شروع استفاده هر کاربر از آن با وارد کردن نام و رمز عبور صورت مي گيرد. و هر کاربر براي
پايان دادن به کار خود تنها دستورات logout يا exit و يا Ctel+d را وارد کرده و فقط مانيتور را خاموش مي کند. از reset نمودن يا خاموش کردن يک کامپيوتر يونيکس، که مورد استفاده کاربران ديگري قرار مي گيرد اکيدا” پرهيز نمايد، زيرا در هر لحظه کاربران ديگري نيز از کامپيوتر يونيکسي که ظاهرا” تنها کاربر آن برروي کنسول، شما هستند، از راه دور در حال استفاده مي باشند و يا در پيش زمينه داراي برنامه هاي در حال اجرا هستند.

حساس به بزرگي و کوچکي حروف :
در يونيکس کليه دستورات تنها با حروف کوچک پذيرفته مي شوند و نام فايل ها و دايرکتوري ها دقيقا” بايد به همان صورت تعريف شده مورد استفاده قرار گيرند. به عبارت ديگر سيستم عامل يونيکس نسبت به حروف کوچک و بزرگ حساس است.

آرگومان ها و سوييچ هاي دستورات :
در سيستم يونيکس، آرماگون ها يا سوييچ هاي يک دستور نمي تواند بلافاصله بعد از آن قرار گيرد و يک فضاي خالي براي دستور و ديگر اجزا لازم مي باشد. به طور مثال در دستور cd.. بين دستور cd و .. نياز به يک فاصله خالي است. ضمن اين که در يونيکس سوييچ ها پس از کاراکتر «-» قرار مي گيرند. لازم به ذکر است که براي استفاده از چند سوييچ به همراه يک دستور
مي توان به جاي قراردادن «-» قبل از هر سوييچ يک بار آن را نوشته و هر تعداد سوييچ را در ادامه بياوريم.

قواعد نامگذاري فايل ها :
در يونيکس پسوند آنگونه که در MS-DOS تعريف مي شود معني ندارد و طول نام فايل و يا دايرکتوري مي تواند حداکثر تا ۲۵۵ کاراکتر باشد.

فرآيند پيش زمينه :
فرآيند پيش زمينه يا background process قابليتي در يونيکس است که اجازه مي دهد برنامه اي به اجراي خود حتي پس از خروج از کامپيوتر (logout) ادامه دهد.
سطوح دسترسي و علائم آن :
در سيستم يونيکس حداقل سه سطح دسترسي وجود دارد که عبارتند از :
۱- دسترسي صاحب فايل
۲- دسترسي گروه تعريف شده اي که صاحب فايل در آن گروه قرار دارد