Làm thế nào một cổng Danh sách nghe, kéo hoặc đẩy?


9

Khi bạn viết một mã để nghe từ một cổng, chẳng hạn như 80, điều gì xảy ra dưới mui xe? Là phương pháp mà HĐH sử dụng để nghe là kéo hay đẩy? Nói cách khác, hệ điều hành có kiểm tra cổng đó sau mỗi x mili giây không?

Tôi chỉ không nhận được nó. Càng nghĩ về nó, tôi càng thấy nó không thể là gì khác hơn là kéo.

Ý tôi là, ngay cả khi HĐH thiết lập chức năng gọi lại, vẫn có điều gì đó nên hiểu rằng thông tin mới đã đến để gọi chức năng gọi lại đó. Rằng một cái gì đó vẫn nên sử dụng pull để hiểu sự xuất hiện của dữ liệu mới.

Làm thế nào một cổng lắng nghe?

Câu trả lời:


14

Về mặt lý thuyết, điều này phụ thuộc vào chi tiết cụ thể của HĐH và phần cứng mạng. Trong thực tế, các hệ điều hành và phần cứng chính sử dụng mô hình đẩy dựa trên các ngắt để tương tác giữa phần cứng và HĐH (và tất cả các phần mềm do HĐH kiểm soát).

Về cơ bản, ngắt là một cơ chế rất, rất thấp, qua đó phần cứng ngoại vi có thể báo hiệu cho CPU rằng có một sự kiện cần được xử lý (như gói mạng đã đến, đã nhấn phím, v.v.). CPU phản ứng với điều này bằng cách đình chỉ bất cứ điều gì nó đang làm vào thời điểm đó và thực hiện một trình xử lý ngắt thay thế.

Việc xử lý ngắt thường được thực hiện bởi HĐH hoặc ít nhất là do HĐH khởi động và chuyển sang mã ứng dụng cụ thể hơn đã được đăng ký là quan tâm đến một loại sự kiện cụ thể.


ý bạn là cổng là một phần cứng ngoại vi, khi có gói mạng mới, sẽ gửi một ngắt tới CPU. OK, nhưng làm thế nào cổng hiểu rằng một gói mạng mới đã đến? Thông qua cơ chế kéo? hay qua điện? Làm sao?
Saeed Neamati

1
Card mạng là phần cứng ngoại vi. Một cổng hoàn toàn là một cấu trúc phần mềm của giao thức TCP / IP. HĐH sẽ phản ứng với sự gián đoạn phần cứng, gọi ngăn xếp TCP / IP, có một số loại đăng ký trong đó cổng nào có ứng dụng nghe trên. Nếu không có người nghe đăng ký, gói sẽ bị bỏ qua hoặc gửi phản hồi lỗi. Nếu có người nghe, nó sẽ được gọi.
Michael Borgwardt

Xin lỗi để theo chuỗi mà nghiêm ngặt, :). Nhưng làm thế nào card mạng hiểu rằng một gói mới đã đến. Tôi chỉ đang cố gắng tìm hiểu xem thiết bị gốc trong chuỗi này (ứng dụng, HĐH, phần cứng, dây mạng) sử dụng kéo hay đẩy. Cảm ơn vì đã ở lại với tôi, anh bạn. :)
Saeed Neamati

1
@Saeed: Tôi không chắc chắn rằng sự khác biệt "kéo so với đẩy" có ý nghĩa ở cấp độ phần cứng. Và nó phụ thuộc vào các chi tiết của công nghệ mạng. Ví dụ, phần sụn của ethernet hoặc thẻ WiFi sẽ phải liên tục theo dõi tất cả lưu lượng WiFi cho đến khi nó phát hiện ra một gói có địa chỉ MAC đích khớp với chính nó, tại đó nó sẽ gửi một ngắt. Tôi sẽ không gọi đó là "kéo", vì thẻ chỉ nghe một cách thụ động. Nhưng phần cứng mạng dựa trên các kết nối điểm-điểm có thể hoạt động hoàn toàn khác nhau.
Michael Borgwardt

1
"Nhưng làm thế nào card mạng hiểu rằng một gói mới đã đến"? Vôn. Nghiêm túc. Một tín hiệu đến qua radio hoặc qua dây dẫn. Tín hiệu điện áp hoạt động mà thẻ giải mã dưới dạng bit. Nó ngắt CPU để chỉ bit đã đến.
S.Lott

8

OK, tôi không phải là kỹ sư phần cứng Ethernet, nhưng tôi nghĩ rằng tôi có thể đâm vào câu hỏi của bạn. Khi bạn viết mã để nghe từ một cổng, điều sau đây xảy ra:

  • Mã khối ứng dụng của bạn chặn / ngủ / "chọn" / thăm dò ý kiến ​​cho đến khi HĐH báo hiệu rằng gói tin đã đến (với một số bit trong tiêu đề IP cho biết gói đó được liên kết với "cổng" cụ thể đó và do đó, ứng dụng của bạn đang lắng nghe cổng đó)
  • Hệ điều hành thường không thăm dò (trong kiến ​​trúc x86 / PC) cho các gói mới, nó chỉ chạy một cách vui vẻ cho đến khi nhận được một ngắt từ phần cứng mạng Ethernet (được truyền qua trình điều khiển mạng Ethernet, giao diện hệ điều hành / phần cứng).
  • Bản thân phần cứng mạng Ethernet dưới vỏ bọc thường chứa bộ điều khiển Ethernet và một số "bộ đệm nhận" hay còn gọi là "bộ đệm gói". Trình điều khiển mạng Ethernet sẽ quản lý các chi tiết thông báo rằng bộ đệm đã đầy và hệ điều hành phải được thông báo; Tôi không hoàn toàn rõ ràng liệu điều này thường được đẩy hay kéo trong phần cứng Ethernet nhưng tôi nghi ngờ nó bị gián đoạn hoặc một số thanh ghi trên chip được đặt khi bộ đệm sẵn sàng. Nhưng những gì thiết lập bộ đệm?
  • Một phần thậm chí cấp thấp hơn của phần cứng Ethernet sẽ lấp đầy bộ đệm (hoặc các gói DMA trực tiếp vào bộ nhớ chính). Một logic mức rất thấp thực sự nhận ra sự dao động của điện áp (hoặc tín hiệu quang) và dịch chúng thành "bit" và đặt kết quả vào bộ đệm nhận gói (và có lẽ đặt giá trị đăng ký trong phần cứng Ethernet). (Sidenote: trở lại trước Thẻ giao diện mạng, khi mọi người sử dụng kết nối cổng nối tiếp / song song, một byte đơn đến có thể tạo ra một ngắt phần cứng (IRQ) cho HĐH; xem đoạn bốn của http://zone.ni.com/devzone / cda / tut / p / id / 4052 )
  • Làm thế nào mà phần cứng cấp thấp nhất biết cái gì tạo thành một "bit"? Chà, Ethernet , ít nhất là hầu hết những cái cũ / phổ biến, sử dụng Mã hóa Manchester để giải mã sự thay đổi điện áp dưới dạng bit. Điều đó có nghĩa là gì? Vâng, như trang đó đề cập, có một giả định cơ bản rằng mỗi bit được truyền trong một thời gian cố định, một tín hiệu đồng hồ ẩn. (Đây là lý do tại sao tốc độ Ethernet trong các tiêu chuẩn được cố định ở mức 10Mb / s, 100Mb / s, 1000Mb / giây, v.v. và không hoàn toàn thay đổi; cả hai mặt của kết nối ethernet phải đồng ý với tốc độ truyền qua cấu hình hoặc một số cơ chế bắt tay ban đầu khi cắm cáp Ethernet. Có một mạch đồng hồ thực tế trong phần cứng ở cả hai bên của dây hỗ trợ cho một hoặc nhiều tần số đó. Đôi khi, tốc độ của đồng hồ này được gọi là tần số của nó hoặc tốc độ báo hiệu.) gọi nó là lấy mẫu, không bỏ phiếu / kéo,

Vì vậy, trực giác của bạn rằng "kéo" xảy ra là, ở mức phần cứng thấp nhất, có lẽ đúng ... mạch Ethernet "kéo" mức điện áp ở các khoảng nhất định. . "Hoặc" kéo "để mô tả điện trường và tiềm năng, nhưng giả sử chúng ta đều là lập trình viên, không phải nhà vật lý ở đây. :-)


3

Mã nghe một cổng chỉ chờ một tin nhắn từ mạng.

Bất cứ khi nào chip Ethernet nhận được thông báo, sự gián đoạn sẽ được đưa ra. Nhân xử lý sự gián đoạn này và chuyển tiếp thông báo đến trình điều khiển mạng. Thông báo đó đi qua ngăn xếp TCP / IP và được lọc ra hoặc chuyển đến mã nghe cổng.


vấn đề là ở đây Làm thế nào chip Ethernet nhận được một tin nhắn? Có phải nó chỉ là một loại kéo? Chẳng hạn, chip Ethernet có kiểm tra điện áp của dây mạng trên cơ sở định kỳ không?
Saeed Neamati

4
Đây là một mức độ điện. Làm thế nào để một bóng đèn cảm nhận trạng thái của công tắc của nó? Đây không phải là một cuộc bỏ phiếu định kỳ. Mặc dù các chi tiết phức tạp hơn trong chip Ethernet, về cơ bản là giống nhau.
mouviciel

"Làm thế nào chip Ethernet nhận được tin nhắn". Vôn. Electron trên dây hoặc sóng vô tuyến trong không khí. Chip được kích hoạt bởi điện áp đến và thu thập các bit. Sau đó, nó làm gián đoạn CPU để chỉ ra sự hiện diện của các bit. CPU phải ngừng làm bất cứ điều gì khác mà nó đang làm và thu thập các bit trước khi đến nhiều hơn. Vôn.
S.Lott

3

Phần cứng Ethernet sẽ là một trong những cuộc thăm dò dây vật lý (hoặc không dây). Khi nó có lý do 'đủ tốt', nó sẽ làm gián đoạn bộ xử lý. Bộ xử lý sẽ chỉ ra trình điều khiển thích hợp của chúng tôi sẽ xử lý ngắt. Trình xử lý ngắt sẽ xử lý sự kiện (đọc / ghi dữ liệu). tài xế cũng sẽ bảo Os đánh thức mọi chủ đề đang chờ ..


Làm thế nào Ethernet phần cứng thăm dò dây vật lý? Và nếu họ bỏ phiếu, thực sự sử dụng kéo, yeah? Họ có xem dây cứ sau 10 mili giây không?
Saeed Neamati
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.