2012-06-20 48 views

Trả lời

10

Đã lâu rồi kể từ khi câu hỏi này được hỏi nhưng tôi chỉ thêm câu trả lời cho mục đích lưu trữ.

Chúng ta hãy có một cái nhìn tại các định nghĩa sau đây:

Logical address: Địa chỉ tạo ra bởi CPU

Physical address: Địa chỉ theo cách nhìn của đơn vị quản lý bộ nhớ (MMU)

Bây giờ trong compile time binding chúng tôi giả định rằng một loạt các vị trí bộ nhớ sẽ luôn luôn có sẵn (đủ cho chương trình) và mã tuyệt đối được tạo ra. Vì vậy, bất cứ địa chỉ nào CPU tạo ra (như địa chỉ con trỏ, vv) đều giống như những gì được nhìn thấy bởi MMU.

Phiên bản sử dụng bộ nhớ tốt hơn là trì hoãn ràng buộc cho đến khi thời gian tải sao cho bộ nhớ không được sử dụng bởi chương trình đang ngồi trên đĩa. Đối với điều này mã được tạo ra trong định dạng relocatable. Đây là load time binding.

Bây giờ execution time binding có một chút khác biệt khi liên kết bị trì hoãn cho đến thời gian thực hiện. Trong trường hợp này CPU tạo ra một địa chỉ, chúng ta hãy nói 300 và thực hiện mọi thao tác trên địa chỉ 300 nhưng bất cứ khi nào có quyền truy cập bộ nhớ thực tế, địa chỉ này được chuyển đổi bằng cách thêm giá trị của thanh ghi có thể định vị lại, hãy cho chúng tôi biết R. Phạm vi địa chỉ hợp lý là 0-LIM trong khi không gian địa chỉ thực là R-(R+LIM).

Hãy để tôi cũng giải thích nó với một ví dụ để nó trở nên rõ ràng hơn:

xem xét trao đổi nếu bạn đổi chương trình với load time binding bạn cần phải trao đổi nó trở lại cùng một vị trí (như tất cả các địa chỉ trong các hướng dẫn đã bidden theo địa chỉ này) trong khi trong execution time binding bạn có thể trao đổi lại bất kỳ quá trình nào cho bất kỳ nơi nào bởi vì bạn chỉ cần thay đổi giá trị trong thanh ghi relocatable và nó sẽ chỉ hoạt động tốt. Do đó tăng cường sử dụng bộ nhớ.

+0

Bạn có thể vui lòng cho tôi biết sự khác biệt giữa việc di dời và ràng buộc không? – Zephyr

Các vấn đề liên quan