You are on page 1of 7

Câu 1: Định nghĩa 1: Việc thực hiện tập giao dịch E = < T1,

T2, ...,Tn> là tuần tự nếu tồn tại 1 phép hoán vị π sao cho E=(Tπ(1),
Tπ(2),...,Tπ(n)) tức là Tπ(1) < Tπ(2) < ...< Tπ(n). Trong đó Tπ(i)< Tπ(j)
có nghĩa là Tπ(i) thực hiện trước Tπ(j)
Ví dụ: Giả sử có hai giao tác A và B cần truy cập vào cùng một tài
nguyên dữ liệu. Nếu giao tác A đã khóa tài nguyên đó, giao tác B phải
chờ cho đến khi giao tác A hoàn thành và mở khóa tài nguyên trước khi
nó được phép truy cập. Điều này đảm bảo tính khả tuần tự của các giao
tác và tránh xảy ra xung đột.
Câu 2 : Thao tác khả hoán vị
Ðịnh nghĩa: Hai thao tác Oi, Oj là khả hoán vị nếu thực hiện Oi, Oj thì
cũng có kết quả giống như thực hiện Oj, Oi.
Câu 3 : Ðịnh nghĩa : Hai thao tác Oi, Oj là tương thích nếu nó thực
hiện đồng thời cũng có kết quả như thực hiện tuần tự Oi , Oj hoặc
Oj , Oi.
Câu 4: So sánh
- Quicksort thường có hiệu suất tốt hơn trong trường hợp trung
bình, trong khi Mergesort có hiệu suất ổn định và bền vững trong
tất cả các trường hợp.
- Quicksort là một thuật toán sắp xếp trong chỗ (in-place), có nghĩa
là không cần sử dụng bộ nhớ phụ ngoài mảng đầu vào. Trong khi
đó, Mergesort yêu cầu sử dụng bộ nhớ phụ để lưu trữ các phần
mảng con trong quá trình ghép nối.
- Độ phức tạp trung bình của Quicksort là O(n log n), trong khi
Mergesort cũng có độ phức tạp trung bình là O(n log n).
- Quicksort có thể được cải tiến bằng cách sử dụng phương pháp
chọn pivot tốt hơn và xử lý các trường hợp đặc biệt để tránh trường
hợp tệ nhất. Trong khi đó, Mergesort không bị ảnh hưởng bởi
trường hợp tệ nhất và không yêu cầu quá trình cải tiến phức tạp.
Câu 5: + Deadlock là tình trạng trong đó những giao dịch có liên
quan không thể thực hiện tiếp các thao tác của nó mà phải chờ
nhau mã
+ LiveLock: Tình trạng một giao dịch chờ được cấp quyền lock
trên 1 đơn vị dữ liệu nào đó mà không xác định được thời điểm
được đáp ứng yêu cầu (giống hiện tượng Starvation)
+ WriteLock (Exclusive lock_khoá độc quyền): Khi giao dịch yêu
cầu đọc và viết đơn vị dữ liệu hay chỉ viết trên đơn vị dữ liệu thì
dùng WLock
Câu 6 : Điều Khiến Tương Tranh Bằng Cơ Chế Nhãn Thời Gian
(Timestamp). Khái niệm nhãn thời gian : Là một con số được phát
sinh bởi bộ lập lịch, gán cho các giao dịch để chỉ thời điểm bắt đầu
thực hiện của các giao dịch. Nhãn thời gian có tính chất duy nhất
và tăng dần.
Vd:
T1 (100) T2(200) T3(250) tA
Read A tA=tT1=100
Read A tA=tT2=200
Read A tA=tT3=250
Câu 7 : Thuật toán sắp xếp từng phần đa phiên bản
- Mỗi đơn vị dữ liệu được truy cập có 1 tập tr, tw và giá trị
- Khi thực hiện 1 thao tác cập nhật trên 1 đơn vị dữ liệu thì phải tạo ra
1 phiên bản mới cho đơn vị dữ liệu đó (giúp các giao dịch có tính cô lập)
- Ở thời điểm ban đầu tr =tw=0
-> 2 thuật toán đọc và viết trên đơn vị dữ liệu.
Câu 8 : Điều Khiển Tương Tranh Bằng Cơ Chế Khoá
Khoá (Lock):Lock 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.Khi một giao dịch đã lock 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 vị dữ liệu đó được unlock.
Câu 9: Các Tình Trạng Của Khóa
* LiveLock:Tình trạng một giao dịch chờ được cấp quyền lock trên
1 đơn vị dữ liệu nào đó mà không xác định được thời điểm được
đáp ứng yêu cầu (giống hiện tượng Starvation)
* DeadLock: Deadlock là tình trạng trong đó những giao dịch có
liên quan không thể thực hiện tiếp các thao tác của nó mà phải chờ
nhau mãi.
Câu 10 : Các loại khoá:
o ReadLock (Shared lock_khoá chia sẻ): Khi giao dịch yêu cầu đọc
đơn vị dữ liệu thì dùng RLock
o WriteLock (Exclusive lock _khoá độc quyền): Khi giao dịch yêu
cầu đọc và viết đơn vị dữ liệu hay chỉ viết trên đơn vị dữ liệu thì
dùng WLock
Câu 11 : Các bước tiếp cận để giải quyết deadlock:
Khi gặp deadlock thì hủy, làm lại tất cả với nhãn thời gian khác.

Ngăn ngừa deadlock
* Thuật toán DIE-WAIT:
ưu tiên cho các giao dịch già (thời gian chờ đợi lâu)
Ti, Tj có timestamp là tTi ,tTj
Ti yêu cầu lock trên 1 đơn vị dữ liệu đang bị giữ lock bởi Tj thì
Ifty < tyj then
Ti chờ
Else
Rollback Ti, Ti bắt đầu lại
End if
* Thuật toán WOUD-WAIT:
ưu tiên cho các giao dịch già (thời gian chờ đợi lâu)
T1, Tj có timestamp là t1i ,t1]
Ti yêu cầu lock trên 1 đơn vị dữ liệu đang bị giữ lock bởi Tj thì
If tri <trj then
Rollback 1]
Else
Ti chờ
End if.
Phát hiện và phục hồi sau deadlock
Phát hiện deadlock: Dùng đồ thị chờ để phát hiện deadlock.
Cho 1 lịch thao tác S có n giao dịch T1, T2, ..,Tn.
Đồ thị chờ có :
Đỉnh là các giao dịch
Cung có hướng Ti -> Tj nếu Ti chờ Tj
Nếu đồ thị có chu trình thì có deadlock.
Giải quyết deadlock: hủy giao dịch (đỉnh) nào có nhiều cung ra vào
lớn nhất VÀ thời gian vào sau.
Câu 12:
1. RLock (Read Lock):
- RLock cho phép nhiều luồng (hoặc tiến trình) đọc dữ liệu cùng một
lúc, nhưng chỉ cho phép một luồng đọc cùng một thời điểm.
- Khi một RLock được giữ bởi một luồng, các luồng khác vẫn có thể
lấy RLock khác để đọc dữ liệu.
- RLock không ngăn chặn việc đọc đồng thời từ nhiều luồng, cho
phép đồng thời đọc nhanh hơn, nhưng không đảm bảo tính nhất quán
khi có ghi/đọc xảy ra cùng lúc.
2. WLock (Write Lock):
- WLock chỉ cho phép một luồng có quyền ghi (write) vào tài nguyên
chia sẻ, và không cho phép bất kỳ luồng nào khác đọc hoặc ghi trong
khi WLock đang được giữ.
- Khi một WLock được giữ bởi một luồng, tất cả các luồng khác sẽ bị
chặn đến khi WLock được giải phóng.
- WLock đảm bảo tính nhất quán bởi việc chỉ cho phép một luồng ghi
vào tài nguyên chia sẻ tại một thời điểm, đồng thời ngăn chặn cả ghi
và đọc đồng thời từ các luồng khác.
Câu 13 :
- Deadlock là một tình trạng xảy ra khi hai hoặc nhiều luồng (tiến
trình) đang chờ đợi lẫn nhau để nhận khoá mà mỗi luồng cần để tiếp
tục thực hiện công việc của mình.
- Trong deadlock, không có luồng nào có thể tiếp tục thực hiện và tất
cả các luồng đều bị chặn.
- Deadlock có thể xảy ra khi có một chuỗi xem xét (circular wait) xảy
ra giữa các luồng, tức là mỗi luồng đang chờ đợi khoá mà luồng khác
đang giữ và không có luồng nào giải phóng khoá mình đang giữ.
- Để giải quyết deadlock, các giải thuật như phân giải theo thứ tự
(resource allocation graph), phân giải theo nguồn tài nguyên (resource
ordering), hay phát hiện và phục hồi deadlock (deadlock detection
and recovery) có thể được sử dụng.
- Livelock là một tình trạng xảy ra khi các luồng không bị chặn hoặc
bị khóa, nhưng vẫn không thể tiến hành công việc của mình vì chúng
liên tục thay đổi trạng thái hoặc tương tác với nhau mà không thực sự
tiến bộ.
- Trong livelock, các luồng vẫn hoạt động, nhưng chúng không thể
hoàn thành công việc của mình do luôn đáp ứng với hành động của
các luồng khác và không tiến hành công việc thực tế.
- Livelock có thể xảy ra khi các luồng không tuân theo một quy tắc
giao tiếp chính xác hoặc khi xảy ra tương tác không mong muốn giữa
các luồng.
- Để giải quyết livelock, có thể sử dụng các giải thuật như gian đoạn
thời gian chờ (time-delay), thực hiện quay lui (backoff), hoặc thay đổi
cách giao tiếp giữa các luồng.
Câu 14 : Đồ thị khả tuần tự trong cơ chế khóa có phân biệt
ReadLock, WriteLock:
S là 1 tập các giao dịch T1, T2, ..., Tn. Xét các thao tác Oij có dạng
RLock A, WLock A, Unlock A (không quan tâm các thao tác khác)
- Nếu giao dịch Ti thực hiện Wlock A hay Rlock A, giao dịch Tj thực
hiện Wlock A sau đó thì vẽ 1 cung từ Ti đền Tj (W/R → W)
- Nếu giao dịch Ti thực hiện Wlock A, giao dịch Tj thực hiện Rlock A
sau khi Ti thực hiện Unlock A nhưng trước khi các giao dịch khác thực
hiện Wlock A thì thì vẽ 1 cung từ Ti đến Tj (Wgần nhất → R)
- Đồ thị không có chu trình → Lịch thao tác khả tuần tự.
Nghi thức lock 2 giai đoạn
• Một giao dịch tuân theo nghi thức lock 2 giai đoạn có nghĩa là nó
không thực hiện một thao tác lock nào nữa sau khi đã dùng unlock
• Mục đích: Đảm bảo tính khả tuần tự
• Phát biểu: Mọi thực hiện các giao dịch 2 phase là khả tuần tự.
Câu 15 :
+ Die Wait:
- Die Wait là một thuật toán ngăn ngừa deadlock dựa trên quy tắc ưu
tiên.
- Theo thuật toán Die Wait, khi một luồng yêu cầu một khoá, nếu khoá
đó đã được yêu cầu bởi một luồng khác và luồng hiện tại có ưu tiên thấp
hơn, luồng hiện tại sẽ "chết" và không được cấp quyền truy cập vào
khoá.
- Điều này đảm bảo rằng các luồng có ưu tiên thấp sẽ không chặn các
luồng có ưu tiên cao hơn và giúp ngăn ngừa deadlock.
- Tuy nhiên, thuật toán Die Wait có thể dẫn đến vấn đề đói chờ
(starvation), trong đó một số luồng với ưu tiên thấp không bao giờ nhận
được quyền truy cập vào khoá.
+ Wound Wait:
- Wound Wait cũng là một thuật toán ngăn ngừa deadlock dựa trên quy
tắc ưu tiên.
- Theo thuật toán Wound Wait, khi một luồng yêu cầu một khoá, nếu
khoá đó đã được yêu cầu bởi một luồng khác và luồng hiện tại có ưu tiên
cao hơn, luồng hiện tại sẽ "gây thương tích" (wound) cho luồng khác
bằng cách giải phóng khoá của nó.
- Điều này đảm bảo rằng các luồng có ưu tiên cao hơn sẽ không bị chặn
bởi các luồng có ưu tiên thấp hơn và giúp ngăn ngừa deadlock.
- Tuy nhiên, thuật toán Wound Wait có thể dẫn đến vấn đề tạo ra sự tranh
chấp liên tục (continual contention), trong đó một số luồng có ưu tiên
thấp liên tục bị "gây thương tích" và không thể tiếp tục công việc của
mình.

You might also like