Interrupt là gì

*

Note này nằm trong series tập hợp các khái niệm lộ diện khi bắt đầu làm thân quen với lập trình khối hệ thống nhúng, các khái niệm này có thể bắt mối cung cấp từ thương hiệu thiết bị, tên hiện tượng hoặc một kỹ năng nào đó, ….

Bạn đang xem: Interrupt là gì

Khái niệm đầu tiên mà tôi mong muốn liệt kê là interrupt. 

Interrupt hoàn toàn có thể hiểu là 1 tín hiệu (tín hiệu thứ lý hoặc bộc lộ logic) bắn tới processor. Biểu hiện này gây ra bởi phần cứng hoặc phần mềm, đại diện cho một sự kiện cần được up load ngay lập tức.

Tín hiệu thiết bị lý hoàn toàn có thể hiểu là dấu hiệu phát sinh từ các nguồn thiết bị lý (vi điều khiển, nút nhấn, công tắc, …….), hoàn toàn có thể đo – đếm được.

Tín hiệu logic có thể hiểu là những lệnh, các lời call hàm….

Hardware interrupt: thuộc dạng hình asynch. Hành vi init hardware interrupt còn được gọi là IRQ. Con số hardware interrupt bị số lượng giới hạn bởi số đường IRQ của processor.

Software interrupt: thuộc hình trạng synch, gây nên bởi exceptional condition vào nội trên processor (trường phù hợp này có thể gọi là exception hoặc trap), hoặc gây ra bởi một instruction quan trọng đặc biệt trong instruction set. Số lượng software interrupt có vẻ như như không bị giới hạn

Interrupt tương tự với signal, khác hoàn toàn duy duy nhất giữa chúng là:

signal được áp dụng cho IPC, gồm trung gian là kernel (mediated by the kernel) với được xử lí vày processes (handled by process),

interrupt thì có trung gian là processor (mediated by processor) và xử lý bởi vì kernel.

Kernel rất có thể pass một interrupt dưới dạng một signal tới process tạo ra nó.

Interrupt là một kĩ thuật phổ cập áp dụng trong computer multitasking, đặc biệt là RTC. Cố gắng thể, hardware interrupt giúp cải thiện hiệu năng vì nó giúp phần cứng chưa phải wait vào một vòng lặp vô vàn của phương thức polling. Có nghĩa là trong cơ hội “chờ đợi” interrupt xảy ra, hệ thống vẫn rất có thể làm những việc khác, nếu có interrupt, khối hệ thống mới trợ thì ngưng quá trình hiện trên để chuyển qua xử lý interrupt thông sang một Interrupt Handler hoặc Interrupt Service Routine (ISR)

Có thể phân một số loại interrupt theo 5 nhánh sau:

Maskable Interrupt – IRQ: hardware interrupt rất có thể bỏ qua nhờ thông số kỹ thuật một bit vào IMR – interrupt mask register.

Non-maskable Interrupt – NMI: hardware interrupt không có Bit-mask đi kèm. NMI có thể là những interrupt ko thể làm lơ hoặc là interrupt của những task có độ ưu tiên cao nhất (liên quan 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 ra bởi một processor để interrupt processor không giống (trong khối hệ thống nhiều processor)

Software interrupt: interrupt vị processor tạo thành khi thực hiện một lệnh. Software interrupt thường dùng để làm implement system calls do nó hay kéo theo một subroutine calls cùng với sự biến hóa trong CPU ring level.

Spurious interrupt: hardware interrupt không muốn muốn. Thường xuyên được tạo thành bởi system condition.

Cũng hoàn toàn có thể phân các loại interrupt theo 2 hình dáng như sau (dựa vào tác đọng của chính nó lên tâm lý của hệ thống lúc xảy ra interrupt):

precise interrupt: là loại interrupt khi xảy ra thì đảm bảo an toàn 4 tính chất sau mang lại hệ thống:

Thanh ghi PC được lưu giữ lại

Tất cả lệnh nằm trước vị trí bây chừ của PC được tiến hành hoàn chỉnh

Các lệnh nhưng mà PC chưa trỏ qua thì không thực hiện.

Trạng thái thực thi những lệnh nhưng PC sẽ trỏ qua được giữ lại

imprecise interrupt là một số loại interrupt khi xẩy ra không đảm bảo 4 đặc thù trên đến hệ thống.

Ta vẫn còn một giải pháp khác nhằm phân loại interrupt như sau:

Level- triggered – ngắt theo mức: là một trong những interrupt báo cho biết việc lộ diện của nó vì việc duy trì interrupt line ngơi nghỉ mức xúc tích cao hoặc thấp. Một thiết bị hy vọng bắn ra level-triggered interrupt sẽ bảo trì IRQ line của nó ở tầm mức ACTIVE (có thể là high hoặc low tùy tư tưởng của nsx), và bảo trì level đó cho tới khi ISR hoàn tất. Level-triggered interrupt line hoàn toàn có thể đựa phân tách sẽ giữa các thiết bị. Line này cần phải có pull-up hoặc pull-down resistor nhằm line này tự động hóa về cực hiếm mặc định khi không có interrupt xảy ra. Điểm hạn chế của đẳng cấp interrupt này là interrupt của những thiết bị gồm mức ưu tiên cao hoàn toàn có thể “che mất” interrupt của các thiết bị gồm mức ưu tiên rẻ hơn….

Edge-triggered – ngắt sườn: là một trong kiểu interrupt xẩy ra khi có sự biến đổi của interrupt line (đi tự cao-thấp hoặc rẻ – cao), hay nói cách khác là lúc interrupt signal gồm sự thay đổi giá trị (tăng hoặc giảm). Những thiết bị gồm thể share 1 edge-triggered interrupt line.

Hybrid Interrupt – kiểu lai: Một số khối hệ thống sử dụng phối kết hợp cả 2 một số loại ngắt vừa nêu làm việc trên. Thứ hạng lai này thường áp dụng với NMI đầu vào (non-maskable interrupt).

Xem thêm: Cách Kẻ Dòng Trong Word Vô Cùng Đơn Giản, Kẻ Dòng Trong Word

Message – signaled – interrupt dựa trên message: Interrupt kiểu này không sử dụng hardware interrupt line như các interrupt vừa liệt kê. Gắng vào đó, nó nhờ cất hộ một message trên một kênh liên lạc bình thường (thường là bus của hệ thống) để request for service. Mesage-signaled có tương đối nhiều nét tương đồng với edge-triggered interrupt,.

Doorbell: định nghĩa này dùng để mô tả một phép tắc khi mà phần mềm rất có thể “thông báo” với hartware rằng “còn một số việc yêu cầu hoàn thành”. Thông thường phần mềm sẽ đựat dữ liệu vào một vùng nhớ đã có được “thống nhất” với “rung chuông báo hiệu” bằng phương pháp ghi vào vùng nhớ không giống với vùng nhớ đã được thống nhất. Vùng nhớ không giống này còn được gọi là doorbell region. Có tương đối nhiều doorbell phục vụ các mục tiêu khác nhau

Độ ưu tiên giữa các interrupts – interrupt priorities

Do interrupt là asynch sự kiện (hardware interrupt) cần processor đề nghị định nghĩa ra những mức độ ưu tiên cho những interrupt nhằm xử lý tình huống nhiều interrupt xẩy ra đồng thời. Các mức độ ưu tiên này được ghi trong doc của processor.

Trong trường phù hợp interrupt tất cả độ ưu tiên thấp đang được xử lý thì xảy ra interrupt có ưu tiên cao hơn nữa thì interrupt ưu tiên thấp sẽ ảnh hưởng tạm giới hạn xử lí… hành vi này điện thoại tư vấn là interrupt nesting,

Cần để ý kích thước của stack lúc nesting interrupt, mỗi ISR của interrupt được nest buộc phải lưu giá chỉ trị các thanh ghi của chính nó trong stack, việc này hoàn toàn có thể dẫn cho tới stackoverflow nếu không kiểm soát đúng chuẩn kích thước stack.

Interrupt priorities được set vì chưng phần cứng, phần mềm hoặc cả 2.

Ta ko thể thao tác với global interrupt flags bằng ngôn ngữ C, gắng vào đó, cần dùng asembly.

Interrupt Mapping

Khi một interrupt xảy ra và không xẩy ra từ chối cách xử lý thì processor sẽ nhảy cho ISR – tập hợp những đoạn code được xây dựng từ trước để cách xử lý interrupt tương ứng. Để đảm bảo an toàn được ISR tương xứng với interrupt vừa xảy ra, cần có một phương pháp mapping thân ISR và interrupt source.

Cơ chế mapping này tồn tại bên dưới dạng interrupt vector table. Nó là 1 mảng các con trỏ hàm (pointer to lớn function, Processor sẽ sử dụng một số lượng được gán đến từng interrupt có tác dụng index để coi sóc mảng này. Và quý hiếm tại index tương ứng sẽ là nhỏ trỏ hàm trỏ cho tới ISR rất cần phải thực thi.

Việc cài đặt ISR cho tất cả interrupt là đề xuất thiết, kể cả với đông đảo interrupts chưa được sử dụng trong hệ thống (tránh tình trạng khối hệ thống going off into the weeds – mất kiểm soát). Nếu cảm giác việc thiết lập ISR đến từng interrupt không sử dụng là một việc tốn thời gian, thông thường sta tất cả thể cài đặt một ISR chung cho các interrupt không sử dụng.

ISR – Interrupt Service Routine

Mục đích của chúng ta là không để interrupt tác động tới quá trình processor triển khai chương trình hiện tại nên họ cần viết ISR càng gọn ghẽ càng tốt. Nếu cần thêm một số làm việc xử lý đối với một interrupt rõ ràng nào đó, hãy thao tác làm việc này ở ngoại trừ ISR bằng một hàm khác…. Hàm này được gọi là DSR – deffered service routine.

Thường thì ISR không sở hữu và nhận tham số truyền vào và không có giá trị trả về. Một ISR căn bạn dạng sẽ triển khai những quá trình sau:

Saving processor context

Acknowleding the interrupt

Restoring processor context

Một tư tưởng đi ngay tức thì với interrupt là interrupt latency – đấy là thông số đo khoảng thời gian từ lúc interrupt xẩy ra cho đén lúc processor ban đầu thực hiện tại ISR tương ứng.

Shared data và race conditions

Việc chia sẻ dữ liệu (share data) thân ISR và main program là một vấn đề khi kiến tạo embedded software có áp dụng interrupt.

Race condition là một trường hợp xảy ra lúc kết quả biến hóa dựa trên thứ tự tiến hành các lệnh vào main code với ISR. Yêu cầu tránh trường hợp này.

Race condition được coi là rất khó khăn phát hiện vày interrupt là asynch event và 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à một đoạn chương trình yêu cầu được thực hiện liên tục từ đầu đến cuối, ko được phép xảy ra interrupt chính giữa (Trong ngôn từ C hoàn toàn có thể chỉ là 1 dòng lệnh nhưng trên thực tế, phải tới 4-5 cái lệnh asm tương tự…).

Giải pháp cho race condition đó là disable interrupt trước lúc đi vào thực hiện critical section với enable interrupt khi sẽ thực thi chấm dứt critical section dồng thời hạn chế tối nhiều phần lượng cùng độ lâu năm của critical section.

link tải 567 live app | W88Vuive | tải app qqlive apk | iwin - Game đánh bài online