Saya telah memperhatikan bahwa pada OS non-windows .... yaitu linux / mac saya dapat melakukan hal-hal seperti: - Kirim zip ke teman melalui tujuan - Hapus file saat sedang dalam transfer
Dan transfernya tidak gagal.
Atau, saya dapat melakukan operasi seperti .. - memulai film - menghapus file - film masih diputar hingga selesai (baca dari disk, tidak hanya buffered di memori)
Walaupun file-file itu "dihapus", seperti yang saya sebutkan, mereka sebenarnya dipindahkan ke lokasi yang berbeda pada sistem file ... yaitu direktori Tempat Sampah atau sesuatu. Jadi sepertinya saya seperti OS menggunakan pointer @ file yang diperbarui ketika bergerak daripada mengakses file secara langsung.
Adakah yang bisa menjelaskan bagaimana kemampuan AWESOME ini benar-benar diimplementasikan? Saya bahkan tidak yakin apa yang harus google pelajari lebih lanjut.
Terima kasih.
sumber
Jawaban:
Entri direktori hanyalah sebuah penunjuk ke inode. Inode berisi meta-informasi tentang file (selain nama), dan menunjuk ke data file (jika ada). Ketika Anda mulai menyalin file, Anda dapat menangani inode.
Sistem operasi mempertahankan sejumlah referensi ke inode. Selama ada referensi ke inode, inode dan data file disimpan. Setelah semua referensi ke inode dihapus, inode adalah dan ruang yang dibutuhkan oleh file dilepaskan.
Karena Anda memiliki file yang terbuka untuk disalin, file itu akan disimpan hingga proses Anda menutup file. Ini harus terjadi ketika transfer file selesai, dan akan terjadi jika proses penyalinan gagal. Jika transfer file gagal sebagian dan Anda telah menghapus semua tautan keras ke file, Anda tidak akan dapat memulai kembali transfer dengan sukses.
EDIT: Seperti yang lain telah dicatat, pemindahan file pada perangkat yang sama dilakukan tanpa memindahkan data. Sebaliknya entri direktori baru dibuat di direktori tujuan, dan entri direktori asli dihapus.
Dimungkinkan untuk memiliki banyak entri direktori untuk file yang sama. Ini disebut tautan keras. Mereka dibuat dengan membuat entri direktori baru untuk file tanpa menghapus entri asli. Inode sistem file memiliki jumlah referensi untuk mencatat jumlah entri direktori yang menunjuk ke file.
EDIT2: Jika proses macet atau terbunuh, file akan dihapus dengan bersih karena jumlah akses dalam memori akan dikurangi menjadi nol. Ini adalah tindakan yang terjadi ketika program berakhir secara normal.
Dalam hal terjadi kegagalan daya atau shutdown sistem yang tidak teratur lainnya, disk akan memerlukan
fsck
(pemeriksaan sistem file) sebelum dapat sepenuhnya dipasang. Bergantung pada keadaan inode disk dan struktur direktori, ruang akan dipulihkan, file akan tetap di direktori, atau entri baru akan dibuat dilost+found
direktori. Hasil akan tergantung pada perubahan mana yang telah dibilas ke disk atau ditulis ke jurnal sistem file.sumber
/tmp
, dan segeraunlink(2)
. Pada saat itu, tidak ada file di direktori (jadi tidak ada yang perlu dibersihkan saat keluar atau macet), tetapi proses Anda masih memiliki akses ke file tersebut, dan tidak ada proses lain yang bisa secara tidak sengaja atau sengaja mengacaukannya. Itu menggambarkan properti yang menarik.Sebagaimana dijelaskan oleh Matt Jenkins, OS (sistem file) melacak file yang tetap dibuka oleh aplikasi. Selama suatu proses membuat file tetap terbuka, datanya tetap pada disk (meskipun telah dihapus dan tidak lagi terlihat atau dapat diakses oleh program lain.
Perhatikan bahwa konsekuensi dari ini adalah bahwa ruang yang ditempati oleh file hanya dapat direklamasi setelah proses terakhir menggunakannya telah menutupnya. Itu adalah FAQ untuk operasi sistem file Linux / Unix: "'df' perintah mengatakan partisi penuh, sementara 'du' melaporkan ruang kosong" (lihat misalnya http://batleth.sapienti-sat.org/projects/FAQs/ext3- faq.html ). Jika Anda perlu mengosongkan ruang, itu tidak cukup untuk menghapus file besar (mis. File log), Anda juga harus memastikan tidak ada proses yang membuatnya tetap terbuka (biasanya masalah dengan file log).
sumber
Sebenarnya cukup sederhana. File memelihara daftar referensi - proses yang mengakses file. Ketika Anda menghapus file itu hanya menghapus daftar dari direktori tetapi bukan file itu sendiri. Program yang masih membuka file masih dapat mengaksesnya. File hanya dihapus ketika semua program yang mengaksesnya menutupnya.
Juga, dengan memindahkan file - jika berada dalam sistem file yang sama - file tersebut tidak benar-benar bergerak seperti itu, itu hanya mengubah pointer ke direktori file tersebut.
sumber
Dalam sistem file unix, file dapat memiliki satu atau lebih tautan keras ke sana. File tersebut hidup selama setidaknya ada satu. Ketika yang terakhir dihapus, ruang file dibebaskan. tautan di atas akan memberi Anda titik awal untuk lebih banyak membaca - lihat terutama bagian "Penghitung tautan".
sumber