Thread چیست ؟
مدیریت پردازنده
مدیریت پردازنده دو وظیفه مهم اولیه زیر را دارد :
• ایجاد اطمینان که هر پردازه یا برنامه به میزان مورد نیاز پردازنده را برای تحقق عملیات خود ، اختیار خواهد کرد.
• استفاده از بیشترین سیکل های پردازنده برای انجام عملیات
ساده ترین واحد نرم افزاری که سیستم عامل به منظور زمانبندی پردازنده با آن درگیر خواهد شد ، یک پردازه یا یک Thread خواهد بود. موقتا” می توان یک پردازه را مشابه یک برنامه در نظر گرفت ، در چنین حالتی مفهوم فوق ( پردازه ) ، بیانگر یک تصویر واقعی از نحوه پردازش های مرتبط با سیستم عامل و سخت افزار نخواهد بود. برنامه های کامپیوتری ( نظیر واژه پردازها ، بازیهای کامپیوتری و …) در حقیقت خود یک پردازه می باشند ، ولی برنامه های فوق ممکن است از خدمات چندین پردازه دیگر استفاده نمایند. مثلا” ممکن است یک برنامه از پردازه ای بمنظور برقراری ارتباط با سایر دستگاههای موجود در کامپیوتر استفاده نماید. پردازه های فراوان دیگری نیز وجود دارد که با توجه به ماهیت عملیات مربوطه ، بدون نیاز به محرک خارجی ( نظیر یک برنامه ) فعالیت های خود را انجام می دهند. یک پردازه ، نرم افزاری است که عملیات خاص و کنترل شده ای را انجام می دهد. کنترل یک پردازه ممکن است توسط کاربر ، سایر برنامه های کاربردی و یا سیستم عامل صورت پذیرد.
سیستم عامل با کنترل و زمانبندی مناسب پردازه ها زمینه استفاده از پردازنده را برای آنان ، فراهم می نماید. در سیستم های ” تک – کاره ” ، سیستم زمانبندی بسیار روشن و مشخص است . در چنین مواردی، سیستم عامل امکان اجرای برنامه را فراهم و صرفا” در زمانیکه کاربر اطلاعاتی را وارد یا سیستم با وقفه ای برخورد نماید ، روند اجراء متوقف خواهد شد. وقفه ، سیگنال های خاص ارسالی توسط نرم افزار و یا سخت افزار برای پردازنده می باشند. در چنین مواردی منابع صادر کننده وقفه درخواست برقراری یک ارتباط زنده با پردازنده برای اخذ سرویس یا سایر مسائل بوجود آمده ، را می نمایند. در برخی حالات سیستم عامل پردازه ها را با یک اولویت خاص زمانبندی می نماید . در چنین حالتی هر یک از پردازه ها با توجه به اولویت نسبت داده شده به آنان ، قادر به استفاده از زمان پردازنده خواهند بود. در این چنین موارد ، در صورت بروز وقفه ، پردازنده آنها را نادیده گرفته و تا زمان عدم تکمیل عملیات مورد نظر توسط پردازنده ، فرصت پرداختن به وقفه ها وجود نخواهد داشت . بدیهی است با توجه به نحوه برخورد پردازنده ( عدم توجه به وقفه ها ) ، در سریعترین زمان ممکن
عملیات و فعالیت جاری پردازنده به اتمام خواهد رسید. برخی از وقفه ها با توجه به اهمیت خود ( نظیر بروز اشکال در حافظه و یا سایر موارد مشابه ) ، قابل اغماص توسط پردازنده نبوده و می بایست صرفنظر از نوع و اهمیت فعالیت جاری ، سریعا” به وقفه ارسالی پاسخ مناسب را ارائه گردد.
پردازنده ، با توجه به سیاست های اعمال شده سیستم عامل و بر اساس یک الگوریتم خاص ، در اختیار پردازه های متفاوت قرار خواهد گرفت . در چنین مواردی پردازنده مشغول بوده و برای اجراء ، پردازه ای را در اختیار دارد. در زمانیکه پردازنده درگیر یک پردازه است ، ممکن است وقفه هائی از منابع متفاوت نرم افزاری یا سخت افزاری محقق گردد. در چنین وضعیتی با توجه به اهمیت و جایگاه یک وقفه ، پردازنده برخی از آنها را نادیده گرفته و همچنان به فعالیت جاری خود ادامه داده و در برخی موارد با توجه به اهمیت وقفه ، فعالیت جاری متوقف و سرویس دهی به وقفه آغاز خواهد شد.
در سیستم های عامل ” تک – کاره ” ، وجود وقفه ها و نحوه مدیریت آنها در روند اجرای پردازه ها تاثیر و پیچیدگی های خاص خود را از بعد مدیریتی بدنبال خواهد داشت . در سیستم های عامل “چند – کاره ” عملیات بمراتب پیچیده تر خواهد بود. در چنین مواردی می بایست این اعتقاد بوجود آید که چندین فعالیت بطور همزمان در حال انجام است . عملا” پردازنده در هر لحظه قادر به انجام یک فعالیت است و بدیهی است رسیدن به مرز اعتقادی فوق ( چندین فعالیت بطور همزمان ) مستلزم یک مدیریت قوی و طی مراحل پیچیده ای خواهد بود. در چنین حالتی لازم است که پردازنده در مدت زمان یک ثانیه هزاران مرتبه از یک پردازه به پردازه ه دیگر سوئیچ تا امکان استفاده چندین پردازه از پردازنده را فراهم نماید . در ادامه نحوه انجام عملیات فوق ، تشریح می گردد :
• یک پردازه بخشی از حافظه RAM را اشغال خواهد کرد
• پس از استفرار بیش از یک پردازه در حافظه ، پردازنده بر اساس یک زمانبندی خاص ، فرصت اجراء را به یکی از پردازه ها خواهد داد.
• پردازنده ، بر اساس تعداد سیکل های خاصی پردازه را اجراء خواهد کرد .
• پس ازاتمام تعداد سیکل های مربوطه ، پردازنده وضعیت پردازه ( مقایر رجیسترها و …) را ذخیره و به پردازه اتمام زمان مربوطه را اعلام می نماید.
• پردازنده در ادامه اطلاعات ذخیره شده در رابطه با پردازه دیگر را فعال ( رجیسترها و …) و زمینه اجرای پردازه دوم فراهم می گردد.
• پس ازاتمام تعداد سیکل های مربوطه ، پردازنده وضعیت پردازه ( مقایر رجیسترها و …) را ذخیره و به پردازه اتمام زمان مربوطه را اعلام و مجددا” پردازه اول جهت اجراء فعال خواهد گردید.
تمام اطلاعات مورد نیاز بمنظور مدیریت یک پردازه در ساختمان داده ای خاص با نام PCB)Process Control Block) ، نگهداری می گردد. پردازنده در زمان سوئیچ بین پردازه ها ، از آخرین وضعیت هر پردازه با استفاده از اطلاعات ذخیره شده در PCB آگاهی پیدا کرده و در ادامه زمینه اجرای پردازه مورد نظر بر اساس تعداد سیکل های در نظر گرفته شده فراهم خواهد شد. برای هر پردازه یک PCB ایجاد و اطلاعات زیر در آن ذخیره خواهد گردید :
• یک مشخصه عددی (ID) که نمایانگر پردازه خواهد بود .
• اشاره گری که نشان دهنده آخرین محل اجرای پردازه است
• محتویات رجیستر ها
• وضعیت سوئیچ ها و متغیرهای مربوطه
• اشاره گره هائی که حد بالا و پایین حافظه مورد نیاز پردازه را مشخص خواهد کرد.
• اولویت پردازه
• وضعیت دستگاههای ورودی و خروجی مورد نیاز پردازه
هر زمان که اطلاعات مربوط به پردازه ای تغییر یابد ، ( پردازه از حالت “آماده ” تبدیل به حالت “اجراء ” و یا از حالت ” اجراء ” به حالت “انتظار” و یا “آماده ” سوئیچ نماید ) اطلاعات ذخیره شده در PCB استفاده و بهنگام خواهند شد.
عملیات جایگزینی پردازها، بدون نظارت و ارتباط مستقیم کاربر انجام و هر پردازه به میزان کافی از زمان پردازنده برای اتمام عملیات خود استفاده خواهد کرد. در این راستا ممکن است ، کاربری قصد اجرای تعداد بسیار زیادی از پردازه ها را بسورت همزمان داشته باشد. در چنین مواردی است ، پردازنده خود نیازمند استفاده از چندین سیکل زمانی برای ذخیره و بازیابی اطلاعات مربوط به هر یک از پردازه ها خواهد بود .در صورتیکه سیستم عامل با دقت طراحی نشده باشد یا پردازه های زیادی فعالیت خود را آغاز کرده باشند ، مدت زمان زیادی از پردازنده صرف انجام عملیات سوئیچینگ بین پردازها شده و عملا” در روند اجرای پردازها اختلال ایجاد می گردد. وضعیت بوجود آمده فوق را Thrashing می گویند. در چنین مواردی کاربر می بایست نسبت به غیرفعال نمودن برخی از پردازه ها اقدام تا سیستم مجددا” در وضعیت طبیعی قرار گیرد.
یکی از روش هائی که طراحان سیستم عامل از آن استفاده تا امکان ( شانس) تحقق Thrashing را کاهش دهند ، کاهش نیاز به پردازه های جدید برای انجام فعالیت های متفاوت است . برخی از سیستم های عامل ازیک ” پردازه -lite ” با نام Thread استفاده می نمایند. Thread از لحاظ کارآئی همانند یک پردازه معمولی رفتار نموده ولی نیازمند عملیات متفاوت ورودی و خروجی یا ایجاد ساختمان داده PCB مشابه یک پردازه عادی نخواهد بود. یک پردازه ممکن است باعث اجرای چندین Threads یا سایر پردازه های دیگر گردد. یک Thread نمی تواند باعث اجرای یک پردازه گردد.
تمام موارد اشاره شده در رابطه با زمانبندی با فرض وجود یک پردازنده مطرح گردیده است . در سیستم هائی که دارای دو یا بیش از دو پردازنده می باشند ، سیستم عامل حجم عملیات مربوط به هر پردازنده را تنظیم و مناسب ترین روش اجراء برای یک پردازه در نظر گرفته می شود . سیستم های عامل نامتقارن ، از یک پردازنده برای انجام عملیات مربوط به سیستم عامل استفاده و پردازه های مربوط به برنامه های کاربردی را بین سایر پردازه ها تقسیم می نمایند. سیستم های عامل متقارن ، عملیات مربوط به خود و عملیات مربوط به سایر پردازه ها را بین پردازه های موجود تقسیم می نمایند. در این راستا سعی می گردد که توزیع عملیات برای هر یک از پردازه ها بصورت متعادل انجام گردد.
Threads, SMP, and Microkernels
وقتی کامپیوترتان را روشن میکنید، برنامهای به نام ( POST(Power-On Self Test از روی ROM اجرا میشود. این برنامه کوچک، تمام قطعات کامپیوتر را چک میکند. ابتدا پردازشگر و بعد RAM و BIOS [چطور حافظه کامپیوتر کار میکند؟]. سپس برنامه دیگری از ROM اجرا میشود که هارد دیسک شما را فعال میسازد و به دنبال اولین قسمت سیستم عامل یعنی BootstrapLoader میگردد. Bootstrap سیستم عامل را به ترتیب اجرا میکند تا جایی که کنترل کامپیوتر را به آن میسپارد.
پیش از این گفتیم که مدیریت و هدایت پردازشهای کامپیوتر توسط سیستم عامل انجام میشود. مدیریت پردازش شامل تقسیم بندی و اولویت دهی به پردازشها است. نرم افزاری که سیستم عامل برای اینکار از آن استفاده میکند به نام Process یا Thread معروف است.
Process
مالکیت منابع – برای نگهداری تصویر فرآیند به فرآیند یک فضای مجازی اختصاص داده شده است.
زمانبندی و اجرا – فرآیند از یک مسیر اجرایی که ممکن است با فرآیندهای دیگر تداخل داشته باشد پیروی می کند.
سیستم عامل این دو خصیصه را بطور مستقل اعمال می نماید.
Multithreading
سیستم عامل می تواند از چندین نخ اجرا در داخل یک فرآیند پشتیبانی کند.
MS-DOS از یک نخ پشتیبانی می کند.
UNIX از چندین کاربر پشتیبانی می کند اما هر فرآیند می تواند یک نخ داشته باشد.
سیستم عاملهای Windows 2000, Solaris, Linux, Mach, و OS/2 از چند نخی پشتیبانی می کنند.
Process
فرآیند یک فضای آدرس مجازی دارد که تصویر فرآیند را نگهداری می کند.
فرآیند به پردازنده، فرآیندهای دیگر، فایلها و منابع I/O بصورت محافظت شده دسترسی دارد.
Thread
نخ یک حالت اجرا است. (در حال اجرا، آماده و …)
متن نخ وقتی که نخ اجرا نمی شود، ذخیره می شود.
نخ دارای پشته اجرا است.
نخ می تواند متغییرهای محلی برنامه خود را ذخیره کند.
نخ به حافظه و منابع فرآیند خود دسترسی دارد.
Benefits of Threads
ایجاد یک نخ نسبت به ایجاد یک فرآیند به زمان کمتری نیاز دارد.
خاتمه دادن آن هم سریعتر است.
سوییچ کردن بین نخهای یک فرآیند سریعتر است. (نسبت به حالتی که به جای چند نخ چند فرآیند داشته باشیم)
چون تمام نخهای یک فرآیند، فضای آدرس و فایلهای آن فرآیند را به اشتراک می برند، می توانند بدون دخالت سیستم عامل با هم ارتباط داسته باشند.
Uses of Threads in a Single-User Multiprocessing System
کارهای پس زمینه و پیش زمینه
محاسبات آسنکرون
اجرای سریع
ساختار برنامه ماژولار
Threads
اگر فرآیند معلق شود، تمام نخهای آن معلق می شوند چون فضای آدرس نخها مشترک است.
اگر فرآیند خاتمه پیدا کند، تمام نخهای آن نیز باید تمام شوند.
Thread States
حالتهای نخ:
اجرا
زایش
می تواند یک نخ جدید ایجاد کند.
مسدود
غیر مسدود
خاتمه
Remote Procedure Call Using Threads
User-Level Threads
مدیریت نخها بر عهده کاربرد ( کاربر) است.
هسته از وجود نخها آگاه نیست.
Kernel-Level Threads
W2K, Linux و OS/2از نخهای سطح هسته پشتیبانی می کنند.
هسته متن فرآیند و نخهای آن را نگهداری می کند.
زمانبندی بر حسب نخها انجام می گردد.
Combined Approaches
Solaris از هر دو نوع نخ پشتیبانی می کند.
ایجاد نخ در فضای کاربر انجام می شود.
قسمت عمده زمانبندی و همزمان سازی نخها در فضای کاربر انجام می شود.
Categories of Computer Systems
Single Instruction Single Data (SISD)
یک پردازنده جریانی از دستورالعملها را روی داده هایی که در یک حافظه ذخیره شده اند اعمال می کند.
Single Instruction Multiple Data (SIMD)
هر دستورالعمل می تواند توسط پردازنده های متفاوت روی داده های مختلف اعمال شود.
Categories of Computer Systems
Multiple Instruction Single Data (MISD)
یک دنباله از داده داریم که به مجموعه ای از پردازنده ها داده می شود تا دستورات متفاوتی را روی آن اجرا کنند. (هرگز پیاده نشده است).
Multiple Instruction Multiple Data (MIMD)
مجموعه ای از پردازنده ها بصورت همزمان روی داده های متفاوت ، دستورالعملهای مختلفی را اجرا می کنند.
Symmetric Multiprocessing
هسته می تواند روی هر کدام از پردازنده ها اجرا شود.
زمانبندی هر پردازنده بصورت جدا انجام می شود.
Multiprocessor Operating System Design Considerations
وجود نخها و فرآیندهای همزمان
زمانبندی
همزمان سازی
مدیریت حافظه
قابلیت اعتماد و تحمل خطا
Microkernels
هسته سیستم عامل خیلی کوچک است.
فقط شامل توابع اساسی سیستم عامل است.
تعدادی از خدماتی که قبلا به طور طبیعی جزء سیستم عامل محسوب می شدند، امروزه به صورت زیر سیستمهای خارجی ارائه می شوند.
درایورهای (راه انداز) ابزارها
ساختار فایل
مدیر حافظه مجازی
سیستم پنجره بندی
خدمات امنیتی
Benefits of a Microkernel Organization
واسط یکسان برای درخواستهای فرآیند
همه خدمات از طریق مبادله پیغام ارائه شده اند.
قابلیت توسعه
اضافه کردن خدمات جدید آسان است و نیازی به تغییر ریزهسته ندارد.
قابلیت تغییر
افزودن قابلیتهای جدید
حذف قابلیتهای فعلی
Benefits of a Microkernel Organization
قابلیت حمل
وقتی که پردازنده تغییر کند، تغییرات لازم فقط در ریزهسته داده می شود و نیازی به تغییر باقی خدمات نیست.
قابلیت اعتماد
طراحی ماژولار
چون ریزهسته کوچکتر است با دقت بیشتر و بطور سختگیرانه ای تست شده است
enefits of Microkernel Organization
حمایت از سیستم توزیع شده
در پیغامهایی که فرستاده می شود نیازی به دانستن محل و نوع ماشین هدف نیست.
سیستم عامل شئ گرا
اجزاء سیستم عامل اشیائی هستند که واسط آنها بطور واضح تعریف شده اند.
Microkernel Design
Low-level memory management
mapping each virtual page to a physical page frame
Inter-process communication
I/O and interrupt management