Najgorsze co moze sie zdarzyc, to za krotki time-to-market. Bylem swiadkiem rozmowy w pewnej firmie (nie powiem jakiej), gdzie bylem zaproszony jako konsultant do rozwiazania pewnego problemu. Prezes-idiota powiedzial (po uslyszeniu, ze software wymaga jeszcze testowania) ze trzeba wstawic WD i juz. Co najsmieszniejsze tak sie uparl, ze produkt z blednym softem poszedl do sprzedazy ;-)) Potem firma stracila duzo... oj duzo... ;-))
Didn't find your answer? Ask the community — no account required.
Z
Zbych
Greg przemówił ludzkim głosem:
Najkrócej mowiąc semafor binarny :-)
A
A.Grodecki
Użytkownik Greg napisał:
Co to znaczy nieczyste zagranie? Element, choćby i procesor, ma być tak uzyty aby nie przekraczać parametrów granicznych. A czy używamy różnych wybiegów, stosując normalnie rozwiązania przeznaczone W ZASADZIE do czego innego, to już sprawa projektanta. Byle działało i działało dobrze. Microchip np wydaje takie małe książeczki z serii "Tips and Tricks" w których sa opisane różne metody nietypowego wykorzystania "typowych" peryferiów albo uzyskania zaskakujących możliwości tych peryferiów. Np jak zrobić wzmacniacz operacyjny z wewnetrznego komparatora.
Domyslam sie ze procek nie musi caly
Zależy.
Jak napisałem - to szczególny przypadek. Co do "prostych" i "skomplikowanych" programów - zazwyczaj prosty program kosztuje mnie dużo więcej wysiłku. W zasobnych procesorach zrobienie czegokolwiek nie stanowi problemu. Są szybkie, mają zasoby, duże pamięci. Nawet pisać w C i nie martwic się, że kod jest "odległy od optymalnego" i że zabraknie pamięci. Ale zrobienie czegoś trudnego real time na małym procesorze, gdzie wszystko jest ograniczone, a czasem potrzebnych rzeczy nie ma, i z szacunków wynika że się nie powinno udać
- to jest dopiero wyzwanie :) Ja robię urządzenia, które gdyby się inicjalizowały 300ms, wiele osób straciłoby zdrowie lub nawet życie przebywając w ich pobliżu :) A największy jaki napisałem przekracza 32k słów. Wszystko w pięknym języku assemblera oczywiście :)
Bo to jest nieogólnikowe dopiero w konkretnym przypadku.
A
A.Grodecki
Użytkownik jerry1111 napisał:
Ja kiedyś napisałem na zlecenie program, który zgodnie z umową miał być przetestowany na hardware przez zamawiającego (było to przed epoką ICSP i sprzętowych debuggerów). Ale nikomu się tam OCZYWIŚCIE nie chciało, sprawdzili po łebkach, jeszcze mniej niż ja sam, i od razu zaprogramowali 500 procesorów OTP i nawet zdążyli je wlutować. A ceny tych rzeczy były wtedy relatywnie wielokrotnością obecnych... Potem się okazało, że program ma błąd numeryczny ujawniający się w pewnym szczególnym przypadku... Musieli kombinowac jak to sprzedać, żeby błąd nie wyszedł u klienta za szybko...
A
A.Grodecki
Użytkownik Zbych napisał:
Elokwencja podstawą projektu ;) To dobrze, że wiem jak to się nazywa, bo oczywiście bez tej wiedzy nijak się nie da użyć... :)
G
Greg
A skad sie taka nazwa wziela. Ze to niby "mutacja exportowa" Przy okazji niech moze mi kto powie skad nazwa imbus sie wziela uzywalem klucze heksagonalne (w Polsce w latach 70-tych) jak jeszcze niektorzy z grupowiczow sikali w pieluszki i uzywam tego dalej i dopiero niedawno dowiedzilem sie ze w Polsce sie tak na to mowi, bo w Ameryce to sie to nazywa klucz Allena.
G
Greg
Byla taka epoka ? Odkad istnieja mikroprocesory o chyba niedlugo potem zaistnialy ICE (In Circuit Emulator). Do microcontrolerow zdaje sie od samego poczatku producenci proponowali takie rzeczy. Nie bylo to tanie wiec moze niektorzy probowali dlubac bez tego. We wczesnych latach 80 uzywalem takowych osobiscie.
Z
Zbych
Greg przemówił ludzkim głosem:
mutex to skrót od mutual exclusion.
A
A.Grodecki
Użytkownik Greg napisał:
Powinienem napisać "ogólnodostępnych" :) Kilka tysięcy złotych to były wtedy bardzo konkretne pieniądze.
S
Sebastian Bialy
Nazwe już koledzy wyjaśnili a praktyka jest taka:
a) Mutex - do ochorny zasobu krytycznego - tylko jeden proces może zająć mutex, pozostałe muszą albo się zawiesić w oczekiwaniu na zwolnienie blokady, albo zapytać za chwile.
Operacja "sprawdz czy wolny i jesli wolny to zablokuj" musi być atomowa. Zdaje mi się ze niektóre CPU mają nawet do tego specjalne instrukcji "check and write". Jak nie mają to nalezy blokowac przerwania (a nawet równoległośc, jesli taka jest).
Przykład: dwa procesy chcą zapisac rejestr dwubajtowy. Wtedy dorzuca się mutex kontrolujący ten proces. Zapewnie on, że operacja pomiędzy blokadą mutexu i zwolnieniem będzie atomowa.
b) Semafor - do podziału zadań miedzy wiele wątków wykonawczych. Semafor można podnieć np. 4 razy i w ten sposób obudzić 4 watki do wykonania zadań.
Przykład: N procesorów równoległych oczekuje na zadania do wykonania od procesora głównego. Albo wątków czy procesów.
Twoja koncepcja flagi binarnej jest z definicji atomowa. Bliżej jej jednak do mutexu niż semafora. Ale nie jest ani jednym ani drugim, bo obydwa mechanizmy sa silnie wspierane przez system operacyjny (który zawiesza wątek podczas czekania na semafor). A u Ciebie "wątki" aktywnie oczekują na jej zmianę.
IMHO sporadyczne sa sytuacje, kiedy semafor albo mutex da się zrobić bez zawieszania przerwań. A już raczej nie na AVR.
T
Tom
Niekoniecznie, niektorzy (a moze wszyscy?) producenci przewidzieli taka sytuacje i mozna zatrzymywac program z aktywnym WD.
Tomek
A
A.Grodecki
Użytkownik Tom napisał:
To znaczy że jest sposób na zawieszenie WD - do bani!
J
J.F.
A w dzisiejszych czasach to jeszcze bardziej skomplikowane, jak sie okaze ze procesorow kilka a pamiec cachowana.
Hm .. za moich czasow to ten "mutex" nazywal sie jednak semaforem.. Bo wlasnie semafor sluzy do blokowania wejscia do sekcji krytycznej. A w szczegolnym przypadku mozna faktycznie podniesc kilka razy i wpuscic kilka, ale nie wiecej, procesow. Do zwalniania watkow ... hm, za pozno zeby myslec, moze i sie tez nadaje ..
Przy czym realizacja semafora tez wymaga podobnych zabiegow.
Dokladnie. Najprosciej zawiesic przerwania na ten krotki moment.
J.
W
William
Wówczas i tak nie korzystają z cache tylko z pamięci systemowej. Tak ma na pewno Intel 386 i poźniejsze. Po to jest specjalny rozkaz, żeby nie mieć właśnie problemów z cache / wielowątkowością w rdzeniu itp.
S
Sebastian Bialy
Zerknij do unixowej biblioteki pthreads dostępnej również w windowsie. Jest to dośc dokładnie opisane. W ogólności mutex uniemożliwia dostęp więcej niż jednemu, a semafor pozwala "wpuścić po kolei" odpowiednią liczbę wątków.
Oczywiście mając mutex można zrobić semafor i odwrotnie, ale sa to na tyle różne podejścia do sprawy, że zdecydowano się na osobne funkcje.
J
jerry1111
Ciekawe jacy? Daj przyklad, bo mi sie nic nie kojarzy.
A bo to mniej wiecej tak, jak z zasilaniem WD z zegara tego samego co procek.
J
J.F.
A bylo tak od razu.
W takiej ogolnej postaci [kto to wymyslil - Dijkstra ?] to semafor jak najbardziej nadaje sie do do wpuszczania _jednego_ procesu. Kwestia tylko wartosci poczatkowej. Zreszta od tego nazwa pochodzi - wpuszczanie pociagow na _jeden_ tor.
Moze wpuszczac i kilka, w implementacji Dijkstry [?] roznica praktycznie zadna. Czy kiedykolwiek byla wykorzystywana praktycznie .. dobre pytanie. Po przemysleniu - nie bardzo widze zastosowania do zwalniania procesow, np obslugujacych costam, tak jak to sugerowales.
W Unixie semafory [systemowe] sa:
-bardzo rozbudowane, czesto niepotrzebnie
-generalnie: na poziomie _procesow_ a nie watkow.
Dla watkow trzeba bylo wymyslec cos innego.
J.
S
Sebastian Bialy
Ależ ja stosuje to wyjątkowo powszechnie :) Prosty przykład:
Strona główna wyszukiwarki. Wpisujesz hasło i główny wątek wyszukiwarki podnosi semafor [*] o jeden. Jeden z 1000 wolnych wątków wyszukujących który właśnie stoi w kolejce zostaje obudzony i zabiera się za szukanie. Pozostałem wątki z tych 1000 są albo w stanie szukania, albo w stanie czekania na zlecenie.
Masz relację jeden nadzorca tysiąc robotników i jedno biurko.
Bardzo fajne, jesli masz maszynke wieloprocesorową/wielordzeniową.
Nie wiem jak można by to zrezliwoać zgrabnie na jednym mutexie.
4 funkcje raptem może :)
Ojoj, nie tak szybko. Poczytaj o semaforach w Linuxie, pojęcie proces a wątek _mocno_ się im rozmyło.
Dlaczego dla wątków coś innego ? Wszak własnie to wątek ma możliwość w grzebaniu w pamięci sasiada i przez to możliwość używania semaforów. W przypadku prcesu to jest zasadniczo utrudnione ze względu na brak wspólnej pamięci (acz zalezy od implementacji, np. na Amidze procesy nie miały oddzielonej pamięci ...).
[*] Może też opuszczać, zależy od szkoły ...
A
A.Grodecki
Użytkownik jerry1111 napisał:
Nie mam tego problemu, w PIC wd mają własne oscylatory.
J
J.F.
Tylko ze:
- nie przekazuje to danych do watkow/procesow,
- przyjdzie przerwanie zaraz po podniesieniu semafora - watki sie pogryza przy dostepie do danych przekazanych innymi sposobami - trzeba to zabezpieczac dodatkowo.
- wpisujemy 1001 haslo, operacja podniesienia sie udala, glowny watek nic nie wie ze zaden proces nie wystartowal.
Naprawde - sa znacznie lepiej nadajace sie do tego zadania mechanizmy.
_Przemyslalem_ ! :-)
Ale jaka mnogosc parametrow :-)
Owszem - watki maja swoje semafory, ale generalnie co U*X to inne podejscie do problemu watkow.
No i o to chodzi - czesto nie mozesz uzyc tego "miedzyprocesowego", bo ci zatrzyma proces wraz ze wszystkimi jego watkami i na tym sie skonczy.
J.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.