Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Pamięć wspólna Opis własnego rozwiązania Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008.

Podobne prezentacje


Prezentacja na temat: "Pamięć wspólna Opis własnego rozwiązania Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008."— Zapis prezentacji:

1 Pamięć wspólna Opis własnego rozwiązania Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008

2 Pamięć wspólna Kolejnym etapem projektu jest przedstawienie własnego rozwiązania problemu obsługi pamięci dzielonej, które będzie w przyszłości zaimplementowane w systemie czasu rzeczywistego uCRTOS na mikrokontrolerze ATmega 32 firmy ATMEL. W celu zarządzania pamięcią wspólną w systemie niezbędne będzie zaimplementowanie zestawu funkcji służących do jej obsługi. Należy pamiętać, iż jest to dopiero wstępny etap analizy i na etapie implementowania zaproponowanego rozwiązania mogą pojawić się nowe pomysły i problemy, dlatego przedstawiony zestaw funkcji może ulec zmianie w zależności od zaistniałych potrzeb i napotkanych niedogodności. Podczas tworzenia szkieletu proponowanego rozwiązania wykorzystano wiadomości zawarte w poprzednim rozdziale, aby w miarę możliwości proponowane rozwiązanie było zgodne z obowiązującymi standardami i wykorzystywało sprawdzone metody.

3 Pamięć wspólna int memCcr(int size, int type) funkcja odpowiedzialna za utworzenie obszaru pamięci wspólnej, działająca na podobnej zasadzie jak shmget() i shmat() w systemach Unix. Zaimplementowana funkcja powinna zwracać identyfikator utworzonego segmentu pamięci wspólnej. Jako parametry będzie podawany rozmiar pamięci, oraz ew. informacje o prawach dostępu do tworzonego segmentu pamięci. W związku z tym, że planowane jest wyposażenie mikrokontrolera w dodatkowe 64 kB pamięci RAM niezbędne będzie określenie czy korzystać z pamięci podstawowej czy rozszerzonej.

4 Pamięć wspólna int memCrd(int memid, int offset) funkcja odpowiedzialna za czytanie z pamięci wspólnej. Jako parametry podajemy identyfikator segmentu, oraz offset. W zależności od tego czy operacja się powiodła, funkcja zwraca 0 lub -1. Należy pamiętać, że każdy segment pamięci jest chroniony semaforem i możliwość wykonywania operacji na pamięci, zależy od aktualnego stanu semafora.

5 Pamięć wspólna void memCblk(int memid) funkcja blokuje wskazany segment pamięci, uniemożliwiając dostęp, aż do chwili gdy segment zostanie odblokowany za pomocą memCulk() void memCulk(int memid) funkcja odblokowuje wskazany segment pamięci, do którego dostęp został wcześniej zablokowany funkcją memCblk()

6 Pamięć wspólna void memCwr(int memid, int offset, void *source) funkcja realizująca zapis do pamięci. Jako parametry podawany jest identyfikator segmentu, offset, oraz wskaźnik na źródło danych przeznaczonych do zapisu. W zależności od wyniku operacji zapisu zwracane jest 0 w razie powodzenia, lub -1 gdy zapis nie powiedzie się.

7 Pamięć wspólna void memCfill(int memid, int offset, char *template) funkcja wypełniająca bajt pamięci wartością początkową template (pojedynczy bajt).

8 Pamięć wspólna int memCdel (int memid, int offset) funkcja odpowiedzialna za usunięcie obszaru pamięci wspólnej. Działa na podobnej zasadzie jak shmdt() i shmctl() w systemach Unix. Przed usunięciem pamięci należy sprawdzić, czy semafor powiązany z danym segmentem pozwala na jego usunięcie. W przypadku niemożliwości skasowania segmentu należy zaznaczyć, że segment ma być usunięty z pamięci, gdy przestanie być używany. Usunięcie segmentu powinno dopiero wtedy, gdy wszystkie zadania odłączą go od swoich przestrzeni adresowych. Po skasowaniu segmentu należy również zniszczyć powiązany z nim semafor mutex.

9 Pamięć wspólna void * memCst (int memid) funkcja mająca charakter statystyczny, pozwalająca uzyskać informację o stanie i obciążeniu pamięci danego segmentu pamięci. Wstępnie założono, że funkcja biedzie zwracać tablice, zawierającą informacje o ilości zajętej pamięci w segmencie, ilości zadań które korzystały z segmentu, oraz ilości zadań oczekujących. Te informacje mogą być zapisywane np. poprzez rozbudowanie struktury semafora

10 Pamięć wspólna void * memCallst(int type) funkcja sumująca statystyki dla wszystkich segmentów pamięci, podająca średnie wartości dla całego systemu. Możliwy jest wybór pamięci podstawowej, lub rozszerzonej.


Pobierz ppt "Pamięć wspólna Opis własnego rozwiązania Marcin Kamiński, Michał Kotra Wydział EAIiE Katedra Automatyki Kraków, 2008."

Podobne prezentacje


Reklamy Google