procfs และ sysfs แตกต่างกันอย่างไร


71

procfs และ sysfs แตกต่างกันอย่างไร ทำไมพวกเขาทำในฐานะระบบไฟล์? ตามที่ฉันเข้าใจ proc เป็นเพียงสิ่งที่จะเก็บข้อมูลทันทีเกี่ยวกับกระบวนการทำงานในระบบ

คำตอบ:


61

procfs และ sysfs แตกต่างกันอย่างไร

procเป็นแบบเก่ามันมากหรือน้อยโดยไม่มีกฎและโครงสร้าง และในบางครั้งก็มีการตัดสินใจว่าprocมันวุ่นวายเกินไปและต้องการวิธีการใหม่

จากนั้นsysfsถูกสร้างขึ้นและสิ่งใหม่ที่เพิ่มเข้ามาจะถูกนำไปใส่sysfsเหมือนข้อมูลอุปกรณ์

ดังนั้นในบางแง่มุมพวกเขาก็ทำแบบเดียวกัน แต่sysfsมีโครงสร้างมากกว่าเล็กน้อย

ทำไมพวกเขาทำในฐานะระบบไฟล์?

ปรัชญา UNIX บอกเราว่าทุกอย่างเป็น "ไฟล์" ดังนั้นมันจึงถูกสร้างขึ้นเพื่อให้ทำงานเป็นไฟล์

ตามที่ฉันเข้าใจ proc เป็นเพียงสิ่งที่จะเก็บข้อมูลทันทีเกี่ยวกับกระบวนการทำงานในระบบ

sysfsชิ้นส่วนเหล่านั้นได้เสมอนั่นและพวกเขาอาจจะไม่เคยย้ายเข้า

แต่มีสิ่งเก่า ๆ อีกมากมายที่คุณสามารถค้นหาได้procซึ่งยังไม่ได้ย้าย


2
ขอบคุณสำหรับคำตอบ .. แต่ทำไม cpuinfo และ meminfo ถึงยังคงอยู่ใน procfs ทำไมพวกเขาไม่สามารถย้ายไป sysfs?
Sen

5
ฉันเดาว่าพวกเขาใส่สิ่งใหม่ในระบบและเพียงปล่อยให้เก่าเพื่อรักษาระดับความสามารถในการถอยหลัง มีหลายสิ่งหลายอย่างที่ขึ้นอยู่กับสิ่งเหล่านั้นใน proc ...
Johan

74

ในจุดเริ่มต้น (ทางกลับใน Unix) วิธีที่โปรแกรมพบเกี่ยวกับกระบวนการทำงานบนระบบคือผ่านการอ่านโครงสร้างกระบวนการโดยตรงจากหน่วยความจำเคอร์เนล (เปิด / dev / mem และตีความข้อมูลดิบโดยตรง) นี่คือการทำงานของคำสั่ง 'ps' ครั้งแรก เมื่อเวลาผ่านไปข้อมูลบางอย่างถูกทำให้พร้อมใช้งานผ่านการเรียกของระบบ

อย่างไรก็ตามมันเป็นรูปแบบที่ไม่ดีในการเปิดเผยข้อมูลระบบโดยตรงไปยังพื้นที่ผู้ใช้ผ่าน / dev / mem และน่ารังเกียจที่จะสร้างการเรียกระบบใหม่อย่างต่อเนื่องทุกครั้งที่คุณต้องการส่งออกข้อมูลกระบวนการบางส่วนใหม่และวิธีการใหม่ที่ถูกสร้างขึ้น เพื่อเข้าถึงข้อมูลที่มีโครงสร้างสำหรับแอปพลิเคชันพื้นที่ผู้ใช้เพื่อค้นหาข้อมูลเกี่ยวกับคุณลักษณะของกระบวนการ นี่คือระบบไฟล์ / proc ด้วย / proc อินเทอร์เฟซและโครงสร้าง (ไดเรกทอรีและไฟล์) อาจถูกเก็บไว้เหมือนกันแม้ว่าโครงสร้างข้อมูลพื้นฐานในเคอร์เนลจะเปลี่ยนไป นี่คือความเปราะบางน้อยกว่าระบบก่อนหน้านี้และมันก็ปรับขนาดได้ดีขึ้น

ระบบไฟล์ / proc ได้รับการออกแบบมาเพื่อเผยแพร่ข้อมูลกระบวนการและคุณลักษณะของระบบที่สำคัญสองสามประการคือ 'ps', 'top', 'free' และยูทิลิตี้ระบบอื่น ๆ อย่างไรก็ตามเนื่องจากมันใช้งานง่าย (ทั้งจากเคอร์เนลและฝั่งผู้ใช้) มันจึงกลายเป็นพื้นทิ้งสำหรับข้อมูลระบบทั้งหมด นอกจากนี้ยังเริ่มรับไฟล์อ่าน / เขียนเพื่อใช้ในการปรับการตั้งค่าและควบคุมการทำงานของเคอร์เนลหรือระบบย่อยต่างๆ อย่างไรก็ตามวิธีการในการใช้งานอินเทอร์เฟซการควบคุมเป็นแบบเฉพาะกิจและ / proc ในไม่ช้าก็ยุ่งเหยิงยุ่งเหยิง

sysfs (หรือระบบไฟล์ / sys) ได้รับการออกแบบเพื่อเพิ่มโครงสร้างให้กับระเบียบนี้และให้วิธีการเปิดเผยข้อมูลระบบและจุดควบคุม (ระบบที่ตั้งค่าได้และแอตทริบิวต์ไดรเวอร์) ไปยังพื้นที่ผู้ใช้จากเคอร์เนล ตอนนี้เฟรมเวิร์กไดรเวอร์ในเคอร์เนลจะสร้างไดเรกทอรีภายใต้ / sys โดยอัตโนมัติเมื่อลงทะเบียนไดรเวอร์ตามชนิดของไดรเวอร์และค่าในโครงสร้างข้อมูล ซึ่งหมายความว่าไดรเวอร์ประเภทใดประเภทหนึ่งจะมีองค์ประกอบเดียวกันที่เปิดเผยผ่าน sysfs

ข้อมูลระบบดั้งเดิมและจุดควบคุมหลายแห่งยังคงสามารถเข้าถึงได้ใน / proc แต่บัสและไดรเวอร์ใหม่ทั้งหมดควรเปิดเผยข้อมูลและจุดควบคุมผ่าน sysfs


8
เหตุผลหนึ่งที่เป็น "รูปแบบไม่ดี" ที่จะใช้/dev/memและ/dev/kmemเป็นเพราะพวกเขาต้องการการเข้าถึงรูทดังนั้นแอปพลิเคชันที่ใช้พวกเขาจะต้องมี setuid
Barmar

2
บนระบบ UNIX จำนวนมากและบน Linux ผู้แฟ้มอุปกรณ์คือกลุ่มที่เป็นเจ้าของโดยกลุ่มkmemและเครื่องมือเช่นpsมี kmemSGID
ตอบโต้

2
ในความเป็นจริงวิธีการเก่าของการเข้าถึงโดยตรง/dev/memหรือ/dev/kmemเร็วกว่าสำหรับเคอร์เนลเนื่องจากกระบวนการโหมดผู้ใช้สามารถทำได้เพียงmmapไฟล์และดึงข้อมูลทั้งหมดเพียงแค่อ่าน RAM การรับข้อมูลชิ้นส่วนใด ๆ จาก/procระบบไฟล์นั้นต้องใช้ syscall หนึ่งอันopenและอีกอันเพื่อreadให้ช้ากว่ามาก อย่างไรก็ตาม/procไม่ต้องการแฮ็กเฉพาะของเคอร์เนลในการอ่านหน่วยความจำและทำให้ข้อมูลที่มีความอ่อนไหวน้อยลงสำหรับกระบวนการโหมดผู้ใช้
Mikko Rantalainen

10

procfs อนุญาตโดยพลการfile_operationssysfs ถูก จำกัด มากขึ้น


3

sysfs เป็นระบบไฟล์เสมือนที่สร้างขึ้นในระหว่างรอบการปล่อยเคอร์เนล 2.6 Kernel เพื่อแสดงข้อมูลอุปกรณ์เนื่องจาก procfs ไม่ได้ทำข้อมูลประเภทนี้ที่ดี

หน่วยความจำและอื่น ๆ ไม่ได้รับการโอนย้ายไปยัง sysfs เนื่องจากมันไม่เคยตั้งใจที่จะแสดงข้อมูลประเภทนั้น


หน่วยความจำและอื่น ๆ ไม่ได้รับการโอนย้ายไปยัง sysfsคุณหมายถึงอะไรโดยการย้าย? และทำไมมันไม่ได้มีเจตนาที่จะแสดงข้อมูลประเภทนั้น? คุณช่วยอธิบายเรื่องนี้ให้ฉันฟังได้ไหม
Sen

โดยรังเพลิงฉันหมายถึงย้ายซึ่งเป็นคำตอบสำหรับคำถามของคุณถ้าหน่วยความจำ ฯลฯ จะถูกย้ายไปยัง sysfs และมันก็แค่ตั้งใจที่จะแสดงข้อมูลอุปกรณ์ที่เป็นสิ่งที่ procfs ไม่ดี procfs ยังคงยอดเยี่ยมสำหรับข้อมูลประเภทอื่น ๆ
kemra102

1

ตามที่ฉันต้องการจะเพิ่มที่นี่ ... As / proc เป็นเวอร์ชั่นเก่าที่มีข้อมูลของอุปกรณ์เคอร์เนลในช่วงเวลานั้น .. ขณะที่ sysfs มาพร้อมกับเคอร์เนลเวอร์ชัน 2.6 ดังนั้นข้อมูลไดรเวอร์อุปกรณ์ทำไดเรกทอรีของตัวเองซึ่งเป็น มีโครงสร้างเล็กน้อยและเข้าถึงได้ง่าย ..

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.