Khác biệt giữa bản sửa đổi của “Dynamic Link Library”
Nội dung được xóa Nội dung được thêm vào
Bổ sung tiêu đề |
|||
Dòng 9:
==Ưu nhược điểm của thư viện liên kết động==
*Giảm không gian sử dụng của [[bộ nhớ]]: hàm và dữ liệu trong các DLL được chia sẻ bởi các ứng dụng dùng nó. Như trong ví dụ ở trên, các ứng dụng [[Winword]], [[Excel]], [[Internet Explorer]] sẽ dùng chung một hàm print() đã được biên dịch thành mã máy và để trong một DLL nào đó, mà không cần phải bao gồm toàn bộ mã nguồn của hàm. Bên cạnh đó,ta cũng có thể giảm được dung lượng [[bộ nhớ]] của [[chương trình]] tùy vào cách dùng các hàm DLL (Run-time hay Load-time, sẽ được trình bày sau): ứng dụng của ta sẽ chỉ nạp các hàm này khi nào dùng đến.▼
===Giảm không gian sử dụng của [[bộ nhớ]]===
▲
Mã trong DLL nằm trong khu vực chỉ cho đọc (read-only) và được nạp vào các trang nhớ đánh dấu read-only. Nó cho phép hệ thống [[ánh xạ]] DLL vào trong không gian địa chỉ nhớ của các tiến trình sử dụng nó. Và như vậy, DLL được nạp chỉ một lần, và nếu một tiến trình yêu cầu sử dụng nó, [[hệ điều hành]] chỉ việc ánh xạ DLL tới không gian địa chỉ của ứng dụng gọi DLL.
===Giảm Swapping (tráo đổi)===
Bây giờ giả sử có một tiến trình bắt đầu chạy và yêu cầu hệ thống nạp một DLL hiện đang được dùng bởi một ứng dụng đã chạy trước đó. Chuyện gì sẽ xảy ra? Liệu [[hệ thống]] có nạp DLL một lần nữa không? Hiển nhiên là không, vì DLL được [[định nghĩa]] ra để có thể dùng chung giữa các ứng dụng khác nhau. Thành phần đã nạp DLL có tất cả [[các hàm]] và [[dữ liệu]] của nó trong bộ nhớ và hệ thống sẽ chỉ phải ánh xạ chúng tới không gian địa chỉ của tiến trình mới cho chúng hoạt động. Nó liên quan đến việc đọc các hàm và dữ liệu DLL từ trên đĩa.
===Có thể đóng gói và đưa vào chương trình khác===
===Tạo ra khả năng tương tác giữa các [[ngôn ngữ lập trình]]===
Mặc dù hầu hết các [[ngôn ngữ lập trình]] đều hỗ trợ việc sử dụng thư viện liên kết động, nhưng lại có rất ít [[ngôn ngữ lập trình]] cho phép tạo ra chúng. Với việc sử dụng DLL, người ta có thể tập trung nhiều hơn vào các [[xử lý]] [[logic]] của hệ thống, mà không cần phải quan tâm đến những xử lý thông thường, mà nếu phát triển từ đầu, sẽ chi phí rất nhiều [[thời gian]] và công sức. Các công việc này đã được thực hiện bởi một người nào đó, và đóng gói dưới dạng các DLL.▼
▲*Tạo ra khả năng tương tác giữa các [[ngôn ngữ]]: Một ứng dụng có thể sử dụng các DLL viết bằng bất cứ [[ngôn ngữ]] nào. Các nhà phát triển [[phần mềm]] chỉ việc đóng gói các [[module]] của mình vào trong một DLL với ngôn ngữ ưa thích, sau đó module này có thể được sử dụng trong các ứng dụng viết bằng [[C++]] hay [[Visual Basic]].
===Dễ dàng đưa ra sự hỗ trợ sau khi đã chuyển giao ứng dụng cho [[khách hàng]]===
▲Mặc dù hầu hết các ngôn ngữ đều hỗ trợ việc sử dụng thư viện liên kết động, nhưng lại có rất ít ngôn ngữ cho phép tạo ra chúng. Với việc sử dụng DLL, người ta có thể tập trung nhiều hơn vào các [[xử lý]] [[logic]] của hệ thống, mà không cần phải quan tâm đến những xử lý thông thường, mà nếu phát triển từ đầu, sẽ chi phí rất nhiều [[thời gian]] và công sức. Các công việc này đã được thực hiện bởi một người nào đó, và đóng gói dưới dạng các DLL.
===DLL Hell===
▲*Dễ dàng đưa ra sự hỗ trợ sau khi đã chuyển giao ứng dụng cho [[khách hàng]]: nếu như ta phát hiện có một số thành phần trong ứng dụng cần phải được thay đổi và sự thay đổi này cần phải được [[cập nhật]] cho khách hàng. Đóng gói và phân phối lại toàn bộ sản phẩm đã bán cho tất cả các khách hàng của chúng ta là một công việc hết sức khó khăn. Tuy nhiên ta có thể tránh được điều này nếu như ứng dụng của ta được thiết kế tốt thành các module và đóng gói chúng trong các DLL. Khi một module nào đó cần thay đổi, ta chỉ việc đóng gói lại DLL chứa module đó và gửi tới khách hàng, cho họ [[cập nhật]].
Là khó khăn lớn nhất thỉnh thoảng gặp khi dùng DLL. Ta có thể gặp những thông báo lỗi dạng như: ''The ordinal abc could not be located in the dynamic-link library xyz.dll''; hoặc khi [[cài đặt]] một ứng dụng mới, một số chương trình khác đang bình thường bỗng nhiên bị trục trặc hoặc thậm chí không thể nạp lên để chạy được.
==Cấu trúc và phân loại DLL:==
|