Laboratorium, SO2 instrukcja 6

background image

Instrukcja do laboratorium Systemów Operacyjnych

(semestr drugi)

wiczenie szóste

Ć

Temat: Pami dzielona

ęć

Opracowanie:

mgr in . Arkadiusz Chrobot

ż

dr in . Grzegorz ukawski

ż

Ł

background image

Wprowadzenie

1. Pami dzielona

ęć

Pamięć dzielona (ang. shared memory), nazywana również w literaturze polskiej

pami ci

ę ą wspólną lub pami ci

ę ą wspó dzielon ,

ł

ą

s u y

ł ż

do szybkiej komunikacji

mi dzy

ę

procesami. Szybkość zyskiwana jest dzi ki

ę

ograniczeniu do minimum roli

j dra

ą

w obs udze

ł

wymiany danych, co pozwala zaoszcz dzi

ę

ć czas zwi zany

ą

z prze czaniem

łą

kontekstu. Zasada dzia ania

ł

tego rodka

ś

komunikacji opiera się na

pomy le

ś

wspó dzielenia

ł

przez procesy pewnego obszaru pami ci

ę

w przestrzeni adre-

sowej u ytkownika.

ż

Zwykle przestrzenie adresowe procesów są dok adnie

ł

od-

separowane, tak aby procesy nie mog y

ł

wzajemnie uszkodzić się nadpisuj c

ą sobie

dane lub kod. Dzi ki

ę

odpowiednim wywo aniom

ł

systemowym procesy u ytkownika

ż

mogą za

da

żą

ć przydzielenia im przez j dro

ą

fragmentu pami ci,

ę

który b d

ę ą mog y

ł

wspó dzieli .

ł

ć W takim przypadku system nie kontroluje operacji, które są wykony-

wane w tej pami ci,

ę

a dba jedynie aby aden

ż

z komunikuj cych

ą

się procesów nie

próbował odczytywać lub zapisywać pami ci

ę

le

cej

żą

poza wyznaczonym obszarem.

Zaletą takiego rozwi zania

ą

jest szybkość dzia ania

ł

i atwo

ł

ść obs ugi

ł

(procesy mogą

korzystać z tej pami ci

ę

w taki sam sposób jak z pami ci

ę

która jest im przydzielana

przez funkcję malloc()), natomiast wadą jest brak synchronizacji komunikacji,

o któr musi zadba programista aplikacji.

ą

ć

2. Funkcje i struktury danych



funkcja shmget() - funkcja ta zwraca identyfikator pami ci

ę

dzielonej zwi zanej

ą

z warto ci

ś ą klucza, który mo e

ż być wygenerowany przez funkcję ftok(). Je li

ś

obszar pami ci

ę

dzielonej istniał to zwracany jest tylko jego identyfikator,

w przeciwnym

razie

najpierw

jest

tworzony

obszar

pami ci

ę

dzielonej

o rozmiarze podanym w wywo aniu

ł

funkcji

1

, a dopiero potem zwracany jest

jego identyfikator. Funkcja ta pobiera również flagi zwi zane

ą

z prawami

dost pu

ę

do pami ci

ę

dzielonej oraz ze sposobem jej tworzenia i obs ugi.

ł

Szczegó y: man shmget.

ł



funkcja shmat() - funkcja ta przy cza

łą

obszar pami ci

ę

dzielonej okre lony

ś

po-

przez podany jej w argumentach identyfikator do przestrzeni adresowej proce-

su, który ją wywo a .

ł ł Jako drugi argument jest pobierany przez tę funkcję ad-

res pocz tkowy

ą

od którego ma być do czona

łą

pamięć dzielona. Je li

ś jest on rów-

1 Dok adniej:

ł

o podanym w argumencie wywo ania

ł

rozmiarze zaokr glonym

ą

do wielokrotno ci

ś

rozmiaru strony.

2

background image

ny NULL, to system wybierze dowolny nieu ywany

ż

adres, natomiast, je li

ś

ma

on okre lon

ś

ą inną warto ,

ść

a argument okre laj cy

ś

ą

flagi ma wartość

SHM_RND, to adres pod który b dzie

ę

przy czona

łą

pamięć dzielona równy

b dzie

ę

adresowi podanemu w argumencie wywo ania

ł

zaokr glonemu

ą

w dół do

wielokrotno ci

ś

warto ci

ś

sta ej

ł

SHMLBA (obecnie ta sta a

ł

jest równa sta ej

ł

PAGE_SIZE, czyli w przypadku architektur Intela 4K). Oprócz opisanej powy-

ej

ż

warto ci

ś

argument flag mo e

ż

również przyjąć wartość SHM_RDONLY,

która oznacza,

e

ż

przy czony

łą

obszar pami ci

ę

dzielonej b dzie

ę

przeznaczony

tylko do czytania. Je li

ś

wywo anie

ł

funkcji się powiedzie to zwróci ona adres

pod którym b dzie

ę

do czona

łą

pamięć dzielona, w przeciwnym przypadku

zwróci warto -1. Szczegó y: man shmat.

ść

ł



funkcja shmdt() - funkcja ta od cza

łą

obszar pami ci

ę

dzielonej o podanym w ar-

gumencie adresie od przestrzeni adresowej procesu, który ją wywo a .

ł ł Je li

ś wy-

wo anie

ł

zako czy

ń

się sukcesem zwracane jest zero, w przeciwnym przypadku

-1. Szczegó y: man shmdt.

ł



funkcja shmctl() - funkcja zarz dzaj ca

ą

ą

pami ci

ę ą dzielon .

ą Obszar pami ci

ę

dzielonej na którym ma zostać wykonana operacja jest okre lony

ś

poprzez iden-

tyfikator podany w argumencie wywo ania

ł

funkcji. Drugim argumentem jest

rodzaj operacji: IPC_STAT pozwala na uzyskanie informacji o podanym ob-

szarze, IPC_SET pozwala zmodyfikować niektóre cechy zwi zane

ą

z danym ob-

szarem pami ci

ę

dzielonej, a IPC_RMID powoduje usuni cie

ę

podanego obszaru

pami ci

ę

dzielonej. Pozosta e

ł operacje albo są dost pne

ę

z poziomu u ytkownika

ż

uprzywilejowanego (SHM_LOCK i SHM_UNLOCK), albo mogą zostać w przy-

sz o ci

ł ś

zmodyfikowane lub usuni cie

ę

(SHM_STAT, SHM_INFO, IPC_INFO).

Szczegó y: man shmctl.

ł

Zadania

1. Zademonstruj u ycie przez program prywatnego obszaru pami ci dzielonej.

ż

ę

2. Stwórz obszar pami ci

ę

dzielonej, z którego b d

ę ą korzystać trzy procesy. Zorganizuj

dost p

ę do tej pami ci

ę

tak, aby procesy mia y

ł do niej dost p

ę w ci le

ś ś

okre lonej

ś

kolej-

no ci. Postaraj si nie u ywa semaforów.

ś

ę

ż

ć

3. Pokaż rozwi zanie

ą

problemu czytelników i pisarzy na przyk adzie

ł

operacji zapisu

i odczytu do pami ci

ę

dzielonej. Uwzgl dnij

ę

obydwa warianty problemu: czekaj cy

ą

pisarze i czekaj cy

ą

czytelnicy. Do synchronizacji komunikacji u yj

ż

semaforów. Do

wypisywania na ekran komunikatów zamiast funkcji printf() u yj

ż

funkcji write()

3

background image

(man 2 write).

4. Napisz dwa programy, które b d

ę ą komunikować się poprzez pamięć dzielon .

ą

W trakcie

dzia ania

ł

programów

(np.

po

dwóch

wys anych

ł

i

odebranych

komunikatach) niech program b d cy

ę ą

w a cicielem

ł ś

pami ci

ę

zamieni jej prawa do-

st pu, tak, aby tylko on móg z niej korzysta . Poka co si wtedy stanie.

ę

ł

ć

ż

ę

5. Zademonstruj dzia anie flagi SHM_RDONLY.

ł

6. Stwórz trzy procesy, które b d

ę ą wymienia y

ł mi dzy

ę

sobą dane poprzez dwa obszary

pami ci

ę

dzielonej (np. niech proces drugi po redniczy

ś

w wymianie danych pomi dzy

ę

pierwszym i drugim obszarem pami ci dzielonej).

ę

7. U yj

ż

flagi IPC_STAT dla funkcji shmctl() celem uzyskania informacji na temat u y

ż -

wanego przez proces obszaru pami ci dzielonej.

ę

Uwaga: We wszystkich programach po zako czeniu

ń

ich dzia ania

ł

wszystkie obszary

pami ci

ę

dzielonej muszą być usuni te.

ę

Je li

ś

program korzysta z innych zasobów

IPC, to one równie musz zosta usuni te.

ż

ą

ć

ę

4


Wyszukiwarka

Podobne podstrony:
Laboratorium SO2 instrukcja 1
Laboratorium SO2 instrukcja 2
Laboratorium SO2 instrukcja 9
Laboratorium, SO2 instrukcja 9
Laboratorium, SO2 instrukcja 7
Laboratorium, SO2 instrukcja 1
Laboratorium, SO2 instrukcja 8
Laboratorium SO2 instrukcja 4
Laboratorium SO2 instrukcja 10
so2-laboratorium SO2 instrukcja 7
so2-laboratorium SO2 instrukcja 8
Laboratorium SO2 instrukcja 3
Laboratorium, SO2 instrukcja 5
laboratorium zadanie 4 instrukcja
laboratorium zadanie 2 instrukcja
laboratorium zadanie 2 instrukcja
istan Laboratorium, BHP, Instrukcje-Stanowiskowe
sprawozdanie HP5 - OgarnijTemat.com, SiMR inżynierskie, Semestr 5, PNHiP, LABORATORIUM, SPRAWKA i IN

więcej podobnych podstron