תוכנית TSR

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

במערכת ההפעלה DOS, תוכנית TSR (ראשי תיבות באנגלית: Terminate and Stay Resident) היא תוכנית שנשארת בזיכרון לאחר סיומה. תוכנית רגילה מסיימת את פעולתה על ידי ביצוע קריאת מערכת שמשחררת את הזיכרון שהוקצה לה ומחזירה את השליטה למערכת ההפעלה. תוכנית TSR, לעומת זאת, משתמשת בקריאת מערכת מיוחדת, שמסיימת את פעולת התוכנית אך מותירה חלק מוגדר מהזיכרון מוקצה עבורה. קריאת המערכת המקורית (פסיקת תוכנה 27H - ‏Terminate but Stay Resident) אפשרה להקצות לתוכנית עד 64K של זיכרון. החל מגרסה 2.0 של MS-DOS, הוצגה קריאת מערכת משופרת (קריאה Keep Process - 31H) שהסירה את המגבלה הזו וכן אפשרה לתוכנית להחזיר קוד יציאה למערכת או ליישום שהפעיל אותה (parent process).

תוכנית TSR טיפוסית תחולק לשניים: חלק אתחול וחלק שוכן זיכרון (resident). חלק האתחול יכיל את כל הקוד שאיננו נחוץ לפעילות התוכנית כאשר היא מתפקדת "ברקע", כלומר לאחר החזרת השליטה ל-DOS באמצעות Keep Process. כשחלק זה מסיים את תפקידו הוא משחרר את הזיכרון שהוקצה עבורו, ובכך חוסך מקום בזיכרון. מאחר ש-DOS איננו תומך בריבוי משימות, ברגע שהתוכנית מסתיימת הקוד שלה חדל להיות פעיל. כדי לחזור לפעולה, על התוכנית לממש שגרת טיפול בפסיקה. באופן זה ניתן להעביר אליה את השליטה באמצעות פסיקת תוכנה או חומרה.

אחד השימושים הבולטים של טכניקת ה-TSR היה יישומי פופ-אפ, שבאמצעות מימוש מנגנון של החלפת הקשר הצליחו לתת למשתמש תחושה של מעין ריבוי-משימות בסיסי ביותר. שימושים נוספים היו תוכנות שסיפקו ממשק להתקני חומרה (דומות מאוד למנהלי התקנים מבחינת התפקוד, אך טכנית הן אינן כאלה), או ששיפרו ממשק קיים; וכן תוכניות שביצעו מניפולציה על יישום בזמן הריצה כדי לתקן בו פגמים, או כדי לשנות או להוסיף לו פונקציונליות.

טכניקת ה-TSR זכתה אומנם לפופולריות רבה, אך היו לה כמה חסרונות בולטים. מנקודת מבטם של המשתמשים, החיסרון המשמעותי ביותר היה המקום שהתוכניות תפסו בזיכרון הראשי (מתחת למחסום ה-640K). מנקודת מבטם של המתכנתים, התכנות בשיטה זו היה מורכב למדי, וחייב רמה גבוהה של היכרות עם מערכת המחשב ושליטה בשפת סף. הטכניקה זכתה לתמיכה רשמית בסיסית בלבד מצד מערכת ההפעלה, ויישום יעיל שלה חייב שימוש בקריאות מערכת שלא היו מתועדות‏[1] בגרסאות מוקדמות של מערכת ההפעלה. אחד הקשיים היה הצורך לממש את החלפת ההקשר ברמת היישום, כמעט ללא תמיכה של מערכת ההפעלה. כמו כן היה על המתכנת להתחשב בעובדה ש-DOS לא תוכננה לריבוי כניסות (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

קישורים חיצוניים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ על פי המוסכמות בשוק התוכנה, היצרן איננו מחויב לתמוך בתכונות של התוכנה שאינן מתועדות בספרות הטכנית מטעמו. המשתמש בהן עושה זאת על אחריותו בלבד, בידיעה שייתכן שיוסרו או ישונו בגרסאות עתידיות של התוכנה.