Εικονικές Μηχανές, Διερμηνείς
|
|
- Ανδώνης Δαμασκηνός
- 8 χρόνια πριν
- Προβολές:
Transcript
1 Εικονικές Μηχανές, Διερμηνείς και Δυναμική Διαχείριση Μνήμης Περιεχόμενα Εικονικές μηχανές (Virtual Machines) Διερμηνείς (Interpreters) Δυναμική διαχείριση μνήμης Στοίβες (Stacks) Σωροί (Heaps) Συλλογή σκουπιδιών (Garbage Collection) Μαρκάρισμα και σκούπισμα (mark and sweep) Αντιγραφή (copying) Μέτρημα αναφορών (reference counting) Wassily Kandinsky, Composition VII, 1913 Κωστής Σαγώνας Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 2 Εικονικές Μηχανές (Virtual Machines) Εικονικές Μηχανές: Πλεονεκτήματα Οι εικονικές μηχανές (VMs) αποτελούν ένα ενδιάμεσο στάδιο στη μεταγλώττιση των γλωσσών προγραμματισμού Οι VMs είναι μηχανές διότι επιτρέπουν τη βήμα προς βήμα εκτέλεση των προγραμμάτων Οι VMs είναι εικονικές (αφηρημένες) διότι συνήθως δεν υλοποιούνται σε hardware παραλείπουν πολλές από τις λεπτομέρειες των πραγματικών υπολογιστικών μηχανών (αυτών σε hardware) Γεφυρώνουν το χάσμα μεταξύ του υψηλού επιπέδου των γλωσσών προγραμματισμού και του χαμηλού επιπέδου των πραγματικών υπολογιστών μηχανών Απαιτούν λιγότερη προσπάθεια για την υλοποίησή τους και για τη μεταγλώττιση των προγραμμάτων Ο πειραματισμός και η μετατροπή τους είναι ευκολότερη Σημαντικές ιδιότητες, ειδικά για πρωτοεμφανιζόμενες γλώσσες Οι VMs are tailored to the particular operations required to implement a particular (class of) source language(s) Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 3 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 4
2 Εικονικές Μηχανές: Πλεονεκτήματα Προσφέρουν καλύτερη φορητότητα (portability) Οι διερμηνείς VM συνήθως υλοποιούνται σε C Ο VM κώδικας μπορεί να μεταφερθεί μέσω διαδικτύου και να τρέξει στις περισσότερες υπολογιστικές πλατφόρμες Συνήθως, ο VM κώδικας είναι (σημαντικά) μικρότερος σε μέγεθος από τον αντίστοιχο κώδικα μηχανής Αρκετές ιδιότητες ασφάλειας του VM κώδικα μπορούν να επαληθευθούν (verified) Είναι ευκολότερο να αποδείξουμε τυπικά την ορθότητα του σχεδιασμού και της υλοποίησής τους Το profiling και η αποσφαλμάτωση (debugging) προγραμμάτων είναι ευκολότερα Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 5 Εικονικές Μηχανές: Μειοκτήματα Χειρότερη επίδοση (σε χρόνο) των διερμηνέων εικονικών μηχανών σε σχέση με την εκτέλεση εντολών σε γλώσσα μηχανής Eπιπλέον κόστους διερμηνίας (overhead of interpretation) Είναι σημαντικά πιο δύσκολο να επωφεληθούμε από κάποια χαρακτηριστικά του μοντέρνου hardware των υπολογιστών (π.χ. hardware-based branch prediction) Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 6 Ιστορία των Εικονικών Μηχανών VMs have been built and studied since the late 1950 s The first Lisp implementations (1958) used VMs with garbage collection, sandboxing, reflection, and an interactive shell Forth (early 70 s) used a very small and easy to implement VM with high level of reflection Smalltalk lk (late 70 s) allowed changing code on the fly (first truly interactive OO system) USCD Pascal (late 70 s) popularized the idea of using pseudocode to improve portability Self (late 80 s) s), a language with a Smalltalk flavor, had an implementation that pushed the limits of VM performance Java (early 90s) made VMs popular and well known Κάποιες επιλογές γςσχεδιασμού Some design choices are similar to the choices when designing the intermediate code format of a compiler: Should the machine be used on several different physical architectures and operating systems? (JVM) Should the machine be used for several different source languages? (CLI/CLR (.NET)) Some other design choices are similar to those of the compiler backend: Is performance more important than portability? Is reliability more important than performance? Is (smaller) code size more important than performance? And some design choices are similar to those in an OS: How to implement memory management, concurrency, exceptions, I/O, Is low memory consumption, scalability, or security more important than performance? Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 7 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 8
3 Συστατικά των Εικονικών Μηχανών The components of a VM vary depending on several factors: Is the language (environment) interactive? Does the language support reflection and/or dynamic loading? Is performance paramount? Is concurrency support required? Is sandboxing required? Υλοποίηση η των Εικονικών Μηχανών Οι εικονικές μηχανές συνήθως γράφονται σε φορητές γλώσσες προγραμματισμού όπως η C ή η C++ Για μέρη που είναι σημαντικά για την επίδοση της εικονικής μηχανής, συνήθως χρησιμοποιούμε assembly Οι VMs για κάποιες γλώσσες (π.χ. Lisp, Forth, Smalltalk) lk) γράφονται με χρήση της ίδιας τη γλώσσας Πολλοί διερμηνείς για VMs γράφονται σε GNU C, για λόγους που θα γίνουν προφανείς στις επόμενες διαφάνειες Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 9 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 10 Μορφές Διερμηνέων Αρκετές υλοποιήσεις γλωσσών προγραμματισμού χρησιμοποιούν διερμηνείς δύο ειδών: Command-line interpreter Διαβάζει και αναλύει συντακτικά κομμάτια πηγαίου κώδικα της γλώσσας τα οποία και εκτελεί Χρησιμοποιείται σε συστήματα που αλληλεπιδρούν με το χρήστη Virtual machine instruction interpreter Διαβάζει και εκτελεί εντολές μιας ενδιάμεσης μορφής εκτελέσιμου κώδικα όπως bytecode εντολών μιας εικονικής μηχανής Υλοποίηση η των Διερμηνέων Υπάρχουν πολλοί τρόποι υλοποίησης διερμηνέων: 1. Direct string interpretation Source level l interpreters t are very slow because they spend much of their time in doing lexical analysis 2. Compilation into a (typically abstract syntax) tree and interpretation of that tree Such interpreters avoid lexical analysis costs, but they still have to do much list scanning (e.g. when implementing a goto or call ) 3. Compilation into a virtual machine and interpretation of the VM code Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 11 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 12
4 Διερμηνείς Εντολών Εικονικών Μηχανών By compiling the program to the instruction set of a virtual machine and adding a table that maps names and labels to addresses in this program, some of the interpretation overhead can be reduced For convenience, most VM instruction sets use integral numbers of bytes to represent everything opcodes, register numbers, stack slot numbers, indices into the function or constant table, etc. Opcode Reg # CONSTANT Example: The GET_CONST2 instruction Components of Virtual Machine Implementations Program store (code area) Program is a sequence of instructions Loader State (of execution) Stack Heap Registers Special register (program counter) pointing to the next instruction to be executed Runtime system component Memory allocator Garbage collector Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 13 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 14 Η βασική δομή ενός Bytecode Interpreter byte *pc = &byte_program[0]; while(true) { opcode = pc[0]; switch (opcode) { case GET_CONST2: source_reg_num = pc[1]; const_num_to_match = get_2_bytes(&pc[2]); // get_const2 code pc += 4; break; case JUMP: jump_addr = get_4_bytes(&pc[1]); pc = &byte_program[jump_addr]; break; Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 15 To align or to not align VM instructions? Opcode Opcode Jump Address Unused Bytes Jump Address Σε μια 32-bit μηχανή NOTE: Padding of instructions can be done by the loader. The size of the bytecode files need not be affected. Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 16
5 Bytecode Interpreter with Aligned Instructions byte *pc = &byte_program[0]; while(true) { opcode = pc[0]; switch (opcode) { case GET_CONST2: source_reg_num = pc[1]; const_num_to_match = get_2_bytes(&pc[2]); // get_const2 code pc += 4; break; case JUMP: // aligned version jump_addr = get_4_bytes(&pc[4]); pc = &byte_program[jump_addr]; break; Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 17 Διερμηνέας με αφηρημένη η κωδικοποίηση η εντολών byte *pc = &byte_program[0]; #define GET_CONST2_SIZEOF 4 while(true) { #define JUMP_SIZEOF 8 opcode = pc[0]; #define GET_CONST2_ARG1 1 switch (opcode) { #define GET_CONST2_ARG2 2 #define JUMP_ARG1 4 case GET_CONST2: source_reg_num = pc[get_const2_arg1]; const_num_to_match = get_2_bytes(&pc[get_const2_arg2]); // get_const2 code pc += GET_CONST2_SIZEOF; break; case JUMP: // aligned version jump_addr = get_4_bytes(&pc[jump_arg1]); pc = &byte_program[jump_addr]; break; Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 18 Διερμηνέας με αφηρημένο έλεγχο byte *pc = &byte_program[0]; while(true) { #define NEXT_INSTRUCTION \ goto next_instruction next_instruction: opcode = pc[0]; switch (opcode) { case GET_CONST2: source_reg_num = pc[get_const2_arg1]; const_num_to_match num to match = get_2_bytes(&pc[get_const2_arg2]); // get_const2 code pc += GET_CONST2_SIZEOF; case JUMP: // aligned version jump_addr = get_4_bytes(&pc[jump_arg1]); pc = &byte_program[jump_addr]; Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 19 Έμμεσα Νηματικοί Διερμηνείς In an indirectly threaded interpreter we do not switch on the opcode encoding; instead we use the bytecodes as indices into a table containing the addresses of the VM instructions The term threaded d code refers to a code representation ti where every instruction is implicitly a function call to the next instruction A threaded interpreter can be very efficiently implemented in assembly In GNU CC, we can use the labels as values C language extension and take the address of a label with &&labelname We can actually write the interpreter in such a way that it uses indirectly threaded code if compiled with GNU CC and a switch for compatibility Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 20
6 Δομή ενός Έμμεσα Νηματικού Διερμηνέα byte *pc = &byte_program[0]; static void *label_tab[] { while(true) { next_instruction: &&get_const2_label; t2 l opcode = pc[0]; &&jump_label; switch (opcode) { #define NEXT_INSTRUCTION \ case GET_CONST2: goto **(void **)(label_tab[*pc]) get_const2_label: source_reg_num reg = pc[get_const2_arg1]; const_num_to_match = get_2_bytes(&pc[get_const2_arg2]); // get_const2 code pc += GET_CONST2_SIZEOF; case JUMP: // aligned version jump_label: jump_addr = get_4_bytes(&pc[jump_arg1]); pc = &byte_program[jump_addr]; Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 21 Άμεσα Νηματικοί Διερμηνείς In a directly threaded interpreter, we do not use the bytecode instruction encoding at all during runtime Instead, the loader replaces each bytecode instruction encoding (opcode) with the address of the implementation of the instruction This means that we need one word for the opcode, which increases the VM code size Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 22 Δομή ενός Άμεσα Νηματικού Διερμηνέα byte *pc = &byte_program[0]; static void *label_tab[] { while(true) { next_instruction: &&get_const2_label; l opcode = pc[0]; &&jump_label; switch (opcode) { #define NEXT_INSTRUCTION \ case GET_CONST2: goto **(void **)(pc) get_const2_label: source_reg_num reg = pc[get_const2_arg1]; const_num_to_match = get_2_bytes(&pc[get_const2_arg2]); // get_const2 code pc += GET_CONST2_SIZEOF; case JUMP: // aligned version #define GET_CONST2_SIZEOF 8 jump_label: #define JUMP_SIZEOF 8 pc = get_4_bytes(&pc[jump_arg1]); #define GET_CONST2_ARG1 5 #define GET_CONST2_ARG2 6 #define JUMP_ARG1 4 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 23 Νηματικός Διερμηνέας με Χρήση Prefetching byte *pc = &byte_program[0]; while(true) { next_instruction: opcode = pc[0]; switch (opcode) { case GET_CONST2: get_const2_label: source_reg_num reg = pc[get_const2_arg1]; const_num_to_match = get_2_bytes(&pc[get_const2_arg2]); pc += GET_CONST2_SIZEOF; // prefetching // get_const2 code case JUMP: // aligned version jump_label: pc = get_4_bytes(&pc[jump_arg1]); Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 24
7 Stack-based vs. Register-based VMs A VM can either be stack-based or register-based In a stack-based VM most operands are (passed) on the stack The stack can grow as needed In a register-based VM most operands are passed in (virtual) registers These registers are often implemented using an array rather than physical machine registers The number of registers is limited Most VMs are stack-based Stack machines are simpler to implement Stack machines are easier to compile to Less encoding/decoding to find the right register Unless virtual registers are mapped to physical registers, virtual registers are not faster than stack slots Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 26 Virtual Machine Interpreter Tuning Common VM interpreter optimizations include: Writing the interpreter loop and key instructions in assembly Keeping important VM registers (pc, stack top, heap top) in hardware registers GNU C allows global register variables Top of stack caching Splitting the most used set of instruction into a separate interpreter loop Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 27 Instruction Merging g and Specialization Instruction Merging: A sequence of VM instructions is replaced by a single (mega-)instruction Reduces interpretation overhead Code locality lit is enhanced Results in more compact bytecode C compiler has bigger basic blocks to perform optimizations on Instruction Specialization: A special case of a VM instruction is created, typically one where some arguments have a known value which is hard-coded Eliminates the cost of argument decoding Results in more compact bytecode representation Reduces the register pressure from some basic blocks Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 28 Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης: Εγγραφών δραστηριοποίησης Αντικειμένων Άμεσων κλήσεων δέσμευσης μνήμης: new, malloc, κ.λπ. Εμμέσων κλήσεων δέσμευσης μνήμης: δημιουργία συμβολοσειρών, buffers για αρχεία, πινάκων με δυναμικά καθοριζόμενο μέγεθος, κ.λπ. Οι υλοποιήσεις των γλωσσών παρέχουν τη δυνατότητα διαχείρισης μνήμης κατά το χρόνο εκτέλεσης του προγράμματος Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 29
8 Στοίβες βςαπό εγγραφές δραστηριοποίησης η ης Στις περισσότερες γλώσσες, οι εγγραφές δραστηριοποίησης δεσμεύονται δυναμικά Σε πολλές γλώσσες, επαρκεί να δεσμεύσουμε μια εγγραφή κατά την κλήση μιας συνάρτησης η οποία αποδεσμεύεται κατά την επιστροφή της συνάρτησης Σωροί (heaps) Με αυτόν τον τρόπο παράγεται μια στοίβα από εγγραφές δραστηριοποίησης Μια στοίβα χρειάζεται ένα σχετικά απλό αλγόριθμο διαχείρισης μνήμης Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 30 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 31 Διάταξη σε σωρό Υλοποίηση η μέσω του αλγόριθμου First Fit Η διάταξη σε στοίβα έχει σχετικά εύκολη υλοποίηση Αλλά δεν επαρκεί πάντα: τι για παράδειγμα συμβαίνει εάν οι δεσμεύσεις και οι αποδεσμεύσεις κομματιών μνήμης ακολουθούν τυχαία σειρά; Ένας σωρός (heap) είναι μια ακολουθία από μπλοκ μνήμης τα οποία μας δίνουν τη δυνατότητα να έχουμε μη ταξινομημένη δέσμευση και αποδέσμευση μνήμης Υπάρχουν πολλοί μηχανισμοί μ υλοποίησης ης μνήμης σωρού Ο σωρός υλοποιείται ως μια συνδεδεμένη λίστα από ελεύθερα μπλοκ ( list) Αρχικά αποτελείται από μόνο ένα μεγάλο μπλοκ Για δέσμευση κάποιου κομματιού μνήμης: Ψάχνουμε στη list για το πρώτο μπλοκ με μέγεθος τέτοιο ώστε να ικανοποιούνται οι απαιτήσεις της ζήτησης Εάν το μπλοκ είναι μεγαλύτερο από τη ζήτηση, τότε επιστρέφουμε το αχρησιμοποίητο κομμάτι στη list Ικανοποιούμε την απαίτηση δέσμευσης μνήμης και επιστρέφουμε την αρχική διεύθυνση του δεσμευμένου μπλοκ Για αποδέσμευση, απλώς προσθέτουμε το ελευθερωθέν μπλοκ στην αρχή της list Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 32 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 33
9 Τρέχοντες ρχ σύνδεσμοι στο σωρό Τρέχοντες ρχ σύνδεσμοι στο σωρό Το πρόγραμμα, κατά την εκτέλεσή του, απαιτεί δεσμεύσεις μνήμης Συνήθως, το πρόγραμμα αποθηκεύει τις διευθύνσεις μνήμης που του παραχωρούνται σε κάποια ονόματα (μεταβλητές) Ένας τρέχων σύνδεσμος στο σωρό (current heap link) είναι μια θέση μνήμης που περιέχει μια τιμή την οποία θα χρησιμοποιήσει το πρόγραμμα ως δείκτη στο σωρό a: start: b: 2 c: 1 (an IntList) (activation record for main) head: 2 tail: null Στοίβα the stack (a ConsCell) head: 1 tail: (a ConsCell) Σωρός the ρς heap IntList t a = new IntList(null); int b = 2; int c = 1; a = a.cons(b); a = a.cons(c); Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 34 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 35 Εύρεση των τρεχόντων ρχ συνδέσμων στο σωρό Αρχίζουμε με ένα σύνολο ριζών (root set): θέσεις μνήμης εκτός του σωρού που περιέχουν συνδέσμους σε θέσεις μνήμης στο σωρό,, π.χ. σε ενεργές εγγραφές δραστηριοποίησης (στη στοίβα) καθολικές ή στατικές μεταβλητές Για κάθε στοιχείο του συνόλου, κοιτάμε το δεσμευμένο μπλοκ στο οποίο δείχνει ο σύνδεσμος και προσθέτουμε όλες τις θέσεις μνήμης του συγκεκριμένου μπλοκ στο σύνολό μας Επαναλαμβάνουμε την παραπάνω διαδικασία μέχρις του σημείου όπου δε βρίσκουμε άλλες νέες θέσεις μνήμης Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 36 Λάθη κατά την εύρεση των τρεχόντων ρχ συνδέσμων Παραλείψεις: ξεχνάμε να περιλάβουμε μια θέση μνήμης που έχει έναν τρέχοντα σύνδεσμο στο σωρό Άχρηστες τιμές: συμπεριλαμβάνουμε θέσεις μνήμης για τις οποίες το πρόγραμμα ποτέ δε θα χρησιμοποιήσει τις τιμές που αποθηκεύουν Διευθύνσεις που δεν είναι θέσεις μνήμης: συμπεριλαμβάνουμε κάποιες θέσεις μνήμης στο σωρό μόνο και μόνο επειδή δε μπορούμε να ξεχωρίσουμε τιμές που χρησιμοποιούνται π.χ. ως δείκτες στο σωρό ή ως ακέραιοι (με τιμή μια διεύθυνση μνήμης στο σωρό) ) Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 37
10 Δε μπορούμε μ πάντα να αποφύγουμε τα λάθη Για τη σωστή διαχείριση του σωρού, τα λάθη παράλειψης είναι μη αποδεκτά και δε συγχωρούνται Άρα είμαστε υποχρεωμένοι να συμπεριλάβουμε όλες τις θέσεις μνήμης για τις οποίες υπάρχει πιθανότητα η τιμή που αποθηκεύεται στη συγκεκριμένη θέση μνήμης να χρησιμοποιηθεί από το πρόγραμμα Κατά συνέπεια, το να συμπεριλάβουμε άχρηστες θέσεις μνήμης στον υπολογισμό είναι αναπόφευκτο Ανάλογα με τη γλώσσα, μπορεί να είναι αδύνατο να αποφύγουμε να συμπεριλάβουμε και τιμές που απλώς δείχνουν σα θέσεις μνήμης στο σωρό Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 38 Τιμές μςπου δείχνουν σα διευθύνσεις μνήμης Για κάποιες μεταβλητές μπορεί να μην είμαστε σε θέση να καταλάβουμε πως χρησιμοποιούνται οι τιμές τους Για παράδειγμα, η παρακάτω μεταβλητή x μπορεί να χρησιμοποιηθεί είτε ως δείκτης είτε ως πίνακας από τέσσερις χαρακτήρες union { char *p; char tag[4]; x; Σημείωση: το παραπάνω πρόβλημα είναι ακόμα χειρότερο στη C, διότι οι C compilers δεν κρατούν πληροφορία για τους τύπους των μεταβλητών κατά τη διάρκεια εκτέλεσης του προγράμματος Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 39 Συμπίεση του σωρού (heap compaction) Μια λειτουργία που χρειάζεται πληροφορία για το σύνολο των τρεχόντων συνδέσμων στο σωρό Ο διαχειριστής της μνήμης μετακινεί δεσμευμένα μπλοκ: Αντιγράφει το μπλοκ σε μια νέα θέση, και Επικαιροποιεί όλους τους συνδέσμους στο (ή κάπου μέσα στο) ) μπλοκ Κατά συνέπεια συμπιέζει το σωρό, μετακινώντας όλα τα δεσμευμένα μπλοκ στο ένα άκρο του και αφήνοντας ένα μεγάλο μγ ελεύθερο μπλοκ χωρίς ρς κατακερματισμό μ Συλλογή Σκουπιδιών Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 40 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 41
11 Κάποια συνηθισμένα προβλήματα με δείκτες Συλλογή σκουπιδιών (garbage g collection) type p: ^Integer; begin new(p); p^ := 21; dispose(p); p^ := p^ + 1 end procedure Leak; type p: ^Integer; begin new(p) end; Ξεκρέμαστος δείκτης: το διπλανό πρόγραμμα Pascal χρησιμοποιεί ένα δείκτη σε μπλοκ μνήμης μετά την αποδέσμευση του συγκεκριμένου μπλοκ Διαρροή μνήμης: το διπλανό πρόγραμμα Pascal δεσμεύει ένα μπλοκ μνήμης αλλά ξεχνάει να το αποδεσμεύσει Αφού τόσα σφάλματα λογισμικού συμβαίνουν λόγω λαθών αποδέσμευσης μνήμης και επειδή δεν είναι βολικό για τον προγραμματιστή να σκέφτεται για το πώς θα γίνει σωστά η αποδέσμευση μνήμης για ποιο λόγο να μην είναι ευθύνη της υλοποίησης της γλώσσας η αυτόματη ανακύκλωση μνήμης; Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 42 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 43 Τρεις βασικοί μηχανισμοί μ ανακύκλωσης μνήμης 1. Μαρκάρισμα και σκούπισμα (mark and sweep) 2. Αντιγραφή (copying) 3. Μέτρημα αναφορών (reference counting) Memory Management Terminology Dynamically allocated objects in the heap forms a directed graph: nodes are the heap objects and edges are the pointers between objects Program variables, registers, and stack variables are the roots of this graph Data which is reachable by a chain of pointers from program variables is called live data All other data is dead d (garbage) and can be reclaimed by the garbage collector in order to be used by the memory allocator Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 44 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 45
12 Μαρκάρισμα ρ και σκούπισμα Ένας συλλέκτης μαρκαρίσματος και σκουπίσματος (mark-and-sweep collector) χρησιμοποιεί τους τρέχοντες συνδέσμους στο σωρό σε μια διαδικασία που έχει δύο φάσεις: Μαρκάρισμα: βρίσκουμε όλους τους τρέχοντες τες συνδέσμους στο σωρό και μαρκάρουμε όλα τα μπλοκ του σωρού τα οποία δείχνονται από κάποιον από τους συνδέσμους Σκούπισμα: κάνουμε ένα πέρασμα στο σωρό και επιστρέφουμε τα αμαρκάριστα μπλοκ στη λίστα με τα ελεύθερα μπλοκ Τα μπλοκ που μαρκάρονται στην πρώτη φάση του αλγόριθμου δε μετακινούνται (non-moving collector) Ο Αλγόριθμος Mark-Sweep proc mark_sweep_gc() foreach root rootset do mark(*root) sweep() proc mark(object) if marked(object) = false marked(object) := true foreach pointer in object do mark(*pointer) Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 46 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 47 Mark-Sweep Collection [McCarthy 1960] Mark-Sweep Collection: Ιδιότητες Roots FreeList Heap to be collected (after mark sweep phase) + Δε μετακινεί αντικείμενα + Requires relatively little additional memory for the collector Markbit array - Allocation is slower - (and may need to deal with fragmentation) - Τhe e collection o time is proportional o to the size of the heap that is collected, not the size of the live data Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 48 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 49
13 Συλλογή σκουπιδιών μέσω αντιγραφής Συλλογή μέσω Αντιγραφής [Cheney 1970] Ένας συλλέκτης αντιγραφής (copying collector) διαιρεί τη μνήμη στη μέση και χρησιμοποιεί τη μισή μόνο μνήμη για να ικανοποιήσει τις αιτήσεις δέσμευσης Όταν το μισό αυτό μέρος γεμίσει, βρίσκουμε συνδέσμους που δείχνουν σε μπλοκ στο πρώτο μισό και αντιγράφουμε αυτά τα μπλοκ στο δεύτερο μισό Η διαδικασία αυτή συμπιέζει τα χρησιμοποιούμενα μπλοκ, με αποτέλεσμα να εξαφανίζει τον κατακερματισμό Μετακινεί μπλοκ (moving collector) Roots Heap (from-space) (to-space) Heap (from-space) (to-space) Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 50 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 51 Copying Collection: Ιδιότητες + After a copying collection, allocation is very fast + Time complexity is proportional to the size of the live data set, not the size of the heap that is collected! - Half of the available memory is reserved for servicing the collector, not for the needs of the application - Objects are moved Μέτρημα αναφορών Κάθε μπλοκ έχει ένα μετρητή που κρατάει τον αριθμό των συνδέσμων σωρού που δείχνουν στο μπλοκ Ο μετρητής αυτός αυξάνεται όταν κάποιος σύνδεσμος προς το μπλοκ αντιγράφεται (μέσω ανάθεσης), και μειώνεται όταν κάποιος σύνδεσμος is discarded Όταν η τιμή του μετρητή γίνει μηδέν, το μπλοκ είναι άχρηστο και μπορεί να ελευθερωθεί Δηλαδή στη διαχείριση μνήμης με μέτρημα αναφορών δε χρειάζεται να βρούμε δυναμικά τους τρέχοντες συνδέσμους στο σωρό Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 52 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 53
14 Πρόβλημα μετρήματος αναφορών Πρόβλημα μετρήματος αναφορών circle: link: 2 circle: null 1 link: (activation record) Στοίβα the stack link: link: Σωρός the heap 1 Ένα πρόβλημα μετρήματος αναφορών: δε μπορούμε να ανακαλύψουμε κύκλους από άχρηστα μπλοκ. 1 Στην εικόνα, μια κυκλικά συνδεδεμένη λίστα που δείχνεται από τη μεταβλητή circle. (activation record) Στοίβα the stack link: link: Σωρός the heap 1 Αν αναθέσουμε π.χ. την τιμή null στη μεταβλητή circle, η τιμή του μετρητή θα μειωθεί. 1 Κανένας μετρητής αναφορών δε γίνεται μηδέν, παρόλο που όλα τα μπλοκ είναι άχρηστα (σκουπίδια). Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 54 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 55 Μέτρημα αναφορών Δε μπορεί να συλλέξει κύκλους σκουπιδιών Επιβάλλει κάποιο μη αμελητέο κόστος στην εκτέλεση του προγράμματος, λόγω της ανάγκης να ενημερώσουμε τους μετρητές αναφορών σε κάθε ανάθεση Ένα πλεονέκτημα: ο αλγόριθμος εκτελείται λί από τη φύση του σε μικρά βήματα (incremental), και δεν επιβάλλει μεγάλες παύσεις κατά την εκτέλεση του προγράμματος Εκλεπτυσμένοι συλλέκτες σκουπιδιών Συλλέκτες γενεών (Generational collectors) Η προς συλλογή μνήμη χωρίζεται σε γενιές (generations) με βάση την ηλικία των αντικειμένων στο μπλοκ Συλλέγουμε τα σκουπίδια στις νέες γενιές πιο συχνά (χρησιμοποιώντας κάποια από τις προηγούμενες μεθόδους) Incremental collectors Συλλέγουν σκουπίδια σε μικρά χρονικά διαστήματα τα οποία παρεμβάλλονται με την εκτέλεση του προγράμματος Κατά συνέπεια αποφεύγουν το σταμάτημα της εφαρμογής για μεγάλο χρονικό διάστημα και οι παύσεις λόγω αυτόματης ανακύκλωσης μνήμης έχουν πολύ μικρή διάρκεια Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 56 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 57
15 Γλώσσες με αυτόματη διαχείριση μνήμης Σε κάποιες γλώσσες είναι απαίτηση: Lisp, Scheme, ML, Haskell, Erlang, Clean, Prolog, Java, C# Κάποιες άλλες όπως η Ada απλώς την ενθαρρύνουν Τέλος, κάποιες άλλες γλώσσες όπως η C και η C++ την καθιστούν πολύ δύσκολη Όμως ακόμα και για αυτές είναι δυνατή Υπάρχουν βιβλιοθήκες που αντικαθιστούν τη συνηθισμένη υλοποίηση των malloc/ με ένα διαχειριστή μνήμης που χρησιμοποιεί συντηρητική συλλογή σκουπιδιών (conservative garbage collection) για την αυτόματη ανακύκλωση μνήμης Τάσεις Μια ιδέα από τις αρχές του 1960, η δημοτικότητα της οποίας έχει αυξηθεί σημαντικά τα τελευταία χρόνια Οι καλές υλοποιήσεις των συλλεκτών σκουπιδιών έχουν επίδοση παρόμοια ή μόνο κατά λίγο χειρότερη από αυτή την οποία είναι δυνατή με διαχείριση μνήμης υπό τον έλεγχο του προγραμματιστή Όλο και περισσότεροι προγραμματιστές συνειδητοποιούν ότι η αυτόματη ανακύκλωση μνήμης αυξάνει την παραγωγικότητά τους, οδηγεί σε λιγότερα σφάλματα, και κατά συνέπεια αξίζει ξζ τον έξτρα χρόνο εκτέλεσης Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 58 Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 59 Συμπερασματικά μ Η διαχείριση μνήμης είναι ένα σημαντικό συστατικό του σχεδιασμού και της υλοποίησης των γλωσσών προγραμματισμού μ Τόσο η επίδοση όσο και η αξιοπιστία των προγραμμάτων είναι σημαντικοί παράγοντες της ανάπτυξης λογισμικού Η αυτόματη διαχείριση μνήμης είναι μια από τις πιο ενεργές περιοχές ερευνητικής δραστηριότητας και πειραματισμού στην περιοχή της υλοποίησης γλωσσών προγραμματισμού Εικονικές μηχανές, διερμηνείς και διαχείριση μνήμης 60
Εικονικές Μηχανές, ιερµηνείς και υναµική ιαχείριση Μνήµης
Εικονικές Μηχανές, ιερµηνείς και υναµική ιαχείριση Μνήµης Περιεχόµενα Εικονικές µηχανές (Virtual Machines) ιερµηνείς (Interpreters) υναµική διαχείριση µνήµης Στοίβες (Stacks) Σωροί (Heaps) Συλλογή σκουπιδιών
Εικονικές Μηχανές, Διερμηνείς και Δυναμική Διαχείριση Μνήμης
Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού ΙΙ Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
Σχεδίαση Γλωσσών Προγραμματισμού. Εαρινό Εξάμηνο Lec03 18/02/2019
Σχεδίαση Γλωσσών Προγραμματισμού Εαρινό Εξάμηνο 2018-2019 Lec03 18/02/2019 Γλώσσες με δομή Block Γλώσσες με δομή Block Απλό μοντέλο Μηχανής Εκτέλεσης Διαχείριση Μνήμης Εμβέλεια και διάρκεια ζωής Εμβέλεια
Διαχείριση Μνήμης. Andre Derain, The turning road, Lestraque, Κωστής Σαγώνας Νίκος Παπασπύρου
Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906 Κωστής Σαγώνας Νίκος Παπασπύρου Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος
Διαχείριση Μνήμης. Δυναμική δέσμευση μνήμης. Μοντέλο μνήμης. Περιεχόμενα. Κατά την εκτέλεση του προγράμματος υπάρχει ανάγκη για δέσμευση μνήμης:
Διαχείριση Μνήμης Andre Derain, The turning road, Lestraque, 1906 Κωστής Σαγώνας Νίκος Παπασπύρου Δυναμική δέσμευση μνήμης Κατά την εκτέλεση του προγράμματος
Διαχείριση Μνήμης. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού Ι Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Αν κάπου κάνετε κάποιες υποθέσεις να αναφερθούν στη σχετική ερώτηση. Όλα τα αρχεία που αναφέρονται στα προβλήματα βρίσκονται στον ίδιο φάκελο με το εκτελέσιμο
ιαχείριση Μνήµης υναµική δέσµευση µνήµης Περιεχόµενα Μοντέλο µνήµης ήλωση πινάκων στη Java ηµιουργία πινάκων στη Java
ιαχείριση Μνήµης Andre Derain, The turning road, Lestraque, 1906 υναµική δέσµευση µνήµης Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης: Εγγραφών δραστηριοποίησης Αντικειµένων Άµεσων
ιαχείριση Μνήµης υναµική δέσµευση µνήµης Μοντέλο µνήµης Περιεχόµενα Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης:
υναµική δέσµευση µνήµης ιαχείριση Μνήµης Andre Derain, The turning road, Lestraque, 1906 Κατά την εκτέλεση του προγράµµατος υπάρχει ανάγκη για δέσµευση µνήµης: Εγγραφών δραστηριοποίησης Αντικειµένων Άµεσων
Instruction Execution Times
1 C Execution Times InThisAppendix... Introduction DL330 Execution Times DL330P Execution Times DL340 Execution Times C-2 Execution Times Introduction Data Registers This appendix contains several tables
05β Η ιδεατή μηχανή της Java
05β Η ιδεατή μηχανή της Java Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Περιεχόμενα
Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1
Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος
derivation of the Laplacian from rectangular to spherical coordinates
derivation of the Laplacian from rectangular to spherical coordinates swapnizzle 03-03- :5:43 We begin by recognizing the familiar conversion from rectangular to spherical coordinates (note that φ is used
Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα είναι μικρότεροι το 1000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Διάρκεια: 3,5 ώρες Καλή
EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)
EPL 603 TOPICS IN SOFTWARE ENGINEERING Lab 5: Component Adaptation Environment (COPE) Performing Static Analysis 1 Class Name: The fully qualified name of the specific class Type: The type of the class
The Simply Typed Lambda Calculus
Type Inference Instead of writing type annotations, can we use an algorithm to infer what the type annotations should be? That depends on the type system. For simple type systems the answer is yes, and
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 1ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Ορισμός Wikipedia.org 2 Δομημένος προγραμματισμός (structured programming) ή διαδικαστικός προγραμματισμός (procedural
HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:
HOMEWORK 4 Problem a For the fast loading case, we want to derive the relationship between P zz and λ z. We know that the nominal stress is expressed as: P zz = ψ λ z where λ z = λ λ z. Therefore, applying
HY150a Φροντιστήριο 3 24/11/2017
HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει
Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Παραγωγή τελικού κώδικα Από τον ενδιάμεσο κώδικα στον τελικό (1/2) Τα ορίσματα των εντολών ενδιάμεσου κώδικα είναι του τύπου expr*. Αυτές οι εκφράσεις θα πρέπει
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Διαφορές Java και C++ ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΙΑΦΟΡΕΣ JAVA C++ Η
alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and
alpha Language (1/5) ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language Στην alpha δεν υπάρχει main() συνάρτηση, ο κώδικας ξεκινάει την εκτέλεση από την αρχή του
Assalamu `alaikum wr. wb.
LUMP SUM Assalamu `alaikum wr. wb. LUMP SUM Wassalamu alaikum wr. wb. Assalamu `alaikum wr. wb. LUMP SUM Wassalamu alaikum wr. wb. LUMP SUM Lump sum lump sum lump sum. lump sum fixed price lump sum lump
Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής
Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,
Ανάπτυξη και Σχεδίαση Λογισμικού
Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές
Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.
B-Trees Index files can become quite large for large main files Indices on index files are possible 3 rd -level index 2 nd -level index 1 st -level index Main file 1 The 1 st -level index consists of pairs
ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.
Δείκτες σε συναρτήσεις. Προγραμματισμός II 1
Δείκτες σε συναρτήσεις Προγραμματισμός II 1 lalis@inf.uth.gr Συνάρτηση Ομάδα εντολών που γράφουμε ξεχωριστά για να υλοποιήσουμε μια συγκεκριμένη λειτουργία για καλύτερη / πιο καθαρή δόμηση του κώδικα για
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για
ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA
Βασικά στοιχεία προγραµµατισµού στη JAVA Διαχείριση Μνήµης 3 Δέσμευση Μνήμης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες
Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής
Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Να γραφεί πρόγραμμα το οποίο δέχεται ως είσοδο μια ακολουθία S από n (n 40) ακέραιους αριθμούς και επιστρέφει ως έξοδο δύο ακολουθίες από θετικούς ακέραιους
Λειτουργικά Συστήματα. Εισαγωγή
Λειτουργικά Συστήματα Εισαγωγή Λειτουργικά Συστήματα Ι 4/10/2016 Περιληπτικά Στο σημερινό μάθημα θα δούμε ποια είναι η θέση του Λειτουργικού Συστήματος στην οργάνωση ενός ηλεκτρονικού υπολογιστή. Σπύρος
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 1: Εισαγωγικές έννοιες Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 1 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου
ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ
ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Εισαγωγή στους δείκτες Το μοντέλο της μνήμης, σωρός και στοίβα Αναφορές Δείκτες και πίνακες Δέσμευση και αποδέσμευση μνήμης
Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java
Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Δρ. Απόστολος Γκάμας Λέκτορας (407/80) gkamas@uop.gr Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 1 Εισαγωγή
Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)
Phys460.nb 81 ψ n (t) is still the (same) eigenstate of H But for tdependent H. The answer is NO. 5.5.5. Solution for the tdependent Schrodinger s equation If we assume that at time t 0, the electron starts
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1
Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 12: Συνοπτική Παρουσίαση Ανάπτυξης Κώδικα με το Matlab Σαμαράς Νικόλαος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
03 Η ιδεατή μηχανή της Java
03 Η ιδεατή μηχανή της Java Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Περιεχόμενα Η πλατφόρμα της Java γενικά Εισαγωγή στο
Modbus basic setup notes for IO-Link AL1xxx Master Block
n Modbus has four tables/registers where data is stored along with their associated addresses. We will be using the holding registers from address 40001 to 49999 that are R/W 16 bit/word. Two tables that
Γλώσσες Προγραμματισμού Μεταγλωττιστές
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου Δομή Γλώσσες Προγραμματισμού Εισαγωγικά Γλώσσα Μηχανής Γλώσσες υψηλού επιπέδου Μεταγλωττιστές
Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο
Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων Εξάμηνο 7 ο Procedures and Functions Stored procedures and functions are named blocks of code that enable you to group and organize a series of SQL and PL/SQL
Homework 3 Solutions
Homework 3 Solutions Igor Yanovsky (Math 151A TA) Problem 1: Compute the absolute error and relative error in approximations of p by p. (Use calculator!) a) p π, p 22/7; b) p π, p 3.141. Solution: For
Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.
Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή (συνέχεια) Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση:
procedure P ( < pars > ) < type> f( < pars > ) begin { < local vars > < local vars > < procedure body> < procedure body> end; }
Σχεδίαση Γλωσσών & Μεταγλωττιστές Ενότητα 2: Εμβέλεια Τμήμα Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που
Αντισταθμιστική ανάλυση
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Παράδειγμα: Θυμηθείτε το πρόβλημα
Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016
Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Dynamic types, Lambda calculus machines Apr 21 22, 2016 1 Dynamic types and contracts (a) To make sure you understand the
ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΝΟΣΗΛΕΥΤΙΚΗΣ
ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΝΟΣΗΛΕΥΤΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΨΥΧΟΛΟΓΙΚΕΣ ΕΠΙΠΤΩΣΕΙΣ ΣΕ ΓΥΝΑΙΚΕΣ ΜΕΤΑ ΑΠΟ ΜΑΣΤΕΚΤΟΜΗ ΓΕΩΡΓΙΑ ΤΡΙΣΟΚΚΑ Λευκωσία 2012 ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΣΧΟΛΗ ΕΠΙΣΤΗΜΩΝ
ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I
ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I MIPS Η MIPS (Microprocessor without Interlocked Pipeline Stages) είναι μία αρχιτεκτονική συνόλου εντολών (ISA) γλώσσας μηχανής που αναπτύχθηκε από την εταιρεία
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση Αρης Ευθυμίου Ανακοινώσεις! Βαθμοί: 1ης εργαστηριακής άσκησης Βαθμός 0 χωρίς σχόλια δεν έχω πάρει την άσκηση! ελέγξτε μήπως δεν το στέλνετε στο σωστό
FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017
FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 M7 Δομές δεδομένων: Πίνακες - Ασκήσεις Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ
ΕΙΣΑΓΩΓΗ ΣΤΗ ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ
ΕΙΣΑΓΩΓΗ ΣΤΗ ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΕΛΕΝΑ ΦΛΟΚΑ Επίκουρος Καθηγήτρια Τµήµα Φυσικής, Τοµέας Φυσικής Περιβάλλοντος- Μετεωρολογίας ΓΕΝΙΚΟΙ ΟΡΙΣΜΟΙ Πληθυσµός Σύνολο ατόµων ή αντικειµένων στα οποία αναφέρονται
2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων
2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει
Math 6 SL Probability Distributions Practice Test Mark Scheme
Math 6 SL Probability Distributions Practice Test Mark Scheme. (a) Note: Award A for vertical line to right of mean, A for shading to right of their vertical line. AA N (b) evidence of recognizing symmetry
Το λειτουργικό σύστημα. Προγραμματισμός II 1
Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή περιορισμένοι υπολογιστικοί / αποθηκευτικοί πόροι δεν τίθεται θέμα
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)
Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού
Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών
Εισαγωγή στη γλώσσα προγραμματισμού JAVA Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών Το πρώτο φλιτζάνι Java Λίστα με τα απαραίτητα Το πρώτο μου πρόγραμμα(hello World) Συνεχίζοντας
ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ
ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος
Προχωρηµένα Θέµατα Αρχιτεκτονικής
Προχωρηµένα Θέµατα Αρχιτεκτονικής Μάθηµα 2 ο : Instruction Set Principles and Examples Μάθηµα 2 ο Προχωρηµένα Θέµατα Αρχιτεκτονικής 1 Σχεδιασµός Συνόλου Εντολών Θέµατα που θα συζητηθούν ιαφορετικές επιλογές
ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή
Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών
Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 6: Εμβέλεια, Δέσμευση Μνήμης Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Ορισμοί (1) Εμβέλεια ενός ονόματος (Scope),
B. Ενσωμάτωση Ιθαγενών Μεθόδων
B. Ενσωμάτωση Ιθαγενών Μεθόδων Στο τέλος αυτού του κεφαλαίου θα μπορείτε: Να δημιουργείτε κώδικα Java που θα φορτώνει βιβλιοθήκες και θα καλεί ιθαγενείς μεθόδους (native methods). Να χρησιμοποιείτε τη
Το λειτουργικό σύστημα. Προγραμματισμός II 1
Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007
Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Όλοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα μικρότεροι του 10000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Αν κάπου κάνετε κάποιες υποθέσεις
Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1
Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα Προγραμματισμός II 1 lalis@inf.uth.gr Χρήση λογισμικού που ήδη υπάρχει Τα πολύπλοκα συστήματα αναπτύσσονται σταδιακά, «χτίζοντας» πάνω σε υπάρχουσα λειτουργικότητα
Η ιδεατή μηχανή της Java
Η ιδεατή μηχανή της Java Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών Εαρινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Περιεχόμενα Η πλατφόρμα
9.09. # 1. Area inside the oval limaçon r = cos θ. To graph, start with θ = 0 so r = 6. Compute dr
9.9 #. Area inside the oval limaçon r = + cos. To graph, start with = so r =. Compute d = sin. Interesting points are where d vanishes, or at =,,, etc. For these values of we compute r:,,, and the values
1. Ξεκινώντας. 1.1 Τι είναι η Java. PDF created with FinePrint pdffactory Pro trial version
1. Ξεκινώντας Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να περιγράψετε τα κύρια χαρακτηριστικά της γλώσσας Java Να περιγράψετε τη Java Virtual Machine Να περιγράψετε πώς λειτουργεί ο μηχανισμός «συλλογής
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ
Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure
Block Ciphers Modes. Ramki Thurimella
Block Ciphers Modes Ramki Thurimella Only Encryption I.e. messages could be modified Should not assume that nonsensical messages do no harm Always must be combined with authentication 2 Padding Must be
ω ω ω ω ω ω+2 ω ω+2 + ω ω ω ω+2 + ω ω+1 ω ω+2 2 ω ω ω ω ω ω ω ω+1 ω ω2 ω ω2 + ω ω ω2 + ω ω ω ω2 + ω ω+1 ω ω2 + ω ω+1 + ω ω ω ω2 + ω
0 1 2 3 4 5 6 ω ω + 1 ω + 2 ω + 3 ω + 4 ω2 ω2 + 1 ω2 + 2 ω2 + 3 ω3 ω3 + 1 ω3 + 2 ω4 ω4 + 1 ω5 ω 2 ω 2 + 1 ω 2 + 2 ω 2 + ω ω 2 + ω + 1 ω 2 + ω2 ω 2 2 ω 2 2 + 1 ω 2 2 + ω ω 2 3 ω 3 ω 3 + 1 ω 3 + ω ω 3 +
Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας
Τ.Ε.Ι ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Πτυχιακή εργασία του φοιτητή Γιαννακίδη Αποστόλη Επιβλέπων καθηγητής Τσούλος
Λειτουργικά Συστήματα (Λ/Σ)
Λειτουργικά Συστήματα (Λ/Σ) Βασικές Έννοιες Λειτουργικών Συστημάτων Βασίλης Σακκάς 13/11/2013 1 ΒασικέςΈννοιεςΛ/Σ Η επικοινωνία μεταξύ Λ/Σ και των προγραμμάτων του χρήστη γίνεται μέσω του συνόλου των «εκτεταμένων
The challenges of non-stable predicates
The challenges of non-stable predicates Consider a non-stable predicate Φ encoding, say, a safety property. We want to determine whether Φ holds for our program. The challenges of non-stable predicates
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #1 η : Εισαγωγή: Λογισμικό, Γλώσσες Προγραμματισμού, Java
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #1 η : Εισαγωγή: Λογισμικό, Γλώσσες Προγραμματισμού, Java Γαβαλάς Δαμιανός dgavalas@aegean.gr Στόχοι μαθήματος Διάκριση και κατανόηση των υφιστάμενων
ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006
ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/26 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα μικρότεροι το 1 εκτός αν ορίζεται διαφορετικά στη διατύπωση
Λειτουργικά Συστήματα (ΗΥ222)
Λειτουργικά Συστήματα (ΗΥ222) Διάλεξη 10: Διαχείριση Μνήμης σε Επίπεδο Χρήστη Δυναμική Διαχείριση Μνήμης Σχεδόν κάθε πρόγραμμα χρησιμοποιεί δυναμική διαχείριση μνήμης Σημαντική βελτίωση λειτουργικότητας
Αρχιτεκτονική Υπολογιστών
Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 7: Αποκωδικοποίηση Εντολής x86 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4
ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 4 Διαδικασίες Ι Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Διευθυνσιοδότηση διακλαδώσεων
Section 8.3 Trigonometric Equations
99 Section 8. Trigonometric Equations Objective 1: Solve Equations Involving One Trigonometric Function. In this section and the next, we will exple how to solving equations involving trigonometric functions.
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1
2 Composition. Invertible Mappings
Arkansas Tech University MATH 4033: Elementary Modern Algebra Dr. Marcel B. Finan Composition. Invertible Mappings In this section we discuss two procedures for creating new mappings from old ones, namely,
CHAPTER 25 SOLVING EQUATIONS BY ITERATIVE METHODS
CHAPTER 5 SOLVING EQUATIONS BY ITERATIVE METHODS EXERCISE 104 Page 8 1. Find the positive root of the equation x + 3x 5 = 0, correct to 3 significant figures, using the method of bisection. Let f(x) =
EE512: Error Control Coding
EE512: Error Control Coding Solution for Assignment on Finite Fields February 16, 2007 1. (a) Addition and Multiplication tables for GF (5) and GF (7) are shown in Tables 1 and 2. + 0 1 2 3 4 0 0 1 2 3
Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).
Δέσμευση Μνήμης (memory allocatio) Τι σημαίνει; Διαχείριση Μνήµης Ο καλός προγραμματισμός επιβάλλει την αποδοτική χρήση της μνήμης του Η/Υ. Είναι σημαντικό να καταλαβαίνουμε τις διαδικασίες δέσμευσης μνήμης:
Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )
ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση
Writing kernels for fun and profit
Writing kernels for fun and profit Γιάννης Τσιομπίκας nuclear@memberfsforg 23 Μαρτίου 2011 Γιατί; It s FUN! Εξοικείωση με το hardware Εμβάθυνση στον θαυμαστό κόσμο των λειτουργικών συστημάτων Μια καλή
Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1
Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής
Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5
ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι Διάλεξη 5 Διαδικασίες ΙI Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Εισαγωγή στους Η/Υ (ΗΥ134) 1 Κατανομή μνήμης Κείμενο
Η γλώσσα προγραμματισμού C
Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η
Capacitors - Capacitance, Charge and Potential Difference
Capacitors - Capacitance, Charge and Potential Difference Capacitors store electric charge. This ability to store electric charge is known as capacitance. A simple capacitor consists of 2 parallel metal
Πώς μπορεί κανείς να έχει έναν διερμηνέα κατά την επίσκεψή του στον Οικογενειακό του Γιατρό στο Ίσλινγκτον Getting an interpreter when you visit your
Πώς μπορεί κανείς να έχει έναν διερμηνέα κατά την επίσκεψή του στον Οικογενειακό του Γιατρό στο Ίσλινγκτον Getting an interpreter when you visit your GP practice in Islington Σε όλα τα Ιατρεία Οικογενειακού