2011-01-17 11 views
21

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?

+0

wystarczy spojrzeć na koncepcję systemu plików minix –

+0

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

+0

@Mr. QC: Zostaw link pod odpowiedziami –

Odpowiedz

15

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++.

+2

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

+2

@ The MYYN: Tak, ale muszę zacząć od czegoś. –

7

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.

+0

moim zdaniem, FAT jest nieco skomplikowany –

+0

@MarkYisri, który jest łatwiejszy? – Pacerier

+0

@Pacerier Możesz stworzyć prosty system plików z pary 'structs'. Będzie mieć bardzo ograniczoną funkcjonalność, ale może wystarczyć w systemie wbudowanym. –

7

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

+2

link w dół .............. – Pacerier

3

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)

1

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).

Powiązane problemy