GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara procfs dan sysfs?

Pada awalnya (jauh di Unix), cara program mengetahui tentang proses yang berjalan pada sistem adalah dengan langsung membaca struktur proses dari memori kernel (membuka /dev/mem, dan menafsirkan data mentah secara langsung). Beginilah cara kerja perintah 'ps' pertama. Seiring waktu, beberapa informasi tersedia melalui panggilan sistem.

Namun, ini adalah bentuk yang buruk untuk mengekspos data sistem secara langsung ke ruang pengguna melalui/dev/mem, dan menjengkelkan untuk terus-menerus membuat panggilan sistem baru setiap kali Anda ingin mengekspor beberapa bagian baru dari data proses, sehingga metode yang lebih baru dibuat. untuk mengakses data terstruktur untuk aplikasi ruang pengguna untuk mencari tahu tentang atribut proses. Ini adalah sistem file /proc. Dengan /proc, antarmuka dan struktur (direktori dan file) dapat tetap sama, meskipun struktur data yang mendasarinya di kernel berubah. Ini jauh lebih tidak rapuh daripada sistem sebelumnya, dan skalanya lebih baik.

Filesystem /proc awalnya dirancang untuk mempublikasikan informasi proses dan beberapa atribut sistem kunci, yang diperlukan oleh 'ps', 'top', 'free' dan beberapa utilitas sistem lainnya. Namun, karena mudah digunakan (baik dari sisi kernel maupun sisi ruang pengguna), ini menjadi tempat pembuangan untuk berbagai macam informasi sistem. Juga, ia mulai mendapatkan file baca/tulis, yang akan digunakan untuk menyesuaikan pengaturan dan mengontrol pengoperasian kernel atau berbagai subsistemnya. Namun, metodologi penerapan antarmuka kontrol bersifat ad-hoc, dan /proc segera berkembang menjadi kekacauan yang rumit.

Sysfs (atau /sys filesystem) dirancang untuk menambahkan struktur pada kekacauan ini dan menyediakan cara yang seragam untuk mengekspos informasi sistem dan titik kontrol (atribut sistem dan driver yang dapat diatur) ke ruang pengguna dari kernel. Sekarang, kerangka kerja driver di kernel secara otomatis membuat direktori di bawah /sys saat driver didaftarkan, berdasarkan jenis driver dan nilai dalam struktur datanya. Ini berarti driver dari jenis tertentu semuanya akan memiliki elemen yang sama yang diekspos melalui sysfs.

Banyak informasi sistem lama dan titik kontrol masih dapat diakses di /proc, tetapi semua bus dan pengemudi baru harus membuka info dan titik kontrol mereka melalui sysfs.


Apa perbedaan antara procfs dan sysfs?

proc adalah yang lama, kurang lebih tanpa aturan dan struktur. Dan pada titik tertentu diputuskan bahwa proc agak terlalu kacau dan diperlukan cara baru.

Lalu sysfs telah dibuat, dan hal-hal baru yang ditambahkan dimasukkan ke dalam sysfs seperti informasi perangkat.

Jadi dalam beberapa hal mereka melakukan hal yang sama, tetapi sysfs sedikit lebih terstruktur.

Mengapa dibuat sebagai sistem file?

Filosofi UNIX memberi tahu kita bahwa semuanya adalah "file", oleh karena itu dibuat agar berfungsi sebagai file.

Seperti yang saya pahami, proc hanyalah sesuatu untuk menyimpan yang langsung tanpa memperhatikan proses yang berjalan di sistem.

Bagian-bagian itu selalu ada dan mungkin tidak akan pernah dipindahkan ke sysfs .

Tapi ada lebih banyak barang lama yang bisa Anda temukan di proc , yang belum dipindahkan.


procfs memungkinkan file_operations arbitrer , sysfs lebih terbatas

  • entri procfs menerima file_operations struct, yang berisi penunjuk fungsi yang menentukan apa yang terjadi pada setiap panggilan sistem berbasis file, mis. open , read , mmap , dll., dan Anda dapat mengambil tindakan sewenang-wenang dari situ.

    Contoh minimal:

    • Bagaimana /proc/* kerja? | Pengguna Super
    • proc_create() contoh untuk modul kernel | Stack Overflow
  • sysfs lebih dibatasi dalam pengertian berikut:

    • Anda hanya menerapkan dua metode show dan store , yang digunakan Linux untuk mengimplementasikan open , close , read , write dan lseek untukmu. Lihat juga:Bagaimana cara melampirkan operasi file ke atribut sysfs di driver platform? | Stack Overflow
    • digabungkan erat dengan kobject

    Contoh minimal:Cara membuat atribut kelas sysfs sederhana di kernel Linux v3.2 | Stack Overflow


Linux
  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Perbedaan Antara Perintah Menghentikan dan Mematikan?

  3. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  1. Apa perbedaan antara fsck dan e2fsck?

  2. Apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux?

  3. Apa perbedaan antara $(CC) dan $CC?

  1. Apa perbedaan antara strtok_r dan strtok_s di C?

  2. Apa perbedaan antara adduser dan useradd?

  3. Apa perbedaan antara ls dan l?