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

Bài tiểu luận môn hệ Điều hành Đề tài 02 tìm hiểu giải thuật banker và viết chương trình minh họa

18 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Tìm Hiểu Giải Thuật Banker Và Viết Chương Trình Minh Họa
Tác giả Đặng Thị Trúc Vân, Lê Hữu Trí, Ngô Huỳnh Trân Châu, Bùi Thị Minh Ngọc, Nguyễn Huỳnh Thanh Vân
Người hướng dẫn Trần Thị Bích Vân
Trường học Trường Đại Học Công Thương TP. HCM
Chuyên ngành Hệ Điều Hành
Thể loại tiểu luận
Năm xuất bản 2023
Thành phố TP. HỒ CHÍ MINH
Định dạng
Số trang 18
Dung lượng 0,93 MB

Nội dung

QUY TRÌNH HOẠT ĐỘNG CỦA GIẢI THUẬT BANKER...8 PHẦN 3.. CẤU TRÚC DỮ LIỆU CỦA GIẢI THUẬT BANKER...12 PHẦN 5... Khái niệm giải thuật Banker: - GiảithuậtBankerdùngđểxácđịnhtrạngthái

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HCM

KHOA CÔNG NGHỆ THÔNG TIN

-BÀI TIỂU LUẬN MÔN HỆ ĐIỀU HÀNH

Đề tài 02: Tìm Hiểu Giải Thuật Banker Và Viết

Chương Trình Minh Họa

Giảng viên hướng dẫn: TRẦN THỊ BÍCH VÂN

2001225801_Đặng Thị Trúc Vân 2001225539_Lê Hữu Trí 2001220500_Ngô Huỳnh Trân Châu 2001190180_Bùi Thị Minh Ngọc 2001210856_Nguyễn Huỳnh Thanh Vân

Trang 2

TP HỒ CHÍ MINH, tháng 10 năm 2023

BỘCÔNGTHƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HCM

KHOA CÔNG NGHỆ THÔNG TIN

-TIỂU LUẬN MÔN HỌC

TÌM HIỂU GIẢI THUẬT BANKER VÀ VIẾT

CHƯƠNG TRÌNH MINH HỌA

GIÁO VIÊN GIẢNG DẠY: TRẦN THỊ BÍCH VÂN

2001225801_Đặng Thị Trúc Vân

2001225539_Lê Hữu Trí

2001220500_Ngô Huỳnh Trân Châu

2001190180_Bùi Thị Minh Ngọc

2001210856_Nguyễn Huỳnh Thanh Vân

LỚP: 13DHTH02

TP HỒ CHÍ MINH, tháng 10 năm 2023

Trang 3

LỜI CẢM ƠN

NhómemxingửilờicảmơnchânthànhđếngiảngviênTrầnThịBíchVânvìsự hướngdẫnvàhỗtrợtậntìnhtrongquátrìnhthựchiệnđềtài“ThuậttoánBankercủa nhóm.Nhữngkiếnthứcvàkinhnghiệmquýbáucủacôđãgiúpchúngtôihiểurõhơnvề thuậttoánBanker

NhómcũngmuốngửilờicảmơnđếnTrườngĐạihọcCôngThươngTP.HồChíMinhđã cungcấpchochúngtôimộtmôitrườnghọctậpvànghiêncứuchuyênnghiệp.Đâylàmộtcơhội tuyệtvờiđểchúngtôihọchỏivàpháttriểnbảnthântrongmônHệĐiềuhành

Cuốicùng,nhómcũngmuốngửilờicảmơnđếntấtcảcácbạnđồngnghiệptronglớpđã hỗtrợvàđónggópýkiếnquýbáuchođềtàicủanhóm.Sựđoànkếtvàhợptáccủatấtcảcác bạnđãgiúpnhómhoànthànhđềtàimộtcáchhiệuquảhơn.Mộtlầnnữa,xinchânthànhcảmơn!

Trang 4

LỜI CAM ĐOAN

Tôixincamđoanđâylàcôngtrìnhnghiêncứucủariêngtôi.Cácsốliệu,kếtquả nêutrongTiểuluận/Đồánlàtrungthựcvàchưatừngđượcaicôngbốtrongbấtkỳcông trìnhnàokhác.

TôixincamđoanrằngmọisựgiúpđỡchoviệcthựchiệnTiểuluận/Đồánnày  đãđượccảmơnvàcácthôngtintríchdẫntrongTiểuluận/Đồánđãđượcchỉrõnguồn gốc

Sinh viên thực hiện tiểu luận

(Ký và ghi rõ họ tên)

Trang 5

MỤC LỤC

LỜI CẢM ƠN 3

LỜI CAM ĐOAN 4

MỤC LỤC 5

PHẦN 1 ĐỊNH NGHĨA VÀ LỊCH SỬ RA ĐỜI 6

PHẦN 2 QUY TRÌNH HOẠT ĐỘNG CỦA GIẢI THUẬT BANKER 8

PHẦN 3 ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA GIẢI THUẬT BANKER 10

PHẦN 4 CẤU TRÚC DỮ LIỆU CỦA GIẢI THUẬT BANKER 12

PHẦN 5 BÀI TẬP ỨNG DỤNG 14

PHẦN 6 KẾT LUÂiN 18

PHẦN 7 TÀI LIÊiU THAM KHẢO 19

Trang 6

Phần 1 ĐỊNH NGHĨA VÀ LỊCH SỬ RA ĐỜI

I Khái niệm Tắc nghẽn:

- Deadlocklàmộttìnhhuốngxảyratronghệthốngmáytính,khihaihoặc nhiềutiếntrìnhcùngcốgắnggiànhquyềntruycậpvàotàinguyênchungmà mỗitiếntrìnhcầnđểhoànthànhcôngviệccủamình,nhưngkhôngthểhoàn thànhnếuthiếutàinguyênnày.Khiđó,cáctiếntrìnhsẽbịkẹtlại,khôngthể tiếptụcthựchiệncôngviệcvàchờđợitàinguyênđượcgiảiphóng +Vídụ:

P1,P2hoạtđộngđồngthờitronghệthống:

P1đanggiữtàinguyênR1,cầntàinguyêngăngR2đểtiếptụchoạtđộng; P2đanggiữtàinguyênR2vàcầnR1đểtiếptụchoạtđộng;

=>P1vàP2sẽkhôngtiếptụchoạtđộngđược(trạngtháitắcnghẽn)

LúcđótaphảidùngđếnmộtgiảithuậttránhdeadlockcótênlàgiảithuậtBanker.

II Khái niệm giải thuật Banker:

- GiảithuậtBankerdùngđểxácđịnhtrạngtháiantoànvàtránhtìnhtrạng deadlockxảyra.Đâylàmộtgiảithuậtquảnlýtàinguyêntrongmộthệthống điềuhànhđểđảmbảorằngkhôngcóquánhiềutàinguyênđượcyêucầubởi cáctiếntrìnhcùnglúcmàkhôngcóđủtàinguyênđểcungcấpchochúng.

- Giảithuậtđặttênnhưvậyvìthườngđượcsửdụngtronghệthốngngânhàng đểkiểmtraxemcóthểduyệtmộtkhoảnvaychomộtngườihaykhông.Giả sửcónngườigửitiềntrongmộtngânhàngvàtổngsốtiềncủahọlàS.Nếu mộtngườinàođóxinvaytiền,ngânhàngtrừsốtiềnvaykhỏitổngsốtiền

Trang 7

màngânhàngcó,vàchỉkhisốtiềncònlạilớnhơnSthìkhoảnvaymới đượcduyệt.Việcnàyđượcthựchiệnvìnếutấtcảcácngườigửitiềnđếnrút tiềncủahọ,thìngânhàngvẫncóđủtiềnđểchitrả

- Giảithuậtbankersẽkiểmtravàxácđịnh,nếutrạngtháihệthốngsẽlàan toàn,tàinguyênsẽđượccấp;ngượclạiquátrìnhphảichờchotớikhimột vàiquátrìnhgiảiphóngđủtảinguyên

+Vídụ:

GiảsửtiếntrìnhPiyêucầukrthểhiệncủatàinguyênr:

 Bước1:Nếukr<=Need[i,r]vớimọir,đếnbước2,ngượclại,xảyratình huốnglỗi

 Bước2:Nếukr<=Available[r]vớimọir,đếnbước3,ngượclạiPiphảichờ

 Bước3:GiảsửhệthốngđãcấpphátchoPicáctàinguyênmànóyêucầu vàcậpnhậttìnhtrạnghệthốngnhưsau:

Available[r]=Available[r]-kr;vớimọir

Allocation[i,r]=Allocation[i,r]+kr;vớimọir

Need[i,r]=Need[i,r]-kr;vớimọir

 Bước4:Kiểmtratrạngtháiantoàncủahệthống.–Dùnggiảithuật“xác địnhtrạngtháiantoàn”đểxácđịnhtrạngtháicủahệthốngsaukhiđãthử cấptàinguyênchoPi.–Nếutrạngtháilàantoànthìcáctàinguyênsẽđược cấpphátthậtsựchoPi.–Ngượclại,Piphảichờ.

III Lịch sử ra đời giải thuật Banker:

- GiảithuậtBanker,đượcbiếtđếnvớitênchínhthức"Dijkstra'sBanker's Algorithm,"lấytêncủanhàkhoahọcmáytínhngườiHàLannổitiếng EdsgerW.Dijkstra-ngườiđãđóngmộtvaitròquantrọngtrongquátrìnhra đờicủagiảithuậtnày.DijkstrapháttriểngiảithuậtBankervàocuốinhững năm1960vớimụctiêugiảiquyếtvấnđềquảnlýtàinguyêntronghệthống máytínhđanhiệm.CôngviệccủaDijkstrađãgiúpnângcaotínhantoànvà hiệusuấtcủacáchệthốngmáytínhbằngcáchngănchặntìnhtrạngchếtcô

Trang 8

lập(deadlock)vàđảmbảorằngviệccấppháttàinguyêndiễnramộtcáchan toàn

- VớisựđónggópcủaEdsgerW.Dijkstra,giảithuậtBankerđãtrởthànhmột trongnhữngcôngcụquantrọngtronglĩnhvựcquảnlýtàinguyêntronghệ thốngmáytínhvàhệthốngđanhiệm.Đólàmộtvídụđiểnhìnhvềcáchmà nhữngnhàkhoahọcmáytínhxuấtsắcnhưDijkstracóthểtạoracácgiải phápquantrọngvàcóảnhhưởnglớnđốivớilĩnhvựccôngnghệthôngtin

Phần 2 QUY TRÌNH HOẠT ĐỘNG CỦA GIẢI

THUẬT BANKER

- Giảithuậtbắtđầubằngviệcthốngkêxemmỗitiếntrìnhsẽcòncầnthêm baonhiêuđơnvịtàinguyênvàhiệntạivốnhệthốngcònbaonhiêu.Mọitiến trìnhđềuchưabiếtlàcókếtthúcđượchaykhông

- Dướiđâylàmộtphântíchchitiếthơnvềcáchgiảithuậtnàythựchiệncác bướccụthể:

a) Khởi tạo:Banđầu,giảithuậtngânhàngxácđịnhsốlượngtàinguyêncósẵn

tronghệthốngvàlưutrữthôngtinnàytrongmatrậntàinguyên

b) Yêu cầu tài nguyên:Khimộttiếntrìnhyêucầutàinguyên,hệthốngkiểmtra

xemviệccấppháttàinguyênnàycóantoànkhông.Điềunàyđòihỏihệthốngphải xemxétcácyêucầutàinguyêntiềmnăngcủatấtcảcáctiếntrình

c) Kiểm tra an toàn:Giảithuậtngânhàngkiểmtraxemviệccấppháttàinguyên

chotiếntrìnhnàycóthểdẫnđếntìnhtrạngdeadlockhaykhông.Nóxemxétxem tiếntrìnhcóyêucầutàinguyênđủđểhoànthànhcôngviệckhôngvànếucó,nósẽ cấppháttàinguyênchotiếntrìnhđótạmthời

d) Thử cấp phát tài nguyên tạm thời:Nếuviệccấppháttàinguyênchotiếntrình

khônglàmchohệthốngrơivàotìnhtrạngkhôngantoàn,thìtàinguyênsẽđược cấppháttạmthờichotiếntrình.Tiếntrìnhnàysauđócóthểtiếptụcthựchiện côngviệccủamình

Trang 9

e) Hoàn thành và trả tài nguyên:Khitiếntrìnhhoànthànhcôngviệcvàkhông

còncầntàinguyênnữa,nósẽtrảlạitàinguyênđóchohệthống,vàtàinguyênnày sẽtrởlạiđượcsửdụngchocáctiếntrìnhkhác

f) Lặp lại quá trình:Quátrìnhtrênsẽđượclặplạichomỗiyêucầutàinguyên

mớitừcáctiếntrình

j) Kiểm tra deadlock:Giảithuậtngânhàngxácđịnhdeadlockkhikhôngthểcấp

pháttàinguyênchomộttiếntrìnhmàkhôngđảmbảotínhantoàncủahệthống. Trongtrườnghợpnày,giảithuậtsẽthựchiệncácbiệnphápnhưtạmdừnghoặc hủybỏtiếntrìnhđểgiảiquyếttìnhtrạngdeadlock

Trang 10

Phần 3 ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA GIẢI

THUẬT BANKER

- Giảithuậtngânhàng(Banker'salgorithm)cómộtsốưuđiểmquantrọngkhi đượcsửdụngtrongquảnlýtàinguyênhệthốngmáytính:

 Đảm bảo tính an toàn: Mộttrongnhữngưuđiểmquantrọngnhấtcủa

giảithuậtnàylànóđảmbảotínhantoànchohệthống.Nóchỉcấpphát tàinguyênkhiviệccấpphátđókhônglàmchohệthốngrơivàotình trạngkhôngantoànhoặcdeadlock.Điềunàyđảmbảorằngcáctiếntrình cóthểhoànthànhcôngviệccủahọmàkhônggặpsựcốtàinguyên

 Chấp nhận yêu cầu tài nguyên hạn chế: Giảithuậtngânhàngcóthể

chấpnhậnyêucầutàinguyênmàkhôngcầnphảicấppháttàinguyên ngaylậptứcnếunókhôngantoàn.Tiếntrìnhsẽphảiđợichođếnkhicó đủtàinguyênđểthựchiệncôngviệccủamình,nhưngđiềunàyđảmbảo rằnghệthốngkhôngrơivàotìnhtrạngkhôngantoàn

 Kiểm soát tài nguyên: Giảithuậtnàygiúphệthốngkiểmsoáttài

nguyênmộtcáchhiệuquả.Nóchỉcấppháttàinguyênkhicóđủtài nguyênchoviệcđómàkhônggâyraxungđộthoặcdeadlock

 Tích hợp dễ dàng: Giảithuậtngânhàngcóthểtíchhợpvàohệthống

mộtcáchđơngiản.Nósửdụngmộtmatrậnđểtheodõitìnhtrạngtài nguyênvàyêucầucủacáctiếntrình,vàđiềunàycóthểthựchiệnmột cáchhiệuquảtrongmãnguồncủahệthống

 Không tạo ra giả tạo hoặc không cần thiết: Giảithuậtnàykhôngtạora

tàinguyêngiảtạohoặckhôngcầnthiết.Nóchỉcấppháttàinguyênkhi cóthểhoànthànhvàkhôngtạoralãngphítàinguyên

II NHƯỢC ĐIỂM:

- Mặcdùgiảithuậtngânhàng(Banker'salgorithm)cónhiềuưuđiểm,nhưng cũngtồntạimộtsốnhượcđiểm:

Trang 11

 Yêu cầu thông tin tài nguyên trước: Giảithuậtnàyyêucầubiếttrước

sựphânbổtàinguyênvàyêucầucủacáctiếntrình.Trongmôitrường thờigianthựchoặckhicácyêucầutàinguyênxuấthiệnmộtcáchđộng, việcxácđịnhcácthôngtinnàycóthểtrởnênphứctạp

 Không phản ánh thực tế trong một số trường hợp: Trongthựctế,các

tiếntrìnhcóthểthayđổiyêucầutàinguyêncủahọtrongquátrìnhthực thi,vàgiảithuậtnàykhôngxửlýtốtnhữngtìnhhuốngnày.Nókhông chophéptiếntrìnhđảongượcyêucầutàinguyênnếuchúngcầnthêmtài nguyênsaukhiđãđượccấpphát

 Tiềm ẩn cho sự lãng phí tài nguyên: Giảithuậtngânhàngcóthểtạora

tìnhhuốngtrongđómộtsốtàinguyênkhôngđượcsửdụngmặcdù chúngcósẵn.Điềunàycóthểdẫnđếnsựlãngphítàinguyên

 Khó cài đặt trong thời gian thực: Trongmôitrườngthờigianthực,giải

thuậtngânhàngcóthểgặpkhókhăntrongviệcđảmbảotínhantoànvà tránhdeadlockmàvẫnđảmbảothờigianđápứngđúngthờihạn

 Phức tạp trong việc xử lý tình trạng deadlock: Khihệthốngrơivào

tìnhtrạngdeadlock,giảiquyếttìnhtrạngnàycóthểphứctạpvàtốnthời gian.Giảithuậtngânhàngchỉxácđịnhtìnhtrạngdeadlockmàkhông cungcấpcáchgiảiquyếtcụthể

Trang 12

Phần 4 CẤU TRÚC DỮ LIỆU CỦA GIẢI THUẬT

BANKER

- GọimlàsốloạitàinguyênđangxéttronggiảithuậtBanker

- GọinlàsốtiếntrìnhđangxéttronggiảithuậtBanker

Mảng Available có m phần tử :TừngphầntửAvailable[j]chứamộtconsốtương

ứngvớisốthểhiệncủaloạitàinguyênjđó

MảngMax[i,j]=k:TiếntrìnhPiyêucầutốiđakthựcthểcủaloạitàinguyênRj. Allocation[i,j]=k:PiđãđượccấpphátkthựcthểcủaRj

Allocation[i,j]|=k:PiđãđượccấpphátkthựcthểcủaRj

Need[i,j]=k:PicanthêmkthựcthểcủaRj

Need[i,j]=Max[i,j]–Allocation[i,j]

 Các bước thực hiện giải thuật:

(Lưu ý: Ký hiệu Y<= X có Y[i] <= X[i], ví dụ (0,3,2,1) <= (1,7,3,2))

1 GọiWorkvàFinishlà2Vectorđộdàilàmvàn.Khởitạo: 

 Work=Available

 Finish[i]=false,i=0,1,…n-1

2 Tìm i thỏa: 

a) Finish=false

b) Needi<=work,hàngthứicủaneed

Nếukhôngtồntại nhưvậyđếnbước4.i

3 Work=Work+Allocationi: 

 Finish[i]=true

 Quayvềbước2

4 NếuFinish=True,i=1…nthìhệthốngđangởtrạngtháisafe: 

 5tiếntrìnhp0,…p4

 3loạitàinguyên

Trang 13

 Giải thuật Banker yêu cầu tài nguyên:

Request(i)làmộtvectorrequestcủaprocessP(i)

Request(i)[j]=kcóP(i)cầnkthựcthể(instance)củatàinguyênRj

1.NếuRequest(i)<=Need(i)thìđếnbước2.Nếukhông,báolỗivìtiếntrìnhđã vượtyêucầutốiđa

2.NếuRequest(i)<=Availablethìquabước3.Nếukhông,P(i)phảichờvìtài nguyênkhôngcònđủđểcấpphát

3.GiảđịnhcấppháttàinguyênđápứngyêucầucủaP(i)bằngcáchcậpnhậttrạng tháihệthốngnhưsau:

Available=Available-Request(i)

Allocation(i)=Allocation(i)+Request(i)

Need(i)=Need(i)–Request(i)

 Áp dụng giải thuật Banker lên hệ thống mới.

Nếuhệthốnggiảđịnhtrênantoànthìtiếnhànhcấpphátthực

NếutrạngtháilàkhôngantoànthìPiphảiđợivàphụchồitrạngthái:

Available=Available+Request(i)

Allocation(i)=Allocation(i)–Request(i)

Need(i)=Need(i)+Request(i)

Trang 14

Phần 5 BÀI TẬP ỨNG DỤNG

Một số thuật ngữ:

 Max:Yêucầubanđầu(matrậnmxn,vớimlàsốdòng-ứngvớisốlượng tiếntrình,nlàcột-ứngvớisốlượngtàinguyên).Trongmộtsốtàiliệu, ngườitathườngdùngtừRequestthaychoMax

 Allocation:Đãcấpphát(matrậnmxn)

 Available:Tàinguyêncònlại(matrận1xn)

 Need:Nhucầucònlại(matrậnmxn,xácđịnhnhưsau:Need[i,j]= Max[i,j]-Allocation[i,j])

 Sốtàinguyêntừngloại:Allocation[j]+Available[j]

Need

I BÀI 1:

ALLocation MAX Avaiable

TiếnTrình

Work

Trang 15

P3 7 4 3

NEED = MAX - ALLOCATION Nếu need <= work thì cộng dồn Thì work = WORK + ALLOCATION

II BÀI 2:

- Có4tiếntrìnhP1,P2,P3,P4và4tàinguyênR1,R2,R3,R4vớikhảnăng

phụcvụlà 10,9,9,5.Sốlượngđơnvịtàinguyêncầnthiếtvàđãcungcấpcho cáctiếntrìnhđượcchotheocácbảngsau:

Cần thiết

Đã cung cấp

Trang 16

Sốtàinguyêncònlạimỗiloại(R1,R2,R3,R4)=(2,3,4,3)

 Vòng 1:

+ChọnP2(2,2,4,2)dothoảmãnsốtàinguyêncònlại(2,3,4,3)

ThựchiệnP2rồigiảiphóngcáctàinguyên=>Sốtàinguyêncònlại(3,5,5,4) +ChọnP3(3,4,4,2)dothoảmãnsốtàinguyêncònlại(3,5,5,4)

ThựchiệnP3rồigiảiphóngcáctàinguyên=>Sốtàinguyêncònlại(7,5,8,5) +ChọnP4(2,2,3,3)dothoảmãnsốtàinguyêncònlại(7,5,8,5)

ThựchiệnP4rồigiảiphóngcáctàinguyên=>Sốtàinguyêncònlại(8,8,9,5)

 Vòng 2:

+ChọnP1(4,1,4,2)dothoảmãntàinguyêncònlại(8,8,9,5)

ThựchiệnP1rồigiảiphóngcáctàinguyên=>Sốtàinguyêncònlại(10,9,9,5) Vậyhệthốngantoànvớigiảipháplà(P2,P3,P4,P1)

Trang 17

Phần 6 KẾT LUÂiN

TrongnghiêncứuvềgiảithuậtBanker,chúngtađãkhámphámộtcôngcụ quantrọngtrongquảnlýtàinguyênhệthốngmáytính,đặcbiệtlàtrongmôi trườngđanhiệmvàđòihỏichiasẻtàinguyên.Banker'salgorithmkhôngchỉ đảmbảotínhantoàntrongviệccấppháttàinguyênmàcòngiúptránhtìnhtrạng deadlockmộtcáchhiệuquả.Chúngtađãthấyrằnggiảithuậtnàyyêucầubiết trướcthôngtinvềtàinguyênvàyêucầucủacáctiếntrình,điềunàycóthểlà mộtgiớihạntrongmộtsốtìnhhuốngthựctế.Tuynhiên,nóvẫnlàmộtcôngcụ mạnhmẽkhiápdụngtrongcácmôitrườngcóthểdựđoánvàquảnlýtàinguyên mộtcáchhiệuquả.Tínhhiệuquảvàantoàncủagiảithuậtngânhàngđãđược thấyrõquanhiềuứngdụngthựctế,từhệthốngmáytínhđếnmôitrườngsản xuấtvàcácứngdụngthờigianthực.Tuynhiên,đểápdụngnómộtcáchhiệu quả,chúngtacũngcầnxemxétcácgiớihạnvàđiềukiệncụthểcủamỗitình huống.Từđóchúngtađãbiết,Banker'salgorithmđónggópmộtcáchquantrọng vàolĩnhvựcquảnlýtàinguyênvàđảmbảotínhổnđịnhcủahệthốngmáytính trongcácmôitrườngđanhiệmvàchiasẻtàinguyên

Ngày đăng: 27/12/2024, 15:24