ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Vývoj SW aplikací Unix, POSIX, WinAPI, programování komunikace s periferními zařízeními, ovladače zařízení České vysoké učení technické Fakulta elektrotechnická 2012
Studijní materiály a informace o předmětu http://edux.feld.cvut.cz/ http://measure.feld.cvut.cz/vyuka/predmety/bakalarske/navody/
Použitá literatura [1] Stallings, W.: Operating Systems. Internals and Design Principles. 4th Edition. Prentice Hall, New Jersey, 2001. [2] Silberschatz, A. Galvin, P. B. - Gagne, G. : Operating System Concepts. 6th Edition. John Wiley & Sons, 2003. [3] Tanenbaum, A.: Modern Operating Systems. Modern Operating Systems. Prentice Hall, New Jersey, 2008.
Rozbor úlohy Návrhu počítačového, měřicího nebo řídicího systému předchází rozbor úlohy a zodpovězení následujících otázek: a) Jaké technické prostředky (HW) použijeme? b) Jaký operační systém (OS) zvolíme? c) Jak má výsledná SW aplikace vypadat (CLI, GUI); pro koho je určena; jaké jsou požadavky uživatele? d) Jaké vývojové prostředky pro tvorbu aplikačních programů nasadíme? e) Jaké techniky programování budeme využívat?
Klasický vývoj programu Použití textově orientovaných programovacích jazyků (C, C++, C#, Pascal, aj.) Vývoj probíhá ve třech základních krocích: 1. Vytvoření zdrojového kódu programu (v textové podobě). Zdrojový kód je u složitějších programů rozdělen do více jednotek,modulů (např. *.c, *.h). 2. Překlad modulů zdrojového programu do objektového kódu pomocí překladače, kompilátoru (compiler). Překladač provádí postupně lexikální analýzu, sémantickou a syntaktickou analýzu, optimalizaci kódu, generování cílového (strojového) kódu. 3. Z jednotlivě přeložených objektových kódů a z funkcí obsažených v knihovnách pak linker (=sestavovací program, linker) sestaví výsledný spustitelný kód.
Příklad vývoje programu v C jazyku pod OS Unix Krok 1: Vytvoření souboru hello.c #include <stdio.h> int main() { printf ("Hello world\n"); exit (0); } Krok 2, 3:Překlad a sestavení programu do spustitelného souboru hello $ cc o hello hello.c Krok 4: Spuštění programu hello $./hello Hello world $
Použití knihoven Knihovna = sada funkcí a procedur v podobě objektových kódů (vytvořených kompilátorem), které jsou uloženy do společného souboru. Typy knihoven: - statické (.a,.lib): volané funkce jsou připojeny linkerem do výsledného spustitelného kódu - sdílené/dynamické (.o,.so,.dll): linker zapíše odkazy na volané knihovní funkce do tabulky symbolů, která je připojena ke spustitelnému souboru. Vlastní knihovna je uložena mimo. Dynamicky linkované knihovny jsou propojeny s programem při spuštění prostřednictvím zavaděče (dynamic loader). Výhody dynamických k.: - kód sdílen více programy, šetří se paměť - je možné opravovat chyby a inovovat knihovnu bez nutnosti nového sestavování
Příklad použití knihoven (jazyk C, OS Unix) Překlad a sestavení programu fred $ cc o fred fred.c /usr/lib/libm.a nebo zkráceně: $ cc o fred fred.c lm Specifikace adresáře pro knihovny a hlavičkové soubory: -L/usr/openwin/lib -I/usr/openwin/include
Příklad řešení měřicího systému
Příklad řešení měřicího systému Standalone Instrumentation Modular Instrumentation Proprietary Processor, OS Timing and Control Firmware Bus Measurement Subsystem Power Supply Fixed User Interface GPIB, LAN, USB Connectivity Timing and Control PC Processor, OS Software Bus Modular Hardware Shared Power Supply PXI, VXI User Interface GPIB, LAN, USB Connectivity
Systémová komunikační rozhraní High level Low level
Vývoj aplikací pro měřicí systémy- systémové rámce Systémové rámce (System Frameworks Specification) definují: HW konfiguraci řídicího počítače včetně komunikačního rozhraní (VXI, IEEE 488, RS-232) měřicích modulů popř. přístrojů; typ operačního systému; aplikační vývojové prostředky; SW rozhraní VISA (viz následující příklad) a knihovny pro komunikaci s rozhraním; ovladače měřicích přístrojů; program pro testování měřicího přístroje (tzv. Soft Front Panel); požadavky na dokumentaci.
Použití knihovny VISA #include "visa.h" int main(void) { ViStatus status; /* hlášení chyb */ ViSession defaultrm, instr; /* komunikační kanály */ ViUInt32 retcount; /* počet přenesených znaků */ ViChar buffer[200]; /* buffer pro komunikaci */ /* inicializace systému */ status = viopendefaultrm(&defaultrm); if (status < VI_SUCCESS) { /* chyba při inicializaci VISA...ukončení */ return -1; } /* zahájení komunikace s přístrojem s primární adresou 1 */ status = viopen( defaultrm, "GPIB0::1::INSTR", VI_NULL, VI_NULL, &instr );
Použití knihovny VISA /* nastavení intervalu timeout pro spojení určené pomocí instr */ status = visetattribute(instr, VI_ATTR_TMO_VALUE, 5000); /* dotaz na identifikaci přístroje */ status = viwrite(instr, "*IDN?", 5, &retcount); status = viread(instr, buffer, MAX_CNT, &retcount); /* zpracování dat... */ /* ukončení komunikace */ status = viclose(instr); status = viclose(defaultrm); return 0; }
ÚVOD DO OPERAČNÍCH SYSTÉMŮ KONEC 3. přednášky České vysoké učení technické Fakulta elektrotechnická