Πληροφορίες Μαθήματος

Περιγραφή Μαθήματος

Το μάθημα εξετάζει σε βάθος το Linux ως περιβάλλον ανάπτυξης λογισμικού, από τη σκοπιά του προγραμματιστή συστήματος. Στο πρώτο μέρος δουλεύουμε με το κέλυφος (bash): βασικά εργαλεία, ανακατευθύνσεις, διαχείριση διεργασιών, Makefiles και προγραμματισμό σεναρίων (shell scripts). Στο κύριο μέρος γράφουμε προγράμματα σε C/C++ που χρησιμοποιούν απευθείας τις κλήσεις συστήματος (system calls) του Linux/POSIX: χειρισμό λαθών, είσοδο/έξοδο χαμηλού επιπέδου, σήματα, δημιουργία και έλεγχο διεργασιών, επικοινωνία διεργασιών (pipes, FIFOs, κοινή μνήμη, σημαφόροι, κλείδωμα αρχείων), δικτυακό προγραμματισμό με sockets, και πολυνηματικό προγραμματισμό με POSIX threads και μηχανισμούς συγχρονισμού (mutexes, condition variables, monitors).

Με την ολοκλήρωση του μαθήματος θα μπορείτε:

  • να αυτοματοποιείτε εργασίες με bash scripts·
  • να γράφετε προγράμματα σε C που χρησιμοποιούν σωστά τις κλήσεις συστήματος και χειρίζονται τα λάθη τους (π.χ. errno, διακοπή από σήματα, μερικές αναγνώσεις/εγγραφές)·
  • να σχεδιάζετε εφαρμογές με πολλές διεργασίες ή νήματα που επικοινωνούν και συγχρονίζονται σωστά·
  • να υλοποιείτε απλούς εξυπηρετητές (servers) και πελάτες (clients) πάνω από TCP/IP·
  • να εντοπίζετε και να αποφεύγετε τα τυπικά σφάλματα του ταυτόχρονου κώδικα (race conditions, deadlocks).

Το μάθημα είναι έντονα προγραμματιστικό: περιλαμβάνει προγραμματιστικές ασκήσεις και γραπτή τελική εξέταση. Από τη φύση του χρειάζεται αυτενέργεια και συνεχή προσωπική προσπάθεια. Θα πρέπει να γνωρίζετε C και δομές δεδομένων και να έχετε ολοκληρώσει το μάθημα Κ22: Λειτουργικά Συστήματα. Οι ασκήσεις σας θα πρέπει να μεταγλωττίζονται και να τρέχουν στα Linux workstations του τμήματος.

Ανακοινώσεις

  • 15/02: Το μάθημα ξεκινάει Δευτέρα 17 Φεβρουαρίου.

Βιβλιογραφία

Syllabus & Πρόγραμμα

LectureTopicSlides & Code
Module 1: Introduction to Unix
Lecture 1Course logistics. Introduction to Unix, basic commands
Lecture 2File processing, basic commands (cont'd)
Lecture 3csh, bash, environment variables, input/output, process management, makefiles
Module 2: Shell Scripting
Lecture 4Shell scripting: parameters, simple arithmetic, if, case, sample programs
Lecture 5Shell scripting: for, while, file contents, exec
Module 3: Error Handling, Low-Level I/O & Signals
Lecture 6Error handling, low-level I/O
Lecture 7Low-level I/O, signals
Module 4: Processes & Pipes
Lecture 8Processes, process control
Lecture 9Process control, pipes
Interlude: AI for Coding
Lecture 10AI for coding: tools, workflows and failure modes, with systems programming as the case study
Module 5: Internetworking with Sockets
Lecture 11Sockets: addressing, TCP client/server
Lecture 12Sockets (cont'd): name resolution, UDP datagrams
Module 6: Threads
Lecture 13POSIX threads: creation, termination, joining
Lecture 14Thread synchronization: mutexes, condition variables
Module 7: Advanced Threads & Monitors
Lectures 15–16Advanced threads, monitor-style programming
Module 8: Inter-Process Communication
Lecture 17IPC, message queues, shared memory
Lecture 18Shared memory, semaphores
Lectures 19–20Semaphores, file locking
Module 9: sed & awk (optional)
Lecture 21sed and awk programming (if time permits)
Review
Lectures 22–23Επανάληψη

Οδηγίες Παράδοσης των Ασκήσεων

Χρήσιμοι Σύνδεσμοι