NVFS
מתוך ויקיפדיה, האנציקלופדיה החופשית
| ערך זה זקוק לעריכה, על מנת שיתאים לסגנון המקובל בוויקיפדיה. לצורך זה ייתכנו סיבות אחדות: פגמים טכניים כגון מיעוט קישורים פנימיים, סגנון הטעון שיפור או צורך בהגהה. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה שלו. |
NVFS (ראשי תיבות של Non-Volatile File System) משמעו בתרגום ישיר הוא "מערכת קבצים בלתי נדיפה", כלומר מערכת קבצים אשר לא נמחקת גם אם מנותק הזרם לזכרון. זו מערכת קבצים הממומשת במחשבי כף יד מבוססי מערכת ההפעלה של פאלם הנקראת PalmOS. מערכת הקבצים זו משתמשת בזכרון שאינו נדיף, וזאת על מנת למנוע איבוד מידע במקרה של התרוקנות הסוללה, דבר שקרה במערכות קודמות לה.
תוכן עניינים |
[עריכה] איך בנויה NVFS
לפני הופעת NVFS, מערכת הקבצים במכשירי פאלם הייתה בנוייה משני רכיבי זכרון - זכרון פלאש, בתצורת NOR, שנועד לקריאה בלבד והחזיק את מערכת ההפעלה ותוכנות נוספות כמו יומן, ספר כתובות וכיוצא באלה, אשר כונה בשם ROM ; ובנוסף, היה זכרון SDRAM שהיה נדיף ושימש לאחסון של כל התוכניות והקבצים, אך כאשר המתח נותק, כל המידע בזיכרון זה היה נמחק.
במכשירי פאלם מהדור החדש (Tungsten E2, T5, Treo 650, LifeDrive) הוצגה מערכת זכרון חדשה הנקראת NVFS. במערכת זו הזכרון כולו מאוחסן על רכיבי פלאש בתצורת NAND ולכן אינו נמחק גם אם מנותק אליו המתח, בעקבות התרוקנות הסוללה, הוצאתה או כל סיבה אחרת. ב-LifeDrive ישנו דיסק קשיח במקום זיכון פלאש, אך המימוש הוא זהה.
ההבדל העיקרי בין זכרון בתצורת NAND לבין זכרון בתצורת NOR הוא בכך, שבזכרון NOR ניתן לגשת לכל חלק בזכרון באופן ישיר. ב NAND אפשר לגשת רק לגושים בזכרון ולא לכל כתובת, ולכן לא ניתן להריץ ממנו תוכנות באופן ישיר, אלא יש צורך בהעברת המידע שבו לזכרון אחר אשר מאפשר זאת מאפשר זאת. לכן במערכת NVFS, הזכרון המשמש לשמירת תוכניות (נקרא לו זכרון התוכניות) לא יכול להיות גם הזכרון ממנו רצות התוכניות. לצורך כך קיים במכשירים עם NVFS זכרון נוסף, מבוסס SDRAM, שאליו מועברות התוכניות. זכרון זה הוא נדיף ובמקרה של ניתוק המתח, יימחק כל המידע שעליו.
הזכרון הנדיף לא מיועד כולו להרצת התוכניות והוא מחולק לשלושה חלקים. ניקח, לדוגמה את החלוקה במכשירים T5 או Treo 650. במכשירים אלו יש 32MB של זכרון SDRAM והם מחולקים כך:
- 16MB משמשים לאחסון קבצי מערכת ההפעלה והתוכנות המובנות (מה שקראנו פעם ROM). עם הפעלת המכשיר, מועתק תוכן ה ROM, שנמצא בצורה דחוסה בחלק ייעודי בפלאש, לתוך אותו חלק ייעודי בזכרון הנדיף. חלק זה של הזכרון הוא לקריאה בלבד ואינו ניתן לשינוי ע"י התוכניות. רק לאחר שאותו ROM הועבר בשלמותו מהפלאש, רק אז עולה מערכת ההפעלה וניתן להריץ תוכניות.
- 6MB משמשים למה שנקרא Dynamic Heap. זה זיכרון המשמש את התוכנית הרצה לצורך העבודה שלה. זכרון כזה היה קיים גם במכשירי הפאלם הישנים יותר.
- 10MB המשמשים לאחסון התוכניות (שמו הרשמי הוא DBCache ואנחנו נקרא לו "זכרון ריצה" או RAM). לחלק זה מועתקת התוכנית שמופעלת עם כל קבצי הנתונים שלה, וממנו זה רצה התוכנית, שאינה יכולה לרוץ ישירות מזכרון הפלאש (כי הוא NAND).
במקרה של Hard Reset, נמחקים לחלוטין כל הזכרון הנדיף (על כל שלושת חלקיו) וכל זכרון התוכניות הנמצא בפלאש. נשאר רק החלק של הפלאש המכיל עותק דחוס של ה ROM כדי שיוכל להטען למקומו ב-RAM לאחר ה-Reset.
[עריכה] איך עובדת NVFS
כאשר תוכנית מועתקת מהפלאש לזכרון הריצה, היא מן הסתם משתנה שם או שנגרמים שינויים לקבצי הנתונים שלה, שגם נמצאים על אותו זכרון ריצה נדיף. מערכת ההפעלה לחלוטין "אינה מודעת" לכך שישנו עותק על הפלאש, שצריך גם הוא להתעדכן למקרה של הפסקת חשמל. לכן, הקבצים שבפלאש יעודכנו באחד מארבעת המקרים הבאים:
- המכשיר כובה, בין אם ידנית או בעקבות תיזמון.
- התוכנה הוגדרה ע"י המתכנתים שלה כן, שהפלאש יעודכן באופן יזום ע"י פונקציה שמיועדת לכך.
- נעשה שינוי במאפייני התוכנה, נתונים כמו CreatorID, סוג התוכנית, שם התוכנית וכו'.
- התוכנית או אחד מהקבצים שלה נסגרו. סגירה של תוכנית משמעו מעבר מאפליקציה אחת לשניה או יציאה מאפליקציה פעילה. סגירת קובץ יכולה להתבצע גם ללא יציאה מתוכנית. לדוגמה, כאשר עובדים בתוכנה כמו אג'נדוס ומעדכנים פרטי איש קשר ומיד אח"כ פרטי פגישה. פרטי איש הקשר נשמרים בקובץ אחד ופרטי הפגישה בקובץ אחר. המעבר זה סוגר את קובץ אנשי הקשר ולכן גורם לעדכונו.
במקרים אלה, הקובץ נסרק על מנת לוודא שהוא תקין ואז מעודכן התאום שלו בפלאש.
גודל זכרון הריצה מוגבל (בדוגמא שלנו הוא 10MB). אם נטענת תוכנה הגדולה ממנו, היא תוציא הודעת שגיאה על כך שאין די זיכרון להפעילה. אם נטענת תוכנה המשתמשת בבסיסי נתונים, וגודלם המצטבר עולה על גודל זכרון הריצה הפנוי, מתחיל תהליך של פינוי זכרון הריצה. תהליך זה שקוף למשתמש, ובעצם הוא מתבצע באמצעות ניקוי תוכניות היושבות בזכרון הריצה ושאינן נעולות. תוכניות אלו מעודכנות לפלאש ונמחקות מזכרון הריצה. מדובר בעיקר בתוכניות שסיימו את עבודתן או תוכניות שרות שאמורות לרוץ ברקע. במהלך התהליך, מטבע הדברים, תורגש ירידה משמעותית בביצועים עקב הקריאה והכתיבה לזכרון הפלאש.
ניתן, באמצעות תוכנות צד ג' (כמו SharkCache ו RLock) להגדיר תוכניות שתהיינה נעולות תמיד בזכרון הריצה. תוכניות אלו לא תפוננה ממנו במקרה של תהליך פינוי הזכרון. הדבר יגרום לכך שהן תופעלנה מהר וישירות מזכרון הריצה. מומלץ לנעול תוכניות כאלו פחות ככל האפשר, כדי להשאיר זכרון ריצה פנוי וגדול לתוכניות אחרות.
במידה וישנה תוכנית המגדילה באופן עקבי בסיס נתונים עד שהוא עובר את גודל זכרון הריצה וכבר נוקו ממנו כל העודפים, מערכת ההפעלה ממשיכה ע"י ניקוי חכם, המוחק רשומות של אותו בסיס נתונים מזכרון הריצה, לאחר שמעדכן אותן בפלאש.
ישנן תוכנות צד ג' (כמו DBCacheTool) שיודעות לנהל את זכרון הריצה ולנקות אותו לפי הגדרות המשתמש, באם לדעתו של המשתמש, מערכת ההפעלה לא עשתה את העבודה כמו שצריך.
במכשירים החדשים יותר, כמו TX וגם Treo650 אחרי עדכון ROM 1.20, מתבצע ניקוי של זכרון הריצה, כמו זה שמבצעת DBCachTool ע"י מערכת ההפעלה. במכשירים אלו, עם כל כניסה לדפדפן האינטרנט, מתבצע ניקוי וסידור של הזכרון. גם כאשר תוכנה גדולה מנסה להטען, מתבצע ניקוי יעיל של זכרון הריצה. כך, למעשה, אין צורך בתוכנות צד ג' לביצוע פעולות אלו.
באופן כללי, במכשירים אלו מנוהל הזכרון בצורה יעילה יותר וגם נפח זכרון הריצה גדל קצת על חשבון ROM קטן ויעיל יותר.
[עריכה] מבנה הקבצים של NVFS
בעקבות השימוש בזכרון בלתי נדיף בתצורת NAND, השתנה כל מבנה הקבצים של התוכניות ובסיסי הנתונים בפאלם. עד כה, הכל היה מאוחסן בזכרון בצורה רציפה, וניתן היה לגשת ישירות לכתובות בזכרון כדי לדלות מהן נתונים. במערכת NVFS הקבצים מסודרים, כמו במחשב, בגושים.
מבנה הגושים עבר שינויים מהותיים מאז שהומצאה ה NVFS.
מבנה הקבצים הישן ( Treo 650 או T5 לפני עדכוני ה ROM האחרונים) היה בנוי כך: כל גוש היה בגודל של 512 בתים (Bytes). אם גודלו של קובץ היה פחות מגודל הגוש, הוא אוחסן בגוש אחד. אם יותר מכך, הוא נפרס על מספר גושים בהתאם לגודלו כאשר בכל גוש אוחסן חלק מהקובץ.
לדוגמא, קובץ שגודלו 60 בתים אוחסן בתוך גוש של 512 בתים. ובעצם תפס יותר מפי 8 מגודלו האמיתי. קובץ שגודלו 700 בתים אוחסן בחלקים: החלק הראשון תפס גוש של 512 בתים במלואו והחלק השני, של 188 בתים, תפס עוד גוש. סה"כ תפס הקובץ 1024 בתים.
כפי שניתן להבחין מיד, שיטה זו היתה בזבזנית ביותר, ובעצם נתנה למשתמש פחות זכרון ממה שנראה לו. אם היו במכשיר 32MB פנויים למשתמש בזכרון התוכניות, ניתן היה בפועל לאחסן בו פחות מכך בגלל השטח הריק שנשאר בגושים. לאור תלונות רבות של משתמשי פאלם החליטה החברה לחלק כרטיסי זכרון לכל מי שקנה מכשיר באותה תקופה, כדי לחפות על החוסר בזכרון במכשיר. לאחר מכן שוחרר עדכון ROM המשנה את מבנה הקבצים. מכשירים שיצאו לאחר מכן כמו LifeDrive, T|E2 ובמכשירי Treo 650 ו T5 לאחר עדכון ה-ROM, מערכת הקבצים היא שונה:
גם כאן יש שימוש בגושים בגודל 512 בתים, אלא שניצולם הוא אחר. כאן, כל גוש מחולק ל 16 תת-גושים בגודל 32 בתים, המסוגלים לשמש לשמירת חלקי קבצים. ישנן מגבלות גם להשמת תת-גושים. מספר התת-גושים הדרושים לאחסון קובץ נקבע ע"י עיגול למעלה של גודל הקובץ, לחזקה הבאה של 2. בנוסף מיקום הקובץ יהיה לפי גודלו. כלומר, קובץ של תת-גוש אחד יכול להיות ממוקם בכל מקום בגוש. קובץ של 4 תת-גושים יוכל להתחיל רק בכל 128 בתים כלומר, כל רבע גוש וכך הלאה.
לדוגמא: קובץ של 60 בתים יאוחסן בתוך גוש של 512 בתים אבל יתפוס רק 64 בתים מתוכו (שני תת-גושים). קובץ של 700 בתים, יתפוס גוש שלם של 512 בתים והשארית, 188 בתים, תוכל להיות מאוסנת בגוש אחר. לדוגמא, יהיה לו מספיק מקום פנוי בתת-גוש עם הקובץ הקטן (60 בתים), אבל בגלל גודלו, העיגול למעלה משמעו שהוא יתפוס 256 בתים, כלומר 8 תת-גושים ולכן יוכל להיות ממוקם או בתחילת הגוש או באמצעו. למרות שיש שטח מבוזבז, זה משאיר מספיק מקום פנוי לאחסון של קובץ נוסף בגודל של עד 129 בתים.



