חוצץ

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

במדעי המחשב חוצץ (buffer) הוא מקטע זיכרון המאחסן מידע באופן זמני בעת העברתו ממקום למקום. העברה של מידע יכולה להתבצע מהתקן קלט ליישום מחשב במחשב, מיישום במחשב אל הפלט, בין שני תהליכים, בין שני התקני אחסון וכו'. חוצץ יכול להיות מיושם ברמת החומרה או התוכנה.

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

חוצצים קשורים קשר הדוק עם התקני קלט/פלט. לרבים מהתקני החומרה יש חוצץ באמצעותו ניתן להעביר מהם או אליהם גושי מידע. בכונן קשיח למשל, ישנו חוצץ המקבל את המידע הנקרא על ידי הראש הקורא/כותב. לאחר שהחוצץ מתמלא, הכונן מסמן למערכת ההפעלה באמצעות פסיקה שיש לקרוא את תוכן החוצץ.

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

חוצץ בודד[עריכת קוד מקור | עריכה]

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

חוצץ כפול[עריכת קוד מקור | עריכה]

בשיטה זו קיימים שני חוצצים. המידע נכתב בכל פעם אל חוצץ אחד בלבד. כאשר חוצץ זה מתמלא, הוא מועבר לטיפול מערכת ההפעלה שמעבירה את תוכנו ליעד. בינתיים, ממשיך התהליך לכתוב לחוצץ השני. כאשר החוצץ השני מתמלא, התהליך חוזר לכתוב אל החוצץ הראשון (שהתרוקן בינתיים) ומעביר את הטיפול בחוצץ המלא למערכת ההפעלה. יתרונה של שיטה זו הוא שבכל זמן נתון קיים לפחות חוצץ אחד פנוי אליו אפשר לכתוב מידע ולכן אין צורך לחכות לריקון של החוצץ.

חוצץ מעגלי[עריכת קוד מקור | עריכה]

חוצץ מעגלי הוא חוצץ שהתא האחרון בו מצביע חזרה לתא הראשון. בעת הכנסת איבר, מוסיפים את האיבר בתא הפנוי הבא ובעת קריאה קוראים את התו הראשון שהוכנס. היתרון בשיטה זו הוא שאפשר לבצע פעולות כתיבה וקריאה במקביל.[דרושה הבהרה]

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

בדומה לכל מבנה נתונים, חוצצים סובלים מבעיות.

חמיקה (Underflow)[עריכת קוד מקור | עריכה]

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

גלישה (Overflow)[עריכת קוד מקור | עריכה]

Postscript-viewer-shaded.png ערך מורחב – גלישת חוצץ

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