Sự khác biệt giữa Procfs và sysfs là gì?


71

Sự khác biệt giữa Procfs và sysfs là gì? Tại sao chúng được làm như hệ thống tập tin? Theo tôi hiểu, Proc chỉ là thứ để lưu trữ thông tin tức thời liên quan đến các quy trình đang chạy trong hệ thống.

Câu trả lời:


61

Sự khác biệt giữa Procfs và sysfs là gì?

proclà cái cũ, nó ít nhiều không có quy tắc và cấu trúc. Và tại một số thời điểm, nó đã được quyết định proclà một chút quá hỗn loạn và một cách mới là cần thiết.

Sau đó, sysfsđã được tạo và những thứ mới được thêm vào được đưa vào sysfsnhư thông tin thiết bị.

Vì vậy, trong một số ý nghĩa, họ làm như vậy, nhưng sysfscó cấu trúc hơn một chút.

Tại sao chúng được làm như hệ thống tập tin?

Triết lý UNIX cho chúng ta biết rằng mọi thứ đều là một "tệp", do đó nó được tạo ra để nó hoạt động như các tệp.

Theo tôi hiểu, Proc chỉ là thứ để lưu trữ thông tin tức thời liên quan đến các quy trình đang chạy trong hệ thống.

Những phần đó đã luôn ở đó và họ có thể sẽ không bao giờ di chuyển vào sysfs.

Nhưng có nhiều thứ cũ hơn mà bạn có thể tìm thấy proc, nó đã không được di chuyển.


2
Cảm ơn câu trả lời .. Nhưng tại sao cpuinfo và meminfo giống như mọi thứ vẫn được duy trì trong Procfs? Tại sao họ không thể được chuyển đến sysfs?
Sen

5
Tôi đoán họ đã đưa những thứ mới vào sysfs, và chỉ để lại cái cũ vì nó giữ một mức độ tương thích ngược. Có rất nhiều thứ mà phụ thuộc vào những điều trong proc ...
Johan

75

Ban đầu (cách trở lại trong Unix), cách mà các chương trình phát hiện ra về các quy trình đang chạy trên hệ thống là thông qua việc đọc trực tiếp các cấu trúc quy trình từ bộ nhớ kernel (mở / dev / mem và giải thích trực tiếp dữ liệu thô). Đây là cách các lệnh 'ps' đầu tiên hoạt động. Theo thời gian, một số thông tin đã được cung cấp thông qua các cuộc gọi hệ thống.

Tuy nhiên, việc để dữ liệu hệ thống trực tiếp vào không gian người dùng thông qua / dev / mem là một hình thức xấu và đáng ghét khi liên tục tạo các cuộc gọi hệ thống mới mỗi khi bạn muốn xuất một số dữ liệu quy trình mới và do đó, một phương thức mới hơn đã được tạo ra để truy cập dữ liệu có cấu trúc cho các ứng dụng không gian người dùng để tìm hiểu về các thuộc tính quy trình. Đây là hệ thống tập tin / Proc. Với / Proc, các giao diện và cấu trúc (thư mục và tệp) có thể được giữ nguyên, ngay cả khi cấu trúc dữ liệu cơ bản trong kernel thay đổi. Điều này ít dễ vỡ hơn nhiều so với hệ thống trước đó và nó có tỷ lệ tốt hơn.

Hệ thống tập tin / Proc ban đầu được thiết kế để xuất bản thông tin quy trình và một vài thuộc tính hệ thống chính, được yêu cầu bởi 'ps', 'top', 'miễn phí' và một vài tiện ích hệ thống khác. Tuy nhiên, vì nó dễ sử dụng (cả từ phía kernel và phía không gian người dùng), nó đã trở thành một bãi thải cho toàn bộ thông tin hệ thống. Ngoài ra, nó bắt đầu nhận được các tệp đọc / ghi, được sử dụng để điều chỉnh cài đặt và kiểm soát hoạt động của kernel hoặc các hệ thống con khác nhau của nó. Tuy nhiên, phương pháp triển khai các giao diện điều khiển là đặc biệt và / Proc sớm phát triển thành một mớ hỗn độn.

Các sysfs (hoặc / sys filesystem) được thiết kế để thêm cấu trúc vào mớ hỗn độn này và cung cấp một cách thống nhất để hiển thị thông tin hệ thống và các điểm kiểm soát (thuộc tính hệ thống và trình điều khiển) vào không gian người dùng từ kernel. Bây giờ, khung trình điều khiển trong kernel sẽ tự động tạo các thư mục trong / sys khi trình điều khiển được đăng ký, dựa trên loại trình điều khiển và các giá trị trong cấu trúc dữ liệu của chúng. Điều này có nghĩa là tất cả các trình điều khiển của một loại cụ thể sẽ có cùng các yếu tố được hiển thị thông qua sysfs.

Nhiều điểm thông tin và điểm kiểm soát hệ thống cũ vẫn có thể truy cập được trong / Proc, nhưng tất cả các bus và trình điều khiển mới sẽ hiển thị thông tin và điểm kiểm soát của họ thông qua sysfs.


8
Một lý do mà nó là "hình thức xấu" để sử dụng /dev/mem/dev/kmemlà chúng yêu cầu quyền truy cập root, vì vậy các ứng dụng sử dụng chúng phải được thiết lập.
Barmar

2
Trên nhiều hệ thống Unix và trên Linux, các tệp thiết bị này thuộc sở hữu của nhóm kmemvà các công cụ như psSGID kmem.
phản ứng

2
Trong thực tế, phương pháp cũ là truy cập trực tiếp /dev/memhoặc /dev/kmemnhanh hơn cho kernel vì quá trình chế độ người dùng chỉ có thể là mmaptệp và tìm nạp tất cả thông tin chỉ bằng cách đọc RAM. Nhận bất kỳ mẩu thông tin nào từ /prochệ thống tập tin đòi hỏi một tòa nhà openvà một cái khác readđể nó chậm hơn nhiều. Tuy nhiên, /prockhông yêu cầu hack cụ thể kernel để đọc bộ nhớ và hiển thị dữ liệu ít nhạy cảm hơn cho các quy trình chế độ người dùng.
Mikko Rantalainen

10

Procfs cho phép tùy ý file_operations, sysfs bị hạn chế hơn


3

sysfs là Hệ thống tệp ảo được tạo trong chu kỳ phát hành kernel 2.6 để hiển thị thông tin thiết bị vì các Procfs không làm tốt loại thông tin này.

Bộ nhớ vv chưa được chuyển sang sysfs vì nó không bao giờ có ý định hiển thị loại thông tin đó nên không chắc nó sẽ được chuyển đến.


Bộ nhớ vv chưa được chuyển sang sysfs Ý bạn là gì khi chuyển? Và tại sao nó không có ý định hiển thị loại thông tin đó? Bạn có thể vui lòng giải thích điều đó cho tôi
Sen

Bằng cách chuyển, tôi có nghĩa là đã di chuyển đó là một câu trả lời cho câu hỏi của bạn về việc Bộ nhớ vv sẽ được chuyển sang sysfs. Và nó chỉ được dự định hiển thị thông tin thiết bị vì đó là điều mà các Procfs không làm tốt, Procfs vẫn tuyệt vời cho các loại thông tin khác.
kemra102

1

Như tôi cũng muốn thêm vào đây ... Vì / Proc là phiên bản cũ hơn, nó chứa thông tin của thiết bị kernel trong khoảng thời gian đó..có sysfs đi kèm với phiên bản kernel 2.6 nên thông tin trình điều khiển thiết bị tạo thư mục riêng của nó. một chút cấu trúc và dễ dàng truy cập ..

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.