Di berbagai tempat orang dapat melihat "bit lengket" dituduh saat ini keliru, karena fungsinya saat ini adalah untuk mempengaruhi izin menulis pada direktori dan bertindak sebagai bendera penghapusan terbatas .
Dalam jawaban AskUbuntu, penjawab menulis bahwa "sedikit lengket biasanya berlaku untuk direktori" . Saya mengamati bahwa memang sistem modern dalam praktiknya tampaknya tidak pernah menerapkannya pada file, tetapi sejak dulu kasus yang biasa terjadi adalah menerapkannya pada file (gambar program yang dapat dieksekusi) daripada ke direktori. (Ketika datang ke kurangnya penggunaan modern pada file, ada pertanyaan terkait di Apakah bit lengket tidak digunakan dalam sistem file saat ini .)
Ini memicu pertanyaan:
Apa yang tidak sedikit lengket diterapkan untuk dieksekusi lakukan? Apakah itu seperti setuid?
Perhatikan bentuk lampau. Ini bukan Bagaimana bit lengket bekerja? sekarang. Begitulah cara kerjanya dulu.
sumber
Jawaban:
Tidak, bit yang lengket tidak seperti flag set-UID atau set-GID. Itu tidak mempengaruhi perubahan apa pun untuk memproses kredensial.
Apa yang dilakukan bit lengket adalah membuat teks program "lengket". Awalnya itu bukan istilah yang salah.
background: bagian gambar program dan teks bersama
Intinya, tanpa masuk terlalu dalam ke detail format file yang dapat dieksekusi (yang dapat, dan memiliki, mengisi buku): Bagian-bagian dari file gambar program yang langsung dimuat ke dalam memori untuk menjalankan program terdiri dari kode mesin, konstanta, startup nilai variabel (yang tidak diinisialisasi), dan (dalam satu bentuk atau lainnya) ruang kosong untuk variabel yang diinisialisasi dan tidak diinisialisasi.
Ini dikelompokkan ke dalam koleksi yang dikenal sebagai "bagian" dan mereka memiliki nama konvensional. Kode mesin dan (kadang-kadang) konstanta membentuk apa yang sering dikenal sebagai bagian "teks" dari gambar program. Variabel yang tidak diinisialisasi nol adalah bagian yang sama, bagian "data"; dan variabel nol-diinisialisasi dan tidak diinisialisasi adalah "bss" (nama yang itu sendiri memiliki sejarah folkloric keseluruhan di belakangnya).
Ketika suatu proses memiliki file gambar yang dapat dieksekusi program dimuat ke dalamnya, berbagai bagian - teks, data, dan bss - diinisialisasi dari isi file gambar.
Apa yang istimewa tentang bagian "teks" adalah bahwa kode mesin (dan konstanta) hampir selalu tidak ditulis. Ini memiliki potensi untuk dibagikan di seluruh gambar memori virtual dari semua proses eksekusi yang memuat file gambar yang dapat dieksekusi itu ke dalamnya. Skenario yang tepat di mana teks program dapat dibagikan berada di luar ruang lingkup untuk jawaban ini dan melibatkan hal-hal seperti idempotensi perbaikan loader dan identitas tata letak ruang alamat. Orang-orang dapat dan memiliki buku-buku tentang hal ini juga. ☺
Teks bersama adalah optimisasi yang digunakan oleh kernel. Ini menghilangkan kebutuhan untuk setiap instance dari gambar program yang berjalan tunggal untuk memiliki gambar memori individualnya sendiri, menggunakan memori fisik yang berharga dengan banyak salinan kode mesin yang sama persis (dan konstanta).
teks tempel
Tetapi orang masih bisa melakukan lebih baik daripada teks yang dibagikan. Jelas, jika selalu ada setidaknya satu proses yang berjalan yang menggunakan gambar program teks bersama tertentu, kernel dapat dengan mudah melampirkan ruang memori virtual proses baru 'ke segmen teks bersama yang ada ketika instance baru dari program dijalankan. Hampir selalu ada instance (katakanlah)
/bin/login
atau/bin/sh
berjalan di suatu tempat pada sistem berukuran sedang, jadi contoh baru dari program login atau shell default dapat dengan mudah melampirkan ke salinan yang dimuat dari segmen teks mereka bahwa kernel telah dimuat ke dalam memori.Teks tempel memperluas ide ini ke program gambar yang saat ini tidak ada proses yang berjalan . Jika file gambar yang dapat dieksekusi ditandai sebagai teks tempel, maka kernel mempertahankan segmen teksnya setelah proses terakhir untuk menggunakannya; dengan harapan bahwa instance lain dari program akan segera dieksekusi, dan dapat langsung dilampirkan kembali ke segmen.
Dalam Unices awal, segmen teks tempel yang dimuat akan ditukar dengan penyimpanan swap ketika tidak ada proses yang dilampirkan padanya. (Nantinya Unices berhenti menggunakan swap untuk ini.) Anda mungkin juga pernah mendengar ini dengan nama teks yang disimpan .
Tentu saja, mengatur bit teks lengket pada gambar program adalah sesuatu yang harus dilakukan dengan hati-hati. Program apa yang diuntungkan darinya tergantung dari apa yang umumnya digunakan mesin. Dan segmen teks yang saat ini tidak terikat mengambil sumber daya kernel, yang berarti bahwa ada batasan praktis untuk berapa banyak yang dapat dimiliki dalam sistem apa pun. Jadi umumnya merupakan operasi yang membutuhkan hak pengguna super.
keadaan menjadi usang
Ada banyak asumsi yang mendasari operasi teks tempel, yang tidak benar lagi. Membaca segmen pra-dibuat dari penyimpanan swap tidak selalu lebih cepat dari permintaan sederhana dari file gambar yang sebenarnya dapat dieksekusi. Format sistem file menjadi lebih baik untuk pola pembacaan acak (bukan berurutan). Munculnya permintaan paging itu sendiri mengubah hal-hal, seperti halnya hal-hal seperti cache terpadu, perbaikan eksternal non-idempoten yang dihasilkan dari perbedaan dalam pencarian perpustakaan bersama, dan pengacakan tata letak ruang alamat.
Hari-hari bit teks lengket untuk gambar program yang dapat dieksekusi sudah lama berlalu. Bendera penanda teks tempel eksplisit untuk gambar program yang dapat dieksekusi dianggap usang oleh penulis 4.3BSD pada pertengahan 1980-an, misalnya.
Bacaan lebih lanjut
sumber
TSR
pada hari-hari DOS - "mengakhiri dan tetap penduduk". Namun, itu biasanya untuk hal-hal seperti pengandar perangkat yang proses lain yang berjalan kemudian perlu menelepon, dan mungkin usang ketika dunia pindah ke OS multi-threaded / multi-proses.bss
?CODE
segmen (dan pada OS / 2 read-onlyDATA
segmen) dari ongkos dan DLL (biasanya) dibagi di antara semua program yang berjalan. Tidak ada padanan nyata dari "stickiness", sebagian karena 32-bit OS / 2 versi 2.x dan 386 Enhanced Mode menggantikan swapping segmen dengan permintaan memori virtual, seperti yang dilakukan dunia Unix beberapa tahun sebelumnya, di kedua arena yang mempengaruhi perlu untuk segmentasi lengket dalam banyak cara yang sama.