Vietnamese (machine translation)

Lưu ý

Mục đích của file này là để độc giả tiếng Việt có thể đọc và hiểu tài liệu nhân kernel dễ dàng hơn, không phải để tạo ra một nhánh tài liệu riêng. Nếu bạn có bất kỳ nhận xét hoặc cập nhật nào cho file này, vui lòng thử cập nhật file tiếng Anh gốc trước. Nếu bạn thấy có sự khác biệt giữa bản dịch và bản gốc, hoặc có vấn đề về bản dịch, vui lòng gửi góp ý hoặc patch cho người dịch của file này, hoặc nhờ người bảo trì và người review tài liệu tiếng Việt giúp đỡ.

Bản gốc:

Delay and sleep mechanisms

Người dịch:

Google Translate (machine translation)

Phiên bản gốc:

8541d8f725c6

Cảnh báo

Tài liệu này được dịch tự động bằng máy và chưa được review bởi người dịch. Nội dung có thể không chính xác hoặc khó hiểu ở một số chỗ. Khi có sự khác biệt với bản gốc, bản gốc luôn là chuẩn. Bản dịch chất lượng cao (được review) được đặt trong thư mục vi_VN/.

Cơ chế trì hoãn và ngủ

Tài liệu này tìm cách trả lời câu hỏi phổ biến: “Cái gì là RightWay (TM) để chèn độ trễ?”

Câu hỏi này thường gặp nhất bởi những người viết tài xế, những người phải giải quyết sự chậm trễ của phần cứng và ai có thể không phải là người thân thiết nhất quen thuộc với hoạt động bên trong của Linux Kernel.

Bảng sau đây cung cấp cái nhìn tổng quan sơ bộ về chức năng hiện có ‘gia đình’ và những hạn chế của họ. Bảng tổng quan này không thay thế bảng đọc mô tả chức năng trước khi sử dụng!

*delay()

usleep_range*()

*sleep()

fsleep()

busy-wait loop

hrtimers based

timer list timers based

combines the others

Usage in atomic Context

yes

no

no

no

precise on “short intervals”

yes

yes

depends

yes

precise on “long intervals”

Do not use!

yes

max 12.5% slack

yes

interruptible variant

no

yes

yes

no

Lời khuyên chung cho bối cảnh phi nguyên tử có thể là:

  1. Sử dụng ZZ0000ZZ bất cứ khi nào không chắc chắn (vì nó kết hợp tất cả các ưu điểm của những người khác)

  2. Sử dụng ZZ0001ZZ bất cứ khi nào có thể

  3. Sử dụng ZZ0002ZZ bất cứ khi nào độ chính xác của ZZ0003ZZ không đủ

  4. Sử dụng ZZ0004ZZ cho độ trễ rất ngắn

Tìm một số thông tin chi tiết hơn về chức năng ‘gia đình’ trong phần tiếp theo phần.

Nhóm chức năng ZZ0000ZZ

Các chức năng này sử dụng ước tính nhanh chóng về tốc độ đồng hồ và sẽ bận chờ đủ số chu kỳ vòng lặp để đạt được độ trễ mong muốn. udelay() là cơ bản triển khai và ndelay() cũng như mdelay() là các biến thể.

Các chức năng này chủ yếu được sử dụng để thêm độ trễ trong bối cảnh nguyên tử. Xin vui lòng thực hiện hãy chắc chắn tự hỏi bản thân trước khi thêm độ trễ vào bối cảnh nguyên tử: Đây có thực sự là được yêu cầu?

Nhóm chức năng ZZ0000ZZ và ZZ0001ZZ

Các chức năng này sử dụng bộ đếm thời gian hoặc bộ đếm thời gian trong danh sách bộ hẹn giờ để cung cấp các yêu cầu thời gian ngủ. Để quyết định chức năng nào là phù hợp để sử dụng, tính đến một số thông tin cơ bản:

  1. giờ đắt hơn vì họ đang sử dụng cây rb (thay vì băm)

  2. giờ ngủ đắt hơn khi thời gian ngủ được yêu cầu là lần đầu tiên bộ đếm thời gian có nghĩa là phần cứng thực sự phải được lập trình

  3. bộ hẹn giờ trong danh sách hẹn giờ luôn cung cấp một số loại thời gian trễ vì chúng dựa trên thời gian nhanh chóng

Lời khuyên chung được lặp lại ở đây:

  1. Sử dụng ZZ0000ZZ bất cứ khi nào không chắc chắn (vì nó kết hợp tất cả các ưu điểm của những người khác)

  2. Sử dụng ZZ0001ZZ bất cứ khi nào có thể

  3. Sử dụng ZZ0002ZZ bất cứ khi nào độ chính xác của ZZ0003ZZ không đủ

Trước tiên hãy kiểm tra mô tả hàm fsleep() và để tìm hiểu thêm về độ chính xác, vui lòng kiểm tra mô tả hàm msleep().

ZZ0000ZZ

ZZ0000ZZ