Multitasking
Von Neumannovo schéma RAM 3 ADD SUB ZA input 20 28 010 100 registr dat 2 registr instrukcí op. code adr 7 LOAD 28 mikroprogramy 30 32 LOAD 28 ADD 20 registr adres 1 4 6 R W 30 čítač instrukcí 5 A +2
time quantum expired RAM 3 ADD SUB ZA 100 input Interrupt 20 28 30 32 010 100 LOAD 28 ADD 20 100 registr dat registr adres 32 2 7 1 6 4 registr instrukcí op. code adr LOAD 28 mikroprogram LOAD 1000100 0 00 000 0000000 1 10 000 0100010 0 00 000 0000000 0 10 001 0000001 0 00 000 0 1 0 0 0 1 0 0 0 0 0 0 0 R W 32 čítač instrukcí 5 A +2
time quantum expired Instrukce, tj. její mikroprogram, doběhne až do konce, a pak
přerušení RAM 100 3 ADD SUB ZA 100 input Interrupt 20 28 010 100 registr dat 2 registr instrukcí op. code adr 7 ADD 20 mikroprogramy 30 32 LOAD 28 ADD 20 registr adres 1 4 6 R W 32 čítač instrukcí 5 A +2
stav procesu RAM 100 pgm 01 registr instrukcí pgm 02 ADD 20 mikroprogramy System 32 čítač instrukcí
úklid 1. fáze HW 100 Interrupt RAM 100 pgm 01 registr instrukcí pgm 02 S ADD 20 mikroprogramy System úklid. obl. 32 čítač instrukcí
příprava ošetření přerušení RAM int xxx int yyy pgm 01 registr instrukcí interrupt pgm 02 System S mikroprogramy úklid. obl. čítač instrukcí
ošetření přerušení RAM int xxx int yyy 3 ADD SUB ZA input pgm 01 registr dat 2 registr instrukcí op. code adr pgm 02 System registr adres 7 1 4 mikroprogramy 6 úklid. obl. R W čítač instrukcí 5 A +2
dokončení ošetření přerušení RAM int xxx int yyy pgm 01 registr instrukcí pgm 02 System S mikroprogramy úklid. obl. čítač instrukcí
context switching
úklid 2. fáze SW RAM int xxx int yyy pgm 01 úklid. obl. pgm 02 S registr instrukcí mikroprogramy System úklid. obl. čítač instrukcí
Systém -... RAM int xxx int yyy 3 ADD SUB ZA input pgm 01 registr dat 2 registr instrukcí op. code adr pgm 02 System registr adres 7 1 4 mikroprogramy 6 úklid. obl. čítač instrukcí 5 A +2
Systém - výběr RAM int xxx int yyy pgm 01 úklid. obl. pgm 02 úklid. obl. S registr instrukcí mikroprogramy System úklid. obl. čítač instrukcí
obnova RAM int xxx int yyy pgm 01 úklid. obl. pgm 02 úklid. obl. S registr instrukcí mikroprogramy System úklid. obl. čítač instrukcí
problém procesy a vlákna se mohou navzájem ovlivňovat spolupráce souboj oddělené adresové prostory virtuální paměť spící proces stav registrů tabulky virtuální paměti...
opakování 13.06.2018 vjj 20
P3 running P1 is sleeping INT is sleeping P2 is sleeping a bed for P3. P3 is working in workshop.. SYSTEM is sleeping. a bed for OUT a bed for IN
context switch P1 sleeping INT sleeping P2 sleeping a bed for P3. P3 working.. SYSTEM sleeping. a bed for OUT a bed for IN sleeping
INT running P1 sleeping INT sleeping P2 sleeping a bed for P3. INT working.. SYSTEM sleeping. P3 sleeping a bed for IN
context switch P1 sleeping INT sleeping P2 sleeping a bed for P3. INT working.. SYSTEM sleeping. P3 sleeping a bed for IN
SYSTEM running P1 sleeping INT sleeping P2 sleeping a bed for P3 SYSTEM working... SYSTEM sleeping. P3 sleeping a bed for IN
context switch a bed for P1 INT sleeping P2 sleeping P3 sleeping. SYSTEM working.. SYSTEM sleeping. a bed for OUT P2 sleeping
P2 running a bed for P1 INT sleeping P2 sleeping P3 sleeping. P2 working.. SYSTEM sleeping. a bed for OUT a bed for IN
13.06.18 vjj 28 virtuální procesor Multitasking cyklické přidělování procesoru programům (procesům/vláknům) vždy pouze na krátký okamžik časové kvantum
13.06.18 vjj 29 program, proces program zdrojový kód, přeložený kód,... existuje nezávisle na počítači proces program spuštěný v počítači (již chvíli před tím než začne sám počítat a ještě chvíli potom) vytvoření procesu vytvoření systémových údajů potřebných pro běh jedné instance programu (PCB, TCB,...) proces existuje, pokud existují tyto údaje
13.06.18 vjj 30 Historie - Job Manager fronta (fronty) programů čekajících na spuštění kdo dřív příjde, ten dřív mele nejskromnější nejdříve job mix: třídy prací podle náročnosti I/O procesor priority
13.06.18 vjj 31 Historie Task Manager správa procesů jediný procesor x symetrický (homogenní) multiprocesor fronta procesů čekajících na procesor - Round Robin časové kvantum preemptivní strategie prioritní strategie statická x dynamická priorita nejnáročnější nejdříve I/O nejdříve požadavky na paměť
13.06.18 vjj 32 threads kdysi v prehistorii byly proces a vlákno jedno a totéž z jedné funkce lze zavolat druhou funkci tak, že se nečeká na její dokončení (výsledek), ale pokračuje se rovnou dál zavolaná funkce běží "paralelně" s volající funkcí procesor je přidělován oběma funkcím nezávisle Unix fork, Windows CreateThread
... Thread HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpsa, DWORD cbstack, // 1 MB LPTHREAD_START_ROUTINE mythreadfunction, LPVOID lpvthreadparm, DWORD fdwcreate, LPDWORD lpthreadid ) ;... DWORD WINAPI mythreadfunction ( LPVOID lpvthreadparm ) ;
13.06.18 vjj 34 threads vlákna jednoho procesu mají společný adresový prostor tj. mohou např. číst z a zapisovat do stejných proměnných systém si udržuje o každém vláknu spoustu údajů (TCB, např. odkud má pokračovat, až zase příště dostane procesor, kolik času spotřebovalo, jakou má prioritu,...)
Dispatcher database
stavy vlákna
13.06.18 vjj 37 quantum clock interval => quantum = quantum - 3 preempce => quantum = quantum - 1 Workstation: quantum = 6, tj. clock intervals Server: quantum = 36, tj. clock intervals clock interval = ms (uniprocessor) ms (multiprocessor) přidělený časový interval: uniprocessor multiprocessor Workstation 20 ms 30 ms Server 120 ms 180 ms
13.06.18 vjj 38 > clockres clock interval Windows XP ClockRes - View the system clock resolution By Mark Russinovich SysInternals - www.sysinternals.com The system clock interval is 10 ms
13.06.18 vjj 39 >clockres clock interval Windows 7 SP1 ClockRes v2.0 - View the system clock resolution Copyright (C) 2009 Mark Russinovich SysInternals - www.sysinternals.com Maximum timer interval: 15.600 ms Minimum timer interval: 0.500 ms Current timer interval: 15.600 ms
13.06.18 vjj 40 Dynamické kvantum Control Panel, System, Advanced, Performance, Advanced Programs (=Short) x System Services (=Long) kernel proměnná: PsPrioritySeparation HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation Forground Quantum Boost = 0/1/2 (0=default, 3 je neplatná, interpretuje se jako 2) = index do příslušného z následujících vektorů Short(1) Long(2) Variable (1) 6 12 18 12 24 36 Fixed (2) 18 18 18 36 36 36