Mengapa "Semuanya adalah file" unik untuk sistem operasi Unix?

70

Saya sering mendengar orang berkata "Filosofi unik Unix adalah bahwa ia memperlakukan semuanya sebagai file" atau "Di Unix, semuanya adalah file". Tapi saya belum pernah mendengar ada yang menjelaskan mengapa ini unik untuk Unix.

Jadi, mengapa ini unik untuk Unix? Apakah sistem operasi lain seperti Windows dan Mac tidak beroperasi pada file?

Dan, apakah ini unik dibandingkan dengan sistem operasi lain?

Beberapa Siswa Noob
sumber
26
sidenote: macosx berjalan di atas unix.
akira
2
Namun, sementara hal-hal tingkat tinggi tidak menggunakan file (seperti dbus atau X di * nix) Windows tingkat rendah dibangun di sekitar pegangan. Anda dapat melakukan banyak hal yang sama dengan mereka seperti Anda dapat file di * nix (buka, tutup, kontrol, dan biasanya mengirim / menerima), tetapi Anda harus menjadi seorang programmer untuk melihat antarmuka itu. Apakah itu hal yang baik adalah masalah preferensi.
Markus
1
semuanya adalah file, kecuali antarmuka jaringan.
alvin
8
@akira - OSX bersertifikat Unix dan tidak menjalankan "di atas" itu.
Rob
1
@ Akira Bukan di atas Unix. OSX adalah salah satu dari beberapa OS UNIX bersertifikat.
Let_Me_Be

Jawaban:

53

Jadi, mengapa ini unik untuk Unix?

Sistem operasi yang khas, sebelum Unix, memperlakukan file satu arah dan memperlakukan setiap perangkat periferal sesuai dengan karakteristik perangkat itu. Yaitu, jika output dari program ditulis ke file pada disk, itu adalah satu-satunya tempat output bisa pergi; Anda tidak dapat mengirimnya ke printer atau drive tape. Setiap program harus mengetahui setiap perangkat yang digunakan untuk input dan output, dan memiliki opsi perintah untuk berurusan dengan perangkat I / O alternatif.

Unix memperlakukan semua perangkat sebagai file, tetapi dengan atribut khusus. Untuk menyederhanakan program, input standar dan output standar adalah perangkat input dan output standar dari suatu program. Jadi output program yang biasanya ditujukan untuk layar konsol bisa ke mana saja, ke file disk atau printer atau port serial. Ini disebut I / O redirection .

Apakah sistem operasi lain seperti Windows dan Mac tidak beroperasi pada file?

Tentu saja semua OS modern mendukung berbagai sistem file dan dapat "beroperasi pada file", tetapi perbedaannya adalah bagaimana perangkat ditangani? Tidak tahu tentang Mac, tetapi Windows memang menawarkan pengalihan I / O.

Dan, dibandingkan dengan sistem operasi apa yang unik?

Tidak lagi. Linux memiliki fitur yang sama. Tentu saja, jika sebuah OS mengadopsi I / O redirection, maka ia cenderung menggunakan fitur-fitur Unix lainnya dan akhirnya seperti-Unix pada akhirnya.

serbuk gergaji
sumber
29
OS X pada dasarnya adalah Unix, jadi tidak ada banyak perbedaan.
slhck
6
ada sedikit lebih banyak untuk semua model file.
artistoex
1
Paragraf pembuka tidak benar. Ada sistem operasi sebelum Unix, dan mereka memiliki fitur yang kemudian ditemukan di Unix, termasuk I / O redirection.
Patrick Seymour
3
Plan 9 memiliki konsep yang sama. Semuanya adalah konsep file dan bahkan disebut "more unix then unix"
William
2
Windows (sejak NT) berjalan sedikit lebih jauh. Ada banyak perangkat yang berperilaku seperti file, seperti port serial dan pipa bernama. Anda dapat menulis ke semua menggunakan WriteFile. Tetapi di samping itu, ada kategori "objek sinkronisasi" yang bahkan lebih besar yang tidak hanya mencakup file tetapi juga mutex.
MSalters
34

Gagasan bahwa "semuanya adalah file" berasal dari Multics. Para perancang Unix mendasarkan banyak pekerjaan mereka pada pendahulunya, terutama Multics. Memang, banyak hal dalam komputasi didasarkan pada pendahulunya.

Anda dapat membaca tentang karya Dennis Ritchie yang terlambat dalam desain Unix untuk lebih lanjut. Dia mereferensikan hal-hal yang mereka "salin" dari Multics, seperti sistem file seperti pohon, shell perintah, dan non-penataan file. Saya tidak menyiratkan bahwa orang Unix mencuri dari orang Multics. Untuk semua maksud dan tujuan, itu adalah orang-orang yang sama.

Patrick Seymour
sumber
6
ini seharusnya bukan jawaban dengan suara tertinggi, itu tidak menjawab pertanyaan, itu hanya meminta orang untuk bertanya pertanyaan lain: "Mengapa 'Semuanya adalah File' di Multics?"
Lie Ryan
13
@ LieRyan: Sebenarnya itu menjawab pertanyaan mengapa itu unik : tidak.
Goran Jovic
1
Orang-orang Unix hanya membawa ide-ide mereka ketika proyek Multics dihentikan dan menamainya. Unix hanya menjadi permainan kata-kata - satu VS banyak.
Fiasco Labs
2
@ Lie Ryan - Pertanyaannya bukan mengapa semuanya adalah file, itu mengapa unik. Seperti yang saya dan Goran tunjukkan, ternyata tidak.
Patrick Seymour
1
Pertanyaannya benar-benar mengacu pada "sistem operasi Unix s ", yaitu keluarga. Keluarga itu termasuk Multics dan Linux.
MSalters
28

Unik? Tidak. Mendefinisikan? Benar.

Memiliki segala sesuatu sebagai file atau perangkat dalam hierarki yang dikenal berarti Anda dapat menggunakan seperangkat alat yang sama untuk semuanya. Plan 9 dari Bell Labs mengambil ini lebih jauh dengan perangkat perangkat keras bahkan sebagai file.

Lebih penting lagi, ini memungkinkan untuk dua konsep yang sangat sederhana dan kuat. Utilitas dasar yang melakukan One Thing Well (tm), yang dapat dirangkai dengan pipa sesuai kebutuhan. Ingin menemukan sesuatu di file teks? Gunakan catuntuk menunjukkan, melewati grep, dan Anda memasak dengan gas. Itulah kekuatan sebenarnya dari cara 'Unix' - aplikasi khusus yang bekerja bersama untuk fleksibilitas luar biasa.

Mac OS X juga mengikuti filosofi Unix, tetapi lebih baik disembunyikan (bundel 'aplikasi' sebenarnya adalah direktori yang penuh dengan file), dan sebenarnya adalah Unix yang disertifikasi, diturunkan dari NeXT , yang menggunakan bit-bit FreeBSD .

Dengan Windows, ada beberapa komponen biner seperti event viewer dan registry sejak itu, dan ada beberapa keunggulan kecepatan di sana, dalam skenario tertentu.

Journeyman Geek
sumber
1
Plus 1 untuk menyebutkan rencana 9. IMHO Fuse membawa rencana 9 lebih dekat ke implementasi melalui ad-hoc dan iterasi.
Danny Staple
2
Nah, rencana 9 adalah rencana 9, itu sudah berfungsi. Sekering hanya memungkinkan ekspansi filesystem userspace dalam .. cara yang menarik. Saya suka di mana IRC diperlakukan sebagai FS.
Journeyman Geek
Hmm - Anda tahu, saya sudah berniat untuk mencarinya sejak lama sejak mencari tahu melalui buku Eric Raymond bertahun-tahun yang lalu ... Anda akhirnya benar-benar membuat saya mengerti soal bongkahan "dapatkan itu", saya telah mengunduh ISO dan mencobanya.
Danny Staple
2
Saya percaya ada versi yang lebih baru juga, yang disebut inferno
Journeyman Geek
1
+1 untuk mencatat bahwa OS X Darwin juga merupakan 'Unix nyata'.
calum_b
18

Karena file-file khusus. Ketika orang mengatakan "semuanya adalah file di Unix", file dan direktori yang umum bukanlah yang mereka pikirkan. File khusus unik untuk OS yang mirip Unix, yang jumlahnya banyak. Sehingga tidak unik untuk para Unix.

File khusus melayani banyak tujuan. Ada misalnya pipa, soket, dan yang paling penting, file perangkat. Pipa dan soket adalah aliran komunikasi antar proses. Sebagian besar fungsionalitas dari subsistem dibuat tersedia untuk ruang pengguna melalui file perangkat.

Pipa dan Soket

Program menggunakannya seperti halnya mereka menggunakan file biasa. Bahkan, sebagian besar waktu mereka bahkan tidak peduli jenis file apa yang mereka gunakan. Itu sebabnya perintah Unix dapat sangat digabungkan untuk membentuk sistem baru yang kuat. (Lihat pengalihan I / O dalam jawaban serbuk gergaji)

File Perangkat

Seperti yang disebutkan sebelumnya, ini bertindak seperti antarmuka untuk ruang pengguna. Misalnya, untuk mengeluarkan baki cd, seorang programmer pada awalnya akan membuka file perangkat yang sesuai. Contoh lain: Anda ingin program Anda beralih terminal virtual. Buka / dev / konsol dulu.

Apa yang terjadi selanjutnya tidak mengirim karakter hanya untuk file-file, namun mengeluarkan ioctl () 's pada mereka. Ioctl individual yang dapat Anda terbitkan tergantung pada perangkat. Misalnya konsol didokumentasikan dalam console_ioctl (4)

artistoex
sumber
12

Saya mungkin akan mendapatkan reamed karena mengatakan ini, tapi saya pikir mengatakan bahwa semuanya adalah file di Unix sebenarnya adalah sebuah kesalahan. Apa itu sebenarnya adalah dua hal.

  1. File dan perangkat (dan banyak hal lainnya) adalah objek yang dapat dimodelkan oleh antarmuka yang terdiri dari fungsi buka, tutup, baca, tulis, dan kontrol (ioctl).
  2. Namespace untuk objek-objek ini adalah hierarkis yaitu objek-objek ini diatur dalam hierarki.

Filesystem mengimplementasikan namespace ini, dan mengimplementasikan framework yang memungkinkan pengiriman fungsi antarmuka ke objek-objek ini. Sistem file pertama kali dikonsep untuk file rumah, tetapi kemudian dikooptasi untuk mengatur objek lain dalam hirarki namespace. Contoh polimorfisme dari sebelum berorientasi objek adalah sesuatu.

Tidak ada salahnya hanya dengan memanggil semua file. Namun pada kenyataannya, mereka adalah objek yang lebih umum ini (file menjadi salah satu objek tersebut). Dari perspektif ini, ide ini sama sekali tidak unik bagi Unix. Banyak OS lain yang mengimplementasikan hierarki objek polimorfik seperti itu.

Ziffusion
sumber
Persis! Di Unix semuanya adalah deskriptor file (belum tentu file!), Yaitu semuanya (kecuali memori) adalah I / O, bahkan file. File harus diakses seolah-olah mereka I / O stream (meskipun mereka dapat dicari, sehingga agak dapat diakses secara acak, tetapi itu adalah biaya ekstrem dari panggilan sistem tambahan). (dengan pengecualian apa yang bisa dilakukan dengan sedikit mmap()saja ....)
Greg A. Woods
9

Ketika orang mengatakan "Di Unix, semuanya adalah file" yang mereka maksudkan adalah juga hal-hal yang bukan file diperlakukan sebagai file.

Tentu saja sebagian besar sistem operasi bekerja dengan file. File teks, file gambar, file suara. Tetapi tidak semua sistem operasi memperlakukan perangkat sebagai file. Itu perbedaan penting. Jika saya daftar konten folder / dev / di sistem operasi Ubuntu saya (yang berbasis Unix), saya mendapatkan daftar lebih dari 200 perangkat. Beberapa perangkat tersebut adalah perangkat keras, tetapi ditampilkan di dalam folder. Misalnya hard drive, port USB, mouse dan keyboard, perangkat audio dan printer antara lain. Beberapa perangkat adalah virtual, misalnya / dev / urandom, yang berperilaku sebagai file tak terbatas yang penuh dengan angka acak. Ini bukan file asli di hard drive saya.

Semua perangkat itu diperlakukan sebagai file. Saya dapat membaca data dari dan / atau menulis data ke dalam perangkat itu. Di sini ada contoh menyalin data dari perangkat yang berbeda ke perangkat audio. Ini dimungkinkan karena mereka diperlakukan sebagai file. Hasil (geeky) adalah kemampuan untuk mendengarkan konten dari hard drive, gerakan mouse, memori komputer atau piksel dari suatu gambar. Ini akan jauh lebih sulit untuk dicapai jika perangkat tidak diperlakukan sebagai file, karena setiap perangkat akan memerlukan metode yang berbeda untuk membaca dan menulis data.

Yang sedang dikatakan, apa "segalanya" berarti bervariasi dari satu sistem ke sistem. Sebagai contoh, OS X didasarkan pada Unix, tetapi tidak memiliki perangkat / dev / audio. Ia menggunakan sistem audio berpemilik yang disebut CoreAudio. Jadi dalam hal ini orang mungkin mengatakan "hampir semuanya adalah file". Kemudian, dalam sistem seperti Windows, di mana "semuanya bukan file", Anda masih bisa melakukan hal-hal seperti menyalin konten file ke port printer (mengetik sesuatu seperti copy mydocument.txt >lpt1:), yang mirip dengan menyalin dokumen ke perangkat printer di Unix sistem.

Apakah sistem operasi lain seperti Windows dan OS X tidak beroperasi pada file? Ya mereka melakukanya. Windows dan OS X beroperasi pada file, tetapi Windows tidak memperlakukan perangkat sebagai file, yang merupakan bagian dari arti "semuanya adalah file".

Abe
sumber
8

Saya melihat Multics dikutip sebagai sumber "semuanya adalah file", tapi saya pikir Anda harus melihat sedikit lebih dalam dari sekadar file perangkat, pipa bernama, file biasa, dll. Anda harus melihat sintaks penamaan file. Itu membuat perbedaan besar bahkan ketika AUX, CON dan LP "nama file ajaib" ada.

Lihat " Nama Hideous " oleh Rob Pike. Ini membandingkan sintaks penamaan file Unix dengan beberapa sintaks lainnya, terutama VMS. Perhatikan bahwa OS mainframe pada akhir 60-an / awal 70-an, ketika Unix berasal, memiliki apa yang pikiran modern akan mempertimbangkan sintaks penamaan file rococo yang luar biasa. Sudah bertahun-tahun sejak saya menggunakan VM / CMS, atau NOS atau NOS / VE, dan saya hanya melihat dari balik bahu seseorang yang menggunakan OS Univac, tetapi cukuplah untuk mengatakan bahwa jumlah quir lebih banyak daripada keteraturan.

Saya bahkan belum pernah melihat Multics dijalankan, tetapi Anda dapat melihat kertas di sistem filenya . Tampaknya Unix asli mengambil "semuanya adalah file" sedikit lebih jauh dari Multics, tetapi jarak tempuh Anda mungkin berbeda.

Bruce Ediger
sumber
1
Nah, dalam Multics semuanya adalah memori, kecuali I / O (meskipun itu dapat dipetakan ke memori juga). Dalam Unix semuanya (kecuali memori) adalah deskriptor file , termasuk file. Yaitu di Unix semuanya adalah I / O.
Greg A. Woods
1
BTW, sebuah emulator sekarang ada yang akan mem-boot dan menjalankan Multics.
Greg A. Woods
3

Harap dicatat bahwa bahkan Linus Torvalds tidak setuju dengan "semuanya adalah file." Jika Anda mencari "

semuanya adalah bytestream

"Anda akan menemukan filosofi yang menarik bagaimana kami maksudkan bahwa semuanya bukan file misalnya struktur data abstrak dalam memori atau pointer pasti bukan file, OK pasti apa pun dapat direpresentasikan sebagai file tetapi mewakili dan menjadi 2 tindakan berbeda .

Niklas Rosencrantz
sumber
1
Anda tidak memberikan tautan. Pada beberapa pencarian, saya menemukan yarchive.net/comp/linux/everything_is_file.html , mengutip tanggapan Torvald di utas email, di mana ia secara implisit menegaskan bahwa model itu harus "semuanya adalah file."
bgvaughan
1
Sebenarnya @bgvaughan sebaliknya: yarchive.net/comp/linux/everything_is_file.html memberikan kutipanThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
LIttle Ancient Forest Kami
1
@LIttleAncientForestKami: dan Unix secara tradisional memperlakukan file hanya sebagai aliran byte, sebagai lawan dari sistem yang memperlakukan file sebagai aliran catatan (atau memiliki aliran byte dan aliran catatan), sebagai kumpulan aliran (atau fork sumber daya), atau memiliki model yang lebih kompleks, di mana ada beberapa cara berbeda untuk mengakses beberapa jenis objek.
ninjalj