PDA

View Full Version : در مورد multi tasking



saeed-niknami
یک شنبه 15 شهریور 1383, 21:04 عصر
چگونه می توانم برنامه هایم را مثل ویندوز کنم
که در هر لحظه چند پروسه را انجام دهد :?: :idea: :?: :?: :?:

Best Programmer
دوشنبه 16 شهریور 1383, 02:14 صبح
[b]
چگونه می توانم برنامه هایم را مثل ویندوز کنم
که در هر لحظه چند پروسه را انجام دهد

ما در اصل تا زمانی که CPU های تک یا CPU های single Core داریم چیزی به اسم Multi Thread معنی نداره. چون CPU یه صورت STEP by STEP کار میکنه و به قول معروف خط به خط پس در هر لحظه فقط میتونه یک Thread را کار کنه ولی این MultiThread پس چیه؟ خوب فرض کنیم CPU داره یک Thread رو کار میکنه همزمان یک Thread با Priority بالاتر بیاد مقادیر Register ,.....را در جدولی به اسم Context Table ذخیره میکنه میره سر Thread جدید و اونو کار میکنه و وقتی کارش تمام شد بر میگرده و مقادیر رو برمیگردونه و ادامه کار و میده. البته این سیستم کمی در MultiCPU یا Multi Core CPU ها فرق میکنه و هر Core یا CPU یک Thread جدا از هم را اجرا میکنند ولی شرط بالا بازم بر قراره. چون اگه یه کم تو Task Manager دقت کنی حدود 300 تا Thread به طور معمول هست .

خودت دیگه دیدی باید چی کار کنی. اگه سورس برخی بازی های قدیمی DOS ی گیر بیاری برات خیلی خوبه چون اونا مجبور شدند این سیستم و پیاده سازی کنند. یا سورس win3.1 رو که قراره بیاد.

seyedof
چهارشنبه 18 شهریور 1383, 23:40 عصر
سلام
خیلی هم مشکل نیست. توی دانشگاه های درست حسابی یکی از پروژه های درس سیستم عامل همین پیاده سازی Multi Tasking است. یک راهش اینه که شما از وقفه تایمر استفاده کنید بعد چهار تا تابع داشته باشید که اوون توابع یک حلقه بینهایت هستند. در کدی که برای وقفه تایمر مینویسید باید کلیه رجیسترها و فلگها و از جمله ip رو ذخیره کنید. هر بار که وقفه تایمر اجرا میشه مقادیر این رجیسترها رو سوییچ میکنه به یکی دیگر از توابع شما (Task) به اوون اطلاعاتی که ذخیره میکنید میگن PCB و کدی که برای وقفه تایمر هم مینویسید بهش میگن Coordinator. اینطوری هر چهار تابع شما اجرا میشن.
خیلی سخت نیست اما راحت هم نیست.

ممنون علی