Làm thế nào Wine không phải là một trình giả lập?


23

Theo tôi hiểu các trình giả lập (một cách đơn giản), chúng dịch hoặc thay thế các cuộc gọi chức năng của một chương trình bằng cách sử dụng các chức năng của hệ thống X thành các chức năng được sử dụng bởi hệ thống Y trong đó chương trình đang được chạy. Dự án Wine tuyên bố rằng Wine không phải là Trình giả lập, bởi vì:

Thay vì mô phỏng logic Windows bên trong như máy ảo hoặc trình giả lập, Wine chuyển các cuộc gọi API Windows sang các cuộc gọi POSIX, loại bỏ các hình phạt về hiệu năng và bộ nhớ của các phương thức khác và cho phép bạn tích hợp sạch các ứng dụng Windows vào máy tính để bàn của mình.

Chà, làm thế nào các trình giả lập và máy ảo mô phỏng logic Windows bên trong trên các hệ thống không phải của Windows? Có phải điều đó bằng cách dịch các cuộc gọi hệ thống Windows sang các cuộc gọi tương ứng của máy chủ không? Sự khác biệt giữa trình giả lập và không giả lập (như Wine) là trình giả lập giả lập toàn bộ hệ điều hành, sau đó ứng dụng sử dụng API hệ thống đó mà không biết rằng nó đang nói chuyện với trình giả lập, trong khi người không giả lập trực tiếp chuyển các cuộc gọi của ứng dụng sang máy chủ ( và ứng dụng cũng có thể không biết)? Có phải mức độ bổ sung là chỉ khác nhau giữa trình giả lập và Wine?


7
Thông thường khi những người có đầu óc máy tính sử dụng từ "giả lập", họ có nghĩa là một trình giả lập phần cứng , phần mềm mô phỏng phần cứng. Theo nghĩa đó, Wine không phải là một trình giả lập. Tuy nhiên theo nghĩa từ điển của từ này, Wine mô phỏng Windows và theo nghĩa đó, bạn có thể gọi Wine là trình giả lập Windows.
Christoffer Hammarström

1
RƯỢU cũng là một backronym hơi kéo dài, một loại hài hước thu hút tính cách cần thiết để tạo ra RƯỢU ngay từ đầu.
RBerteig

Câu trả lời:


29

Chà, làm thế nào các trình giả lập và máy ảo mô phỏng logic Windows bên trong trên các hệ thống không phải của Windows? Có phải điều đó bằng cách dịch các cuộc gọi hệ thống Windows sang các cuộc gọi tương ứng của máy chủ không?

Không, hoặc ít nhất là không theo nghĩa mà WINE làm - bằng cách dịch theo nghĩa đen, hệ thống gọi một đến một trong không gian người dùng. Một trình giả lập thực hiện điều này một cách trừu tượng thông qua một tuyến đường quanh co hơn; nó không dịch các cuộc gọi hệ thống trực tiếp.

Một sự thật giả lập tạo ra một ảo máy (ví dụ x86-64), không phải là một ảo hệ điều hành . Về lý thuyết, bạn có thể chạy bất kỳ hệ điều hành nào nhắm vào kiểu máy đó. Thông thường một "trình giả lập" bao gồm hệ điều hành, nhưng đó không thực sự là những gì nó đang mô phỏng; HĐH mà nó bao gồm giống như hệ điều hành sẽ chạy trên máy thật.

Trình giả lập đôi khi được sử dụng để mô phỏng phần cứng khác với máy chủ, nhưng cũng có phần cứng hoàn toàn giống nhau cho mục đích chạy một HĐH bên trong một HĐH khác.

RƯỢU khác với điều này ở chỗ nó không thực sự là cửa sổ. Bạn có thể chạy trình giả lập x86-64 với một bản sao thực sự của các cửa sổ bên trong nó, nhưng đó không phải là RƯỢU. Họ tuyên bố rằng nó thực sự hiệu quả hơn một trình giả lập có ý nghĩa - chi phí cho việc dịch các cuộc gọi hệ thống có lẽ thấp hơn so với việc chạy VM. Nhược điểm là RƯỢU chỉ có thể là cửa sổ; bạn không thể sử dụng nó với một số HĐH khác vì bạn có thể là một VM bình thường .


13

Hãy xem xét các máy ảo Java. Không có JVM mô phỏng bất kỳ cái nào khác, tất cả chúng đều là các triển khai của một đặc tả. Rượu không mô phỏng win32 api, đó là một triển khai của nó. Thông số kỹ thuật và thực tế không nhất thiết phải phù hợp, cả triển khai của Microsoft và triển khai Wine đều có cách giải quyết để làm cho mã lỗi hoạt động và không nhất thiết phải triển khai là mục tiêu tốt hơn cho bất kỳ dự án cụ thể nào.


4

Wine là một shim mà chặn các lệnh gọi API của windows và chuyển đổi chúng một cách nhanh chóng thành (các) lệnh gọi API Linux tương ứng. Thay vào đó, một trình giả lập hoặc máy ảo mô phỏng một máy vật lý. Rõ ràng một shim là hiệu quả hơn, nhưng có thể không hoàn toàn có khả năng bắt chước các chức năng mong muốn.


0

Trình giả lập ảo hóa bộ xử lý và / hoặc HĐH thường chạy ứng dụng Windows bằng cách tạo logic và hành vi của nền tảng HĐH / bộ xử lý trong ứng dụng giả lập chạy trên nền tảng HĐH / bộ xử lý khác. Wine không ảo hóa hành vi Windows OS / bộ xử lý mà thay vào đó chạy ứng dụng Windows ở cùng mức độ trừu tượng như HĐH Windows. Nó thực hiện điều này bằng cách triển khai lại API Windows để chạy trực tiếp trên nền tảng bộ xử lý / hệ điều hành dựa trên Unix. Đó là, Wine là một triển khai lại các yếu tố cốt lõi của HĐH Windows, một tập hợp các DLL được biên dịch, dịch trực tiếp các yêu cầu gọi API của Windows thành mã dựa trên Unix tương đương giao tiếp trực tiếp với bộ xử lý vật lý.

Điều này có nghĩa là đôi khi có bối cảnh thời gian chạy sẽ cho phép Wine + Linux chạy ứng dụng Windows nhanh hơn chính Windows! Trình giả lập không bao giờ có khả năng đó vì mã của nó sẽ bận mô phỏng nền tảng CPU / WinOS trên nền tảng dựa trên Unix ở mức độ trừu tượng cao hơn. Trong trường hợp này, cần có thêm bản dịch và giao diện để chạy ứng dụng Windows. (Xem sơ đồ bên dưới)

Nói tóm lại, Wine là một triển khai lại của Windows, không phải là sự mô phỏng của Windows.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.