Tại sao các ổ cắm TCP / IP được coi là các tệp mở của Java?


29

Tôi cần một số trợ giúp để nắm bắt những gì tôi chắc chắn là một khái niệm cơ bản trong Linux: giới hạn cho các tệp đang mở. Cụ thể, tôi bối rối về lý do tại sao các ổ cắm mở có thể được tính vào tổng số "tệp mở" trên một hệ thống.

Ai đó có thể xin vui lòng giải thích lý do tại sao? Tôi hiểu rằng điều này có thể quay trở lại toàn bộ nguyên tắc "mọi thứ là một tệp" trong Linux nhưng mọi chi tiết bổ sung sẽ được đánh giá cao.

Câu trả lời:


34

Giới hạn đối với "tệp đang mở" không thực sự chỉ dành cho tệp. Đó là một giới hạn về số lượng nhân xử lý một quy trình có thể sử dụng cùng một lúc. Trong lịch sử, điều duy nhất mà các chương trình thường mở rất nhiều là các tệp, vì vậy điều này được biết đến như là một giới hạn về số lượng tệp đang mở. Có một giới hạn để giúp ngăn chặn các quá trình nói, mở rất nhiều tệp và vô tình quên đóng chúng, điều này sẽ gây ra sự cố toàn hệ thống.

Một kết nối ổ cắm cũng là một xử lý kernel. Vì vậy, các giới hạn tương tự cũng áp dụng cho cùng một lý do - có thể một quy trình mở kết nối mạng và quên đóng chúng.

Như đã lưu ý trong các bình luận, xử lý kernel thường được gọi là mô tả tệp trong các hệ thống giống như Unix.


23
"Xử lý hạt nhân" là một thuật ngữ Windows. Bạn muốn tham khảo "mô tả tập tin", đó là cách các thực thể này thường được gọi với Unix & Linux.
jlliagre

11
Câu trả lời này cản trở quá nhiều. Ổ cắm tập tin. Chúng cung cấp quyền truy cập vào các luồng byte thông qua giao diện read/ write, đây là trung tâm của ý nghĩa của một tệp.

4
@ WumpusQ.Wumbley, nhưng sau đó bạn có tòa nhà shutdown(2)trên chúng, nhưng không phải trên các tệp và bạn không thể đọc từ ổ cắm bằng cách sử dụng cat- đó là lý do netcatđã được tạo. Tôi muốn nói rằng (may mắn) các ổ cắm trong các hạt giống Unix hoạt động giống như các tệp theo I / O, nhưng sự giống nhau kết thúc ngay tại đó. (Thành thật mà nói, tôi cũng muốn nghe từ một người có kinh nghiệm về Kế hoạch 9 vì tôi nghe nói họ đã thống nhất những điều này xa hơn so với các đơn vị truyền thống).
kostix

@MikeB, cuốn sách này sẽ giúp bạn tăng tốc với hầu hết các khái niệm liên quan đến Unix. Rat khuyen khich.
kostix

3
Ý tưởng "mọi thứ là một tập tin" có nghĩa là "tập tin" là một kiểu dữ liệu trừu tượng với nhiều kiểu con. Hầu hết các kiểu con hỗ trợ các phương thức bổ sung ngoài các nội dung cơ bản mà tất cả các tệp hỗ trợ. ổ cắm có rất nhiều tính năng bổ sung. thiết bị khối và tập tin thường xuyên đã tìm kiếm. thư mục thực sự kỳ lạ (viết không hoạt động và nếu đọc hoạt động, nó không hữu ích). Sự hiện diện của các phương thức bổ sung không có nghĩa là những thứ này không phải là một phần của thể loại chung mà chúng ta gọi là "tệp".

27

Lý do tại sao giao thức TCP / IP socket descriptor sử dụng tập tin là, khi giao diện ổ cắm được thiết kế và thực hiện (lần đầu tiên trong BSD Unix, vào năm 1983 ), nhà thiết kế của nó cảm thấy rằng một kết nối mạng là tương tự như một file - bạn có thể read, writeclosecả hai và nó sẽ phù hợp với ý tưởng của Unix về "mọi thứ là một tập tin".

Các triển khai ngăn xếp mạng TCP / IP khác không nhất thiết phải tích hợp với hệ thống con tệp I / O của hệ điều hành của họ, một ví dụ là MacTCP . Nhưng vì giao diện ổ cắm BSD rất phổ biến, ngay cả những triển khai khác này đã chọn sao chép API socket bằng các chức năng giống Unix của nó, do đó bạn có "mô tả tệp", chỉ được sử dụng cho giao tiếp TCP / IP, trên các hệ thống không có có mô tả tập tin.

Phần khác của câu hỏi của bạn là tại sao có giới hạn? Đó là bởi vì cách nhanh nhất để thực hiện bảng tra cứu mô tả tệp là với một mảng. Trong lịch sử, giới hạn được mã hóa cứng vào kernel.

Đây là mã trong phiên bản Unix 7 (1979) với giới hạn 20 mã mô tả tệp được mã hóa cứng cho mỗi quy trình:

Khi so sánh, Linux tự động phân bổ không gian cho bảng mô tả tệp của quy trình. Giới hạn tuyệt đối mặc định là 8192, nhưng bạn có thể đặt giá trị này thành bất cứ thứ gì bạn thích. Hệ thống của tôi liệt kê 191072 trong /proc/sys/fs/file-max.

Mặc dù không còn giới hạn tuyệt đối trong Linux nữa, tuy nhiên chúng tôi không muốn để các chương trình phát điên, vì vậy, quản trị viên (hoặc nhà đóng gói phân phối) thường đặt giới hạn tài nguyên. Hãy nhìn vào /etc/security/limits.conf, hoặc chạy ulimit -n.


Một trong những câu trả lời hay nhất trong chủ đề này, cảm ơn
user859375 13/07/18

6

Các tệp không chỉ là các tệp trên đĩa hoặc trong bộ nhớ; chúng là những luồng dữ liệu, trong đó có hai ví dụ.

Điểm cuối từ xa là một ví dụ thứ ba và bạn tương tác với những người sử dụng ổ cắm.


2
Chào mừng bạn đến với U & L.SE. Tôi thích câu trả lời này.
Eyoung100
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.