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
Không có tóm lược sửa đổi
Dòng 8:
Khi đã được viết và đóng gói trong một DLL, một hàm có thể được sử dụng ở bất cứ ứng dụng nào dưới dạng mã máy của nó mà không phải quan tâm đến mã nguồn nó được viết chi tiết ra sao. Với các ứng dụng trước kia, ta có thể đính kèm [[file]] mã nguồn và sử dùng các hàm trong chương trình; tuy nhiên, giả sử như để có thể thao tác với [[máy in]], in một nội dung ta cần gọi hàm print() và ta đã có mã nguồn của hàm print này. Giả sử như không có DLL, thì bất cứ ứng dụng nào muốn sử dụng hàm print() sẽ bao gồm cả hàm này vào trong mã nguồn: từ chương trình [[Microsoft Word|Word]], [[Microsoft Excel|Excel]], [[Internet Explorer]],... như vậy trong hệ thống sẽ có rất nhiều [[bản sao]] của hàm print() này, làm cho dung lượng để chứa các [[chương trình]] tăng lên. Ngoài ra, khi [[phần cứng]] thay đổi, ta lại phải thay đổi mã nguồn của hàm print() để nó hoạt động đúng (nếu cần), việc này đẫn tới việc thay đổi theo dây chuyền đến các ứng dụng, gây ra rất nhiều khó khăn. Sau đây ta sẽ tìm hiểu chi tiết về ưu nhược điểm của việc sử dụng thư viện liên kết động. Các thư viện liên kết động là một thành phần không thể thiếu tạo nên [[hệ điều hành]] [[Windows]]. Ở đó, việc quản lý, trao đổi với [[phần cứng]] hay [[thiết bị ngoại vi]] đều thông qua các hàm có sẵn trong windows mà ta hay gọi là Windows API. Thay vì ta phải đưa lệnh [[điều khiển]] cho màn hình vẽ lên một cửa sổ giao diện như các ứng dụng, thì ta chỉ cần gọi một hàm trong một file DLL nào đó, hệ thống sẽ đảm bảo kết quả như ý muốn.
 
==Ư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ớ]]===
Dòng 16:
 
===Giảm Swapping (tráo đổi)===
Ta tưởng tượng có hai tiến trình sử dụng cùng một DLL, một tiến trình kết thúc công việc của nó và thoát ra. Nhưng DLL sẽ không gỡ bỏ ra khỏi [[bộ nhớ]] vì DLL quản lý [[thời gian]] tồn tại của nó bằng cách giữ một [[bộ đếm]] tham khảo cho các tiến trình sử dụng nó. Mỗi khi có một tiến trình nào đó yêu cầu sử dụng DLL, bộ đếm tham khảo sẽ tăng giá trị của nó lên 1; còn khi có một tiến trình gỡ bỏ không sử dụng nữa thì bộ đếm lại giảm đi 1. DLL sẽ [[tự động]] xóa bỏ ra khỏi bộ nhớ chừng nào bộ đếm tham khảo trở về 0, trạng thái cho biết không còn có tiến trình nào sử dụng DLL nữa.
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===
Khi đã xây dựng được một DLL với các chức năng hợp lý, ta có thể sử dụng nó trong bất cứ ứng dụng nào mà ta cảm thấy thích hợp. Ví dụ trong một ứng dụng nhỏ, ta có [[tập hợp]] các hàm chuyển đổi giá trị từ String sang ngày tháng và đóng gói nó vào trong một DLL. Khi đó, ở một ứng dụng khác, khi có nhu cầu chuyển đổi như trên, thì ta sẽ không phải viết lại [[các hàm]] hoặc đính kèm [[mã nguồn]] của các hàm đó vào chương trình đó nữa mà sử dụng trực tiếp DLL mà ta đã [[biên dịch]].
 
===Tạo ra khả năng tương tác giữa các [[ngôn ngữ lập trình]]===
Một ứng dụng có thể sử dụng các DLL viết bằng bất cứ [[ngôn ngữ lập trình]] 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]].
 
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.
 
===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]].
 
===DLL Hell===