Câu trả lời:
Sự khác biệt giữa Procfs và sysfs là gì?
proc
là 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 proc
là 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 sysfs
như thông tin thiết bị.
Vì vậy, trong một số ý nghĩa, họ làm như vậy, nhưng sysfs
có 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.
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.
/dev/mem
và /dev/kmem
là 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.
kmem
và các công cụ như ps
SGID kmem
.
/dev/mem
hoặc /dev/kmem
nhanh hơn cho kernel vì quá trình chế độ người dùng chỉ có thể là mmap
tệ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ừ /proc
hệ thống tập tin đòi hỏi một tòa nhà open
và một cái khác read
để nó chậm hơn nhiều. Tuy nhiên, /proc
khô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.
Procfs cho phép tùy ý file_operations
, sysfs bị hạn chế hơn
procfs mục nhận được một file_operations
cấu trúc, trong đó có chức năng gợi ý rằng xác định những gì xảy ra cho mỗi cuộc gọi hệ thống tập tin dựa trên, ví dụ như open
, read
, mmap
, vv, và bạn có thể có những hành động tùy ý từ những.
Ví dụ tối thiểu:
sysfs bị hạn chế hơn trong các giác quan sau:
show
và store
, mà Linux sử dụng để thực hiện open
, close
, read
, write
và lseek
cho bạn. Xem thêm: Làm cách nào để đính kèm các thao tác tệp vào thuộc tính sysfs trong trình điều khiển nền tảng? | Tràn ngăn xếpkobject
Ví dụ tối thiểu: Cách tạo thuộc tính lớp sysfs đơn giản trong kernel Linux v3.2 | Tràn ngăn xếp
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.
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 ..