Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

1. Seznámení s učebnou, základy reprezentace dat, číselné soustavy a plovoucí řádová čárka

Osnova cvičení

  1. požadavky na zápočet, hodnocení
  2. seznámení s učebnou
  3. základní reprezentace čísel, program v C
  4. výstup binární hodnoty na port hardware

Co bych si měl na první cvičení zopakovat / připravit

  1. K přihlášení ke GNU/Linuxu v KN:E-2 se používá Hlavní přístupové heslo (více na stránce o přístupových heslech na Wiki IT skupiny)
  2. binární a hexadecimální reprezentace celých čísel čísel
  3. doplňkový kód
  4. operace sčítání, odčítání, násobení a dělení
  5. logické operace s binárními čísly (and, or, rotace, …)
  6. reprezentace reálných čísel (IEEE 754)

Náplň cvičení

Cílem cvičení je seznámení s učebnou, zopakování základních pojmů na téma reprezentace dat v počítači.

Na cvičení budeme vycházet z následujícího programu v C, který budeme dále modifikovat.

Program pro zobrazování reprezentace čísel:

/* Simple program to examine how are different data types encoded in memory */

#include <stdio.h>

/*
 * The macro determines size of given variable and then
 * prints individual bytes of the value representation
 */
#define PRINT_MEM(a) print_mem((unsigned char*)&(a), sizeof(a))

void print_mem(unsigned char *ptr, int size) {
  int i;
  printf("address = 0x%016lx\n", (long unsigned int)ptr);

  for (i = 0; i < size; i++) {
    printf("0x%02x ", *(ptr+i)); // == printf("0x%02x ", ptr[i]);
  }

  printf("\n");
}

int main() {
  /* try for more types: long, float, double, pointer */
  unsigned int unsig = 5;
  int sig = -5;

  /* Read GNU C Library manual for conversion syntax for other types */
  /* https://www.gnu.org/software/libc/manual/html_node/Formatted-Output.html */
  printf("value = %d\n", unsig);
  PRINT_MEM(unsig);

  printf("\nvalue = %d\n", sig);
  PRINT_MEM(sig);

  return 0;
}

Zdojový kód programu je z počítačů v laboratoři možné zkopírovat z adresáře /opt/apo/binrep/print_binrep. K překladu programu použijte buď přímo příkaz:
gcc -Wall -pedantic -o print_binrep ./print_binrep.c 
nebo přiložený soubor s popisem sestavení (Makefile) pro program 'make'. K editaci použijte některý z nainstalovaných editorů (geany, vim, emacs, qtcreator, …). Pro ty, co nemají vlastní preferenci je vhodné začít třeba s programem geany.

Úkoly

  1. přeložte a spusťte uvedený program, interpretujte výstupy programu a postupně ho modifikujte tak
    • aby tiskl vnitřní reprezentaci i jiných datových typů (např. char, float, long, int*)
    • aby vytiskl tabulku celých čísel čísel včetně jejich reprezentace v rozsahu -16 až 15
    • aby realizoval operace sčítání a odčítání dvou proměnných (celá čísla) a vytiskl na obrazovku vstupní operandy a výsledky těchto operací včetně jejich vnitřní reprezentace
    • vyzkoušejte operace s kladnými i zápornými čísly, zaměřte se i na takové hodnoty, kdy po provedení operace dojde k přetečení
  2. Vyzkoušejte si ručně sčítání a odčítání celých čísel v doplňkovém kódu
    • demonstrujte výpočet např. 7+6, 7-6
    • procvičte výpočet na dalších číslech a s pomocí programu výsledky ověřte
    • Kdy může dojít k přetečení a jak poznáte, že k němu došlo?
  3. Násobení celých čísel
    • demonstrujte výpočet např. 7*6
    • jak se výpočet změní v případě záporných čísel? např. -7*6, -7*(-6), 7*(-6)
    • rychlá verze hw násobičky (jak zrychlit opakované sčítání na jedné sčítačce použitím většího množství sčítaček?)
  4. Dělení celých čísel
    • demonstrujte výpočet např. 42/7, 43/7
    • jak se výpočet změní v případě záporných čísel?
  5. Reprezentace reálných čísel (IEEE 754)
    • binární reprezentace reálných čísel (float - 32bit, double - 64bit)
    • převeďte na binární reprezentaci číslo -0.75, ověřte správnost s pomocí programu pro zobrazení reprezentace v paměti
    • převeďte float z binární reprezentace 0xC0A00000 na reálné číslo v desitkové soustavě
    • demonstrujte výpočet (v desítkové soustavě) 9.999*10^1 + 1.1610*10^(-1), předpokládejte, že je možné uložit pouze 4 cifry čísla a 2 cifry exponentu.
      • Návod: 1) zarovnání čísel, 2) součet, 3) normalizace, 4) zaokrouhlení
    • v binární reprezentaci sečtěte čísla 0.5 a -0.4375
    • demonstrujte výpočet (v desítkové soustavě) 1.110*10^10 * 9.200*10^(-5)
    • v binární reprezentaci vynásobte čísla 0.5 a -0.4375

Užitečné odkazy

Domácí úkoly

  • domácí úkoly 1 až 4 budou zadané a odevzdávané elektronickou formou
  • vstup k zadání a odevzdání úkolů je přes adresu https://dcenet.felk.cvut.cz/apo/
  • Na stránce “Assignments” naleznete seznam zadaných úkolů
  • Pro vyzkoušení práce s odevzdávacím systémem je k dispozici nehodnocená varianta prvního úkolu 1st training homework
  • Případnými problémy s odevzdávacím systémem se obracejte na svého cvičícího nebo přímo na autora/správce sytému Richarda Šustu

Počítačová síť v učebně KN:E-2

Učebna KN:E-2 je vybavena počítači se síťovou instalací operačního systému Debian GNU/Linux Jessie.

Po zapnutí počítače je zaveden z lokálního serveru přes PXE zavaděč PXElinux. Ten umožňuje volit

  • boot z lokálního disku stanice (nebudeme používat)
  • volba DCE 4.9 stretch app spuštění síťové verze operačního systému Debian Stretch

Volba menu zajistí natažení image jádra GNU/Linux a počátečního RAM-disku ze sítě s využitím protokolu TFTP. Po spuštění jádra je připojen přes NFS kořenový svazek. Ten je ale připojen jen v režimu pro čtení. Pro dočasné uložení lokálních změn je pak nad tuto adresářovou strukturu namapovaný souborový systém pro dočasné uložení lokálních změn. Jedná se buď o modul Overlayfs (dříve se používal AUFS). Pro ověření přihlašovacích údajů se používá systém Kerberos a ověřuje se proti hlavnímu ČVUT heslo. Po úspěšném přihlášení je pak do adresářové struktury stanice připojen přes NFS svazek s uživatelským kontem, ke kterému má uživatel práva pro čtení a zápis.

Další informace o použitém řešení lze nalézt na stránce Wiki Jak vytvořit bezdiskový stroj s operačním systémem GNU/Linux. Dále jsou k dispozici slide DiskLess Debian/GNU Linux z prezentace našeho řešení na konferenci/akci Install Fest.

Studentská konta a hesla

Pro ověření oprávnění k přístupu do systému a se používá centrální ČVUT/FEL heslo.

Vzdálený přístup k datům na uživatelských kontech

Kromě místnosti KN:E-2 je prostředí dostupné v místnosti KN:E-s109 a na externě přístupném serveru postel.felk.cvut.cz přes SSH spojení. Pro přenos souborů lze pak použít příkaz SCP případně jiné klienty podporující SCP/SFTP protokol.

Konto si lze připojit do vlastního GNU/Linux systému přes utilitu sshfs, např.:

sshfs jmeno@postel.felk.cvut.cz: /mnt/tmp
Odpojení konta se dá provést příkazem:
fusermount -u /mnt/tmp
Server nabízí i vzdálené připojení k na něm spouštěným grafickým aplikacím
ssh -X jmeno@postel.felk.cvut.cz

Poznámka: Jméno nebylo zvoleno pouze z důvodu pohodlného přístupu z pohodlí domova, ale je především připomínkou jedné z klíčových osobností počítačové sítě Internet - Jona Postela.

Řešení problémů s konty, obnova dat

V případě problémů s instalací GNU/Linxu kontaktuje Aleše Kapicu ze skupiny IT (http://support.dce.felk.cvut.cz/mediawiki/index.php/IT_kontakty) případně další kolegy ze skupiny IT, kteří mají správu hardware a sítí ne jen v KN:E-2 na starosti.

courses/b35apo/tutorials/01/start.txt · Last modified: 2019/03/01 13:10 by procht23