Interrupt là gì

Note này bên trong series tập hòa hợp những quan niệm xuất hiện lúc bắt đầu có tác dụng thân quen với xây dựng hệ thống nhúng, những quan niệm này rất có thể bắt đầu từ tên sản phẩm công nghệ, tên hiện tượng lạ hoặc một kinh nghiệm làm sao đó, ….
Bạn đang xem: Interrupt là gì
Khái niệm thứ nhất nhưng tôi mong muốn liệt kê là interrupt.
Interrupt có thể phát âm là 1 tín hiệu (biểu thị thiết bị lý hoặc biểu hiện logic) phun cho tới processor. Tín hiệu này gây nên bởi vì Hartware hoặc ứng dụng, thay mặt đại diện cho một sự kiện rất cần phải xử lý ngay lập tức mau chóng.
Tín hiệu trang bị lý rất có thể hiểu là tín hiệu tạo ra trường đoản cú các mối cung cấp thiết bị lý (vi điều khiển và tinh chỉnh, nút ít thừa nhận, công tắc, …….), có thể đo – đếm được.
Tín hiệu xúc tích có thể phát âm là những lệnh, những lời điện thoại tư vấn hàm….
Hardware interrupt: trực thuộc giao diện asynch. Hành hễ init hardware interrupt nói một cách khác là IRQ. Số lượng hardware interrupt bị số lượng giới hạn vì chưng số con đường IRQ của processor.
Software interrupt: trực thuộc phong cách synch, gây nên do exceptional condition vào nội tại processor (ngôi trường hợp này hoàn toàn có thể Điện thoại tư vấn là exception hoặc trap), hoặc gây nên vì một instruction quan trọng vào instruction phối. Số lượng software interrupt dường như nhỏng không trở nên giới hạn
Interrupt tựa như cùng với signal, biệt lập tuyệt nhất giữa chúng là:
signal được thực hiện cho IPC, có trung gian là kernel (mediated by the kernel) với được up load bởi vì processes (handled by process),
interrupt thì gồm trung gian là processor (mediated by processor) và xử lý vì kernel.
Kernel rất có thể pass một interrupt dưới dạng một signal tới process gây nên nó.
Interrupt là 1 trong kinh nghiệm phổ cập áp dụng vào computer multitasking, đặc biệt là RTC. Cụ thể, hardware interrupt góp nâng cao tính năng vị nó góp Hartware không hẳn wait vào một vòng lặp vô vàn của phương pháp polling. Tức là trong khi “ngóng đợi” interrupt xẩy ra, khối hệ thống vẫn rất có thể làm các câu hỏi không giống, giả dụ có interrupt, khối hệ thống mới tạm dừng công việc hiện giờ nhằm chuyển hẳn qua giải pháp xử lý interrupt thông sang 1 Interrupt Handler hoặc Interrupt Service Routine (ISR)
Có thể phân nhiều loại interrupt theo 5 nhánh sau:
Maskable Interrupt – IRQ: hardware interrupt rất có thể làm lơ dựa vào cấu hình một bit trong IMR – interrupt mask register.
Non-maskable Interrupt – NMI: hardware interrupt không có Bit-mask kèm theo. NMI có thể là các interrupt bắt buộc bỏ lỡ hay những interrupt của các task tất cả độ ưu tiên cao nhất (tương quan cho tới timers cùng watchdog timer…)
Inter-processor Interrupt IPI: một case đặc biệt quan trọng của interrupt, IPI được tạo thành do một processor để interrupt processor khác (trong hệ thống nhiều processor)
Software interrupt: interrupt bởi processor tạo nên lúc xúc tiến một lệnh. Software interrupt thường xuyên dùng làm implement system calls vì chưng nó thường kéo theo một subroutine calls với sự đổi khác trong CPU ring cấp độ.
Spurious interrupt: hardware interrupt không mong muốn. thường được tạo thành do system condition.
Cũng có thể phân nhiều loại interrupt theo 2 hình trạng như sau (phụ thuộc vào tác ứ đọng của nó lên trạng thái của hệ thống cơ hội xẩy ra interrupt):
precise interrupt: là các loại interrupt lúc xẩy ra thì bảo đảm an toàn 4 đặc thù sau mang đến hệ thống:
Thanh khô ghi PC được giữ lại
Tất cả lệnh ở trước địa điểm bây chừ của PC được thực thi trả chỉnh
Các lệnh mà PC chưa trỏ qua thì không thực hiện.
Trạng thái tiến hành những lệnh nhưng mà PC vẫn trỏ qua được giữ lại
imprecise interrupt là loại interrupt khi xảy ra ko bảo vệ 4 đặc thù bên trên đến hệ thống.
Ta vẫn tồn tại một bí quyết khác nhằm phân các loại interrupt như sau:
Level- triggered – ngắt theo mức: Là một interrupt thông tin việc xuất hiện của nó do câu hỏi gia hạn interrupt line ở mức xúc tích cao hoặc rẻ. Một đồ vật mong mỏi phun ra level-triggered interrupt đã bảo trì IRQ line của nó tại mức ACTIVE (có thể là high hoặc low tùy có mang của nsx), và gia hạn màn chơi đó cho tới khi ISR hoàn chỉnh. Level-triggered interrupt line có thể đựa phân chia đang thân những sản phẩm công nghệ. Line này cần phải có pull-up hoặc pull-down resistor nhằm line này tự động về quý giá khoác định Lúc không tồn tại interrupt xảy ra. Điểm hạn chế của loại interrupt này là interrupt của những vật dụng tất cả nấc ưu tiên cao rất có thể “bịt mất” interrupt của những thứ tất cả nút ưu tiên tốt hơn….
Edge-triggered – ngắt sườn: Là một giao diện interrupt xẩy ra khi gồm sự thay đổi của interrupt line (đi trường đoản cú cao-tốt hoặc rẻ – cao), tuyệt nói cách khác là khi interrupt signal gồm sự thay đổi cực hiếm (tăng hoặc giảm). Các thứ rất có thể share 1 edge-triggered interrupt line.
Hybrid Interrupt – đẳng cấp lai: Một số khối hệ thống thực hiện phối hợp cả hai các loại ngắt vừa nêu ở bên trên. Kiểu lai này hay áp dụng cùng với NXiaoMi MI input đầu vào (non-maskable interrupt).
Xem thêm: Chi Tiết Bản Đồ Quy Hoạch Phường Hiệp Bình Chánh Thủ Đức, Hiệp Bình Chánh
Message – signaled – interrupt dựa vào message: Interrupt mẫu mã này sẽ không áp dụng hardware interrupt line nlỗi những interrupt vừa liệt kê. Ttốt vào kia, nó gửi một message bên trên một kênh liên lạc bình thường (thường xuyên là bus của hệ thống) để request for service. Mesage-signaled có rất nhiều nét tương đương cùng với edge-triggered interrupt,.
Doorbell: Khái niệm này dùng để biểu thị một qui định Khi mà lại phần mềm có thể “thông báo” với phần cứng rằng “còn một vài việc đề xuất trả thành”. Đôi khi ứng dụng vẫn đựat dữ liệu vào một trong những vùng lưu giữ đã được “thống nhất” cùng “rung chuông báo hiệu” bằng phương pháp ghi vào vùng lưu giữ khác với vùng lưu giữ đã có được thống độc nhất. Vùng lưu giữ không giống này còn được gọi là doorbell region. Có những doorbell Giao hàng những mục đích không giống nhau
Độ ưu tiên thân những interrupts – interrupt priorities
Do interrupt là asynch event (hardware interrupt) đề nghị processor đề nghị có mang ra các cường độ ưu tiên cho các interrupt nhằm cách xử lý trường hợp nhiều interrupt xẩy ra đôi khi. Các mức độ ưu tiên này được ghi vào doc của processor.
Trong ngôi trường thích hợp interrupt bao gồm độ ưu tiên rẻ đang rất được xử trí thì xẩy ra interrupt tất cả ưu tiên cao hơn thế thì interrupt ưu tiên thấp sẽ bị tạm ngưng xử lí… hành động này hotline là interrupt nesting,
Cần để ý size của staông chồng lúc nesting interrupt, Mỗi ISR của interrupt được nest yêu cầu giữ cực hiếm những thanh hao ghi của chính nó trong staông xã, việc này rất có thể mang tới stackoverflow nếu không kiểm soát đúng đắn kích cỡ staông xã.
Interrupt priorities được set vì chưng phần cứng, phần mềm hoặc cả hai.
Ta chẳng thể thao tác làm việc với global interrupt flags bởi ngôn ngữ C, chũm vào kia, phải sử dụng asembly.
Interrupt Mapping
khi một interrupt xẩy ra và không bị lắc đầu xử trí thì processor sẽ nhảy cho ISR – tập đúng theo các đoạn code được thiết kế từ trước để xử trí interrupt khớp ứng. Để đảm bảo an toàn được ISR khớp ứng cùng với interrupt vừa xẩy ra, cần có một qui định mapping thân ISR và interrupt source.
Cơ chế mapping này vĩnh cửu dưới dạng interrupt vector table. Nó là 1 trong mảng những bé trỏ hàm (pointer khổng lồ function, Processor đã áp dụng một con số được gán cho từng interrupt làm index nhằm săn sóc mảng này. Và cực hiếm trên index khớp ứng sẽ là bé trỏ hàm trỏ tới ISR rất cần phải triển khai.
Việc cài đặt ISR mang lại toàn bộ interrupt là cần thiết, kể cả với số đông interrupts không được áp dụng vào hệ thống (tránh triệu chứng khối hệ thống going off inlớn the weeds – mất kiểm soát). Nếu cảm thấy vấn đề cài đặt ISR mang đến từng interrupt chưa sử dụng là một trong những bài toán tốn thời hạn, chung sta có thể setup một ISR thông thường cho những interrupt không áp dụng.
ISR – Interrupt Service Routine
Mục đích của bọn họ là ko để interrupt ảnh hưởng cho tới quy trình processor thực hiện chương trình hiện giờ cần chúng ta đề nghị viết ISR càng nthêm gọn càng tốt. Nếu cần thêm một số thao tác giải pháp xử lý đối với một interrupt cụ thể làm sao kia, hãy thao tác làm việc này sinh hoạt ko kể ISR bởi một hàm khác…. Hàm này được hotline là DSR – deffered service routine.
Thông thường ISR không sở hữu và nhận tsay đắm số truyền vào với không tồn tại quý hiếm trả về. Một ISR căn uống bản đã triển khai hồ hết các bước sau:
Saving processor context
Acknowleding the interrupt
Restoring processor context
Một tư tưởng kèm theo với interrupt là interrupt latency – đấy là thông số đo khoảng thời hạn tự Khi interrupt xẩy ra đến đén khi processor bắt đầu triển khai ISR khớp ứng.
Shared data & race conditions
Việc share dữ liệu (share data) thân ISR cùng main program là 1 trong những vấn đề khi xây cất embedded software tất cả sử dụng interrupt.
Race condition là một trong tình huống xẩy ra khi kết quả biến đổi dựa vào thứ trường đoản cú tiến hành những lệnh trong main code cùng ISR. Cần tách tình huống này.
Race condition được xem là siêu nặng nề vạc hiện tại vì chưng interrupt là asynch event cùng race condition thì chưa hẳn lúc nào thì cũng xuất hiện….
Khái niệm race condition kéo theo khái niệm critical section. Critical section là 1 trong những đoạn lịch trình đề xuất được thực hiện liên tiếp từ đầu cho cuối, ko được phxay xảy ra interrupt trọng tâm (Trong ngữ điệu C hoàn toàn có thể chỉ là 1 trong những dòng lệnh tuy thế trên thực tế, đề xuất tới 4-5 cái lệnh asm tương tự…).
Xem thêm: Tổng Lãnh Sự Quán Tiếng Anh Là Gì, Tổng Lãnh Sự Quán Nhật Bản Tại Tp
Giải pháp đến race condition chính là disable interrupt trước lúc đi vào thực hiện critical section với enable interrupt khi vẫn thực hiện chấm dứt critical section dồng thời tinh giảm tối đa số lượng cùng độ nhiều năm của critical section.