การรันซอฟต์แวร์ userland แบบ 64 บิตบนเคอร์เนลแบบ 32 บิตคืออะไร


10

บน Linux และ Windows ฉันคุ้นเคยกับสถานการณ์ที่ฉันต้องการเคอร์เนล 64 บิตเพื่อให้ระบบมี multiarch / WoW ที่ฉันสามารถเรียกใช้ซอฟต์แวร์แบบ 32 บิตและ 64 บิตแบบเคียงข้างกัน

และเมื่อหลายปีก่อนมันทำให้ฉันรู้สึกเครียดเมื่อมีคนบอกฉันว่า MacOS 10.6 Snow Leopard สามารถเรียกใช้แอปพลิเคชัน 64 บิตด้วยเคอร์เนลในโหมด 32 บิต สิ่งนี้อาจถูกลืมไปแล้วในตอนนี้เพราะเป็นการเปลี่ยนแปลงเทคโนโลยีครั้งเดียว ด้วยฮาร์ดแวร์ที่ก้าวล้ำในพื้นที่มือถือเท่าที่ฉันรู้ว่าสิ่งนี้ไม่จำเป็นในการย้ายไป 64- บิตสำหรับ iOS และ Android

คำถามของฉัน: อะไรจะได้รับความสามารถเดียวกันในเคอร์เนล 32 บิต (i386 หรือ armhf)

ฉันเข้าใจว่านี่อาจไม่สำคัญ ถ้าเป็นเช่นนั้น Microsoft อาจนำคุณลักษณะนี้ไปใช้ใน Windows XP 32 บิต ข้อกำหนดทั่วไปมีอะไรบ้าง เคยมีการเสนอแพทช์หรือพิสูจน์แนวคิดหรือไม่?

ในโลกที่ฝังตัวฉันคิดว่าสิ่งนี้จะเป็นประโยชน์อย่างยิ่งเนื่องจากการสนับสนุน 64 บิตอาจล้าหลังเป็นเวลานานในไดรเวอร์อุปกรณ์


คุณแน่ใจหรือไม่ว่า Snow Leopard สามารถเรียกใช้แอพ 64 บิตด้วยเคอร์เนล 32 บิตได้? IIRC เคอร์เนลได้รับการปรับปรุงด้วยฮาร์ดแวร์ที่มีคุณสมบัติเป็น 64- บิต
muru

5
ไม่เป็นไรคุณพูดถูก: superuser.com/a/340591/334516
muru

คำตอบ:


16

การรันแอปพลิเคชัน 64 บิตต้องการการสนับสนุนจากเคอร์เนล: เคอร์เนลต้องมีอย่างน้อยตั้งค่าหน้าตาราง, ขัดจังหวะตาราง ฯลฯ ตามความจำเป็นเพื่อสนับสนุนการเรียกใช้รหัส 64- บิตบน CPU และจำเป็นต้องบันทึก 64- บิตเต็ม บริบทเมื่อสลับระหว่างแอปพลิเคชัน (และจากแอปพลิเคชันไปยังเคอร์เนลและด้านหลัง) ดังนั้นเคอร์เนลแบบ 32 บิตล้วนๆไม่สามารถรองรับ 64 บิต userspace ได้

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

คำถามคือว่ามันคุ้มค่าหรือไม่ สำหรับ Mac และระบบอื่น ๆ สามารถสร้างเคสได้เนื่องจากรองรับรหัสเคอร์เนล 32 บิตหมายความว่าไดรเวอร์ไม่จำเป็นต้องทำการสลับพร้อมกัน บน Linux รูปแบบการพัฒนานั้นแตกต่างกัน: สิ่งใดในเคอร์เนลจะถูกย้ายข้อมูลตามความจำเป็นเมื่อทำการเปลี่ยนแปลงจำนวนมากและสิ่งที่อยู่นอกเคอร์เนลไม่ได้รับการสนับสนุนโดยนักพัฒนาเคอร์เนล การสนับสนุน userland แบบ 32- บิตที่มีเคอร์เนล 64- บิตนั้นมีประโยชน์และคุ้มค่ากับความพยายาม (อย่างน้อยมันก็คือเมื่อเพิ่มการรองรับ x86-64) ฉันไม่แน่ใจว่ามีกรณีที่ต้องทำสำหรับ 64- บิตใน 32 -นิดหน่อย...


ขอบคุณสิ่งนี้มีประโยชน์แม้ว่าตอนนี้ที่ Gilles ได้ชี้ให้เห็นคำตอบที่เกี่ยวข้องของเขาใน unix.stackexchange ฉันคิดว่ามันต้องการความสมบูรณ์มากกว่า จากสิ่งที่ฉันรวบรวมไว้ที่ฝังอยู่ในกระแสความคิดเห็นดูเหมือนว่ามันเป็นไปไม่ได้ใน armhf เนื่องจากข้อ จำกัด ทางสถาปัตยกรรมในขณะที่เป็นไปได้ในทางทฤษฎีสำหรับ i386? กรณีที่จะทำ: แรงจูงใจเริ่มต้นคือ Raspbian ที่แผนงานของมูลนิธิคือการรักษาเคอร์เนลเดียวสำหรับปีที่จะมาในขณะที่การรักษาความเข้ากันได้กับ Pi Zero
jdonald

3

Snow Leopard สามารถเรียกใช้ไบนารี 64 บิตในซีพียู Intel 64 บิต

นอกจากนี้ยังสามารถบูตด้วยเคอร์เนล 64 บิตเมื่อ efi ของคุณมีอยู่แล้ว 64 บิต (ชุดการผลิตของ Macbook รุ่น "transition-model" pro ของฉันเป็นเครื่องจักรที่มีอยู่แล้ว)

ไม่มีการจำลองที่เกี่ยวข้องคุณเพียงแค่จ่ายค่าประสิทธิภาพที่น้อยลงเมื่อทำการบูตในโหมด 32 บิตในระยะไกล

ในซีพียู 32- บิตบริสุทธิ์คุณจะไม่สามารถทำเช่นนั้นได้เนื่องจากพวกเขาไม่รู้ว่าจะแปลรหัส 64 บิตได้อย่างไร นอกจากว่าคุณกำลังเลียนแบบด้วยซอฟต์แวร์ซึ่งจะทำให้ช้าลงสำหรับประเภทของเครื่องฝังตัวแบบดั้งเดิมภายใต้อำนาจ

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