Planovani procesu a cteni po eofu
Alexandr Malusek
malusek na hroch.ujf.cas.cz
Neděle Květen 24 21:38:47 CEST 1998
tobiska na ure.cas.cz (Suma Petr Tobiska) writes:
> narazil jsem na zajimavou vec: kdyz si prelozim nasledujici programek:
> ---- eofak.c
> #include <stdio.h>
> int main()
> { while( getchar() != '\n' ); }
> ----- koned eofak.c
> a presmeruju mu na stdin prazdny soubor
> echo -ne "" > nic; a.out < nic
> sezere veskery volny idle time (po vypsani topem asi 97%).
To je v poradku, protoze getchar() vraci pri cteni na konci souboru
EOF (= -1), takze v cyklu while se neustale vola funkce getchar() a ta
vzdy vraci -1. Cteni EOF lze testovat napr. takto:
#include <stdio.h>
int main()
{
int c;
while( (c = getchar()) != EOF )
if (c == '\n')
break;
return 0;
}
> Jak to je s planovanim takoveho procesu a jak ovlivnuje vykonost
> systemu?
S timto procesem se zachazi jako s kazdym jinym.
$ vmstat 1
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 5116 14912 4016 16972 0 0 0 5 105 13 34 66 0
1 0 0 5116 14912 4016 16972 0 0 0 0 106 13 32 68 0
1 0 0 5116 14912 4016 16972 0 0 0 0 105 9 32 68 0
^^ ^^
Proces procesor plne zatezuje, pricemz priblizne 32% casu se travi v
uzivatelskem modu a 68% casu v systemovem modu (pri vykonavani
systemoveho volani read()).
> Kde se da najit nejaka literatura (mam pujcene Principy OS Unix od
> Bacha, ale nevim, jak presne to je v linux, napr. jak je to presne se
> signaly ( neco jako sighold v BSD )).
Linux (mimo jine) implementuje signaly podle POSIXu, viz
sigaction(2). Normu POSIXu ale nemam, takze nevim, jestli
kompletne. RH (http://www.redhat.com/) prodava knihu Linux Application
Development - je tam i kapitola venovana zpracovani
signalu. (Mimochodem, prodava ji i nekdo v CR?)
Jinak rozdily mezi implementaci BSD, SVR4, ... signalu jsou popsany v
knize UNIX Internals, Uresh Vahalia, Prentice Hall, ISBN
0-13-101908-2.
--
A. Malusek (malusek na ujf.cas.cz)
UJF AV CR
Další informace o konferenci Linux