سیستم عامل چیست؟
سیستم عامل قسمت مهم هر سیستم کامپیوتری است یک سیستم کامپیوتری بصورت کلان می تواند به چهار جزء تقسیم شود: سخت افزار، سیستم عامل، برنامه های کاربردی و کاربرها.
سخت افزار که شامل واحد پردازش مرکزی (CPU)، حافظه، دستگاه های ورودی و خروجی (I/O) می باشد. منابع اصلی محاسبات را تشکیل می دهد. برنامه های کاربردی مانند کمپایلرها، سیستم های بانک اطلاعاتی، بازی ها، و برنامه های تجاری روش هایی را که این منابع برای حل مسائل محاسباتی کاربران بکار می برند تعریف می کنند.
ممکن است کاربران مختلفی (افراد، ماشین ها، کامپیوترهای دیگر) در جهت حل مسائل مختلفی کوشش کنند. همچنین، ممکن است برنامه های کاربردی مختلفی وجود داشته باشد. سیستم عامل استفاده از سخت افزار را بین کاربران مختلف برای برنامه های کاربردی کنترل و هماهنگ می کند.
سیستم عامل مانند یک حکومت است. اجزاء یک سیستم کامپیوتری شامل سخت افزار، نرم افزار و داده های آن می باشد. سیستم عامل امکانات برای استفاده مناسب این منابع را در عملیات سیستم کامپیوتری فراهم می کند. مانند یک حکومت، سیستم عامل به خودی خودکار مفیدی انجام نمی دهد. ولی بطور ساده محیطی فراهم می کند که در آن برنامه ها بتوانند کار مفید انجام دهند.
می توانیم به سیستم عامل بعنوان تخصیص دهنده منابع نگاه کنیم. یک سیستم کامپیوتری منابع زیادی دارد (سخت افزار و نرم افزار) که ممکن است برای یک مسئله لازم باشد: مانند زمان CPU، فضای حافظه، فضای ذخیره فایل دستگاه های I/O و غیره. سیستم عامل مانند مدیران منابع عمل می کند و هنگام لزوم آن ها را به برنامه های مشخص و کاربران تخصیص می دهد. بعلت آنکه ممکن است تقاضای زیادی که احتمال متناقض بودنشان برای منابع وجود داشته باشد بشود. سیستم عامل باید تصمیم بگیرد. منابع را به کدام تقاضا تخصیص دهد تا سیستم کامپیوتر موثر و عادلانه عمل کند. یک نظر تفاوت دیگر از سیستم عامل روی لزوم کنترل دستگاه ها و برنامه های متعدد تمرکز می کند. هر سیستم عامل یک برنامه کنترل کننده می باشد. برنامه کنترل اجرای برنامه های کاربر را نظارت می کند تا از اشتباه ها و استفاده نادرست کامپیوتر جلوگیری کند. مخصوصاً نسبت به عملیات دستگاه های I/O و کنترل آنها دخالت دارد.
گرچه کلا یک تعریف کامل و مناسب برای سیستم عامل وجود ندارد، سیستم عامل ها وجود دارند زیرا آنها روش منطقی حل مسائل برای ایجاد سیستم کامپیوتری مفید هستند. هدف اصلی سیستم های کامپیوتری اجرای برنامه های کاربر و راحت تر کردن حل مسائل او می باشد. در راستای هدف،سخت افزار کامپیوتر ساخته شده است. بعلت آنکه استفاه مستقیم از سخت افزار کار آسانی نیست. برنامه های کاربر بوجود آمده است. این برنامه های متعدد به اعمال همگانی مشخص مانند کنترل دستگاه های I/O نیاز دارند. کارهای عمومی کنترل و تخصیص منابع در یک نرم افزار جمع شده اند که سیستم عامل می باشد.
ویندوز NT
سیستم عامل ویندوز NT مایکروسافت، سیستم عاملی 32 بیتی برای مایکروپروسسورهای جدید می باشد. NT قابل حمل روی انواع مختلف معماری های پردازنده ها می باشد. یک یا چند نسخه NT روی اینتل 386 یا بالاتر روی POWER PC, DEC ALPHA, MIPS R4000 پیاده سازی شده است. هدف های کلیدی این سیستم عبارتند از: قابلیت حمل و امنیت. واسطه قابل حمل به نام POSIX با همگامی با IEEE Std 1003 حمایت چند پردازنده ای قابلیت گسترش حمایت بین المللی و سازگاری با برنامه های کاربردی MS-DOS و NT.MS-WINDOWS معماری میکروهسته ای مانند کامپیوترهای مکینتاش می باشد، بطوری که می توان یک قسمت سیستم عامل را بهینه سازی نمود بدون آنکه قسمت دیگر را شدیدا تحت تاثیر قرار دهد. NT (نسخه 4) یک سیستم چند کاربره نیست.
دو نسخه NT، یکی NT ایستگاه کاری و دیگری NT سرویس دهنده است. آنها از یک هسته و یک کد سیستم عامل استفاده می کنند، اما NT سرویس دهنده برای کاربردهای سرویس دهنده و مشتری پیکربندی شده است و می تواند به عنوان سرویس دهنده روی NetWARE و LANها استفاده شود. نسخه چهار سرویس دهنده NT از تعداد مجوزهای فروخته شده UNIX بیشتر بوده است.
تاریخچه:
در اواسط دهه 1980 شرکت مایکروسافت و آی – بی – ام همکاری مشترک برای سیستم عامل OS/2 را شروع کردند که به زبان اسمبلی برای پردازنده اینتل 286 نوشته بود. در 1988 شرکت مایکروسافت تصمیم به شروع یک تکنولوژی جدید به نام NT نمود که خاصیت قابل حمل بودن را داشته باشد و در عین حال هم سیستم عامل OS/2 و واسطه های POSIX API کاربردی قابل حمل را حمایت کند. در اکتبر 1988، آقای دیوکالتر، معمار سیستم عامل VAX/CMS شرکت دیجیتال استخدام شد و به او ماموریت ایجاد سیستم عامل جدید داده شد. اوایل فرض بر این بود که NT از OS/2 API به عنوان محیط اولیه استفاده کند، لیکن در خلال تولید، سیستم NT تغییر کرد تا از امکانات 32 بیتی ویندوز API یا API WIN32 استفاده کند که منعکس کننده محبوبیت ویندوز 1 . 3 باشد. نسخه های NT ویندوز 1 .3 و ویندوز NT 1 .3 سرور پیشرفته بود (در آن زمان ویندوز 16 بیتی نسخه 1 . 3 بود) در نسخه NT4.0 واسطه کاربرد ویندوز 95 را اختیار کرد و اینترنت وب سرور و نرم افزار بروزر را نیز در سیستم ادغام کرد. بعلاوه بعضی از روال های ارتباطی و کد های گرافیکی به هسته مرکزی KERNEL برای بهبود سیستم انتقال داده شد با توجه به اینکه امکان قابلیت اطمینان سیستم کاهش خواهد یافت.
اصول طراحی
هدف هایی که مایکروسافت برای NT اعلام کرد در برگیرنده قابلیت گسترش، قابلیت حمل، قابلیت اطمینان، سازگاری، کارآیی و پشتیبانی بین المللی بود.
قابلیت گسترش خاصیت مهمی برای هر سیستم عاملی است که خواهان همگانی با پیشرفت های تکنولوژی کامپیوتر می باشد بطوری که تغییرات در طول زمان امکان پذیر باشد، NT با استفاده از خاصیت لایه ای تکمیل شده است. مدیریت عالی اجرایی NT که در هسته اجرا می شود حالت حفاظت شده دارد که سرویس های اصلی سیستم را دربرمی گیرد. در بالای مدیریت اجرایی،چندین زیر سیستم سرویس دهنده در حالت کاربر کار می کند در بین آنها زیر سیستم های محیطی هستند که سیستم عامل های مختلفی را مدل سازی می کنند بنابراین برنامه های نوشته شده برای MS-DOS ، ویندوز مایکروسافت و پوزیکس همه می توانند تحت NT در محیط خودشان کار کنند. قسمت 4 . 23 را برای اطلاع بیشتر روی سیستم های محیطی مطالعه کنید. به علت ساختار قطعه ای زیر سیستم های بیشتری را می توان بدون تاثیر گذاشتن روی مدیریت عالی اجرایی به آن اضافه نمود. علاوه بر این از گرداننده های قابل بارگذاری در سیستم i/o استفاده می کننده به طوری که سیستم های فایل جدید و انواع دستگاه های I/O را می توان بدون گذاشتن روی مدیریت عالی اجرایی به آن اضافه نمود. علاوه بر این از گرداننده های قابل بارگذاری در سیستم I/O استفاده می کنند به طوری که سیستم های فایل جدید و انواع دستگاه های I/O را می توان اضافه نمود در حالی که سیستم در حال اجرا می باشد. NT یک مدل شبیه سیستم عامل مکینتاش و پردازش توزیع شده را از طریق فراخوانی راه دور (RPC) به طریقی که در مبانی سیستم های باز تعریف شده است حمایت می کند.
یک سیستم قابل حمل می باشد اگر بتوان آن را از یک معماری سخت افزاری به معماری دیگر با تغییرات جزئی انتقال داد. NT بصورت قابل حمل طراحی شده است. همانطوری که در مورد UNIX صادق است،قسمت عمده سیستم به زبان C و C++ نوشته شده است. تمام کدهای وابسته به پردازشگر در کتابخانه پیوند دینامیک DLL به نام لایه مجزای سخت افزار HAL قرار دارد. یک DLL فایلی است که در فضای آدرس پردازش قرار می گیرد به طوری که هر کاری در DLL مانند آن است که قسمتی از پردازش می باشد. لایه های بالایی NT وابسته به HAL می باشد و نه به سخت افزار و این به NT کمک می کند که قابل حمل باشد. HAL مستقیما سخت افزار را بکار می گیرد. بدین ترتیب مابقی NT را از تفاوت های سخت افزاری که در سکوهای مختلفی اجرا می شود جدا می سازد. قابلیت اطمینان به معنای قدرت مقابله با شرایط خطا می باشد که دربرگیرنده قدرت سیستم برای حفاظت خود و استفاده کنندگانش در مقابل نرم افزارهای مخرب یا کینه توز می باشد. NT برای مقابله با خرابی ها و حمله ها با استفاده از سخت افزار برای حافظه مجازی و مکانیزم های NT نرم افزاری برای حفاظت منابع سیستم عامل طراحی شده است. همچنین NT با یک سیستم قابل به نام سیستم می کند. NT نسخه 3015 دارای درجه امنیت C-2 از آمریکا می باشد که مبین سطح متوسط حفاظت در مقابل نرم افزارهای مخرب و حمله های کینه توزانه می باشد.
NT دارای سازگاری با کاربردهایی که استاندارد IEEE 1003.1 POSIX را رعایت می کند می باشد. بنابراین این برنامه ها می توانند کامپایل شوند و روی NT بدون تغییر کد اجرا گردند.
علاوه بر این NT برنامه های اجرایی اغلب برنامه هایی که برای X- 86 روی MS-DOS ویندوز 16 بیتی و OS/2 و LAN MANAGER ویندوز 32 بیتی کمپایل شده اند را می تواند اجرا کند. این کار را توسط دو مکانیزم انجام می دهد. اول نسخه های NT برای پردازنده های غیر INTEL دستورات X-86 را بصورت نرم افزاری پیاده سازی می کند. دوم درخواست های سیستمی برای MS-DOS ویندوز 32 بیتی و دیگران را به وسیله زیر سیستم های محیطی که قبلا اشاره شد انجام می دهد. این زیر سیستم های محیطی انواع مختلف سیستم های فایل را حمایت می کنند از جمله سیستم فایل FAT در MS-DOS و سیستم عامل OS HPFS سیستم فایل ISO 9660 و NTFS گرچه سازگاری در سطح باینری کامل نیست. مثلا در برنامه ها می توانند مستقیما به درگاه های سخت افزاری دستیابی پیدا کنند. برای امنیت و قابل اطمینان بودن NT از این کار جلوگیری می کند.
NT برای بازدهی خوب طراحی شده است. زیر سیستم هائی که NT را شامل می شوند و می توانند با یکدیگر به طور موثر از طریق یک روال درخواست محلی ارتباط برقرار کنند که دارای بازدهی ارسال پیغام سریع می باشد. به غیر از هسته مرکزی بندها در زیر سیستم های NT می توانند توسط بندهای با الویت بالاتر تخلیه شوند. بنابراین سیستم می تواند در برابر واقعه های خارجی عکس العمل سریع داشته باشد. علاوه بر این NT برای چند پردازنده متقارن طراحی شده است. در کامپیوتر چند پردازنده ای چندین بند همزمان می توانند در حال اجرا باشند. در مقیاس حاضر NT در مقایسه با UNIX محدود است. تا سال 1977 NT تا هشت CPU را پشتیبانی می کرد، در حالی که سولاریس تا 64 پردازنده را حمایت می کرد.
NT همچنین برای استفاده بین المللی طراحی شده است. موقعیت های جغرافیایی مختلف را از طریق پشتیبانی زبان ملی NLS API مهیا می کند. API روال های مخصوص برای فرم های تاریخ،زمان و پول طبق آداب ملیت ها ارائه می دهد. مقایسه های رشته ای برای سری گروه های مختلف دسته های حروف نیز وجود دارد. UNICODE سری حروف اصلی NT می باشد، گرچه NT سری حروف ASCII را با تبدیل آنها به UNICODE قبل از بکارگیری آنها حمایت می کند (تبدیل 8 بیت به 16 بیت)
اجزاء سیستم
معماری NT طرح لایه ای است که شامل اجزاء سیستم می باشد. شکل 1 .23 معماری NT نسخه 4 را نشان می دهد. مهمترین لایه ها عبارتند از لایه مجرد سخت افزار، هسته و مدیریت عالی که در حالت حفاظت شده اجرا می شوند و تعداد زیادی زیر سیستم که در حالت کاربر اجرا می شوند.
زیر سیستم ها دو گروه هستند. زیر سیستم های محیطی که سیستم عامل های مختلف را شبیه سازی می کنند و زیرسیستم های حفاظتی که فراهم کننده اعمال امنیتی هستند. یکی از مزایای عمده این نوع معماری آن است که ارتباط بین اجزاء را می توان ساده نگهداشت. باقیمانده فصل این لایه و زیر سیستم های را شرح دهد.
1 .3 . 23 لایه مجرد سخت افزار HARDWARE ABSTRACTION LAYER
HAL یا لایه مجرد سخت افزار لایه نرم افزاری است که اختلافات سخت افزاری را از لایه های بالاتر سیستم عامل پنهان می کند تا NT را قابل حمل نماید. HAL یک واسطه ماشین مجازی صادر می کند که مورد استفاده هسته،مدیریت عالی و گردانندگان دستگاه ها قرار می گیرد. مزیت این روش آن است که فقط یک نسخه از هر گرداننده دستگاه لازم است،این نسخه می تواند روی تمامی سکوهای سخت افزاریی بدون انتقال کد گرداننده اجرا گردد. HAL همچنین چند پردازنده ای متقارن را پشتیبانی می کند. به علت ملاحظات کارآیی، گردانندگان I/O (و گردانندگان گرافیکی در NT4.0) به طور مستقیم به دستگاه ها دسترسی دارند.
2. 3. 23 هسته KERNEL
هسته NT تعبیه کننده زیربنا برای مدیریت عالی وزیر سیستم ها می باشد. هسته هیچگاه از حافظه روی دیسک خارج کپی نمی شود و اجرای آن هیچگاه تخلیه نمی شود و چهار مسئولیت به عهده دارد: زمان بندی بندها، انجام وقفه ها و حالت های استثنا، همزمانی سطح پایین پردازنده و بازسازی پس از قطع برق.
هسته به صورت شیئی گرا طراحی شده است. نوع شیئی در NT در یک نوع داده تعریف شده سیستم است که دارای تعدادی خواص است (مقادیر داده) و تعدادی روش (مثلا وظایف یا عملیات). یک شیئی تنها یک مورد از یک نوع شیئی بخصوص می باشد. هسته کارش را با استفاده از تعدادی اشیاء هسته که صفات آنها اطلاعات هسته را نگهداری می کنند و روش های آنها فعالیت های هسته را اجرا می کنند انجام می دهد.
هسته دو گروه شیئی بکار می برد. اولین گروه اشیائ اعزام کننده هستند. اینها کنترل کننده اعزام ها و همزمانی ها در سیستم هستند. مثال هایی از این نوع شی ء ها عبارتند از وقعه ها،متغیرهای کنترل کننده و حالت های تواما مستثنی متغیرهای ملون و راهنماها بندها و زمان گیر ها. شی ء واقعه برای ثبت یک رخداد و هماهنگی آن با یک عمل بکار می رود. متغیر متلون با در نظر گرفتن مسئله مالکیت برای حالت حفاظت شده (حالت هسته) و حالت کاربر استفاده می شود. شی ء تواما مستثنی که فقط در حالت هسته موجود است برای منابع تواما مستثنی جهت اجرای بدون بن بست بکار می رود. راهنماها به عنوان کنتور یا دروازه برای کنترل تعداد دفعاتی که بندها به یک منبع دستیابی پیدا می کنند. استفاده می شود. شی بند موجودیتی است که توسط هسته اجرا می شود و در رابطه با یک شی پردازش است. شی های زمان برای نگهداری مدت و علامت دادن برای وقت تمام هنگامی که عملیات طولانی می شود و نیاز به توقف دارد به کار می روند.
سری دوم شیء های هسته شامل اشیاء کنترل می باشد. این اشیاء عبارتند از روال های فراخوانی سیستم غیر همزمان وقفه ها، اعلان وضعیت برق، پردازش و اشیاء مقطعی. روال فراخوانی غیر همزمان برای وارد شدن به یک بند در حال اجرا و درخواست یک روال می باشد. شیء وقفه برای اتصال یک برنامه سرویس وقفه با منبع وقفه می باشد. شی اطلاع دهنده برق برای فراخوانی یک روال اتوماتیک پس از قطع برق می باشد و شیء وضعیت برق برای چک کردن اینکه برق قطع شده است یا نه. شیء پردازش برای فضای آدرس مجازی و اطلاعات کنترلی لازم برای اجرای یک سری بندهای در ارتباط با یک پردازش می باشد. نهایتاً شی مقطعی برای محاسبه زمان استفاده شده برای یک بلاک کد می باشد.
همانطور که بیشتر سیستم عامل های جدید رفتار می کنند، NT متصور پردازش ها و بندها برای کدهای قابل اجراء می باشد. پردازش یک فضای آدرس مجازی و اطلاعاتی مانند اولویت اولیه و اتصال به یک یا چند پردازنده را دارد. هر پردازش دارای یک یا چند بند می باشد که واحدهای پردازش اعزامی توسط هسته می باشند. هر بند حالت خود را دارد، مانند اولویت، تعلق به پردازنده و اطلاعات حسابداری.
شش حالت بند عبارتند از حاضر، ذخیره، اجرا، انتظار، انتقال و خاتمه یافته. حاضر به معنای در انتظار برای اجرا می باشد. بند حاضر دارای بالاترین الویت به حالت ذخیره انتقال داده می شود که بدین معنی است که این بند بعدی است که باید اجرا شود. در سیستم چند پردازنده ای یک بند هر پردازه به حالت ذخیره نگهداری می شود. یک بند در حال اجرا است هنگامی که در روی یک پردازنده در حال انجام است. بند به اجرا ادامه خواهد داد تا زمانی که توسط یک بند با اولویت بالاتر تخلیه گردد و یا تا هنگامی که خاتمه یابد و یا فرجه زمانی آن تمام شود و یا یک درخواست سیستم مانند تقاضای I/O بنماید. بند در حال انتظار است هنگامی که منتظر یک علامت مانند اتمام I/O باشد یک بند جدید در حال انتقال است هنگامی که منتظر منابع برای اجراست. یک بند در حال اختتام است هنگامی که اجرای آن تمام می شود.
اعزام کننده یک طرح اولویت 32 سطحی برای ترتیب اجرای بند بکار می برد. اولویتها به دو دسته تقسیم می شوند: کلاس زمان واقعی که از 16 تا 31 می باشد و کلاس متغیر که اولویت 0 تا 15 دارد. اعزام کننده برای هر اولویت زمانبدی یک صف استفاه می کند و صف ها را از اولویت بالا به پایین پیمایش می کند تا زمانی که یک بند پیدا کند که آماده اجرا است. اگر یک بند اتصال به یک پردازنده دارد و پردازنده آماده نباشد اعزام کننده از آن گذر می کند و برای پیدا کردن یک بند که آماده اجراست تفحص می کند. اگر هیچ بندی آماده اجرا نیست، اعزام کننده یک بند مخصوص به نام بند بیکار را اجرا می کند.
هنگامی که فرجه زمانی بند تمام می شود، بند متوقف می شود و اگر بند در کلاس اولویت متغیر باشد اولویتش پایین آورده می شود. گرچه اولویت هیچگاه از اولویت پایه کمتر نمی شود. پایین آوردن اولویت بند باعث محدود شدن مصرف PU بندهای CPU غالب می شود. هنگامی که یک بند با اولویت متغیر از حالت انتظار رها می شود، اعزام کننده اولویتش را اضافه میکند. مقدار اضافه شدن اولویت بستگی به آن دارد که برای چه منتظر بوده است. یک بند که برای I/O صفحه کلید منتظر می باشد اضافه اولویت زیادی خواهد داشت در حالیکه یک بند منتظر عملیات دیسک اضافه متعادلی خواهد داشت. این خط مشی منجر به داشتن زمان جوابگویی خوبی برای استفاده از ماوس ویندوز خواهد شد و بندهای I/O غالب را به مشغول نمودن دستگاه های I/O وامیدارد. همچنین اجازه می دهد بندهای CPU غالب از اضافه سیکلهای CPU بلا استفاده استفاده کنند. این خط مشی در چندین سیستم عامل اشتراک زمانی از جمله UNIX استفاده شده است. به علاوه پنجره حاضر که کاربر با آن در حال تبادل می باشد یک اضافه اولویت بدست می آورد که زمان پاسخ خود را بهبود بخشد.