חוצץ

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

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

תוכן עניינים

שימושים[עריכה]

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

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

חוצץ בודד[עריכה]

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

חוצץ כפול[עריכה]

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

חוצץ מעגלי[עריכה]

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

בעיות עם חוצצים[עריכה]

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

חמיקה (Underflow)[עריכה]

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

גלישה (Overflow)[עריכה]

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

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