הטכניון - מכון טכנולוגי לישראל הפקולטה להנדסת חשמל המעבדה למערכות תכנה מרושתות ניסוי בתכנות מקבילי ב- Java המאחר ביותר מ 51 דקות לא יורשה לבצע את הניס
|
|
- תהל רפאל
- לפני5 שנים
- צפיות:
תמליל
1 הטכניון - מכון טכנולוגי לישראל הפקולטה להנדסת חשמל המעבדה למערכות תכנה מרושתות ניסוי בתכנות מקבילי ב- Java המאחר ביותר מ 51 דקות לא יורשה לבצע את הניסוי! המעבדה למערכות תוכנה הפקולטה להנדסת חשמל בניין מאייר קומה 55 מנחה הניסוי: מהנדסת המעבדה: נעם שלו אילנה דוד טל: 1153 טל: 6411 דוא"ל: noams@tx דוא"ל: ilana@ee
2 בטיחות כללי: הנחיות הבטיחות מובאות לידיעת הסטודנטים כאמצעי למניעת תאונות בעת ביצוע ניסויים ופעילות במעבדה למערכות תוכנה מטרתן להפנות תשומת לב לסיכונים הכרוכים בפעילויות המעבדה, כדי למנוע סבל לאדם ונזק לציוד אנא קראו הנחיות אלו בעיון ופעלו בהתאם להן מסגרת הבטיחות במעבדה: אין לקיים ניסויים במעבדה ללא קבלת ציון עובר בקורס הבטיחות של מעבדות ההתמחות באלקטרוניקה )שהינו מקצוע קדם למעבדה זו( לפני התחלת הניסויים יש להתייצב בפני מדריך הקבוצה לקבלת תדריך ראשוני הנחיות בטיחות אין לקיים ניסויים במעבדה ללא השגחת מדריך ללא אישור מראש מדריך הקבוצה אחראי להסדרים בתחום פעילותך במעבדה; נהג על פי הוראותיו עשה ואל תעשה: יש לידע את המדריך או את צוות המעבדה על מצב מסוכן וליקויים במעבדה או בסביבתה הקרובה לא תיעשה במזיד ובלי סיבה סבירה, פעולה העלולה לסכן את הנוכחים במעבדה אסור להשתמש לרעה בכל אמצעי או התקן שסופק או הותקן במעבדה היאבקות, קטטה והשתטות אסורים מעשי קונדס מעוררים לפעמים צחוק אך הם עלולים לגרום לתאונה אין להשתמש בתוך המעבדה בסמים או במשקאות אלכוהוליים, או להיות תחת השפעתם אין לעשן במעבדה ואין להכניס דברי מאכל או משקה בסיום העבודה יש להשאיר את השולחן נקי ומסודר בניסיון לחלץ דפים תקועים במדפסת - שים לב לחלקים חמים! בטיחות חשמל: בחלק משולחנות המעבדה מותקנים בתי תקע )"שקעים"( אשר ציוד המעבדה מוזן מהם אין להפעיל ציוד המוזן מבית תקע פגום אין להשתמש בציוד המוזן דרך פתילים )"כבלים גמישים"( אשר הבידוד שלהם פגום או אשר התקע שלהם אינו מחוזק כראוי אסור לתקן או לפרק ציוד חשמלי כולל החלפת נתיכים המותקנים בתוך הציוד; יש להשאיר זאת לטפול הגורם המוסמך אין לגעת בארון החשמל המרכזי, אלא בעת חירום וזאת - לצורך ניתוק המפסק הראשי מפסקי לחיצה לשעת חירום: במעבדה ישנם מפסקים ראשיים להפסקת אספקת החשמל זהה את מקומם
3 בעת חירום יש להפעיל מפסקי החשמל הראשיים בטיחות אש, החייאה ועזרה ראשונה: במעבדה ממוקמים מטפי כיבוי אש זהה את מקומם אין להפעיל את המטפים, אלא בעת חירום ובמידה והמדריכים וגורמים מקצועיים אחרים במעבדה אינם יכולים לפעול יציאות חירום: בארוע חירום הדורש פינוי, כגון שריפה, יש להתפנות מיד מהמעבדה דיווח בעת אירוע חירום: יש לדווח מידית למדריך ולאיש סגל המעבדה המדריך או איש סגל המעבדה ידווחו מיידית לקצין הביטחון בטלפון; 0462, 0000 במידה ואין הם יכולים לעשות כך, ידווח אחד הסטודנטים לקצין הביטחון לפי הוראת קצין הביטחון, או כאשר אין יכולת לדווח לקצין הביטחון, יש לדווח, לפי הצורך: 522, משטרה 525, מגן דוד אדום 520, מכבי אש גורמי בטיחות ו/או ביטחון אחרים בנוסף לכך יש לדווח ליחידת סגן המנמ"פ לעניני בטיחות; 0564/4 1211, 6444 בהמשך, יש לדווח לאחראי משק ותחזוקה; לסיום, יש לדווח ל: מהנדס המעבדה )טל 4635( בעת הצורך ניתן להודיע במקום למהנדס המעבדה לטכנאי המעבדה
4 המעבדה למערכות תוכנה מבוא חוברת זו מהווה תדריך והכנה ל בתדריך זה נלמדים העקרונות של תכנות מקבילי בשפת Java מלווים בהסברים ודוגמאות מפורטות כל הדוגמאות המופיעות בתדריך ניתנות להורדה מאתר המעבדה הקדם של הניסוי הוא הכרה בסיסית של שפת Java מטרות הניסוי הכרת העקרונות של תכנות המקבילי ההבנה של האתגרים המאפיינים את התכנות המקבילי הכרת הכלים המוצעים ע"י שפת Java לתכנות מקבילי התנסות בכתיבת תוכניות פשוטות והרצתן מבנה הניסוי הניסוי מחולק לשני מפגשים הכרה בסיסית ומנגנוני סנכרון o תכנון של תוכנית מקבילית o חוברת ההכנה מחולקת לשני חלקים גם היא את החלק הראשון צריך לקרוא לפני המפגש הראשון )פרקים 5-1( o את החלק השני צריך לקרוא לפני המפגש השני )פרק 6( o אחרי כל חלק באות שאלות ההכנה )דו"ח מכון( צריך לבצע דו"ח o מכין לפני כל מפגש ביצוע הניסוי מול המחשב אין דו"ח מסכם )מה שנבדק זה הקוד שנכתב במהלך הניסוי( מבנה הציון הכנה לניסוי 01% ביצוע הניסוי 75% 4
5 1 מבוא מוטיבציה התפתחות החומרה בעשור האחרון כבר לא הולכת לפי חוק :Moore אילוצי הספק חשפו בפנינו עולם חדש שבו ביצועי המעבד אינם יכולים לגדול באותו הקצב כמו בעבר במקום זאת, המעבדים של היום מנסים לשפר את הביצועים ע"י שימוש ביותר ויותר ליבות לצערנו, אם התוכנה לא תשתמש בכל הליבות שעומדות לרשותה, המשתמש הסופי לא ירגיש את השיפור )ואנחנו לא רוצים לתת לזה לקרות( לאור זאת בימים אלה התכנות המקבילי הופך מתחום אקזוטי של מקצוענים מעטים לידע הכרחי של כל עובד בתעשייה אנחנו נראה שתכנות מקבילי מסובך הרבה יותר מתכנות רגיל, ולכך סיבות רבות: הראש שלנו לא רגיל לחשוב "באופן מקבילי", לכן הפיתוח של אלגוריתמים מקביליים קשה יותר נדרשת עבודה רבה על מנת למנוע מצבים של חוסר סנכרון בין התהליכים\חוטים הריצות המקביליות בדרך כלל אינן דטרמיניסטיות, ולכן ה- debugging הופך לבעייתי מאוד וגם אם התוכנה שלנו רצה נכון, צריך לדעת להבין מה צריך לשפר בה על מנת להאיץ את הביצועים במהלך הניסוי נלמד את הבסיס של התכנות המקבילי על הדוגמה של תכנות מקבילי ב- Java רקע תיאורטי חוטים במערכות הפעלה קודם כל, חשוב להדגיש שהנושא של חוטים במערכות הפעלה הוא נושא רחב ומסובך כך שלא ניתן ללמוד אותו בצורה מסודרת מתוך חוברת ההכנה אנחנו ניתן רק את האינטואיציה שתעזור במהלך הניסוי )המעוניינים מוזמנים לקחת קורס מרתק בשם "מבנה מערכות הפעלה" שניתן בפקולטה( תהליך )process( במערכות הפעלה הוא יחידת ביצוע של התוכנה תוכנה היא בעצם אוסף פסיבי של פקודות לעומת זאת, תהליך הוא הביצוע הממשי של פקודות אלו לכל תהליך יש את מרחב הזיכרון space( )address שלו, כך שתהליכים שונים לרוב שקופים אחד לשני: מצד אחד זה מקל על הביצוע של כל תהליך בנפרד, מצד שני זה מקשה על ההידברות בין התהליכים התהליכים מורצים ע"י מערכת ההפעלה מודול של מערכת הפעלה, שנקרא,scheduler מתזמן את התהליכים אחד אחרי השני כשהוא נותן לכל תהליך פרק זמן slice( )time מסוים לרוץ על המעבד כאשר ה- slice time של התהליך נגמר, הוא מפסיק לרוץ והמעבד עובר לרשותו של התהליך הבא בדרך כלל גודל ה- slice time קטן מספיק על מנת שהמשתמש "יראה את 5
6 התהליכים רצים בו זמנית" כאשר המערכת מכילה יותר מ- core אחד, כמה תהליכים יכולים לרוץ במקביל על הליבות הקיימות החלפה בין תהליכים נקראת החלפת הקשר switch( )context בלי להיכנס למדיניות התזמון של מערכת ההפעלה )לכל מערכת הפעלה קיימת מדיניות שונה(, נציין כי התוכנה אינה מודעת ואינה יכולה להשפיע על התזמון, כך שמבחינת המתכנת החלפת הקשר יכולה לקרות בין כל שתי פקודות של התוכנית חשוב להבין גם שהחלפת הקשר היא פעולה "כבדה" יחסית )היא דורשת התערבות של מערכת ההפעלה ושורפת די הרבה מחזורים של )CPU ואיפה החוטים? הנה זה בא חוטים )threads( הם בעצם תהליכים "קלים" processes( )lightweight כל תהליך יכול להכיל מספר רב של חוטים בעצם, תהליך תמיד מכיל חוט אחד שנקרא החוט הראשי, חוט זה יכול ליצור חוטים חדשים שיהיו שייכים אליו ההבדל העקרוני בין חוטים לבין תהליכים הוא שלחוטים יש מרחב זיכרון משותף memory( )shared תכונה זו הופכת את שיתוף הפעולה בין החוטים לקל הרבה יותר אבל, החוטים צריכים להיזהר על מנת לא להפריע אחד לשני חשוב להדגיש שכאשר מדברים על,shared memory הכוונה היא לאזור של הזיכרון הנקרא heap )כל ההקצאות הדינאמיות( אזור ה- stack )כל המשתנים הלוקליים( עדיין נפרד לכל חוט תכונת מרחב הזיכרון המשותף של חוטים הופכת את פעולת החלפת ההקשר למהירה הרבה יותר מאשר החלפת ההקשר של תהליכים, אך היא עדיין כבדה מספיק על מנת לקחת אותה בחשבון באנליזת ביצועים 6
7 2 חוטים ב- Java על מנת לכתוב תוכנה מקבילית צריך לדעת לייצר, להריץ ולבקר חוטים בפרק זה נלמד איך ניתן לעשות זאת בשפת Java יצירת חוטים ב- Java חוטים ב- Java הם אובייקטים כמו שאר האובייקטים בשפה )נזכיר כי כל אובייקט ב- Java יורש ממחלקת )Object כל חוט הוא מופע של מחלקת javalangthread או תת מחלקה שלה ניתן לייצר חוט בצורה הבאה: Thread thread = new Thread(); יש לשים לב כי יצירת אובייקט מטיפוס Thread לא מפעילה שום חוט במערכת ההפעלה על מנת להתחיל את הריצה של החוט החדש, צריך להפעיל את מתודת start() של המחלקה: Thread thread = new Thread(); threadstart(); בדוגמה לעיל לא הגדרנו מה הקוד שצריך להיות מורץ ע"י החוט ב- Java קיימות שתי דרכים עיקריות לעשות זאת: לרשת מ- Thread או לממש ממשק Runnable הורשה ממחלקת 7 Thread למחלקת Thread קיימת מתודת run() אשר נקראת בתחילת ריצת החוט ניתן לרשת מ- Thread ולעשות override למתודת run() כמו בדוגמה הבאה: public class MyThread extends Thread { public void run() { Systemoutprintln("MyThread running");
8 הקוד הבא יריץ את המתודה run() בחוט החדש: MyThread thread = new MyThread(); threadstart(); את אותה הדוגמה ניתן היה לכתוב באופן מקוצר באמצעות anonymous :class מימוש של Thread thread = new Thread() { public void run() { Systemoutprintln("MyThread running"); ; threadstart(); Runnable interface הדרך השנייה להגדיר את הקוד שצריך להתבצע ע"י החוט החדש היא להעביר ל- constructor של Thread את המימוש של ממשק Runnable public interface Runnable { public void run(); המחלקה שתממש Runnable תממש את מתודת,run() אשר תיקרא ע"י החוט החדש public class MyRunnable implements Runnable { public void run() { Systemoutprintln("MyRunnable running"); Thread thread = new Thread(new MyRunnable()); threadstart(); הבחירה בין הורשת Thread לבין מימוש Runnable היא בחירה של המתכנת בדרך כלל עדיף לממש Runnable )ככלל, מימוש interface עדיף על פני הורשה מכיוון ש- Java לא מאפשרת הורשה מרובה( 8
9 מתודות בקרה של החוטים להלן מוצגת רשימה של מתודות שימושיות ב- API של Thread )את הרשימה המלאה ניתן לראות ב- API הרשמי באתר של )Sun ניתן לתת שם לכל thread ב- constructor או דרך מתודת setname את השם ניתן להפיק דרך מתודת getname )בזמן ריצת החוט( מתן השמות יכול לעזור ל- debugging ותורם לתוכנה מובנת יותר למתכנת חוט יכול ללכת לישון לפרק זמן מסוים באמצעות מתודת sleep() המתודה הסטטית currentthread() מחזירה את המופע של Thread של החוט הנוכחי מתודת join() מחכה עד שחוט הנתון יסיים את הריצה שלו צריך להדגיש את החשיבות של מתודת join() הפקודה threadstart() אומנם מריצה את החוט החדש אבל לא מחכה עד שהוא יסתיים )אנחנו גם לא רוצים שהיא תעשה זאת, כי אז נאבד את המקביליות( לכן אם חוט אחד בשלב מסוים צריך לחכות עד שחוט אחר יסתיים, הוא צריך לקרוא למתודה threadjoin() מתודת join() היא מתודה חוסמת )blocking( המתודה לא חוזרת ישר אלא רק אחרי תנאי מסוים )במקרה שלנו התנאי הוא סיום ה- thread ( צריך להיזהר מאוד בקריאה למתודות חוסמות אם התנאי שעליו מחכים לא יתבצע, אז החוט ייתקע לנצח המתודה join יכולה לזרוק,InterruptedException המשמעות של הדבר היא שהחוט שחיכינו לו היה interrupted בכוח ע"י חוט אחר )לא ניכנס לנושא של ה- interrupts במהלך הניסוי, אבל צריך להיות מודע לקיומם( 9
10 התוכנית המקבילית הראשונה עכשיו אנחנו מוכנים לכתוב את התוכנה המקבילית הראשונה שלנו החוט הראשי מפעיל את החוטים מ- 5 עד 52, כל אחד מהחוטים מדפיס את השם שלו למסך public class HelloWorld implements Runnable { public void run() { Systemoutprintln("Hello world from thread number " + ThreadcurrentThread()getName()); public static void main(string[] args) { Thread[] threads = new Thread[10]; // create an array of threads for(int i = 0; i < 10; i++) { String threadname = IntegertoString(i); threads[i] = new Thread(new HelloWorld(), threadname); // create threads for (Thread thread : threads) { threadstart(); // start the threads terminate for (Thread thread : threads) { try { threadjoin(); // wait for the threads to catch (InterruptedException e) { eprintstacktrace(); Systemoutprintln("That's all, folks"); נתאר שוב את מה שקורה בתוכנה שלעיל: מחלקת HelloWorld מממשת Runnable מתודת run() של המחלקה ניגשת ל- currentthread ומדפיסה את השם שלו החוט הראשי במתודת :main לכל אחד מעביר ב- constructor,thread מייצר 52 מופעים של o את המופע של HelloWorld ואת השם הייחודי Thread של כל start() מפעיל את מתודת o join() מחכה עד שכל החוטים יסתיימו באמצעות מתודת o 01
11 3 מנגנוני סנכרון למה צריך מנגנוני סנכרון מוטיבציה תוכניות מרובות חוטים מעלות אתגרים חדשים בפני המתכנת העובדה שיש לנו כמה חוטים שרצים בו זמנית אינה מהווה בעיה בפני עצמה הבעיה מתחילה ברגע שהחוטים מנסים לשנות נתונים משותפים נסתכל על הדוגמה הבאה של :UnsafeCounter public class UnsafeCounter { private int counter = 0; public void addvalue(int val) { counter = counter + val; public int getcounter() { return counter; פעולת addvalue() אינה פעולה אטומית, אלא מורכבת משלוש פעולות: 5 קריאת הערך הנוכחי של ה- counter 0 פעולת החישוב של הערך החדש 1 כתיבת הערך החדש לתוך ה- counter ה- pattern שמתואר לעיל הוא אחד מהנפוצים בתכנות והוא נקרא Read-Modify-Write נסתכל על ריצה שבה שני חוטים מנסים להפעיל את המתודה addvalue(2) של המופע המשותף של ה- counter נניח שבתחילת הריצה הערך של ה- counter היה אפס היינו מצפים שאחרי ששני החוטים מוסיפים לערכו שתיים, הערך של ה- counter יהיה שווה ל- 6 נניח כי התקבל התזמון הבא: החוט הראשון קורא ערך 2 מהמונה החוט הראשון מחשב את הערך החדש 0, ורושם אותו בחזרה החוט השני קורא ערך 2 מהמונה החוט השני מחשב את הערך החדש 0, ורושם אותו בחזרה 00
12 התזמון שתואר אפשרי מכיוון שלתוכנה אין שום שליטה על ה- scheduling של החוטים במערכת ההפעלה בסוף הריצה המונה יכיל ערך 0 בניגוד למה שציפינו נגדיר מבנה נתונים מסוים כ- safe thread אם הפעלת המתודות שלו בכמה חוטים במקביל אינה תלויה בתזמון של מערכת ההפעלה )לא ניתן את ההגדרה הפורמאלית כאן, האינטואיציה ברורה( מחלקת UnsafeCounter אינה,thread safe מכיוון שהתוצאה של הפעלת מתודת addvalue אינה דטרמיניסטית בהמשך הפרק נלמד דרכים לסנכרון בין חוטים, כך שנקבל מבני נתונים שהם thread safe 01
13 ב) מניעה הדדית קטע הקוד של read-modify-write בדוגמה של UnsafeCounter מהווה דוגמה קלאסית ל- section :critical קטע קוד שצריך להתבצע בצורה אטומית )כפעולה אחת( הדרך הפשוטה ביותר להגן על critical section היא מניעה הדדית ( mutual :)exclusion אם לא נאפשר ליותר מחוט אחד לבצע את הפעולות של ה-,critical section אז מובטח לנו שהחוטים לא יפריעו אחד לשני הדרך הפשוטה ביותר להשיג מניעה הדדית ב- Java היא באמצעות :synchronized statements Object o = new Object(); synchronized(o) { בדוגמה אנחנו רואים סינכרוניזציה על משתנה o מטיפוס Java- Object ניתן לעשות סינכרוניזציה על כל אובייקט) בעצם, לכל אובייקט ב- Java קיים מנעול מובנה הכללים לשימוש במנעול הזה פשוטים מאוד: בתחילת הריצה המנעול פתוח אם חוט A קורא ל-( synchronized(o והמנעול פתוח, אז החוט מצליח לנעול אותו אם חוט B מנסה לקרוא ל-( synchronized(o והמנעול סגור, B יחכה על המנעול של o עד שהוא ייפתח )ריצת חוט B מפסיקה ותמשך רק כאשר יצליח לתפוס את המנעול( כאשר חוט A מסיים את ה- block,synchronized המנעול נפתח כפי שכבר אמרנו, לכל אובייקט ב- Java יש מנעול מובנה ולכן למחלקת Object קיימות מתודות lock() ו-() unlock כתיבת הבלוק בצורה olock(); ; ounlock(); שקולה לקטע קוד synchronized(o) { נשים לב שכאשר כמה חוטים מחכים לאותו מנעול, רק אחד מהם יצליח לתפוס אותו כאשר הוא ייפתח )אין שום הבטחה לגבי החוט המנצח( 01
14 כעת, נראה איך ניתן להגן על ה- counter שלנו באמצעות synchronized :statement public void addvalue(int val) { synchronized(this) { counter = counter + val; אם שני החוטים ינסו להפעיל את המתודה,addValue הראשון שיגיע לשורה synchronized(this) יתפוס את המנעול של ה- Counter והשני יצטרך לחכות עד שהראשון יסיים את הפעולה שלו השגנו מניעה הדדית! במקרה שלנו ה- section critical של מתודת addvalue הוא המתודה כולה במקרים כאלה ניתן להצהיר על המתודה בתור :synchronized public synchronized void addvalue(int val) { counter = counter + val; ה- compiler של Java יפעיל את הבלוק של synchronized(this) פרוס על כל 1 המתודה כמה דברים חשובים שצריך להבין על מנעולים: 5 מנעול הוא :per object אם חוט אחד עושה synchronized(o1) וחוט שני עושה,synchronized(o2) אז החוטים לא יפריעו אחד לשני 0 אם מגנים על אובייקט מסוים באמצעות מנעול, אז כל הגישות לאובייקט צריכות להיות מוגנות )לדוגמה, אם ישנן שתי פונקציות שונות שניגשות לאובייקט שדורש הגנה, אז בשתי הפונקציות צריכה להיות סינכרוניזאציה על אותו המנעול 1 כדאי לנעול את ה- section critical הקטן ככל האפשר: חשוב להבין שמניעה הדדית בעצם מבטלת את המקביליות ואם ה- section critical יהיה גדול מדי, הביצועים ייפגעו נראה עכשיו דוגמאות שמדגישות את כל הנקודות הללו: דוגמה 5: public class WrongSynchronization { //WRONG SYNCHRONIZATION - DON'T DO THAT!!! private int counter = 0; public synchronized void addvalue(int val) { counter = counter + val; 04 1 במקרה של מתודה סטטית ה- synchronization יתבצע על האובייקט שמחזיק את ה- class של המתודה
15 public void removevalue(int val) { counter = counter - val; בדוגמה לעיל יש לנו שתי מתודות addvalue ו- removevalue, שתיהן ניגשות לאותו אובייקט משותף מתודת addvalue היא,synchronized אבל מתודת synchronized אינה removevalue נניח שחוט A מתחיל את המתודה addvalue ונועל את המנעול של this כאשר חוט B יתחיל את המתודה,removeValue הוא לא ינסה לנעול אף מנעול וייגש ל- counter בלי שום בעיה לא השגנו מניעה הדדית והתוצאות עלולות להיות שגויות public class WrongSynchronization { //WRONG SYNCHRONIZATION - DON'T DO THAT!!! private int counter = 0; private Object o1 = new Object(); private Object o2 = new Object(); public void addvalue(int val) { synchronized(o1) { counter = counter + val; דוגמה 0: public void removevalue(int val) { synchronized (o2) { counter = counter - val; בדוגמה לעיל מתודות addvalue ו- removevalue מנסות לתפוס מנעולים שונים, ולכן חוט A שמפעיל את addvalue לא יפריע לחוט B שמפעיל את removevalue לא השגנו מניעה הדדית והתוצאות עלולות להיות שגויות public class WrongSynchronization { //WRONG SYNCHRONIZATION - DON'T DO THAT!!! private int counter = 0; דוגמה 1: public void addvalue(int val) { synchronized(this) { counter = counter + val; somelongcomputation(); 05
16 בדוגמה לעיל מתודת addvalue מבצעת חישוב ארוך בנוסף לגישה ל- counter החישוב אינו מהווה חלק מה- section critical אם שני החוטים יפעילו את מתודת addvalue רק אחד מהם יוכל לרוץ, והחישוב הארוך יתבצע בצורה סדרתית ללא צורך אנחנו שואפים למקבל דברים עד כמה שאפשר, לכן במקרה כזה צריך לשים את הבלוק של synchronized רק סביב ה- critical section Deadlocks השימוש במנעולים יכול ליצור בעיות רבות נדרשת מיומנות מסוימת על מנת לתכנן את השימוש במנעולים כך שנקבל thread safety מבלי לפגוע במקביליות של התוכנה בפרק זה נראה בעיה נוספת נפוצה בשימוש במנעולים deadlocks נסתכל על הקוד הבא שמיועד לממש רשימה מקושרת: public class Node { public int value = 0; public Node next = null; public Node prev = null; //increment all the next nodes starting from this one synchronized public void incforward() { thisvalue++; if (next!= null) nextincforward(); //increment all the previous nodes starting from this one synchronized public void incbackward() { thisvalue++; if (prev!= null) previncbackward(); מחלקת Node מהווה מימוש סטנדרטי של צומת ברשימה מקושרת דו-כיוונית, עם שדות value, next and prev מתודה incforward() עוברת על כל 06
17 הצמתים הבאים אחרי הצומת הנוכחי ומקדמת את שדה ה- value שלהם מתודה incbackward() עושה אותו הדבר רק בכיוון ההפוך נשים לב שהמתודות incforward() ו-() incbackward הן מתודות,synchronized כלומר בתחילת הריצה של המתודה נתפס המנעול של ה- Node המתאים לכאורה מחלקת Node נראית thread safe נחשוב על רשימה מקושרת עם שני צמתים )נקרא להם first ו- second לשם הנוחות( נדמיין ריצה שבה חוט אחד מפעיל את המתודה firstincforward() ובמקביל החוט השני מפעיל את המתודה secondincbackward() thread 1 thread 2 First step first node second node Second step thread 1 thread 2 first node second node באיור למעלה ניתן לראות את ההתקדמות של המערכת בשלב הראשון החוט הראשון נועל את המנעול של first node והחוט השני נועל את המנעול של second node בשלב השני החוט הראשון מנסה לנעול את המנעול של second node ונתקע כי המנעול תפוס ע"י החוט השני באותו הזמן החוט השני מנסה לנעול את המנעול של first node ונתקע כי המנעול תפוס ע"י החוט הראשון הגענו למצב שהחוטים של המערכת מחכים אחד לשני והמערכת לא תתעורר אף פעם deadlock 07
18 כללית, ניתן לאפיין את מצב ה- deadlock כמעגל בגרף התלויות של החוטים )במקרה שלנו החוט הראשון תלוי בהתקדמות של החוט השני והחוט השני תלוי בהתקדמות של החוט הראשון מעגל( סוגיית ה- deadlocks מעלה בפנינו כמה שאלות מעניינות: איך ניתן לזהות deadlock בצורה יעילה? איך ניתן למנוע?deadlock מה עושים כאשר deadlock בכל זאת קורה? לא נתעמק בנושא הזה במהלך הניסוי, אך חשוב להבין מה זה deadlock ומתי הוא יכול לקרות 08
19 מוניטורים נחשוב על הדוגמה הקלאסית של producer/consumer נניח ויש לנו תור כך ש- producer מוסיף איברים לתור ו- consumer מוציא איברים מהתור אם התור ריק, ה- consumer אמור לחכות עד שהאיבר הבא יתווסף נסתכל על האפשרות הנאיבית לממש את הרעיון: public class ProducerConsumer1 { //BUSY WAIT - DON'T DO THAT!!! Queue<Integer> workingqueue = new LinkedList<Integer>(); public synchronized void produce(int num) { workingqueueadd(num); public Integer consume() { while(true) { synchronized(this) { if (!workingqueueisempty()) { return workingqueuepoll(); בדוגמה הזאת ה- consumer נועל את התור ובודק שהתור אינו ריק אם התור ריק, אז ה- consumer משחרר את המנעול )על מנת לתת ל- producer את ההזדמנות לגשת לתור( וחוזר על הבדיקה בלולאה אינסופית הגישה הזאת נקראת לפעמים :busy-wait היא בודקת את התנאי בצורה "אקטיבית", מבזבזת את ה- cycles CPU לשווא ואינה מקובלת בעליל הפתרון שמונע מאיתנו את השימוש ב- wait busy פותח ע"י Hoare ו- Hansen בשנת 5040 הרחוקה ונקרא מוניטור בנוסף לפעולות של מנעול, ה- ו- notify : wait מציע פעולות של monitor על מנת לחכות לתנאי מסוים, החוט צריך קודם להחזיק את ה- monitor ואז לעשות לו monitorwait() פעולת wait() משחררת את ה- monitor בצורה אוטומטית ומכניסה את החוט לתור של ה"ממתינים" על ה- monitor אם התנאי מתקיים ואנחנו רוצים להעיר את אלה שמחכים ל- monitor, קוראים למתודה monitornotifyall() אשר מעירה את כל החוטים שמחכים ל- monitor החוט שהעירו אותו צריך לתפוס את ה- monitor שוב על מנת להמשיך את הריצה נסתכל על הניסיון השני לפתרון של,producer-consumer :monitors עכשיו בעזרת public class ProducerConsumer2 { 09
20 //BUGGY - DON'T DO THAT Queue<Integer> workingqueue = new LinkedList<Integer>(); public synchronized void produce(int num) { workingqueueadd(num); notifyall(); public synchronized Integer consume() throws InterruptedException { if (workingqueueisempty()) { wait(); return workingqueuepoll(); בדוגמה הזאת פעולת consume() בודקת אם התור ריק, במידה ואכן התור ריק, אז החוט מתחיל לחכות על ה- monitor של this פעולת produce() מכניסה איבר לתור ומעירה את כל החוטים שמחכים על ה- monitor של this בדוגמה שתוארה לעיל התוכנית לא תעבוד נכון במקרים מסוימים נסתכל על המצב שבו יש יותר מ- consumer אחד שמחכה על ה- monitor ברגע שה- producer יקרא למתודת notifyall() כל ה- consumers יתעוררו החוט הראשון שיצליח לתפוס את ה- monitor יקרא את הערך החדש מראש התור החוטים הבאים שיתפסו את ה- monitor ייגשו לתור ריק למרות שזה לא אמור לקרות הבעיה נובעת מכך שחוט לא יודע כמה זמן עובר מהרגע שהעירו אותו )כיוון שהתנאי עליו הוא חיכה התקיים( עד הרגע שהוא מצליח לתפוס את ה- monitor הפתרון הוא כמובן לבדוק את התנאי גם אחרי שהחוט ממשיך את הריצה נקבל את הפתרון הבא: public class ProducerConsumer3 { Queue<Integer> workingqueue = new LinkedList<Integer>(); public synchronized void produce(int num) { workingqueueadd(num); notifyall(); public synchronized Integer consume() throws InterruptedException { while (workingqueueisempty()) { wait(); return workingqueuepoll(); 11
21 Concurrent Collections כפי שבוודאי ידוע לכם, ב- Java קיים אוסף מכובד מאוד של מחלקות המממשות collections מסוגים שונים )כגון מחלקות שמממשות Set, List, וכו'( לצערנו, לא ניתן להשתמש ב- collections האלה בצורה ישירה בסביבה,multi-threaded כי המחלקות האלה אינן thread-safe הפתרון בא ב- package בשם javautilconcurrent )דרך אגב, כל המחלקות שדיברנו עליהן עד עכשיו שייכות ל- package הזה( ה package- מכיל סוגים רבים של thread-safe בצורה Java שנכתבו ע"י אנשי collections חשוב להדגיש שמחלקות ה- collections שנמצאות ב- javautilconcurrent נכתבו בחוכמה רבה ע"י מקצוענים בתחום לכן אם אתם צריכים להשתמש ב- collection שהוא thread-safe תמיד עדיף להשתמש ב- collections הקיימים ולא להמציא את הגלגל מחדש )למרות שזה הרבה יותר כיף( רשימה חלקית של collections הקיימים ב- javautilconcurrent )לפרטים אפשר לעיין באתר של :)Sun BlockingQueue - בנוסף לפעולות Queue הרגילות תומך בפעולות חוסמות של הוצאת איבר )מחכים כל עוד התור ריק( והכנסת איבר )מחכים כל עוד כמות האיברים מעל סף מסוים( ConcurrentHashMap כפי שניתן לנחש לפי השם זו מחלקה שמממשת HashMap עם אפשרות לעבודה מקבילית של כמות לא מוגבלת של חוטים בנוסף קיימת אפשרות לבצע פעולת V) putifabsent(key K, value הפעולה בודקת בצורה אטומית האם האיבר עם המפתח K נמצא ב- map,hash ואם האיבר אינו נמצא מכניסים אותו ל- map hash עם ערך V ConcurrentSkipListSet מממש את הממשק של Set בצורה שתומכת בעבודה מקבילית של חוטים רבים העבודה עם thread-safe collections של Java מקלה בהרבה את התכנות המקבילי )אך לא פותרת את כל הבעיות( 10
22 שאלות הכנה למפגש הראשון מה ההבדל בין הפעלת המתודה threadstart() לבין הפעלת המתודה?threadrun() ניזכר בתוכנית HelloWorld הראשונה שלנו הנה הקטע של הרצת ה- :threads for (Thread thread : threads) { threadstart(); // start the threads 5 0 for (Thread thread : threads) { try { threadjoin(); catch (InterruptedException e) { eprintstacktrace(); מה היה קורה אילו היינו מורידים את הלולאה השנייה )של?)threadjoin תריצו את התוכנית בגרסה ללא threadjoin והראו את הפלט מה היה קורה אילו היינו קוראים ל- threadjoin ישר אחרי threadstart )בתוך הלולאה הראשונה(? תריצו את התוכנית בגרסה של join אחרי start והראו את הפלט 1 מה יקרה אם חוט מסוים יבצע את הפקודה הבאה: ThreadcurrentThread()join(); נתונה מחלקת UnsafeBox שאמורה להיות thread safe מה הטעות במימוש המחלקה? תארו ריצה שבה התוכנית תיפול איך ניתן לתקן זאת? public class UnsafeBox { // NOT THREAD-SAFE - DON'T DO THAT!!! private int x = 1; private int y = 2; 6 public synchronized void doublevars() { x = y; y = y*2; public float calculatesmt(float val) { return val / (y - x); 11
23 public class Node { public int value = 0; public Node next = null; public Node prev = null; 1 ניזכר במחלקה שמדגימה את ה- deadlock : //increment all the next nodes starting from this one synchronized public void incforward() { thisvalue++; if (next!= null) nextincforward(); //increment all the previous nodes starting from this one synchronized public void incbackward() { thisvalue++; if (prev!= null) previncbackward(); כתבו מחלקת RepairedNode שתתקן את הבעיות של Node ולא תגרום ל- deadlock )בלי להשתמש במנעול גלובאלי( כתבו תוכנית NodeTest שתבדוק את נכונות המחלקה התוכנית אמורה לעשות את הדברים הבאים: - ליצור רשימה מקושרת באורך 522, כל Node מכיל ערך 2 - להריץ לולאה של 522 איטרציות, בכל איטרציה רצים שני,threads כך שהחוט הראשון מעדכן את הרשימה ע"י קריאה למתודת incforward של ה- Node הראשון, והחוט השני מעדכן את הרשימה ע"י קריאה למתודת incbackward של ה- Node האחרון - לבסוף התוכנית בודקת שהערכים בכל אחד מה- Nodes שווים ל- 200 אמורה להיכנס ל- deadlock NodeTest RepairedNodeTest אמורה להסתיים בהצלחה נא לצרף לדו"ח מכין את כל הקוד הרלוונטי 4 ניזכר בדוגמה של :producer-consumer public class ProducerConsumer3 { Queue<Integer> workingqueue = new LinkedList<Integer>(); public synchronized void produce(int num) { workingqueueadd(num); notifyall(); public synchronized Integer consume() throws InterruptedException { while (workingqueueisempty()) { wait(); return workingqueuepoll(); 11
24 שנו את המחלקה כך שהתור אף פעם לא יכיל יותר מעשרה איברים כאשר ה- producer רואה שהתור מכיל עשרה איברים, הוא נחסם עד שיהיה בשבילו מקום פנוי 14
25 4 בניית תוכנה מקבילית 15 חלוקת העבודה למשימות הצעד הראשון והחשוב ביותר בבנייה של תוכנה מקבילית הוא חלוקת העבודה למשימות אידיאלית, המשימות צריכות להיות בלתי תלויות המשימות הבלתי תלויות יכולות להתבצע במקביל ובכך להגדיל את ה- throughput של התוכנה במקרים בהם לא ניתן להפריד לגמרי בין המשימות צריך להקטין את כמות התעבורה בין המשימות לרמה מינימאלית הגודל של כל משימה הוא נושא רגיש עם השפעה רבה על הביצועים מצד אחד, משימות קטנות מאפשרות גמישות רבה יותר לביצוע מקבילי וחלוקת עומסים מאוזנת יותר מצד שני, הניהול של הרבה משימות קטנות )כולל תזמון, הקצאה ושחרור משאבים וכו'( יכול להוות תקורה מיותרת The Executor Framework עד עכשיו כאשר דיברנו על תוכנות מקביליות קישרנו את הביצוע של משימות לריצה של חוטים גישה זו יכולה לסבך את ה- design של התוכנית היינו רוצים לחשוב על התוכנית במושגים של המשימות אותן עליה לבצע ולא לערבב את החלק הלוגי של התוכנית )משימות( עם מנגנוני ההרצה )חוטים( משימה היא יחידה לוגית של העבודה שצריכה להתבצע, חוטים הם המנגנון שמאפשר ביצוע מקבילי של משימות ב- Java קיימת אפשרות להפריד בין המשימות לאופן הביצוע שלהן האבסטרקציה העיקרית לביצוע משימות נקראת Executor public interface Executor { void execute(runnable command); Executor הוא ממשק פשוט, אך הוא מהווה בסיס למערכת מחלקות שלמה לביצוע אסינכרוני של משימות המשימות מתוארות ע"י ממשק
26 Runnable והבקשה לביצוע של משימה )קריאה למתודת )execute מופרדת מהביצוע עצמו )כל מימוש של ממשק ה- Executor רשאי לבצע את המשימה הנתונה בכל זמן שהוא( נתאר עכשיו דוגמאות למימושים פשוטים של ממשק ה- Executor המימוש הפשוט ביותר של Executor הוא ביצוע סינכרוני של המשימה: public class WithinThreadExecutor implements Executor { public void execute(runnable r) { rrun(); ; אפשר לשאול למה צריך את ה- Executor הזה בכלל, הרי יכולנו פשוט להריץ את מתודת run() של ה- Runnable חשוב להדגיש: מבחינת הלקוח של ה- Executor אופן ההרצה יכול להיות שקוף המשימה יכולה להיות מורצת סינכרונית בתוך אותו ה- thread כמו שראינו בדוגמה לעיל, או אסינכרונית ב- thread נפרד: public class ThreadPerTaskExecutor implements Executor { public void execute(runnable r) { new Thread(r)start(); ; הערך של ההפרדה בין הגשת המשימה לבין הביצוע שלה הוא שניתן לשנות את מדיניות ההרצה באופן שקוף לשאר הקוד מדיניות ההרצה מגדירה את הנקודות ההבאות: באיזה חוט תבוצע המשימה מהו הסדר של ביצוע המשימות,LIFO(,FIFO עדיפויות( כמה משימות יכולות להיות מורצות בו זמנית כמה משימות יכולות לחכות לביצוע בו זמנית מה צריך לעשות לפני\אחרי ביצוע המשימה כמובן שהמדיניות האופטימאלית נקבעת לכל בעיה בנפרד הנקודה החשובה היא שבכל מקום שבו מופיע קוד מהצורה של Thread(runnable)start() ואתם חושבים שבעתיד קיימת אפשרות שתצטרכו מדיניות הרצה גמישה יותר, כדאי להתחיל להשתמש ב- Executor במקום 16
27 Thread Pools אחד ה- Executors השימושיים ביותר הוא Thread pool כפי שניתן לנחש מהשם, thread pool הוא מאגר חוטים הומוגניים שמקושר לתור של משימות החוטים במאגר חיים לפי הפרוטוקול הבא: המתן עד שתהיה משימה פנויה בתור המשימות בצע את המשימה חזור לחכות למשימה הבאה Executor job queue Thread Pool לביצוע המשימה ב- pool thread יש מספר יתרונות על פני הגישה של thread-per-task השימוש המחודש בחוטים הקיימים עושה אמורטיזציה לזמן יצירת החוטים, בנוסף משימה לרב לא צריכה לחכות עד שחוט חדש ייווצר ולכן זמן ביצוע המשימה קטן 17
28 הספריות של Java מציעות מגוון רב של thread pools עם קונפיגורציות שונות ניתן לייצר thread pool ע"י קריאה לאחת המתודות הסטטיות של מחלקת :Executors newfixedthreadpool() מחזירה thread pool אשר משתמש במספר קבוע של חוטים, גודל תור ההמתנה למשימות אינו מוגבל newcachedthreadpool() מחזירה executor אשר משתמש במספר לא מוגבל של חוטים: אם במאגר החוטים קיים חוט פנוי אז המשימה תלך אליו, אחרת ייווצר חוט חדש שיטפל במשימה החוטים שאין עבורם משימות יתבטלו אחרי timeout מסוים, כך שבמצב idle ה- pool thread לא צורך משאבים newsinglethreadexecutor() מחזירה executor עם חוט יחיד אשר מטפל במשימות אחת אחרי השנייה בדוגמה הבאה ניתן לראות את השימוש ב- pool thread עם כמות קבועה של חוטים שרת ה- web הדמיוני מקבל בקשות מהרשת ומבצע אותן בצורה אסינכרונית נשים לב שהיצירה של ה- executor היא שורה בודדת והגשת המשימה מתבטאת בביטוי execexecute(task) אין יותר פשוט מזה class TaskExecutionWebServer { private static final int NTHREADS = 100; private static final Executor exec = ExecutorsnewFixedThreadPool(NTHREADS); public static void main(string[] args) throws IOException { ServerSocket socket = new ServerSocket(80); while (true) { final Socket connection = socketaccept(); Runnable task = new Runnable() { public void run() { handlerequest(connection); ; execexecute(task); מחזור החיים של executor ראינו איך ניתן לייצר,executors אבל לא ראינו איך ניתן לסגור אותם סביר להניח ש- executor מפעיל חוטים בזמן הפעילות שלו וה- JVM אינו יכול לסיים את העבודה כל עוד ישנם חוטים חיים במערכת לכן אי-סגירת ה- executor יכולה למנוע מהמערכת לצאת בצורה תקינה האתגר בסגירת executor נובע מהעובדה שבכל זמן נתון המשימות שהוגשו ל- executor יכולות להימצא במצבים שונים: חלק מהמשימות כבר הסתיימו, חלק מהמשימות מתבצעות עכשיו וחלק מהמשימות רק ממתינות 18
29 לביצוע כל המצבים האלה נלקחים בחשבון בממשק ExecutorService שמרחיב את Executor ע"י הוספה של מתודות לניהול מחזור החיים public interface ExecutorService extends Executor { void shutdown(); List<Runnable> shutdownnow(); boolean isshutdown(); boolean isterminated(); boolean awaittermination(long timeout, TimeUnit unit); // additional convenience methods for task submission ניתן לסיים את הביצוע של ExecutorService בשתי דרכים מתודת shutdown() מנסה לסיים את הביצוע של ה- ExecutorService בצורה מנומסת כל המשימות שכבר הוגשו ממשיכות את הביצוע כרגיל אבל משימות חדשות לא מתקבלות מתודת shutdownnow() מנסה לסיים את הביצוע בצורה אגרסיבית היא מנסה לבטל את המשימות שכבר מתבצעות, ובנוסף זורקת את כל המשימות מתור המשימות של ה- ExecutorService ניתן להמתין לסיום הפעילות של ExecutorService באמצעות מתודת awaittermination() להלן הדוגמה של שרת ה- web שראינו קודם, עכשיו עם אפשרות לסיום העבודה: class LifecycleWebServer { private static final int NTHREADS = 100; private final ExecutorService exec = ExecutorsnewFixedThreadPool(NTHREADS); public void start() throws IOException { ServerSocket socket = new ServerSocket(80); while (!execisshutdown()) { try { final Socket conn = socketaccept(); execexecute(new Runnable() { public void run() { handlerequest(conn); ); catch (RejectedExecutionException e) { if (!execisshutdown()) log("task submission rejected", e); public void stop() { execshutdown(); void handlerequest(socket connection) { Request req = readrequest(connection); if (isshutdownrequest(req)) stop(); else dispatchrequest(req); 19
30 שאלות הכנה למפגש השני נתונה הבעיה הבאה: יש לבצע indexing לתוכן של ספרייה בצורה רקורסיבית )בדומה למה שנעשה ב- desktop )google התוצאה של ה- indexing נשמרת במבנה נתונים מסוים נתונה מחלקה אשר יודעת לעשות indexing לקובץ בודד תארו באופן כללי את אופן הביצוע של הבעיה: איך הייתם מגדירים משימה? איך נוצרות משימות חדשות? האם יש נתונים משותפים בין המשימות? ניתן\לא ניתן להימנע מכך? מהי הדרך להריץ את המשימות? בדוגמאות של ה- Executors : מתי חוזרת הקריאה למתודת execute() של?ThreadPerTaskExecutor?WithinThreadExecutor השווה את זמן המתנה בתור של משימה ב- executors שמוחזרים ע"י המתודות,newFixedThreadPool(),newCachedThreadPool() newsinglethreadexecutor() ניזכר בתוכנית HelloWorld הראשונה שלנו public class HelloWorld implements Runnable { public void run() { Systemoutprintln("Hello world from thread number " + ThreadcurrentThread()getName()); public static void main(string[] args) { Thread[] threads = new Thread[10]; // create an array of threads for(int i = 0; i < 10; i++) { String threadname = IntegertoString(i); threads[i] = new Thread(new HelloWorld(), threadname); // create threads for (Thread thread : threads) { threadstart(); // start the threads terminate for (Thread thread : threads) { try { threadjoin(); // wait for the threads to catch (InterruptedException e) { eprintstacktrace(); 11
31 ה) Systemoutprintln("That's all, folks"); בתוכנית זו ניתנו שמות לחוטים שנו את התוכנית כך שינתנו שמות למשימות, כל משימה תדפיס number, Hello world from task כתבו את התוכנית כך שתשתמש ב- executors של )fixed size pool( Java זכרו לחכות לסיום הריצה של ה- executor לפני הדפסת משפט הסיום הריצו את התוכנית וצירפו את ההדפסה לדו"ח מכין כתבו מימוש ל- Executor SingleThreadExecutor ב: executor- זה קיים חוט בודד, כל המשימות החדשות נכנסות לתור ההמתנה שתמשו ב- queue blocking של )Java כאשר החוט מסיים את ביצוע המשימה הוא פונה לתור המשימות ומחכה למשימה הבאה 1 תכתבו תוכנית multi-threaded שבודקת את הנכונות של ה- executor 10
32 5 חומר לקריאה עצמית ה- tutorial באתר של sun )רמה נמוכה יחסית, משהו להתחיל איתו(: Java Concurrency in Practice by Bryan Goetz, Dough Lea et al הספר על התכנות מקבילי ב- Java )נכתב ע"י האנשים המובילים בתחום( The art of multiprocessor programming by Maurice Herlihy and Nir Shavit ספר על תכנות מקבילי כללי יותר, עמוק יותר ותיאורטי יותר, עם דגש על הצד האלגוריתמי מומלץ בחום! הקורסים הרלוונטיים בתחום: מערכות הפעלה ) או ( קורס בסיסי לכל מי שהולך להתעסק עם מחשבים תכנות מקבילי ומבוזר )014142( קורס פרקטי שמכסה חלק מהדברים שדיברנו עליהם בניסוי ועוד עקרונות של מערכות מבוזרות אמינות )264040( קורס תיאורטי שמדבר על בעיות שונות במערכות מבוזרות מומלץ בחום! מערכות מבוזרות )014115( דומה ל , עם פחות אלגוריתמים ויותר קוד המעבדה למערכות תוכנה מציעה כל סמסטר פרויקטים הנוגעים באספקטים שונים של תכנות מקבילי ומבוזר 11
Microsoft PowerPoint - 10_threads.ppt
נוש אים מתקדמים ב Java תכ נות מ ר ובה חו ט י ם אוהד ברזילי אוניברסיטת תל אביב מק בי ל יות ריבוי מעבדים processors) (multi זמן עיבוד slicing) (time ל עו מת חלוק ת רמת התהליך (multithreading) ההפעלה processes)
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ
אוניברסיטת בן גוריון בנגב תאריך המבחן: 12.02.17 שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ד 3 שעות משך
קרא עודמהוא לתכנות ב- JAVA מעבדה 3
מבוא לתכנות ב- JAVA מעבדה 3 נושאי התרגול לולאות ניפוי שגיאות לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד
אוניברסיטת בן גוריון בנגב תאריך המבחן: 29.01.19 שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות 202.1.9031 מס' הקורס : מיועד לתלמידי : הנדסת תעשיה וניהול שנה תשע"ט א' סמ' א' מועד 3 שעות משך
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java אלכסיי זגלסקי ויעל אמסטרדמר 1 בירוקרטיה אלכסיי זגלסקי שעת קבלה: שני 13:00-14:00, בתיאום מראש משרד: בניין הנדסת תוכנה, חדר 209 יעל אמסטרדמר שעת קבלה: חמישי 15:00-16:00,
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב מחרוזות, חתימה של פונקציה ומעטפות תוכן עניינים טיפוסים מורכבים טיפוסים מורכבים ערך שם טיפוס 12 m int undef. x boolean true y boolean arr int[] כאלה שעשויים להכיל יותר מערך פרימיטיבי אחד
קרא עודמספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי
מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בינסקי הנחיות: יש לענות על כל השאלות. יש לענות על כל
קרא עודמבוא לתכנות ב- JAVA תרגול 11
מבוא לתכנות ב- JAVA תרגול 11 רשימה מקושרת אוסף סדור של איברים מאותו טיפוס. קודקוד ברשימה )Node( מכיל את המידע + הצבעה לקודקוד הבא ברשימה data next first רשימה :)List( מיוצגת ע"י מצביע לאיבר הראשון ברשימה
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java 1 מנהלות אתר הקורס: http://courses.cs.tau.ac.il/software1/1516b/ מתרגלים: ברית יונגמן )שעת קבלה: שלישי ב- 8:00 בתיאום מראש( לנה דנקין )שעת קבלה: שלישי ב- 17:00,
קרא עודMicrosoft Word B
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: 1. ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב המחלקה Object תוכן עניינים Object הורשה והמחלקה ערך שם טיפוס DynamicIntArray da data size incrementsize DynamicArray תזכורת - Object[] data; int size; int incrementsize; DynamicArray זה
קרא עודMicrosoft PowerPoint - rec3.ppt
תכנו ת מונח ה עצ מים משתני מחלקה, עצמים מוכלים ועצמים מוצבעים א וה ד ברז יל י א ונ יברס י ט ת תל אביב משתנ י מח ל קה Static Members משתני מחלקה members) (static משתנים סטטיים מוגדרי ם בתוך מח לקה ואולם
קרא עודפתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.
פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9. הדפסה ראשונה: מתבצעת לולאה שרצה מאפס עד אורך המחרוזת.
קרא עודHomework Dry 3
Homework Dry 3 Due date: Sunday, 9/06/2013 12:30 noon Teaching assistant in charge: Anastasia Braginsky Important: this semester the Q&A for the exercise will take place at a public forum only. To register
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב הממשקים Iterable,Set ו- Iterator תוכן עניינים מבנה נתונים מבנה נתונים מבנה נתונים הוא container של עצמים שמוגדרות עליו מספר פעולות למשל קבוצה של עצמים (אוסף ללא חזרות) עם הפעולות: הוספת
קרא עודתרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש המתרגם משימה: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם 2 שאלות האם כבר יש
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב שימוש במחסנית - מחשבון תוכן עניינים prefix כתיבת ביטויים ב-,infix ו- postfix postfix prefix,infix ביטויים ב- כתיבת ו- infix נוסח כתיבה ב- (operator אנו רגילים לכתוב ביטויים חשבוניים כדוגמת
קרא עודPowerPoint Presentation
תכנות מתקדם בשפת Java אוניברסיטת תל אביב 1 תוכנה 1 תרגול 3: עבודה עם מחרוזות )Strings( מתודות )Methods( 1 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 2 מחרוזות )STRINGS( 3 מחרוזות String s = Hello ; מחרוזות
קרא עודיוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן
יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן מתרגלים: הנחיות: השאלות. כל על לענות עליכם משקל. שוות
קרא עודמקביליות
PROMELA גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון עדכון אחרון: 21:40 15/06/2013 2 שפת מ פ ר ט עם ס מ נ ט יק ה מוגדרת באופן מתמטי "שפת תכנות" למודלים המטרה: לאפשר גם לכאלה שאינם חוקרים בתחום לבנות
קרא עודמבוא לתכנות ב- JAVA תרגול 7
מבוא לתכנות ב- JAVA תרגול 8 תזכורת - מבנה של פונקציה רקורסיבית.2 פונקציה רקורסיבית מורכבת משני חלקים עיקריים 1. תנאי עצירה: מקרה/מקרים פשוטים בהם התוצאה לא מצריכה קריאה רקורסיבית לחישוב צעד רקורסיבי: קריאה
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 5 מחרוזות, חתימות ורקורסיה מחרוזות רצף של תווים רקורסיה קריאה של מתודה לעצמה באופן ישיר או עקיף ראינו בהרצאה מחרוזות: תווים, חתימות: העמסה- String,הצהרה, overloading אתחול רקורסיה:
קרא עודמבוא למדעי המחשב - חובלים
החוג למדעי המחשב אוניברסיטת חיפה מבוא למדעי המחשב סמסטר א' תשע"ג בחינת סיום, מועד ב', 20.02.2013 מרצה: ריטה אוסדצ'י מתרגלת: נעמה טוויטו מדריך מעבדה: מחמוד שריף משך המבחן: שעתיים חומר עזר: ספר של Kernighan
קרא עודSlide 1
1 אובייקטים היום בתרגול: 2.)objects מחלקות )classes( ואובייקטים )מופעים, )fields( שדות המחלקה שיטות הכמסה )methods של מחלקה. ( class מחלקה - עד עכשיו השתמשנו בעיקר בטיפוסים מובנים ופונקציות המבצעות חישובים
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב תכנות מונחה אובייקטים תוכן עניינים טיפוסי נתונים מורכבים המחלקה String תזכורת לשימוש שעשינו במחלקה String str = new String( Hello ); s.o.p(str.tostring()); s.o.p(str.charat(4)); s.o.p(str.equals(
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג מנ' אב תשע"ז 15.08.17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' ב' שנה תשע"ז 3 שעות
קרא עודבחן במערכות הפעלה
אוניברסיטת בן-גוריון בנגב, המחלקה למדעי המחשב בוחן אמצע במערכות הפעלה מרצים: איתי דינור, דני הנדלר ורוברט יעקבשוילי. מתרגלים: אור דינרי, אחמד דרובי, מתן דרורי, צחי ספורטה, רועי עוזיאל ואריאל תלמי. ענו
קרא עודמבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי
מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדיקות אחרונות לפני מסירה )עמודים 8-11( מבנה השאלון 5
קרא עודPowerPoint Presentation
== vs equals תוכנה תרגול 7 :מנשקים, פולימורפיזם ועוד Point p = new Point(,) Point p = new Point(,) p == p p.equals(p) מתי נכון להשתמש בכל אחד מהם? שימו לב, במחלקה שכתבתם בעצמכם יש לכתוב מתודת equals על
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב את
קרא עודמקביליות
תכונות שמורה Invariant Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 בדיקות מודל Checking( )Model מערכת דרישות מידול פירמול בדיקות מודל )Model Checking( מודל של המערכת תכונות פורמליות סימולציה
קרא עודעוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ
עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכמה אופנים. בואו ניקח מחלקת צעצוע. אנחנו מעונינים להגדיר
קרא עודמקביליות
תכונות בטיחות Safety Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 תזכורת: תכונות זמן ליניארי Linear Time Properties תכונות זמן-ליניארי מתארות קבוצת עקבות שהמערכת צריכה לייצר מכוונים ללוגיקה
קרא עודSlide 1
מבוא למדעי המחשב משפחות של מחלקות ומחלקות מופשטות תזכורת בשיעור הקודם ראינו מחלקה של Student והרחבה שלה למחלקה של Milgae למעשה Student יכול לעמוד בראש היררכיה שלמה של מחלקות שונות של סטודנטים למשל, בנוסף
קרא עודסדנת תכנות ב C/C++
פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבוא למחשבים ושפת C קוד הקורס: 2-7028510 תאריך בחינה: 15.2.2017 משך הבחינה: שעתיים שם המרצה: ד"ר אופיר פלא חומר עזר: פתוח שימוש במחשבון: לא הוראות כלליות:
קרא עודPowerPoint Presentation
תוכנה תרגול 7 :מנשקים, פולימורפיזם ועוד * לא בהכרח בסדר הזה == vs equals Point p = new Point(,2) Point p2 = new Point(,2) p == p2 p.equals(p2) מתי נכון להשתמש בכל אחד מהם? שימו לב, במחלקה שכתבתם בעצמכם
קרא עודמשימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק
משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות 2 הפשטה שאלות כצעד ראשון נפתור בעיה הרבה יותר פשוטה האם כבר
קרא עודאוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו
אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', 31.1.2017 מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבוני, דולב שרון הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה
קרא עודSlide 1
מבוא לתכנות ב- JAVA תרגול 5 מה בתרגול מחרוזות מערכים דו ממדיים מחרוזות (Strings) מחרוזת היא רצף של תווים. immutable על מנת ליצור ולטפל במחרוזות נשתמש במחלקה String למחלקה String מתודות שונות שמאפשרות פעולות
קרא עודPowerPoint Presentation
תוכנה 1 Generics תרגול - 1 תכנות גנרי תמיכה בתכנות גנרי נוספה בגרסה 5 ניתן להגדיר מחלקות ושירותים גנריים מונע שכפול קוד )מוכללים( ניתן לכתוב תוכניות שאינן תלויות בטיפוסי המשתנים מאפשר בטיחות טיפוסים מנגנון
קרא עודתכנות מונחה עצמים א' – תש"ע
1 תכנות מונחה עצמים והנדסת תוכנה תשע"ו 2 בנאי העתקה בניית העתק של אובייקט קיים. בניית העתק בעת העברת אובייקט לפונקציה. בניית העתק בעת החזרת אובייקט מפונקציה. ניתן להגדיר בנאי העתקה. אם לא מגדירים, אז הקומפיילר
קרא עודPowerPoint Presentation
תוכנה 1 3 תרגול מס' מתודות ותיכון לפי חוזים חוזה בין ספק ללקוח חוזה בין ספק ללקוח מגדיר עבור כל שרות: תנאי ללקוח - "תנאי קדם" precondition - - תנאי לספק "תנאי אחר".postcondition לקוח ספק 2 תנאי קדם )preconditions(
קרא עודמבוא למדעי המחשב - חובלים
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב סמסטר ב' תשע"ב בחינת סיום, מועד ב',.02..9.7 מרצה: אורן וימן מתרגלים: נעמה טוויטו ועדו ניסנבוים מדריכי מעבדה: מחמוד שריף ומיקה עמית משך המבחן: שעתיים חומר
קרא עודMicrosoft PowerPoint - lec10.ppt
תכנו ת מ ונחה ע צמ י ם בשפת ++C אוהד ברזילי אוניברסיטת תל אביב ירו ש ה מרו בה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודMicrosoft Word - c_SimA_MoedB2005.doc
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד ב', סמסטר א' תשס"ה,.2.2005 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. ודאו כי בטופס שבידיכם עמודים. יש לכתוב
קרא עודתכנון אלגוריתמים עבודת בית 4: תכנון אלגוריתמים תאריך הגשה: 02: , בצהריים,תא מספר 66 בקומת כניסה של בניין 003 מתרגל אחראי: אורי 0
22 עבודת בית 4: תכנון אלגוריתמים תאריך הגשה: 2: 622, בצהריים,תא מספר 66 בקומת כניסה של בניין 3 מתרגל אחראי: אורי הוראות כלליות: כל עוד לא נאמר אחרת, כאשר הנכם מתבקשים לתאר אלגוריתם יש לספק את הבאות: תיאור
קרא עודPowerPoint Presentation
1 תוכנה 1 תרגול 1: מנהלות, סביבת העבודה ומבוא ל- Java 1 2 מנהלות I מתרגלים: יעל אמסטרדמר )שעת קבלה: חמישי ב- 12, בתיאום מראש( דביר נתנאלי )שעת קבלה: רביעי ב- 17, בתיאום מראש( http://courses.cs.tau.ac.il/software1/1415a
קרא עודSlide 1
פיתוח מערכות תוכנה מבוססות Java מקביליות אוהד ברזילי מקביליות רמת התהליך )multithreading( ההפעלה processes( )multi לעומת רמת מערכת ריבוי מעבדים processors( )multi זמן עיבוד slicing( )time לעומת חלוקת 2
קרא עודתאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה
תאריך פרסום: 01.01.15 תאריך הגשה: 15.01.15 מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש להגיש בזוגות. -העבודה חייבת להיות מוקלדת. -הקובץ חייב
קרא עודנוהל בטיחות במדידה עם מגר
נוהל בטיחות במדידה עם מגר מאת: ד"ר אלכס טורצקי סמל חברה/מפעל מקצועות ועיסוקים: שם הנוהל: חשמלאים, מנהלים, אחראים נהלי נוהל בטיחות במדידה עם מגר בטיחות בתחום עבודות חשמל עמוד 1 מתוך 6 תאריך : נוהל מס':
קרא עודתורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב
תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב, מילה ושפה לטובת מי ששכח חומר זה, או שלא למדו מעולם,
קרא עודSlide 1
בית הספר למדעי המחשב אוניברסיטת תל אביב תוכנה 1- תרגול הורשה מחלקות אבסטרקטיות חריגים 2 ירושה ממחלקות קיימות ראינו בהרצאה שתי דרכים לשימוש חוזר בקוד של מחלקה קיימת: הכלה + האצלה הכלה )aggregation( במחלקה
קרא עודSlide 1
מבוא למדעי המחשב תירגול 4: משתנים בוליאניים ופונקציות מבוא למדעי המחשב מ' - תירגול 4 1 משתנים בוליאניים מבוא למדעי המחשב מ' - תירגול 4 2 ערכי אמת מבחינים בין שני ערכי אמת: true ו- false לכל מספר שלם ניתן
קרא עודלנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי
לנץ קרן מרצה: תכנותמונחהעצמים) 027622 ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחיות:.1.2.3.4.5.6.7 השאלות. כל על לענות עליכם משקל. שוות
קרא עודתורת הקומפילציה
תורת הקומפילציה תרגיל בית 2 הוראות לתרגיל 2 בשפת MINI-PASCAL הפרוייקט המצורף הינו קוד שלד של מהדר לשפת mini-pascal עליכם לממש בסביבת (Eclipse (Java את הפונקציות המתאימות לפי החומר שנלמד בהרצאה ע"מ שהמהדר
קרא עודMicrosoft PowerPoint - Lecture1
Computer Organization and Programming ארגון ותכנו ת המחשב - את"מ הרצאה מבוא 2 שפה עילית מול שפ ת מ כונה שפה עילית language) (High level שפת מכונה Language) (Machine תכנית בשפ ה עיל ית (C, Pascal, ) תכנית
קרא עודMicrosoft Word - Ass1Bgu2019b_java docx
ת ר ג י ל 1 ב ק ו ר ס מ ב ו א לתכנות 202.1.9031 JAVA סמסטר ב, ת נ א י ם ו ל ו ל א ו ת תאריך אחרון להגשה בציון מלא : 02.04.19 עד שעה : 23:55, כ ל יום איחור ל א מ א ו ש ר א ו ח ל ק ממנו מודריד 10 נקודות
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג חשון תשע"ח 12/11/17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד קיץ סמ' שנה תשע"ז 3 שעות משך
קרא עודמבחן בפיתוח מערכות תוכנה בשפת Java ( )
עמוד 1 מתוך 10 )0368-3056( מבחן בפיתוח מערכות תוכנה בשפת Java בית הספר למדעי המחשב אוניברסיטת תל אביב סמסטר ב' תשס"ח, מועד ב' תאריך הבחינה: 24.09.2008 מרצה: אוהד ברזילי חומר עזר מותר בשימוש: אין משך הבחינה:
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 6: כתובות ומצביעים 1 תוכנייה מצביעים מצביעים ומערכים, אריתמטיקה של מצביעים 2 3 מצביעים תזכורת- כתובות זיכרון הזיכרון כתובת התא #1000 #1004 #1008 ערך השמור בתא תא 10-4 לא מאותחל
קרא עודמבנה מחשבים ספרתיים
זיכרון מטמון 2 מבנה מחשבים ספרתיים 234267 1 כיצד נבחר את גודל המטמון? מצד אחד, נרצה מטמון גדול כמה שיותר כדי לקבל שיפור ב-.hit rate מצד שני, כאשר המטמון גדול מדי, הוא צורך אנרגיה רבה וזמן הגישה עלול להיות
קרא עודפייתון
שיעור 12: מילונים ברק גונן 1 או מילון, :hash table או,dictionary זוגות של מפתחות keys וערכים values מילון מוגדר על ידי סוגריים מסולסלים { } לדוגמה: מילון שמכיל ציונים, המפתח הוא מספר ת.ז ערך מפתח הגדרה
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב גרפים 1 תוכן עניינים סיכום ביניים מה היה לנו? מושג האלגוריתם, תכנות פרוצדורלי הכרות עם בעיות במדעי המחשב הכרות עם בעיות ברקורסיה מתקדמת (כולל (memoization תכנות מונחה עצמים (מחלקה, הורשה,
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 9 חזרה על תכנות מונחה עצמים Part II ראינו בהרצאה ממשקים Set Iterable Iterator בתרגול היום חזרה על: ממשקים Iterator Iterable )iterator נראה: )set ממשק )מימוש SetAsLinkedList
קרא עודמצגת של PowerPoint
מהי סביבת איקס לימוד? סביבת איקס לימוד היא סביבה גמישה לתרגול היכולת לזכור ולהיזכר במושגים ועובדות מתחומי תוכן שונים על ידי התאמה. הסביבה מבוססת על המשחק 'איקס עיגול' והתוכן אותו מתרגלים יכול מסוג טקסט
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג,.6.013 משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם 8 עמודי שאלון )כולל עמוד זה(. עליכם לכתוב את התשובות על
קרא עודMicrosoft Word - pitaron222Java_2007.doc
1 מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א a mul k k a פלט b זוגי? b :1 Ï 3 1 5 1 5 F קלט: 3, 5, 8, 4 20 2 8 40 40 3 4 4 F :2 Ï m x x 0 פלט 70 x 50 0 א. 10 F 1 64 2 2 51 30 F -4 F ב. ג. 1- (כל
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 12 מחסנית )Stack( memoization ראינו בהרצאה מחסנית Infix/Postfix Notations בתרגול היום מחסנית בדיקת איזון סוגריים בביטוי אריתמטי מימוש תור באמצעות מחסנית memoization דוגמאות
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודPowerPoint Presentation
תוכנה 1 אוניברסיטת תל אביב INTERFACES תרגול מס' 7: מנשקים, פולימורפיזם ועוד * לא בהכרח בסדר הזה מנשקים )Interfaces( 2 מנשקים מנשק )interface( הוא מבנה תחבירי ב- Java המאפשר לחסוך בקוד לקוח. מנשק מכיל כותרות
קרא עודהטכניון מכון טכנולוגי לישראל הפקולטה למדעי המחשב הוראות הגשה: ההגשה בזוגות. הוסיפו שמות, ת.ז., אי-מייל, תא אליו יש להחזיר את התרגיל ואת תשובותיכם לתרג
הטכניון מכון טכנולוגי לישראל הפקולטה למדעי המחשב הוראות הגשה: ההגשה בזוגות. הוסיפו שמות, ת.ז., אי-מייל, תא אליו יש להחזיר את התרגיל ואת תשובותיכם לתרגיל, הדפיסו והגישו לתא הקורס בקומה. מבנה מחשבים ספרתיים
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ח תשרי תשע"ז 30.10.16 שמות המורים: ציון סיקסיק א' תכנות ב- C מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' קיץ שנה תשע"ו 3 שעות משך
קרא עודמספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה
עמוד 1 מתוך 11 תשע"א מועד ב סמסטר א' 14.2.2011 תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי המחשב יש לענות על כל 5 השאלות. בכל השאלות במבחן יש לכתוב פונקציות יעילות
קרא עודPowerPoint Presentation
פרוטאוס הדרכה לפיתוח פרויקט מבוסס ארדואינו 1 הוראות הפעלה תוכנת פרוטאוס מכילה כמות גדולה מאוד של כלי עזר להבנת דרך ההפעלה של התוכנה. שני מקורות מידע עיקריים עומדים לרשות המשתמש מחוץ לתוכנה: o באתר האינטרנט
קרא עודמצגת של PowerPoint
סכנות התחשמלות והגנה בשיטת זינה צפה בטיחות במתקני חשמל השפעות זרם חשמלי העובר בגוף האדם אמצעי הגנה בסיסי כנגד חשמול הנו בידוד חשמלי במקרה של נזק לבידוד עלול להופיע מתח על הגוף או המעטה המתכתי קצר לגוף
קרא עודמדריך למרצים ומתרגלים 1
מדריך למרצים ומתרגלים 1 תוכן עניינים מדריך למרצים ומתרגלים...1 קבלת סיסמה לתחנת מידע למרצה...3 הוספת חומרי למידה...6 הוספת מורשה גישה לאתר הוספת מטלה קורס...9 לאתר הקורס...11 בחירת בודקים למטלה...17 מערכת
קרא עודתוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1
תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1 2 SWT בנויה על העיקרון של publish/subscribe אלמנטים בסיסיים )Widgets( מייצרים מאזינים )Listener( אירועים )Events(
קרא עודמבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו
מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן
קרא עודMicrosoft Word - solutions.doc
תחרות גיליס 009-00 הרי פוטר הגיע לחנות הדובשנרייה בהוגסמיד. הוא מגלה, שהכסף שלו מספיק בדיוק ל- סוכריות קוסמים ול- 5 קרפדות שוקולד, או בדיוק ל- 0 קרפדות שוקולד ול- 0 נשיקות מנטה, או בדיוק ל- 45 נשיקות מנטה
קרא עודתוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש
תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תיעשה במערכת ה- mdle בלבד.(http://mdle.tau.ac.il/)
קרא עודמתכונת עיצוב 3013
מדעי המחשב פרק ראשון Java שאלה 1 שאלה 1 נכתב ע"י ראמי ג'באלי C# Java 2 א. שאלה ב. הערה: במבחן כתוב שיש שלשה אחת בלבד של פנסים כאלו. ולמרות זאת נשאיר את המשתנה הבוליאני כך שאם נמצאו הפנסים בתחילת המערך
קרא עודפקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד
פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה 2-7012610-3 תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד ב' שם המרצה: ערן עמרי, ענת פסקין-צ'רניאבסקי חומר עזר:
קרא עודSlide 1
מבוא למדעי המחשב תירגול 7: פונקציות 1 מה היה שבוע שעבר? לולאות מערכים מערכים דו-ממדיים 2 תוכנייה )call by value( פונקציות העברת פרמטרים ע"י ערך תחום הגדרה של משתנה מחסנית הקריאות 3 פונקציות 4 הגדרה של
קרא עודפתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (
פתרון 000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : num = 3, sif = r האם ספרת האחדות של sif שווה ל- num num 3 sif (1)-() (3) () אמת ) = ( 3 3 יודפס: 3. ב. פתרון שאלה 11 עבור הערכים: עבור סעיף
קרא עודמבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב
מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527 kadman11@gmail.com
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 9 חזרה על תכנות מונחה עצמים Part II ראינו בהרצאה ממשקים Set Iterable Iterator בתרגול היום חזרה על: ממשקים Iterator Iterable )iterator נראה: )set ממשק )מימוש SetAsLinkedList
קרא עוד2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ
מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מספיק עמדות לכולם ולכן מומלץ לעבוד ביחידים). במהלך המעבדה יהיה עליכם לבצע משימות. אם תצטרכו עזרה בשלב
קרא עודמס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה
מס' סידורי: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך הבחינה שלוש שעות - חלקו את זמנכם ביעילות. יש לענות על כל השאלות.
קרא עודMicrosoft Word - ExamA_Final_Solution.docx
סמסטר חורף תשע"א 18 בפבואר 011 הטכניון מכון טכנולוגי לישראל הפקולטה למדעי המחשב מרצה: מתרגלים: רן אל-יניב נועה אלגרבלי, גיא חפץ, נטליה זילברשטיין, דודו ינאי (אחראי) סמסטר חורף תשע" מבחן סופי פתרון (מועד
קרא עודPowerPoint Presentation
תרגול מס' 3: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב פיתוח התוכנית בשלב זה אנו משתמשים במהדר )קומפיילר( כדי להמיר קבצי.java )קבצי
קרא עודMicrosoft PowerPoint - T-10.ppt [Compatibility Mode]
מבוא למחשב בשפת Matlab לולאות בלוקי try-catch :10 תרגול מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור, סאהר אסמיר וטל כהן עבור הקורס "מבוא למדעי המחשב" נכתב על-ידי רמי כהן,אולג רוכלנקו,
קרא עודאיטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl
איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodle בלבד.(http://moodle.tau.ac.il/) יש להגיש קובץ zip
קרא עודתכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח
תכנות דינמי פרק 6, סעיפים -6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח בסוף את הטוב ביותר. סכום חלקי sum) (subset הקלט: סדרה
קרא עוד