Tôi không có nhiều kiến thức về hoạt động bên trong của hệ điều hành, vậy tại sao chúng ta có giới hạn cho số lượng tệp mở tối đa và các quy trình đang chạy trong Linux?
Tôi sẽ đánh giá cao nếu ai đó có thể giúp tôi hiểu.
Tôi không có nhiều kiến thức về hoạt động bên trong của hệ điều hành, vậy tại sao chúng ta có giới hạn cho số lượng tệp mở tối đa và các quy trình đang chạy trong Linux?
Tôi sẽ đánh giá cao nếu ai đó có thể giúp tôi hiểu.
Câu trả lời:
Điều này chủ yếu là vì lý do lịch sử. Trên các máy tính lớn hơn của Linux, nhiều người dùng sẽ kết nối và sử dụng tài nguyên của máy tính lớn. Tất nhiên, cần phải hạn chế và vì các hoạt động như xử lý tệp và quy trình được tích hợp vào kernel, nên nó bị giới hạn ở đó. Nó cũng giúp hạn chế các cuộc tấn công như bom ngã ba . Một sự bảo vệ chống lại bom hình thức sử dụng giới hạn quá trình được hiển thị ở đây .
Nó cũng giúp kiểm tra các dịch vụ và trình tiện ích phức tạp bằng cách không cho phép chạy trốn và mở tệp, tương tự như những gì mà bom ngã ba cố gắng thực hiện.
Cũng cần lưu ý là những thứ như dung lượng RAM và CPU có sẵn, và thực tế là bộ đếm 32 bit chỉ có thể tham chiếu rất nhiều (chỉ có 4294967296 mục có thể được đếm bằng bộ đếm 32 bit), nhưng giới hạn như vậy là rất xa ở trên những cái thường được thiết lập bởi các lập trình viên và quản trị viên hệ thống. Dù sao, rất lâu trước khi bạn có 4294967296 quy trình, máy của bạn có thể đã được khởi động lại, đúng như kế hoạch hoặc khi nó bắt đầu bị khóa do bỏ đói tài nguyên khác.
Trừ khi bạn chạy Titan với bộ nhớ 584 TiB (nếu không, vì Linux không thể chạy như một phiên bản trên siêu máy tính), bạn có thể sẽ không đạt đến giới hạn quá trình này sớm. Ngay cả khi đó, quá trình trung bình sẽ chỉ có khoảng 146KB bộ nhớ, giả sử không có bộ nhớ chia sẻ.
Có giới hạn cho hầu hết mọi thứ, cả trong cuộc sống và trong Linux. Đôi khi các giới hạn rất cao và không đáng lo ngại, và đôi khi chúng quá thấp, được thiết lập tùy ý bởi một lập trình viên lười biếng hoặc đặt theo giới hạn cho phần cứng.
Giới hạn tùy ý xuất hiện khi lập trình viên đưa ra quyết định, chẳng hạn như số lượng ký tự tối đa được phép trong một trường, chẳng hạn như địa chỉ. Việc đặt một số giới hạn tùy ý dễ dàng hơn nhiều so với việc phân bổ động bộ nhớ khi cần. Bạn không muốn phân bổ tất cả bộ nhớ khả dụng cho một trường đầu vào đơn giản, nhưng bạn không muốn cho phép đầu vào ghi đè lên bộ nhớ khác có thể quan trọng. Đối với các tệp và quy trình mở, có thể có giới hạn tùy ý hoặc có thể bị giới hạn bởi bộ nhớ khả dụng. Nếu sau này, điều tồi tệ sẽ bắt đầu xảy ra khi bạn đạt đến giới hạn và hệ thống có thể bị treo, do đó, thật tốt khi có một giới hạn xuất hiện trước khi điều đó xảy ra. Đôi khi, các giới hạn tùy ý có thể được xác định khi khởi động tùy thuộc vào bộ nhớ hoặc dung lượng ổ đĩa và thường khá thông minh,
Sau đó, có các giới hạn được đặt theo phần cứng, chẳng hạn như kích thước của một số nguyên hoặc ký tự. Nếu bạn có hệ thống 32 bit, thì sẽ có các giới hạn được đặt theo kích thước tối đa của một số nguyên (4.294.967.295 nếu không dấu hoặc một nửa nếu được ký).
Đối với các quy trình, / Proc / sys / kernel / pid_max là pid tối đa được phép, vì vậy đây là giới hạn cứng của số lượng quy trình có thể chạy bất kỳ lúc nào. Tuy nhiên, giới hạn về bộ nhớ thường phát huy tác dụng trước đó.
Đối với giới hạn trên đối với các tệp đang mở trên toàn bộ máy, / Proc / sys / fs / file-max là giới hạn cứng; điều này dựa trên dung lượng bộ nhớ trong máy, vì vậy nó sẽ thay đổi. Nhân đặt điều này là:
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
có thể đạt khoảng 100 cho mỗi 1 MB RAM.
Mỗi giới hạn quá trình là khác nhau. ulimit sẽ định nghĩa những điều này.
Chúng tôi có giới hạn vì máy tính có giới hạn, tôi có 4GB RAM, vậy bây giờ tôi không thể chạy 15 trò chơi được không?
Tôi rất có thể có thể chạy nó với một số độ trễ nhưng nó sẽ không phải là con người .
Giống như máy tính xách tay của tôi khi tôi chạy Windows 7, tôi có thể chơi Battlefield, nhưng nó chiếm 80% RAM nên nếu tôi thử chơi "Need For Speed", điều đó mất 60% thông thường, tôi có thể mở cả hai nhưng sau đó toàn bộ hệ thống của tôi bị chậm lại do tôi đang chạy 2 Chương trình nhiệm vụ nặng nề, cả hai đều chiến đấu vì RAM (Bộ nhớ truy cập ngẫu nhiên)
Nói một cách ngắn gọn, Một máy tính bình thường không thể chạy rất nhiều chương trình cùng một lúc Âm nhạc, Notepad, Trình duyệt, Email, Trò chơi, Bạn nghĩ rằng đó là rất nhiều trên máy tính nhưng đó chỉ là, Một trò chơi như World of Warcraft chiếm nhiều RAM hơn và làm cho máy tính của bạn phải vật lộn (Trừ khi bạn có 8-16 GB RAM như các máy tính xách tay đắt tiền làm!)