procfs และ sysfs แตกต่างกันอย่างไร ทำไมพวกเขาทำในฐานะระบบไฟล์? ตามที่ฉันเข้าใจ proc เป็นเพียงสิ่งที่จะเก็บข้อมูลทันทีเกี่ยวกับกระบวนการทำงานในระบบ
procfs และ sysfs แตกต่างกันอย่างไร ทำไมพวกเขาทำในฐานะระบบไฟล์? ตามที่ฉันเข้าใจ proc เป็นเพียงสิ่งที่จะเก็บข้อมูลทันทีเกี่ยวกับกระบวนการทำงานในระบบ
คำตอบ:
procfs และ sysfs แตกต่างกันอย่างไร
proc
เป็นแบบเก่ามันมากหรือน้อยโดยไม่มีกฎและโครงสร้าง และในบางครั้งก็มีการตัดสินใจว่าproc
มันวุ่นวายเกินไปและต้องการวิธีการใหม่
จากนั้นsysfs
ถูกสร้างขึ้นและสิ่งใหม่ที่เพิ่มเข้ามาจะถูกนำไปใส่sysfs
เหมือนข้อมูลอุปกรณ์
ดังนั้นในบางแง่มุมพวกเขาก็ทำแบบเดียวกัน แต่sysfs
มีโครงสร้างมากกว่าเล็กน้อย
ทำไมพวกเขาทำในฐานะระบบไฟล์?
ปรัชญา UNIX บอกเราว่าทุกอย่างเป็น "ไฟล์" ดังนั้นมันจึงถูกสร้างขึ้นเพื่อให้ทำงานเป็นไฟล์
ตามที่ฉันเข้าใจ proc เป็นเพียงสิ่งที่จะเก็บข้อมูลทันทีเกี่ยวกับกระบวนการทำงานในระบบ
sysfs
ชิ้นส่วนเหล่านั้นได้เสมอนั่นและพวกเขาอาจจะไม่เคยย้ายเข้า
แต่มีสิ่งเก่า ๆ อีกมากมายที่คุณสามารถค้นหาได้proc
ซึ่งยังไม่ได้ย้าย
ในจุดเริ่มต้น (ทางกลับใน Unix) วิธีที่โปรแกรมพบเกี่ยวกับกระบวนการทำงานบนระบบคือผ่านการอ่านโครงสร้างกระบวนการโดยตรงจากหน่วยความจำเคอร์เนล (เปิด / dev / mem และตีความข้อมูลดิบโดยตรง) นี่คือการทำงานของคำสั่ง 'ps' ครั้งแรก เมื่อเวลาผ่านไปข้อมูลบางอย่างถูกทำให้พร้อมใช้งานผ่านการเรียกของระบบ
อย่างไรก็ตามมันเป็นรูปแบบที่ไม่ดีในการเปิดเผยข้อมูลระบบโดยตรงไปยังพื้นที่ผู้ใช้ผ่าน / dev / mem และน่ารังเกียจที่จะสร้างการเรียกระบบใหม่อย่างต่อเนื่องทุกครั้งที่คุณต้องการส่งออกข้อมูลกระบวนการบางส่วนใหม่และวิธีการใหม่ที่ถูกสร้างขึ้น เพื่อเข้าถึงข้อมูลที่มีโครงสร้างสำหรับแอปพลิเคชันพื้นที่ผู้ใช้เพื่อค้นหาข้อมูลเกี่ยวกับคุณลักษณะของกระบวนการ นี่คือระบบไฟล์ / proc ด้วย / proc อินเทอร์เฟซและโครงสร้าง (ไดเรกทอรีและไฟล์) อาจถูกเก็บไว้เหมือนกันแม้ว่าโครงสร้างข้อมูลพื้นฐานในเคอร์เนลจะเปลี่ยนไป นี่คือความเปราะบางน้อยกว่าระบบก่อนหน้านี้และมันก็ปรับขนาดได้ดีขึ้น
ระบบไฟล์ / proc ได้รับการออกแบบมาเพื่อเผยแพร่ข้อมูลกระบวนการและคุณลักษณะของระบบที่สำคัญสองสามประการคือ 'ps', 'top', 'free' และยูทิลิตี้ระบบอื่น ๆ อย่างไรก็ตามเนื่องจากมันใช้งานง่าย (ทั้งจากเคอร์เนลและฝั่งผู้ใช้) มันจึงกลายเป็นพื้นทิ้งสำหรับข้อมูลระบบทั้งหมด นอกจากนี้ยังเริ่มรับไฟล์อ่าน / เขียนเพื่อใช้ในการปรับการตั้งค่าและควบคุมการทำงานของเคอร์เนลหรือระบบย่อยต่างๆ อย่างไรก็ตามวิธีการในการใช้งานอินเทอร์เฟซการควบคุมเป็นแบบเฉพาะกิจและ / proc ในไม่ช้าก็ยุ่งเหยิงยุ่งเหยิง
sysfs (หรือระบบไฟล์ / sys) ได้รับการออกแบบเพื่อเพิ่มโครงสร้างให้กับระเบียบนี้และให้วิธีการเปิดเผยข้อมูลระบบและจุดควบคุม (ระบบที่ตั้งค่าได้และแอตทริบิวต์ไดรเวอร์) ไปยังพื้นที่ผู้ใช้จากเคอร์เนล ตอนนี้เฟรมเวิร์กไดรเวอร์ในเคอร์เนลจะสร้างไดเรกทอรีภายใต้ / sys โดยอัตโนมัติเมื่อลงทะเบียนไดรเวอร์ตามชนิดของไดรเวอร์และค่าในโครงสร้างข้อมูล ซึ่งหมายความว่าไดรเวอร์ประเภทใดประเภทหนึ่งจะมีองค์ประกอบเดียวกันที่เปิดเผยผ่าน sysfs
ข้อมูลระบบดั้งเดิมและจุดควบคุมหลายแห่งยังคงสามารถเข้าถึงได้ใน / proc แต่บัสและไดรเวอร์ใหม่ทั้งหมดควรเปิดเผยข้อมูลและจุดควบคุมผ่าน sysfs
/dev/mem
และ/dev/kmem
เป็นเพราะพวกเขาต้องการการเข้าถึงรูทดังนั้นแอปพลิเคชันที่ใช้พวกเขาจะต้องมี setuid
kmem
และเครื่องมือเช่นps
มี kmem
SGID
/dev/mem
หรือ/dev/kmem
เร็วกว่าสำหรับเคอร์เนลเนื่องจากกระบวนการโหมดผู้ใช้สามารถทำได้เพียงmmap
ไฟล์และดึงข้อมูลทั้งหมดเพียงแค่อ่าน RAM การรับข้อมูลชิ้นส่วนใด ๆ จาก/proc
ระบบไฟล์นั้นต้องใช้ syscall หนึ่งอันopen
และอีกอันเพื่อread
ให้ช้ากว่ามาก อย่างไรก็ตาม/proc
ไม่ต้องการแฮ็กเฉพาะของเคอร์เนลในการอ่านหน่วยความจำและทำให้ข้อมูลที่มีความอ่อนไหวน้อยลงสำหรับกระบวนการโหมดผู้ใช้
procfs อนุญาตโดยพลการfile_operations
sysfs ถูก จำกัด มากขึ้น
procfs รายการได้รับfile_operations
struct ซึ่งมีคำแนะนำการทำงานที่ตรวจสอบสิ่งที่เกิดขึ้นกับทุกสายระบบไฟล์ที่ใช้เช่นopen
, read
, mmap
ฯลฯ และคุณสามารถดำเนินการโดยพลการจากผู้ที่
ตัวอย่างน้อยที่สุด:
sysfs ถูก จำกัด มากขึ้นในความรู้สึกต่อไปนี้:
show
และstore
ซึ่ง Linux ใช้ในการดำเนินการopen
, close
, read
, write
และlseek
สำหรับคุณ ดูเพิ่มเติม: วิธีแนบไฟล์ไปยังแอ็ตทริบิวต์ sysfs ในไดรเวอร์แพลตฟอร์มได้อย่างไร | กองล้นมากเกินไปkobject
ตัวอย่างน้อยที่สุด: วิธีการสร้างแอ็ตทริบิวต์คลาส sysfs อย่างง่ายใน Linux kernel v3.2 | กองล้นมากเกินไป
sysfs เป็นระบบไฟล์เสมือนที่สร้างขึ้นในระหว่างรอบการปล่อยเคอร์เนล 2.6 Kernel เพื่อแสดงข้อมูลอุปกรณ์เนื่องจาก procfs ไม่ได้ทำข้อมูลประเภทนี้ที่ดี
หน่วยความจำและอื่น ๆ ไม่ได้รับการโอนย้ายไปยัง sysfs เนื่องจากมันไม่เคยตั้งใจที่จะแสดงข้อมูลประเภทนั้น
ตามที่ฉันต้องการจะเพิ่มที่นี่ ... As / proc เป็นเวอร์ชั่นเก่าที่มีข้อมูลของอุปกรณ์เคอร์เนลในช่วงเวลานั้น .. ขณะที่ sysfs มาพร้อมกับเคอร์เนลเวอร์ชัน 2.6 ดังนั้นข้อมูลไดรเวอร์อุปกรณ์ทำไดเรกทอรีของตัวเองซึ่งเป็น มีโครงสร้างเล็กน้อยและเข้าถึงได้ง่าย ..