Meta-cevap: Linux çekirdeğinde meydana gelen tüm ham maddeler lkml'den (Linux çekirdek posta listesi) geçiyor . Açıklayıcı özetler için, lwn'u okuyun veya arayın (Linux haftalık haberler) .
Cevap: Gönderen ioctl () yeni yol ile Jonathan Corbet :
ioctl()
Büyük Çekirdek Kilidi (BKL) altında çalışan, çekirdeğin kalan kısımlarından biridir. Geçmişte, BKL kullanımı uzun süren ioctl()
yöntemlerin ilgisiz süreçler için uzun gecikmeler yaratmasını mümkün kılmıştır .
2.6.11'e giren unlocked_ioctl
ve compat_ioctl
eklenen yamanın açıklamalarını takip eder . Çıkarılması ioctl
alanında 2.6.36 yılında, çok sonradan oldu.
Açıklama: Yürütüldüğünde ioctl
, Büyük Çekirdek Kilidi'ni (BKL) aldı, böylece aynı anda başka hiçbir şey yürütülemedi. Bu çok işlemcili bir makinede çok kötü, bu yüzden BKL'den kurtulmak için büyük bir çaba vardı. İlk unlocked_ioctl
olarak tanıtıldı. Her sürücü yazarının bunun yerine hangi kilidi kullanacağını seçmesini sağlar. Bu zor olabilir, bu nedenle eski sürücülerin hala çalıştığı (kullanan ioctl
) ancak yeni sürücülerin geliştirilmiş arayüzü ( unlocked_ioctl
) kullanabileceği bir geçiş dönemi vardı . Sonunda tüm sürücüler dönüştürüldü ve ioctl
kaldırıldı.
compat_ioctl
aslında aynı anda eklenmesine rağmen ilgisizdir. Amacı 32 bitlik kullanıcı programı programlarının ioctl
64 bitlik bir çekirdeğe çağrı yapmasını sağlamaktır . Son argümanın anlamı ioctl
sürücüye bağlıdır, bu yüzden sürücüden bağımsız bir dönüşüm yapmanın bir yolu yoktur.
unlocked_ioctl
Bu olur mu bitti mi? Dosya başına bir işlev göstergesinin kullanılması (bu durumda astruct file
) yakın gibi görünüyorum.unlocked_ioctl
Sürücü başlatma sırasındaki karakter dosyaları için kayıtlı mımknod
?