Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Σχετικά έγγραφα
EPL475:Εργαστήριο 5, GDB

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

make Προγραμματισμός II 1

ΕΠΛ Εισαγωγή στον Προγραµµατισµό: Λογισµικό. Το λογισµικό του συστήµατος: 1 Εισαγωγή ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Αρχιτεκτονική Υπολογιστών

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

Eternal War in Memory. Dimitris Mitropoulos

Δομημένος Προγραμματισμός

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

(Ψηφιακοί)Υπολογιστές ENIAC Πληροφορική και Υπολογιστές. ΕΠΛ 031: Εισαγωγή στον (FORTRAN) Γιώργος Χρυσάνθου. Ποτε? ~1940 ΕΝΙΑC. Γιατι?

Προγραμματισμός Υπολογιστών με C++

Πληροφορική και Υπολογιστές

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Προγραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Εργαστήριο Αρ. 2

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Εισαγωγή Βασικές εντολές Εκτέλεση βήµα-βήµα Εξέταση/Ανάθεση GDB-101. Νίκος Ντάρµος Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Ενδεικτικές λύσεις και στατιστικά

Πληροφορική 2. Γλώσσες Προγραμματισμού

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ & ΧΡΗΣΗΣ ΟΛΟΚΛΗΡΩΜΕΝΟΥ ΠΕΡΙΒΑΛΛΟΝΤΟΣ ΑΝΑΠΤΥΞΗΣ BloodShed Dev-C++

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

MIPS functions and procedures

Δομημένος Προγραμματισμός

MIPS Interactive Learning Environment. MILE Simulator. Version 1.0. User's Manual

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικαστικός Προγραμματισμός

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Η γλώσσα προγραμματισμού C

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Ανάπτυξη και Σχεδίαση Λογισμικού

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Κεφάλαιο 1 Εισαγωγή στη C

Διάλεξη 22η: Επιπλέον στοιχεία της C

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Κεφάλαιο 2 Buffer Overflow Exploits

Αρχιτεκτονική Υπολογιστών

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

ΑΣΚΗΣΗ. Ορίζονται μόνο καθολικές ακέραιες μεταβλητές με τη σύνταξη: int varname;

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

50 Ketseo,Theoni Sarif,Omar 104

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμό για ΗΜΥ

Διάλεξη 11: Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Προγραµµατιστικές Τεχνικές

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Δομημένος Προγραμματισμός (ΤΛ1006)

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος.

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Ενσωματωμένα Συστήματα

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Transcript:

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος 2016-2017 Άσκηση 1: Εισαγωγή στο περιβάλλον προγραμματισμού 1 Ασκήσεις 1 1.1 Σύνδεση με αρχείο αντικειμένων...................... 1 1.2 Συνένωση δύο αρχείων σε τρίτο....................... 2 2 Εξέταση άσκησης και αναφορά 3 3 Προαιρετικές ερωτήσεις 4 1 Ασκήσεις 1.1 Σύνδεση με αρχείο αντικειμένων Στην άσκηση αυτή ζητείται η δημιουργία ενός εκτελέσιμου αρχείου (με όνομα zing) που θα καλεί τη συνάρτηση zing(). Η συνάρτηση αυτή δηλώνεται στο αρχείο zing.h. Επιπρόσθετα, είναι διαθέσιμο το αρχείο αντικειμένων (object file) zing.o. Τα αρχεία αυτά βρίσκονται στον κατάλογο /home/oslab/code/zing και θα πρέπει να αντιγραφούν στον κατάλογο εργασίας σας. Βήματα: 1. Αντιγραφή αρχείων zing.h και zing.o στον κατάλογο εργασίας σας. 2. Δημιουργία αρχείου αντικειμένων main.o για τη συνάρτηση main(). 3. Σύνδεση (linking) των δύο αρχείων αντικειμένων. Ερωτήσεις: 1. Ποιο σκοπό εξυπηρετεί η επικεφαλίδα; 2. Ζητείται κατάλληλο Makefile για τη δημιουργία του εκτελέσιμου της άσκησης. 3. Γράψτε το δικό σας zing2.o, το οποίο θα περιέχει zing() που θα εμφανίζει διαφορετικό αλλά παρόμοιο μήνυμα με τη zing() του zing.o. Συμβουλευτείτε το manual page της getlogin(3). Αλλάξτε το Makefile ώστε να παράγονται δύο εκτελέσιμα, ένα με το zing.o, ένα με το zing2.o, επαναχρησιμοποιώντας το κοινό object file main.o.

4. Έστω ότι έχετε γράψει το πρόγραμμά σας σε ένα αρχείο που περιέχει 500 συναρτήσεις. Αυτή τη στιγμή κάνετε αλλαγές μόνο σε μία συνάρτηση. Ο κύκλος εργασίας είναι: αλλαγές στον κώδικα, μεταγλώττιση, εκτέλεση, αλλαγές στον κώδικα, κ.ο.κ. Ο χρόνος μεταγλώττισης είναι μεγάλος, γεγονός που σας καθυστερεί. Πώς μπορεί να αντιμετωπισθεί το πρόβλημα αυτό; 5. Ο συνεργάτης σας και εσείς δουλεύατε στο πρόγραμμα foo.c όλη την προηγούμενη εβδομάδα. Καθώς κάνατε ένα διάλειμμα και ο συνεργάτης σας δούλευε στον κώδικα, ακούτε μια απελπισμένη κραυγή. Ρωτάτε τι συνέβει και ο συνεργάτης σας λέει ότι το αρχείο foo.c χάθηκε! Κοιτάτε το history του φλοιού και η τελευταία εντολή ήταν η: gcc -Wall -o foo.c foo.c Τι συνέβη; hint #1: Επειδή τα λάθη είναι ανθρώπινα, συνιστούμε να κρατάτε backup των αρχείων σας και να χρησιμοποιείτε Makefile. Σημείωση: Το αρχείο zing.o είναι για 32-bit x86 αρχιτεκτονική και, συνεπώς, ασύμβατο με αρχεία διαφορετικών αρχιτεκτονικών. Σε ένα τυπικό περιβάλλον 64-bit x86 μπορεί να χρησιμοποιηθεί ο διακόπτης -m32 στον gcc, ώστε να παράγει κώδικα 32-bit. 1.2 Συνένωση δύο αρχείων σε τρίτο Στην άσκηση αυτή ζητείται πρόγραμμα που θα δημιουργεί ένα αρχείο (αρχείο εξόδου). Τα περιεχόμενα του αρχείου εξόδου θα προκύπτουν συνενώνοντας τα περιεχόμενα δύο αρχείων εισόδου. Το πρόγραμμα (fconc) θα δέχεται δύο ή τρία ορίσματα. Συγκεκριμένα: Αν το πρόγραμμα κληθεί χωρίς τα κατάλληλα ορίσματα θα εμφανίζεται μήνυμα βοήθειας. Το πρώτο και το δεύτερο όρισμα είναι τα αρχεία εισόδου. Το τρίτο όρισμα είναι προαιρετικό και είναι το αρχείο εξόδου. Η προεπιλεγμένη (default) τιμή για το αρχείο εξόδου είναι fconc.out Σε περίπτωση που ένα από τα αρχείο εισόδου δεν υπάρχει, το πρόγραμμα θα πρέπει να εμφανίζει κατάλληλο μήνυμα λάθους. Παραδείγματα εκτέλεσης: $./fconc A Usage:./fconc infile1 infile2 [outfile (default:fconc.out)] $./fconc A B A: No such file or directory $ echo 'Goodbye,' > A $ echo 'and thanks for all the fish!' > B $./fconc A B $ cat fconc.out Goodbye, and thanks for all the fish! $./fconc A B C $ cat C Goodbye, and thanks for all the fish!

Προτεινόμενος σκελετός υλοποίησης (συναρτήσεις) void dowrite(int fd, const char *buff, int len) Συνάρτηση που αναλαμβάνει την εγγραφή στον περιγραφητή αρχείου fd. void write_file(int fd, const char *infile) Συνάρτηση που γράφει τα περιεχόμενα του αρχείου με όνομα infile στον περιγραφητή αρχείου fd. Χρησιμοποιεί την dowrite(). Ερωτήσεις: 1. Εκτελέστε ένα παράδειγμα του fconc χρησιμοποιώντας την εντολή strace. Αντιγράψτε το κομμάτι της εξόδου της strace που προκύπτει από τον κώδικα που γράψατε. 2 Εξέταση άσκησης και αναφορά Η προθεσμία για την εξέταση της άσκησης στο εργαστήριο θα ανακοινωθεί στη λίστα του μαθήματος. Μετά την εξέταση η κάθε ομάδα θα πρέπει να συντάξει μια (σύντομη) αναφορά και να τη στείλει μέσω e-mail στους υπευθύνους της ομάδας εργαστηρίου. Αναλυτικές οδηγίες για τη διεύθυνση αποστολής υπάρχουν στη σελίδα του μαθήματος. Η προθεσμία για την αναφορά είναι μια εβδομάδα μετά την προθεσμία εξέτασης της άσκησης. Η αναφορά αυτή θα περιέχει: Για την άσκηση 1.1: - Τον πηγαίο κώδικα (source code) της άσκησης - Τη διαδικασία μεταγλώττισης και σύνδεσης - Την έξοδο εκτέλεσης του προγράμματος - Σύντομες απαντήσεις στις ερωτήσεις Για την άσκηση 1.2: - Τον πηγαίο κώδικα (source code) της άσκησης - Σύντομες απαντήσεις στις ερωτήσεις

3 Προαιρετικές ερωτήσεις (επιπλέον βαθμoί: 0) 1. Χρησιμοποιήστε την εντολή strace για να εντοπίσετε με ποια κλήση συστήματος υλοποιείται η εντολή strace. Υπόδειξη: με strace -o file η έξοδος της εντολής τοποθετείται στο αρχείο file. 2. Χρησιμοποιώντας το πρόγραμμα gdb (GNU debugger), μπορείτε να δείτε την assembly συναρτήσεων. Για παράδειγμα αν το χρησιμοποιήσετε για τη συνάρτηση main() του αρχείου main.o της άσκησης 1.1 θα δείτε κάτι σαν το παρακάτω: $ gdb -q main.o (no debugging symbols found) (gdb) disassemble main Dump of assembler code for function main: 0x00000000 <main+0>: lea 0x4(%esp),%ecx 0x00000004 <main+4>: and $0xfffffff0,%esp 0x00000007 <main+7>: pushl -0x4(%ecx) 0x0000000a <main+10>: push %ebp 0x0000000b <main+11>: mov %esp,%ebp 0x0000000d <main+13>: push %ecx 0x0000000e <main+14>: sub $0x4,%esp 0x00000011 <main+17>: call 0x12 <main+18> 0x00000016 <main+22>: mov $0x0,%eax 0x0000001b <main+27>: add $0x4,%esp 0x0000001e <main+30>: pop %ecx 0x0000001f <main+31>: pop %ebp 0x00000020 <main+32>: lea -0x4(%ecx),%esp 0x00000023 <main+35>: ret End of assembler dump. Η πρώτη στήλη είναι η διεύθυνση, η δεύτερη είναι η απόσταση από την αρχή της συνάρτησης, και οι επόμενες στήλες είναι η εντολή assembly με τα ορίσματά της. Αντίστοιχα για το εκτελέσιμο zing η έξοδος θα μοιάζει κάπως έτσι: $ gdb -q zing (no debugging symbols found) (gdb) disassemble main Dump of assembler code for function main: 0x080483e0 <main+0>: lea 0x4(%esp),%ecx 0x080483e4 <main+4>: and $0xfffffff0,%esp 0x080483e7 <main+7>: pushl -0x4(%ecx) 0x080483ea <main+10>: push %ebp 0x080483eb <main+11>: mov %esp,%ebp 0x080483ed <main+13>: push %ecx 0x080483ee <main+14>: sub $0x4,%esp 0x080483f1 <main+17>: call 0x8048404 <zing> 0x080483f6 <main+22>: add $0x4,%esp 0x080483f9 <main+25>: xor %eax,%eax 0x080483fb <main+27>: pop %ecx 0x080483fc <main+28>: pop %ebp 0x080483fd <main+29>: lea -0x4(%ecx),%esp 0x08048400 <main+32>: ret End of assembler dump.

Παρατηρήστε ότι εκτός των απολύτων διευθύνσεων, η μοναδική αλλαγή στην assembly είναι το όρισμα της εντολής call (κλήση συνάρτησης). Πού οφείλεται η αλλαγή; ποιος την έκανε; 3. Γράψτε το πρόγραμμα της άσκησης 1.2, ώστε να υποστηρίζει αόριστο αριθμό αρχείων εισόδου (π.χ. 1, 2, 3, 4,...). Θεωρήστε ότι το τελευταίο όρισμα είναι πάντα το αρχείο εξόδου. 4. Εάν τρέξετε το εκτελέσιμο /home/oslab/code/whoops/whoops θα δώσει: $ /home/oslab/code/whoops/whoops Problem! Θεωρήστε ότι πραγματικά υπάρχει πρόβλημα. Εντοπίστε το. hint #2: Χρησιμοποιήστε επεξηγηματικά μηνύματα λάθους στα προγράμματά σας.