ĐẠI HỌC HỆ THỐNG KIỂU ĐỂ ƯỚC LƯỢNG TĨNH TÀI NGUYÊN SỬ DỤNG CỦA CHƯƠNG TRÌNH GIAO DỊCH

Tìm hiểu hệ thống kiểu để ước lượng tĩnh tài nguyên sử dụng của chương trình giao dịch. Luận án tiến sĩ ngành Công nghệ thông tin chi tiết, dễ hiểu.

Chuyên ngành

Công nghệ thông tin

Người đăng

Ẩn danh

Thể loại

Luận án tiến sĩ
177
2
0

Phí lưu trữ

45 Point

Mục lục chi tiết

LỜI CAM ĐOAN

LỜI CẢM ƠN

TÓM TẮT

1. CHƯƠNG 1: GIỚI THIỆU

1.1. Đặt vấn đề

PHỤ LỤC: KIỂM THỬ CÔNG CỤ SUY DIỄN KIỂU

Tóm tắt

I. Tổng Quan Về Luận Án Ước Lượng Tĩnh Tài Nguyên 55

Luận án tiến sĩ này tập trung vào ước lượng tĩnh tài nguyên sử dụng trong chương trình giao dịch tương tranh. Trong lập trình tương tranh, việc đồng bộ hóa các luồng thường sử dụng cơ chế dựa trên khóa, tiềm ẩn nhiều lỗi và phức tạp. Cơ chế Bộ nhớ giao dịch phần mềm (STM) nổi lên như một giải pháp thay thế đầy hứa hẹn. Tuy nhiên, STM tiêu thụ nhiều tài nguyên bộ nhớ hơn do cơ chế tạo bản sao. Mục tiêu của luận án là xây dựng một hệ thống kiểu để ước lượng tĩnh lượng tài nguyên tối đa mà các chương trình STM cần sử dụng. Luận án kỳ vọng có thể giúp người lập trình kiểm soát và tối ưu hóa việc sử dụng tài nguyên, đặc biệt quan trọng trong môi trường nhúng và IoT. Luận án đưa ra những ngôn ngữ cốt lõi hoạt động theo cơ chế STM và lược bỏ hoặc đơn giản hóa một số tính chất của ngôn ngữ thực tế như tính kế thừa trong lập trình hướng đối tượng, vòng lặp vô hạn, hay các vấn đề về xung đột giữa các giao dịch. Từ đó, luận án xây dựng các hệ thống kiểu để tính toán trên những chương trình được viết bằng các ngôn ngữ này để đưa ra biên tài nguyên bộ nhớ mà chương trình cần sử dụng.

1.1. Cơ Chế Bộ Nhớ Giao Dịch Phần Mềm STM và Ưu Điểm

Cơ chế STM là một lựa chọn thay thế cho cơ chế dựa trên khóa để đồng bộ giữa các luồng. Cơ chế này giúp khắc phục những lỗi do cơ chế dựa trên khóa gây ra, giúp người lập trình viết chương trình đơn giản hơn. Theo cơ chế STM, khi một luồng hoặc một giao dịch cần sử dụng các đối tượng dùng chung, chúng sẽ nhân bản các đối tượng đó thành các bản sao (gọi là các log) để sử dụng độc lập. Khi các luồng đồng bộ, các log này sẽ được so sánh với bản gốc của nó, nếu không có mâu thuẫn, chúng sẽ được cập nhật vào bản gốc và các log được giải phóng. Nếu có mâu thuẫn (đối tượng gốc đã bị thay đổi bởi các giao dịch khác), giao dịch sẽ phải thực hiện lại (rollback) hoặc bị hủy bỏ (abort).

1.2. Tại Sao Ước Lượng Tĩnh Tài Nguyên Lại Quan Trọng

Cơ chế tạo ra các bản sao của các thành phần dùng chung làm cho chương trình STM tiêu thụ nhiều tài nguyên bộ nhớ hơn các chương trình truyền thống khác. Điều này có thể dẫn đến các lỗi thiếu tài nguyên bộ nhớ khi thực thi chương trình. Hơn nữa, nếu quá nhiều log được tạo ra đồng thời thì nguy cơ xung đột sẽ tăng cao, nhiều giao dịch sẽ phải thực hiện lại hoặc bị hủy bỏ. Điều này làm giảm đáng kể hiệu suất chương trình. Do đó, việc kiểm soát tài nguyên là vô cùng quan trọng. Luận án tập trung nghiên cứu lớp những chương trình tương tranh hỗ trợ cấu trúc giao dịch lồng nhau, và sử dụng cơ chế STM để điều khiển việc đồng bộ giữa các luồng, các giao dịch.

II. Thách Thức Trong Ước Lượng Tĩnh Chương Trình Giao Dịch 59

Việc ước lượng tĩnh tài nguyên cho chương trình giao dịch là một bài toán phức tạp do tính tương tranh và cơ chế STM. Các nghiên cứu hiện tại thường tập trung vào hiệu suất mà bỏ qua yếu tố tài nguyên. Ước lượng số lượng log tối đa và tài nguyên tối đa cần thiết là rất quan trọng để tối ưu hóa chương trình và tránh các lỗi do thiếu tài nguyên. Các nghiên cứu liên quan chủ yếu giải quyết cho chương trình tuần tự hoặc song song độc lập của các luồng. Sự phức tạp của bài toán đặt ra ở đây đó là các luồng không chạy độc lập hoàn toàn với nhau mà khi một giao dịch cam kết thì các luồng con trong giao dịch cũng phải cùng cam kết. Hệ thống kiểu của luận án có cấu trúc giàu thông tin và có thể áp dụng được cho nhiều hệ thống song song có đồng bộ tương tự. Giải pháp sử dụng hệ thống kiểu tĩnh của luận án cũng giúp việc xác định tài nguyên đảm bảo tính đúng mà không cần chạy chương trình. Việc này có ý nghĩa khoa học đối với lĩnh vực phương pháp hình thức trong phát triển phần mềm.

2.1. Vấn Đề Hiệu Suất và Tiêu Tốn Tài Nguyên Trong STM

Đã có nhiều nghiên cứu khác nhau về thiết kế, ứng dụng của cơ chế STM, tuy nhiên, các nghiên cứu thường chỉ tập trung vào các vấn đề hiệu suất thực hiện của chương trình mà bỏ qua các yếu tố quan trọng về sự tiêu tốn tài nguyên, năng lượng của các hệ thống STM. Nếu STM trở thành chủ đạo, những yếu tố về tài nguyên, năng lượng cần cho hệ thống cũng rất cần được quan tâm nghiên cứu. Điều này đặc biệt đúng đối với các hệ thống nhúng, bởi vì trong các hệ thống nhúng, tài nguyên, năng lượng tiêu thụ liên quan chặt chẽ đến tuổi thọ pin, hay các trung tâm dữ liệu, nơi mà tài nguyên, năng lượng tiêu hao đóng góp đáng kể vào chi phí hoạt động, và thậm chí cả trong môi trường máy tính để bàn.

2.2. Yêu Cầu Cần Thiết Trong Thiết Kế Chương Trình STM

Để các luồng/giao dịch chạy được độc lập, không phải chờ đợi nhau, mỗi luồng/giao dịch sẽ tạo ra các bản sao các thành phần dùng chung (gọi là các log), và thao tác trên các bản sao đó. Sau khi hoàn thành giao dịch, chúng sẽ đồng bộ các log và các giá trị gốc của nó. Nếu không có xung đột, giao dịch sẽ được hoàn thành, ngược lại giao dịch sẽ phải thực hiện lại (rollback), hoặc bị hủy bỏ (abort). Cơ chế tạo ra các bản sao của các thành phần dùng chung làm cho chương trình STM tiêu thụ nhiều tài nguyên bộ nhớ hơn các chương trình truyền thống khác. Điều này có thể dẫn đến các lỗi thiếu tài nguyên bộ nhớ khi thực thi chương trình.

III. Phương Pháp Ước Lượng Biên Tài Nguyên Bằng Hệ Thống Kiểu 60

Luận án đề xuất một phương pháp ước lượng biên tài nguyên cho chương trình giao dịch dựa trên hệ thống kiểu. Hệ thống kiểu này được thiết kế để xác định số lượng giao dịch tối đa và lượng tài nguyên mà mỗi giao dịch sử dụng. Bằng cách phân tích tĩnh mã nguồn, hệ thống kiểu có thể cung cấp thông tin về mức tiêu thụ tài nguyên của chương trình trước khi chạy, giúp người lập trình đưa ra các quyết định tối ưu hóa. Các quy tắc định kiểu trong hệ thống được thiết kế đơn giản, dễ cài đặt, mở rộng và chứng minh tính đúng đắn. Sau đó, luận án tiến hành mở rộng ngôn ngữ bằng cách bổ sung thêm vào mỗi giao dịch một tham số thể hiện lượng tài nguyên mà giao dịch cần sử dụng. Những tham số này không phải do người lập trình cung cấp mà chúng sẽ được tổng hợp từ các câu lệnh, các khai báo trong các giao dịch. Đồng thời, luận án xây dựng một hệ thống kiểu để xác định tài nguyên tối đa mà chương trình cần sử dụng dựa trên các tham số này.

3.1. Xây Dựng Ngôn Ngữ Giao Dịch Tối Giản và Hệ Thống Kiểu

Luận án xây dựng một ngôn ngữ giao dịch tối giản và một hệ thống kiểu để xác định tài nguyên tiêu thụ tối đa của chương trình. Tại bước này, luận án xây dựng một ngôn ngữ đa luồng hoạt động theo cơ chế STM. Ngôn ngữ này chỉ gồm những lệnh cơ bản nhất như tạo luồng, mở, đóng giao dịch (gọi ngôn ngữ này là ngôn ngữ giao dịch tối giản). Sau đó, luận án xây dựng một hệ thống kiểu để xác định số giao dịch tối đa của các chương trình viết bằng ngôn ngữ này. Lưu ý rằng số giao dịch tối đa chưa phải là lượng tài nguyên tối đa cần sử dụng của chương trình.

3.2. Cải Tiến Ngôn Ngữ Giao Dịch và Hệ Thống Kiểu Để Ước Lượng

Luận án mở rộng ngôn ngữ giao dịch và cải tiến các hệ thống kiểu để ước lượng tài nguyên tiêu thụ cho các biến dùng chung của chương trình. Đây là những thành phần sẽ bị nhân bản bởi cơ chế STM. Trong bước này, ngôn ngữ được mở rộng với cấu trúc mệnh lệnh có các khai báo biến, các câu lệnh điều kiện, câu lệnh vòng lặp cụ thể gần với ngôn ngữ thực tế. Từ đó, luận án xây dựng một hệ thống kiểu để xác định bộ nhớ cấp phát cho các biến dùng chung của những chương trình viết bởi ngôn ngữ này. Đồng thời hệ thống kiểu được cải tiến để có khả năng tích hợp.

IV. Ứng Dụng Ước Lượng Tĩnh Trong Ngôn Ngữ Hướng Đối Tượng 57

Luận án tiếp tục mở rộng ngôn ngữ với cấu trúc hướng đối tượng và cải tiến cơ chế STM, cùng với đó, hệ thống kiểu được cải tiến để ước lượng bộ nhớ giao dịch của chương trình. Kết quả là một ngôn ngữ và hệ thống kiểu gần với thực tế nhất. Bài toán ước lượng tĩnh được áp dụng cho ngôn ngữ hướng đối tượng, với mục tiêu xác định biên bộ nhớ cấp phát cho các đối tượng dùng chung của các giao dịch (biên bộ nhớ giao dịch). Việc này giúp nâng cao hiệu suất chương trình bằng cách giảm thiểu chi phí tạo bản sao và xung đột giao dịch. Kết quả của nghiên cứu này là một ngôn ngữ và một hệ thống kiểu gần với thực tế nhất.

4.1. Ngôn Ngữ Giao Dịch Hướng Đối Tượng và Cơ Chế STM

Ngôn ngữ được mở rộng với cấu trúc hướng đối tượng, cải tiến cơ chế STM, và hệ thống kiểu được cải tiến để ước lượng bộ nhớ giao dịch của chương trình. Tại bước này, luận án tiếp tục mở rộng ngôn ngữ để trở thành ngôn ngữ giao dịch với cấu trúc hướng đối tượng, đồng thời cải tiến cơ chế STM để chương trình sử dụng bộ nhớ hiệu quả hơn. Cùng với đó, luận án xây dựng một hệ thống kiểu tương ứng để xác định biên bộ nhớ cấp phát cho các đối tượng dùng chung của các giao dịch (gọi là biên bộ nhớ giao dịch).

4.2. Xác Định Biên Bộ Nhớ Cấp Phát Cho Đối Tượng Dùng Chung

Sau khi hoàn thành ngôn ngữ và hệ thống kiểu tổng quát này, luận án tiếp tục thực hiện các bước tiếp theo để cải tiến ngôn ngữ và hệ thống kiểu để gần với thực tế hơn. Luận án mở rộng ngôn ngữ giao dịch và cải tiến các hệ thống kiểu để ước lượng tài nguyên tiêu thụ cho các biến dùng chung của chương trình. Đây là những thành phần sẽ bị nhân bản bởi cơ chế STM.

V. Cài Đặt và Kiểm Thử Công Cụ Suy Diễn Kiểu Kết Quả 59

Luận án đã cài đặt các quy tắc kiểu để tạo ra một công cụ có khả năng suy diễn kiểu của một chương trình hợp lệ. Các công cụ được xây dựng bằng phương pháp lập trình hàm và được kiểm thử với một số ca kiểm thử do luận án đề xuất. Kết quả cho thấy công cụ có thể suy diễn kiểu và xác định biên tài nguyên của các chương trình STM đơn giản. Bên cạnh ngôn ngữ và hệ thống kiểu luận án đã thực hiện cài đặt các quy tắc kiểu để được công cụ có thể suy ra kiểu của một chương trình hợp lệ. Các công cụ này được xây dựng bằng phương pháp lập trình hàm và đã được thông qua với một số ca kiểm thử do luận án đề xuất. Kết quả của nghiên cứu này không chỉ có ý nghĩa trong việc giải quyết bài toán ước lượng tài nguyên bộ nhớ của chương trình STM, mà chúng còn đóng góp cho cộng đồng nghiên cứu về lý thuyết kiểu những hệ thống kiểu mới có ý nghĩa.

5.1. Xây Dựng Công Cụ Suy Diễn Kiểu Bằng Lập Trình Hàm

Ngoài những kết quả chính là những ngôn ngữ và hệ thống kiểu ở trên, luận án cũng đã thực hiện cài đặt các quy tắc kiểu để được công cụ có thể suy ra kiểu của một chương trình hợp lệ. Các công cụ này được xây dựng bằng phương pháp lập trình hàm và đã được thông qua với một số ca kiểm thử do luận án đề xuất.

5.2. Ý Nghĩa Khoa Học và Đóng Góp Cho Cộng Đồng Nghiên Cứu

Kết quả của nghiên cứu này không chỉ có ý nghĩa trong việc giải quyết bài toán ước lượng tài nguyên bộ nhớ của chương trình STM, mà chúng còn đóng góp cho cộng đồng nghiên cứu về lý thuyết kiểu những hệ thống kiểu mới có ý nghĩa. Những hệ thống kiểu này có thể làm nền tảng để chúng ta mở rộng, phát triển để giải quyết những bài toán khác, chẳng hạn như xác định số gas yêu cầu bởi các hợp đồng thông minh trong Ethereum, xác định tài nguyên CPU, tài nguyên đường truyền mạng, hay ước lượng thời gian cần thiết để một chương trình hoàn thành một công việc.

VI. Kết Luận và Hướng Nghiên Cứu Tiềm Năng Trong Tương Lai 58

Luận án đã xây dựng một hệ thống kiểu để ước lượng tĩnh tài nguyên sử dụng của chương trình giao dịch. Kết quả nghiên cứu không chỉ giúp người lập trình kiểm soát việc sử dụng tài nguyên mà còn đóng góp vào lĩnh vực lý thuyết kiểu. Hướng nghiên cứu tiếp theo có thể tập trung vào việc mở rộng hệ thống kiểu để ước lượng các loại tài nguyên khác (CPU, năng lượng) và áp dụng cho các ngôn ngữ lập trình thực tế. Các hệ thống kiểu này có thể làm nền tảng để chúng ta mở rộng, phát triển để giải quyết những bài toán khác, chẳng hạn như xác định số gas yêu cầu bởi các hợp đồng thông minh trong Ethereum, xác định tài nguyên CPU, tài nguyên đường truyền mạng, hay ước lượng thời gian cần thiết để một chương trình hoàn thành một công việc. Tính thời sự và sự cần thiết của nghiên cứu này có thể thấy rõ trong ngữ cảnh phát triển phần mềm trên các thiết bị di động ngày nay.

6.1. Tổng Kết Những Đóng Góp Chính Của Luận Án

Luận án đã xây dựng một hệ thống kiểu để ước lượng tĩnh tài nguyên sử dụng của chương trình giao dịch. Kết quả nghiên cứu không chỉ giúp người lập trình kiểm soát việc sử dụng tài nguyên mà còn đóng góp vào lĩnh vực lý thuyết kiểu.

6.2. Hướng Phát Triển và Nghiên Cứu Tiềm Năng Trong Tương Lai

Hướng nghiên cứu tiếp theo có thể tập trung vào việc mở rộng hệ thống kiểu để ước lượng các loại tài nguyên khác (CPU, năng lượng) và áp dụng cho các ngôn ngữ lập trình thực tế.

15/05/2025

Trích đoạn nội dung tài liệu

Chương 1. Giới thiệu 9 một chương trình giao dịch cơ bản hoạt động theo cơ chế STM và sử dụng hệ thống kiểu để xác định biên bộ nhớ giao dịch cho các chương trình này. - Chương 6 luận án tổng kết lại những vấn đề luận án đã giải quyết được, những vấn đề còn tồn tại cần tiếp tục nghiên cứu để có thể áp dụng kết quả vào thực tế. Ngoài ra, trong chương này, luận án cũng trình bày về những hướng nghiên cứu dự kiến trong tương lai, nhằm phát triển tốt hơn nữa sản phẩm của luận án để đóng góp cho cộng đồng nghiên cứu cũng như những người làm lập trình để xây dựng những phần mềm hoạt động hiệu quả, tiết kiệm tài nguyên.

9 Chương 2 KIẾN THỨC NỀN TẢNG VÀ NGHIÊN CỨU LIÊN QUAN Trong chương này, luận án trình bày những khái niệm, nguyên tắc cơ bản của lập trình tương tranh, cơ chế STM và hệ thống kiểu. Đây là những khối kiến thức cơ bản liên quan trực tiếp đến bài toán đặt ra và phương pháp giải quyết bài toán của luận án. Những kiến thức này là nền tảng để xây dựng các ngôn ngữ và các hệ thống kiểu trong các chương tiếp theo. Phần cuối chương, luận án trình bày về những hướng nghiên cứu trong và ngoài nước liên quan tới bài toán xác định biên tài nguyên tiêu thụ của các chương trình và những nghiên cứu về cơ chế STM trong các chương trình tương tranh.

Giới thiệu Mặc dù các chương trình tương tranh là một giải pháp hứa hẹn nhằm nâng cao hiệu suất của các hệ thống phần mềm. Tuy nhiên, việc viết các chương trình cho các hệ thống tương tranh là một nhiệm vụ khó khăn. Trong đó điểm mấu chốt là việc đồng bộ dữ liệu giữa các luồng, các tiến trình. Điều này đã thu hút nhiều nhà nghiên cứu với nhiều giải pháp được đề xuất trong các ngữ cảnh khác nhau.

Trong những năm gần đây, các hệ thống cơ sở dữ liệu đang hoạt động rất thành công trên các kiến trúc tương tranh. Các cơ chế kiểm soát tương tranh trong các hệ thống cơ sở dữ liệu được xử lý ngầm bởi các hệ quản trị cơ sở dữ liệu. Cốt lõi của các hệ thống này là các giao dịch, trong đó một giao dịch được hiểu là một chuỗi các lệnh để hoàn thành trọn vẹn một công việc và được sử dụng để truy cập và thao tác trên các đối tượng đang hoạt động một cách đồng thời. Một giao dịch có thể thành công khi nó thay đổi một số trạng thái trong cơ sở dữ liệu và không thành công hoặc bị hủy bỏ khi không có thay đổi về trạng thái của cơ sở dữ liệu.

Các giao dịch được thực hiện thông qua hệ thống cơ sở dữ liệu hoặc bằng các giao diện của các hàm, ẩn các chi tiết phức tạp khỏi người dùng và cung cấp giao diện đơn giản để giao tiếp [44]. Xuất phát từ sự thành công của các hệ thống cơ sở dữ liệu hoạt động theo kiến trúc tương tranh, những nhà nghiên cứu đã đưa ra ý tưởng về bộ nhớ giao 10 Chương 2. Kiến thức nền tảng và nghiên cứu liên quan 11 dịch trên cấp độ chương trình. Ý tưởng cơ bản của cơ chế bộ nhớ giao dịch ở cấp độ chương trình được phát triển từ cơ chế giao dịch trong các hệ thống cơ sở dữ liệu, mặc dù chúng cũng có những điểm khác nhau ở một số khía cạnh.

Một giao dịch trong các hệ thống cơ sở dữ liệu bao gồm một tập hợp các hướng dẫn không thể chia nhỏ và phải cùng thực thi tức thời cùng nhau. Các giao dịch trong cơ sở dữ liệu có bốn thuộc tính cơ bản là tính nguyên tố, tính nhất quán, tính độc lập và tính bền vững được gọi chung là ACID. Trong cơ chế bộ nhớ giao dịch phần mềm, một giao dịch cũng có các thuộc tính này. Luận án sẽ trình bày cụ thể hơn trong phần tiếp theo.

Việc điều khiển tương tranh thông thường được thực hiện bởi cơ chế dựa trên khóa. Ý tưởng chính của cơ chế này đó là, trong khi một giao dịch thực hiện trên một dữ liệu nào đó thì dữ liệu đó sẽ bị khóa lại không cho các giao dịch khác thao tác lên chúng. Khi giao dịch hoàn thành, các dữ liệu này mới được mở khóa cho các giao dịch khác sử dụng. Giải pháp dựa trên khóa là một giải pháp quen thuộc.

Tuy nhiên chúng tồn tại nhiều hạn chế, gây khó khăn cho người lập trình. Vì vậy, cơ chế bộ nhớ giao dịch ra đời, nhằm khắc phục những nhược điểm của cơ chế dựa trên khóa. Ý tưởng chính của cơ chế bộ nhớ giao dịch đó là, khi một luồng hoặc một giao dịch cần thao tác trên một dữ liệu dùng chung của chương trình, chúng sẽ sao chép các dữ liệu đó thành một bản sao để chúng sử dụng một cách độc lập. Sau khi hoàn thành giao dịch, chúng sẽ so sánh giá trị các bản sao với giá trị gốc để đồng bộ dữ liệu.

Nếu không xảy ra xung đột, giao dịch sẽ được hoàn thành, ngược lại giao dịch sẽ phải thực hiện lại, hoặc bị hủy bỏ. Như vậy, với cơ chế bộ nhớ giao dịch, người lập trình sẽ viết chương trình đơn giản hơn. Tuy nhiên, do việc tạo ra các bản sao của các dữ liệu dùng chung làm cho các chương trình tiêu tốn nhiều tài nguyên hơn. Thêm nữa, nếu các giao dịch phải hủy bỏ hoặc thực hiện lại nhiều lần sẽ dẫn đến giảm hiệu suất của chương trình.

Mục tiêu chính của luận án đó là đưa ra phương pháp để người lập trình có thể ước lượng tài nguyên tiêu thụ tối đa mà chương trình bộ nhớ giao dịch cần sử dụng, từ đó tối ưu chương trình nhằm nâng cao hiệu quả của việc sử dụng tài nguyên cũng như hiệu suất của chương trình. Do đặc điểm của chương trình giao dịch có các luồng và các giao dịch đan xen lồng nhau phức tạp, các luồng chạy song song nhưng không độc lập mà có các điểm đồng kết thúc nên việc phân tích, xác định tài nguyên chúng sử dụng sát với thực tế là một bài toán không tầm thường. Kiến thức nền tảng và nghiên cứu liên quan 12 Để hiểu rõ hơn bài toán đặt ra, phần tiếp theo luận án trình bày một số khái niệm, nguyên tắc cơ bản về cơ chế điều khiển tương tranh dựa trên khóa. Điều khiển tương tranh dựa trên khóa Trong lập trình tương tranh, cơ chế đồng bộ dựa trên khóa có ưu điểm đó là chúng được dùng phổ biến từ lâu và được hỗ trợ bởi nhiều ngôn ngữ lập trình.

Tuy nhiên, chúng có những hạn chế và gây ra những khó khăn cho người lập trình. Để hiểu rõ hơn về cơ chế này, trong phần này chúng ta xem xét một số khái niệm và đặc điểm của cơ chế đồng bộ dựa trên khóa. Khái niệm khóa Khóa là một đặc quyền truy xuất lên các đơn vị dữ liệu của các giao dịch mà bộ quản lý khóa có thể trao cho hay thu hồi lại từ các giao dịch. Khi một giao dịch đã khóa trên một đơn vị dữ liệu nào đó thì các giao dịch khác không được phép truy cập đến đơn vị dữ liệu đó cho đến khi nó nhả khóa.

Khi một giao dịch T thực hiện việc khóa đơn vị dữ liệu A, ta nói T đang giữ khóa A. Thông thường tại mỗi thời điểm, chỉ có một tập con các đơn vị dữ liệu bị khóa, vì vậy bộ quản lý khóa có thể lưu các khóa hiện hành trong một bảng (gọi là lock table) với các mẩu tin có dạng (A, L, T) (có ý nghĩa là giao dịch T có một khóa kiểu L trên đơn vị dữ liệu A). Có hai kỹ thuật khóa phổ biến đó là kỹ thuật khóa đơn giản và kỹ thuật khóa đọc/ghi. Kỹ thuật khóa đơn giản Một giao dịch khi có yêu cầu truy xuất đến đơn vị dữ liệu thì phải phát ra yêu cầu xin khóa (lock) trên đơn vị dữ liệu đó.

Nếu yêu cầu này được chấp nhận thì được quyền thao tác. Khi đó các giao dịch khác sẽ không được phép truy cập đến đơn vị dữ liệu đó cho đến khi giao dịch giữ khóa được giải phóng khóa (unlock). Ví dụ: Giả sử có hai giao dịch T1 và T2, mỗi giao dịch đều truy xuất đến một đơn vị dữ liệu A (mang giá trị một số nguyên), sau đó cộng thêm 1 vào A. Hai giao dịch này có thể được mô tả bởi chương trình P sau đây: P: Lock(A); Read(A); A=A+1; Write(A); Unlock(A); Nếu T1 bắt đầu trước, nó yêu cầu khóa trên A.

Giả sử rằng không có giao dịch nào đang khóa A, bộ quản lý khóa sẽ cho nó khóa này. Như vậy bây giờ chỉ có T1 mới có thể truy xuất A. Nếu T2 bắt đầu trước khi T1 kết thúc thì T2 phải đợi. Chỉ khi T1 thực hiện lệnh Unlock(A), hệ thống mới cho phép T2 tiến 12 Chương 2.

Kiến thức nền tảng và nghiên cứu liên quan 13 hành. Kết quả là T1 hoặc T2 sẽ hoàn tất trước khi giao dịch kia bắt đầu, và tác dụng là A được tăng thêm 2. Qua ví dụ trên ta thấy, nếu không phân biệt khóa cho thao tác đọc hay ghi thì rõ ràng sẽ có nhiều giao dịch phải chờ để được quyền khóa trên một đơn vị dữ liệu. Thực tế nhiều khi một giao dịch chỉ cần lấy giá trị của một đơn vị dữ liệu nhưng không thay đổi giá trị đó.

Vì vậy để giảm bớt tình huống phải chờ khi các giao dịch cùng đọc dữ liệu, người ta đề xuất tách yêu cầu khóa thành hai loại yêu cầu khóa riêng biệt đó là khóa đọc và khóa ghi. Kỹ thuật khóa đọc, ghi Khóa để đọc (còn gọi là shared lock): Khi một giao dịch T chỉ muốn đọc một đơn vị dữ liệu A, chúng sẽ thực hiện lệnh RLOCK(A), ngăn không cho bất kỳ giao dịch nào khác ghi giá trị mới vào A trong khi T đang khóa A. Tuy nhiên các giao tác khác vẫn có thể giữ một khóa đọc trên A cùng lúc với T. Một khóa như vậy gọi là khóa để đọc.

Khi một giao dịch đang giữ khóa ghi trên một đơn vị dữ liệu, các giao dịch khác không thể lấy được khóa đọc hoặc khóa ghi trên A cùng lúc với T. Điều kiện để xin khóa đọc/ghi: Một yêu cầu xin khóa RLOCK(A) chỉ được chấp nhận nếu A chưa bị khóa bởi một lệnh WLOCK trước đó. Một yêu cầu xin khóa WLOCK(A) chỉ được chấp thuận nếu A đang được tự do.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ