PDA

View Full Version : گفتگو: زمانبندی



yassersajjadi
یک شنبه 09 شهریور 1393, 19:01 عصر
من دارم رو سیستم زمان بندی کار میکنم
واسه هر فرایندی که در میخواد بره به حالت اجرا یک کونتم تعریف کردم

quantum = waste * ln(c * waste)
که سی واسه هر هسته یک عدد ثابته و waste هم مقدار زمان تعویض فرایند قبلی تا این فراینده ، اگه میخواینبدونین فرمول هم چطوری بدست اوردم ، ما واسه اینکه کم ترین اتلاف رو در زمان سی پی یو داشته باشیم باید زمان تعویض فرایند یا صفحات به مجموع زمان انجام فرایند یا همون کوانتم و زمان تعویض صفحات حد اقل بشه یعنی

d(waste/(waste+quantum))=0
که d همون دیفرانسیل تابع هست
با حل این به همون فرمول بالا میرسیم که سی یک عدد ثابته و من مقدارشو برابر مقدار فرکانس سی پی یو در عرض باس که برابر تعداد بیت های جابه جا شده در هر ثانیه هستو گرفتم که معمولا مقدار کوانتم عددی بین ۲۰ و ۷۰ در میاد، این باعث میشه از انتظار کاربرانی که تو صف هستن جلوگیری بشه

حالا سوال من اینه چطوری وقتی که سی پی یو در حال انجام یک فراینده بعد از اتمام کوانتم فرایندو سویچ کنم روی یک فرایند دیگه ، از وقفه استفاده کنم ؟! راه حل بهتری از وقفه ها نیست

pswin.pooya
یک شنبه 09 شهریور 1393, 23:07 عصر
حالا سوال من اینه چطوری وقتی که سی پی یو در حال انجام یک فراینده بعد از اتمام کوانتم فرایندو سویچ کنم روی یک فرایند دیگه ، از وقفه استفاده کنم ؟! راه حل بهتری از وقفه ها نیست

از وقفه تایمر PIT استفاده کنید و با استفاده از یک jump پرش رو انجام بدید. کاری که باید بکنید اینه که اول از همه وضعیت فرآیند که شما ثباتها و حافظه و... و البته پشته هست رو ذخیره کنید. بعد پرش رو انجام بدید.
یک سری نکات خیلی ریز هست که باید رعایت کنید. مثلا اینکه همه متغییرها رو اول تابع تعریف کنید و یا ترتیب ذخیره و بازیابی ثباتها هم خیلی مهم هست. میتونید کد آراکس رو در این مورد نگاه و استفاده کنید.

yassersajjadi
دوشنبه 10 شهریور 1393, 00:36 صبح
ممنون از جواب شما ، من حالت اسلیپ رو قبلا اماده کرده ام از کد اراکس هم استفاده کردم قبلا مثلا ایجاد حلقه ها البته من یه تغییراتی ایجاد کردم توی نوع حلقه ها و از اشاره گر هایی استفاده کردم که نیاز به تخصیص حافظه نباشه دیگه ، وقتی برنامه به حالت اسلیپ میره ، باید دوباره بیدار بشه من کجا بدونم کدوم فرایند از این طریق به حلقه اسلیپ رفته تا دوباره بیدارش کنم ؟!

pswin.pooya
دوشنبه 10 شهریور 1393, 09:10 صبح
سلام
داخل سمافورها باید یه صف درست کنی که لیست فرآیندهایی رو که بخواب بردن نگه داری.

yassersajjadi
دوشنبه 10 شهریور 1393, 15:20 عصر
استفاده از صف بندی ، ایده ی خوبیه ، امتحان میکنم

yassersajjadi
سه شنبه 11 شهریور 1393, 18:05 عصر
یه صف اختصاصی واسش ساختم جواب داد