526

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

AdamK napisał/a:

Fragmentacja pamięci&przestrzeni adresowej to to samo. Jest z tym problem w MiNTcie, zwłaszcza jak masz np. 14MB pamięci, no ale jak się nie chcesz przejmować to nie zmuszam. Tyle że ja jak miałem tyle pamięci to się tym przejmowałem i był to dla mnie problem.

Nie to że się nie przejmuję. Nie maiłem tego typu problemów. Możesz napisać coś więcej co robiłeś i jak to wszystko wyglądało? Bo ja nigdy nie miałem sytuacji, że 14mb mi się skończyło :)

Nie pisałem że zarządcy pamięci są niepotrzebni bez pamięci wirtualnej, ale robią się trochę niepraktyczni.

Sformułowałeś tak zdania, że można było coś takiego wywnioskować.

Na koniec jeszcze dodam, że aplikacyjni zarządcy pamięci pod MiNTem robią się jeszcze mniej praktyczni, bo MiNT ma specjalne mechanizmy przeciwdziałania fragmentacji pamięci.

Nie ufam systemom operacyjnym, a mintowi to już w ogóle. Jakie to są mechanizmy i jak to działa?

527

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

Cześć,
Program jest już do ściągnięcia na mojej stronie WWW. :D

528

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

Adam Klobukowski napisał/a:

UPX jak każdy paker exe, najpierw alokuje pamięć na rozpakowanie, rozpakowuje, a potem ewentualnie zwalnia miejsce spakowanych danych. To zwiększa fragmentację.

Czyli tak jak inny program alokujący dealokujący pamięć. Więc z tego można wywnioskować jedynie, że każdy program użytkownika robiąc alokację/dealokację zwiększa fragmentację pamięci. I tak jest to prawda :), no chyba, że robi alokacje dobrze i korzysta z własnego managera.  Ale to nie oznacza, że upx czy inny paker jest zły, bo robi te same rzeczy co inne programy. Pozatym skąd wiesz, może ma jakiś własny manager pamięci, który minimalizuje fragmentację?

Adam Klobukowski napisał/a:

Managery pamięci bez pamięci wirtualnej nie mają większego sensu.
Jeśli nie masz pamięci wirtualnej, to alokując 'nadmiarowe' fragmenty pamięci, powodujesz że staje się ona niedostępna, mimo że wcale nie musisz jej wykorzystać.

Racja, ale po to to właśnie jest. Robisz alokację raz, albo w większych/równych blokach (w jednostkach kilku, kilkunastu bajtów w wielokrotności minimalnych minimalnych bloków w jakich pamięć jest przydzielana). Jak Ci się pamięć kończy to alokuje się następne bloki lub zwalnia. W razie potrzeby sam sobie tymi blokami wachlujesz, żeby zminimalizować dziury pomiędzy nimi (jak np. zwolnisz jeden blok w środku, to tak przykładowo piszę w dużym uproszczeniu).

Pozwolę sobie przytoczyć taką Wikipedię i cytat dotyczący fragmentacji zewnętrznej/wewnętrzej, który popiera moje twierdzenie (patrz zapis dot. memory poll):

Wikipedia napisał/a:

Fragmentacja zewnętrzna pojawia w trakcie działania aplikacji, gdy dochodzi do szeregu przydzielania i zwalniania bloków pamięci o różnej wielkości, skutkiem czego po pewnym czasie bloki wolne i zajęte są przemieszane.
.... ciach
systemy operacyjne przydzielają aplikacjom strony (np. w procesorach x86 strona ma rozmiar 4kB), zaś wewnętrznie aplikacje zwykle alokują pamięć w jednostkach kilku, kilkunastu bajtów (np. w bibliotece GNU libc to 8 lub 16 bajtów). Ponieważ przydzielana jest pamięć o rozmiarze zaokrąglonym w górę do wielokrotności rozmiaru bloku, toteż nadwyżka po pierwsze nie jest używana przez aplikację, po drugie zaś zarządca pamięci nie może jej oddać innej aplikacji. Pamięć taka jest marnowana - np. plik o rozmiarze 1 bajta w istocie zajmie cały klaster, czyli kilka kB - i te kilka kB minus 1 bajt pozostanie niewykorzystane, podobnie jeśli program zażąda od systemu operacyjnego przydzielenia 1 bajta, otrzyma całą stronę.

Fragmentacja zewnętrzna pojawia w trakcie działania aplikacji, gdy dochodzi do szeregu przydzielania i zwalniania bloków pamięci o różnej wielkości, skutkiem czego po pewnym czasie bloki wolne i zajęte są przemieszane.

Fragmentacja wewnętrzna jest czasami rozwiązywana na poziomie aplikacji poprzez zastosowanie specjalizowanych zarządców pamięci. Częstym rozwiązaniem są tzw. pule pamięci (ang. memory poll), które operują na blokach o rozmiarze ściśle wymaganym przez aplikację, co praktycznie eliminuje ten rodzaj fragmentacji.

Fragmentacja zewnętrzna w zarządzaniu pamięcią operacyjną może być wyeliminowana przez kompaktowanie pamięci, tj. przesuwanie zajętych bloków tak, żeby możliwie jak najwięcej wolnych bloków połączyło się w ciągłe obszary. Kompaktowanie jest możliwe tylko wtedy, gdy zarządca ma pełne informacje o pamięci i jej wykorzystaniu przez program - zwykle możliwe do zrealizowania w aplikacjach używających odśmiecania.

Adam Klobukowski napisał/a:

Jeśli masz pamięć wirtualną to możesz sobie alokować niemal do woli, bo i tak naprawdę w tym wypadku decyduje dopiero sam faktyczny akt dostępu do pamięci, a pofragmentowac możesz co najwyżej swoją przestrzeń adresową, a nie całego systemu.

Ale to wcale nie potwierdza tego, że menedżery są niepotrzebne do pamięci innej niż wirtualna. Przy zwykłej pamięci też mogę sobie alokować do woli, aż mi się nie skończy albo jak już będzie tak pofragmentowana, że nie będzie się dało nic zrobić. Czym się różni pofragmentowanie przestrzeni adresowej od zwykłej fragmentacji? Chyba przestrzeń adresowa też może się kiedyś skończyć?


Adam Klobukowski napisał/a:

Reset przy braku pamięci też nie jest taka oczywista, o wiele lepszym rozwiązaniem, praktykowanym przez wiele systemów jest OOM killer.

Przez wiele systemów masz na myśli linuxa? ;)

Niestety to jest oczywiste. Zdziwiłbyś się w ilu książkach o deweloperce na systemy o zamkniętej architekturze, reset urządzenia jest proponowany do usuwania tego typu problemów. Przy wczytywaniu leveli ci mogą robić soft reset 'z partyzanta', a użytkownik nawet tego nie wie. A dlaczego? Żeby sobie zaoszczędzić sobie problemów podczas działania aplikacji i pracować na 'odświeżonym systemie'. A stosowanie ww. memory poll to standard (konsole, PCty, windy, tostery, lodówki ;)).


Adam Klobukowski napisał/a:

Btw. Ile ma binarka GrafX2 po zestripowaniu?

Bez stripa 3,2mb, po zestripowaniu 2mb z hakiem, po upxie trochę mniej niż 900kb. Binarka np. Papyrusa ma np o ile dobrze pamiętam 5mb, po rozpakowaniu pewnie z 10mb.

I powiem tak, fragmentacji na MiNCie się nie boję, bo prędzej system mi zejdzie niż wystąpi brak pamięci z powodu fragmentacji ;).

529

(20 odpowiedzi, napisanych Software, Gry - 16/32bit)

wygląda nawet nieźle..

530

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

AdamK: musiałbyś mi przedstawić coś bardziej przekonującego, bo to co piszesz zupełnie do mnie nie przemawia. Nie przytaczasz żadnych konkretów. Pisanie "UPX jest zły pod MiNTem, bo tak jest i już" nie jest żadnym faktem. Lepiej byś napisał dlaczego? Bo się uruchamia i alokuje/dealokuje pamięć jak inne programy, które mogą być odpalane pod systemem? :)

Powiem tak własny manager pamięci jest zawsze lepszy niż malloc czy cokolwiek innego. Pamięć wirtualna itp. nie ma tutaj nic do rzeczy. Przez manager pamięci rozumiem tutaj, że alokujesz duży blok(i) pamięci raz(to minimalizuje trochę fragmentację) i sam zarządzasz tym co się wewnątrz tego bloku dzieje i masz własne mechanizmy do śledzenia co tam jest robione. Nie bez powodu nikt np. w we współczesnych grach nie polega tylko na systemie operacyjnym (biorąc pod uwagę, że są np. różne rodzaje pamięci: fizyczna, wirtualna, na karcie graficznej itp).  Na atari jest ST/TT ram i teraz jeszcze dochodzi pamięć na kartach graficznych PCI. IMHO bardziej cenne są zasoby systemowe tym bardziej taki manager pamięci jest potrzebny, więc nie zgodzę się, że manager pamięci jest potrzebny tylko jak jest pamięć wirtualna.  Nikt o zdrowych zmysłach nie polega w 100% na OS'ie i bibliotece standardowej C.
Pozatym tak jak pisałem, zawsze jest reset jak pamięć się skończy (reset jest często praktykowany np. na konsolach :)).

531

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

Cyprian napisał/a:

W okienku Zapis/Odczyt nie da się wyść poza katalog domowy GrafX2, brakuje tam opcji "<-PARENT DIRECTORY"

jaka jest zaleta UPXa i jak sie to ma do czasu uruchomienia aplikacji?

Tego buga poprawiłem w połowie, parent directory nie pojawia się pod tosem (pod mintem jest ok), bo podczas listowania katalogu nie jest wyświetlany katalog ".."(parent).  Więc muszę po prostu trochę to zmodyfikować tj. przeszukać listę i sprawdzić czy jest '..' na liście, jak nie ma to dodać. Obecnie dodaję parenta "na pałę" co skutkuje podwójnym parent directory pod mintem.
Odnośnie upx'a to wszystko jest rozpakowywane w locie i czas jest prawie niezauważalny. Edytor Papyrus był nim pakowany. Tak jak wspomniałem w poprzednim poście na binarkach gcc mam współczynnik pakowania ~49%.

BTW udało mi się skompilować wersję bez warstw, no i trudno powiedzieć czy to coś przyśpiesza. Pozatym malowanie z FX'ami jest na standardowym falconie trochę wolne, może by się dało przerzucić te funkcjonalności na dsp?

532

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

AdamK: mi to wygląda na jakieś zabobony ;). Bo co robi upx, pakuje binarkę (obecnie mam współczynnik 49%) i rozpakowuje ją w locie w czasie wykonania. Fragmentacja pamięci jest zawsze jak jest dużo alokacji/dealokacji pamięci i tego nie da się uniknąć (po to ludzie piszą własne managery pamięci).

533

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

reset -> najlepsza broń na fragmentację ;)...

534

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

AdamK: heheh, mintowi niewiele trzeba żeby się przewrócił. Tryb ochrony pamięci to fikcja. A fragmentacja fragmentacją, jest wszędzie, wątpię, żeby to była wina tylko upx'a :).
Czyli co? Mam rozumieć że mintem jest fragmentacja, a pod tosem już nie? Kto konkretnie to testował i z jaką wersją, że doszedł do takich wniosków?

535

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

adamK: co złego jest z upxem? O czymś nie wiem?

536

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

Zmieniłem początkową konfigurację (320x240, fullscreen rozdzielczość startowa), zmniejszyłem częstotliwość zczytywania kursora myszki, zmieniłem tryb update'u ekranu (nie kopiuje całego bufora ramki co vbl tylko najmniejszą ilość zmian, był na szczęście wbudowany mechanizm trzeba go było włączyć), wyłączyłem automatyczne backupy (chyba).  Udało mi się odpalić toto pod Hatari, pod Aranymem połowicznie, bo odpala mi się tylko w oknie i myszka nie funkcjonuje (wina pewnie SDL'a). 
GRAFX żre trochę pamięci, bo nie dość, że po każdej operacji robi dumpa ekranu to jeszcze robi kopie bezpieczeństwa(dwa rodzaje) w gifach i zrzuca je na dysk. Możliwe, że wersja dla F030 będzie jeszcze szybciej chodziła, jak wyłączę support dla warstw (na razie coś jest nie tak, bo linker mi coś krzyczy). Ale i tak dopiero fastram robi jakąś różnicę. Możliwe, że program pójdzie też na TT-ce, ale nie mam jak sprawdzić.. 
Warstwy są fajne do animacji. Np. animowane gify tj. ich poszczególne klatki są pakowane właśnie na warstwy. No i odchudziłem binarkę, miała 3mb, teraz ma ~800kb ;) (magia strip'a i upx'a).

Obecnie wczytuję/zapisuję poprawnie gify, bmp, png (tylko 256 kolorów). Grafx nie lubi formatów 24/32 bitowych, ale czemu tu się dziwić ztargetowany jest własnie na 256 kolorów. Jest jeszcze masa formatów do sprawdzenia. W większości są problemy przy zapisie/odczycie palet, bo wszyscy się przyzwyczaili do lityl endiana ;).
Myślę, że jak jeszcze naprawi się pliki neo i pi1 (sprawa odczytu/zapisu palet) to wypuszczę binarkę jako betę.

537

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

dobre wieści. Grafx2 2.2 jest już używalny na gołym f030. Burza to nie jest, ale jest zdecydowanie lepiej (nie ma slajdów). :) Pozostały jeszcze fixy zapisu/odczytu niektórych formatów (zapis GIF już naprawiony, został PI1). Niestety są nowe bugi związane z luą. :/

538

(46 odpowiedzi, napisanych Sprzęt - 16/32bit)

temat już był wielokrotnie maglowany we wszystkie strony. Rozpiska jest tutaj z tabelką ustawień M0/M1, tak jak napisał Piesiu.
http://pinouts.ru/Video/atari_falcon030 … nout.shtml
Domyślnie jest tryb TV (dwa piny M1/M0 na high), trzeba zrobić przełącznik, który połączy pin m0 lub m1 z GND. Jeżeli demo jest tylko rgb to pójdzie tylko w trybie rgb. Jak coś jest vga only to pójdzie tylko na vga. Czasami w demach można wybrać tryb rgb czy vga przy starcie (jak się źle wybierze to wiadomo, reset). Trzeba czytać pliki README :).
Oczywiście niektóre telewizory LCD mogą sobie nie radzić - mogą nie łapać wszystkich ustawień VIDELA (parametry vsync/hsync mogą być np dla danej zaprogramowanej rozdzielczości poza zakresem) i niektóre screeny mogą być rzeczywiście 'out of sync'. Tak też może być z niektórymi trybami vga.   

pzdr!

539

(8 odpowiedzi, napisanych Sprzęt - 16/32bit)

pc nie rozpozna partycji tosowych. z dyskami ide można zrobić partycję mieszaną tos/windows pod hd driverem, ale ten syquest/jaz jest na scsi, więc nie wiem czy jest taka opcja.
Gdybyś zrobił partycje fat32 i zmusił atarkę do odczytu takiej partycji to załatwiłoby to sprawę. Np. pod mintem jest możliwość odczytu dysków FAT32, pod magicem też powinno to być możliwe. Może też pomóc BigDOS:

Big-DOS is a freeware GEMDOS / ISO 9293 / MS-DOS filesystem that replaces the GEMDOS of TOS (not KAOS and not ASH-MagiC!). It works with up to 32 drives on Atari ST, STE, TT and Falcon. That means also MS-DOS partitions up to 2 Gbyte. (With the ACSI and IDE interface only 1 Mbyte hard disks can be accessed.)

Ograniczenie 1gb dotyczy rozmiaru partycji, ale to zalezy od wersji tosu. TOS 4.0> na pewno ma ograniczenie do 1gb, wcześniejsze mogą mieć większe ograniczenia.

pzdr!

540

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

Źródła są bardzo ukryte ;):
http://code.google.com/p/grafx2/wiki/Downloads?tm=2

Zastanawiam się nad wrzuceniem tych źródeł do jakiegoś SCM'a lub zmergować zmiany z repo gógielcode projektu.. Mogę podesłać źródła na priva... Ale potrzeba gcc i masy dodatkowych bibliotek, makefile'a też zhakowałem na potrzeby i obecnie wszystko mi się buduje z kroskompilatorem, ale teraz zbudowanie tego na atari nie powinno być problemem.

541

(42 odpowiedzi, napisanych Sprzęt - 16/32bit)

musisz zflashować tosa a potem doflashować stery ctpci.(są dwa archiwa)

542

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

no ja właśnie to zauważyłem :) zapis/odczyt u mnie na falconie, zapisuje też źle gify, pod windą tego nie ma i wygląda wszystko ok...

543

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

obecnie chodzi na zwykłym f030, tylko pracować się na tym nie da bo są slajdy. Jest opcja zbudowania wersji bez obsługi warstw  (podobno jest to polecane dla wolniejszych platform sprzętowych) i jakieś switche do zmian sposobu obsługi odświeżania ekranu. Nie bawiłem się tym jeszcze, testowanie tego może zająć trochę czasu.

Odnośnie formatów to obsługuje: tify/gify/bmp/jpeg/pi1/neo/pc1/bmp i jakieś inne kosmiczne..

544

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

good work będzie jak nie będzie bugów ;)

545

(69 odpowiedzi, napisanych Fabryka - 16/32bit)

Cześć,
Mały teaser. Na CT60 można pracować (na razie kompilowałem pod zwykłą motkę (m68k)). Są problemy z ładowaniem niektórych formatów (głównie z zapisem/odczytem palet), muszę to porawić zanim wypuszczę binarki. Działa pod MiNTem (bez ochrony pamięci)/TOSem.
Jak SDL będzie miał support radeona to będzie jeszcze lepiej śmigał.
Na gołym falconie wiadomo - slajdy, na CT60 można pracować. Szczegóły projektu/lista ficzerów: http://code.google.com/p/grafx2 Generalnie moja wersja obsługuje fonty ttf, warstwy, skrypty lua.

pzdr,
saulot

546

(20 odpowiedzi, napisanych Software, Gry - 16/32bit)

a nieprawda. zajrzyj sobie do specyfikacji :)... są milanowe wywołania xbiosowe i przystosowane do ctpci...

547

(20 odpowiedzi, napisanych Software, Gry - 16/32bit)

no to jest w atarowskim handlerze video, do tej warstwy odwołuje się SDL, w tej chwili wszystko jedzie na xbiosie. Chodzi o to, żeby SDL dostał listę dodatkowych trybów z radeona i żeby były one preferowane jeżeli już będą dostępne (czy jakoś tak)..

548

(20 odpowiedzi, napisanych Software, Gry - 16/32bit)

logika jest potrzebna, bo nie ma wykrycia karty, czyli sprawdzenia czy jest szyna pci czy jej nie ma, czy radek jest czy go nie ma, potem można ustawiać sobie vdi.
Jest funkcja do listowania videomodów, ale działa raczej średnio (się sypie) i nie ma trybów z alfą :/ tylko 00RRGGBB i normalnie się zirytowałem.
W tej chwili jest eksperymentalna obsługa milana, a te funkcje xbiosu są podobne (jest zmiana tylko jednej flagi w funkcji). Więc możnaby się pokusić o lekkie kopiuj-wklej. Spoko przepatrzyłem wszystko ;)....

549

(20 odpowiedzi, napisanych Software, Gry - 16/32bit)

na radeonie nie działa bo nie ma logiki do wykrywania rozdzielczości radeonowych do renderu w fullscreenie. Cudów nie ma.

550

(40 odpowiedzi, napisanych Sprzęt - 16/32bit)

w przejściówce hdd ide 2,5"->3,5" nic się nie odwraca. Kabel też nie wymaga żadnych modyfikacji.