Uke 34 Uke 35 Uke 36 Uke 37 Uke 38 Uke 39 Uke 40 Uke 41 Uke 42 Uke 43 Uke 44 Uke 45 Uke 46 Uke 47 sikkerhet datanett programvare digitale kretser
Operativsystemer Hva gjør et operativsystem? Hvordan implementerer man det? Prosesser Brukergrensesnitt (Eksemplene vil være fra Unix/Linux, men prinsippene er de samme for andre operativsystemer.) [Englander kap 15+16]
OS Struktur Prosesser Kommandotolker Distribuert Filer Skript Mer? Hvorfor trenger vi et operativsystem? Hva gjør et operativsystem? Trenger vi et OS? Er det mulig å klare seg uten? Et eksempel: En Nord-12 i 1972 1 2 3 4 5 6 7 8 Lese inn et hullbånd med redigeringsprogrammet. Lese inn et hullbånd med programmet mitt. Redigere det. Skrive ut et hullbånd med det oppdaterte programmet. Lese inn et hullbånd med kompilatoren. Lese inn hullbåndet med programmet mitt. Kompilatoren skriver et hullbånd med ferdig maskinkode. Lese inn hullbåndet med koden og kjøre programmet.
Hvorfor trenger vi et operativsystem? Vi trenger altså et OS til å kommunisere med brukeren administrere kjøringen (dvs starte og stoppe programmer) administrere lagring av filer på en sikker og brukervennlig måte. Lærebokens definisjon er: An operating system is a collection of computer programs that integrate the hardware resources of the computer and make those resources available to a user and the user s programs, in a way that allows the user access to the computer in a productive, timely, and efficient manner.
Hovedoppbyggingen Oppbyggingen av et operativsystem Hvordan organisere et OS på en sikker og trygg måte? Ett hovedproblem er at det skjer mye samtidig i et OS. Kernel Den vanligste løsninger er å ha en kjerne som styrer alt. Den kjører i «supervisor mode». Mouse D D D Graphics card Network card Kjernen kommuniserer med periferenhetene med spesialskrevne kodebiter kalt drivere (D).
Brukerne kjører prosesser Prosesser P P P Brukerprogrammene er prosesser. De kjører i «protected mode» og må kommunisere med kjernen for Mouse Kernel D D D Network card kommunikasjon med periferenhetene kommunikasjon med andre prosesser Graphics card
Brukerne kjører prosesser Parallellisering Hvis datamaskinen har flere kjerner, kan prosessene kjøre på ulike kjerner og dermed gå fortere. Tråder Noen OSer tilbyr tråder (ofte kalt «lettvektsprosesser»). Flere tråder i en prosess kan kjøres parallelt, men de deler minne. Tidsdeling Når det er flere prosesser som skal kjøres på samme kjerne, vil OSet bytte på å kjøre dem (såkalt tidsdeling eller «timeslicing»).
Hvordan starter man det hele? Oppstart Hvordan starter man et OS når man mangler alle mekanismene man trenger for å kjøre programmer? Det skjer ved «bootstrapping» eller «booting». Gammelt ordtak: «To pull oneself up by one s bootstraps.» En vanlig måte å «boote» på er 1 Når prosessoren slås på, starter den en Bootstrap loader som ligger i BIOS («Basic Input/Output System»). BIOS ligger i ROM (= Read-only memory). 2 BIOS er spesiallaget for den enkelte datamaskinmodell. Det er en samling rutiner som kan lese fra disk eller nettverket. 3 Bootloaderen leser inn kjernen i selve OS-et og starter det.
Hvordan administrere prosesser Prosesser Alle system- og brukerprogrammer kjøres som prosesser. $ ps PID TTY TIME CMD 19967 pts/1 00:00:00 bash 24715 pts/1 00:00:18 emacs 26332 pts/1 00:00:00 preview 26333 pts/1 00:00:00 sh 26336 pts/1 00:00:04 xpdf 27842 pts/1 00:00:00 ps (Alle prosesser har et unikt nummer: PID.) Kommandoen $ ps -ef vil vise alle prosessene på maskinen; det vil være flere hundre. $ ps -ef wc 343 3256 33690
Hvordan administrere prosesser Å starte nye prosesser Et program kaller en funksjon i kjernen ved hjelp av såkalte systemkall. Dette er mulig i de fleste programmeringsspråk; i Python brukes biblioteket subprocess. Dette programmet oppretter en ny prosess som kjører programmet date; de to kjører i parallell. import subprocess print("starter date...") p = subprocess.popen(["date"]) print("og det var det."); Resultat: $ python3 run-date.py Starter date... Og det var det. Thu Oct 11 20:56:12 CEST 2018
Hvordan administrere prosesser Hvert kall på subprocess.popen starter en ny prosess. Prosessen forsvinner igjen når prosessens program avslutter (som date) eller vi dreper prosessen. Advarsel! Hvis man oppretter prosesser i en løkke som løper løpsk, vil man fylle maskinen med prosesser og alt vil gå i stå.
Hvordan administrere prosesser Parameteren 1 til Popen er en liste med programmet vi skal kjøre eventuelle parametre Følgende program starter en klokke som går inntil vi stopper den. import subprocess print("starter xclock...") p = subprocess.popen(["xclock", "-update", "1"]) print("da er den i gang."); 1 Popen kan ha flere parametre, men det tar ikke vi opp her.
Hvordan administrere prosesser Å drepe prosesser Funksjonen kill vil drepe en angitt process. Dette programmet venter 5 sekunder før det gjøres. import subprocess import time print("starter xclock...") p = subprocess.popen(["xclock", "-update", "1"]) print("da er klokken i gang."); for sek in range(5, 0, -1): print(sek) time.sleep(1) p.kill() print("nå er klokken borte.")
Hvordan starter en bruker nye prosesser på enklest måte? Kommandotolkeren Kommandotolkeren («shell-et») er én av prosessene; den vanligste i Linux heter bash («Bourne-again shell») men alle kan enkelt lage sin egen. Kommandotolkeren leser kommandonavn som brukeren skriver, og oppretter en prosess som utfører den. Normalt vil bash vente til prosessen er ferdig før den ber om ny kommando. Hvis kommandolinjen slutter med &, venter den ikke.
Hvordan starter en bruker nye prosesser på enklest måte? Eksempler $ date Thu Sep 12 15:29:09 CEST 2019 $ cal September 2019 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $ ping www.ifi.uio.no PING webserver.ifi.uio.no (129.240.65.48) 56(84) bytes of data. 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=1 ttl=63 time=0.453 ms 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=2 ttl=63 time=0.328 ms 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=3 ttl=63 time=0.332 ms 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=4 ttl=63 time=0.278 ms ^C --- webserver.ifi.uio.no ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.278/0.347/0.453/0.068 ms $ xeyes & [2] 29898
Hvordan stopper jeg prosesser i en kommandotolker? Hvordan stopper jeg prosesser? Det er flere muligheter: Ctrl + C stopper prosessen som akkurat nå kjøres av bash. Hvis prosessen har sitt eget vindu på skjermen, kan vi klikke på i rammen. Hvis vi vet prosessens nummer, kan vi ta livet av den: $ ps PID TTY TIME CMD 19967 pts/1 00:00:00 bash 24715 pts/1 00:00:37 emacs 31666 pts/1 00:00:00 xeyes 31680 pts/1 00:00:00 ps $ kill 31666 [2]+ Terminated xeyes
Hvordan stopper jeg prosesser i en kommandotolker? Min egen kommandotolker Som nevnt er det veldig enkelt å lage sin egen kommandotolker: import subprocess while True: linje = input("kommando: ") kommando = linje.split() if kommando[0] == "exit": break p = subprocess.popen(kommando) p.wait()
Det er mulig jobbe hjemmefra Fjerninnlogging Det er anledning til å åpne et kommandovindu på en annen maskin: $ ssh -CY brukernavn@login.ifi.uio.no bash ssh P bash sshd P Kernel Kernel D D D D D D Mouse Network card Mouse Network card Graphics card Graphics card
Tekstlige kommandoer er ikke alltid nok Vindussystemer Alle moderne OSer har et GUI (Graphical User Interface) for å ha mange vinduer på skjermen ha grafikk i vinduene (ikke bare tekst) få input fra mus (ikke bare tastatur)
Vindussystemet X Vindussystemet X er standard i Linux. bash xeyes Xserver Kernel D D D Mouse Network card Graphics card
Vindussystemet X Vindussystemet over nettet Vindussystemet X kan kommunisere over nettet. bash ssh Xserver sshd xeyes P Kernel Kernel D D D D D D Mouse Network card Mouse Network card Graphics card Graphics card
Lagring Filer En fil er en samling byte lagret i eller ved datamaskinen (på disk, SSD (Solid State Drive) el). OSer holder orden på filens navn hvilken fysiske enhet den er lagret på, og hvor i mappestrukturen filen ligger
Lagring
Lagring / bin dev ifi local chmod sh null tty midgard utgard bin man a02 dag Kurs Privat www docs
Informasjon om filer Informasjon om filer Kommandoen ls («list files») forteller oss om filene i den mappen vi er i: $ ls -l total 436 -rw-r--r--. 1 dag ifi-a 71193 Oct 10 14:04 hullband.jpg -rw-r--r--. 1 dag ifi-a 959 Oct 9 10:55 kernel.1 -rw-r--r--. 1 dag ifi-a 3857 Oct 9 10:55 kernel.2 -rw-r--r--. 1 dag ifi-a 6809 Oct 9 10:55 kernel.3 -rw-r--r--. 1 dag ifi-a 6859 Oct 9 10:55 kernel.4 -rw-r--r--. 1 dag ifi-a 6855 Oct 9 10:55 kernel.5 -rw-r--r--. 1 dag ifi-a 346 Oct 9 10:55 kernel.log -rw-r--r--. 1 dag ifi-a 2090 Oct 9 10:55 kernel.mp -rw-r--r--. 1 dag ifi-a 2087 Oct 9 10:54 kernel.mp~ -rw-r--r--. 1 dag ifi-a 4164 Oct 9 10:55 kernel.mpx -rw-r--r--. 1 dag dag 30734 Oct 10 14:04 papertape.jpg -rw-r--r--. 1 dag ifi-a 202 Oct 9 10:59 ps.lst -rw-r--r--. 1 dag ifi-a 6581 Oct 10 14:41 uke-41.aux -rw-r--r--. 1 dag ifi-a 90791 Oct 10 14:41 uke-41.log -rw-r--r--. 1 dag ifi-a 3653 Oct 10 14:41 uke-41.nav -rw-r--r--. 1 dag ifi-a 939 Oct 10 14:41 uke-41.out -rw-r--r--. 1 dag ifi-a 128080 Oct 10 14:41 uke-41.pdf -rw-r--r--. 1 dag ifi-a 0 Oct 10 14:41 uke-41.snm -rw-r--r--. 1 dag ifi-a 6728 Oct 10 14:41 uke-41.tex -rw-r--r--. 1 dag ifi-a 4635 Oct 9 16:11 uke-41.tex~ -rw-r--r--. 1 dag ifi-a 915 Oct 10 14:41 uke-41.toc -rw-r--r--. 1 dag ifi-a 619 Oct 10 14:41 uke-41.vrb
Informasjon om filer -rw-r--r--. 1 dag ifi-a 71193 Oct 10 14:04 hullband.jpg -rw-r--r--. er beskyttelsen 1 er antall linker dag er filens eier ifi-a er filens gruppe 71193 er filens størrelse i byte Oct 10 14:04 er dato og klokkeslett da filen ble laget hullband.jpg er navnet
Beskyttelse av filer Beskyttelse av filer For å forstå beskyttelsen av filer i Unix, må man vite at Unix opererer med tre kategorier brukere: user (forkortet «u») er filens eier, dvs den som opprettet den. group (forkortet «g») er gruppen tilordnet filen. (Mer om dette siden.) other (forkortet «o») er alle andre brukere.
Beskyttelse av filer Det finnes tre privilegier for filer: read (forkortet «r») er retten til å lese filen. write (forkortet «w») er retten til å skrive på filen, dvs endre den. execute (forkortet «x») er retten til å utføre den, dvs bruke den som et program.
Beskyttelse av filer Privilegiene angis i bolker på 3 3 bokstaver: u g o {}}{{}}{{}}{ rwx r x r En bokstav angir at man har privilegiet, en at man ikke har det.
Hvordan lage skript-filer Skript-filer Ved å sette x-bit-et kan man enkelt lage nye kommandoer: 1 Lag en tekstfil med de kommandoene vi ønsker utført. 2 Sett x-bit-et: $ chmod ugo+x filnavn 3 filnavn er nå et program og kan utføres med $./filnavn Dette gjør det svært enkelt å tilpasse systemet med egne kommandoer.
Et eksempel Et eksempel: Er nettet OK? Dette programmet nett-ok sjekker om nettet er OK ved å spørre Ifi: $ more nett-ok ping -c4 www.ifi.uio.no $ chmod uog+rx nett-ok $./nett-ok PING webserver.ifi.uio.no (129.240.65.48) 56(84) bytes of data. 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=1 ttl=63 time=0.411 ms 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=2 ttl=63 time=0.534 ms 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=3 ttl=63 time=0.539 ms 64 bytes from webserver.ifi.uio.no (129.240.65.48): icmp_seq=4 ttl=63 time=1.56 ms --- webserver.ifi.uio.no ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 0.411/0.761/1.563/0.466 ms
Et eksempel Egne programmer kan kjøres fra den mappen de ligger i: $./nett-ok De også kjøres fra andre mapper om man angir hele filnavnet: $ ~/Kurs/in1020/nett-ok På Ifis Linux-maskiner har alle sin egen mappe for slike programmer: ~/bin. Programmer der kan kjøres allestedsfra: $ nett-ok
Parametre til skript Parametre En kommando kan ha parametre, for eksempel $ ping -c4 }{{} parameter nr 1 www.ifi.uio.no }{{} parameter nr 2 Disse kan vi få tak i i skriptet vårt som "$1" "$2"... "$@" gir oss alle parametrene.
Parametre til skript Et eksempel: Når er julaften? $ ls -l ~/bin/jul -rwxr-xr-x. 1 dag dag 12 Oct 11 14:43 /ifi/bifrost/a01/dag/bin/jul $ more ~/bin/jul cal 12 "$1" $ jul 2017 December 2017 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Fra mine egne gjemmer Fra min egen ~/bin Vis alle filene #! /bin/sh ~/bin/d ls -CF "$@" more Vis alle mappene #! /bin/sh ~/bin/vvd ls -lcfg $* grep ^d more
Hvor kan jeg finner mer informasjon? Literatur Operativsystemer Andrew S. Tanenbaum: Operating Systems: Design and Implementation, Prentice Hall 2006 Bash Chet Ramey & Brian Fox: Bash Reference Manual, https://www.gnu.org/software/bash/manual/ Vindussystemet X Wikibooks Guide to X11. https://en.wikibooks.org/wiki/guide_to_x11