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?
unix
operating-systems
Beberapa Siswa Noob
sumber
sumber
Jawaban:
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 .
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.
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.
sumber
WriteFile
. Tetapi di samping itu, ada kategori "objek sinkronisasi" yang bahkan lebih besar yang tidak hanya mencakup file tetapi juga mutex.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.
sumber
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
cat
untuk menunjukkan, melewatigrep
, 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.
sumber
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)
sumber
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.
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.
sumber
mmap()
saja ....)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".
sumber
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.
sumber
Harap dicatat bahwa bahkan Linus Torvalds tidak setuju dengan "semuanya adalah file." Jika Anda mencari "
"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 .
sumber
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".