Có biến thể thô của mỗi khóa quay có sẵn trong hạt nhân Linux, tôi muốn biết cách sử dụng của nó? ví dụ:Sự khác nhau giữa spin_lock và raw_spin_lock() là gì?
raw_spin_lock(), raw_spin_lock_irqsave() vv
Có biến thể thô của mỗi khóa quay có sẵn trong hạt nhân Linux, tôi muốn biết cách sử dụng của nó? ví dụ:Sự khác nhau giữa spin_lock và raw_spin_lock() là gì?
raw_spin_lock(), raw_spin_lock_irqsave() vv
spin_lock*
chức năng làm tương tự như raw_spin_lock*
những cộng, khi gỡ lỗi khóa được kích hoạt (CONFIG_DEBUG_LOCK_ALLOC), thực hiện một số kiểm tra bổ sung khi chạy cho các hoạt động khóa, chẳng hạn như kiểm tra cho bế tắc. Các kiểm tra này được thực hiện bởi hệ thống con lockdep
.
Theo quy tắc, các chức năng spin_lock*
nên được sử dụng bất cứ khi nào có thể.
Chỉ trong trường hợp hiếm hoi của chính sách khóa rất phức tạp, khi lockdep
có thể tạo cảnh báo sai, có thể sử dụng các chức năng raw_spin_lock*
.
Ngoài ra, các chức năng raw_*
có thể được ưu tiên cho các chức năng phổ biến để giảm mức sử dụng bộ nhớ hoặc các lý do về hiệu suất. Nhưng nó phải là thời gian/không gian thực tế số đo, phản ánh các chiến thắng quan trọng từ việc sử dụng các tối ưu hóa này.
Sự khác biệt chính là spin_lock
biến thể ánh xạ thành raw_spin_lock
biến thể cho phi RT trong khi nếu CONFIG_PREEMPT_RT
được đặt, thì chúng ánh xạ tới rt_spin_lock có thể ngủ.
Bằng cách tách spin_lock khỏi các biến thể ngủ và không ngủ tùy thuộc vào việc chúng tôi có RT hay không, API spin_lock có thể được giữ nhất quán trên mã hạt nhân.
khi khóa có thể tạo cảnh báo sai? và spin_lock bình thường trong có thể ngủ trong khi raw_spin_lock không, có đúng không? –