Phần mềm và phần cứng bị gián đoạn là gì và chúng được xử lý như thế nào?


43

Tôi không chắc chắn nếu tôi hiểu khái niệm về phần cứng và phần mềm bị gián đoạn.

Nếu tôi hiểu chính xác, mục đích của việc ngắt phần cứng là để thu hút sự chú ý của CPU, một phần của việc thực hiện đa nhiệm CPU.

  1. Sau đó, những gì vấn đề một phần cứng bị gián đoạn? Đây có phải là quá trình trình điều khiển phần cứng?
  2. Nếu có, quá trình trình điều khiển phần cứng đang chạy ở đâu? Nếu nó đang chạy trên CPU, thì nó sẽ không phải chú ý đến CPU bằng cách ngắt phần cứng, phải không? Vì vậy, nó đang chạy ở nơi khác?
  3. Liệu một phần cứng làm gián đoạn CPU trực tiếp, hoặc trước tiên nó liên lạc với quá trình kernel và quá trình kernel sau đó liên lạc / làm gián đoạn CPU?

Mặt khác, tôi nghĩ mục đích của một ngắt phần mềm là cho một quá trình hiện đang chạy trên CPU để yêu cầu một số tài nguyên.

  1. Các nguồn lực là gì? Có phải tất cả đều ở dạng chạy quy trình? Ví dụ, quy trình trình điều khiển CPU và quy trình trình điều khiển bộ nhớ đại diện cho tài nguyên CPU và bộ nhớ? Quá trình điều khiển của các thiết bị I / O có đại diện cho tài nguyên I / O không? Các quy trình đang chạy khác mà quy trình muốn giao tiếp với các tài nguyên cũng vậy?
  2. Nếu có, phần mềm có làm gián đoạn liên lạc với các quy trình (đại diện cho tài nguyên) một cách gián tiếp thông qua quy trình kernel không? Có đúng không giống như ngắt phần cứng, ngắt phần mềm không bao giờ trực tiếp làm gián đoạn CPU, nhưng thay vào đó, nó làm gián đoạn / liên hệ với quá trình kernel?

Câu trả lời:


55

Một ngắt phần cứng không thực sự là một phần của đa nhiệm CPU, nhưng có thể điều khiển nó.

  1. Ngắt phần cứng được phát hành bởi các thiết bị phần cứng như đĩa, card mạng, bàn phím, đồng hồ, v.v ... Mỗi thiết bị hoặc bộ thiết bị sẽ có dòng IRQ (Interrupt ReQuest) riêng. Dựa trên IRQ, CPU sẽ gửi yêu cầu đến trình điều khiển phần cứng thích hợp. (Trình điều khiển phần cứng thường là chương trình con trong kernel chứ không phải là một quy trình riêng biệt.)

  2. Trình điều khiển xử lý ngắt được chạy trên CPU. CPU bị gián đoạn từ những gì nó đang làm để xử lý ngắt, do đó không cần thêm gì để thu hút sự chú ý của CPU. Trong các hệ thống đa bộ xử lý, một ngắt thường sẽ chỉ làm gián đoạn một trong các CPU. (Như một trường hợp đặc biệt, máy tính lớn có các kênh phần cứng có thể xử lý nhiều ngắt mà không cần sự hỗ trợ từ CPU chính.)

  3. Ngắt phần cứng làm gián đoạn CPU trực tiếp. Điều này sẽ khiến mã liên quan trong quá trình kernel được kích hoạt. Đối với các quy trình mất một chút thời gian để xử lý, mã ngắt có thể cho phép bản thân bị gián đoạn bởi các ngắt phần cứng khác.

    Trong trường hợp ngắt hẹn giờ, mã bộ lập lịch kernel có thể tạm dừng quá trình đang chạy và cho phép một tiến trình khác chạy. Đó là sự hiện diện của mã lập lịch cho phép đa nhiệm.

Các ngắt phần mềm được xử lý giống như các ngắt phần cứng. Tuy nhiên, chúng chỉ có thể được tạo bởi các quy trình hiện đang chạy.

  1. Thông thường các ngắt phần mềm là các yêu cầu cho I / O (Đầu vào hoặc Đầu ra). Chúng sẽ gọi các thường trình kernel sẽ lên lịch cho I / O xảy ra. Đối với một số thiết bị, I / O sẽ được thực hiện ngay lập tức, nhưng I / O trên đĩa thường được xếp hàng và thực hiện sau đó. Tùy thuộc vào I / O được thực hiện, quá trình có thể bị đình chỉ cho đến khi I / O hoàn thành, khiến bộ lập lịch kernel chọn một quy trình khác để chạy. I / O có thể xảy ra giữa các tiến trình và quá trình xử lý thường được lên lịch theo cách tương tự như I / O đĩa.

  2. Phần mềm ngắt chỉ nói chuyện với kernel. Hạt nhân có trách nhiệm lên lịch cho bất kỳ quy trình nào khác cần chạy. Đây có thể là một quá trình khác ở cuối đường ống. Một số hạt nhân cho phép một số phần của trình điều khiển thiết bị tồn tại trong không gian người dùng và kernel sẽ lên lịch cho quá trình này chạy khi cần.

    Đúng là một ngắt phần mềm không trực tiếp làm gián đoạn CPU. Chỉ mã hiện đang chạy mã mới có thể tạo ra một phần mềm bị gián đoạn. Ngắt là một yêu cầu cho kernel thực hiện một cái gì đó (thường là I / O) cho quá trình chạy. Một ngắt phần mềm đặc biệt là một cuộc gọi Yield, yêu cầu bộ lập lịch kernel kiểm tra xem liệu một số quy trình khác có thể chạy hay không.

Trả lời bình luận:

  1. Đối với các yêu cầu I / O, kernel ủy nhiệm công việc cho trình điều khiển kernel thích hợp. Thường trình có thể xếp hàng I / O để xử lý sau (phổ biến cho I / O đĩa) hoặc thực hiện ngay lập tức nếu có thể. Hàng đợi được xử lý bởi trình điều khiển, thường khi phản ứng với các ngắt phần cứng. Khi một I / O hoàn thành, mục tiếp theo trong hàng đợi sẽ được gửi đến thiết bị.

  2. Có, ngắt phần mềm tránh bước báo hiệu phần cứng. Quá trình tạo yêu cầu phần mềm phải là một quy trình hiện đang chạy, vì vậy chúng không làm gián đoạn CPU. Tuy nhiên, chúng làm gián đoạn dòng mã gọi.

    Nếu phần cứng cần để CPU làm một cái gì đó, nó sẽ khiến CPU làm gián đoạn sự chú ý của nó đến mã mà nó đang chạy. CPU sẽ đẩy trạng thái hiện tại của nó trên một ngăn xếp để sau này nó có thể trở lại những gì nó đang làm. Ngắt có thể dừng: một chương trình đang chạy; mã hạt nhân xử lý một ngắt khác; hoặc quá trình nhàn rỗi.


Cảm ơn! (1) Trong phần mềm bị gián đoạn, các thao tác I / O được thực hiện bởi thói quen trình điều khiển thiết bị I / O trong quy trình kernel? (2) có đúng là con đường mà phần mềm bị gián đoạn đi qua ngắn hơn một bước so với đường dẫn cho phần cứng bị gián đoạn không? Nói cách khác, đối với ngắt phần mềm: chương trình phần mềm -> thói quen trình điều khiển thiết bị trong quy trình kernel; cho ngắt phần cứng: phần cứng -> CPU -> trình điều khiển thiết bị trong quy trình kernel?
Tim

Cảm ơn! Có đúng là phần cứng bị gián đoạn khiến CPU đẩy trạng thái hiện tại của nó lên một ngăn xếp để trình điều khiển phần cứng có thể chạy trên CPU và sau đó bật lại quá trình bị gián đoạn trên CPU? Có phải phần mềm bị gián đoạn cũng khiến quá trình chạy trên CPU bị đẩy vào một ngăn xếp để dịch vụ được yêu cầu có thể chạy trên CPU?
Tim

Hoặc là ngắt sẽ làm cho trạng thái được đẩy trên ngăn xếp. Điều này cho phép hệ thống tải lại trạng thái khi nó được thực hiện với ngắt.
BillThor

Cảm ơn! nếu dịch vụ được yêu cầu sẽ không chạy trên CPU, chẳng hạn như các hoạt động IO được chạy trên các thiết bị IO thay vì CPU và quá trình yêu cầu có thể tiếp tục chạy mà không cần đợi dịch vụ được yêu cầu kết thúc, quá trình yêu cầu vẫn được đưa vào ngăn xếp ?
Tim

Thông thường, đọc I / O được gọi đồng bộ và quá trình sẽ không chạy cho đến khi I / O hoàn thành. Đối với đọc bạn hầu như luôn luôn muốn điều này. Viết thường xảy ra không đồng bộ cho phép quá trình tiếp tục chạy.
BillThor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.