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

Σχετικά έγγραφα
Προγραµµατισµός 2 The shell

Λειτουργικά Συστήματα (Λ/Σ)

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

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

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

Linux με τη χρήση κονσόλας

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 6o ΕΡΓΑΣΤΗΡΙΟ

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Μερικές άλλες χρήσιμες εντολές

waitpid(), read(), write(), pipe(), mkfifo() κ.α.).

Λειτουργικά Συστήματα

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

Εισαγωγή στο UNIX. Κωνσταντίνος Καραφασούλης ιδάσκων (Π 407) Τµήµα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστηµάτων

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

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

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Χρονοδρομολογητής Κυκλικής Επαναφοράς

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Εργαστήριο 7 fork(), exec(), signals

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Εισαγωγή στα Λειτουργικά Συστήματα

Λειτουργικά Συστήματα

ΤρόποςΑξιολόγησης: α) Εργαστήρια (Προαιρετικάµε 20% - 35% βαρύτητα µόνοθετικά) β) Τελική Γραπτή Εξέταση

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ (TP-105)

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

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

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

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

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

50 Ketseo,Theoni Sarif,Omar 104

ΕΡΓΑΣΙΑ 1 Ημερομηνία Ανάρτησης: 02/02/2017 Ημερομηνία Παράδοσης: 16/02/2017, 09:00 π.μ. Στόχος Ορισμός

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

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

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

ΕΡΓΑΣΤΗΡΙΟ #1. Το Λειτουργικό Σύστηµα Unix

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

Λειτουργικά Συστήματα

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Εισαγωγή στην Πληροφορική

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Εργαστήριο 5 fork(), exec(), signals

Άγγελος Αγγελόπουλος. Εισαγωγή στο LINUX. Οδηγός Χρήσης

fall2018/k22/home m1436+at-di.

Δίκτυα Η/Υ στην Επιχείρηση

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

2.Shell, users, groups και privilegies

Μερικές άλλες χρήσιμες εντολές

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

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

Λειτουργικά Συστήματα Ι - Εργαστήριο

ΗΥ-100: Εισαγωγή στην Επιστήμη Υπολογιστών 3η σειρά ασκήσεων

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

ΕΡΓΑΣΙΑ 3. Παίζοντας Sudoku. Ημερομηνία Ανάρτησης: 16/03/2018 Ημερομηνία Παράδοσης: 03/04/2018, 09:00

Το Shell. Προγραμματισμός II 1

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

Αντικειμενοστρεφής Προγραμματισμός

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

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Λειτουργικά Συστήματα (ΗΥ321)

Εγκατάσταση του PiNet για διαχείριση εργαστηρίου με Raspberry Pi. Συγγραφέας: Τριχόπουλος Γιώργος Δεκέμβριος 2016

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Η εντολή ln. σύνδεση με την πραγματική καταχωρημένη πληροφορία. περισσότερα ονόματα (συνδέσεις). Τα επιπλέον ονόματα δημιουργούνται με

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών ΗΥ463 Συστήματα Ανάκτησης Πληροφοριών Χειμερινό Εξάμηνο

Λειτουργικά Συστήµατα

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Λειτουργικά Συστήματα

Αλληλεπίδραση με το Matlab

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

Μεταφορά Αρχείων µε χρήση της Υπηρεσίας FTP σελ. 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #0

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές Σχολή Θετικών Επιστημών Τμ. Πληροφορικής. Διδάσκων: Ι. Η. Λαγαρής. Εισαγωγή

head head n n L file standard output Παράδειγμα: head n n 10 test Σε συνδυασμό με την την tail,

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ UNIX

Παίζοντας Τόμπολα. Ημερομηνία Ανάρτησης: 16/03/2017 Ημερομηνία Παράδοσης: 30/03/2017, 23:59

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

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

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

Transcript:

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο 2018-2019 Άσκηση 1 Φροντιστήριο: 05/10/2018 Παράδοση: 18/10/2018 Υλοποίηση Linux C Shell ΤΑ : shevtsov(shevtsov@csd.uoc.gr) Ώρες Γραφείου : Δευτέρα 14:00-16:00 Παρασκευή 14:00-16:00 Στις αίθουσες Β208,Β210,Β212 Σε αυτή την άσκηση θα χρειαστεί να φτιάξετε ένα απλό πρόγραμμα που θα υλοποιεί ένα Linux C shell(command interpreter) με όνομα cs345sh για το λειτουργικό σύστημα Linux. Μέσω της άσκησης θα εξοικειωθείτε με τη δημιουργία, τον έλεγχο, την εκτέλεση διεργασιών τις κλήσεις συστήματος 1 fork(), wait() και exec() την επικοινωνία διεργασιών μεσώ pipes, τη χρήση μεταβλητών συστήματος και την ανακατεύθυνση dup2(). Το prompt του cs345sh Shell θα είναι: <user>@cs345sh/<dir>/$ Σημειώστε πως αντί για <user>, το Shell θα εκτυπώνει το όνομα του χρήστη που είναι logged-in στο σύστημα 2 kαι αντί για <dir> θα τυπώνει το τρέχον directory 3. 1. Ή αλλιώς System Calls 2. Δείτε την συνάρτηση βιβλιοθήκης getlogin() 3. Δείτε την συνάρτηση βιβλιοθήκης getcwd()

Με το cs345sh, ένας χρήστης θα έχει τη δυνατότητα να δίνει απλές εντολές και αυτές να εκτελούνται. Προκειμένου να γίνει αυτό : 1. Αφότου διαβάσει μια γραμμή εντολών, το cs345sh θα χρησιμοποιεί το system call fork(), για να δημιουργήσει μια καινούρια διεργασία-παιδί 4 η οποία θα εκτελεί την εντολή του χρήστη. Η εκτέλεση της εντολής από τη διεργασία-παιδί θα γίνεται με τη χρήση ενός από τα system calls της οικογένειας exec(). 2. Η πατρική διεργασία θα περιμένει τη διεργασία-παιδί να τελειώσει την εκτέλεσή της 5. Έπειτα θα επιστρέφει στο prompt περιμένοντας τη νέα εντολή του χρήστη, εκτός αν ο χρήστης έχει πληκτρολογήσει το "&" στο τέλος της εντολής, οπού αυτό σημαίνει ότι η διεργασία θα τρέχει ως daemon 6 οπότε και η πατρική διεργασία δεν θα περιμένει, αλλά θα επιστρέφει αμέσως στο prompt για νέα εντολή. Σε αυτήν την περίπτωση, πριν επιστρέψει στο prompt για να περιμένει νέα εντολή, θα πρέπει πρώτα να τυπώνει το όνομα και το pid της διεργασίας που τρέχει στο παρασκήνιο. Απλές εντολές: 1. cd Η εντολή αυτή θα δέχεται ένα όρισμα που δηλώνει τον κατάλογο (directory) ο οποίος θα πρέπει να γίνει το νέο τρέχον directory (δείτε την κλήση συστήματος chdir()). 2. Background Process Επιπλέον ο χρήστης πληκτρολογώντας fg πρέπει να μπορεί να επαναφέρει τη διεργασία που έβαλε στο παρασκήνιο (background) στο προσκήνιο (foreground). Ο χρήστης μπορεί χρησιμοποιώντας το συνδυασμό Ctrl+Z να κάνει μια διεργασία που τρέχει στο προσκήνιο (foreground) να μεταφερθεί στο παρασκήνιο (background). Έτσι η πατρική διεργασία δεν θα περιμένει, αλλά θα επιστρέφει αμέσως στο prompt για νέα εντολή. Πριν επιστρέψει στο prompt, θα πρέπει να τυπώνει το όνομα της διεργασίας που τρέχει στο παρασκήνιο. 4. Ή αλλιώς Child Process 5. Δείτε to System Call wait() 6. Background Process

3. Tab filename expansion Με την χρήση του TAB, στην περίπτωση που υπάρχουν αρχεία των οποίων το όνομα ξεκινά με το ίδιο πρόθεμα (prefix), το πρόγραμμα θα πρέπει να τυπώνει όλα τα αρχεία με αυτό το prefix -εάν είναι πάνω από ένα. Στην περίπτωση που υπάρχει μόνο ένα τέτοιο αρχείο, το πρόγραμμά σας πρέπει να συμπληρώνει αυτόματα (autocomplete) το όνομα του αρχείου. 4. Wildcard * Ο χρήστης μπορεί να χρησιμοποιεί * για εκτέλεση της εντολής για πάνω από ένα αρχείο. Π.Χ. rm *.txt 5. Εxit Με την εντολή exit θα τερματίζεται η λειτουργία του cs345sh. Προσοχή, το Shell σας θα πρέπει να υλοποιεί όλες τις απλές εντολές ουχί μονό αυτές που αναφέρονται παραπάνω και να υποστηρίζονται και τα αντίστοιχα ορίσματα. Π.Χ. <user>@cs345sh/<dir>/$ ls -a l Επιπλέον, θα πρέπει να υλοποιήσετε: 6. Pipe Το pipe() τροφοδοτεί την έξοδο μιας εντολής ως είσοδο σε μια άλλη εντολή που συνυπάρχουν στη γραμμή εντολών και διαχωρίζονται με το σύμβολο. Π.χ. <user>@cs345sh/<dir>/$ps axl grep zombie Η παραπάνω εντολή εντοπίζει όλες τις zombie διεργασίες. Για την υλοποίηση της συγκεκριμένης λειτουργιάς μπορείτε να αξιοποιήσετε το system call pipe().

7. Redirection Ανακατεύθυνση εισόδου < και εξόδου ( >, >> ) Η εντολή: <user>@cs345sh/<dir>/$command > output Γράφει" την έξοδο της εντολή ς αριστερά του '<' στο αρχείο output. Π.Χ. user@cs345sh/dir/$ls -l mydir > out_file Από την άλλη, η εντολή : user@cs345sh/dir/$ command < input Διαβάζει την είσοδο για την εντολή αριστερά του '< από το αρχείόο input. Π.Χ. user@cs345sh/dir/$ cat < input_file Για την υλοποίηση της συγκεκριμένης λειτουργίας μπορείτε να αξιοποιήσετε το system call dup2().

Reference man pages Ένα man page περιγράφει τον τρόπο λειτουργίας ενός προγράμματος, ενός system call ή μιας Library function. Η εμφάνιση ενός man page γίνεται με τη χρήση της εντολής: man. Για να δείτε το man page (σε Linux) που αναφέρεται στη foo(n), κάνετε: $man -S N foo O συμβολισμός foo(n) αναφέρεται στο man page που περιγράφει τη foo στην κατηγορία(section) N. π.χ. $ man -S 2 fork επιστρέφει το man page του system call fork(2) Λίστα με χρήσιμα man pages για την Aσκηση 1: Σας παραθέτουμε man pages με system calls που μπορεί να χρειαστείτε για την υλοποίηση της άσκησης. Μπορείτε να εξερευνήσετε και εναλλακτικές επιλογές. Η παρακάτω λίστα δεν είναι δεσμευτική: fork(2) exec(3) execv(3) wait(2) waitpid(2) signal(2) kill(1) pipe(2) sh(1) bash(1) chdir(2) getcwd(2) getlogin(2) dup2(2) termios(3)

Παρατηρήσεις 1. Η άσκηση είναι ατομική. Τυχόν αντιγραφές μπορούν να ανιχνευθούν ευκολά από κατάλληλο πρόγραμμα και θα μηδενιστούν. Συμπεριλάβετε το όνομα σας και το λογαριασμό σας (account) σε όλα τα αρχεία. 2. Κατασκευάστε ένα αρχείο Makefile, έτσι ώστε πληκτρολογώντας make all να γίνεται η μεταγλώττιση (compilation) του προγράμματος και να παράγεται το εκτελέσιμο αρχείο. Επίσης πληκτρολογώντας make clean να καθαρίζονται όλα τα περιττά αρχεία, και να μένουν μονό τα αρχεία που χρειάζονται για τη μεταγλώττιση. 3. Επιπλέον, γράψτε και ένα αρχείο readme.txt το πολύ 30 γραμμών που να περιέχει επεξηγήσεις για τον τρόπο υλοποίησης και παραδείγματα για τη χρήση του cs345sh που υλοποιήσατε. 4. Τοποθετήστε σε ένα κατάλογο όλα τα αρχεία που χρειάζονται για την άσκηση 1. Παραδώστε τα παραπάνω αρχεία χρησιμοποιώντας το πρόγραμμα turnin (πληκτρολογήστε turnin assignment_1@hy345 directory_name από τον κατάλογο που περιέχει τον κατάλογο directory_name με τα αρχεία της άσκησης). 5. Σε πολλές περιπτώσεις τα ονόματα των συναρτήσεων βιβλιοθήκης είναι ενδεικτικά. Μπορείτε να χρησιμοποιήσετε οποία σας βολεύουν.