Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא לטכנולוגיות מחשב מבוא

Similar presentations


Presentation on theme: "מבוא לטכנולוגיות מחשב מבוא"— Presentation transcript:

1 מבוא לטכנולוגיות מחשב מבוא
מבוא לטכנולוגיות מחשב מבוא ובו נסקור את המסלול המפרך שתוכנית עוברת במחשב עד לביצוע. מבוסס על פרק 1 של Computer Systems – a programmers perspective / Bryant & O’hallrron

2 נתחיל מההתחלה... #include <stdio.h> int main() {
printf(“hello world”); }

3 ייצוג ASCII כל תו מיוצג על ידי בית (8 סיביות). כלומר יש 256 תווים אפשריים. # i n c l u d e קובץ אשר נכתב לפי הקידוד של ASCII נקרא קובץ טקסט. כל השאר – קבצים בינאריים.

4 מה עכשיו ? צריך לתרגם את hello.c לסדרת פקודות שהמחשב מבין – שפת מכונה.
זה תפקידו של המהדר (compiler): gcc –o hello hello.c דגל –o מאפשר לציין את שם קובץ הריצה (executable) - "hello” במקרה זה.

5 המהדר ארבעה שלבים, כל אחד מופעל על ידי תוכנית נפרדת. Text Binary
Pre- processor (cpp) Compiler (cc1) hello.c hello.i hello.s Text Source program (text) Modified source program (text) Assembly program (text) printf.o Assembler (as) Linker (ld) hello.o hello Binary Relocatable object programs (binary) Executable object program (binary)

6 שלב 1: עיבוד מקדים cpp (preprocessor): מתקבל קובץ יחיד עם C "טהור".
מחבר את הכול לקובץ טקסט אחד #include <...> מבצע הוראות preprocessing #ifdef ... #endif מעלים הערות /* ... */ מתקבל קובץ יחיד עם C "טהור". hello.i

7 שלב 2 : תרגום הידור – תרגום לשפת assembly
בשפה זאת כל שורה מייצגת פקודה 'נמוכה' אחת שהמחשב תומך בה. שפה משותפת לכל השפות העיליות. תוכניות ב C, C++, Pascal,... כולן יתורגמו ל assembly לא לכל המחשבים ("מכונות") יש אותה שפת מכונה. שפת מכונה נקראת Instruction Set Architecture (ISA) שפת המכונה של Intel נקראת IA-32

8 חידה מהי קבוצת הפקודות הבסיסיות הקטנה ביותר איתה ניתן לקבל פונקציונליות מלאה ? תשובה: פקודה אחת מספיקה... בפועל משתמשים במספר מאות. קיים קורס בטכניון בשם 'חישוביות' העוסק בשאלות מסוג מה ניתן לחשב ? מה המכונה הפשוטה ביותר שיכולה לחשב את כל מה שניתן לחשב ?

9 כמה פקודות ? מחשבי Sun, Mac,Alpha משתמשים באוסף קטן של פקודות
טכנולוגיה (ואידיאולוגיה) הנקראים Reduced Instruction Set Computer (RISC) מחשבי PC משתמשים בקבוצה גדולה של הוראות טכנולוגיה (ואידיאולוגיה) הנקראים Complex Instruction Set Computer (CISC)

10 מיקום תוצאה (רק חלק מהפקודות)
מבנה פקודה פקודה נראית באופן הבא: opcode operand1 operand2 result נניח ש R1,R2,R3 הם שמות של רגיסטרים ("אוגרים") או כתובות בזיכרון הראשי. add R1 R2 R3 קוד של הפקודה פרמטר ראשון פרמטר שני מיקום תוצאה (רק חלק מהפקודות)

11 אופרנדים (פרמטרים) של הפקודה
.file "hello.c" .section rodata .LC0: .string "hello world" .text .globl main .type main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp subl $12, %esp pushl $.LC0 call printf addl $16, %esp leave ret .size main, .-main .section .ident "GCC: (GNU) (Mandrakelinux mdk)" gcc –s hello.c מייצר קובץ hello.s שם של רגיסטר push R1 move R2, R1 subtract M[1], R2 and M[2], R2 move M[0], R3 אופרנדים (פרמטרים) של הפקודה פקודות

12 אופרנדים (פרמטרים) של הפקודה
.file "hello.c" .section rodata .LC0: .string "hello world" .text .globl main .type main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp subl $12, %esp pushl $.LC0 call printf addl $16, %esp leave ret .size main, .-main .section .ident "GCC: (GNU) (Mandrakelinux mdk)" gcc –s hello.c מייצר קובץ hello.s שם של רגיסטר pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax אופרנדים (פרמטרים) של הפקודה פקודות

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

14 אופטימיזציות של מהדרים - דוגמה
while (j < maximum - 1){ j = j + (4+array[k])*pi+5; } החישוב של maximum – 1 ושל (4+array[k])*pi+5 יכול להיעשות מחוץ ללולאה. התוצאה: int maxval = maximum - 1; int calcval = (4+array[k])*pi+5; while (j < maxval){ j = j + calcval; } ניתן אפילו: j = j + floor((maxval – j)/calcval) * calcval;

15 שלב 3: Assembler נותר לתרגם את hello.s לשפת מכונה
יוצר קובץ בשם hello.o לידיעה: קיימת אפשרות לתרגום בכיוון ההפוך. תוכניות מסוג זה נקראות disassemblers ב Linux: objdump –d <program name.o>

16 שלב 4: קישור (linking) הקוד של printf נמצא בקובץ .o אחר המסופק עם הספריות הסטנדרטיות של C. המקשר (linker) מחבר את שני הקבצים ויוצר קובץ hello.

17 חידה מהי שפת התכנות הקטנה ביותר שנותנת פונקציונליות מלאה ? שלושת הפקודות הבאות מספיקות: השמה x := y if goto מסקנה: בפועל כל המחשבים וכל השפות נותנים לנו בדיוק את אותה פונקציונליות (יכולת חישובית). (עד כדי אילוצי זיכרון שונים) מהירות שונה

18 ועכשיו - החומרה בקורס זה נעסוק רק מעט בחומרה.
חשוב להבין רק את המבנה הכללי של המחשב. ועכשיו... נשימה עמוקה

19 זיכרון מבוסס על מערך רכיבים בשם DRAM
כתובת הפקודה הבאה כאן נעשים החישובים CPU מבנה כללי - Pentium Register file ALU אחסון זמני 8 int, 8 float זיכרון מבוסס על מערך רכיבים בשם DRAM PC System bus Memory bus Main memory Bus interface I/O bridge I/O bus Expansion slots for other devices such as network adapters USB controller Graphics adapter Disk controller BUS – מוליך מידע בגודל 'מילה' (32 סיביות) Mouse Keyboard Display Disk hello executable stored on disk

20 מה המחשב עושה ? שוב ושוב את אותו הדבר ("מחזור פקודה"):
קורא פקודה המוצבעת על ידי ה – PC מפרש אותה מבצע אותה מעדכן את ה PC עם כתובת הפקודה הבאה. לא סדרתי. למשל פקודת jmp מצביעה למקום קודם.

21 סוגי פקודות ב - assembler
Load: העתק מילה מהזיכרון הראשי לרגיסטר. Store: העתק מילה מרגיסטר לזיכרון. Update: העתק תוכן של שני רגיסטרים ל ALU, ה ALU יבצע איתם חישוב וישמור את התוצאה ברגיסטר. I/O read: העתק מילה מהתקן I/O לרגיסטר I/O write: העתק מילה מרגיסטר להתְקן I/O Jump: העתק את האופרנד לתוך ה PC פקודות לוגיות ומתמטיות: add, subt, mull, div ,and,not,or

22 נחזור לתוכנית שלנו הגיע הזמן לכתוב hello

23 hello מגיע לזיכרון CPU Register file ALU PC System bus Memory bus Main
Bus interface I/O bridge "hello" I/O bus Expansion slots for other devices such as network adapters USB controller Graphics adapter Disk controller למה דרך היע"ם? בפועל מה שקורה כאן הוא יותר מסובך. קיים חוצץ שמתמלא בפסיקות מהמקלדת. תהליך של מערכת ההפעלה דוגם את הפסיקות האלה וכתוצאה מכך קורא את האות הבאה מהחוצץ ועושה store לאות הבאה בזיכרון. Mouse Keyboard Display Disk User types "hello" hello מגיע לזיכרון

24 עכשיו מערכת ההפעלה נכנסת לפעולה
אחרי שהקשנו enter מערכת ההפעלה (אשר רצה ברקע כל הזמן) מעלה את hello לזיכרון. ב Unix זאת לא מערכת ההפעלה אלא shell ההעלאה היא ישירה, לא דרך המעבד נקרא Direct Memory Access (DMA)

25 CPU Register file ALU PC System bus Memory bus Main memory Bus interface I/O bridge "hello,world\n" hello code I/O bus Expansion slots for other devices such as network adapters USB controller Graphics adapter Disk controller Mouse Keyboard Display Disk hello executable stored on disk

26 עכשיו התוכנית בזיכרון תמיד בזיכרון
Kernel virtual memory Memory mapped region for shared libraries Run-time heap (created at runtime by malloc) User stack (created at runtime) Unused Memory invisible to user code Read/write data Read-only code and data Loaded from the hello executable file printf() function 0xffffffff קריאה לפונקציה מוסיפה שורה + data שהפונקציה שומרת כגון ערכי רגיסטרים. חזרה מפונקציה מוחקת את המידע הזה. תוכניות רבות משתמשות בפונקציות ספריה. רק עותק אחד בזיכרון.

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

28 Main memory I/O bridge Bus interface ALU Register file CPU System bus Memory bus Disk controller Graphics adapter USB Mouse Keyboard Display I/O bus Expansion slots for other devices such as network adapters hello executable stored on disk PC hello code "hello,world\n"

29 מספר נושאים שנלמד בקורס זה
ייצוג מידע מידע: משתני int, float, ... פקודות שפת מכונה כתיבת קוד יעיל: לא תלוי מכונה תלוי מכונה הזיכרון מערכת ההפעלה


Download ppt "מבוא לטכנולוגיות מחשב מבוא"

Similar presentations


Ads by Google