30/09/2018, 20:27
Khác biệt giữa hệ điều hành 32bit và 64bit
Chào các bác, em chưa hiểu rõ hệ điều hành 32bit và 64bit khác nhau như thế nào và tại sao một đoạn code assembly chạy được trên win32 nhưng không chạy được trên win64. Mong các bác giải thích giúp. Em cám ơn!
Bài liên quan
Khác biệt chủ yếu ở mỗi câu lệnh assembly tùy hệ điều hành mà có kích thước khác nhau. ở OS 32bit thì kích thước là 32bit, OS 64bit tương tự. Nhưng lệnh 64bit mới không chạy được trên OS 32bit chứ nhỉ?
Theo mình hiểu thì cái 32 bits hay 64 bits ở đây chính là chỉ số đường truyền dữ liệu đồng thời. 32 bits thì cùng một lúc sẽ có 32 bits được truyền đi, nên không gian địa chỉ là 2^32bytes = 4BG, vừa cung cấp địa chỉ cho bộ nhớ và các cổng vào ra nữa nên chỉ quản lí được nhỏ hơn 4GB Ram, còn 64 bits thì tương tự nhé. Tương tự cho đường truyền dữ liệu
Mình học vi sử lý bình thường code trên emu8086 nhưng có lần thầy mình viết trên notepad rồi build trên win32 bit. Cuối buổi thầy bảo code không chạy trên win64 mà chỉ trên win32
trường mình thầy cũng chỉ debug ở win 32 bit.
Cám ơn bạn, bạn có thể cho mình ít tài liệu để đọc cặn kẽ được không.
emu8086 chạy trên win64 bình thường, cái asm của 8086 chạy trên DOS OS, emu8086 là phần mềm giả lập DOS OS thôi.
Dân điện tử ko thể ko biết tới cuốn The Intel Microprocessor 8086/8088…
Theo mình biết thì bits là nói về dữ liệu (data) chứ nhỉ ^^ (1 bytes là 8 bits, nên 32 bits là 4 byte và 64 bits là 8 octet).
Thực ra để hiểu cái này chúng ta lật lai lịch sử 1 chút và kiến trúc software / hardware ^^
Đó là: Processor -> OS -> Application
Để chạy được 64 bits OS bạn có phải CPU 64 bits
Để chạy được app 64 bits, bạn phải có OS 64 bits
Ở hệ thống OS 32 bits, các app chỉ được hạn chế sử dụng tới 4096 MB RAM (2^32 = 4.294.967.296) bởi vì kích thước của giá trị 32 bits chỉ tới vậy. Do đó, mỗi process được OS cấp 4GB bộ nhớ ảo để dùng (thực tế, do driver được nạp của BIOS và các thiết bị # nên RAM dùng còn nhỏ hơn 4GB, tầm 3.6GB là cùng)
Vậy đó, CPU 32 bits chỉ:
Ngược lại, các CPU 64bits có thể vượt qua con số 4GB này rất dễ dàng (2^64 = 17.2 tỷ GB), ngoài ra, các CPU 64 bits còn được thiết kể multi-core nên cũng cho tốc độ tính toán nhanh hơn, chính xác hơn, đặc biệt là các app được viết theo kiểu xử lý // (một dữ liệu lớn, nó chia thành nhiều dữ liệu xử lý trên nhiều core, đồng thời các dữ liệu chia nhỏ này cũng không bị hạn chế 4GB về kích thước)
Thử tượng tượng với các app 32 bits trước kia, khi cần xử lý dữ liệu có kích thước lớn thì phải làm thế nào? Cắt nhỏ, xử lý đơn luồng, rồi lại ghép … Chậm và khó chính xác như app 64 bits được (tất nhiên cũng có app 64 bits thiết kế đơn luồng nhé)
Một số quan điểm sai:
Một chút về compatible:
1K like cho Rep của bạn …
Thấy cái này có thể giúp các ứng dụng 64 bit chạy trên OS 32 bit
Link : http://wiki.qemu.org/Download
CPU xử lý song song hạn chế lắm, do các câu lệnh của các chương trình thường phải theo trình tự chứ ít khi chạy song song. Bởi vậy có 2 core 4 core thì cũng chả nhanh hơn 1 core gấp 2 hay 4 lần đâu. 32-bit mà multicore thì cũng như 64-bit multicore thôi. Xử lý song song phải là bên GPU, GPU nhiều core hơn CPU hẳn. Đề cao multicore ở đây là ko hoàn toàn đúng lắm
Cái này thì mình đồng ý với bạn. Thực ra, các app 32 bits trước kia do chạy trên OS/CPU 32 bits mà thời đó chưa có multi-core nên thường được thiết kế đơn luồng. Chứ bây giờ cũng có app 32 bits chạy đa luồng thật (thực ra mình cũng không có đề cao multi-core mà chỉ nói ưu thế của CPU 64 bits so với CPU 32 bits thôi)
Đúng là hiện giờ threading đang được đẩy sang GPU tính toán (nhưng không phải đẩy hoàn toàn vì GPU chỉ có ưu thế với các tính toán động). Bạn có thể xem https://en.wikipedia.org/wiki/AlphaGo, sẽ thấy tỷ lệ CPU / GPU trong tính toán song song (con này là Google DeepMind AI vừa chơi cờ vây)
Rất nhiều chương trình vẫn chạy // đó chứ, nhất là các chương trình trên máy chủ, ví dụ như MySQL, NginX, hay thậm chi NodeJS (tuy là single thread, nhưng vẫn có thể dùng PM2 để chạy Multi-process cùng lúc trên tất cả các core) giúp cho việc phục vụ tốt hơn nhiều.
Cám ơn các bác rất nhiều