ดูที่แหล่งที่มาของstrace
ฉันพบการใช้ธงโคลนCLONE_IDLETASK
ซึ่งอธิบายไว้ที่นั่น:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
หลังจากมองลึกลงไปฉันพบว่าแม้ว่าแฟล็กนั้นจะไม่ครอบคลุมในman clone
นั้นจะถูกใช้โดยเคอร์เนลในระหว่างกระบวนการบูตเพื่อสร้างกระบวนการว่าง (ซึ่งทั้งหมดควรมี PID 0) สำหรับแต่ละ CPU บนเครื่อง เช่นเครื่องที่มี 8 CPUs จะมีอย่างน้อย 7 (ดูคำถามด้านล่าง) กระบวนการดังกล่าว "กำลังทำงาน" (เครื่องหมายคำพูด)
ตอนนี้สิ่งนี้ทำให้ฉันมีคำถามสองสามข้อเกี่ยวกับกระบวนการ "ว่าง" ที่ทำจริง ๆ ข้อสันนิษฐานของฉันคือมันประมวลผลการดำเนินการ NOP อย่างต่อเนื่องจนกว่ากรอบเวลาจะสิ้นสุดลงและเคอร์เนลจะกำหนดกระบวนการจริงให้เรียกใช้หรือกำหนดกระบวนการว่างอีกครั้ง (หากไม่ได้ใช้งาน CPU) กระนั้นนั่นก็เป็นการคาดเดาที่สมบูรณ์ ดังนั้น:
บนเครื่องที่มี 8 ซีพียู 7 กระบวนการที่ไม่ได้ใช้งานจะถูกสร้างขึ้นหรือไม่? (และ CPU หนึ่งตัวจะถูกเก็บไว้โดยเคอร์เนลเองในขณะที่ไม่มีการทำงานของ userspace?)
กระบวนการที่ไม่ได้ใช้งานเป็นเพียงแค่กระแสการดำเนินการ NOP ที่ไม่สิ้นสุดจริงๆ (หรือลูปที่ทำเช่นเดียวกัน)
การใช้งาน CPU (พูด
uptime
) คำนวณโดยเพียงแค่ว่ากระบวนการว่างบน CPU นานแค่ไหนและไม่ได้อยู่ในช่วงระยะเวลาหนึ่งหรือไม่
ป.ล. มีโอกาสที่คำถามจำนวนมากนี้เกิดจากความจริงที่ว่าฉันไม่เข้าใจวิธีการทำงานของ CPU อย่างสมบูรณ์ เช่นฉันเข้าใจการชุมนุมเวลาและการขัดจังหวะ แต่ฉันไม่ทราบว่าตัวอย่างเช่น CPU อาจใช้พลังงานมากขึ้นหรือน้อยลงขึ้นอยู่กับสิ่งที่กำลังดำเนินการ ฉันจะขอบคุณถ้ามีคนสามารถสอนฉันด้วยที่