Thread چیست ؟ - نسخه قابل چاپ +- Parsi Coders (http://parsicoders.com) +-- انجمن: Software Development Programming (http://parsicoders.com/forumdisplay.php?fid=37) +--- انجمن: Other (http://parsicoders.com/forumdisplay.php?fid=85) +--- موضوع: Thread چیست ؟ (/showthread.php?tid=1897) |
Thread چیست ؟ - Amin_Mansouri - 03-08-2012 Threadیا در اصطلاح "نخ" پراسس ها کوچکی هستند که هر کدام تنها یک هدف رو انجام می دن و در نهایت پس از پایان یافتن اجرای مجموعه thread ها یک برنامه یا یک پراسس اصلی پایان پیدا می کنه. از thread برای انجام کارهای موازی همزمان استفاده میشه. اکثر برنامه هایی که ما می نویسیم فقط یک 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 قابلیت حمل وقتی که پردازنده تغییر کند، تغییرات لازم فقط در ریزهسته داده می شود و نیازی به تغییر باقی خدمات نیست. قابلیت اعتماد طراحی ماژولار چون ریزهسته کوچکتر است با دقت بیشتر و بطور سختگیرانه ای تست شده است Benefits 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 منبع : http://ghavamzadeh.blogfa.com/post-13.aspx |