מצב (מדעי המחשב)

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

## בתורת האוטומטים
[ממוזער|שמאל|250px| תרשים של [אוטומט סופי דטרמיניסטי בעל שני מצבים: S1 ו-S2 (מצב S1 הוא מצב מקבל);דוגמה זו מציגה אוטומט שקובע האם מספר בינארי מכיל מספר זוגי או אי-זוגי של אפסים.]]
בתורת האוטומטים, "מצב" מוגדר פורמלית במסגרת מודל מתמטי חישובי אבסטרקטי שנקרא אוטומט סופי (מכונת מצבים). מודל זה משמש הן בעיצוב של מעגלים דיגיטליים סדרתיים והן בעיצוב של תוכנות מחשב.

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

בתורת האוטומטים, התנהגות המערכת היא פונקציה של: (1) הגדרת האוטומט; (2) הקלט שהאוטומט מקבל; (3) ה**מצב** הנוכחי של האוטומט.

### סוגי מצבים
* **מצבים תואמים (compatible states)** הם מצבים במכונת מצבים שאינם סותרים זה את זה עבור כל קלט אפשרי. כך עבור כל קלט, שני המצבים צריכים לתת את אותו הפלט, והמצב הבא שאליו עוברים משני המצבים אמור להיות זהה, או שלא אמור להיות מעבר למצב אחר. קיום מצבים תואמים הוא מיותר אם הם קיימים באותה מכונת מצבים.
* **מצבים ברי הבחנה (distinguishable states)** הם מצבים במכונת מצבים שקיים עבורם לפחות רצף קלטים אחד שמביא לרצף פלטים שונה, ללא קשר למהו המצב ההתחלתי.
* **מצבים שקולים (equivalent states)** הם מצבים במכונת מצבים אשר עבור כל רצף אפשרי של קלטים, יפיקו את אותו הרצף של פלטים, ללא קשר למהו המצב ההתחלתי.

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

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

מאחר שלכל רכיב זיכרון בינארי יכולים להיות רק שני מצבים אפשריים, 0 או 1, המספר הכולל של מצבים שונים שמעגל ספרתי יכול להימצא בהם הוא סופי, ומוגבל על ידי מספר רכיבי הזיכרון. אם במעגל ספרתי ישנם N רכיבי זיכרון בינאריים, למעגל יכולים להיות לכל היותר 2*N* מצבים שונים.

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

לעיתים משתמשים בהגדרה צרה יותר של המושג עבור תוכנות מחשב הפועלות בצורה סדרתית על זרמים של נתונים, כגון תוכנות לביצוע ניתוח תחבירי (parsers), חומות אש, ותוכנות הצפנה. בחלק מהתוכנות מהסוג הזה, ההיסטוריה של הקלטים הקודמים משפיעה על עיבוד הקלט הנוכחי. כלומר, ניתן למדל תוכנות אלה כמכונות מצבים. תוכנות כאלה מתוארות כ-*stateful*, והמשתנים אשר מכילים ערכים מהעיבוד שבוצע בשלב הקודם מהווים את "המצב" של התוכנה. קיימות תוכנות סדרתיות אחרות שהפלט שלהן תלוי רק בקלט הנוכחי; תוכנות כאלה נקראות stateless.

## stateful לעומת stateless
תוכנות מחשב אשר שומרות מידע אודות המצב נקראות **stateful** (סטייטפוּל), ואילו תוכנות הפועלות רק על סמך הקלט הנוכחי נקראות **stateless** (סטייטלֵס). כמו כן, כאשר מערכת מידע או פרוטוקול תקשורת מסתמכים על מצבים, הם מתוארים כ-*stateful*, וכאלה שאינם מסתמכים על מצבים נקראים *stateless*.

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

קטגוריה:מדעי המחשב
קטגוריה:אוטומטים