Zastanawiam się, jak system operacyjny odczytuje/zapisuje na dysku twardym.
Chciałbym jako ćwiczenie wdrożyć prosty system plików bez katalogów, które mogą odczytywać i zapisywać pliki.
Od czego zacząć?
Czy C/C++ załatwi sprawę, czy też muszę zastosować bardziej niskopoziomowe podejście?
Czy to za dużo dla jednej osoby?Jak zaimplementować bardzo prosty system plików?
Odpowiedz
Spójrz na Bezpiecznik: http://fuse.sourceforge.net/
To pozwoli Ci napisać plików bez konieczności faktycznie napisać sterownik urządzenia. Stamtąd zacznę od jednego pliku. Zasadniczo utwórz plik o długości (na przykład) 100 MB, a następnie zapisz swoje procedury, aby odczytać i zapisać z tego pliku.
Gdy wyniki są zadowalające, można zajrzeć do pisania sterownika urządzenia i sprawić, by sterownik działał na dysku fizycznym.
Fajną rzeczą jest to, że możesz używać prawie dowolnego języka z FUSE, nie tylko C/C++.
Zgadzam się, że FUSE jest świetnym interfejsem na początek, ponieważ usuwa bardzo dużo szczegółów niskiego poziomu, ale może OP jest również zainteresowany tymi niskimi poziomami? – miku
@ The MYYN: Tak, ale muszę zacząć od czegoś. –
Zrozumiałem prosty system plików podczas korzystania z grubego systemu plików mikrokontrolera avr.
http://elm-chan.org/fsw/ff/00index_e.html
Weź spojrzenie na kod będzie dowiedzieć się jak działa tłuszczu.
moim zdaniem, FAT jest nieco skomplikowany –
@MarkYisri, który jest łatwiejszy? – Pacerier
@Pacerier Możesz stworzyć prosty system plików z pary 'structs'. Będzie mieć bardzo ograniczoną funkcjonalność, ale może wystarczyć w systemie wbudowanym. –
Do nauki pomysłów na system plików nie jest konieczne używanie dysku, jak sądzę. Po prostu utwórz tablicę 512 bajtowych tablic bajtowych. Wyobraź sobie, że to Twój Harddisk i zacznij trochę eksperymentować. Możesz również obejrzeć niektóre ze standardowych podręczników systemu operacyjnego, takich jak: http://codex.cs.yale.edu/avi/os-book/OS8/os8c/index.html
link w dół .............. – Pacerier
Odpowiedź na pierwsze pytanie jest taka, że oprócz Fuse, jak powiedział ci ktoś inny, możesz również użyć narzędzia Dokan, które działa tak samo w systemie Windows , a od tego jest tylko kwestia robienia Odczytów i Zapisów do fizycznej partycji (http://msdn.microsoft.com/en-us/library/aa363858%28v=vs.85%29.aspx (przeczytaj szczególnie sekcję o dyskach fizycznych i woluminach)).
Oczywiście, że w Linuksie lub Uniksie, oprócz używania czegoś takiego jak Fuse, wystarczy wydać, odczytać lub napisać połączenie do pożądanego urządzenia w/dev/xxx (jeśli jesteś rootem), a pod tym względem Unice są bardziej przyjazny lub bardziej niezabezpieczony w zależności od twojego punktu widzenia.
Stamtąd próbuję zaimplementować prosty system plików, taki jak Fat, lub coś bardziej egzotycznego, jak system plików tar, lub nawet prosty system plików oparty na koncepcjach uniksowych, takich jak UFS lub Minux, lub po prostu coś, co tylko rejestruje wykonane połączenia i ich argumenty do pliku dziennika (a to pomoże ci zrozumieć, połączenia, które są wykonywane do sterownika systemu plików podczas regularnego korzystania z komputera).
Teraz twoje drugie pytanie (o wiele łatwiejsze do odpowiedzi), tak C/C++ zrobi lewę, ponieważ są one lingua franca rozwoju systemu, również wiele twojego przykładowego kodu będzie w C/C++ więc przynajmniej będziesz czytać C/C++ w swoim rozwoju.
Teraz za trzecie pytanie, tak, jest to wykonalne dla jednej osoby, na przykład system plików ext (szeroko znany w świecie Linuksa przez jego następców jako ext2 lub ext3) został stworzony przez jednego programistę Theodora Ts'o, więc nie myśl, że te rzeczy nie są w stanie wykonać jedna osoba.
Teraz ostatnie uwagi, pamiętaj, że prawdziwy system plików współdziała z wieloma innymi podsystemami w zwykłym jądrze, na przykład, jeśli masz laptopa i hibernujesz go, system plików musi wyczyścić wszystkie zmiany dokonane w otwartych plikach, jeśli masz plik stronicowania na partycji lub nawet jeśli plik stronicowania ma własny system plików, będzie to miało wpływ na twój system plików, w szczególności na rozmiary bloków, ponieważ będą one miały zwykle taką samą moc lub rozmiar bloku strony, ponieważ łatwo jest po prostu umieścić blok z systemu plików w pamięci, który zbieg okoliczności jest równy rozmiarowi strony (ponieważ to tylko jeden transfer).
A także bezpieczeństwo, ponieważ będziesz chciał kontrolować użytkowników i pliki, które czytają/zapisują, a to zwykle oznacza, że przed otwarciem pliku będziesz musiał wiedzieć, z jakiego loginu jest zalogowany użytkownik i jakie uprawnienia ma on do dyspozycji. dla tego pliku. Oczywiście bez systemu plików użytkownicy nie mogą uruchamiać żadnego programu ani współdziałać z urządzeniem. Współczesne warstwy systemu plików współdziałają również z podsystemem sieciowym, ponieważ istnieją sieciowe i rozproszone systemy plików.
Więc jeśli chcesz iść i dowiedzieć się o ten system plików jądra, to są pewne rzeczy trzeba będzie się martwić (oprócz znajomości interfejsu VFS)
PS: Jeśli chcesz, aby Unix uprawnienia pracę w systemie Windows możesz użyć czegoś, co MS używa w systemie plików NFS na serwerach wersji Windows (http://support.microsoft.com/kb/262965)
Tylko dopełnienie tego, co powiedział Coyote21. Możesz przeczytać tę tezę: http://www.minix3.org/theses/gerofi-minix-vfs.pdf
W tej pracy można dowiedzieć się trochę więcej o VFS i niektóre szczegóły są tam opisane. W dodatku B. są bardzo pomocne rzeczy. Istnieje implementacja systemu plików (nie rzeczywisty system plików, ale jeden w pamięci).
- 1. v4l2 bardzo prosty przykład
- 2. Jak zaimplementować wirtualny system plików Pythona przy użyciu półki
- 3. Prosty system głosowania PHP
- 4. Bardzo prosty D3: jak rysować łuk?
- 5. Jak zbudować bardzo prosty przykład Guard?
- 6. Wykres słupkowy CSS - bardzo prosty
- 7. Bardzo prosty przykład ładowania pliku Silverlight
- 8. Jak stworzyć wyjątkowo prosty system operacyjny?
- 9. Jak zaimplementować prosty przycisk w PyQt
- 10. Prosty system logowania z php
- 11. Jak zaimplementować system osiągnięć w RoR
- 12. System plików TreeView
- 13. Przechowywanie obrazów: system MongoDb kontra system plików
- 14. Jak mogę zaimplementować system rozpoznawania gestów w systemie OS X?
- 15. Jak skonfigurować przesyłanie plików jQuery? Jak zaimplementować procedurę ładowania plików?
- 16. Jak przekonwertować dokument Word na bardzo prosty html w Pythonie?
- 17. System plików w pamięci w java
- 18. System plików C++ 11 (VS2012)
- 19. PHPUnit: Jak wyśmiać ten system plików?
- 20. Wirtualny system plików w Perlu
- 21. prosty skrypt do przesyłania plików
- 22. System plików oparty na znacznikach
- 23. Wbudowany system plików typu open source (lub system plików pojedynczego pliku lub pamięć strukturalna) dla C
- 24. boost :: system plików dodający cudzysłowy?
- 25. Jak mogę zaimplementować prosty serwer WWW przy użyciu Pythona bez korzystania z żadnych bibliotek?
- 26. Który system buforowania Django jest szybszy: System plików lub DB?
- 27. martwy prosty Django przesyłania plików nie działa: -. ((
- 28. trzeba utworzyć miniaturę do przesyłania wideo (bardzo prosty kod)
- 29. Bardzo prosty formularz F # blokuje się przy wprowadzaniu z klawiatury
- 30. Bardzo prosty przykład konfiguracji Apache-commons wyrzuca NoClassDefFoundError
wystarczy spojrzeć na koncepcję systemu plików minix –
System plików nie jest zbyt trudny do obsłużenia przez jedną osobę. Wiele systemów plików zostało napisanych w dużej mierze przez jedną osobę (przynajmniej na początkowy bit.) – Omnifarious
@Mr. QC: Zostaw link pod odpowiedziami –