Często słyszę, jak ludzie mówią: „Unikalną filozofią Uniksa jest to, że traktuje wszystko jak plik” lub „W Unixie wszystko jest plikiem”. Ale nigdy nie słyszałem, żeby ktokolwiek tłumaczył, dlaczego jest unikatowy dla Uniksa.
Dlaczego jest to unikatowe dla Uniksa? Czy inne systemy operacyjne, takie jak Windows i Mac, nie działają na plikach?
Czy jest wyjątkowy w porównaniu do innych systemów operacyjnych?
unix
operating-systems
Jakiś student Noob
źródło
źródło
Odpowiedzi:
Typowe systemy operacyjne przed Unixem traktowały pliki w jeden sposób i traktowały każde urządzenie peryferyjne zgodnie z charakterystyką tego urządzenia. Oznacza to, że jeśli dane wyjściowe programu zostały zapisane w pliku na dysku, było to jedyne miejsce, w którym dane wyjściowe mogły się udać; nie można wysłać go do drukarki lub napędu taśmowego. Każdy program musiał być świadomy każdego urządzenia używanego do wejścia i wyjścia oraz mieć opcje poleceń do obsługi alternatywnych urządzeń I / O.
Unix traktuje wszystkie urządzenia jak pliki, ale ze specjalnymi atrybutami. Aby uprościć programy, standardowe wejście i wyjście są domyślnymi urządzeniami wejścia i wyjścia programu. Tak więc wyjście programu normalnie przeznaczone na ekran konsoli może zostać przeniesione w dowolne miejsce, do pliku na dysku, drukarki lub portu szeregowego. Nazywa się to przekierowaniem we / wy .
Oczywiście wszystkie współczesne systemy operacyjne obsługują różne systemy plików i mogą „operować na plikach”, ale różnica polega na tym, jak obsługiwane są urządzenia? Nie wiem o Macu, ale Windows oferuje pewne przekierowanie I / O.
Już nie. Linux ma tę samą funkcję. Oczywiście, jeśli system operacyjny przyjmie przekierowanie I / O, wówczas zwykle używa innych funkcji Uniksa i ostatecznie kończy się na Uniksie.
źródło
WriteFile
. Ale dodatkowo istnieje jeszcze większa kategoria „obiektów synchronizacji”, która obejmuje nie tylko pliki, ale także muteksy.Pomysł, że „wszystko jest plikiem” pochodzi od Multics. Projektanci Uniksa oparli wiele swoich prac na poprzednikach, zwłaszcza Multics. Rzeczywiście, wiele rzeczy w informatyce opiera się na poprzednikach.
Możesz przeczytać więcej na temat pracy Dennisa Ritchiego w projektowaniu Uniksa, aby uzyskać więcej. Odniósł się do rzeczy, które „skopiowali” z Multics, takich jak drzewiasty system plików, powłoka poleceń i brak strukturyzacji plików. Nie sugeruję, że ludzie z Uniksa ukradli ludziom z Multics. Pod każdym względem byli to ci sami ludzie.
źródło
Wyjątkowy? Nie. Definiowanie? Absolutnie.
Posiadanie wszystkiego jako pliku lub urządzenia w znanej hierarchii oznacza, że możesz używać tego samego zestawu narzędzi do wszystkiego. Plan 9 firmy Bell Labs przenosi to dalej nawet na urządzenia sprzętowe jako pliki.
Co ważniejsze, pozwala to na dwie bardzo proste i potężne koncepcje. Podstawowe narzędzia, które wykonują One Thing Well (tm), które można w razie potrzeby łączyć ze sobą za pomocą rur. Chcesz znaleźć coś w pliku tekstowym? Użyj,
cat
aby to pokazać, przepuścićgrep
, a gotujesz na gazie. To prawdziwa potęga „uniksowego” sposobu - wyspecjalizowane aplikacje współpracujące ze sobą, zapewniające ogromną elastyczność.Mac OS X również działa zgodnie z filozofią Unix, ale jest lepiej ukryty (pakiet „aplikacji” to tak naprawdę katalog pełen plików), a właściwie jest to właściwy, certyfikowany Unix, wywodzący się z NeXT , który korzystał z bitów FreeBSD .
W systemie Windows istnieją pewne komponenty binarne, takie jak przeglądarka zdarzeń i rejestr, oraz pewne zalety szybkości w tym konkretnym scenariuszu.
źródło
Z powodu specjalnych plików. Kiedy ludzie mówią „wszystko w Uniksie”, zwykłe pliki i katalogi nie mają na myśli. Pliki specjalne są unikatowe dla systemów uniksopodobnych, których jest wiele. Więc to nie jest unikalny w systemie Unix.
Pliki specjalne służą wielu celom. Istnieją np. Rury, gniazda i, co najważniejsze, pliki urządzeń. Rury i gniazda są strumieniami komunikacji między procesami. Wiele funkcji podsystemów jest udostępnianych przestrzeni użytkownika za pomocą plików urządzeń.
Rury i gniazda
Programy używają ich tak, jak zwykłych plików. W rzeczywistości przez większość czasu nie dbają nawet o to, jakiego rodzaju pliku używają. Właśnie dlatego komendy Unix można tak różnorodnie łączyć, aby tworzyć nowe potężne systemy. (Patrz przekierowanie we / wy w odpowiedzi na trociny)
Pliki urządzeń
Jak wspomniano wcześniej, działają one jak interfejsy dla przestrzeni użytkownika. Na przykład, aby wysunąć tacę cd, programista najpierw otworzy odpowiedni plik urządzenia. Kolejny przykład: chcesz, aby Twój program zmienił terminal wirtualny. Najpierw otwórz / dev / console.
Co dzieje się dalej nie wysyła zwykłe znaki do tych plików, ale wydawanie ioctl () „s na nich. Poszczególne ioctl, które możesz wydać, zależą od urządzenia. Np. Konsola jest udokumentowana w konsoli_ioctl (4)
źródło
Prawdopodobnie zostanę oskarżony o to, ale myślę, że powiedzenie, że wszystko w Unixie jest plikiem, jest w rzeczywistości błędem. Tak naprawdę to dwie rzeczy.
System plików implementuje tę przestrzeń nazw i implementuje strukturę, która umożliwia wysyłanie funkcji interfejsu do tych obiektów. System plików był początkowo konceptualizowany do przechowywania plików, ale następnie kooptowano go do organizowania innych obiektów w hierarchii przestrzeni nazw. Przykładem polimorfizmu sprzed zorientowania obiektowego była rzecz.
Wywoływanie wszystkich plików nie jest szkodliwe. Ale w rzeczywistości są to bardziej ogólne obiekty (plik jest jednym z takich obiektów). Z tej perspektywy ten pomysł w ogóle nie jest unikalny dla Uniksa. Wiele innych systemów operacyjnych implementuje takie hierarchie obiektów polimorficznych.
źródło
mmap()
oczywiście zrobić ...)Kiedy ludzie mówią: „W Uniksie wszystko jest plikiem”, to znaczy, że także rzeczy, które nie są plikami, są traktowane jak pliki.
Oczywiście większość systemów operacyjnych działa z plikami. Pliki tekstowe, pliki graficzne, pliki dźwiękowe. Ale nie wszystkie systemy operacyjne traktują urządzenia jak pliki. To ważna różnica. Jeśli wymienię zawartość mojego folderu / dev / w moim systemie operacyjnym Ubuntu (który jest oparty na Uniksie), otrzymam listę ponad 200 urządzeń. Niektóre z tych urządzeń są sprzętowe, ale są wyświetlane w folderze. Na przykład dyski twarde, porty USB, mysz i klawiatura, urządzenia audio i drukarki. Niektóre urządzenia są wirtualne, na przykład / dev / urandom, który zachowuje się jak nieskończony plik pełen losowych liczb. To nie jest prawdziwy plik na moim dysku twardym.
Wszystkie te urządzenia są traktowane jako pliki. Potrafię czytać dane i / lub zapisywać dane na tych urządzeniach. Oto przykłady kopiowania danych z różnych urządzeń do urządzenia audio. Jest to możliwe, ponieważ są traktowane jak pliki. (Naukowy) wynik to zdolność do słuchania zawartości dysku twardego, ruchu myszy, pamięci komputera lub pikseli obrazu. Byłoby to znacznie trudniejsze do osiągnięcia, gdyby urządzenia nie były traktowane jak pliki, ponieważ każde urządzenie wymagałoby różnych metod odczytu i zapisu danych.
Biorąc to pod uwagę, to, co oznacza „wszystko”, różni się w zależności od systemu. Na przykład OS X jest oparty na Uniksie, ale nie ma urządzenia / dev / audio. Wykorzystuje zastrzeżony system audio o nazwie CoreAudio. W takim przypadku można powiedzieć „prawie wszystko jest plikiem”. Następnie w systemach takich jak Windows, w których „wszystko nie jest plikiem”, możesz nadal wykonywać takie czynności, jak kopiowanie zawartości pliku do portu drukarki (wpisywanie czegoś podobnego
copy mydocument.txt >lpt1:
), co jest podobne do kopiowania dokumentu na drukarkę w systemie Unix systemy.Czy inne systemy operacyjne, takie jak Windows i OS X, nie działają na plikach? Tak, robią. Windows i OS X działają na plikach, ale Windows nie traktuje urządzeń jak plików, co jest częścią tego, co znaczy „wszystko jest plikiem”.
źródło
Widzę, że Multics jest cytowany jako źródło „wszystko jest plikiem”, ale myślę, że musisz spojrzeć nieco głębiej niż tylko pliki urządzeń, nazwane potoki, zwykłe pliki itp. Itp. Musisz spojrzeć na składnię nazewnictwa plików. To duża różnica, nawet jeśli istnieją „magiczne nazwy plików” AUX, CON i LP.
Zobacz „ The Hideous Name ” Rob Pike. Porównuje uniksową składnię nazewnictwa plików z kilkoma innymi składniami, w szczególności VMS. Zauważ, że systemy operacyjne komputerów mainframe z przełomu lat 60. i 70., kiedy powstał Unix, miały to, co współczesny umysł uznałby za wyjątkowo rokokową składnię nazewnictwa plików. Minęły lata, odkąd korzystałem z VM / CMS, NOS lub NOS / VE i patrzyłem tylko przez ramię kogoś używającego systemu operacyjnego Univac, ale wystarczy powiedzieć, że dziwactwa przewyższały liczebność prawidłowości.
Nigdy nie widziałem, żeby Multics działał, ale w systemie plików widać papier . Wygląda na to, że oryginalny Unix zabrał „wszystko jest plikiem” nieco dalej niż Multics, ale przebieg może się różnić.
źródło
Pamiętaj, że nawet Linus Torvalds nie zgadza się z tym, że „wszystko jest plikiem”. Jeśli szukasz „
„znajdziesz interesujące filozofie, jak rozumiemy, że wszystko nie jest plikiem, na przykład abstrakcyjna struktura danych w pamięci lub wskaźnik na pewno nie jest plikiem, OK, na pewno wszystko może być reprezentowane jako plik, ale reprezentowanie i bycie to 2 różne akcje .
źródło
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".