PDA

View Full Version : The Timer Interrupt Handler



hojjatcroos
دوشنبه 01 اسفند 1390, 11:56 صبح
سلام دوستان يك سوال داشتم.
توي كتاب linux kernel development گفته ما دو نوع Interrupt Handler داريم.يكي وابسته به معماري هست و ديگري خير مي خواستم دليل اين دو دستگي رو بدونم.
سوالي ديگه اين هست كه آيا همه ي پردازشگرها يا يك تايمر Interrupt مي شوند(در چند پردازنده اي)
اگه اين طور هست چرا لينوكس به ازاي هر تيك يكي به مقدار متغيير jiffies اضافه ميكنه آيا اين باعث خطا در محاسبه زمان نميشه چون در يك لحظه به ازاي 4 پردازشگر 4 تيك به jiffies اضافه مي شود.
(اگر براي دوستان زحمتي نيست مي خواستم لينك زير رو بخونيد تا متوجه منظور بشيد در حد 20-30 خط اولش رو)
لينك (http://www.makelinux.net/books/lkd2/ch10lev1sec5)
ممنون

hojjatcroos
جمعه 05 اسفند 1390, 12:23 عصر
سلام فکر کنم اگه سوالم رو کلی تر بیان کنم بهتر باشه.
ما می دونیم بر خلاف تایمرهای محلی pit ها تمامی پردازشگرها را وقفه می دهند حال سوال این است که اگر همه این پردازشگرها زمان را افزایش می دهند یک خطا رخ داده است یا نه ؟ممنون

pswin.pooya
جمعه 05 اسفند 1390, 22:52 عصر
ما می دونیم بر خلاف تایمرهای محلی pit ها تمامی پردازشگرها را وقفه می دهند حال سوال این است که اگر همه این پردازشگرها زمان را افزایش می دهند یک خطا رخ داده است یا نه ؟ممنون

هر پردازشگر pit خودش رو داره. نه اينكه يه pit همه رو وقفه بده.

لينوكس يك سيستم عامل چند پردازنده اي هست كه براي سيستم هاي توزيع شده طراحي شده. چنين سيستم عاملهاي به شكلهاي مختلف تدابير خودشون رو براي كنترل پردازنده هاي مختلف دارن. مثلا داخل يه سيستم عامل لينوكس ميتونه تنها pit يك پردازنده رو مقدار دهي و فعال كنه و بيخيال بقيه بشه. يا فقط يك كنترلر براي كنرل تايمر وجود داشته باشه و يا حتي چندين كنترلر براي پردازندهاي مختلف اگر داخل لينوكس يه ps -ef بگيري با برخي از فرايندها مثل :

[softirqd/0]

برخورد مي كني كه اون صفر نشون دهنده شماره پردازنده صفر هست. حالا اگر يه پردازنده مثل corei7 داشته باشي. چهار تا از اين فرايندها رو مي توني ببيني.

aakh1361
یک شنبه 07 اسفند 1390, 00:14 صبح
با سلام
در مورد سوال اولتون چون سیستم عامل لینوکس روی سخت افزارهای متفاوت و معماری های مختلف اجرا میشه
میشه به دو نوع Interrupt Handler تقسیم کرد
1- روتین های که نیاز به باز نویسی روی معماری متفاوتی دارن
2 - روتین های که نیاز به باز نویسی روی معماری متفاوتی ندارند

وقتی که روتین یا هندلر برای یک وقفه نوشته میشه معمولا نه همیشه ! به زبان سی یا یک زبان سطح بالا نوشته میشه و میشه همون روتین رو روی یک معماری دیگه بدون هیچ تغییر کامپایل کرد و درست کار میکنه
ولی بعضی روتین های که برای بعضی وقفه ها نوشته میشن نیاز دارند برای اینکه روی معماری دیگه ای اجرا بشن کمی کدشان تغییر کنه یا نیاز به باز نویسی دارند مثلا تمام روتین های که کاملا به زبان سطح پایین نوشته میشن باید برای اینکه روی معماری دیگه کار کنه دوباره بر طبق معماری مقصد باز نویسی بشند
بعضی روتین ها رو میشه کاملا به زبان سطح بالا نوشت و نیاز به هیچ کد سطح پایینی براشون نیست و فقط با یک کامپایل بدون مشکل کار میکنند ولی بعضی دیگه نیاز دارند حتما به زبان سطح پایین نوشته بشوند پس باید برای یک معماری دیگه باز نویسی بشن