1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tiểu luận hệ tin học phân tán vấn đề bế tắc trong hệ tập trung và hệ phân tán

23 602 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 755,5 KB

Nội dung

Như vậy bế tắc là hiện tượng: Trong hệ thống xuất hiện một tập các tiến trình, mà mỗi tiến trình trong tập này đều chờ được cung cấp tài nguyên, mà tài nguyên đó đang được một tiến trình

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

Trang 2

LỜI MỞ ĐẦU

Hệ tin học phân tán là hệ thống xử lý thông tin bao gồm nhiều bộ xử lýhoặc bộ vi xử lý nằm tại các vị trí khác nhau và được liên kết với nhau thôngqua phương tiện viễn thông dưới sự điều khiển thống nhất của một hệ điều hành

Hệ tin học phân tán rất đa dạng, đa diện, phức tạp về mặt cấu trúc, tập hợpbao gồm các bộ xử lý hoặc bộ vi xử lý với bộ nhớ và đồng hồ nhịp độc lập, các

bộ xử lý không sử dụng chung bộ nhớ và đồng hồ Như vậy mỗi một hệ xử lýthông tin thành phần của hệ tin học phân tán bao gồm một hay nhiều bộ xử lý và

bộ nhớ cục bộ Trong hệ phân tán hệ xử lý thông tin thành phần phải được thiết

kế sao cho về cấu trúc, số lượng và dung lượng có thể cho phép thực hiện mộtcách trọn vẹn các chức năng mà nó phải đảm nhận

Hệ tin học phân tán thực hiện hàng loạt các chức năng phức tạp, nhưng cơbản nhất là đảm bảo cung cấp cho người sử dụng khả năng truy cập có kết quảđến các loại tài nguyên vốn có và rất đa dạng của hệ thống như là những tàinguyên dùng chung

Những ưu điểm căn bản của việc sử dụng chung tài nguyên so với hệ tậptrung được phản ảnh như sau:

1 Tăng tốc độ bình quân trong tính toán-xử lý

2 Cải thiện tình trạng luôn luôn sẵn sàng của các loại tài nguyên

3 Tăng độ an toàn dữ liệu

4 Đa dạng hóa các loại hình dịch vụ tin học

5 Đảm bảo tính vẹn toàn của thông tin

Điều quan trọng là để đảm bảo các chức năng, yêu cầu nêu trên, hệ phântán cần phải có các cơ chế kỹ thuật đủ mạng nhằm đồng bộ hóa hoạt động củacác tiến trình và sự trao đổi thông tin với nhau sao cho hệ thống tránh được các

trường hợp có thể dẫn đến bế tắc mà khi nghiên cứu hệ điều hành các máy tính

chúng ta đã có dịp làm quen

Để tìm hiểu rõ hơn về vấn đề bế tắc và thuật toán dự phòng bế tắc của

Lomet tôi chọn đề tài “Vấn đề bế tắc trong hệ tập trung và hệ phân tán” đểnghiên cứu Trong thời gian thực hiện đề tài, tôi đã nhận được sự hướng dẫn tậntình của PGS.TS Lê Văn Sơn, được sự động viên và giúp đỡ của đồng nghiệptrong cơ quan và các anh chị em lớp Cao học - Khoa học Máy tính Khóa 10(2008 – 2011) để hoàn thành đề tài

Xin chân thành cảm ơn!

Trang 3

Chương 1: BẾ TẮC TRONG HỆ TẬP TRUNG 1.1 Bế tắc

Tất cả các hiện tượng bế tắc đều bắt nguồn từ sự xung đột về tài nguyên củahai hoặc nhiều tiến trình đang hoạt động đồng thời trên hệ thống Tài nguyên ở đây

có thể là một ổ đĩa, một mẫu tin trong cơ sở dữ liệu, hay một không gian địa chỉ trên

bộ nhớ chính Sau đây là một số ví dụ minh hoạ cho điều trên

Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống

trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục

Như vậy, P1 và P2 rơi vào trạng thái bế tắc (minh hoạ bởi sơ đồ ở hình 1.1).

Hình 1.1 Chờ đợi vòng tròn

Bế tắc thường xảy ra do xung đột về tài nguyên thuộc loại không phân chiađược, một số ít trường hợp xảy ra với tài nguyên phân chia được Ví dụ sau đây làtrường hợp bế tắc do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phânchia được

Ví dụ 2: Giả sử không gian bộ nhớ còn trống là 200Kb, trong hệ thống có hai

tiến trình P1 và P2 yêu cầu được sử dụng bộ nhớ như sau:

Tài nguyên R 1

Trang 4

Ví dụ 3: Trong các ứng dụng cơ sở dữ liệu, một chương trình có thể khoá một

khoá record R1, tiến trình P2 khoá record R2, và sau đó mỗi tiến trình lại cố gắngkhoá record của một tiến trình khác Bế tắc sẽ xảy ra

Như vậy bế tắc là hiện tượng: Trong hệ thống xuất hiện một tập các tiến trình, mà mỗi tiến trình trong tập này đều chờ được cung cấp tài nguyên, mà tài nguyên đó đang được một tiến trình trong tập này chiếm giữ Và sự đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài.

trạng thái bế tắc, nếu không có sự can thiệp của hệ điều hành Để phá bỏ bế tắc

lấy R1 cấp cho tiến trình P2 để P2 hoạt động và kết thúc, sau đó thu hồi cả R1 và

R2 từ tiến trình P2 để cấp cho P1 và tái kích hoạt P1 để P1 hoạt động trở lại Nhưvậy, sau một khoảng thời gian cả P1 và P2 đều ra khỏi tình trạng bế tắc

Trong trường hợp của ví dụ 2 ở trên: Nếu hai tiến trình này không đồngthời yêu cầu thêm bộ nhớ thì bế tắc không thể xảy ra, hoặc khi cả hai tiến trìnhđồng thời yêu cầu thêm bộ nhớ thì hệ điều hành phải kiểm tra lượng bộ nhớ còntrống của hệ thống, nếu không đáp ứng cho cả hai tiến trình thì hệ điều hànhphải có cơ chế ngăn chặn (từ chối) một tiến trình và chỉ cho một tiến trình đượcquyền sử dụng bộ nhớ (đáp ứng) thì bế tắc cũng không thể xảy ra Tuy nhiên đểgiải quyết vấn đề bế tắc do thiếu bộ nhớ, các hệ điều hành thường sử dụng cơchế bộ nhớ ảo Bộ nhớ ảo là một phần quan trọng của hệ điều hành mà chúng ta

sẽ khảo sát ở chương Quản lý bộ nhớ của tài liệu này

Khi hệ thống xảy ra bế tắc, nếu hệ điều hành không kịp thời phá bỏ bế tắcthì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống Như trong trườnghợp bế tắc ở ví dụ 1, nếu sau đó tiến trình P3 đang giữ tài nguyên R3, cần R2 đểtiếp tục thì P3 cũng sẽ rơi vào tập tiến trình bị bế tắc, rồi sau đó, nếu có tiến trình

P4 cần tài nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập tiến trình bị bế tắc

trong hệ thống đều rơi vào tập tiến trình bế tắc Và như vậy hệ thống sẽ bị treohoàn toàn

1.2 Điều kiện hình thành bế tắc

Năm 1971, Coffman đã đưa ra và chứng tỏ được rằng, nếu hệ thống tồn tạiđồng thời bốn điều kiện sau đây thì hệ thống sẽ xảy ra bế tắc:

1.2.1 Loại trừ lẫn nhau (Mutual excution) hay độc quyền sử dụng

Đối với các tài nguyên không phân chia được thì tại mỗi thời điểm chỉ cómột tiến trình sử dụng được tài nguyên

1.2.2 Giữ và đợi (Hold and wait)

Một tiến trình hiện tại đang chiếm giữ tài nguyên, lại xin cấp phát thêm tàinguyên mới

Trang 5

1.2.3 Không ưu tiên (No preemption)

Không có tài nguyên nào có thể được giải phóng từ một tiến trình đangchiếm giữ nó

Trong nhiều trường hợp các điều kiện trên là rất cần thiết đối với hệ thống

Sự thực hiện độc quyền là cần thiết để đảm bảo tính đúng đắn của kết quả vàtính toán vẹn của dữ liệu (chúng ta đã thấy điều này ở phần tài nguyên găng trênđây) Tương tự, sự ưu tiên không thể thực hiện một cách tuỳ tiện, đặc biệt đốivới các tài nguyên có liên quan với nhau, việc giải phóng từ một tiến trình này

có thể ảnh hưởng đến kết quả xử lý của các tiến trình khác

Sự bế tắc có thể tồn tại với ba điều kiện trên, nhưng cũng có thể không xảy ravới ba điều kiện đó Để chắc chắn bế tắc xảy ra cần phải có điều kiện thứ tư

1.2.4 Đợi vòng tròn (Circular wait)

Đây là trường hợp của ví dụ một mà chúng ta đã nêu ở trên Tức là, mỗitiến trình đang chiếm giữ tài nguyên mà tiến trình khác đang cần

Ba điều kiện đầu là điều kiện cần chứ không phải điều kiện đủ để xảy ra bế tắc.Điều kiện thứ tư là kết quả tất yếu từ ba điều kiện đầu

1.3 Các phương pháp sử dụng trong hệ tập trung để xử lý bế tắc: 1.3.1 Phương pháp dự phòng

Phương pháp dự phòng đơn giản và thường hay sử dụng là phương pháp

các nhóm sắp xếp Havender.

Tư tưởng cơ bản của phương pháp này là các tài nguyên được sắp xếp theo

thiết cho nó C1, C2, …Ci-1 Như thế, trật tự duy nhất của việc thu hồi các tàinguyên được xác định sẽ tránh được bế tắc Phương pháp này dẫn đến các tiếntrình cần thu hồi trước (tạm ứng) các tài nguyên của chúng và do vậy làm giảmkhả năng thực hiện song song của hệ

1.3.2 Phương pháp phát hiện và chữa trị

Phương pháp Holt sử dụng một đồ thị trạng thái định hướng mà các nút là

các tài nguyên hay các tiến trình Các cung tiến trình- tiến trình thể hiện các

cung cấp đã được thực hiện Nếu có sự hiện diện của vòng lặp khép kín trong đồ thị này thì đó chính là biểu hiện của tình trạng bế tắc.

Sau khi đã phát hiện bế tắc, vấn đề chữa trị được đặt ra, nhưng các phươngpháp này rất phức tạp, tốn kém Hiện nay, thuật toán chữa trị đang được các nhàchuyên môn quan tâm nghiên cứu và phát triển

1.3.3 Kết luận

Thực tế, trong các hệ điều hành, người ta sử dụng:

1 Hoặc là các phương pháp dự phòng đơn giản như cung cấp tổng quát tất

cả các tài nguyên hay phương pháp nhóm sắp xếp

Trang 6

2 Hoặc là các phương pháp phát hiện thường rất cồng kềnh; khắc phục nóđòi hỏi phải loại bỏ hoàn toàn các tiến trình và khởi sự cũng trở lại từ đầu Điều

đó đòi hỏi phải lưu trữ ngữ cảnh theo từng chu kỳ hết sức phức tạp và tốn kém

bộ nhớ

Trang 7

Chương 2: BẾ TẮC TRONG HỆ PHÂN TÁN 2.1 Một số khái niệm

Trong chương này, chúng ta sẽ đề cập cách giải quyết các vấn đề đặt ra vàtrình bày các giải pháp thể hiện dưới dạng các giải thuật riêng cho hệ phân tán

Trong hệ phân tán, thông thường người ta hay sử dụng khái niệm giao dịch như

là thực thể sử dụng các tài nguyên chẳng hạn

Giao dịch là phép toán hợp thành một logich hoàn chỉnh mà việc triển khai

nó có thể dẫn đến thực hiện một tiến trình duy nhất hay nhiều tiến trình được định vị trên các trạm khác nhau.Trường hợp dẫn đến thực hiện nhiều tiến trình trên các trạm ở xa là đối tượng mà ta cần phải quan tâm nghiên cứu trong chương này.

Một tiến trình nào đó cần sử dụng tài nguyên để phát triển công việc của

mình phải yêu cầu bộ cung cấp một cách hợp thức bằng cách gửi thông điệp yêu cầu Như thế, rõ ràng là một tiến trình có nhu cầu tài nguyên sẽ bị treo chừng

nào tài nguyên đó còn chưa được giải phóng hay chưa được cung cấp cho nó

Bộ cung cấp có thể áp dụng nhiều kiểu cung cấp khác nhau như tiến trìnhduy nhất, tập hợp các tiến trình, tập hợp các thủ tục, Các thông điệp yêu cầu sửdụng tài nguyên cũng có thể có các dạng khác nhau như gọi thủ tục, thông báo,thực hiện các lệnh đặc biệt,

Một yêu cầu được thoả mãn bởi bộ cung cấp tài nguyên cho tiến trình đềnghị với điều kiện là yêu cầu đó phải tuân thủ các quy tắc nhất định

Có hai điều kiện làm cho tiến trình mất khả năng sử dụng tài nguyên đã được cung cấp trước đó

Sự lấy lại tài nguyên đã được cung cấp cho tiếntrình Bộ cung cấp tài nguyên sẽ tiến hành côngviệc này

Trong hệ, hoạt động của một tập hợp các tiến trình trên một tập hợp các tàinguyên dùng chung được xem là tuyệt vời, nếu không để xảy ra bế tắc và thiếuthốn tài nguyên vĩnh viễn

Bế tắc hay còn gọi là khoá tương hỗ là sự kẹt chéo lẫn nhau có tính chất

sống còn của các tiến trình Bế tắc diễn ra khi hai tiến trình đang sử dụng hai tàinguyên lại phát yêu cầu về nhu cầu sử dụng tài nguyên mà tiến trình kia cònđang sử dụng

Hình vẽ 2.1 sau đây cho phép chúng ta hình dung vấn đề một cách rõ rànghơn Theo hình vẽ này, ta có 4 tài nguyên T1, T2, T3 và T4 và có 3 nhu cầu tàinguyên là Tr1, Tr2 và Tr3 Cả ba tiến trình này đang ở trong tình trạng bế tắc Tiếntrình Tr2 chờ tài nguyên T3 do Tr3 đang chiếm giữ.Tiến trình Tr3 chờ tài nguyên

T2 được giải phóng bởi Tr1 và Tr3.Thêm vào đó, tiến trình chờ tiền trình Tr2 giảiphóng T1

Trang 8

Lúc này, ta thấy có hai chu trình kín trong đồ thị là:

Tr1 – T1 – Tr2 – T3 – Tr3 – T2 – Tr1 và Tr3 – T2 – Tr2 – T3 – Tr3

Hình 2.1 Đồ thị cung cấp tài nguyên bị bế tắc

Thiếu tài nguyên vĩnh viễn là sự chờ đợi bất tận của một tiến trình mà yêu cầucủa nó trễ đến mức không thể xác định được Nguyên nhân của hiện tượng vừa nêu

có nhiều, nhưng ta có thể chỉ ra ví dụ thường gặp là do sử dụng luật ưu tiên để cungcấp tài nguyên

Một chiến lược cung cấp tài nguyên tồi cũng có thể là nguồn gốc huỷ hoại hiệu

năng hoạt động của hệ do các hiện tượng "sốc" làm tăng các yêu cầu mà không được

đáp ứng của một số tài nguyên Ví dụ như sự sụp đổ của hệ đa chương trình

Để tránh các hiện tượng đó, bộ cung cấp tài nguyên cần phải đảm bảo

chức năng điều khiển

Ta có thể phân chia thành hai phương diện để nghiên cứu:

1 Phân tán các yêu cầu giữa các tài nguyên tương đương có khả năngthoả mãn Chức năng này gọi là phân phối tải Trong hệ phân tán, nó cần phảitạo điều kiện để tránh tình hình mà ở đó các yêu cầu đợi đến lượt được thoả mãntrên một trạm đầy, trong khi đó các tài nguyên tương đương lại rỗi rãi trên cáctrạm khác

2 Giới hạn số lượng các yêu cầu được phép cho một số tài nguyên Việc

đó có thể thực hiện bằng cách hạn chế (tĩnh hay động) số các tiến trình hay sốcác giao dịch được chọn (trúng tuyển) sử dụng toàn bộ hay từng phần tàinguyên.Ta gọi trường hợp này là điều khiển tải tổng quát

Tóm lại: Bộ cung cấp cần phải phân phối các tài nguyên trên cơ sở tuân thủ các quy tắc sử dụng, tránh xảy ra bế tắc và thiếu thốn vô hạn, phân bố tải tương đối đồng đều giữa các tài nguyên cùng loại(cùng có thể thoả mãn) và giới hạn nhu cầu nhằm duy trì hệ thống hoạt động đạt mức hiệu quả nhất định.

2.2 Cung cấp tài nguyên duy nhất

Vấn đề cung cấp tài nguyên duy nhất trên một trạm trong hệ phân tán liênquan đến việc phân phối tài nguyên này cho một tập hợp các tiến trình trên cơ sở quytắc: truy cập loại trừ hay chia sẻ, có hệ số ưu tiên, không được mất, … Các tiến trình

T2

T4

Trang 9

có thể đề nghị sử dụng tại nguyên ngay tại trạm có tài nguyên mà cũng có thể ở cáctrạm khác từ xa.

Việc quản lý các truy cập đến một tài nguyên duy nhất có thể được thực hiện theo hai cách:

2.3 Truy cập bởi server duy nhất

Một tiến trình duy nhất hay còn gọi là server được giao nhiệm vụ quản lýtài nguyên Nó xử lý tất cả các yêu cầu truy cập từ các tiến trình và các khách(client) Sự loại trừ truy cập được đảm bảo bởi tính duy nhất của server Server

đồng thời cũng là chương trình đánh thức.

Chương trình có thể viết như sau:

Vòng lặp m:= cho-thong-diep(nil) {treo}

<Chương trình xử lý các yêu cầu và gửi trả kết quả>

Kết thúc vòng lặp

Do vậy, sơ đồ này loại bỏ tất cả các đặc tính song song để truy cập vào tàinguyên Tiến trình server có thể được lập trình để triển khai toàn bộ chiến lượcliên quan đến loại trừ tương hỗ của các yêu cầu (độ ưu tiên, quyền truy cập tàinguyên)

Hình 2.2 Đồ thị truy cập vào tài nguyên bằng server duy nhất

2.4 Truy cập tương tranh có điều khiển

Trong trường hợp này, tài nguyên được truy cập bởi nhiều server, thôngthường, có số lượng không cố định Các server này thực hiện các truy cập tương ứngvới các yêu cầu dưới dạng gọi thực hiện các thủ tục.Việc thực hiện các thủ tục nàyđược điều khiển bởi cơ chế đảm bảo tôn trọng các quy tắc truy cập

Các quy tắc được khởi sự bằng hai cách bởi các tiến trình khách cho thấyviệc truy cập được tiến hành bằng một chương trình trực duy nhất

Hàng đợi các yêu cầu

Trang 10

Hình 2.3 Đồ thị truy cập vào tài nguyên bằng một chương trình trực duy nhất

Trong cách thứ hai, việc truy cập được tiến hành trực tiếp với các server và thểhiện bằng hình vẽ 2.4

Hình 2.4 Truy cập trực tiếp vào các server

Hình vẽ 2.3, ta thấy một tiến trình đánh thức D duy nhất sau hàng đợi làm nhiệm

vụ phân phối yêu cầu cho các server cục bộ Các tiến trình khách không biếtserver

Ngược lại, hình vẽ 2.4, các máy server đều được các tiến trình khách biết trước

2.5 Cung cấp một tập hợp các tài nguyên - Vấn đề bế tắc

Trước hết, ta tìm hiểu một số thuật ngữ và khái niệm có quan hệ mật thiếtvới nhưng vấn đề sẽ sử dụng trong phần này

Tiến trình p đưa ra yêu cầu cung cấp tài nguyên e để thực hiện phép toán cài

then có tính loại trừ v_loai_tru_th(e) Ngoại trừ một số trường hợp đặc biệt, tất

cả các tài nguyên đều được truy cập theo kiểu loại trừ Nếu việc cung cấp hoántoàn hợp thức thì tài nguyên này được trao cho p sử dụng Ta nói rằng tàinguyên này đã được p cài then, nếu không thì p bị treo và đương nhiên p khôngcài then được tài nguyên này

Trong hệ phân tán, ta sẽ tập trung xem xét các giao dịch Ti có thể sử dụng

các tài nguyên được định vị trên các trạm Mỗi một giao dịch được triển khainhờ một tập hợp các tiến trình thể hiện là các đại diện của chúng trên các trạmkhác nhau Hai tiến trình của cùng một giao dịch được định vị trên các trạm

khác nhau có thể được thực hiện song song Nhằm thu hồi lại tài nguyên e trên trạm Sj, giao dịch Ti cho thực hiện phép toán v_loai_tru_th(e) thông qua đại diện pij của mình trên trạm này.

Ngoại trừ một số trường hợp đặc biệt, việc cung cấp diễn ra không có thuhồi Một tài nguyên bị khoá bởi một tiến trình không thể rút nó trở về được Nhưthế, nó cần phải được giải phóng bởi tiến trình này một cách tường minh nhờ

vào phép toán mở then cài mo_then(e).

T-Tài nguyên Tr-Tiến trình khách Server D-Đánh thức

Trang 11

Bế tắc có thể được giải quyết bằng cách dự báo và vòng tránh (gọi chung

là dự phòng) có nghĩa là tài nguyên được cung cấp theo kiểu có đề phòng trườnghợp bế tắc Một phương pháp khác có liên quan đến vấn đề này là phát hiện vàchữa trị có nghiã là khi có sự cố thì quay trở về trạng thái trước đó

Các thuật toán dự phòng, phát hiện và chữa trị được nghiên cứu chotrường hợp là tất cả các tài nguyên đều được quản lý bởi bộ cung cấp duy nhất

Bộ cung cấp này tiếp nhận tất cả các yêu cầu và biết rõ trạng thái của tất cả cáctài nguyên

Ta bắt đầu việc nghiên cứu trong phần này bằng cách nhắc lại các kết quảchủ yếu của trường hợp nêu trên, trước khi phát triển các vấn dề về hướng tinhọc phân tán

2.6 Phân tán chức năng cung cấp

Bây giờ, ta giả định rằng chức năng cung cấp không thể tin tưởng giao phó

hoàn toàn cho một bộ cung cấp duy nhất, mà được phân tán thành tập hợp các bộ cung cấp trên các trạm khác nhau, trong đó mỗi bộ cung cấp chỉ quản lý các đối

tượng cục bộ của trạm đó mà thôi

Tồn tại hai nhóm giải pháp cho vấn đề đặt ra:

2.6.1 Duy trì tính duy nhất của trạng thái tài nguyên

Biểu hiện duy nhất (thể hiện tính duy nhất) của trạng thái tài nguyên được chia

sẻ bởi tập hợp các bộ cung cấp Biểu hiện này tuần hoàn giữa các trạm khác nhaudưới dạng một thông điệp Các trạm luân phiên đóng vai trò của bộ cung cấp các tàinguyên mà mình đang chịu trách nhiệm quản lý Giải pháp này loại bỏ tất cả các khảnăng song song, không loại bỏ khả năng mất thông điệp trạng thái, thiếu thốn tàinguyên một cách vô hạn

2.6.2 Phân tán biểu hiện trạng thái và chức năng cung cấp

2

Ta phân tán biểu hiện trạng thái trên các trạm, mỗi một trạm chỉ

co trạng thái của các tài nguyên cục bộ của mình.Các quyết địnhđược đưa ra trên các trạm khác nhau cần phải được phối hợp theokiểu sao cho dữ liệu của việc cung cấp phải được gắn bó với nhau.3

Một phương pháp đầy ấn tượng là nhóm sắp xếp nhằm đảm bảocho tất cả các yêu cầu tài nguyên xuất phát từ các tiến trình đến

được các bộ cung cấp khác nhau theo một trật tự duy nhất được

cố định từ trước

Ngày đăng: 24/07/2016, 11:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w