PDA

View Full Version : TSR در سی



سیدهانی
پنج شنبه 13 فروردین 1383, 21:34 عصر
سلام
نمیدونم درست نوشتم یا نه ... منظورم همین چندکاره بودن هست که مثلا یک ساعت همواره کار کنه و شما هم کار خودت رو بکنی... کلا منظورم مثل ویندوز هست که چند کار رو باهم میشه انجام داد... راستش تو یه مقاله ای خوندم که با استفاده از رجیسترها باید به سی پی یو اعلام کنی که فلان کار را همواره انجام بده (در بازه زمانی مشخص) و حالا این کار رو هم انجام بده! ولی اصلا نمیدونم چطور چنین چیزی رو میتونم توی سی پیاده سازی کنم ؟‌ البته تونسته بودم با حلقه بی نهایت که به کیبورد حساس بود یه ساعت بذارم و اینکه کاربر بتونه با کلید بالا پایینی گزینه ها رو انتخاب کنه ... اما اصلا چیز جالبی نبود...
اگه پاسخ رو می دونید دریغ نکنید!!!
صمیمانه ممنون میشم

Anti_Evil
جمعه 14 فروردین 1383, 02:41 صبح
TSR به معنی Terminate and Stay Resident هستش، و با چیزی که در ویندوز پیاده سازی شده زمین تا آسمون فرق داره (;

از نظر تئوری تقریبا همونه که گفتی (:
ضمن اینکه در اون زمانا برای بالا بردن سرعت برنامه ها حتی برای همین TSR از ASM استفاده میکردند که نتیجه کار خیلی خوب میشد ( کلا تلفیق ++BC و ASM چیزه جالبی میشد! ).
یکی از مشکلاتی که گریبانگیر اغلب برنامه نویسان بود مشکل Memory Leak بود، چون نوشتن چنین برنامه هایی بسیار حجیم بود و دائما با Heap Memory کار میکرد.

در مورد پیاده سازی شما به شدت نیازمند یادگیری کار با وقفه ها هستید.

موفق باشید،
هادی

سیدهانی
جمعه 14 فروردین 1383, 12:51 عصر
سلام
میبخشید میشه یکم توضیح درمورد ویندوز بدید که در ویندوز چطور چند برنامه با هم استفاده می شن ؟

Anti_Evil
جمعه 14 فروردین 1383, 21:07 عصر
امروزه از سیستم Threading برای اجرای همزمان برنامه ها استفاده میشود.

سیدهانی
شنبه 15 فروردین 1383, 10:42 صبح
سلام
میشه لطف کنید درمورد این سیستم توضیحاتی بدید ؟

Anti_Evil
یک شنبه 16 فروردین 1383, 02:10 صبح
تفاوت عمده آن با نمونه قدیمی خود ( TSR ) این است که مدیریت Thread کاملا بر عهده Win32 API است. همونطور که قبلا اشاره کردم مهمترین تفاوت به نوع پیاده سازی این دو بر میگردد.
کار با Thread بر خلاف TSR بسیار ساده تر است و مشکلاتی از قبیل مدیریت حافظه ( Memory Managment ) ندارد.

به طور کلی در برنامه نویسی داس برنامه نویس مجبور بود مستقیما درگیر برخی از مسائل شود که در ویندوز اغلب درگیر آنها نمیشود.

موفق باشید.

johnsss
یک شنبه 16 فروردین 1383, 03:02 صبح
فکر میکنم که شما مفهوم MultiTask و MultiThread رو اشتباه کردید. هرچند که مطمئن نیستم.
در داس استفاده از MultiThread بسیار اسون بود هرچند که ساختن یک برنامه MultiTask
به خاطر مشکلات Memory Handling بسیار سخت و در خیلی از موارد غیر ممکن مینمود.
(استفاده از RealMode به جای ProtectedMode در داس اجازه استفاده از بیش از تقریبا یک مگابایت از حافظه را نمیداد که بعد ها با استفاده از Emulator هایی مانند Dos4GW این کار ممکن شد.)


multitasking
(1) A mode of operation that allows concurrent performance or interleaved execution of more than one task or program. (2) A process that allows a computer or operating system to run multiple applications or tasks concurrently by dividing the processor's time among them rapidly


multithread
Pertaining to concurrent operation of more than one path of execution within a computer.
multithreading
A process that allows a multitasking operating system to multitask subportions (threads) of an application smoothly.

Anti_Evil
یک شنبه 16 فروردین 1383, 04:32 صبح
Multi Tasking = TSR

سیستم عامل داس به طور ذاتی از Multi Threading پشتیبانی نمیکند و پیاده سازی آن تا حدود بسیار زیادی شبیه به Multi Tasking میباشد.

شاید یکی از بزرگترین تفاوت های این دو روش به طور دقیق این باشد که در حین پیاده سازی Multi Threading برنامه نویس تنها نیاز دارد برای Switch کردن بین Thread ها وضعیت هر یک از Thread ها را نگه دارد، که کلا از دو سبک خارج نیست:

1- Timer Base ( شبیه چیزی که در لینوکس رخ میدهد. )
2- System Thread ( یعنی Thread به سیستم میگوید که چه زمانی میتواند سوئیچ کند، این روش تا حدود زیادی به ویندوز شبیه است. )

وگرنه در بقیه موارد تفاوت زیادی به چشم نمیخورد ...

به نظر من مسئله مهم این است که پیاده سازی به هر دو شیوه بر عهده برنامه نویس است.
البته برای کار با هر یک از شیوه ها ( Multi Tasking - Multi Threading ) کتابخانه های متعددی وجود دارد که به کار سرعت بیشتری میدهد.

یک کتابخانه بسیار مناسب برای پیاده سازی Multi Threading در سیستم عامل داس ( نوشته شده با BC++ 3.0 ):
ftp://ftp.eunet.bg/pub/simtelnet/msdos/cpluspls/mtl110je.zip

موفق باشید،
هادی