An nguyên tắc giáo dục là: Không có một điều như một câu hỏi ngu ngốc. Ý tưởng cơ bản đằng sau điều này là mọi người học bằng cách hỏi. Tôi được yêu cầu: "Bạn có thể trình bày và giải thích ở cấp độ lập trình những gì sẽ xảy ra nếu mọi công việc có thể thực hiện tất cả các hướng dẫn."Cách xử lý ngắt Inter Interor
tôi đã làm cho đoạn code
main(){
_asm_("cli;");
while(1);
}
và giải thích nó (hệ thống đông lạnh cho tốt- UP)
Sau đó, tôi được hỏi: "Có thể đưa ra một ví dụ để hệ thống mà không đóng băng ngay cả việc ngắt thanh toán bù trừ này cũng được thực hiện? "
tôi đã sửa đổi các ví dụ trước:
tôi đã làm cho đoạn code
main(){
_asm_("cli;");
i=i/0;
while(1);
}
và giải thích nó.
trivially: Nếu chúng ta có nhu cầu phân trang i = i/0 nguyên nhân đầu tiên một lỗi trang (trang dữ liệu không có mặt) và một nhiệm vụ khác có thể được dự kiến sẽ chạy ngắt được kích hoạt trong đĩa đọc và sau trên chia cho số không sẽ ném nhiệm vụ này đi cho tốt.
Nhưng câu trả lời dựa trên UP. Còn SMP thì sao? Tôi phải nói rằng câu trả lời là không đầy đủ. Nó vẫn đủ dễ dàng để xây dựng:
int i;
main(){
for(i=0;i<100;i++)// Suppose we have less than 100 CPUs
if(fork())
{ sleep(5);//The generating task has (most probable) time to do all forks
_asm_("cli;");
while(1);
}
}
đó sẽ vô hiệu hóa ngắt cho tất cả CPU, bởi vì tất cả các CPU được một nhiệm vụ độc để chạy.
Thậm chí cho đến nay một câu hỏi ngu ngốc đã tiết lộ nhiều điều tốt để học cho người mới bắt đầu: hướng dẫn đặc quyền, phân trang, xử lý lỗi, lên lịch trong DMA, nĩa ..... Nhưng vẫn còn một chút nghi ngờ (xấu hổ với tôi) về chương trình đầu tiên chạy trên SMP.
Một CPU có bị xóa vĩnh viễn hay không? Các CPU khác tiếp tục và có thể gửi re_schedule() thông báo IPI. Điều gì xảy ra sau đó? Nó có thể dễ dàng để suy đoán rằng CPU đông lạnh không thức dậy, bởi vì ngắt bị vô hiệu hóa. Nhưng chắc chắn phải biết nhiều hơn.
Câu hỏi của tôi là: Interruptor Interrupt (IPI) có thể che giấu hoặc không che giấu được không? Ý tôi là trong các triển khai "phổ biến" phổ biến nhất?
Xin lỗi câu hỏi ngu ngốc của tôi. Không khó để tìm ra câu trả lời. Tôi sẽ tìm nó. Tôi có nghĩa là số pin bị gián đoạn (nói với mặt nạ, tôi đoán).
Câu trả lời của riêng tôi - đúng không? Tôi đã nghiên cứu vấn đề này, bởi vì không ai khác thích nó, đến với những suy nghĩ sau:
Với các ứng dụng thời gian thực quan trọng mà chúng tôi đã có trong một thời gian dài một bộ đếm thời gian giám sát (HW làm gián đoạn cpu để trả lời bằng cách nào đó "Tôi đang sống"). Ví dụ: chúng tôi có máy tính điều khiển chính và máy tính dự phòng xử lý hệ thống nếu máy tính chính bị hỏng.
Còn Linux thì sao? Loại cơ quan giám sát nào có chúng tôi? Chúng tôi có thể biên dịch hạt nhân Linux có hoặc không có cơ quan giám sát.
Trình giám sát Linux làm gì? Trên nhiều (!) x86/x86-64 loại phần cứng có một tính năng cho phép chúng tôi tạo ra 'cơ chế giám sát NMI ngắt'. Thậm chí có thể vô hiệu hóa cơ quan giám sát NMI trong thời gian chạy bằng cách viết "0" tới/proc/sys/kernel/nmi_watchdog. Nếu bất kỳ CPU nào trong hệ thống không thực hiện ngắt quãng thời gian cục bộ trong hơn 5 giây, APIC sẽ cố gắng khắc phục tình huống bằng cách ngắt không che giấu được (cpu thực thi trình xử lý và giết chết quy trình)! (SCC Linux là một trường hợp khác với NMI.)
Câu trả lời của tôi (trong câu hỏi ban đầu) được dựa trên hệ thống không có cơ quan giám sát! Có vấn đề để trả lời ở cấp độ chung và đưa ra các ví dụ dựa trên một số hệ thống cố định. Các câu trả lời có thể đúng hoặc không phụ thuộc vào cpu và cấu hình và cài đặt.
Dù sao, nói về NMI có ý nghĩa gì không? Đã làm nó?
Sau nhiều nghiên cứu, tôi trả lời câu hỏi của riêng mình (không ai thích nó). – SikaS