อ่าน 5 นาที
WoW64
ในการประมวลผลบนแพลตฟอร์มของ Microsoft นั้น WoW64 ( Windows 32-bit บน Windows 64-bit ) เป็นระบบย่อยของระบบปฏิบัติการWindows ที่สามารถเรียกใช้ แอปพลิเคชัน 32 บิตบน Windows 64...
WoW64
| WoW64 | |
|---|---|
| ชื่ออื่นๆ | Windows 32 บิต บน Windows 64 บิต |
| นักพัฒนา | ไมโครซอฟต์ |
| ปล่อย | 25 ตุลาคม 2544 |
| ระบบปฏิบัติการ | ไมโครซอฟต์ วินโดวส์ |
| แพลตฟอร์ม | IA-64 , x86-64 , ARM64 |
| พิมพ์ | เลเยอร์ความเข้ากันได้ |
| ใบอนุญาต | ซอฟต์แวร์เชิงพาณิชย์ที่เป็นกรรมสิทธิ์ |
| เว็บไซต์ | docs.microsoft.com/en-us/windows/desktop/WinProg64/running-32-bit-applications |
ในการประมวลผลบนแพลตฟอร์มของ Microsoft นั้น WoW64 ( Windows 32-bit บน Windows 64-bit ) เป็นระบบย่อยของระบบปฏิบัติการWindows ที่สามารถเรียกใช้ แอปพลิเคชัน 32 บิตบน Windows 64 บิตได้[ 1 ]โดยมีอยู่ในWindows เวอร์ชัน64 บิต ทั้งหมด ยกเว้นใน Windows Server Coreซึ่งเป็นส่วนประกอบเสริม และ Windows Nano Serverที่ไม่ได้รวมอยู่ด้วย[ a ] WoW64 มีจุดมุ่งหมายเพื่อจัดการกับความแตกต่างหลายประการระหว่าง Windows 32 บิตและ Windows 64 บิต โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับการเปลี่ยนแปลงโครงสร้างของ Windows เอง
ห้องสมุดการแปล
ระบบย่อย WoW64 ประกอบด้วยเลเยอร์ความเข้า กันได้ที่มีน้ำหนักเบา ซึ่งมีอินเทอร์เฟซที่คล้ายกันใน Windows เวอร์ชัน 64 บิตทั้งหมด โดยมีเป้าหมายเพื่อสร้างสภาพแวดล้อม 32 บิตที่ให้อินเทอร์เฟซที่จำเป็นในการเรียกใช้แอปพลิเคชัน Windows 32 บิตที่ไม่ได้รับการแก้ไขบนระบบ 64 บิต WOW64 ถูกนำไปใช้โดยใช้ DLL หลายตัว ซึ่งบางส่วนได้แก่: [ 3 ]
Wow64.dllอินเทอร์เฟซหลักของเคอร์เนล Windows NTที่แปลง (thunks) ระหว่างการเรียกใช้ฟังก์ชัน 32 บิตและ 64 บิต รวมถึงการจัดการตัวชี้และสแต็กการเรียก ใช้ฟังก์ชันWow64win.dllซึ่งจัดเตรียมจุดเข้าใช้งานที่เหมาะสมสำหรับแอปพลิเคชัน 32 บิต (win32k thunks)- ไฟล์ DLL ที่อนุญาตให้เรียกใช้คำสั่ง x86 แบบ 32 บิต ซึ่งแตกต่างกันไปตามสถาปัตยกรรมชุดคำสั่ง
- บนx86-64จะ
Wow64cpu.dllจัดการการสลับโปรเซสเซอร์จากโหมด 32 บิตเป็น 64 บิต ซึ่งมีต้นทุนการคำนวณต่ำ เนื่องจากเครื่อง x86-64 มีโหมดดั้งเดิมสำหรับการรันโค้ด x86 32 บิต[ 4 ] - บนIA-64 ( Itanium 2 ) จำเป็นต้องใช้ไฟล์สามไฟล์สำหรับการจำลองซอฟต์แวร์ ที่ช้าลง [ 5 ]
Wow64cpu.dllได้แก่ "เลเยอร์นามธรรม CPU",IA32Exec.binโปรแกรมจำลองซอฟต์แวร์ x86 และWowia32x.dllสะพานเชื่อมระหว่างโปรแกรมจำลองและระบบ WOW64 [ 6 ] - บนARMv8 64 บิตสำหรับ
xtajit.dllการจำลอง x86 และwowarmhw.dllสำหรับการสลับไปใช้โหมด ARM32 [ 3 ]
- บนx86-64จะ
รีจิสทรีและระบบไฟล์
ระบบย่อย WoW64 ยังจัดการด้านสำคัญอื่นๆ ของการเรียกใช้แอปพลิเคชัน 32 บิตด้วย มันเกี่ยวข้องกับการจัดการการทำงานร่วมกันของแอปพลิเคชัน 32 บิตกับส่วนประกอบของ Windows เช่นRegistryซึ่งมีคีย์ที่แตกต่างกันสำหรับแอปพลิเคชัน 64 บิตและ 32 บิต ตัวอย่างเช่น HKEY_LOCAL_MACHINE\Software\Wow6432Node คือคีย์ 32 บิตที่เทียบเท่ากับ HKEY_LOCAL_MACHINE\Software (แม้ว่าแอปพลิเคชัน 32 บิตจะไม่รับรู้ถึงการเปลี่ยนเส้นทางนี้ก็ตาม) คีย์ Registry บางตัวจะถูกแมปจาก 64 บิตไปยังคีย์ 32 บิตที่เทียบเท่ากัน ในขณะที่บางตัวจะมีเนื้อหาที่เหมือนกัน ขึ้นอยู่กับรุ่นของ Windows
ระบบปฏิบัติการใช้%SystemRoot%\system32ไดเร็กทอรีสำหรับไลบรารี 64 บิตและไฟล์ปฏิบัติการ ทำเช่นนี้เพื่อความเข้ากันได้กับเวอร์ชันเก่า เนื่องจากแอปพลิเคชันรุ่นเก่าจำนวนมากถูกเขียนโค้ดให้ใช้เส้นทางนั้น เมื่อเรียกใช้แอปพลิเคชัน 32 บิต WoW64 จะเปลี่ยนเส้นทางการเข้าถึง "system32" (เช่น การโหลด DLL) ไปยัง%SystemRoot%\SysWoW64ซึ่งมีไลบรารีและไฟล์ปฏิบัติการ 32 บิต ข้อยกเว้นจากการเปลี่ยนเส้นทางเหล่านี้คือ: [ 7 ]
%SystemRoot%\system32\catroot%SystemRoot%\system32\catroot2%SystemRoot%\system32\driverstore(เปลี่ยนเส้นทางบน Windows Server 2008, Windows Vista, Windows Server 2003 และ Windows XP)%SystemRoot%\system32\drivers\etc%SystemRoot%\system32\logfiles%SystemRoot%\system32\spool
การเปลี่ยนเส้นทางช่วยให้แอปพลิเคชัน 32 บิตทำงานได้โดยไม่ต้องรับรู้สถานะ WoW64 [ 7 ]หากแอปพลิเคชัน 32 บิตต้องการเข้าถึงจริง%SystemRoot%\System32ก็สามารถทำได้ผ่านไดเร็กทอรีเสมือน%SystemRoot%\sysnativeตั้งแต่ Windows Vista [ 7 ]การตรวจจับสถานะ Wow64 สามารถทำได้IsWow64Process()ผ่าน
มี ไดเร็กทอรี Program Files สองแห่ง ที่แอปพลิเคชันทั้ง 32 บิตและ 64 บิตสามารถมองเห็นได้ ไดเร็กทอรีที่เก็บไฟล์ 32 บิตเรียกว่าProgram Files (x86)เพื่อแยกความแตกต่างระหว่างทั้งสอง ในขณะที่ 64 บิตยังคงใช้ ชื่อ Program Files แบบดั้งเดิม โดยไม่มีคำขยายเพิ่มเติม การเปลี่ยนเส้นทางระบบไฟล์ไม่ได้ใช้เพื่อรักษาการแยก แต่ WoW64 จะเปลี่ยนและค้นหาผลลัพธ์ที่คล้ายกันเพื่อชี้โปรแกรมติดตั้งไปยังไดเร็กทอรีที่ถูกต้อง[ 8 ]FOLDERID_ProgramFiles
นอกจากนี้ ยังมีไดเร็กทอรีใหม่บางส่วนที่พบใน ARM64 ซึ่ง WOW64 ไม่เพียงแต่จัดการการทำงานของโปรแกรม x86 32 บิตเท่านั้น แต่ยังรวมถึงโปรแกรม ARM 32 บิตด้วย ซึ่งใช้SysArm32แทน ARM64 ยังรองรับสิ่งที่เรียกว่า CHPE "compiled-hybrid-PE" ซึ่งมีโค้ด ARM64 อยู่ในคอนเทนเนอร์ dll x86 (เพื่อความเข้ากันได้ที่มีประสิทธิภาพมากขึ้นโดยไม่ต้องจำลอง) dll เหล่านี้พบได้ในSyCHPE32. [ 9 ]
ความเข้ากันได้ของแอปพลิเคชัน
แอปพลิเคชัน 32 บิตที่ประกอบด้วยไดรเวอร์อุปกรณ์ โหมดเคอร์เนล 32 บิตเท่านั้น หรือที่เสียบเข้ากับพื้นที่กระบวนการของส่วนประกอบที่ถูกใช้งานเป็นกระบวนการ 64 บิตโดยสมบูรณ์ (เช่น Windows Explorer) ไม่สามารถทำงานบนแพลตฟอร์ม 64 บิตได้
แอปพลิเคชันบริการ 32 บิตได้รับการสนับสนุน โฟลเดอร์ SysWOW64 ที่อยู่ในโฟลเดอร์ Windows บนไดรฟ์ระบบปฏิบัติการมีแอปพลิเคชันหลายตัวเพื่อรองรับแอปพลิเคชัน 32 บิต (เช่น cmd.exe, odbcad32.exe สำหรับลงทะเบียน การเชื่อมต่อ ODBCสำหรับแอปพลิเคชัน 32 บิต) แอปพลิเคชัน 16 บิตแบบเก่าสำหรับ MS-DOS และ Windows รุ่นแรกๆ มักจะไม่เข้ากันกับ Windows Vista, 7, 8 และ 10 เวอร์ชัน 64 บิต แต่สามารถเรียกใช้บนระบบปฏิบัติการ Windows 64 บิตได้ผ่านซอฟต์แวร์เวอร์ชวลไลเซชัน ในทางกลับกัน Windows XP, Vista, 7, 8 และ 10 เวอร์ชัน 32 บิต มักจะสามารถเรียกใช้แอปพลิเคชัน 16 บิตได้โดยไม่มีปัญหาหรือมีปัญหาน้อยมาก แอปพลิเคชัน 16 บิตไม่สามารถทำงานได้โดยตรงภายใต้ Windows เวอร์ชัน x64 เนื่องจาก CPU ไม่รองรับโหมด VM86เมื่อทำงานในโหมด x64
Internet Explorerถูกพัฒนาขึ้นทั้งในรูปแบบ 32 บิตและ 64 บิต เนื่องจากมี ส่วนประกอบ ActiveX 32 บิตจำนวนมาก บนอินเทอร์เน็ตที่ไม่สามารถใช้งานร่วมกับเวอร์ชัน 64 บิตได้
ก่อนหน้านี้ เวอร์ชัน 32 บิตถูกใช้งานเป็นค่าเริ่มต้น และการตั้งค่าเวอร์ชัน 64 บิตให้เป็นเบราว์เซอร์เริ่มต้นนั้นทำได้ยาก แต่ใน Internet Explorer 10 ได้มีการเปลี่ยนแปลง โดยสามารถเรียกใช้ส่วนเสริม 32 บิตภายในเซสชัน 64 บิตได้ ทำให้ไม่จำเป็นต้องสลับไปมาระหว่างสองเวอร์ชันอีกต่อไป หากผู้ใช้เข้าไปในโฟลเดอร์ 32 บิต (โดยทั่วไปคือ C:\Program Files (x86)\Internet Explorer) และดับเบิ้ลคลิกไฟล์ iexplore.exe เวอร์ชัน 64 บิตก็จะยังคงโหลดอยู่ ในขณะที่ Internet Explorer 9 และเวอร์ชันก่อนหน้า จะโหลดเฉพาะเวอร์ชัน 32 บิตเท่านั้น
ณ ปี 2010 บั๊กในเลเยอร์การแปลของ WoW64 เวอร์ชัน x64 [ 10 ] [ 11 ]ยังทำให้แอปพลิเคชัน 32 บิตทั้งหมดที่พึ่งพา ฟังก์ชัน GetThreadContext ของ Windows APIไม่เข้ากัน แอปพลิเคชันดังกล่าวรวมถึงดีบักเกอร์แอปพลิเคชัน ตัวติดตามสแต็กการเรียก (เช่น IDE ที่แสดงสแต็กการเรียก) และแอปพลิเคชันที่ใช้ เอนจิ้น การเก็บขยะ (GC) หนึ่งในเอนจิ้น GC ที่ใช้กันอย่างแพร่หลายแต่ได้รับผลกระทบ[ 12 ]คือBoehm GCนอกจากนี้ยังใช้เป็นตัวเก็บขยะเริ่มต้นของMono ที่ได้รับความนิยมเช่น กัน แม้ว่า Mono จะได้แนะนำ GC ใหม่ (แต่เป็นตัวเลือก) ในเดือนตุลาคม 2010 ที่เรียกว่า SGen-GC แต่ก็ทำการสแกนสแต็กในลักษณะเดียวกับ Boehm GC ดังนั้นจึงทำให้ไม่เข้ากันกับ WoW64 เช่นกัน ยังไม่มีการแก้ไขใด ๆ ณ เดือนกรกฎาคม 2016 แม้ว่าจะมีการแนะนำวิธีแก้ปัญหาชั่วคราวแล้วก็ตาม[ 13 ]
ผลงาน
ตามข้อมูลของ Microsoft ซอฟต์แวร์ 32 บิตที่ทำงานภายใต้ WOW64 (x64) มีประสิทธิภาพใกล้เคียงกับการทำงานภายใต้ Windows 32 บิต แต่สามารถใช้เธรดได้น้อยกว่า บนระบบที่ไม่ใช่ x64 WOW64 จะทำให้เกิดภาระด้านประสิทธิภาพเนื่องจากการจำลองซอฟต์แวร์ที่เกี่ยวข้อง[ 5 ]
แอปพลิเคชัน 32 บิตสามารถได้รับหน่วยความจำเสมือน เต็ม 4 กิกะไบต์ บนระบบ 64 บิต ในขณะที่บนระบบ 32 บิต หน่วยความจำที่สามารถเข้าถึงได้บางส่วนจะสูญหายไปเนื่องจากถูกใช้โดยเคอร์เนลและอุปกรณ์ต่อพ่วงที่แมปหน่วยความจำ เช่นการ์ดแสดงผลซึ่งโดยทั่วไปแล้วจะทำให้แอปสามารถใช้ RAM ได้สูงสุดเพียง 2 หรือ 3 กิกะไบต์เท่านั้น
ดูเพิ่มเติม
- ชิม (การคำนวณ)
- ระบบควบคุมบัญชีผู้ใช้ (User Account Control)ยังมีกลไกในการจัดการกับโปรแกรม "รุ่นเก่า" ที่เขียนไฟล์ไปยังพื้นที่เฉพาะบนหน้าต่าง "รุ่นใหม่" ด้วย ไฟล์ที่เขียนจากกระบวนการที่ไม่มีสิทธิ์ผู้ดูแลระบบไปยังตำแหน่งที่ได้รับการป้องกัน เช่น Program Files และ windows\system32 จะถูกเปลี่ยนเส้นทางไปยังไดเร็กทอรีจัดเก็บเสมือน
- วินโดวส์บนวินโดวส์
หมายเหตุ
- ^โดยเฉพาะอย่างยิ่ง:
- Windows XP Professional รุ่น 64 บิต
- Windows Server 2003เวอร์ชันIA-64และx64
- ระบบปฏิบัติการ Windows Vista , Windows Server 2008 , Windows 7 , Windows 8 , Windows Server 2012 , Windows 8.1 , Windows 10 , Windows Server 2016 , Windows Server 2019 , Windows 11และWindows Server 2022เวอร์ชัน64 บิต
- ระบบปฏิบัติการ Windows 10 , Windows 11และWindows Server 2022 เวอร์ชันARM64
wow64.dll,wow64win.dll, และ อีกwow64cpu.dllด้วย
ลิงก์ภายนอก
- หน้าเว็บ MSDN เกี่ยวกับการเรียกใช้แอปพลิเคชัน 32 บิตบน Windows 64 บิต