Mức yêu cầu Ngắt (Interrupt Request Level ) Mức yêu cầu Ngắt (Interrupt Request Level ) Bởi: Khoa CNTT ĐHSP KT Hưng Yên Windows XP gán mức yêu cầu ngắt tới ngắt phần cứng tới chọn lựa vài kiện phần mềm Mỗi CPU có IRQL Chúng gắn nhãn mức IRQL khác với tên PASSIVE_LEVEL, APC_LEVEL,… Hình 4-1 minh họa phạm vi giá trị IRQL cho tảng x86 (Nói chung, giá trị số IRQL phụ thuộc vào tảng bạn nói nó) Hầu hết thời gian, máy tính thực kiểu người sử dụng PASSIVE_LEVEL Tất kiến thức bạn công việc hệ điều hành đa nhiệm áp dụng PASSIVE_LEVEL Điều đó, lập lịch biểu chặn trước luồng chỗ cuối phần chia thời gian hay luồng quyền ưu tiên bậc cao trở nên xứng đáng để chạy Những luồng khối tự ý họ đợi kiện để xuất Một hoạt động CPU cho ngắt hoạt động mà thực IRQL bậc cao Bạn phải đọc quy tắc cách máy tính làm Sự hết hạn thời gian ngắn kéo theo lập lịch biểu luồng DISPATCH_LEVEL Bộ lập lịch biểu làm luồng khác thời Khi IRQL trở lại PASSIVE_LEVEL, luồng khác chạy Trừ phi mà PASSIVE_LEVEL hoạt động không ngắt quãng hoạt động PASSIVE_LEVEL thứ hai Tôi nghĩ giải thích bắt bẻ tỉ mỉ tin tới mà đặt cho phép luồng chạy APC_LEVEL chặn trước luồng khác chạy PASSIVE_LEVEL Có lẽ phát biểu hữu ích quy tắc là: Một hoạt động CPU cho ngắt hoạt động điều thực IRQL bậc cao Tại hoạtt động DISPATCH_LEVEL treo lơ lửng để thực hoạt động khác IRQL then-current Từ CPU có IRQL mình, cho CPU máy tính đa xử lý để chạy IRQL điều chuẩn y tới IRQL CPU khác Trong mục tiếp theo, Tôi nói với bạn khóa xoay vòng, mà 1/5 Mức yêu cầu Ngắt (Interrupt Request Level ) kết hợp bên - - CPU đồng hóa hành vi IRQL với chế đóng cửa đa xử lý Tuy nhiên cho thời gian bắt đầu, câu chuyện gần tình cờ gặp CPU đơn CHÚ Ý: Thủ tục liên lạc không may DISPATCH_LEVEL có tên tương tự Những thủ tục liên lạc gọi quản lý vào/ra gửi yêu cầu vào/ra tới chúng DISPATCH_LEVEL gọi IRQL kernel thu phát luồng trước chạy định chạy luồng (Thu phát luồng chạy SYNCH_LEVEL, bạn quan tâm Đây DISPATCH_LEVEL máy xử lý đơn, bạn thật quan tâm.) Giữa DISPATCH_LEVEL PROFILE_LEVEL phòng cho mức ngắt phần cứng khác Nói chung, thiết bị mà phát sinh ngắt có IRQL mà định nghĩa thứ tự ưu tiên ngắt vis- as – vis đối diện thiết bị khác Một driver WDM khám phá IRQL ch) ngắt nó nhận yêu cầu IRP_MJ_PNP với mã IRP_MN_START_DEVICE chức phụ Mức ngắt thiết bị số nhiều tiết mục thông tin cấu hình qua tham số tới yêu cầu Chúng thường tham chiếu tới mức thiết bị IRQL, hay DIRQL cho ngắn DIRQL không mức yêu cầu đơn Khá hơn, IRQL cho ngắt có liên hệ với thiết bị thảo luận lúc Tổng kết, driver quan tâm với ba yêu cầu ngắt mức bình thường: • PASSIVE_LEVEL, nhiều liên lạc mà thủ tục vài thủ tục đặc biệt thực • DISPATCH_LEVEL, StartIo DPC mà thủ tục thực • DIRQL, ngắt dịch vụ thủ tục thực IRQL Thao tác Để minh họa quan trọng IRQL, tham chiếu tới Hình 4-2, mà minh họa trình tự thời gian hợp lý kiện CPU đơn Tại bắt đầu chuỗi, CPU thực PASSIVE_LEVEL Ở thời gian t1, ngắt đến thủ tục dịch vụ thực IRQL-1, mức DISPATCH_LEVEL PROFILE_LEVEL Rồi, Ở thời gian t2, ngắt khác đến thủ tục dịch vụ thực IRQL-2, mà IRQL-1 Vì quy tắc bàn luận, CPU tiếp tục dịch vụ ngắt Khi ngắt thủ tục dịch vụ hoàn thành thời gian t3, có lẽ đòi hỏi DPC Những thủ tục DPC thực DISPATCH_LEVEL Vậy thì, quyền ưu tiên cao xem xét hoạt động thủ tục dịch vụ cho ngắt thứ 2, mà thực Khi kết thúc t4, giả định khác xuất chờ đợi, DPC chạy 2/5 Mức yêu cầu Ngắt (Interrupt Request Level ) DISPATCH_LEVEL Khi kết thúc thường lệ DPC t5, IRQL bỏ lại PASSIVE_LEVEL Hình 4-2 Ưu tiên ngắt hành động IRQL so sánh với quyền ưu tiên luồng Quyền ưu tiên luồng khái niệm khác từ IRQL Quyền ưu tiên Luồng kiểm soát hoạt động lập lịch biểu việc định để chặn trước chạy luồng xâu thành chuỗi bắt đầu chạy bước " Quyền ưu tiên " mà có nghĩa IRQLs APC_LEVEL IRQL, kiểm soát chương trình thực văn cảnh luồng mà bên chúng thực IRQL Phân trang Một hệ việc chạy IRQL cao hệ thống trở nên khả việc dịch vụ lỗi trang Quy tắc hàm ý việc đơn giản phát biểu: Mã thực DISPATCH_LEVEL trang nguyên nhân lỗi Một liên quan quy tắc thủ tục trình điều khiển bạn mà điều thực hoặc DISPATCH_LEVEL phải có nhớ nonpaged Hơn nữa, tất liệu bạn truy nhập thủ tục 3/5 Mức yêu cầu Ngắt (Interrupt Request Level ) phải có nhớ nonpaged Cuối cùng, IRQL tăng lên, thủ tục hỗ trợ kernel-mode sẵn sàng cho sử dụng bạn Tài liệu DDK rõ ràng phát biểu hạn chế IRQL thủ tục hỗ trợ Chẳng hạn, mục vào cho KeWaitForSingleObject báo hai hạn chế: • Đối trượng gọi phải chạy DISPATCH_LEVEL • Nếu gọi nonzero thời gian chờ khoảng thời gian xác định gọi, đối tượng gọi phải chạy xác DISPATCH_LEVEL Kiểm soát hoàn toàn IRQL(Implicitly Controlling IRQL) Hầu hết thời gian, hệ thống gọi thủ tục trình điều khiển bạn IRQL cho hoạt động bạn giả định để thực Mặc dù không bàn luận chi tiết nhiều thủ tục này, muốn đưa cho bạn ví dụ điều mà thấy có nghĩa Bắt gặp bạn với yêu cầu vào/ra xuất quản lý vào/ra gọi số thủ tục liên lạc bạn để xử lý IRP Sự gọi thông thường xuất PASSIVE_LEVEL bạn có lẽ cần đển việc ngăn chặn luồng gọi hướng tới bạn có lẽ cần để gọi thủ tục hỗ trợ Bạn không ngăn chặn luồng IRQL bậc cao, tất nhiên, PASSIVE_LEVEL mức mà có hạn chế thủ tục hỗ trợ bạn gọi Mặc dù cho bạn để rõ ràng kiểm soát IRQL (và giải thích mục tiếp theo), có lý để làm thế, thư nhu cầu bạn mức mà hệ thống gọi bạn Vậy thì, bạn không cần phải nhận treo lên IRQL mà bạn thi hành thời điểm từ khoảng thời gian ngắn để: điều gần chắn mức độ xác cho công việc bạn vụ phải làm sau Kiểm soát rõ ràng IRQL (Explicitly Controlling IRQL ) Khi cần thiết, bạn tăng sau hạ thấp xuống IRQL xử lý thời việc gọi KeRaiseIrql KeLowerIrql Chẳng hạn, từ việc bên thủ tục chạy PASSIVE_LEVEL: KIRQL oldirql; ASSERT(KeGetCurrentIrql() ... PASSIVE _LEVEL: KIRQL oldirql; ASSERT(KeGetCurrentIrql ()