Treść #
Celem jest napisanie programu do zliczania wystąpień pojedynczych znaków w zadanym pliku. Przy pisaniu programu możesz założyć, że każdy znak jest reprezentowany przez jeden bajt.
W celu przyśpieszenia obliczeń program powinien wykorzystywać pamięć dzieloną do synchronizacji miedzy wieloma procesami.
Dla ułatwienia przetwarzania zawartości plik powinien być zmapowany do pamięci procesu przy pomocy funkcji mmap
.
Etapy #
- Otwórz plik przy pomocy funkcji
mmap
w procesie rodzica.
Wypisz jego zawartość na standardowe wyjście.
Zakazane jest użycie strumieni oraz funkcjiread
. - Zaimplementuj logikę zliczania znaków występujących w pliku.
Na końcu działania programu wypisz podsumowanie ile znalazło się poszczególnych znaków w pliku. - Podziel pracę na pliku pomiędzy
N
procesów potomnych.
Przenieś otwieranie pliku do procesu potomnego.
Każdy z procesów powinien zliczyć znaki niezależnie od pozostałych.
Użyj pamięci dzielonej do przekazania wyników obliczeń do procesu rodzica.
Proces rodzica powinien wypisać podsumowanie po zakończeniu działania wszystkich procesów potomnych. - Dodaj obsługę przypadku śmierci procesu potomnego.
W takim wypadku proces rodzica powinien zaniechać wypisania podsumowania.
Zamiast tego powinien wypisać informację, że obliczenia się nie powiodły.
Każdy proces potomny powinien mieć3\%
szans na nagłą śmierć w momencie zgłaszania wyników do procesu rodzica (implementowane jakoabort
).