คุณพูดถึงว่ารหัสเฉพาะสำหรับ CPU ทำไมต้องเป็นรหัสเฉพาะกับระบบปฏิบัติการด้วย นี่เป็นคำถามที่น่าสนใจมากกว่าที่คำตอบหลายข้อคิดเอาไว้
โมเดลความปลอดภัยของ CPU
วิ่งโปรแกรมแรกในส่วนซีพียูทำงานในสิ่งที่เรียกว่าวงแหวนหรือแหวน 0 วิธีการที่ CPU เฉพาะเจาะจงใช้แหวนแตกต่างกันไป แต่มันหมายถึงว่าเกือบทุก CPU ที่ทันสมัยมีอย่างน้อย 2 โหมดของการดำเนินการอย่างใดอย่างหนึ่งซึ่งเป็นสิทธิพิเศษและเรียกใช้รหัส 'โลหะเปลือย' ซึ่งสามารถดำเนินการทางกฎหมายใด ๆ ไม่น่าเชื่อถือและเรียกใช้รหัสที่ได้รับการป้องกันซึ่งสามารถทำชุดความสามารถที่ปลอดภัยที่กำหนดไว้เท่านั้น ซีพียูบางตัวมีความละเอียดสูงกว่ามากและเพื่อที่จะใช้ VM อย่างปลอดภัยต้องมีวงแหวนพิเศษอย่างน้อย 1 หรือ 2 วง (มักติดป้ายชื่อด้วยจำนวนลบ) อย่างไรก็ตามนี่อยู่นอกเหนือขอบเขตของคำตอบนี้
ที่มาของระบบปฏิบัติการ
ระบบปฏิบัติการ tasking เดียวในช่วงต้น
ในช่วงแรก ๆ ระบบ DOS และ tasking อื่น ๆ ที่ใช้รหัสทั้งหมดทำงานในวงแหวนด้านในทุกโปรแกรมที่คุณเคยวิ่งมีพลังเต็มทั้งคอมพิวเตอร์และสามารถทำอะไรก็ได้อย่างแท้จริงถ้ามันทำงานผิดปกติรวมถึงการลบข้อมูลทั้งหมดของคุณหรือแม้แต่ทำฮาร์ดแวร์เสียหาย ในบางกรณีที่รุนแรงเช่นการตั้งค่าโหมดการแสดงผลที่ไม่ถูกต้องบนหน้าจอแสดงผลที่เก่ามากแย่ลงซึ่งอาจเกิดจากรหัสรถที่ไม่มีความอาฆาตพยาบาท
รหัสนี้จริง ๆ แล้วผู้ไม่เชื่อเรื่องพระเจ้าส่วนใหญ่ตราบใดที่คุณมีโหลดเดอร์ที่สามารถโหลดโปรแกรมลงในหน่วยความจำได้ (ค่อนข้างง่ายสำหรับรูปแบบไบนารีในตอนต้น) และรหัสไม่ได้ขึ้นอยู่กับไดรเวอร์ใด ๆ ระบบปฏิบัติการใด ๆ ตราบเท่าที่มันทำงานในแหวน 0 หมายเหตุระบบปฏิบัติการที่ง่ายมากเช่นนี้มักจะเรียกว่าจอภาพถ้ามันใช้เพียงเพื่อเรียกใช้โปรแกรมอื่น ๆ และไม่มีฟังก์ชั่นเพิ่มเติม
ระบบมัลติทาสกิ้งสมัยใหม่
ระบบปฏิบัติการที่ทันสมัยกว่ารวมถึง UNIX , Windowsรุ่นที่เริ่มต้นด้วย NTและอื่น ๆ ที่ไม่ชัดเจน OSes ตัดสินใจที่จะปรับปรุงในสถานการณ์นี้ผู้ใช้ต้องการคุณสมบัติเพิ่มเติมเช่นมัลติทาสกิ้งเพื่อให้สามารถเรียกใช้มากกว่าหนึ่งแอปพลิเคชันในครั้งเดียว หรือรหัสที่เป็นอันตราย) ในแอปพลิเคชันไม่สามารถทำให้เกิดความเสียหายอย่างไม่ จำกัด กับตัวเครื่องและข้อมูล
สิ่งนี้ทำโดยใช้วงแหวนดังกล่าวข้างต้นระบบปฏิบัติการจะใช้สถานที่เดียวที่ทำงานในริง 0 และแอปพลิเคชันจะทำงานในวงแหวนนอกที่ไม่น่าเชื่อถือเท่านั้นที่สามารถดำเนินการชุดปฏิบัติการที่ จำกัด ซึ่งระบบปฏิบัติการอนุญาต
อย่างไรก็ตามยูทิลิตี้และการป้องกันที่เพิ่มขึ้นนี้มีค่าใช้จ่ายตอนนี้โปรแกรมต้องทำงานกับระบบปฏิบัติการเพื่อทำงานที่พวกเขาไม่ได้รับอนุญาตให้ทำเองพวกเขาไม่สามารถควบคุมฮาร์ดดิสก์ได้โดยตรงโดยการเข้าถึงหน่วยความจำและเปลี่ยนโดยพลการ ข้อมูล แต่พวกเขาต้องขอให้ระบบปฏิบัติการทำงานเหล่านี้เพื่อให้สามารถตรวจสอบว่าพวกเขาได้รับอนุญาตให้ดำเนินการไม่เปลี่ยนไฟล์ที่ไม่ได้เป็นของพวกเขาก็จะตรวจสอบว่าการดำเนินการถูกต้องและแน่นอน จะไม่ปล่อยให้ฮาร์ดแวร์อยู่ในสถานะไม่ได้กำหนด
แต่ละระบบปฏิบัติการตัดสินใจเกี่ยวกับการใช้งานที่แตกต่างกันสำหรับการปกป้องเหล่านี้บางส่วนขึ้นอยู่กับสถาปัตยกรรมที่ระบบปฏิบัติการได้รับการออกแบบและบางส่วนขึ้นอยู่กับการออกแบบและหลักการของระบบปฏิบัติการในคำถาม UNIX ยกตัวอย่างเช่นมุ่งเน้นไปที่เครื่อง คุณลักษณะที่มีอยู่สำหรับสิ่งนี้ในขณะที่หน้าต่างได้รับการออกแบบให้เรียบง่ายขึ้นใช้กับฮาร์ดแวร์ที่ช้ากว่าด้วยผู้ใช้คนเดียว วิธีที่โปรแกรมพื้นที่ผู้ใช้ยังพูดคุยกับระบบปฏิบัติการนั้นแตกต่างอย่างสิ้นเชิงกับ X86 เช่นเดียวกับ ARM หรือ MIPS เช่นบังคับให้ระบบปฏิบัติการหลายแพลตฟอร์มทำการตัดสินใจตามความจำเป็นในการทำงานกับฮาร์ดแวร์ที่เป็นเป้าหมาย
การโต้ตอบเฉพาะระบบปฏิบัติการเหล่านี้มักจะเรียกว่า "การเรียกของระบบ" และรวมถึงวิธีการที่โปรแกรมพื้นที่ผู้ใช้โต้ตอบกับฮาร์ดแวร์ผ่านระบบปฏิบัติการอย่างสมบูรณ์โดยพื้นฐานแล้วพวกเขาแตกต่างกันไปตามฟังก์ชั่นของระบบปฏิบัติการ เฉพาะระบบปฏิบัติการ
ตัวโหลดโปรแกรม
นอกจากนี้ในการเรียกระบบแต่ละระบบปฏิบัติการมีวิธีที่แตกต่างกันในการโหลดโปรแกรมจากสื่อเก็บข้อมูลทุติยภูมิและในหน่วยความจำในการสั่งซื้อที่จะใส่ได้โดยเฉพาะระบบปฏิบัติการโปรแกรมจะต้องมีส่วนหัวเป็นพิเศษซึ่งอธิบายถึงระบบปฏิบัติการว่ามันอาจจะเป็น โหลดและรัน
ส่วนหัวนี้เคยง่ายพอที่การเขียนตัวโหลดสำหรับรูปแบบที่แตกต่างกันนั้นแทบจะไม่สำคัญอย่างไรก็ตามด้วยรูปแบบที่ทันสมัยเช่นเอลฟ์ที่รองรับคุณสมบัติขั้นสูงเช่นการเชื่อมโยงแบบไดนามิกและการประกาศที่อ่อนแอตอนนี้เป็นไปไม่ได้ ซึ่งไม่ได้ออกแบบมาสำหรับมันหมายความว่าแม้ว่าจะไม่มีระบบเรียกความไม่ลงรอยกันมันเป็นเรื่องยากอย่างยิ่งที่จะวางโปรแกรมไว้ใน RAM ในลักษณะที่สามารถทำงานได้
ห้องสมุด
โปรแกรมแทบจะไม่ใช้การเรียกของระบบโดยตรง แต่พวกมันเกือบจะได้รับฟังก์ชั่นการใช้งานของพวกเขาเท่านั้นแม้ว่าไลบรารีที่ล้อมรอบการเรียกของระบบในรูปแบบที่เป็นมิตรสำหรับภาษาการเขียนโปรแกรมเช่น C มี C Standard Library และ glibc ภายใต้ Linux Windows NT และเหนือภาษาการเขียนโปรแกรมอื่นส่วนใหญ่มีไลบรารีที่คล้ายกันซึ่งห่อฟังก์ชันการทำงานของระบบในวิธีที่เหมาะสม
ห้องสมุดเหล่านี้สามารถในระดับหนึ่งแม้จะเอาชนะปัญหาข้ามแพลตฟอร์มดังกล่าวข้างต้นมีช่วงของห้องสมุดซึ่งได้รับการออกแบบมาให้แพลตฟอร์มเครื่องแบบเพื่อการใช้งานในขณะที่ภายในการจัดการการโทรไปยังที่หลากหลายของระบบปฏิบัติการเช่น SDLนี้หมายความว่าแม้ว่า โปรแกรมไม่สามารถเข้ากันได้กับไบนารีโปรแกรมที่ใช้ไลบรารีเหล่านี้สามารถมีแหล่งข้อมูลร่วมกันระหว่างแพลตฟอร์มทำให้การย้ายพอร์ตทำได้ง่ายเหมือนการคอมไพล์ใหม่
ข้อยกเว้นสำหรับข้างต้น
แม้จะมีทั้งหมดที่ฉันพูดที่นี่มีความพยายามที่จะเอาชนะข้อ จำกัด ที่ไม่สามารถเรียกใช้โปรแกรมบนระบบปฏิบัติการมากกว่าหนึ่งระบบ ตัวอย่างที่ดีคือโครงการไวน์ซึ่งประสบความสำเร็จในการจำลองทั้งตัวโหลดโปรแกรม win32 รูปแบบไบนารีและไลบรารีระบบที่อนุญาตให้โปรแกรม Windows ทำงานบน UNIX ต่างๆ นอกจากนี้ยังมีเลเยอร์ที่ใช้งานร่วมกันได้ซึ่งช่วยให้ระบบปฏิบัติการ BSD UNIX หลายตัวสามารถรันซอฟต์แวร์ Linux และแน่นอนว่า shim ของ Apple นั้นอนุญาตให้ใช้งานซอฟต์แวร์ MacOS รุ่นเก่าภายใต้ MacOS X
อย่างไรก็ตามโครงการเหล่านี้ทำงานผ่านการพัฒนาด้วยตนเองในระดับสูง ขึ้นอยู่กับว่า OS ทั้งสองนั้นแตกต่างกันอย่างไรในช่วงความยากลำบากตั้งแต่ชิมขนาดเล็กไปจนถึงการลอกเลียนแบบที่สมบูรณ์ของระบบปฏิบัติการอื่นซึ่งมักจะซับซ้อนกว่าการเขียนระบบปฏิบัติการทั้งหมดในตัวเองดังนั้นนี่คือข้อยกเว้นและไม่ใช่กฎ