1. Trang chủ
  2. » Giáo án - Bài giảng

TÌM HIỂU PHƯƠNG PHÁP ĐỒNG BỘ HÓA TIẾN TRÌNH SEMAPHORES – VIẾT ỨNG DỤNG MINH HỌA BÀI TOÁN TIẾN TRÌNH ĐỌC - GHI (READERS – WRITERS)

34 18 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 34
Dung lượng 1,04 MB

Nội dung

Tiểu luận HĐH Nhóm 11 TRƯỜNG ĐẠI HỌC CƠNG NGHIỆP THỰC PHẨM TP HCM KHOA CÔNG NGHỆ THÔNG TIN - - NHĨM 11 TÌM HIỂU PHƯƠNG PHÁP ĐỒNG BỘ HĨA TIẾN TRÌNH SEMAPHORES – VIẾT ỨNG DỤNG MINH HỌA BÀI TỐN TIẾN TRÌNH ĐỌC - GHI (READERS – WRITERS) BÀI TẬP NHĨM MƠN: HỆ ĐIỀU HÀNH TP.HCM, NĂM 2022 Tiểu luận HĐH Nhóm 11 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HCM KHOA CÔNG NGHỆ THÔNG TIN - - NHĨM 11 TÌM HIỂU PHƯƠNG PHÁP ĐỒNG BỘ HĨA TIẾN TRÌNH SEMAPHORES – VIẾT ỨNG DỤNG MINH HỌA BÀI TỐN TIẾN TRÌNH ĐỌC - GHI (READERS – WRITERS) BÀI TẬP NHĨM MƠN: HỆ ĐIỀU HÀNH GVHD: Lê Anh Tuấn Lớp danh nghĩa: 12DHBM2 TKB thức: Tiết 1-3, thứ NHĨM THỰC HIỆN: NHĨM 11 TP.HCM, NĂM 2022 Tiểu luận HĐH Nhóm 11 BẢNG ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN CƠNG VIỆC NHĨM STT Họ Và Tên Lê Thị Huyền Trang (nhóm trưởng) Nguyễn Trần Hoàng Thy Trần Hồng Quân Trần Hà Thanh Phong Công việc đảm nhận Giải pháp Semaphore, pp, giới thiệu toán reader/writer Định dạng word, giải pháp BusyWaiting Các khái niệm liên quan, giải pháp Sleep-Wakup Giải toán, viết code LỜI CẢM ƠN Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến Trường Đại học Công nghiệp thực phẩm đưa mơn học Hệ điều hành vào chương trình giảng dạy Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc đến giảng viên môn - Thầy Lê Anh Tuấn dạy dỗ, truyền đạt kiến thức quý báu cho em suốt thời gian học tập vừa qua Trong thời gian tham gia lớp học Hệ điều hành thầy, chúng em có thêm cho nhiều kiến thức bổ ích Đây chắn kiến thức quý báu, hành trang để chúng em vững bước sau Bộ mơn Hệ điều hành môn học thú vị, vô bổ ích có tính thực tế cao Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn sinh viên Tuy nhiên, vốn kiến thức nhiều hạn chế khả tiếp thu thực tế nhiều bỡ ngỡ Mặc dù chúng em cố gắng chắn tiểu luận khó tránh khỏi thiếu sót nhiều chỗ cịn chưa xác, kính mong thầy xem xét góp ý để tiểu luận chúng em hoàn thiện hơn.  Chúng em xin chân thành cảm ơn! Tiểu luận HĐH Nhóm 11 MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU CHƯƠNG 1: CÁC KHÁI NIỆM LIÊN QUAN .4 I II KHÁI NIỆM ĐỒNG BỘ HĨA GIỮA CÁC TIẾN TRÌNH VẤN ĐỀ ĐOẠN GĂNG Tài nguyên găng (Critical Resource) Đoạn găng (Critical Section) Điều kiện thỏa mãn đoạn găng CHƯƠNG 2: CÁC GIẢI PHÁP ĐỒNG BỘ I II III GIẢI PHÁP SEMAPHORE Định nghĩa Hoạt động Phân loại Semaphora Tổ chức truy xuất độc quyền .11 Tổ chức đồng hóa phối hợp hoạt động: .11 Nhận xét 12 Một số ý sử dụng semaphore 13 GIẢI PHÁP “BUSY - WAITING” 13 Giải pháp phần cứng 13 Giả pháp phần mềm 14 GIẢI PHÁP “SLEEP AND WAKE UP” .17 Giải pháp Monitor 18 Giải pháp trao đổi thông điệp (message passing): 21 CHƯƠNG 3: BÀI TOÁN READER/WRITER 23 I II GIỚI THIỆU BÀI TOÁN .23 GIẢI QUYẾT BÀI TOÁN 26 Cấu trúc Reader 26 Cấu trúc Writer 27 Chương trình tốn Readers/Writers 27 Kết chương trình 30 TÀI LIỆU THAM KHẢO 31 Tiểu luận HĐH Nhóm 11 LỜI MỞ ĐẦU Sự phát triển không ngừng khoa học kỹ thuật ngày nay, theo phát triển Công nghệ thông tin tạo nhiều ứng dụng phục vụ cho đời sống xã hội Khơng hỗ trợ việc quản lý mà cịn thuận tiện kinh doanh, giúp phát triển kinh tế ngành nghề liên quan Thực tế, việc thúc đẩy phát triển hoàn toàn phụ thuộc nhu cầu sử dụng cho đời sống xã hội Bên cạnh đó, phổ biến việc sử dụng công nghệ thông tin ảnh hưởng đến tất ngành nghề Từ đặt vấn đề liên quan làm để vận hành cách an tồn mà không xảy trở ngại Một trở ngại cần quan tâm vấn đề đồng hóa hệ điều hành Việc ảnh hưởng đến qn trình thực thi hệ thống tổn hại đến hệ thống, gây không đồng liệu Vì ta cần giải pháp, chế để đảm bảo việc thực thi có thứ tự trình chia sẻ tài nguyên để hệ thống trì Semaphore ln lời giả kinh điển cho toán việc chia sẻ tài ngun Thơng qua việc tìm hiểu tốn giúp hiểu rõ cách thức hoạt động vấn đề hệ điều hành Tiểu luận HĐH Nhóm 11 CHƯƠNG 1: CÁC KHÁI NIỆM LIÊN QUAN I Khái niệm đồng hóa tiến trình Đồng tiến trình gì? Đồng tiến trình bảo đảm tiến trình xử lý song song không tác động sai lệch đến Đồng tiến trình có lẽ trực tiếp chia sẻ khơng gian địa (có nghĩ là, mã nguồn liệu), cho phép để chia sẻ liệu thông qua file Một trường hợp tắc đạt sử dụng tiến trình đơn giản tuyển Cùng nhập vào chia sẻ liệu kết dẫn đến xung khắc liệu Tại phải dồng tiến trình? Yêu cầu độc quyền truy xuất (mutual exclusion): thời điểm, có tiến trình quyền truy xuất tài nguyên chia sẻ Yêu cầu phối hợp (synchroniztion): tiến trình cần hợp tác với để hồn thành cơng việc Ví dụ chương trình in xuất kí tự vào buffer, chương trình điều khiển máy in (printer driver) lấy kí tự buffer để in hai tiến trình phải phối hợp với để chương trình in khơng xuất kí tự vào buffer buffer đầy mà phải chời printer driver lấy bớt liệu buffet II Vấn đề đoạn găng Tài nguyên găng (Critical Resource) - Các tiến trình hoạt động đồng thời thường cạnh tranh việc sử dụng tài nguyên dùng chung (cùng ghi vào không ghi nhớ chung hay ghi liệu vào file chia sẻ) - Những tài nguyên có nguy bị hư hỏng, sai lệch hệ điều hành chia sẻ đồng thời cho nhiều tiến trình gọi tài nguyên găng - Tài nguyên găng tài nguyên phần cứng, tài nguyên phần mềm, tài nguyên không phân chia hoắc đa số tài nguyên phân chia (các biến chung, file chia sẻ) Tiểu luận HĐH Nhóm 11 Đoạn găng (Critical Section) Xem xét hệ thống bao gồm n tiến trình Mỗi tiến trình có đoạn mã lệnh, gọi đoạn găng, tiến trình có lẽ thay đổi biến chung, cập nhập bảng, viết tệp, tương tự Đặc trưng quan trọng hệ thống là, tiến trình thực thi đoạn găng Vì vậy, việc thực thi đoạn găng tiến trình tranh chấp lúc Vấn đề đoạn găng thiết kế giao thức mà tiến trình sử dụng để hợp tác Mỗi tiến trình phải chấp nhận yêu cầu để nhập vào đoạn găng Phần mã lệnh thực yêu cầu gọi đoạn tiếp nhận (entry section) Đoạn găng có lẽ tiếp tục đoạn Đoạn mã lệnh cịn phải phần dư Điều kiện thỏa mãn đoạn găng Yêu cẩu cho vấn đề đoạn găng yêu cầu đồng hóa tiến trình Theo cần thỏa mãn điều kiện sau: - Loại bỏ tranh chấp (Mutual Exclusion): Nếu tiến trình thực thi đoạn găng khơng tiến trình khác thực thi đoạn găng Tiểu luận HĐH Nhóm 11 - Tiến trình (Progress): Một tiến trình tạm dừng bên ngồi miền găng khơng ngăn cản tiến trình khác vào miền găng Nếu khơng có tiến trình đoạn găng số tiến trình khác muốn vào tiến trình mà khơng thực thi phần cịn lại ứng cử viên Việc lựa chọn định dạng postponed - Giới hạn đợi (Bounded wait): Khơng có tiến trình phải chờ đợi vô hạn để vào miền găng Giới hạn số lần tiến trình phép vào đoạn găng tiến trình thực yêu cầu vào đoạn găng trước yêu cầu giảm CHƯƠNG 2: CÁC GIẢI PHÁP ĐỒNG BỘ I Giải Pháp Semaphore Định nghĩa a) Khái niệm - Là đóng góp quan trọng nhà toán học người Hà Lan Edsger Wybe Dijkstra, Semaphore công cụ đồng cung cấp OS mà không đỏi hỏi Busy Waiting - Semaphore biến khơng âm tính đến tốn tử khởi tạo, truy cập thơng qua hai toán tử nguyên tố wait (Down hay P) signal (Up hay V) b) Đặc tính - Có giá trị: Semaphore s; // s>=0 - Hai thao tác định nghĩa semaphore:  Down(s): giảm s đơn vị Nếu giá trị s âm process phỉa chờ, ngược lại tiếp tục xử lý Tiểu luận HĐH Nhóm 11  Up(s): tăng s lên đơn vị có nhiều tiến tình chờ semaphore s bị khóa thao tác Down hệ thống chọn tiến trình để kết thúc thao tác Down chờ tiếp tục xử lý  Hai thao tác có tính ngun tố, nghĩa khơng bị ngắt chừng Hoạt động Tiểu luận HĐH Nhóm 11 Hình Hoạt động giải pháp Semaphore - Khi count đang lớn 0, tức là semaphore trạng thái AVAILABLE, thread gọi hàm down, thì biến count bị giảm đi đơn vị (nếu hiệu semaphore chuyển sang trạng thái UNAVAILABLE) Sau đó, CPU bắt đầu thực thi critical section thread (nói theo ngôn ngữ CPU), hay thread bắt đầu sử dụng critical resource (nói theo ngơn ngữ Linux kernel) Khi count đang 0, tức semaphore trạng thái UNAVAILABLE, thread gọi hàm down, thì CPU tạm dừng thực thi thread rồi chuyển sang thực thi thread khác (nói theo ngơn ngữ CPU) Hay nói theo ngơn ngữ Linux kernel, thread được thêm vào hàng đợi wait_list và đi ngủ, sau Linux kernel sẽ lập lịch cho thread khác Do đó, ta nói rằng, semaphore áp dụng chế sleep-waiting Khi wait_list vẫn cịn thread phải đợi, thread A gọi hàm up, CPU chuyển sang thực thi thread B nằm vị trí hàng đợi wait_list (nói theo ngơn ngữ CPU) Hay nói theo ngơn ngữ Linux kernel, Linux kernel đánh thức thread B dậy, sau thread B bắt đầu sử dụng critical resource Tiểu luận HĐH Nhóm 11  Khi tiến trình chưa đủ điều kiện vào đoạn găng, gọi sleep để tự khóa tiến trình khác gọi wakep để giải phóng  Một tiến trình gọi wakup khỏi miền găng để đánh thức tiến trình chờ, tạo hội cho tiến trình vào miền găng - Cấu trúc: int busy; //1 miền găng bị chiếm, ngược lại int blocked; //đếm số lượng tiến trình bị tạm khóa - Các giải pháp phổ biến: o Semaphore o Monitors 18 Tiểu luận HĐH Nhóm 11 o Trao đổi thơng điệp Giải pháp Monitor Được đề xuất Hoare (1974) Brinch (1975) Monitor chế cao cung cấp ngơn ngữ lập trình a) Định nghĩa - Thuật ngữ monitor: giám sát - Monitor cấu trúc liệu có đặc điểm:  Các biến cấu trúc liệu bên monitor thao tác thủ tục định nghĩa bên monitor  Tại thời điểm, có tiến trình hoạt động bên - Trong monitor, định nghĩa biến điều kiện hai thao tác kèm theo Wait Signal sau: gọi c biến điều kiện định nghĩa monitor:  Wait(c): tiến trình gọi hàm bị blocked Chuyển trạng thái tiến trình gọi sang trạng thái waiting, đặt tiến trình vào hàng đợi biến điều kiện c  Signal(c): giải phóng tiến trình bị blocked biến điều kiện c Nếu có tiến trình bị khóa hàng đợi c, tái kích hoạt tiến trình tiến trình rời khỏi monitor  C.queue: danh sách tiến trình blocked c (chú thích hình) 19 Tiểu luận HĐH Nhóm 11 b) Cấu trúc: - Monitor thường gồm có:  Tập procedure thao tác tài nguyên chung  Khóa loại trừ lẫn  Các biến tương ứng với tài nguyên chung  Một số giả định bất biến nhằm tránh tình tương tranh - Monitor Type:  Một kiểu type kiểu trừa tượng (abstract type) gồm liệu private phương thức public  Monitor type đặc trưng tập tốn tử người sử dụng định nghĩa  Có biến xác định trạng thái; mã lệnh procedure thao tác biến 20 Tiểu luận HĐH Nhóm 11 - Monitor condition: 21 Tiểu luận HĐH Nhóm 11  Sử dụng monitor kiểu condition có tốn tử: wait signal  Đặc điểm signal(): o Chỉ đánh thức tiến trình chờ o Nếu khơng có tiến trình chờ, x.signal() khơng có tác dụng  x.signal() khác với signal semaphore, signal semaphore làm thay đổi giá trị (trạng thái) semaphore c) Vấn đề sử dụng monitor: - Monitor không đảm bảo thứ tự truy xuất trước ý  Một trình truy xuất tài ngun mà khơng đạt quyền truy xuất trước  Một q trình khơng giải phóng tài ngun gán truy xuất tới tài nguyên  Một q trình cố gắng giải phóng tài ngun mà khơng u cầu  Một q trình u cầu tài ngun hai lần (khơng giải phóng tài ngun lần đầu) - Việc sử dụng monitor gặp khó khăn xây dựng miền tương trục khó khăn việc dử dụng thao tác định nghĩa người lập trình cấp cap mà trình biên dịch khơng cịn hỗ trợ Giải pháp trao đổi thơng điệp (message passing): 22 Tiểu luận HĐH Nhóm 11 o Semaphore Monitor giải vấn đề loại trừ tương hỗ đồng hóa máy tính có nhiều CPU chia sẻ vùng nhớ chung o Cơ chế đồng thông điệp giải tình Cơ chế sử dụng message để thực yêu cầu nhận thông điệp để vào vùng tranh chấp a) Giải pháp - Send (destination, message): Gửi thông điệp đến tiến trình hay gửi vào hộp thư - Receive (source, message): nhận thơng điệp từ tiến trình hay từ tiến trình nào, tiến trình gọi chờ khơng có thơng điệp để nhận b) Cơ chế - Một tiến trình kiểm sốt việc sử dụng tài nguyên nhiều tiến trình khác u cầu tài ngun - Tiến trình có u cầu tài nguyên gửi thông điệp đến tiến trình - Khi sử dụng xong tài nguyên, tiến tình gởi thơng điệp khác đến - Tiến trình kiểm sốt, nhận thơng điệp u cầu tài ngun, chờ đến tài nguyên sẵn sàng để cấp phát c) Cấu trúc - Cấu trúc tiến trình yêu cầu tài nguyên giải pháp message: 23 Tiểu luận HĐH Nhóm 11 CHƯƠNG 3: BÀI TỐN READER/WRITER I Giới thiệu toán - - - - Vấn đề reader - writer liên quan đến đối tượng chẳng hạn tệp chia sẻ nhiều quy trình. Một số trình reader tức họ muốn đọc liệu từ đối tượng số trình writer tức họ muốn ghi vào đối tượng Bài toán Reader - Writer sử dụng để quản lý đồng hóa để khơng có vấn đề với liệu đối tượng. Ví dụ: Nếu hai reader truy cập lúc khơng có vấn đề gì. Tuy nhiên, hai writer reader writer truy cập đối tượng lúc, có vấn đề Vấn đề đồng hóa gặp phải cho phép người viết truy cập vào tập liệu thời điểm cho phép nhiều người đọc lúc mà không gặp trở ngại Vấn đề giải cách sử dụng semaphores Giả sử có khóa tập liệu. Đầu tiên reader khóa tập liệu sau readers tiếp tục bắt đầu đọc. Cuối reader mở khóa đọc xong Khi một writer bắt đầu đọc ngừng đọc, khóa / mở khóa tập liệu cho writers và readers Để kích hoạt đồng hóa quy trình vấn đề này, sử dụng giá trị số nguyên hai nửa hàm Hãy khởi tạo số nguyên read 0, đại diện cho số lần readers truy cập tệp. Đây semaphore, số nguyên Ngoài ra, khởi tạo semaphore S thành 1, bảo vệ read biến khơng bị cập nhật nhiều quy trình Cuối cùng, giả sử khởi tạo semaphore write thành 1, bảo vệ tập liệu khỏi bị truy cập lúc nhiều writers. Vì vậy, mã giả cho writer và reader xử lý: 24 Tiểu luận HĐH Nhóm 11 - Trong trường hợp này, writer chờ đợi tín hiệu semaphore write. Nếu lấy được write semaphore, tiếp tục. Nếu khơng, thao tác chờ chặn Vì vậy, quy trình khác truy cập tập liệu Quy trình làm việc reader phức tạp hơn. Điều làm tăng read_count. Để làm vậy, reader cần phải có semaphore S để sửa đổi read_count giá trị, để đảm bảo khơng truy cập đồng thời nhiều tiến trình 25 Tiểu luận HĐH Nhóm 11 - Nếu khơng có reader khác truy cập vào tập liệu thời điểm này, tập liệu read_count trở thành tập liệu sau hoạt động tăng dần. Trong trường hợp này, reader đợi semaphore write trước truy cập tập liệu, để đảm bảo khơng có người viết truy cập Sau giải phóng semaphore S, reader tiếp tục thực thao tác đọc Cuối cùng, khi reader hoàn thành làm việc với tập liệu, cần giảm read_count giá trị. Một lần nữa, giành lại semaphore S, thay đổi read_count biến cuối giải phóng semaphore S - Vấn đề reader - writer chia thành biến thể:  Biến thể 1: biến thể ưu tiên reader Khi hai nhiều reader yêu cầu quyền sử dụng tài nguyên, reader có quyền sử dụng Tuy nhiên, reader không sửa đổi liệu nên cần giải vấn đề không để reader phải chờ để sử dụng tài nguyên tài nguyên sử dụng reader Trong giải pháp này, writer phải xác nhận tài nguyên riêng lẻ. Điều có nghĩa luồng reader sau khóa tất nhà văn tiềm bỏ đói họ. Điều vậy, sau reader khóa tài ngun, khơng writer khóa nó, trước phát hành. Và phát hành reader cuối cùng. Do đó, giải pháp không đáp ứng công  Biến thể 2: biến thể ưu tiên writer Giải pháp khơng tối ưu đầu đọc R  1 có thể có khóa, nhà văn W đang chờ khóa sau đầu đọc R  2 yêu cầu quyền truy cập. Sẽ không công nếu R  2 lao vào lập tức, trước W; nếu điều xảy đủ thường xuyên, W sẽ chết đói. Thay vào đó, W nên bắt đầu sớm tốt biến thể thực cách buộc reader phải khóa giải phóng semaphore đọc cách riêng lẻ. Mặt khác, writer không cần phải khóa riêng lẻ. Chỉ writer khóa phép đọc sau tất writer cần sử dụng tài nguyên giải phóng writer trước. writer cuối phải phát hành semaphore readtry, mở cánh cổng cho reader thử đọc  Biến thể 3: biến thể xem cơng cho reader writer Trên thực tế, hai biến thể dẫn đến việc chết đói - giải pháp bỏ đói writer hàng đợi giải pháp thứ hai bỏ đói reader. Do đó, giải pháp 3 đơi đề xuất, điều làm tăng thêm ràng buộc rằng khơng có thread phép bỏ đói; nghĩa là, hoạt động lấy khóa liệu chia sẻ kết thúc khoảng thời gian định Giải pháp thỏa mãn điều kiện 26 Tiểu luận HĐH Nhóm 11 "khơng có luồng phép chết đói" semaphores bảo toàn thứ tự xuất trước nhập sau chặn giải phóng luồng. Nếu khơng, writer bị chặn, ví dụ, bị chặn vô thời hạn với chu kỳ writer khác giảm semaphore trước II Giải toán Bài toán giải theo nguyên tắc đến trước quyền sử dụng tài nguyên trước Đối với Reader, có reader sử dụng tài nguyên mà Reader khác chờ cho phép Reader truy cập tài nguyên (Do Reader không làm thay đổi tài nguyên trình sử dụng) Như giải vấn đề reader đến sau sử dụng tài nguyên trước writer đến trước vấn đề Reader chờ đợi Reader khác không cần thiết Cấu trúc Reader Cấu trúc Writer 27 Tiểu luận HĐH Nhóm 11 Chương trình tốn Readers/Writers 28 Tiểu luận HĐH Nhóm 11 29 Tiểu luận HĐH Nhóm 11 30 Tiểu luận HĐH Nhóm 11 Kết chương trình 31 Tiểu luận HĐH Nhóm 11 TÀI LIỆU THAM KHẢO (2022, 06 23) Retrieved from http://legiacong.blogspot.com/2019/10/he-ieu-hanh-4-lien-lac-va-ong-bohoa.html#:~:text=%C4%90%E1%BB%93ng%20b%E1%BB%99%20c%C3%A1c%20ti%E1%BA%BFn %20tr%C3%ACnh,nguy%C3%AAn%20kh%C3%B4ng%20th%E1%BB%83%20chia%20s%E1%BA %BB (2022, 06 25) Retrieved from http://trituevietvn.com/chi-tiet/tim-hieu-cac-phuong-phap-dong-bo-hoatien-trinh-viet-ung-dung-minh-hoa-bai-toan-bua-an-toi-cua-cac-triet-gia-su-dung-phuong-phapsemaphore-10143 (2022, 06 25) Retrieved from https://www.geeksforgeeks.org/semaphores-in-process-synchronization/? ref=lbp (2022, 06 25) Retrieved from https://www.guru99.com/semaphore-in-operating-system.html (2022, 06 25) Retrieved from https://vimentor.com/vi/lesson/giai-phap-semaphore (2022, 26 06) Retrieved from https://en.wikipedia.org/wiki/Monitor_(synchronization) (2022, 06 22) Retrieved from https://en.wikipedia.org/wiki/Readers %E2%80%93writers_problem#Simplest_reader_writer_problem (2022, 06 22) Retrieved from https://www.baeldung.com/cs/semaphore Tuấn, M P (11/2007) Tìm hiểu giải pháp đồng Semaphore Ứng dụng giải toán DiningPhilosopher Đà Nẵng 32

Ngày đăng: 06/08/2022, 13:42

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w