Một biến thể của phương pháp này là có chức năng getblock mất một
tham số để chỉ ra "chế độ" sử dụng cho các thông tin. Nếu chế độ là ĐỌC
sau đó vùng đệm dữ liệu giả định rằng không có thay đổi sẽ được thực hiện các nội dung của bộ đệm
(và do đó không có hoạt động viết cần được thực hiện khi bộ đệm được tái sử dụng để lưu trữ một
khối). Nếu chế độ là VIẾT sau đó vùng đệm dữ liệu giả định rằng khách hàng sẽ không
xem xét các nội dung của bộ đệm và do đó, không đọc từ tập tin là cần thiết. Nếu
chế độ được ĐỌC VÀ VIẾT sau đó vùng đệm dữ liệu có thể đọc được các nội dung hiện có
của khối từ đĩa CD, và ghi các nội dung của bộ đệm vào đĩa khi
bộ đệm sẽ được tái sử dụng. Sử dụng "chế độ" phương pháp tiếp cận, phương pháp dirtyblock được
tránh.
Một vấn đề với ADT đệm đi qua là rủi ro của con trỏ cũ. Khi
người sử dụng hồ bơi đệm được đưa ra một con trỏ đến một số không gian đệm vào thời điểm T1, con trỏ đó
không thực sự tham khảo các dữ liệu cần thiết tại thời điểm đó. Theo yêu cầu tiếp tục được thực hiện cho
các vùng đệm, có thể là các dữ liệu trong bộ đệm cho bất kỳ sẽ được gỡ bỏ và
thay thế bằng dữ liệu mới. Nếu người sử dụng hồ bơi đệm tại một thời điểm T2 sau đó đề cập đến các
dữ liệu được đề cập đến bởi con trỏ được đưa ra tại thời điểm T1, có thể là các dữ liệu không
còn giá trị vì các nội dung đệm đã được thay thế trong khi chờ đợi. Như vậy
con trỏ vào bộ nhớ đệm hồ bơi đã trở thành "cũ." Để đảm bảo rằng một
con trỏ không phải là cũ, nó không nên được sử dụng nếu can thiệp yêu cầu đưa vào vùng đệm
đã diễn ra.
Chúng ta có thể giải quyết vấn đề này bằng cách giới thiệu các khái niệm về một người sử dụng (hoặc có thể
nhiều người dùng) tiếp cận với một bộ đệm, và sau đó phát hành các bộ đệm khi thực hiện xong.
Chúng tôi sẽ bổ sung thêm phương pháp acquireBuffer và releaseBuffer cho mục đích này.
Phương pháp acquireBuffer có một mã số cấm là đầu vào và trả về một con trỏ đến
bộ đệm sẽ được được sử dụng để lưu trữ khối này. Vùng đệm sẽ giữ một số của các
số lượng yêu cầu hiện đang hoạt động cho khối này. Phương pháp releaseBuffer sẽ
làm giảm số lượng người dùng hoạt động cho khối liên quan. Bộ đệm kết hợp với
các khối hoạt động sẽ không đủ điều kiện để xả từ các hồ bơi đệm. Điều này sẽ dẫn
đến một vấn đề nếu khách hàng bỏ qua việc phát hành các khối hoạt động khi họ không còn
cần thiết. Ngoài ra, còn một vấn đề nếu có nhiều hoạt động hơn so với tổng khối
bộ đệm trong vùng đệm. Tuy nhiên, hồ bơi đệm nên luôn luôn được khởi tạo
bao gồm nhiều bộ đệm hơn bao giờ hết cần được hoạt động cùng một lúc.
Một vấn đề nữa với cả hai ADTs giới cho đến nay xảy ra khi người dùng
có ý định để ghi đè lên hoàn toàn nội dung của một khối, và không cần phải đọc
các nội dung cũ đã có trên đĩa. Tuy nhiên, vùng đệm có thể không nói chung
biết liệu người sử dụng muốn sử dụng các nội dung cũ hay không. Điều này đặc biệt đúng
với cách tiếp cận thông điệp đi qua nơi một tin nhắn cho có thể ghi đè lên chỉ
một phần của khối. Trong trường hợp này, khối sẽ được đọc vào bộ nhớ ngay cả khi không
cần thiết, và sau đó nội dung của nó sẽ được ghi đè.
không hiệu quả này có thể tránh được (ít nhất là trong phiên bản đệm đi qua), phân chia
nhiệm vụ của khối để bộ đệm từ thực sự đọc trong dữ liệu cho
Sec. 8.3? Ers Bu và Bu? Hồ bơi er 281
khối. Đặc biệt, các sửa đổi sau đây đệm đi qua ADT không thực sự
đọc dữ liệu trong phương pháp acquireBuffer. Người dùng muốn xem nội dung cũ
sau đó phải ra một yêu cầu readBlock để đọc dữ liệu từ đĩa vào
bộ đệm, và sau đó yêu cầu getDataPointer để truy cập trực tiếp vào bộ đệm
dữ liệu nội dung.
đang được dịch, vui lòng đợi..