Avsnitt fra Tanenbaum: 1.1, 1.2, 1.5.1 |
Uredigert opptak av hele andre time av forelesningen ( 00:43:06)
Opptak av forelesningen inndelt etter tema:
os1del1.mp4
(06:10) Innledning om kurssider, forelesninger, obliger
os1del2.mp4
(01:52) Pensum og kompendier
os1del3.mp4
(01:36) Emneevaluering
os1del4.mp4
(00:47) Øvinger, studentassistenter og lab
os1del5.mp4
(01:58) Eksamen
os1del6.mp4
(06:03) Slides: Operativsystemer - motivasjon
os1del7.mp4
(02:21) Slides: Mer om kurset
os1del8.mp4
(01:43) Slides: Mål for kurset, pensumlitteratur
os1del9.mp4
(02:06) Slides: Eksamen og obliger
os1del10.mp4
(01:05) Slides: Nyttige personer
os1del11.mp4
(04:03) Slides: Hva er et operativsystem og hvor stort er det?
os1del12.mp4
(03:15) Slides: User mode og Kernel mode, OS forenkler
os1del13.mp4
(09:21) Slides: OS-definisjon, Prinsippskisse av Linux
os1del14.mp4
(02:08) Slides: Sentralt begrep: prosess
os1del15.mp4
(15:17) En filosofisk analogi: hvis koden er DNA, hva er prosessen?
os1del16.mp4
(03:10) Slides: Eksempler på prosesser, Linux og Windows, hierarkier
os1del17.mp4
(12:05) Slides: Datamaskinarkitektur og logiske kretser
https://www.cs.oslomet.no/~haugerud/os
og Canvas
Et OS er et software-grensesnitt mellom brukeren og en datamaskins hardware.
Så stor er alene kildekoden for selve operativsystemkjernen. Hvis man tar med GUI, biblioteker og annen nødvendig system software (som Windows explorer), blir størrelsen ti til tyve ganger større.
A | Gi applikasjonsprogrammer og brukere enhetlig, enklere og mer abstrakt adgang til maskinens ressurser |
B | Administrere ressursene slik at prosesser og brukere ikke ødelegger for hverandre når de skal aksessere samme ressurser. |
Eksempler:
A | filsystemet som gir brukerne adgang til logiske filer slik at brukerne slipper å spesifisere disk, sektor, sylinder, lesehode osv. |
B | Et system som sørger for at brukerne ikke skriver over hverandres filer; fordeling av CPU-tid. |
|
GNU er en rekursiv forkortelse (høy nerdefaktor) og står for 'GNU's not Unix'. Bakgrunnen for begrepet GNU/Linux er at GNU-prosjektet som ble startet av Richard Stallmann i 1983. GNU sto bak mange av de veldig viktige delene som ligger utenfor kjernen, som shellet bash og kompilatoren gcc. Operativsystemkjernen kan for eksempel ikke gjøre så mye fornuftig hvis man ikke kan kompilere programmer slik at de kan kjøres. Det er fortsatt noen som bruker begrepet GNU/Linux når de omtaler operativsystemet Linux, men det vanligste er å bare si Linux. Og bruken av GNU/Linux kan sammenlignes med distribusjoner av Linux som Ubuntu og Red Hat. Disse distribusjonene gjør også en rekke tilpasninger og lager systemprogrammer som skal gjøre det enklere, bedre og sikrere å bruke Linux-kjernen.
21:49:07 up 7 days, 7:05, 2 users, load average: 0.01, 0.02, 0.00 66 processes: 64 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 3.8% user, 2.4% system, 0.0% nice, 93.8% idle Mem: 901440K total, 875496K used, 25944K free, 18884K buffers Swap: 128516K total, 2252K used, 126264K free, 681000K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 17938 root 11 -10 93532 10M 2000 S < 2.3 1.2 0:31 XFree86 18958 haugerud 17 0 8800 8800 7488 R 2.3 0.9 0:01 kdeinit 18788 haugerud 11 0 3548 3548 2572 S 0.7 0.3 0:03 artsd 19272 haugerud 12 0 956 956 748 R 0.3 0.1 0:00 top 1 root 8 0 484 456 424 S 0.0 0.0 0:00 init 2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd 3 root 19 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0 4 root 9 0 0 0 0 SW 0.0 0.0 0:29 kswapd 5 root 9 0 0 0 0 SW 0.0 0.0 0:00 bdflush 6 root 9 0 0 0 0 SW 0.0 0.0 0:19 kupdated 123 daemon 9 0 432 428 356 S 0.0 0.0 0:00 portmap 130 root 9 0 0 0 0 SW 0.0 0.0 0:01 rpciod 131 root 9 0 0 0 0 SW 0.0 0.0 0:00 lockd 196 root 9 0 872 868 724 S 0.0 0.0 0:02 syslogd 199 root 9 0 1092 1088 420 S 0.0 0.1 0:00 klogd 204 root 9 0 700 700 604 S 0.0 0.0 0:00 rpc.statd 209 root 9 0 944 940 628 S 0.0 0.1 0:06 inetd 293 root 9 0 2076 1860 1608 S 0.0 0.2 0:02 sendmail 314 root 8 0 1280 1224 1068 S 0.0 0.1 0:00 sshd 319 root 9 0 3028 2208 596 S 0.0 0.2 0:00 xfs 321 root 9 0 1968 1968 1748 S 0.0 0.2 0:00 ntpd |
PS C:\Documents and Settings\mroot> ps Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 105 5 1176 3616 32 0,07 1212 alg 342 5 1512 3180 22 20,56 688 csrss 118 4 1056 2808 21 0,90 972 csrss 144 3 1812 3548 21 0,44 1132 csrss 76 4 1004 3684 30 0,05 376 ctfmon 72 4 964 3452 30 0,02 460 ctfmon 86 2 1420 2200 413 0,02 2032 cygrunsrv 157 4 1952 6180 44 0,07 1776 DW20 352 10 8772 14460 85 0,66 520 explorer 362 10 8036 14856 84 0,75 1864 explorer 0 0 0 28 0 0 Idle 164 6 3168 4724 38 2,65 1040 logonui 389 9 3908 2284 41 0,38 768 lsass 276 9 27568 25488 140 1,68 2132 powershell 79 3 1196 3576 34 0,02 232 rdpclip 106 4 1392 4384 35 0,03 1800 rdpclip 154 5 4348 5884 56 0,08 2080 rundll32 356 8 3328 5116 35 1,24 756 services 40 2 400 1504 11 0,01 248 shutdownmon 31 1 152 412 3 0,04 616 smss 120 5 3148 4780 41 1,23 1468 spoolsv 86 23 2092 3428 413 0,05 488 sshd 263 6 2908 5452 61 0,11 924 svchost 239 13 1724 4248 34 0,31 1080 svchost 1561 62 15192 25432 140 5,15 1168 svchost 76 3 1308 3584 29 1,11 1264 svchost 161 5 1492 3912 34 1,23 1372 svchost |
$ cat /etc/motd |
open("/etc/motd", O_RDONLY|O_LARGEFILE) = 3 |
$ strace cat /etc/motd execve("/bin/cat", ["cat", "/etc/motd"], [/* 36 vars */]) = 0 uname({sys="Linux", node="rex", ...}) = 0 brk(0) = 0x804d000 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=67455, ...}) = 0 old_mmap(NULL, 67455, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360^\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1244688, ...}) = 0 old_mmap(NULL, 1254852, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40029000 old_mmap(0x40151000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x127000) = 0x40151000 old_mmap(0x40159000, 9668, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40159000 close(3) = 0 munmap(0x40018000, 67455) = 0 brk(0) = 0x804d000 brk(0x806e000) = 0x806e000 brk(0) = 0x806e000 fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 25), ...}) = 0 open("/etc/motd", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=712, ...}) = 0 read(3, "Linux rex 2.6.1skas #3 SMP Mon A"..., 4096) = 712 write(1, "Linux rex 2.6.1skas #3 SMP Mon A"..., 712) = 712 read(3, "", 4096) = 0 close(3) = 0 close(1) = 0 exit_group(0) = ? |
For å kunne lage en datamaskin må man kunne utføre logiske og matematiske operasjoner på slike samlinger av bit. For eksempel må man kunne sammenligne, addere, subtrahere, multiplisere, dividere og gjøre shift-operasjoner. For å få til dette må man lage elektriske kretser som utfører denne type operasjoner. Det må for eksempel være mulig å få en CPU til å legge sammen to tall og gi et resultat. Dette kan man få til ved digitale kretser også kalt logiske kretser. La oss først se på hva man trenger for å kunne addere sammen to tall.
Den fysiske implementasjonen av AND, OR og NOT operatorene kalles porter, det kommer en eller to ledninger inn i den ene enden og går en ledning ut av den andre. Teoretisk fysikks store oppdagelse i det tyvende århundre, kvantemekanikken, la grunnen for halvlederteknologien og transistoren. I 1956 fikk Shockley, Bardeen og Brattain Nobelprisen i Fysikk for å konstruere transistoren som har gjort det mulig å lage slike porter ekstremt små. På en CPU-chip med noen få kvadratcentimeters overflate kan det være plass til 100 millioner slike porter og med ledninger mellom dem som er så tynne som 5 nanometer. Et hårstrå er til sammenligning 100 000 nm. De fysiske grenesene for hvor lite det er mulig å lage de integrert kretsene begynner å nærme seg og derfor klarer man ikke å øke klokkefrekvensen så hurtig som tidligere.
I Fig. 4 ser vi de tre grunnleggende portene og hvordan man kan sette dem sammen til mer kompliserte kretser.
Logikken til disse operatorene og tilsvarende porter kan beskrives ved såkalte sannhetstabeller, ved binær logikk og ved å tegne portene som vist i følgende avsnitt.
A | B | Ut = |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Logisk AND-operator:
A | B | Ut = |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Logisk OR-operator:
A | Ut = |
---|---|
0 | 1 |
1 | 0 |
Logisk NOT-operator:
I tegningen av OR-porten, betyr det for eksempel at hvis det kommer en spenning 0 inn på inngang A og en spenning 1 inn på inngang B, vil det gå en spenning 1 ut. Slike porter kan man så sette sammen til kompliserte kretser. Det er for eksempel ikke veldig mange porter som skal til for å bygge en krets som kan legge sammen to firebits tall, slik CPU-en omtalt nedenfor kan. Alle tall i en datamaskin er representert i det binære tallsystem med nuller og enere, eller som vi har sett, med ingen eller positiv elektrisk spenning.
I figurene ser man hvordan det er vanlig å tegne AND, OR og NOT-porter i krets-diagram.