<link rel="stylesheet" href="./static/main.css"/> <!-- .slide: data-background-color="#283681" --> # ITGK Teori-kurs <img src="./static/graphics/PVV-logo-blue.svg" width=30%/> Note: Introduksjon --- ## <span class="red">⏺ **OBS:** Opptak</span> Note: PVV sin youtube-kanal selv-introduksjon Angående forelesningen Planen min er å gå over de fleste temaene nevnt i pensum. Skape "Aha!"-momenter Kommer til å nevne en del biter som ikke nødvendigvis er viktig for pensum, men som er viktig for å forstå innholdet. --- ## Generelt Hva er IT Kort Historie --- ### Folk som er viktige <!-- TODO: Add people and pictures --> - Von Neumann --- <!-- .slide: data-auto-animate --> ### Et par begreper: <div class="columns"> <div> - PC <!-- .element: data-id="pc" --> - Operativsystem - Abstraksjon - Transistorer - IC </div> <div> - Hardware - Software - Kernel - Protokoll - WWW/Internet - High level/Low level - bit </div> </div> Note: Operativsystem -> Ressursallokering -> Kernel -> Grafisk brukergrensesnitt Forklar hvordan en transistor funker ---- <!-- .slide: data-auto-animate data-transition="zoom-in" --> <div class="columns"> <div> - PC <!-- .element: data-id="pc" --> </div> <div> </div> </div> ---- --- <div class="columns"> <div class="column"> | Enhet | Størrelse | |------------|-------------------| | byte | 8 bits | | kilobyte | \\(10^3=1000\\) bytes | | megabyte | \\(10^6\\) bytes | | gigabyte | \\(10^9\\) bytes | | terabyte | \\(10^{12}\\) | | petabyte | \\(10^{15}\\) | | exabyte | \\(10^{18}\\) | </div> <div class="column fragment"> | Enhet | Størrelse | |------------|-------------------| | byte | 8 bits | | kibibyte | \\(2^{10} = 1024\\) bytes | | mebibyte | \\(2^{20}\\) bytes | | gibibyte | \\(2^{30}\\) bytes | | tebibyte | \\(2^{40}\\) | | pebibyte | \\(2^{50}\\) | | exbibyte | \\(2^{60}\\) | </div> </div> --- ### Datatyper - Integer - Character - Float - Array - String Note: char -> ASCII 7b, Extended ASCII 8b, UTF-8 Finnes flere, men disse Objekter ---- ### ASCII, UNICODE, UTF-8 --- <!-- .slide: center=false --> ### Tallsystemer <div class="num-systems"> <div class="fragment" data-fragment-index="0"> <span class="num-system-title">10:</span> <span class="num-span-red"> <span>0</span>, <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>, <span>5</span>, <span>6</span>, <span>7</span>, <span>8</span>, <span>9</span>, </span> <span class="num-span-blue"> <span>10</span>, <span>11</span>, <span>12</span>, ..., <span>19</span>, <span>20</span>, <span>21</span>, ..., <span>99</span>, </span> <span class="num-span-green"> <span>100</span>, <span>101</span>, ... </span> </div> <div class="fragment" data-fragment-index="1"> <span class="num-system-title">2:</span> <span class="num-span-red"> <span>0</span>, <span>1</span>, </span> <span class="num-span-blue"> <span>10</span>, <span>11</span>, </span> <span class="num-span-green"> <span>100</span>, <span>101</span>, <span>110</span>, <span>111</span>, </span> <span class="num-span-orange"> <span>1000</span>, <span>1001</span>, <span>1010</span>, <span>1011</span>, ... </span> </div> <div class="fragment" data-fragment-index="2"> <span class="num-system-title">16:</span> <span class="num-span-red"> <span>0</span>, <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>, <span>5</span>, <span>6</span>, <span>7</span>, <span>8</span>, <span>9</span>, <span>A</span>, <span>B</span>, <span>C</span>, <span>D</span>, <span>E</span>, <span>F</span>, </span> <span class="num-span-blue"> <span>10</span>, <span>11</span>, <span>12</span>, ..., <span>1E</span>, <span>1F</span>, <span>20</span>, ..., <span>FE</span>, <span>FF</span>, </span> <span class="num-span-green"> <span>100</span>, ... </span> </div> <div class="fragment" data-fragment-index="3"> <span class="num-system-title">8:</span> <span class="num-span-red"> <span>0</span>, <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>, <span>5</span>, <span>6</span>, <span>7</span>, </span> <span class="num-span-blue"> <span>10</span>, <span>11</span>, <span>12</span>, ..., <span>76</span>, <span>77</span>, </span> <span class="num-span-green"> <span>100</span>, ... </span> </div> </div> Note: Forventet å kunne octal, binær, heksadesimal går tom for siffer delbarhet hexadesimal i 4 binær chunks om gangen octal i 3 binær chunks om gangen revers lurt å trene på brukt ca. 20 min ---- ### Eksempel: 1110010111011011 <!-- TODO: Add labels to conversion fields (8 and 16) --> <img src="./static/graphics/digit-conversion.svg" width="70%"/> --- ### Negative tall - Signed magnitude - Two's compliment Note: Signed magnitude bruker første biten 0000 = 1000 kaster bort en plass Løsning: Twos complement: 0001 = 1 0000 = 0 1111 = -1 1000 = MIN_INT Algoritme: - finn ut hva minste negative tall er - ta resten av bitsene, og konverter til desimal - regn ut offsett --- ### Flyttall - IEEE 754 ``` >>> 0.1 + 0.2 0.30000000000000004 ``` <img src="./static/graphics/floating-point-structure.svg" width=80%/> <!-- .element: class="fragment" data-fragment-index="1" --> \\[ (+,\ \ 4,\ \ 1949284) = +1.949284 \cdot 10^4 = 19492.84 \\] <!-- .element: class="fragment" data-fragment-index="2" --> Note: Matematisk tilnærming Signed bit, exponent - 2^?, signifikant? består av 3 biter, kan gi rare utregninger iblant Opphøyd i 10, men i virkeligheten opphøyd i 2 Ikke veldig viktig, men kan være oppklarende. --- # Hardware <!-- TODO: add toc --> - Hovedkort - CPU - Minne --- # Datamaskin Note: Består av mange forskjellige biter. datamaskin er bare et begrep vi bruker. Kan gå galt på veldig mange lag i prosessen. Moores law, antall transistorer i en IC dobles hver 2. år. --- ## Hovedkort (Motherboard) <img src="./static/graphics/motherboard2.png" width="50%"/> Note: Limet som fester alle de andre bitene sammen. Inneholder litt logikk for konfigurasjon av alle bitene, men lite ellers. --- ## CPU <img src="./static/graphics/cpu.png" width=40%/> <img src="./static/graphics/processor.gif" width=40%/> Note: Viktigste biten. Gjør alle beregningene. Består av 3 biter, kontrollenhet, minneenhet, ALU Kjører raskt, gHz Har et visst sett med ting den kan gjøre, kalt et instruksjonssett. Setter du disse på rad, så har du et program. ---- ### Fetch-Decode-Execute Cycle <table style="font-size: 0.8em;" width="80%"> <tr> <td> <div class="fde-table-item bak-blue">FETCH</div> </td> <td> <ul> <li>Henter neste instruksjon</li> </ul> </td> </tr> <tr class="fragment" data-fragment-index="1"> <td> <div class="fde-table-item bak-yellow">DECODE</div> </td> <td> <ul> <li>Dekoder instruksjonen</li> </ul> </td> </tr> <tr class="fragment" data-fragment-index="2"> <td> <div class="fde-table-item bak-red">EXECUTE</div> </td> <td> <ul> <li>Henter verdier fra minnet</li> <li>Utfører instruksjonen</li> <li>Skriver svaret tilbake i minnet</li> </ul> </td> </tr> </table> <div class="fragment" data-fragment-index="3" style="padding: 0 20%; font-size: 1.5em"> ```python >>> x += y ``` </div> ---- ### Pipelining <div class="fde-grid"> <span class="fde-item bak-blue">FE</span> <span data-fragment-index="1" class="fragment bak-yellow">DE</span> <span data-fragment-index="3" class="fragment bak-red">EX</span> <span data-fragment-index="2" class="fragment fde-r2 fde-c2 bak-blue">FE</span> <span data-fragment-index="4" class="fragment fde-r2 fde-c3 bak-yellow">DE</span> <span data-fragment-index="6" class="fragment fde-r2 fde-c4 bak-red">EX</span> <span data-fragment-index="5" class="fragment fde-r3 fde-c3 bak-blue">FE</span> <span data-fragment-index="6" class="fragment fde-r3 fde-c4 bak-yellow">DE</span> <span data-fragment-index="6" class="fragment fde-r3 fde-c5 bak-red">EX</span> <span data-fragment-index="6" class="fragment fde-r4 fde-c4 bak-blue">FE</span> <span data-fragment-index="6" class="fragment fde-r4 fde-c5 bak-yellow">DE</span> <span data-fragment-index="6" class="fragment fde-r4 fde-c6 bak-red">EX</span> <span data-fragment-index="6" class="fragment fde-r5 fde-c5 bak-blue">FE</span> <span data-fragment-index="6" class="fragment fde-r5 fde-c6 bak-yellow">DE</span> <span data-fragment-index="6" class="fragment fde-r5 fde-c7 bak-red">EX</span> <span data-fragment-index="6" class="fragment fde-r6 fde-c6 bak-blue">FE</span> <span data-fragment-index="6" class="fragment fde-r6 fde-c7 bak-yellow">DE</span> <span data-fragment-index="6" class="fragment fde-r6 fde-c8 bak-red">EX</span> </div> Note: *5 steg* hver gang den skal kjøre en instruksjon PC - program counter Branching - hopp til andre steder/loop Kjører en instruksjon for hver klokkesykel, men gjør flere steg samtidig. Verdt å merke seg. --- ## Minne <div class="columns" style="font-size: 0.6em;"> <div> <h3>Primary</h3> - Volatile - Random Access <img src="./static/graphics/ram.png" width=80% /> </div> <div> <h3>Secondary</h3> - Nonvolatile - Sequential Access? <img src="./static/graphics/storage_combined.svg" width=60% /> </div> </div> Note: Primær - RAM tilfeldig access - kan nå hvor som helst øyeblikkelig volatilt - uten strøm så forsvinner dataen. Sekundær - Harddisk Tregt - cd som spinner Sekvensiell aksess - Må lete for å lese på riktig sted. ikke volatilt - holder på data uten strøm SSD - Nesten random access, ligner på ram, men er ikke volatil CD, DVD, Ekstern harddisk, USB, osv. --- # Digital Representasjon --- ## Analog/Digital <div class="columns"> <div> <img src="./static/graphics/sound-points-white.svg" width=100%/> </div> <div class="column"> - ADC - inn på computeren - DAC - ut fra computeren </div> </div> Note: Analog kan du måle bortimot så nøyaktig du vil Digital har et visst sett med 0 og 1 --- ## Piksler <div class="columns"> <div class="column"> <img src="./static/graphics/subpixel.svg" width=30%/> </div> <div class="column"> <img src="./static/graphics/e.jpg" width=100%/> </div> </div> Note: Piksler er en måte å representere bilder En piksel er en liten bit av bildet, med en farge. Ofte tilsvarer 1 piksel 1 LED på skjermen Den fargen er representert som en sammensetning av 3 farger Pleier ofte å være RGB ---- <h3> <span class="rgb-red">R</div><span class="rgb-gre">G</div><span class="rgb-blu">B</div> <span style="width: 10%; display: inline-block;"/> <img style="vertical-align:middle;" src="./static/graphics/subpixel.svg" width=40%/> </h3> Hver verdi er mellom 0 og 255 Kan derfor representeres som et hexadecimal med 6 tegn <div class="replacable-fragment" style="font-size: 0.8em;"> <div class="fragment fade-out" data-fragment-index="1"> | Farge | <span class="rgb-red">Rød</span> | <span class="rgb-gre">Grønn</span> | <span class="rgb-blu">Blå</span> | |--------------------------------------|---------------|---------------|---------------| | <span class="rgb-pvv">#283681</span> | 28\\(_{16}\\) | 36\\(_{16}\\) | 81\\(_{16}\\) | | <span class="rgb-red">#FF0000</span> | FF\\(_{16}\\) | 00\\(_{16}\\) | 00\\(_{16}\\) | | <span class="rgb-cof">#C0FFEE</span> | C0\\(_{16}\\) | FF\\(_{16}\\) | EE\\(_{16}\\) | | <span class="rgb-whi">#FFFFFF</span> | FF\\(_{16}\\) | FF\\(_{16}\\) | FF\\(_{16}\\) | | <span class="rgb-bla">#000000</span> | 00\\(_{16}\\) | 00\\(_{16}\\) | 00\\(_{16}\\) | </div> <div class="fragment fade-in" data-fragment-index="1"> | Farge | <span class="rgb-red">Rød</span> | <span class="rgb-gre">Grønn</span> | <span class="rgb-blu">Blå</span> | |--------------------------------------|----------------|----------------|----------------| | <span class="rgb-pvv">#283681</span> | \\(40_{10}\\) | \\(54_{10}\\) | \\(129_{10}\\) | | <span class="rgb-red">#FF0000</span> | \\(255_{10}\\) | \\(0_{10}\\) | \\(0_{10}\\) | | <span class="rgb-cof">#C0FFEE</span> | \\(192_{10}\\) | \\(255_{10}\\) | \\(238_{10}\\) | | <span class="rgb-whi">#FFFFFF</span> | \\(255_{10}\\) | \\(255_{10}\\) | \\(255_{10}\\) | | <span class="rgb-bla">#000000</span> | \\(0_{10}\\) | \\(0_{10}\\) | \\(0_{10}\\) | </div> </div> Note: Regn ut 1920x1080 x 24 bits --- ## Lyd <div class="columns"> <div class="column"> <img src="./static/graphics/sound-points-white.svg" width=100%/> </div> <div class="column"> - Bør være dobbelt så ofte som høyeste frekvensen - Bitdybde (16 bit er standard) </div> </div> \\[ 16\ bits \cdot 44100\ Hz \cdot (3 \cdot 60)s \cdot 2\ kanaler \\] Note: tegn en bølge på tavlen, og vis frekvensen --- ## Encoding og Komprimering - "Hvordan tolke dataen" - Lossless vs lossy Note: Alt er 1 og 0, men det kan tolkes på forskjellige måter. Grunnen til at de ofte diskuteres sammen ---- ### Eksempel på komprimering \\[ AAAAAAABBBBAAAAABB \\] \\[ A6B4A5B2 \\] <!-- .element: class="fragment" data-fragment-index="1" --> Note: Rart for tekst, men gir mening for bilder -> Runlength encoding ---- ### Eksempel på lossy komprimering Dette er en eksempelsetning. Dte e en eksmplstnig <!-- .element: class="fragment" data-fragment-index="1" --> Note: ikke vanlig for tekst, men akseptabelt for video/lyd/bilde Gjøres ofte på tjenester som messenger. --- # Algoritmer Note: Beskriver stegvis og nøyaktig hvordan man løser et problem Uten tolkning Pseudokode ---- (Eksempel på pseudokode) --- ## Kompleksitet <table width="100%"> <tr> <td> \\[ \mathcal{O}(1) \\] </td> <td> ```python def f(lst): print('Hi!') ``` </td> </tr> <tr> <td> \\[ \mathcal{O}(n) \\] </td> <td> ```python def f(lst): for item in lst: print(item) ``` </td> </tr> <tr> <td> \\[ \mathcal{O}(n^2) \\] </td> <td> ```python def f(lst): for item in lst: for itemOnceMore in lst: print(item, itemOnceMore) ``` </td> </tr> </table> Note: brukes mer om dere skal programmere mye ---- Sorteringsalgortimer: - Bubble sort: \\(\mathcal{O}(n^2)\\) - Merge sort : \\(\mathcal{O}(n\ log\ n)\\) --- # Nettverk --- ## Internett - Hva er det ---- ### Historie - ARPAnet Note: Sponset av Dep. of defense, USA Kjellermaskiner, matte Ble ikke brukt aktivt hele tiden Overføre instruksjoner Maksimal utnyttelse Flere universiteter koblet seg på Ikke veldig planlagt --- ### 5 lags modellen <div class="columns"> <div> <img src="./static/graphics/network-layers/network-stack.svg" width=40%/> </div> <div class="r-stack"> <img src="./static/graphics/network-layers/5/packet.svg" class="fragment fade-out" data-fragment-index="0" width=20%/> <img src="./static/graphics/network-layers/4/packet.svg" class="fragment current-visible" data-fragment-index="0" width=30%/> <img src="./static/graphics/network-layers/3/packet.svg" class="fragment current-visible" data-fragment-index="1" width=40%/> <img src="./static/graphics/network-layers/2/packet.svg" class="fragment current-visible" data-fragment-index="2" width=50%/> <img src="./static/graphics/network-layers/1/packet.svg" class="fragment current-visible" data-fragment-index="3" width=60%/> </div> </div> Note: pakker pakket inn i hverandre Skal se litt på hva punktumene faktisk er ---- <img src="./static/graphics/network-layers/1/title.svg" width="20%"/> <br> <img src="./static/graphics/network-layers/1/computer-diagram.svg"/> Note: Medium for kommunikasjon mellom 2 eller flere endrepunkter ---- <div class="columns"> <div> <img src="./static/graphics/network-layers/2/title.svg" width="40%"/> </div> <div> <img src="./static/graphics/network-layers/1/computer-diagram.svg" class="prev-netdiagram" width="30%"/> </div> </div> <br> <img src="./static/graphics/network-layers/2/computer-diagram.svg"/> Note: Etablert: Kommunikasjonsmedium Stabil overføring, og kontakt med andre ender ---- <div class="columns"> <div> <img src="./static/graphics/network-layers/3/title.svg" width="40%"/> </div> <div> <img src="./static/graphics/network-layers/2/computer-diagram.svg" class="prev-netdiagram" width="30%"/> </div> </div> <br> <img src="./static/graphics/network-layers/3/computer-diagram.svg"/> Note: Etablert: Flere computere er koblet sammen Kommunikasjon gjennom flere computere. Oppfører seg litt som postkontorer Hop count ---- <div class="columns"> <div> <img src="./static/graphics/network-layers/4/title.svg" width="40%"/> </div> <div> <img src="./static/graphics/network-layers/3/computer-diagram.svg" class="prev-netdiagram" width="30%"/> </div> </div> <br> <img src="./static/graphics/network-layers/4/computer-diagram.svg" width="60%"/> Note: Etablert: Link over mange computere. Stabil og sikker kommunikasjon til tross for forsvunnede pakker, TODO: move hop count from Transport layer to network layer ---- <div class="columns"> <div> <img src="./static/graphics/network-layers/5/title.svg" width="40%"/> </div> <div> <img src="./static/graphics/network-layers/4/computer-diagram.svg" class="prev-netdiagram" width="40%"/> </div> </div> <br> <img src="./static/graphics/network-layers/5/computer-diagram.svg" width="55%"/> Note: Etablert: Stabil og sikker kommunikasjon. Applikasjonsspesifikk data. --- ### MAC-Addresse `B6-4B-8F-B4-05-E5` <!-- TODO: Fix --> <img class="right-corner-logo" src="./static/graphics/network-layers/2/title.svg"> --- # IP ### IPv4 `ddd.ddd.ddd.ddd` `(bbbbbbbb.bbbbbbbb.bbbbbbbb.bbbbbbbb)` ### IPv6 `xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx` Note: Navn på pcene ---- ### Submaske `255.255.255.128` `(11111111.11111111.11111111.10000000)` `192.168.0.128`<span class="red">`/25`</span> Note: Den siste er ikke veldig nyttig, men om man skal sette opp ruter ---- NAT --- ### DNS NTNU: <a href="https://129.241.160.102/">129.241.160.102</a> --- TCP ---- UDP --- VPN --- # Programvareutvikling --- Note: Løs tidligere eksamener Crash course