Khi nhận được một tín hiệu ngắt CPU sẽ

Khi nhận được một tín hiệu ngắt CPU sẽ

Nếu bạn từng duyệt qua Quản lý công việc cửa sổ, bạn có thể đã phát hiện ra một quá trình có tên “Hệ thống ngắt” và sau đó có thể bỏ qua nó. Nhưng nếu nó đang sử dụng hết CPU của bạn và bạn đang tự hỏi mình có thể làm gì với nó, chúng tôi có câu trả lời cho bạn.

LIÊN QUAN: Quá trình này là gì và tại sao nó lại chạy trên PC của tôi?

Bài viết này là một phần của loạt phim đang diễn ra của chúng tôi giải thích các quy trình khác nhau được tìm thấy trong Trình quản lý tác vụ, như Nhà môi giới thời gian chạy , svchost.exe , dwm.exe , ctfmon.exe , rundll32.exe , Adobe_Updater.exe nhiều người khác . Không biết những dịch vụ đó là gì? Tốt hơn hãy bắt đầu đọc!

Quy trình “Ngắt hệ thống” là gì?

Ngắt hệ thống là một phần chính thức của Windows và mặc dù nó xuất hiện như một quá trình trong Trình quản lý tác vụ, nhưng nó không thực sự là một quá trình theo nghĩa truyền thống. Thay vào đó, nó là một trình giữ chỗ tổng hợp được sử dụng để hiển thị các tài nguyên hệ thống được sử dụng bởi tất cả các sự cố phần cứng xảy ra trên PC của bạn.

Khi nhận được một tín hiệu ngắt CPU sẽ

Mặc dù ngắt phần cứng nghe có vẻ thô lỗ nhưng đó là một giao tiếp bình thường giữa phần cứng (và phần mềm liên quan) và CPU của bạn. Ví dụ: giả sử bạn bắt đầu nhập một cái gì đó trên bàn phím của mình. Thay vì có toàn bộ quy trình chỉ để theo dõi các tín hiệu từ bàn phím của bạn, thực tế có một chút phần cứng trên bo mạch chủ của bạn xử lý loại giám sát đó. Khi xác định rằng một phần cứng khác cần CPU chú ý, nó sẽ gửi một tín hiệu ngắt đến CPU. Nếu đó là ngắt có mức độ ưu tiên cao (như thường xảy ra với đầu vào của người dùng), CPU sẽ tạm dừng bất kỳ quá trình nào mà nó đang hoạt động, xử lý ngắt và sau đó tiếp tục quá trình trước đó của nó.

Tất cả diễn ra nhanh như chớp, và thường có rất nhiều gián đoạn liên tục xảy ra. Trên thực tế, bạn có thể thấy điều này đang hoạt động nếu bạn muốn. Kích hoạt Trình quản lý tác vụ và cuộn xuống cho đến khi bạn thấy "Hệ thống ngắt" trong cửa sổ. Bây giờ, hãy mở Notepad và bắt đầu nhập. Nó sẽ không ảnh hưởng đáng kể đến cài đặt "Gián đoạn hệ thống" của bạn, nhưng bạn sẽ thấy nó tăng lên một phần mười điểm phần trăm hoặc lâu hơn. Trong trường hợp của chúng tôi, nó đã tăng từ mức cơ bản 0,1% lên 0,3%.

Khi nhận được một tín hiệu ngắt CPU sẽ

Trong quá trình hoạt động bình thường, bạn có thể thấy mức sử dụng CPU của "Ngắt hệ thống" tăng cao tới 10% trong một thời gian ngắn trước khi nó lắng xuống bình thường.

Điều đó thật tuyệt, nhưng tại sao nó lại sử dụng nhiều CPU như vậy?

Nếu bạn thấy mức sử dụng CPU của "Ngắt hệ thống" tăng cao hơn khoảng 20% ​​và – đây là phần quan trọng– ở đó nhất quán , sau đó bạn có một vấn đề. Vì nó là đại diện cho sự gián đoạn phần cứng trên PC của bạn, nên việc sử dụng CPU cao liên tục thường có nghĩa là một phần cứng hoặc trình điều khiển liên quan của nó hoạt động sai. Vì vậy, làm thế nào để bạn khắc phục sự cố phần cứng? Chà, đó là phần khó khăn.

Khi nhận được một tín hiệu ngắt CPU sẽ

Bước đầu tiên của bạn là khởi động lại máy tính của bạn. Chúng tôi biết bạn đã nghe điều này hàng triệu lần, nhưng đó vẫn là lời khuyên chắc chắn. Khởi động lại máy tính của bạn có thể khắc phục tất cả các loại vấn đề kỳ lạ và đó là một bước đủ dễ dàng để thực hiện.

Nếu khởi động lại máy tính của bạn không khắc phục được sự cố sử dụng CPU, bước tiếp theo là đảm bảo rằng máy tính của bạn được cập nhật. Hãy để Windows Update làm nhiệm vụ của mình để bạn có thể chắc chắn rằng mình có tất cả các bản cập nhật trình điều khiển và Windows mới nhất – ít nhất là đối với các trình điều khiển mà Windows đang quản lý. Trong khi sử dụng, bạn cần đảm bảo rằng các trình điều khiển mà Windows Update không quản lý cũng được cập nhật. Bạn có thể tìm thấy hướng dẫn để thực hiện cả hai điều này trong hướng dẫn này .

LIÊN QUAN: Tại sao khởi động lại máy tính lại khắc phục được nhiều vấn đề như vậy?

Nếu cập nhật trình điều khiển phần cứng và PC của bạn không hiệu quả, thì bạn sẽ phải đi sâu vào và tìm ra phần cứng cụ thể nào đang gây ra sự cố. Việc chẩn đoán tất cả phần cứng của bạn nằm ngoài phạm vi của bài viết này, nhưng chúng tôi có một số hướng dẫn hữu ích để giúp bạn thu hẹp mọi thứ.

Bắt đầu bằng cách tắt từng thiết bị ngoại vi của bạn. Chúng tôi bắt đầu với các thiết bị bên ngoài chủ yếu vì đây là điều dễ thực hiện nhất và bạn chủ yếu nên tập trung vào các ổ đĩa ngoài và thiết bị đầu vào như bàn phím, chuột, webcam và micrô. Chỉ cần rút phích cắm từng ổ một và xem liệu “Hệ thống ngắt” có lắng xuống hay không. Nếu đúng, thì bạn biết thiết bị nào cần lấy nét.

Tiếp theo, chuyển đến các thiết bị bên trong của bạn. Rõ ràng, điều này sẽ phức tạp hơn một chút vì bạn không thể chỉ rút phích cắm của chúng. Nhưng bạn có thể tắt chúng trong Trình quản lý thiết bị . Bạn chỉ muốn cẩn thận không tắt bất kỳ thiết bị nào quan trọng để giữ cho hệ thống của bạn hoạt động, chẳng hạn như ổ đĩa hoặc bộ điều hợp màn hình. Ngoài ra, đừng tắt bất kỳ thứ gì được liệt kê trong danh mục Máy tính, Bộ xử lý hoặc Thiết bị hệ thống. Thay vào đó, hãy tập trung vào những thứ như bộ điều hợp mạng, thẻ âm thanh và các thẻ bổ trợ khác. Họ là thủ phạm rất có thể. Chỉ đi từng người một. Tắt thiết bị và kiểm tra "Ngắt hệ thống" trong Trình quản lý tác vụ. Nếu sự cố biến mất, bạn đã xác định được thiết bị gặp sự cố. Nếu không, hãy bật lại thiết bị và chuyển sang thiết bị tiếp theo.

Có một số phần cứng khác có thể gây ra sự cố này và bạn sẽ không thể kiểm tra theo cách này. Nguồn điện bị hỏng (hoặc pin máy tính xách tay) có thể gây ra hiện tượng “Ngắt hệ thống” trong việc sử dụng CPU và ổ cứng bị hỏng cũng có thể xảy ra. Bạn có thể kiểm tra ổ cứng của mình bằng Windows tích hợp sẵn Kiểm tra công cụ Disk hoặc với một bên thứ ba tốt THÔNG MINH. tiện ích . Thật không may, cách duy nhất để kiểm tra nguồn điện cho sự cố này là thay thế nó.

LIÊN QUAN: Cách khắc phục sự cố ổ cứng với Chkdsk trong Windows 7, 8 và 10

Nếu bạn xác định được thiết bị đang gây ra sự cố, bước tiếp theo của bạn là tìm hiểu xem đó là chính thiết bị đó hay trình điều khiển phần cứng đang gây ra sự cố. Một lần nữa, điều này có thể hơi phức tạp để tìm ra và sẽ yêu cầu một số thử nghiệm và sai sót, nhưng chúng tôi có một số hướng dẫn.

  • Thử các thiết bị bên ngoài trên một máy tính khác nếu bạn có.
  • Nếu tất cả các trình điều khiển của bạn đều được cập nhật và bạn cho rằng bản thân thiết bị vẫn ổn, bạn luôn có thể thử quay trở lại tài xế trước đó .
  • Truy cập Google hoặc trang web của nhà sản xuất phần cứng của bạn và xem liệu những người khác có gặp sự cố tương tự hay không.
  • Xem xét cập nhật BIOS của bạn . Nếu bạn không thể thu hẹp sự cố, có thể phần cứng chịu trách nhiệm giải thích các ngắt đang gặp sự cố. Cập nhật BIOS đôi khi có thể khắc phục sự cố.

LIÊN QUAN: Quay lại các trình điều khiển thiết bị gặp sự cố trong Windows Vista

Tôi có thể tắt nó không?

Không, bạn không thể tắt “Hệ thống ngắt”. Và không có lý do chính đáng để làm. Đây là một thành phần quan trọng đối với hiệu suất của PC vì nó được sử dụng để xử lý và báo cáo về sự cố gián đoạn phần cứng. Windows thậm chí sẽ không cho phép bạn tạm thời kết thúc nhiệm vụ.

Quá trình này có thể là một vi rút?

Bản thân “Hệ thống ngắt” là một thành phần chính thức của Windows. Nó gần như chắc chắn không phải là virus. Trên thực tế, vì nó không phải là một quá trình thực tế, nên "Hệ thống ngắt" thậm chí không có tệp .EXE hoặc .DLL được liên kết chạy. Điều này có nghĩa là không có cách nào để phần mềm độc hại chiếm quyền điều khiển trực tiếp.

Tuy nhiên, có thể vi-rút đang can thiệp vào một trình điều khiển phần cứng cụ thể, do đó có thể có tác động đến “Ngắt hệ thống”. Nếu bạn nghi ngờ bất kỳ dạng phần mềm độc hại nào, hãy tiếp tục và quét vi rút bằng cách sử dụng máy quét virus ưa thích của bạn . Cẩn tắc vô ưu!

Một trong những vai trò chính của kernel là tương tác, giao tiếp với các thiết bị ngoại vi như bàn phím, chuột, ổ đĩa … Thông thường tốc độ của vi xử lý nhanh hơn, nên nếu kernel giao tiếp với thiết bị ngoại vi theo cách thông thường: đưa yêu cầu, chờ thiết bị ngoại vi hoàn tất công việc và phản hồi sẽ làm lãng phí hiệu suất làm việc của vi xử lý. Thay vì thế, kernel có thể thực hiện các tác vụ khác, và chỉ làm việc với thiết bị ngoại vi khi thiết bị ngoại vi đã hoàn tất công việc của nó.

Làm cách nào để kernel chỉ làm việc với thiết bị ngoại vi khi nó đã hoàn tất công việc?

Một phương thức phổ biến có thể được dùng là polling. Với phương thức này, kernel sẽ định kì kiểm tra trạng thái của thiết bị, xem thiết bị đã hoàn tất công việc chưa. Khoảng thời gian giữa các lần kiểm tra định kì đó kernel có thể thực thi tác vụ khác. Tuy nhiên, việc định kì kiểm tra trạng thái thiết bị, vẫn đâu đó có sự lãng phí tài nguyên.

Một giải pháp khác hoàn hảo hơn được đưa ra: Thiết bị phần cứng sẽ gửi tín hiệu thông báo tới kernel khi nó hoàn thành công việc, kernel sẽ không cần phải kiểm tra định kì xem thiết bị đã sẵn sàng chưa. Phương pháp này gọi là interrupt – ngắt.

Định nghĩa Interrupts (Ngắt)

Interrupts – ngắt là sự kiện dừng công việc hiện tại của CPU, buộc CPU thực hiện một việc nào đó rồi mới quay trở lại thực hiện tiếp công việc cũ.

Ngắt được chia làm 2 loại chính

Ví dụ khi bạn đang ăn cơm, có một cuộc điện thoại khẩn cấp gọi đến bất ngờ, bạn phải dừng bữa ăn và nghe xong cuộc điện thoại, sau đó quay lại ăn cơm tiếp. Cuộc điện thoại có thể đến bất kì lúc nào trong thời gian ăn cơm, đây là ngắt không đồng bộ. Ở đây bạn là CPU, còn điện thoại là thiết bị phần cứng ngoài tạo ra ngắt là chuông reo báo cuộc gọi.

Ví dụ về ngắt không đồng bộ: Vẫn là bạn đang ăn cơm, nhưng đang ăn thì thấy một con sâu nằm trong bát canh, bạn cũng phải dừng bữa ăn, gắp con sâu bỏ đi (hoặc bỏ luôn bát canh) rồi quay lại ăn cơm tiếp. Trong ví dụ này, bạn vẫn là CPU, nhưng ngắt được tạo ra bởi chính bạn trong quá trình bạn thực hiện việc uống nước canh và đột nhiên phát hiện ra con sâu.

Trong hai ví dụ trên, điểm khác biệt lớn nhất là việc nguồn tạo ra ngắt khác nhau. Ở ví dụ đầu về ngắt không đồng bộ, nguồn tạo ra ngắt là chiếc điện thoại (vai trò là thiết bị ngoài) còn trong ví dụ tiếp theo, nguồn tạo ra ngắt lại là chính bạn (vai trò là CPU).

Interrupts và Exceptions đều là ngắt, nhưng Interrupts là loại ngắt không đồng bộ, còn Exceptions là ngắt đồng bộ.

Interrupts được tạo ra bởi các thiết bị phần cứng ngoài như bàn phím, chuột, …

Exceptions được tạo ra khi xảy ra lỗi trong quá trình CPU thực thi các câu lệnh, ví dụ như lệnh chia một số cho số 0, tràn bộ đệm …

Phân loại Interrupts và Exceptions

Dựa theo tài liệu của Intel, Interrupts và Exceptions được phân chia như sau

Interrupts – Ngắt: Được chia làm 2 loại

Tất cả các ngắt tạo ra bởi thiết bị vào/ra là ngắt có thể che. Một ngắt có thể che có hai trạng thái: trạng thái che và trạng thái không che. CPU chỉ xử lý ngắt khi ngắt ở trạng thái không che, và bỏ qua nếu ngắt đang ở trạng thái che.

Một số sự kiện khẩn cấp của hệ thống (ví dụ như phần cứng bị lỗi) là các ngắt không thể che. Ngắt không thể che luôn luôn được CPU xử lý.

Exceptions – Ngoại lệ: Cũng được chia làm 2 loại

Được tạo ra bởi CPU khi CPU phát hiện một điều kiện bất thường khi đang thực hiện một lệnh. Loại ngoại lệ này được chia tiếp thành 3 loại con

- Faults: Ngoại lệ có thể được sửa chữa được. Chương trình gây ra ngoại lệ này có thể tiếp tục thực hiện. Địa chỉ lệnh gây ra ngoại lệ sẽ được lưu lại trong thanh ghi eip.

- Traps: Trap – bẫy được gọi ngay sau khi thực hiện xong lệnh đang được bẫy. Trap thường được sử dụng với mục đích debug, ví dụ như đặt các điểm breakpoint, để thông báo cho công cụ tìm lỗi debugger một câu lệnh vừa được thực hiện xong. Thanh ghi eip trong trường hợp này lưu lại địa chỉ câu lệnh tiếp theo của câu lệnh được bẫy.

- Aborts: Được dùng khi một lỗi nghiêm trọng xảy ra, trường hợp này hệ thống có thể không ghi được chính xác địa chỉ lệnh gây ra ngoại lệ vào thanh ghi eip như trường hợp Faults. Chương trình gây ra ngoại lệ sẽ bị kết thúc.

Programmed exceptions – Ngoại lệ được lập trình

Ngoại lệ được lập trình là ngoại lệ được tạo ra bởi chính câu lệnh (ngược với ngoại lệ phát hiện và tạo ra bởi vi xử lý). Các lệnh tạo ra ngoại lệ này ví dụ như int, int3, into, bound.

IRQs và Interrupts

IRQ là Interrupt ReQuest – Yêu cầu ngắt. Mỗi một thiết bị phần cứng sẽ được cung cấp một đường yêu cầu ngắt (Interrupt Request Line) riêng. Những đường yêu cầu ngắt này được nối vào chân input của một phần cứng được gọi là PIC – Programmable Interrupts Controller (Bộ điều khiển ngắt lập trình được).

Khi nhận được một tín hiệu ngắt CPU sẽ

Hình 1: Programmable Interrupts Controller (PIC)

Quá trình một thiết bị phần cứng ngoài tạo ra một ngắt như sau

  • Phần cứng tạo ra một ngắt qua đường yêu cầu ngắt được nối với nó (IRQn).

  • PIC chuyển đổi yêu cầu ngắt thành một vector và ghi chúng vào một cổng điều khiển ngắt của CPU, để CPU có để đọc được thông qua bus dữ liệu.

  • PIC tạo ra một ngắt thông qua đường INTR của CPU.

  • PIC chờ CPU phản hồi lại ngắt. Sau khi CPU phản hồi, PIC xóa ngắt vừa tạo ra trên đường INTR.

  • CPU xử lý ngắt.

Những đường yêu cầu ngắt IRQn có thể được tạm thời vô hiệu hóa, hoặc cho phép hoạt động trở lại bằng cách điều khiển PIC, nên PIC được gọi là bộ điều khiển ngắt lập trình được. Vô hiệu hóa một đường yêu cầu ngắt IRQn không làm mất ngắt đó, mà PIC sẽ gửi lại ngắt cho CPU ngay khi cho phép đường yêu cầu ngắt hoạt động trở lại. Tính năng này thường được sử dụng bởi interrupt handler – xử lý ngắt.

Ở trên hình 1, còn một đường nữa là NMI. Đường này là Non-Maskable Interrupt, dành cho những ngắt không thể bị che được đề cập ở phần phân loại ngắt và ngoại lệ.

PIC được sử dụng với các hệ thống có một CPU, cổng ra của PIC được nối thẳng tới chân INTR của CPU. Với những hệ thống có hai hoặc nhiều CPUs, việc dùng PIC để đưa các ngắt tới mỗi CPU sao cho tận dụng được khả ngăn xử lý song song của hệ thống là việc rất phức tạp.

Trên cơ sở đó, I/O Advanced Programmable Interrupts Controller -  I/O APIC được ra đời để dùng cho những hệ thống chạy nhiều CPUs. Do sự khác biệt giữa I/O APIC và PIC nằm nhiều ở phần cứng và không liên quan nhiều tới kiến thức về ngắt nên trong chương này sẽ không đề cập sâu hơn về I/O APIC.

Exceptions

Như đã đề cập ở chương trước, ngoại lệ là một loại ngắt sinh ra bởi chính CPU trong quá trình thực thi câu lệnh. Vi xử lý 80x86 định nghĩa 20 loại exceptions khác nhau. Bảng dưới đây chỉ liệt kê một vài exceptions chúng ta thường gặp trong quá trình lập trình cùng hàm xử lý ngoại lệ và signal được tạo ra.

Số

Tên/Loại

Mô tả

Hàm xử lý

Signal tạo ra

0

Divide Error (fault)

Được tạo ra khi chương trình chia một số nguyên cho 0

divide_error( )

SIGFPE

3

Break

(trap)

Tạo ra bởi lệnh int3, sử dụng bởi các chương trình tìm lỗi.

int3( )

SIGTRAP

14

Page Fault

(fault)

Địa chỉ page không tồn tại trong bộ nhớ, Page Entry tương ứng bằng NULL hoặc đang có sự vi phạm cơ chế bảo vệ page.

page_fault( )

SIGSEGV

16

Floating-point error

(fault)

Bộ số thực dấu phảy động tạo ra exception khi xảy ra lỗi ví dụ như chia cho 0 hoặc tràn số.

coprocessor_error( )

SIGFPE

18

Machine check

(abort)

Cơ chế kiểm tra phát hiện ra CPU hoặc đường bus bị lỗi sẽ tạo ra exception này

machine_check()

Không tạo ra signal

Bảng 1 Exceptions trong vi xử lý 80x86

Ví dụ như loại ngoại lệ 0 “Divide Error” trong bảng 1. Khi chương trình thực hiện chia một số cho số 0 (trong chương trình có đoạn mã nguồn 3/0 chẳng hạn), CPU khi thực thi đoạn mã nguồn đó sẽ tạo ra ngoại lệ “Divide Error”, gọi tới hàm xử lý ngoại lệ tương ứng divide_error( ). Hàm xử lý ngoại lệ này gửi signal SIGFPE tới tiến trình gây ra lỗi.

Kết luận

Bài viết này đã trình bày các khái niệm, cách phân loại ngắt và ngoại lệ trong Linux. Trong bài tiếp theo, chúng ta sẽ tiếp tục tìm hiểu cụ thể cách CPU xử lý ngắt và ngoại lệ.