BIOS (ראשי תיבות של Basic Input-Output System מילולית: מערכת קלט ופלט בסיסית) הוא מנגנון של חומרה וקושחה (תוכנה הצרובה בחומרה) המשמש לאתחול המחשב, כמו גם להפעלת שגרות תוכנה אשר תומכות בקלט ובפלט.
תפקידים:
בעת הדלקת המחשב, ה-BIOS הוא התוכנה הראשונה שפועלת והוא משמש ל:
קביעת הגדרות חומרה בסיסיות והפעלה או כיבוי של התקנים שונים.
קביעת סדר סריקת התקני האחסון, כלומר באיזה התקן יחפש המחשב את מערכת ההפעלה (למשל דיסק קשיח או CD-ROM).
בדיקה בסיסית של תקינות החומרה.
טעינת רשימה של פונקציות מהדיסק הקשיח אל כרטיסי הזיכרון, כולל המידע הדרוש להעלאת מערכת ההפעלה
הרצה של פונקציות שממשיכות לפעול גם כשהמחשב כבוי, כגון השעון הפנימי של המחשב. לצורך זה ה-BIOS מצויד בסוללתליתיום דומה לזו של שעוני יד, רק גדולה יותר (בדרך כלל 3V מדגם מספר '2032').
שינוי הגדרות ה-BIOS
ישנם סוגי BIOS שונים עבור כל מחשב. בדרך-כלל הכניסה להגדרות ה-BIOS מתבצעת על ידי לחיצה על מקש ייחודי עם הפעלת המחשב (לרוב DEL, לעיתים F2, F1 או Esc ואף F12). מסך שינוי ההגדרות פועל בצורה דומה ליישומי DOS. שינוי ההגדרות מאפשר, למשל, לשנות את הטמפרטורה בה יכובה המחשב במקרה של חימום יתר של המעבד.
החברות השונות מפיצות לעיתים גם עדכון לתוכנה של ה-BIOS. בניגוד לעדכונים עבור מערכת ההפעלה הכללית של המחשב, העדכונים האלה נעשים בצריבה והם אינם הפיכים. עדכוני ה-BIOS גם אינם משפיעים לרוב על אבטחת המידע או על איכות הביצועים הכללית של המחשב. הם נחוצים, למשל, כאשר המחשב נכשל שוב ושוב בזיהוי אחד מרכיבי החומרה.
התפתחות ה-BIOS
את ה-BIOS המציא גארי קילדל. הוא יצר BIOS בסיסי לאחר שחברת IMSAI ביקשה ממנו לשלב את מערכת ההפעלה שלו במערכת מחשב מבוססת בקר 8080. קילדל נתקל בקושי כשגילה כי מערכת הגישה לכונן שלהם הייתה שונה מזו שעבד עליה באינטל, כשפיתח את המערכת. במקום להתאים את פרוטוקול הגישה לכוננים במערכת שלו, עשה דבר שונה לגמרי, שתוצאתו מוטבעת עד היום בכל מחשב אישי: קילדל פירק את המערכת שלו לשלושה מודולים. את זה שטיפל בגישה לכונן, כינה "BIOS" ובו ביצע את כל העבודה מול הכוננים והפלט. רעיון זה הפיח רוח רעננה במפרשים מכיוון שמעתה ואילך לא היה צריך להתאים את מערכת CP/M במיוחד למחשב שהיא מצויה בו, אלא להשתמש בפרוטוקול ה-BIOS שכתבה כל חברה עבור המחשב שלה. כך שווקה CP/M ללא שום צורך בשינוי מצד החברה שרכשה אותה.
שגרות BIOS
כאשר המחשב מאותחל טוען שבב ה-BIOS רשימה של פונקציות לזיכרון הפנימי, אותן מפעילים כמו הפעלת כל פסיקה אחרת. שגרות BIOS הן כמו פונקציות בכל שפה אחרת, ומופעלות באמצעות פקודת INT בשפת אסמבלי. את הפרמטרים מעבירים באמצעות אוגרי המעבד.
ניתן לדרוס את פונקציות ה-BIOS בתוכנות שונות שנכתבות באסמבלי. כך לדוגמה, במקום שה-BIOS יטפל בקריאת הקשות המקלדת ויציג אותן על המסך, אפשר שתוכנה אחרת תטפל בהקשות מקלדת, ותרשום אותן בקובץ לפני הצגתן על המסך (keylogger).
כל פונקציית מעבד (INT) נמצאת בשני מקומות שונים בזיכרון. במקום הראשון היא תופסת שתי מילים שבהן הכתובת של המקום השני בזיכרון. במקום השני נמצא קטע הקוד של הפונקציה בשלמותו.
בתא זיכרון מספר 0000:0000-0000:0003 מופיע מקומה של פונקציית מעבד INT 0. וכך בתאים הבאים מופיעה הכתובת בזיכרון של הפונקציות הבאות.
דריסת פונקציות מעבד
כדי לדרוס פונקציה קיימת מכפילים את מספר הפונקציה ב-4 (כל פונקציה תופסת 4 בתים) ומפחיתים אחד (מכיוון שהתא הראשון הוא אפס). בתא שהתקבל רושמים את כתובת הזיכרון של הקוד שמעוניינים לבצע כאשר יפעילו פונקציה זו. בסוף הקוד רושמים את פקודת האסמבלי RETR לחזרה מפונקציה.
ניתן גם לדרוס פונקציה בשיטה שקופה, כך שמשתמש המחשב לא ירגיש שפקודת האסמבלי הוחלפה. לשם כך יש להפעיל את הפונקציה המקורית בסיום הקוד. לצורך זה לפני הדריסה יש לזכור את כתובת תא הזיכרון שבו נמצא הקוד המקורי של ה-BIOS, ובסיום הקוד, במקום פקודת RETR, רושמים פקודה קפיצה (JMP) לקוד המקורי.