קובץ COM

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

קובץ COM הוא פורמט של קובץ הרצה במערכת ההפעלה DOS. זהו אחד משני הסוגים של קובצי הרצה הקיימים ב-DOS, השני הוא EXE ‏(DOS executable).

לקובץ COM פורמט פשוט ביותר. קובץ בפורמט EXE המתקדם יותר כולל, בנוסף לתוכנית עצמה, גם כותר (header) ומידע המאפשר למערכת לבצע בזמן הטעינה את התאמת ההפניות לזיכרון ביחס לכתובת שבה נטענה התוכנית, תהליך הקרוי relocation. קובץ COM, לעומת זאת, כולל רק את הקוד והנתונים של התוכנית ונטען לזיכרון כפי שהוא, ללא כל שינוי. כתוצאה מכך, קובץ COM נטען מהר יותר מקובץ EXE ותופס נפח אחסון קטן יותר. עם זאת, היעדר התמיכה מצד המערכת ב-relocation של קובצי COM מטיל מגבלות משמעותיות על תוכניות בפורמט זה. גודלה המרבי של תוכנית COM הוא מעט פחות מ-64KB והיא יכולה לטפל במקטע בודד בלבד. להלכה, תוכנית COM יכולה לבצע relocation בעצמה, אך זוהי פעולה מורכבת למדי וחסרת תועלת, בהתחשב בתמיכה המובנית ב-relocation של קובצי EXE.

בדומה לפורמט EXE, שמו של פורמט COM נובע מהסיומת הנהוגה בקבצים מסוג זה, אך החל מגרסה 2.0 של DOS זוהי מוסכמה בלבד, ובפועל אין לסיומת תפקיד בקביעת סוג הקובץ. הגורם הקובע הוא קיומו או היעדרו של כותר ה-EXE.

כאשר קובץ COM נטען ומורץ משורת הפקודה או באמצעות קריאת המערכת INT 21h/4Bh ‏(EXEC), מתבצעות הפעולות הבאות (רשימה חלקית):

  1. מערכת ההפעלה בוחרת את כתובת מקטע הבסיס שבו תיטען התוכנית. כברירת מחדל, תיבחר הכתובת הנמוכה ביותר האפשרית.
  2. המערכת בונה טבלת PSP עבור התוכנית בתחילת מקטע הבסיס.
  3. התוכנית נטענת לזיכרון מיד לאחר ה-PSP (בהיסט 100h בתים מתחילת מקטע הבסיס).
  4. כל הזיכרון הזמין שמעל לכתובת הבסיס מוקצה לתוכנית.
  5. ארבעת אוגרי המקטע מכילים את כתובת מקטע הבסיס.
  6. השליטה מועברת לתוכנית באמצעות long jump להיסט 100h ממקטע הבסיס.

השימוש בקובצי COM היה נפוץ בעבר בתוכניות קטנות שנכתבו באסמבלי, בייחוד תוכניות TSR, תוכניות שירות ומנהלי התקנים. חלק מסביבות הפיתוח לא תמכו בפורמט זה, כך שהיה על המתכנת לבנות קובץ EXE ולהמיר אותו לקובץ COM באמצעות הפקודה הייעודית exe2bin. עם התקדמות הטכנולוגיה הפך ההבדל בזמן הטעינה לזניח, ומגבלת ה-64KB הציבה מחסום בפני המשך פיתוח של תוכנות בפורמט זה. כתוצאה מכך, מערכות הפעלה שפותחו מאוחר יותר לא תמכו בו עוד.