eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Przenośny, uproszczony filesystem
Ilość wypowiedzi w tym wątku: 58

  • 11. Data: 2021-02-07 22:53:31
    Temat: Re: Przenośny, uproszczony filesystem
    Od: "M.M." <m...@g...com>

    On Sunday, February 7, 2021 at 10:01:21 PM UTC+1, heby wrote:
    > On 07/02/2021 21:19, M.M. wrote:
    > > Nie pytałem ile chcesz mutexów. Nie wiem do czego tej wiedzy potrzebujesz. Jak
    tej
    > > wiedzy potrzebujesz do zaprojektowania procesora - to ja nie pomogę.
    > Nie projektuje procesora.

    To dlaczego nie odpowiesz na pytanie: do czego potrzebujesz wiedzę o takich
    szczegółach synchronizacji wątków?

    >
    > > Mutex
    > > koncepcyjnie to prosta sprawa
    >
    > Tu mutex powinien być na "fragment" filesystemu.

    Tu czyli gdzie i dlaczego na fragment filesystemu? Co rozumiesz przez filesystem?

    >Jestem prawie pewny, że
    > w normalnym fs takie "mutexy" są powiązane z kroniką co czyni jest
    > bardziej mechanizmem transakcyjnym niż prostym lockiem.

    Transakcje nie są prostym lockiem, aczkolwiek z poziomu użytkownika to proste
    wywołanie funkcji, np. w bazie danych komenda "begin" rozpoczyna transakcje.
    Transakcje umożliwiają naprawę tego co 'zaczęło' być modyfikowane.


    > > zliczanie ile wątków przeszło przez jakąś barierę. Ale jaką techniką trzeba
    napylić
    > > tranzystory
    > No wiec nie napylam tanzystorów.

    Dlaczego więc chcesz wiedzieć jak wewnętrznie działają mutexy?


    > >> Tak naprawdę, tam jest kilka innych zagadnień, których gotowce
    > >> prawodpodobnie nie rozwiązują: np. defragmentacja w tle i powiązany z
    > >> nim trim prawdziwego pliku.
    > > Jeśli dysponujemy dodatkowym miejsce to defragmentuje się łatwo: odczytuje
    > > się kolejne pliki z jednego systemu i zapisuje do drugiego.

    > To jest naiwny algorytm.
    Naiwne algorytmy mają swoje zalety.

    > Wszystkie fs majace defragmentacje - robią ją w
    > miejscu. Moe to zaprojektowc metodą garbage collectora z javy: stop the
    > world. Ale coś czuje że to znowu naiwny algorytm.

    GC zlicza odnośniki do alokowanych obiektów, gdy jest zero, to może zwolnić.
    Jaka jest optymalna struktura do takiego zliczania? Może jakieś drzewo
    zbalansowane i kolejka priorytetowa, a może naiwna liniowa tablica ma tak
    mały narzut że to właśnie ją się najbardziej opłaca stosować dla typowych
    aplikacji - nie wiem.

    Pozdrawiam



  • 12. Data: 2021-02-08 07:39:31
    Temat: Re: Przenośny, uproszczony filesystem
    Od: heby <h...@p...onet.pl>

    On 07/02/2021 22:53, M.M. wrote:
    > To dlaczego nie odpowiesz na pytanie: do czego potrzebujesz wiedzę o takich
    > szczegółach synchronizacji wątków?

    Ponieważ mutex w pamięci, dostarczany przez OS niekoniecznie jest tym
    samym co "mutex" na plik (lock) zapewniajacy spójnośc dnych podczas
    wielodostępu i defragmentacji w tle. Wymaga ręcznej implementacji, być
    moze opartej o mutexy OSowe, a może niekoniecznie, a może w ogóle są
    rozwiązania bez mutexa.

    >>> koncepcyjnie to prosta sprawa
    >> Tu mutex powinien być na "fragment" filesystemu.
    > Tu czyli gdzie i dlaczego na fragment filesystemu? Co rozumiesz przez filesystem?

    Na przykład na wirtualny plik w tym kontenerze.

    Wyobraź sobie dwa wątki: jeden dopisuje coś do wirtualnego pliku, a
    drugi kasuje go.

    Można to rozwiązać za pomocą inodes, jak w linuxie. Albo za pomocą
    mutexów "w filesystemie".

    Oczywiście te "mutexy w filesystemie" to naiwny koncept. To mogą być
    zwykłe mutexy w implementacji filesystemu, ale raczej nie będą.

    > Transakcje nie są prostym lockiem

    Bo transakcja to kiepskie słowo. W zasadzie nie ma dobrego odpowiednika
    w DB zachowania filesystemu z kronikowaniem zapisywanego przez wiele wątków.

    >>> zliczanie ile wątków przeszło przez jakąś barierę. Ale jaką techniką trzeba
    napylić
    >>> tranzystory
    >> No wiec nie napylam tanzystorów.
    > Dlaczego więc chcesz wiedzieć jak wewnętrznie działają mutexy?

    Nigdzie nie napisałem że chce wiedzieć jak działają *normalne* mutexy,
    bo to wiem. Interesuje mnie jak działa zapewnianie spójności danych w fs
    które dla usera wygląda jak typowy zasób krytyczny pilnowany przez mutex.

    >> Wszystkie fs majace defragmentacje - robią ją w
    >> miejscu. Moe to zaprojektowc metodą garbage collectora z javy: stop the
    >> world. Ale coś czuje że to znowu naiwny algorytm.
    > GC zlicza odnośniki do alokowanych obiektów, gdy jest zero, to może zwolnić.

    Wiem, ale GC nie pojawił sie tutaj jako odpowiednik 1:1 tylko jao zły
    przykład "stop the world".

    > Jaka jest optymalna struktura do takiego zliczania? Może jakieś drzewo
    > zbalansowane i kolejka priorytetowa, a może naiwna liniowa tablica ma tak
    > mały narzut że to właśnie ją się najbardziej opłaca stosować dla typowych
    > aplikacji - nie wiem.

    Potrzebuje literatury z teorii działania systemów plików. Wygdybać mogę
    sobie cokolwiek, ale konkuruje z dziesięcioleciami eksperymentów ludzi
    mądrzejszych ode mnie.


  • 13. Data: 2021-02-08 11:08:30
    Temat: Re: Przenośny, uproszczony filesystem
    Od: "M.M." <m...@g...com>

    On Monday, February 8, 2021 at 7:39:33 AM UTC+1, heby wrote:
    > On 07/02/2021 22:53, M.M. wrote:
    > > To dlaczego nie odpowiesz na pytanie: do czego potrzebujesz wiedzę o takich
    > > szczegółach synchronizacji wątków?

    > Ponieważ mutex w pamięci, dostarczany przez OS niekoniecznie jest tym
    > samym co "mutex" na plik (lock) zapewniajacy spójnośc dnych podczas
    > wielodostępu i defragmentacji w tle. Wymaga ręcznej implementacji, być
    > moze opartej o mutexy OSowe, a może niekoniecznie, a może w ogóle są
    > rozwiązania bez mutexa.

    Dane na których program pracuje to są dane, nie ma istotnego znaczenia
    czy są one zapisane w pamięci RAM, na dysku talerzowym, na dysku SSD,
    na płycie CD, DVD, itd. Podobnie dane naprawcze to dane naprawcze, jeśli
    są poprawne, to można dzieki nimi coś naprawić bez względu gdzie są
    zapisane. Jedyna istotna różnica jest taka, że jak padnie system, to
    też dochodzi do utraty danych w pamięci RAM i nie ma w niej nic do
    naprawiania. Dlatego w przypadku danych na pamięciach trwałych stosuje
    się nie tylko mutexy, ale jeszcze przechowuje się dane naprawcze, które
    (z tego co wiem zawsze) są w dzienniku zawierającym informacje o
    modyfikacjach.

    Mutex sam w sobie nic nie zapewnia, spójność danych uzyskuje się
    dzięki prawidłowmu użyciu mutexów i danych naprawczych.


    > >>> koncepcyjnie to prosta sprawa
    > >> Tu mutex powinien być na "fragment" filesystemu.
    > > Tu czyli gdzie i dlaczego na fragment filesystemu? Co rozumiesz przez filesystem?
    > Na przykład na wirtualny plik w tym kontenerze.
    >
    > Wyobraź sobie dwa wątki: jeden dopisuje coś do wirtualnego pliku, a
    > drugi kasuje go.

    To jeszcze nic nie oznacza, może programista tak chciał? Ale generalnie
    na tym właśnie polega problem: kilka wątków pracuje na tych samych
    danych, zakładają że dane mają określoną wartość. Gdy jeden wątek dane
    zmodyfikuje, to pozostałe już pracują na błędnym założeniu. Dlatego
    robi się to co napisałem: jeśli jeden wątek zapisuje dane, to może
    pracować tylko ten jeden wątek, ale do odczytu może być dowolnie wiele.


    > Można to rozwiązać za pomocą inodes, jak w linuxie. Albo za pomocą
    > mutexów "w filesystemie".
    >
    > Oczywiście te "mutexy w filesystemie" to naiwny koncept. To mogą być
    > zwykłe mutexy w implementacji filesystemu, ale raczej nie będą.
    >
    > > Transakcje nie są prostym lockiem
    >
    > Bo transakcja to kiepskie słowo. W zasadzie nie ma dobrego odpowiednika
    > w DB zachowania filesystemu z kronikowaniem zapisywanego przez wiele wątków.

    Też nie spotkałem się.


    > >>> zliczanie ile wątków przeszło przez jakąś barierę. Ale jaką techniką trzeba
    napylić
    > >>> tranzystory
    > >> No wiec nie napylam tanzystorów.
    > > Dlaczego więc chcesz wiedzieć jak wewnętrznie działają mutexy?
    > Nigdzie nie napisałem że chce wiedzieć jak działają *normalne* mutexy,
    > bo to wiem. Interesuje mnie jak działa zapewnianie spójności danych w fs
    > które dla usera wygląda jak typowy zasób krytyczny pilnowany przez mutex.

    Ale kto powiedział że jest takie zapewnienie? Jeśli dwa wątki zaczną
    czytać i pisać dane, to zepsują spójność danych w pliku, chyba że OS
    nie pozwoli otworzyć pliku do zapisu gdy jest może to spowodować
    utratę spójnośći. OS powinien zapewniać tylko spójność struktury
    przechowującej dane na dysku, a robi sie to tak samo jak zawsze: mutexy
    i/albo dane naprawcze.


    > >> Wszystkie fs majace defragmentacje - robią ją w
    > >> miejscu. Moe to zaprojektowc metodą garbage collectora z javy: stop the
    > >> world. Ale coś czuje że to znowu naiwny algorytm.
    > > GC zlicza odnośniki do alokowanych obiektów, gdy jest zero, to może zwolnić.

    > Wiem, ale GC nie pojawił sie tutaj jako odpowiednik 1:1 tylko jao zły
    > przykład "stop the world".

    Ok.

    > > Jaka jest optymalna struktura do takiego zliczania? Może jakieś drzewo
    > > zbalansowane i kolejka priorytetowa, a może naiwna liniowa tablica ma tak
    > > mały narzut że to właśnie ją się najbardziej opłaca stosować dla typowych
    > > aplikacji - nie wiem.


    > Potrzebuje literatury z teorii działania systemów plików. Wygdybać mogę
    > sobie cokolwiek, ale konkuruje z dziesięcioleciami eksperymentów ludzi
    > mądrzejszych ode mnie.

    Może jest coś wartościowego?
    https://www.google.com/search?channel=fs&client=ubun
    tu&q=systemy+plik%C3%B3w+literatura

    Pozdrawiam



  • 14. Data: 2021-02-08 12:12:26
    Temat: Re: Przenośny, uproszczony filesystem
    Od: heby <h...@p...onet.pl>

    On 08/02/2021 11:08, M.M. wrote:
    >> Wyobraź sobie dwa wątki: jeden dopisuje coś do wirtualnego pliku, a
    >> drugi kasuje go.
    > To jeszcze nic nie oznacza, może programista tak chciał?

    To dopuszczalna sytuacja. fs ma być na nia gotowy.

    > Ale generalnie
    > na tym właśnie polega problem: kilka wątków pracuje na tych samych
    > danych, zakładają że dane mają określoną wartość. Gdy jeden wątek dane
    > zmodyfikuje, to pozostałe już pracują na błędnym założeniu. Dlatego
    > robi się to co napisałem: jeśli jeden wątek zapisuje dane, to może
    > pracować tylko ten jeden wątek, ale do odczytu może być dowolnie wiele.

    Nieprawda. Jeśli jeden watek zapisuje jakas częśc pliku, inny może
    zapisuwać inną część tego samego pliku. DB często tak robią.

    Granulacja jest więc dokładniejsza niż 1 plik. Co oznacza w naiwnym
    podejściu bardzo dużo muteksów na każdy kawałek pliku lub skomplikowany
    mutex z emulacją submutexów.

    Przypuszcam że w ogóle sytuacja że zapisujemy ten sam kawałek pliku
    równolegle z dwóch wątków jest jak najbardziej dopuszczalna. Co najwyżej
    będzie race condition na dane, ale sam plik będzie dalej poprawny z
    punktu widzenia fs.

    >> bo to wiem. Interesuje mnie jak działa zapewnianie spójności danych w fs
    >> które dla usera wygląda jak typowy zasób krytyczny pilnowany przez mutex.
    > Ale kto powiedział że jest takie zapewnienie?

    W fs jest. Wątek A kasuje plik, wątek B czyta ten sam plik, wątek C
    właśnie go otwiera. I nie ma race conditions na poziomie fs, tam dane są
    spójne i stan jest atomowy.

    > Jeśli dwa wątki zaczną
    > czytać i pisać dane, to zepsują spójność danych w pliku, chyba że OS
    > nie pozwoli otworzyć pliku do zapisu gdy jest może to spowodować
    > utratę spójnośći.

    To tak nie działa. POnadto rozróznijmy: race condition w aplikacji to
    coś innego niż race condition w fs. W tym drugim przypadku masz taką
    sytuację setki razy na sekundę w swoim PC.

    >> Potrzebuje literatury z teorii działania systemów plików. Wygdybać mogę
    >> sobie cokolwiek, ale konkuruje z dziesięcioleciami eksperymentów ludzi
    >> mądrzejszych ode mnie.
    > Może jest coś wartościowego?
    > https://www.google.com/search?channel=fs&client=ubun
    tu&q=systemy+plik%C3%B3w+literatura

    Obawiam się czy aby nie jest tylko od strony użytkowej. Ogólnie
    obejrzałem spisy kilkunastu książek z tego tematu i jak na razie nie
    widzę nic o budowie wewnętrznej. Być może coś przeoczyłem.


  • 15. Data: 2021-02-08 14:24:56
    Temat: Re: Przenośny, uproszczony filesystem
    Od: "M.M." <m...@g...com>

    On Monday, February 8, 2021 at 12:12:29 PM UTC+1, heby wrote:
    > On 08/02/2021 11:08, M.M. wrote:
    > >> Wyobraź sobie dwa wątki: jeden dopisuje coś do wirtualnego pliku, a
    > >> drugi kasuje go.
    > > To jeszcze nic nie oznacza, może programista tak chciał?
    > To dopuszczalna sytuacja. fs ma być na nia gotowy.

    Trudno sie rozmawia, nie wiem co dla Ciebie znaczy że FS
    ma być gotowy. Skąd FS ma wiedzieć, czy to nie jest zaplanowane
    działanie programisty? Pracują np. dwa wątki. Jeden pisze do
    pliku, drugi kasuje plik. Jeśli jeden najpierw zapisze, a drugi
    skasuje - to pliku nie będzie. Jeśli najpierw skasuje, a
    potem dojdzie do próby zapisania, to też nie będzie pliku - fs
    zwróci po prostu błąd zapisu. Niezbyt eleganckie rozwiązanie
    ale zawsze zakończy się takim samym efektem. Chyba że gotowość
    dla Ciebie oznacza to, że w takiej sytuacji całkowicie się
    nie rozwali i nie dojdzie do utraty danych. To oczywiście że
    powinien być w tym sensie gotowy, bo dane często zbiera się
    długo i kosztownie, wiec trzeba bardzo dbać o dane.

    Można zrobić taki rozwiązanie, że jak jeden wątek chce plik do
    zapisu, to FS czeka aż wszystkie inne wątki zamkną plik. A jak
    już jakiś wątek ma plik otwarty do zapisu, to FS nie pozwoli
    otworzyć pliku w żadnym trybie. Ale to wyklucza całkiem bezpieczną
    sytuację, gdy N wątków pisze i czyta każdy do swojej SIZE/N
    części. Po co sobie odbierać takie możliwości i to dodatkowym
    nakładem pracy - ja nie wiem.


    > > Ale generalnie
    > > na tym właśnie polega problem: kilka wątków pracuje na tych samych
    > > danych, zakładają że dane mają określoną wartość. Gdy jeden wątek dane
    > > zmodyfikuje, to pozostałe już pracują na błędnym założeniu. Dlatego
    > > robi się to co napisałem: jeśli jeden wątek zapisuje dane, to może
    > > pracować tylko ten jeden wątek, ale do odczytu może być dowolnie wiele.

    > Nieprawda. Jeśli jeden watek zapisuje jakas częśc pliku, inny może
    > zapisuwać inną część tego samego pliku. DB często tak robią.

    Dlatego pisałem NA TYCH SAMYCH DANYCH, a INNE CZĘŚCI PLIKU to już
    nie są TE SAME DANE.

    > Granulacja jest więc dokładniejsza niż 1 plik. Co oznacza w naiwnym
    > podejściu bardzo dużo muteksów na każdy kawałek pliku lub skomplikowany
    > mutex z emulacją submutexów.

    Nie wiem... Dla mnie to brzmi trochę jak mieszanie rozwiązania szczegółowego z
    ogólnym. W szczegółowych zastosowaniach to programista wie które operacje
    powinny być atomowe i uzyskuje taki efekt poprzez synchronizację wątków.
    Jak ogólnie uzyskać taki efekt? System by musiał dawać dostęp do zapisu lub
    do odczytów poszczególnych zbiorów bitów. Użytkownik by musiał to zgłaszać
    do systemu. A takie zgłaszanie jest tożsame z synchronizacją przy pomocy
    mutexów...

    Są jeszcze transakcje, wszystkie wątki próbują czytać i pisać do wszystkiego, a
    system sprawdza czy transakcje nie kolidują ze sobą. Jeśli któryś wątek otrzyma
    od systemu informację o kolizji, to musi wznowić swoje działanie z uwzględnieniem
    tego, że ostatnia transakcja się nie udała - innymi słowy, aplikacja musi być
    przygotowana na możliwość nie powodzenia się transakcji. W minimalnej wersji
    chociaż musi się wywalić i użytkownik musi ją wznowić.

    > Przypuszcam że w ogóle sytuacja że zapisujemy ten sam kawałek pliku
    > równolegle z dwóch wątków jest jak najbardziej dopuszczalna. Co najwyżej
    > będzie race condition na dane, ale sam plik będzie dalej poprawny z
    > punktu widzenia fs.

    To brzmi sensownie! Jak programista nie zrobił poprawnie synchronizacji
    wątków to jego problem.

    > >> bo to wiem. Interesuje mnie jak działa zapewnianie spójności danych w fs
    > >> które dla usera wygląda jak typowy zasób krytyczny pilnowany przez mutex.
    > > Ale kto powiedział że jest takie zapewnienie?

    > W fs jest. Wątek A kasuje plik, wątek B czyta ten sam plik, wątek C
    > właśnie go otwiera. I nie ma race conditions na poziomie fs, tam dane są
    > spójne i stan jest atomowy.

    No tak, głupio byłoby, gdyby z powodu złej synchronizacji wątków rozleciał
    się system plików. A czy dane w plikach są poprawne/spójne czy nie - to już 
    zależy od poprawności aplikacji.


    > > Jeśli dwa wątki zaczną
    > > czytać i pisać dane, to zepsują spójność danych w pliku, chyba że OS
    > > nie pozwoli otworzyć pliku do zapisu gdy jest może to spowodować
    > > utratę spójnośći.
    > To tak nie działa. POnadto rozróznijmy: race condition w aplikacji to
    > coś innego niż race condition w fs. W tym drugim przypadku masz taką
    > sytuację setki razy na sekundę w swoim PC.
    > >> Potrzebuje literatury z teorii działania systemów plików. Wygdybać mogę
    > >> sobie cokolwiek, ale konkuruje z dziesięcioleciami eksperymentów ludzi
    > >> mądrzejszych ode mnie.
    > > Może jest coś wartościowego?
    > > https://www.google.com/search?channel=fs&client=ubun
    tu&q=systemy+plik%C3%B3w+literatura

    > Obawiam się czy aby nie jest tylko od strony użytkowej. Ogólnie
    > obejrzałem spisy kilkunastu książek z tego tematu i jak na razie nie
    > widzę nic o budowie wewnętrznej. Być może coś przeoczyłem.

    Nie wiem jaka jest budowa wewnętrzna, ale mi się mocno narzuca to
    co już pisałem: zwykła komórka pamięci do której w jednej chwili
    ma dostęp do jeden wątek.

    A budowa wewnętrzna dzienników to jest po prostu spis operacji i
    kopia danych które w razie usterki będzie trzeba odtworzyć.

    Pozdrawiam


  • 16. Data: 2021-02-08 14:57:12
    Temat: Re: Przenośny, uproszczony filesystem
    Od: heby <h...@p...onet.pl>

    On 08/02/2021 14:24, M.M. wrote:
    >> To dopuszczalna sytuacja. fs ma być na nia gotowy.
    > Trudno sie rozmawia, nie wiem co dla Ciebie znaczy że FS
    > ma być gotowy. Skąd FS ma wiedzieć, czy to nie jest zaplanowane
    > działanie programisty?

    Ma nie wiedzieć. Jedyne co od niego oczekuje to to że nie rozwali sobie
    wewnętrznych struktur kiedy dwa wątki będą starały się jednoczesnie
    powiekszyć długość pliku albo skasować go w tym samym momencie.

    > Pracują np. dwa wątki. Jeden pisze do
    > pliku, drugi kasuje plik. Jeśli jeden najpierw zapisze, a drugi
    > skasuje - to pliku nie będzie. Jeśli najpierw skasuje, a
    > potem dojdzie do próby zapisania, to też nie będzie pliku - fs
    > zwróci po prostu błąd zapisu.

    Super. Tego właśnie oczekuje. Ma się nie rozsypać. To że w danych jest
    sieczka, to problem aplikacji, nie fs.

    > Można zrobić taki rozwiązanie, że jak jeden wątek chce plik do
    > zapisu, to FS czeka aż wszystkie inne wątki zamkną plik.

    O nie.

    >> Nieprawda. Jeśli jeden watek zapisuje jakas częśc pliku, inny może
    >> zapisuwać inną część tego samego pliku. DB często tak robią.
    > Dlatego pisałem NA TYCH SAMYCH DANYCH, a INNE CZĘŚCI PLIKU to już
    > nie są TE SAME DANE.

    To żadna róznica. fs nie obchodzi co i gdzie zapisuje. Jeśli ktoś
    zapisuje te same dane pikoseundę później to nie jest problem fs.

    > Nie wiem... Dla mnie to brzmi trochę jak mieszanie rozwiązania szczegółowego z
    > ogólnym. W szczegółowych zastosowaniach to programista wie które operacje
    > powinny być atomowe i uzyskuje taki efekt poprzez synchronizację wątków.

    Nie rozmawiamy tutaj o kliencie tego fs. W nim ta wiedza istnieje.

    W fs nie ma żadnej wiedzy o atomowości operacji na plikach. Jedyne co
    wymagam od niego to fakt że "open" zadziała atomowo, "close" zadziała
    atomowo, "rm" itd. Ma pozwolić na 2x write jednocześnie w to samo
    miejsce i się nie rozlecieć.

    > A budowa wewnętrzna dzienników to jest po prostu spis operacji i
    > kopia danych które w razie usterki będzie trzeba odtworzyć.

    To zdecydownie nie wygląda tak prosto w kodzie ext4...


  • 17. Data: 2021-02-08 18:35:02
    Temat: Re: Przenośny, uproszczony filesystem
    Od: "M.M." <m...@g...com>

    On Monday, February 8, 2021 at 2:57:15 PM UTC+1, heby wrote:
    > On 08/02/2021 14:24, M.M. wrote:
    > >> To dopuszczalna sytuacja. fs ma być na nia gotowy.
    > > Trudno sie rozmawia, nie wiem co dla Ciebie znaczy że FS
    > > ma być gotowy. Skąd FS ma wiedzieć, czy to nie jest zaplanowane
    > > działanie programisty?

    > Ma nie wiedzieć. Jedyne co od niego oczekuje to to że nie rozwali sobie
    > wewnętrznych struktur kiedy dwa wątki będą starały się jednoczesnie
    > powiekszyć długość pliku albo skasować go w tym samym momencie.

    I chcesz żeby ktoś podpowiedział Ci rozwiązanie jak to wydajnie
    zrobić żebyś mógł konkurować z 50letnim doświadczeniem projektantów
    systemów plików ;-) To ja się nie odważę pomagać. Ale jakbyś 
    chciał pierwsze lepsze rozwiązanie, to bym się odważył podpowiedzieć,
    że można zrobić koleję zadań. Zadania do kolejki będą dodawawane
    przez aplikacje klienckie. Natomiast system plików z kolejki w N
    wątkach będzie pobierał zadania. Jednakże, jeśli jeden wątek
    otrzyma zadanie file_1, dotyczące pliku 'file' i w kolejce pojawi
    się zadanie file_2, dotyczące tego samego pliku 'file', to algorytm
    XYZ będzie musiał zdecydować, czy zadanie jest krytyczne dla bezpieczeństwa
    struktury danych, czy też nie. Jeśli nie, to będzie musiał czekać
    aż wątek obsługujący zadanie file_1 zakończy działanie i dopiero
    potem przydzielić zadanie file_2. Algorytm XYZ wymaga zastanowienia...
    W najprostszej wersji zapis do jednego pliku można robić równolegle,
    bo aplikacja kliencka powinna zadbać o to, aby zapisy były bezpieczne.
    Podobnie odczty można robić w wielu wątkach. Natomiast odczyt musi
    czekać aż wszystkie zapisy się zakończą. Zapis też musi czekać aż
    wszystkie odczyty się zakończą. Potem wyjątek, jeśli zapis i odczyt
    pochodzi z różnych procesów/wątków, to może być zrównoleglany, bo o to
    aplikacja kliencka już powinna zadbać. A zmiana rozmiaru plików...
    nie wiem... chyba powinna być traktowana jako zapis.

    Dodam, nie polegaj szczególnie na tym, wymyśliłem to w chwili
    pisania tego posta, nigdy nic nie czytałem o systemach plików.
    Poza tym to jest bardzo ogólnikowe, w praktyce dojdzie pierdylion
    szczegółów.



    > > Pracują np. dwa wątki. Jeden pisze do
    > > pliku, drugi kasuje plik. Jeśli jeden najpierw zapisze, a drugi
    > > skasuje - to pliku nie będzie. Jeśli najpierw skasuje, a
    > > potem dojdzie do próby zapisania, to też nie będzie pliku - fs
    > > zwróci po prostu błąd zapisu.

    > Super. Tego właśnie oczekuje. Ma się nie rozsypać. To że w danych jest
    > sieczka, to problem aplikacji, nie fs.

    Jeśli chesz to implementować pod konkretne zastosowanie, to może
    się też rozwalić FS, bo będziesz wiedział że dana kombinacja
    operacji nigdy nie nastąpi i w praktyce jednak się nie rozwali.

    > > Można zrobić taki rozwiązanie, że jak jeden wątek chce plik do
    > > zapisu, to FS czeka aż wszystkie inne wątki zamkną plik.

    > O nie.

    Przydatność zależy od konkretnego zastosowania.



    > >> Nieprawda. Jeśli jeden watek zapisuje jakas częśc pliku, inny może
    > >> zapisuwać inną część tego samego pliku. DB często tak robią.
    > > Dlatego pisałem NA TYCH SAMYCH DANYCH, a INNE CZĘŚCI PLIKU to już
    > > nie są TE SAME DANE.
    > To żadna róznica. fs nie obchodzi co i gdzie zapisuje. Jeśli ktoś
    > zapisuje te same dane pikoseundę później to nie jest problem fs.
    > > Nie wiem... Dla mnie to brzmi trochę jak mieszanie rozwiązania szczegółowego z
    > > ogólnym. W szczegółowych zastosowaniach to programista wie które operacje
    > > powinny być atomowe i uzyskuje taki efekt poprzez synchronizację wątków.
    > Nie rozmawiamy tutaj o kliencie tego fs. W nim ta wiedza istnieje.

    Zaczęliśmy rozmowę od tego, że głupio gdy aplikacja zapisuje dane w
    katalogu a nie w pliku, więc zahaczaliśmy też mocno o klienta.



    > W fs nie ma żadnej wiedzy o atomowości operacji na plikach.

    Ale Ty chcesz pisać swój, bardzo specyficzny, zoptymalizowany
    pod konkretną aplikację - tak zrozumiałem.


    > Jedyne co
    > wymagam od niego to fakt że "open" zadziała atomowo, "close" zadziała
    > atomowo, "rm" itd. Ma pozwolić na 2x write jednocześnie w to samo
    > miejsce i się nie rozlecieć.

    To w pierwszym akapicie tego posta dałem zarys synchronizacji, a
    chyba w pierwszym poscie zaproponowałem strukturę danych (tam
    gdzie byłą lista list, nagłówek pliku, nagłówki miejsca pustego,
    zajętego, itd.) Nic bardziej szczegółowego w trakcie luźnej
    rozmowy nie podpowiem.


    > > A budowa wewnętrzna dzienników to jest po prostu spis operacji i
    > > kopia danych które w razie usterki będzie trzeba odtworzyć.

    > To zdecydownie nie wygląda tak prosto w kodzie ext4...

    Bo, jak się domyślam, są mocno zoptymalizowane i mają pierdylion
    opcji dobieranych w (auto)tuningu i mogą się dostosować do
    wielu urządzeń.


    Pozdrawiam




  • 18. Data: 2021-02-08 18:41:44
    Temat: Re: Przenośny, uproszczony filesystem
    Od: heby <h...@p...onet.pl>

    On 08/02/2021 18:35, M.M. wrote:
    > I chcesz żeby ktoś podpowiedział Ci rozwiązanie

    Nie, aby wskazał gdzie szukać. Wydaje mi się że wiele lat temu migneła
    mi ksiązka w tym temacie, anglojezyczna. Nie pamietam tytułu, opisywała
    na pewno FAT i jeszcze coś, pod kątem detali implementacji. Miałem w
    ręku i tyle ją widziałem.

    >> W fs nie ma żadnej wiedzy o atomowości operacji na plikach.
    > Ale Ty chcesz pisać swój, bardzo specyficzny, zoptymalizowany
    > pod konkretną aplikację - tak zrozumiałem.

    To że coś jest embedowalne, nie oznacza że nie ma być abstrakcyjne. Ma
    być. FS ma nie mieć wiedzy o sposobie uzycia, ma byc odporny na dziwne
    uzycie.


  • 19. Data: 2021-02-08 19:47:46
    Temat: Re: Przenośny, uproszczony filesystem
    Od: "M.M." <m...@g...com>

    On Monday, February 8, 2021 at 6:41:48 PM UTC+1, heby wrote:
    > On 08/02/2021 18:35, M.M. wrote:
    > > I chcesz żeby ktoś podpowiedział Ci rozwiązanie
    > Nie, aby wskazał gdzie szukać. Wydaje mi się że wiele lat temu migneła
    > mi ksiązka w tym temacie, anglojezyczna. Nie pamietam tytułu, opisywała
    > na pewno FAT i jeszcze coś, pod kątem detali implementacji. Miałem w
    > ręku i tyle ją widziałem.
    > >> W fs nie ma żadnej wiedzy o atomowości operacji na plikach.
    > > Ale Ty chcesz pisać swój, bardzo specyficzny, zoptymalizowany
    > > pod konkretną aplikację - tak zrozumiałem.
    > To że coś jest embedowalne, nie oznacza że nie ma być abstrakcyjne. Ma
    > być. FS ma nie mieć wiedzy o sposobie uzycia, ma byc odporny na dziwne
    > uzycie.

    Gdzie szukać - nie wiem. To co mi zdrowy rozsądek podpowiedział w przeciągu
    kilku postów i 30 minut zastanowienia - napisałem. Więcej pomóc nie potrafię,
    sam bym musiał poczytać, ale do czytania nie mam motywacji w świecie pełnym
    Sqlite, PostgreSQL, MongoDB, BDB, Redis i czego tam jeszcze; o gotowych systemach
    plików nie wspomniawszy.

    Ja może bym chciał poczytać książkę o optymalizacji powyższych baz danych z
    uwzględnieniem nowoczesnych dysków SSD na złączu M.2, dysków RAM, macierzy
    dyskowych i to wszystko w połączeniu z doborem rodzaju i parametrów systemu plików.

    Pozdrawiam


  • 20. Data: 2021-02-08 20:33:14
    Temat: Re: Przenośny, uproszczony filesystem
    Od: Piotr Chamera <p...@p...onet.pl>

    W dniu 2021-02-08 o 18:41, heby pisze:
    > On 08/02/2021 18:35, M.M. wrote:
    >> I chcesz żeby ktoś podpowiedział Ci rozwiązanie
    >
    > Nie, aby wskazał gdzie szukać. Wydaje mi się że wiele lat temu migneła
    > mi ksiązka w tym temacie, anglojezyczna. Nie pamietam tytułu, opisywała
    > na pewno FAT i jeszcze coś, pod kątem detali implementacji. Miałem w
    > ręku i tyle ją widziałem.

    Trochę stara, ale może ta byłaby odpowiednia:
    Dominic Giampaolo ,,Practical File System Design", Morgan Kaufmann 1999
    Autor omawia system plików BFS z BeOS.
    Do znalezienia w necie, Google wyrzuca pdf-a jako pierwszy wynik w
    wyszukiwaniu...

    Poza tym można szukać w książkach o systemach operacyjnych, np.:

    Tanenbaum, Woodhull ,,Operating Systems Design and Implementation", 3rd
    ed, to jest o implementacji systemu MINIX, jest ponad 100 stron o
    systemie plików + kod źródłowy.

    Tannenbaum ,,Modern Operating Systems", jest 70 stron o systemach plików.

    Silberschatz ,,Operating System Concepts", 9th ed, 2012 jest ponad 150
    stron o ,,storage management", w tym podrozdział ,,file system
    implementation" 40 stron.

    Remzi, Arpaci-Dusseau ,,Operating Systems Three Easy Pieces", rozdział
    ,,persistence" ma ponad 150 stron.

    Ciekawe rzeczy można też znaleźć w książkach o implementacji baz danych,
    w końcu plik bazy danych ze zbiorem rekordów i indeksem nie różni się w
    swojej istocie zbytnio od systemu plików.

    Są też z wydawnictwa O'Reilly (widziałem tylko tytuły, nie przeglądałem):
    Rajeev Nagar ,,Windows NT File System Internals: A Developer's Guide"
    Stan Mitchell ,,Inside the Windows 95 file system"

strony : 1 . [ 2 ] . 3 ... 6


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: