# ITGK Teori-kurs Note: Introduksjon --- ## ⏺ **OBS:** Opptak 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. --- ## Hva er Informasjonsteknologi - Flytting og prossesering av data - Datamaskiner - Punchcards - Elektroniske datamaskiner - Nettverk --- ### Et par viktige personer - Ada Lovelace: Verdens første programmør - Herman Hollerith: Punchcards og matematikk - Konrad Zuse: Verdens første programmerbare datamaskin - John von Neumann: Diverse, Neumann-arkitektur - Alan Turing – Matematisk grunnlag for datamaskin - Douglas Engelbart – Datamusen, mye interaksjondesign --- ### Et par begreper:
- PC - Operativsystem - Abstraksjon - Transistorer - IC
- Hardware - Software - Protokoll - WWW/Internet - High level/Low level - bit
Note: Operativsystem -> Ressursallokering -> Kernel -> Grafisk brukergrensesnitt Forklar hvordan en transistor funker ----
- Abstraksjon
```python def goForAWalk(): put_on_clothes() open_the_door() walk() def open_the_door(): put_hand_on_handle() shove_hand_down() push_door() def put_hand_on_handle(): lift_hand() move_hand_over_handle() lower_hand() ```
----
- Transistorer
"Elekrisk bryter"
----
- Integrated Chip
Elektronisk abstraksjonslag
---- ### Et par begreper:
- PC - Operativsystem - Abstraksjon - Transistorer - IC
- Hardware - Software - Protokoll - WWW/Internet - High level/Low level - bit
----
- WWW/Internett
**www**.website.com
---- ### Et par begreper:
- PC - Operativsystem - Abstraksjon - Transistorer - IC
- Hardware - Software - Protokoll - WWW/Internet - High level/Low level - bit
---
| 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}\\) |
| 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}\\) |
--- ### Datatyper - Integer - Character - Float - Array - String Note: char -> ASCII 7b, Extended ASCII 8b, UTF-8 Finnes flere, men disse Objekter ---- ### ASCII, UNICODE, UTF-8 --- ### Tallsystemer
10: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ..., 19, 20, 21, ..., 99, 100, 101, ...
2: 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, ...
16: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, ..., 1E, 1F, 20, ..., FE, FF, 100, ...
8: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, ..., 76, 77, 100, ...
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 --- ### Negative tall - Signed magnitude - Two's compliment TODO: add diagrams 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 ``` \\[ (+,\ \ 4,\ \ 1949284) = +1.949284 \cdot 10^4 = 19492.84 \\] 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 - Hovedkort - CPU - Minne 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) Note: Limet som fester alle de andre bitene sammen. Inneholder litt logikk for konfigurasjon av alle bitene, men lite ellers. --- ## CPU 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. ---- ### Arithmetic Logic Unit (ALU) ### & Control Unit (CU) ---- ### Fetch-Decode-Execute Cycle
FETCH
  • Henter neste instruksjon
DECODE
  • Dekoder instruksjonen
EXECUTE
  • Henter verdier fra minnet
  • Utfører instruksjonen
  • Skriver svaret tilbake i minnet
```python >>> x += y ```
---- ### Pipelining
FE DE EX FE DE EX FE DE EX FE DE EX FE DE EX FE DE EX
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

Primary

- Volatile - Random Access

Secondary

- Nonvolatile - Sequential Access?
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. --- ### Datamaskin
- Hovedkort - CPU - Minne (Primær og Sekundær)
- Strømforsyning - Kabinett - Kjøler - Ekstra prosessorer? - Ekstra IO?
--- # Digital Representasjon --- ## Analog/Digital
- ADC - inn på computeren - DAC - ut fra computeren
Note: Analog kan du måle bortimot så nøyaktig du vil Digital har et visst sett med 0 og 1 --- ## Piksler
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 ----

RGB

Hver verdi er mellom 0 og 255 Kan derfor representeres som et hexadecimal med 6 tegn
| Farge | Rød | Grønn | Blå | |--------------------------------------|---------------|---------------|---------------| | #283681 | 28\\(_{16}\\) | 36\\(_{16}\\) | 81\\(_{16}\\) | | #FF0000 | FF\\(_{16}\\) | 00\\(_{16}\\) | 00\\(_{16}\\) | | #C0FFEE | C0\\(_{16}\\) | FF\\(_{16}\\) | EE\\(_{16}\\) | | #FFFFFF | FF\\(_{16}\\) | FF\\(_{16}\\) | FF\\(_{16}\\) | | #000000 | 00\\(_{16}\\) | 00\\(_{16}\\) | 00\\(_{16}\\) |
| Farge | Rød | Grønn | Blå | |--------------------------------------|----------------|----------------|----------------| | #283681 | \\(40_{10}\\) | \\(54_{10}\\) | \\(129_{10}\\) | | #FF0000 | \\(255_{10}\\) | \\(0_{10}\\) | \\(0_{10}\\) | | #C0FFEE | \\(192_{10}\\) | \\(255_{10}\\) | \\(238_{10}\\) | | #FFFFFF | \\(255_{10}\\) | \\(255_{10}\\) | \\(255_{10}\\) | | #000000 | \\(0_{10}\\) | \\(0_{10}\\) | \\(0_{10}\\) |
Note: Regn ut 1920x1080 x 24 bits --- ## Lyd
- Bør være dobbelt så ofte som høyeste frekvensen - Bitdybde (16 bit er standard)
\\[ 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 - Encoding: "Hvordan tolke dataen" - "Codec" - Lossless & 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 \\] Note: Rart for tekst, men gir mening for bilder -> Runlength encoding ---- ### Eksempel på lossy komprimering Dette er en eksempelsetning. Dte e en eksmplstnig Note: ikke vanlig for tekst, men akseptabelt for video/lyd/bilde Gjøres ofte på tjenester som messenger. ---- ---- ---
# Algoritmer ##### Pseudokode ```txt function gcd(a, b) while a ≠ b if a > b a := a − b else b := b − a return a ```
Note: Beskriver stegvis og nøyaktig hvordan man løser et problem Uten tolkning Pseudokode --- ## Kompleksitet
\\[ \mathcal{O}(1) \\] ```python def f(lst): print('Hi!') ```
\\[ \mathcal{O}(n) \\] ```python def f(lst): for item in lst: print(item) ```
\\[ \mathcal{O}(n^2) \\] ```python def f(lst): for item in lst: for itemOnceMore in lst: print(item, itemOnceMore) ```
Note: brukes mer om dere skal programmere mye ---- Sorteringsalgortimer: - Bubble sort: \\(\mathcal{O}(n^2)\\) - Merge sort : \\(\mathcal{O}(n\ log\ n)\\) --- --- ## Internett ---- ### 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
##### Pakke
Note: pakker pakket inn i hverandre Skal se litt på hva punktumene faktisk er ----
Note: Medium for kommunikasjon mellom 2 eller flere endrepunkter ----

Note: Etablert: Kommunikasjonsmedium Stabil overføring, og kontakt med andre ender ----

Note: Etablert: Flere computere er koblet sammen Kommunikasjon gjennom flere computere. Oppfører seg litt som postkontorer Hop count ----

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 ----

Note: Etablert: Stabil og sikker kommunikasjon. Applikasjonsspesifikk data. --- ### MAC-Addresse `B6-4B-8F-B4-05-E5` --- # 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``/25` Note: Den siste er ikke veldig nyttig, men om man skal sette opp ruter ---- NAT --- ### DNS NTNU: 129.241.160.102 --- TCP ---- UDP --- VPN --- # Programvareutvikling --- Note: Løs tidligere eksamener Crash course