Λειτουργικά Συστήματα UNIX
Ιστορία του UNIX 1940-50: υπολογιστές για ένα άτομο και μία εργασία για κάθε χρονική περίοδο επικράτηση batch systems 1960: ερευνητικά συστήματα διαμοιρασμού χρόνου Dartmouth College: βασισμένο σε BASIC MIT: CTSS
Multics CTSS Multics (MIT, Bell Labs, GE) Τα Bell Labs αποσύρθηκαν από το πρόγραμμα Multics. Μια ομάδα ερευνητών συνέχισε την έρευνα για ένα ΛΣ με δυνατότητες αντίστοιχες του Multics
UNIX O Ken Thompson γράφει το 1969 μια περιορισμένη έκδοση του Multics σε assembler, το οποίο ονομάστηκε UNICS. Σχεδιάζεται από τους Thompson, Ritchie, Canaday το σύστημα αρχείων, του οποίου η βασική φιλοσοφία χρησιμοποιείται μέχρι σήμερα.
UNIX & C 1971: O Thompson σχεδιάζει τη γλώσσα B. 1973: O Dennis Ritchie σχεδιάζει τη γλώσσα C (διάδοχος της Β). Το Unix ξαναγράφεται σε C. Η γλώσσα C παραμένει ως σήμερα η καταλληλότερη γλώσσα για προγραμματισμό συστήματος.
Ιστορία του UNIX Το Unix σε C μεταφέρεται σε άλλες πλατφόρμες. Πανεπιστήμια παίρνουν τον κώδικα και αναπτύσσουν αυτόνομα το σύστημα και άλλα προγράμματα. Το Berkeley δημιουργεί σημαντικές επεκτάσεις και βελτιώσεις στην έκδοση του Unix (virtual memory, paging, TCP/IP δικτύωση, vi, csh, κτλ).
Πρότυπο UNIX Στη δεκαετία του 1980 υπάρχουν δύο διαφορετικές και αρκετά ασύμβατες εκδόσεις (BSD και System V). Επιπλέον, κάθε εταιρεία που ανέπτυσσε Unix τροποποιούσε κατά ασύμβατο τρόπο βασικές συμπεριφορές. Το πρότυπο POSIX επιχειρεί να ενοποιήσει τις συμπεριφορές των Unix.
Τωρινή Κατάσταση Απόγονοι BSD (FreeBSD, NetBSD, OpenBSD). Απόγονοι System V (Sun Solaris, IBM AIX,…) Linux http://cm.bell-labs.com/cm/cs/who/dmr/hist.html
Επισκόπηση To Unix είναι ένα διαλογικό (interactive) σύστημα διαμοιρασμού χρόνου (timesharing). Η φιλοσοφία των προγραμμάτων του είναι να εκτελούν μία εργασία και να την εκτελούν καλά. Ο συνδυασμός των επιμέρους προγραμμάτων παρέχει ισχύ και ευελιξία.
Πειραματισμός Στα εργαστήρια Sun Στο σπίτι (Linux, FreeBSD, cygwin) Για σύνδεση από Windows σε Unix χρησιμοποιείτε ssh (putty, SecureCRT, κτλ).
Βασικές Εντολές more: εμφανίζει περιεχόμενα αρχείου κατά οθόνες man: εμφανίζει οδηγίες χρήσης ls: εμφανίζει ονόματα αρχείων mv: μετονομάζει αρχεία cp: αντιγράφει αρχεία rm: διαγράφει αρχεία passwd: αλλάζει την κωδική λέξη (password) cat: εμφανίζει τα περιεχόμενα αρχείου
Εντολές και ορίσματα Οι περισσότερες εντολές παίρνουν ορίσματα, π.χ.: ls -l: εμφανίζει τα ονόματα αρχείων με ημερομηνίες, μεγέθη κ.α. cp src dst: δημιουργεί αντίγραφο του αρχείου src με όνομα dst. rm –i: διαγράφει το αρχείο μετά από επιβεβαίωση
Κέλυφος (shell) Το κέλυφος είναι ο διερμηνευτής (interpreter) των γραμμών εντολών. Οι εντολές μπορεί να είναι εγγενείς (του κελύφους) (π.χ. cd) ή αυτόνομα προγράμματα (cp, ls). Κοινοί φλοιοί: tcsh (csh), bash (sh) ξεκινά μετά το login αρχικοποιείται και τυπώνει το prompt ($ ή %) σε εντολή χρήστη: ο φλοιός απομονώνει την πρώτη λέξη,ψάχνει για το εκτελέσιμο, αν το βρει ξεκινά την εκτέλεση, και αναστέλει τη δική του λειτουργία μέχρι τον τερματισμό.
Wildcards Προσδιορισμός πολλών αρχείων με κοινά στοιχεία ονόματος: Προσδιορισμός πολλών αρχείων με κοινά στοιχεία ονόματος: ls * ls *.c ls *.* ls 2003* ls a? Για την εισαγωγή ειδικών χαρακτήρων χρησιμοποιείται ‘\’ touch a\*b
Βοήθεια - Manual man εντολή: βοήθεια για την εντολή π.χ. man grep info εντολή: βοήθεια για την εντολή σε προγράμματα GNU π.χ. info gcc google π.χ. http://www.google.com/search?q=grep
Διεργασίες ps: αναφορά υπαρχόντων διεργασιών π.χ. ps aux, ps -ef top: συνεχής ενημέρωση κατάστασης διεργασιών kill -<num> <pid>: παράδοση σήματος <num> στο <pid> Ctrl-C: SIGTERM στο τρέχοντα pid. Ctrl-Z: SIGSTOP στο τρέχοντα pid. bg: τοποθέτηση ανασταλείσας διεργασίας στο παρασκήνιο fg: επαναφορά τρέχουσας διεργασίας στο παρασκήνιο
Ανάπτυξη Προγραμμάτων cc, gcc: C compilers gcc test.c (Δημιουργία a.out) gcc –c test.c (Δημιουργία test.o) gcc -o test test.c make: «Δημιουργεί» το εκτελέσιμο make (Προϋποθέτει την ύπαρξη Makefile) make –f Makefile.unix
Makefile project1: data.o main.o io.o cc data.o main.o io.o -o project1 data.o: data.c data.h cc -c data.c main.o: data.h io.h main.c cc –c main.c io.o: io.h io.c cc -c io.c Makefile Tutorial: http://www.eng.hawaii.edu/Tutor/Make/