תוכנית TSR
במערכת ההפעלה DOS, תוכנית TSR (ראשי תיבות באנגלית: Terminate and Stay Resident) היא תוכנית שנשארת בזיכרון לאחר סיומה. תוכנית רגילה מסיימת את פעולתה על ידי ביצוע קריאת מערכת שמשחררת את הזיכרון שהוקצה לה ומחזירה את השליטה למערכת ההפעלה. תוכנית TSR, לעומת זאת, משתמשת בקריאת מערכת מיוחדת, שמסיימת את פעולת התוכנית אך מותירה חלק מוגדר מהזיכרון מוקצה עבורה. קריאת המערכת המקורית (INT 27h - Terminate but Stay Resident) אפשרה להקצות לתוכנית עד 64K של זיכרון. החל מגרסה 2.0 של MS-DOS, הוצגה קריאת מערכת משופרת (INT 21h/31h - Keep Process) שהסירה את המגבלה הזו וכן אפשרה לתוכנית להחזיר קוד יציאה למערכת או ליישום שהפעיל אותה (parent process).
תוכנית TSR טיפוסית תחולק לשניים: חלק אתחול וחלק שוכן זיכרון (resident). חלק האתחול יכיל את כל הקוד שאיננו נחוץ לפעילות התוכנית כאשר היא מתפקדת "ברקע", כלומר לאחר החזרת השליטה ל-DOS באמצעות Keep Process. כשחלק זה מסיים את תפקידו הוא משחרר את הזיכרון שהוקצה עבורו, ובכך חוסך מקום בזיכרון. מאחר ש-DOS אינה תומכת בריבוי משימות, ברגע שהתוכנית מסתיימת הקוד שלה חדל להיות פעיל. כדי לחזור לפעולה, על התוכנית לממש שגרת טיפול בפסיקה. באופן זה ניתן להעביר אליה את השליטה באמצעות פסיקת תוכנה או חומרה.
אחד השימושים הבולטים של טכניקת ה-TSR היה יישומי פופ-אפ, שבאמצעות מימוש מנגנון של החלפת הקשר הצליחו לתת למשתמש תחושה של מעין ריבוי-משימות בסיסי ביותר. שימושים נוספים היו תוכנות שסיפקו ממשק להתקני חומרה (דומות מאד למנהלי התקנים מבחינת התפקוד, אך טכנית הן אינן כאלה), או ששיפרו ממשק קיים; וכן תוכניות שביצעו מניפולציה על יישום בזמן הריצה כדי לתקן בו פגמים, או כדי לשנות או להוסיף לו פונקציונליות.
טכניקת ה-TSR זכתה אומנם לפופולריות רבה, אך היו לה כמה חסרונות בולטים. מנקודת מבטם של המשתמשים, החיסרון המשמעותי ביותר היה המקום שהתוכניות תפסו בזיכרון הראשי (מתחת למחסום ה-640K). מנקודת מבטם של המתכנתים, התכנות בשיטה זו היה מורכב למדי, וחייב רמה גבוהה של היכרות עם מערכת המחשב ושליטה בשפת סף. הטכניקה זכתה לתמיכה רשמית בסיסית בלבד מצד מערכת ההפעלה, ויישום יעיל שלה חייב שימוש בקריאות מערכת שלא תועדו (אנ')[1] בגרסאות מוקדמות של מערכת ההפעלה. אחד הקשיים היה הצורך לממש את החלפת ההקשר ברמת היישום, כמעט ללא תמיכה של מערכת ההפעלה. כמו כן היה על המתכנת להתחשב בעובדה ש-DOS ו-BIOS לא תוכננו לריבוי כניסות (reentrancy).
טכניקה קרובה מאד ל-TSR, שלא עשתה שימוש בקריאת Keep Process, הייתה לממש את שגרות הטיפול בפסקה, כבתוכנית TSR רגילה, ולאחר מכן להריץ יישום משנה (child process). בזמן שיישום המשנה פועל, התוכנית מתפקדת "ברקע" כתוכנית TSR - כלומר, הקוד שלה נשמר בזיכרון ומופעל כשמתבצעת הפסיקה הרלוונטית. שיטה זו התאימה לתוכניות שתוכננו לביצוע מניפולציה על יישום מסוים בזמן הריצה (ללא שינוי בעותק הפיזי שלו השמור בדיסק), כגון טריינר שנועד למשחק מסוים. בנוסף, יש תוכניות שהשתמשו בשיטה זו כדי להריץ עותק נוסף של COMMAND.COM. מימוש זה יצר אפקט דומה מאד לתוכנית TSR אמיתית, וחסך מהמתכנת את הצורך לטפל בשלב הסרת התוכנית מהזיכרון (uninstall): שלב זה בוצע באמצעות הפקודה EXIT של COMMAND.COM, שהחזירה את השליטה ליישום המפעיל (parent), שבתורו סיים את התוכנית בדרך הרגילה.
לקריאה נוספת
- Tischer, Michael. PC System Programming. Abacus, 1990
- Duncan, Ray. Advanced MS-DOS Programming: The Microsoft Guide for Assembly Language and C Programmers. 2nd Ed. Microsoft Press, 1990
קישורים חיצוניים
- פרק 18 בספר The Art of Assembly Language Programming, מאת Randall Hyde
הערות שוליים
- ^ על פי המוסכמות בשוק התוכנה, היצרן איננו מחויב לתמוך בתכונות של התוכנה שאינן מתועדות בספרות הטכנית מטעמו. המשתמש בהן עושה זאת על אחריותו בלבד, בידיעה שייתכן שיוסרו או ישונו ללא התראה בגרסאות עתידיות של התוכנה.