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_ioctlve compat_ioctleklenen yamanın açıklamalarını takip eder . Çıkarılması ioctlalanı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_ioctlolarak 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 ioctlkaldırıldı.
compat_ioctlaslında aynı anda eklenmesine rağmen ilgisizdir. Amacı 32 bitlik kullanıcı programı programlarının ioctl64 bitlik bir çekirdeğe çağrı yapmasını sağlamaktır . Son argümanın anlamı ioctlsü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_ioctlBu 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_ioctlSürücü başlatma sırasındaki karakter dosyaları için kayıtlı mımknod?