Thảo luận Bài 4

Trang 1 trong tổng số 4 trang 1, 2, 3, 4  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Thảo luận Bài 4

Bài gửi  Admin on 23/3/2014, 09:45

Thảo luận những vấn đề liên quan đến Bài 4.

Admin
Admin

Tổng số bài gửi : 293
Join date : 18/02/2009

Xem lý lịch thành viên http://hedieuhanh.forumvi.net

Về Đầu Trang Go down

Câu 2: Trình bày mô hình luân chuyển CPU giữa 2 tiến trình (Y/c phải nêu được vai trò khối kiểm soát tiến trình PCB)

Bài gửi  NguyenChiKien(HLT3) on 23/3/2014, 18:01

Vai trò của khối kiểm soát tiến trình:
- PCB là một cấu trúc dữ liệu được hệ điều hành duy trì cho mỗi tiến trình để chứa thông tin cần thiết về tiến trình
đó. PCB  chứa “bản sao công việc tiến trình”.
- Nó lưu thông tin lại trạng thái của một tiến trình tại thời điểm đang xét. Trạng thái này bao gồm (các địa chỉ liên kết của tiến trình và dữ liệu, số hiệu tiến trình, bộ đếm lệch, nội dung các thanh ghi,giới hạn bộ nhớ của các tiến trình, danh sách file đang mở, các thông tin về thời gian thống kê tiến trình hiện tại)
Vd: Dùng chung 1 bảng, bạn thứ 2 lên bảng sửa bài thì phải xóa bài của bạn thứ 1 đã viết >> Phải viết vào vở để nội dung không bị mất khi người khác xóa.
Khối kiểm soát tiến trình (Process Control Block - PCB ) - Bảng thông tin về môi trường và trạng thái hoạt động của tiến trình:



- Chứa các thông tin ứng với mỗi process. Process ID, parent process ID:
   • Credentials (user ID, group ID, effective ID,...)
   • Trạng thái process : new, ready, running, waiting…
   • Program counter: địa chỉ của lệnh kế tiếp sẽ thực thi
   • Các thanh ghi CPU
   • Thông tin dùng để định thời CPU: priority,...
   • Thông tin bộ nhớ: base/limit register, page tables…
   • Thông tin thống kê: CPU time, time limits…
   • Thông tin trạng thái I/O: danh sách thiết bị I/O được cấp phát, danh sách các file đang mở,...
   • Con trỏ (pointer) đến PCBs khác.
- PCB đơn giản phục vụ như kho chứa cho bất cứ thông tin khác nhau từ quá trình này tới quá trình khác.

Mô hình luân chuyển CPU giữa 2 tiến trình (CPU switch from Process to Process)



Được sửa bởi NguyenChiKien(HLT3) ngày 23/3/2014, 18:17; sửa lần 1.
avatar
NguyenChiKien(HLT3)

Tổng số bài gửi : 44
Join date : 23/03/2014
Age : 34

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 3: Phân biệt điều phối chậm với điều phối nhanh. Cho VD minh họa từ đời thường (Phân biệt t/trình hướng CPU với t/trình hướng I/O)

Bài gửi  NguyenChiKien(HLT3) on 23/3/2014, 18:15

1. Điều phối chậm (Long-time scheduler (or job scheduler))
• Chọn process nào sẽ được đưa vào ready queue (từ New chuyển sang Ready)
• Kiểm soát Độ đa chương
• Do có nhiều thời gian (tới vài phút), loại scheduler này có điều kiện để lựa chọn kỹ càng nhằm phối hợp cân đối 2 loại tiến trình
- Hướng CPU: tính toán nhiều, ít I/O.
Ví dụ: Công ty có một chiếc ô tô (CPU), nhiều nhân viên cần đi công tác (nhiều tiến trình) phải sử dụng ô tô. Do đó, ô tô (CPU) phải bận (phục vụ) cho nhiều người (nhiều tiến trình).
- Hướng I/O: tính toán ít, nhiều I/O
Ví dụ: Công ty có một chiếc ô tô (CPU), các nhân viên trong công ty chỉ ngồi nghiên cứu (I/O), không sử dụng đến ô tô. Vậy quá lãng phí ô tô (CPU)

2. Điều phối nhanh (Short-time scheduler (or CPU scheduler))
• Còn gọi là Điều phối CPU.
• Chọn tiến trình từ Ready Queue để cấp CPU.
• Có tần suất công việc cao. Thường cứ 100 ms lại tốn 10 ms để xác định tiến trình kế tiếp, như vậy 10/(100+10)=9% thời gian CPU được dùng để điều phối công việc

Mọi người bổ sung nhé Sad 
avatar
NguyenChiKien(HLT3)

Tổng số bài gửi : 44
Join date : 23/03/2014
Age : 34

Xem lý lịch thành viên

Về Đầu Trang Go down

BÀI TOÁN SẢN XUẤT-TIÊU THỤ VÀ GIẢI THUẬT VỚI BỘ ĐỆM THỰC THI BẰNG MẢNG XOAY VÒNG.

Bài gửi  NguyenThiThuThao(TH09A2) on 23/3/2014, 19:56


Phát biểu bài toán:

-Giả sử có Bộ nhớ đệm (Buffer) bao gồm nhiều khoang (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
-Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
-Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi Buffer đầy, không được lấy ra khi chưa có sản phẩm nào.

Trình bày giải thuật:


NguyenThiThuThao(TH09A2)

Tổng số bài gửi : 21
Join date : 09/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Tiến trình khác chương trình như thế nào?

Bài gửi  NguyenThiThuThao(TH09A2) on 23/3/2014, 20:06


Tiến trình (Process) là chuơng trình trong thời gian thực hiện (đặt dưới sự quản lý của HĐH).Có sự phân biệt Tiến trình hệ thống(của HĐH) với Tiến trình người dùng.
Bản thân chương trình không là tiến trình vì là thực thể thụ động (Passive), trong khi tiến trình là thực thể hoạt động (Active) với nhiều thông tin về trạng thái trong đó có Bộ đếm chương trình (Program Counter) cho biết vị trí lệnh hiện hành.
- Nhiều tiến trình có thể liên quan đến một chương trình và là các thực thể khác nhau khi vận hành .
- Mỗi tiến trình có thể sinh ra nhiều tiến trình con khác khi vận hành.
- Tiến trình cần các tài nguyên ( CPU , Memory,tâp tin, thiết bị I/O) để hoàn thành công việc .
- Tài nguyên cấp cho tiến trinh ngay từ đầu (khi tiến trình được tạo lập) hoặc trong thời gian vận hành và được thu hồi hết khi tiến trình kết thúc .
- Tiến trình có thông tin trạng thái để phản ánh tiến trình đang ở trạng thái nào ( New, Ready, Running, Waitting, Terminated) còn chương trình thì không.

NguyenThiThuThao(TH09A2)

Tổng số bài gửi : 21
Join date : 09/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

HỎI VỀ BÀI TOÁN SẢN XUẤT TIÊU THỤ?

Bài gửi  NguyenThiThuThao(TH09A2) on 23/3/2014, 20:37


Mình không hiểu bài toán sản xuất tiêu thụ được ứng dụng để giải quyết vấn đề gì trong máy tính? Tiến trình sản xuất, tiến trình tiêu thụ là tiến trình nào? Sản phẩm ở đây là gì? Bộ nhớ đệm (Buffer) nẳm ở đâu, được tạo ra hay có sẵn? (Mình chỉ hỏi trên máy tính chứ không hỏi trong thực tế).
Mọi người ai biết trả lời giúp với! Mình không hiểu rõ, đừng chữi ngu nha!

NguyenThiThuThao(TH09A2)

Tổng số bài gửi : 21
Join date : 09/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  LeThiHuyenTrang(HLT3) on 23/3/2014, 21:35

NguyenThiThuThao(TH09A2) đã viết:
Mình không hiểu bài toán sản xuất tiêu thụ được ứng dụng để giải quyết vấn đề gì trong máy tính? Tiến trình sản xuất, tiến trình tiêu thụ là tiến trình nào? Sản phẩm ở đây là gì? Bộ nhớ đệm (Buffer) nẳm ở đâu, được tạo ra hay có sẵn? (Mình chỉ hỏi trên máy tính chứ không hỏi trong thực tế).
Mọi người ai biết trả lời giúp với! Mình không hiểu rõ, đừng chữi ngu nha!
đây là bài toán về đồng bộ. hai tiến trình cùng chia sẻ 1 bộ đệm có kích thước giới hạn.Sản xuất là quá trình 1 tiến trình tạo dữ liệu, đặt dữ liệu vào bộ đệm. Tiêu thụ là tiến trình lấy dữ liệu tư2 bộ đệm và xử lý.Hai tiến trình cần thoả các điều kiện sau :
- Tiến trình sản xuất không được ghi dữ liệu vào bộ đệm đã đầy.
- Tiến trình tiêu thụ không được đọc dữ liệu từ bộ đệm đang trống.
- Hai tiến trình không được truy xuất bộ đệm cùng lúc.


LeThiHuyenTrang(HLT3)

Tổng số bài gửi : 20
Join date : 16/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  NguyenChiKien(HLT3) on 23/3/2014, 22:02

NguyenThiThuThao(TH09A2) đã viết:
Mình không hiểu bài toán sản xuất tiêu thụ được ứng dụng để giải quyết vấn đề gì trong máy tính? Tiến trình sản xuất, tiến trình tiêu thụ là tiến trình nào? Sản phẩm ở đây là gì? Bộ nhớ đệm (Buffer) nẳm ở đâu, được tạo ra hay có sẵn? (Mình chỉ hỏi trên máy tính chứ không hỏi trong thực tế).
Mọi người ai biết trả lời giúp với! Mình không hiểu rõ, đừng chữi ngu nha!
Đây có thể nói nó giống như môn CTDL và GT vậy bạn ah... đây là cái căn bản, sơ khai về bài toán đồng bộ... bạn muốn phát triển bài toán đồng bộ thì bạn fải biết cái này trước tiên...
Thân!


Được sửa bởi NguyenChiKien(HLT3) ngày 23/3/2014, 22:20; sửa lần 1.
avatar
NguyenChiKien(HLT3)

Tổng số bài gửi : 44
Join date : 23/03/2014
Age : 34

Xem lý lịch thành viên

Về Đầu Trang Go down

Bổ sung câu 3

Bài gửi  LamQuocVu(HLT3) on 23/3/2014, 22:16

1) Điều phối chậm (Long - Term Scheduler):
-- Chọn tiến trình từ Job Queue để đưa vào Ready Queue.
-- Kiểm soát độ đa chương (số tiến trình trong bộ nhớ).
-- Mục đích: Cân bằng tải cho toàn hệ thống.
-- Do có nhiều thời gian (tới vài phút), loại Scheduler này có điều kiện để lựa chọn kỹ càng nhằm phối hợp cân đối 2 tiến trình:
===>1. Hướng CPU (CPU - Bound) : tính toán nhiều, ít I/O.
VD: Công ty có một chiếc ô tô (CPU), nhiều nhân viên cần đi công tác (nhiều tiến trình) phải sử dụng ô tô. Do đó, ô tô (CPU) phải bận phục vụ cho nhiều người (nhiều tiến trình).
===>2. Hướng I/O (I/O - Bound) : tính toán ít , nhiều I/O.
VD: công ty có 1 chiếc xe ô tô (CPU), các nhân viên trong công ty chỉ ngồi nghiên cứu (I/O) không sử dụng đến ô tô, vậy quá lãng phí ô tô (CPU).

2) Điều phối nhanh (Short - Term Schedule):
-- Còn gọi là Điều phối CPU.
-- Chọn tiến trình từ Ready Queue để cấp CPU.
-- Có tần suất công việc cao. Thường cứ 100ms lại tốn 10ms đề sát định tiến trình kế tiếp, như vậy 10/(100+10)=9% thời gian CPU được dùng để điều phối công việc.

LamQuocVu(HLT3)

Tổng số bài gửi : 31
Join date : 17/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Về bài toán Producer

Bài gửi  NguyenChiKien(HLT3) on 23/3/2014, 22:19


Thầy và mọi người cho e hỏi trong bài toán Producer ví dụ ở vòng lặp while thứ 2 tại sao k0 phải là while (in==out), vì sau khi thực hiện lệnh buffer[in]=nextProduced;
thì in đã tăng lên 1 rồi... sau đó nó vòng lên thực hiện tiếp thì vô vòng lặp thứ 2 gặp in+1 thêm 1 lần nữa thì hóa ra nó tăng lên 2 rồi thầy khi đó nó không còn in=out nữa
Thầy và mọi người giải thích giúp e với!!!
avatar
NguyenChiKien(HLT3)

Tổng số bài gửi : 44
Join date : 23/03/2014
Age : 34

Xem lý lịch thành viên

Về Đầu Trang Go down

RE: Bai Toán Tiêu Thụ

Bài gửi  LamQuocVu(HLT3) on 23/3/2014, 23:22

- Vùng đệm chung có N mục được thay bằng N thông điệp
- Khởi đầu, quá trình tiêu thụ gởi N thông điệp rỗng cho quá trình sản
xuất.
- Khi quá trình sản xuất muốn ghi 1 mục, nó lấy một thông điệp rỗng để
ghi và gởi lại cho quá trình tiêu thụ.
Trong mô hình này, số thông điệp còn lại luôn là một giá trị hằng, nên
chúng có thể được lưu giữ trên một vùng nhớ có kích thước xác định.
void producer(void)
{ int item;
message m;
while (TRUE) {
item = produce_item(); /* generate someth
receive(consumer, &m); /* wait for an emp
build_message(&m, item); /* construct a mes
send(consumer, &m); /* send item to co
}
}
void consumer(void)
{
int item, i;
message m;
for (i = 0; i < N; i++) send(producer, &m);
while (TRUE) {
receive(producer, &m);
item = extract_item(&m);
send(producer, &m);
consume_item(item);
}
}
Nếu quá trình sản xuất thực hiện nhanh hơn quá trình tiêu thụ, số thông
điệp trống sẽ hết. Nên quá trình sản xuất sẽ bị chặn và đợi cho đến khi có
thông điệp trống. Ngược lại, tất cả thông điệp sẽ trống và đợi quá trình
sản xuất ghi dữ liệu. Tương tự quá trình tiêu thụ bị chặn và đợi một thông
điệp full.
Vấn đề còn lại và xác định địa chỉ cho thông điệp. Có hai phương pháp
cho định địa chỉ. Thứ nhất, mỗi quá trình có một địa chỉ và địa chỉ thông
điệp xác định theo địa chỉ quá trình. Ví dụ: địa chỉ của một quá trình xác định theo địa chỉ socket (địa chỉ máy + địa chỉ cổng I/O). Cách còn lại là
sử dụng một hộp thư (mailbox) của mỗi máy để lưu giữ thông điệp.

LamQuocVu(HLT3)

Tổng số bài gửi : 31
Join date : 17/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Hàng đợi lập thời biểu

Bài gửi  LamQuocVu(HLT3) on 23/3/2014, 23:32

Khi các quá trình được đưa vào hệ thống, chúng được đặt vào hàng đợi công
việc. Hàng đợi chứa tất cả quá trình trong hệ thống. Các quá trình đang nằm trong bộ
nhớ chính sẳn sàng và chờ để thực thi được giữ trên một danh sách được gọi là hàng
đợi sẳn sàng. Hàng đợi này thường được lưu như một danh sách liên kết. Đầu của
hàng đợi sẳn sàng chứa hai con trỏ: một chỉ đến PCB đầu tiên và một chỉ tới PCB
cuối cùng trong danh sách. Chúng ta bổ sung thêm trong mỗi PCB một trường con trỏ
chỉ tới PCB kế tiếp trong hàng đợi sẳn sàng.
Hệ điều hành cũng có các hàng đợi khác. Khi một quá trình được cấp phát
CPU, nó thực thi một khoảng thời gian và cuối cùng kết thúc, được ngắt, hay chờ một
sự kiện xác định xảy ra, chẳng hạn như hoàn thành một yêu cầu nhập/xuất. Trong
trường hợp yêu cầu nhập/xuất, một yêu cầu có thể là ổ đĩa băng từ tận hiến hay một
thiết bị được chia sẻ như đĩa. Vì hệ thống có nhiều quá trình, đĩa có thể bận với yêu
cầu nhập/xuất của các quá trình khác. Do đó, quá trình phải chờ đĩa. Danh sách quá
trình chờ một thiết bị nhập/xuất cụ thể được gọi là hàng đợi thiết bị. Mỗi thiết bị có
hàng đợi của chính nó như hình III.4.
Một biểu diễn chung của lập thời biểu quá trình là một lưu đồ hàng đợi, như
hình III.5. Mỗi hình chữ nhật hiện diện một hàng đợi. Hai loại hàng đợi được hiện
diện: hàng đợi sẳn sàng và tập các hàng đợi thiết bị, vòng tròn hiện diện tài nguyên
phục vụ hàng đợi, các mũi tên hiển thị dòng các quá trình trong hệ thống.
Một quá trình mới khởi đầu được đặt vào hàng đợi. Nó chờ trong hàng đợi sẳn
sàng cho tới khi nó được chọn thực thi. Một khi quá trình được gán tới CPU và đang
thực thi, một trong nhiều sự kiện có thể xảy ra:
• Quá trình có thể phát ra một yêu cầu nhập/xuất và sau đó được đặt vào
trong hàng đợi nhập/xuất.
• Quá trình có thể tạo một quá trình con và chờ cho quá trình con kết thúc
• Khi một ngắt xảy ra, quá trình có thể bị buộc trả lại CPU và được đặt trở
lại trong hàng đợi sẳn sàng.
Trong hai trường hợp đầu, cuối cùng quá trình chuyển từ trạng thái chờ tới
trạng thái sẳn sàng và sau đó đặt trở lại vào hàng đợi sẳn sàng. Một quá trình tiếp tục
chu kỳ này cho tới khi nó kết thúc. Tại thời điểm kết thúc nó bị xoá từ tất cả hàng đợi.
Sau đó, PCB và tài nguyên của nó được thu hồi.

LamQuocVu(HLT3)

Tổng số bài gửi : 31
Join date : 17/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  VanPhuAnhTuan95(HLT3) on 24/3/2014, 11:40

- PCB là một trong các cấu trúc dữ liệu quan tọng nhất của hệ điều hành và gồm:

Trạng thái quá trình: new, ready, running,…
Bộ đếm chương trình
Các thanh ghi
Thông tin lập thời biểu CPU: độ ưu tiên, …
Thông tin quản lý bộ nhớ
Thông tin tài khoản: lượng CPU, thời gian sử dụng,
Thông tin trạng thái I/O
Tổ chức điều phối: Long-term scheduling,Medium-term scheduling,Short term scheduling.

- Hỗ trợ sự thực thi luân phiên giữa nhiều quá trình

+ Hiệu suất sử dụng CPU

+ Thời gian đáp ứng

- Phân phối tài nguyên hệ thống hợp lý

+ tránh deadlock, trì hoãn vô hạn định,…

- Cung cấp cơ chế giao tiếp và đồng bộ hoạt động các quá trình

- Cung cấp cơ chế hỗ trợ user tạo/kết thúc quá trình

VanPhuAnhTuan95(HLT3)

Tổng số bài gửi : 31
Join date : 16/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  VanPhuAnhTuan95(HLT3) on 24/3/2014, 13:26

Các bạn coi thử đoạn code này nha, xem coi nó hoạt động ra sao:


VanPhuAnhTuan95(HLT3)

Tổng số bài gửi : 31
Join date : 16/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  NguyenThiThuThao(TH09A2) on 24/3/2014, 20:34

LeThiHuyenTrang(HLT3) đã viết:
đây là bài toán về đồng bộ. hai tiến trình cùng chia sẻ 1 bộ đệm có kích thước giới hạn.Sản xuất là quá trình 1 tiến trình tạo dữ liệu, đặt dữ liệu vào bộ đệm. Tiêu thụ là tiến trình lấy dữ liệu tư2 bộ đệm và xử lý.Hai tiến trình cần thoả các điều kiện sau :
- Tiến trình sản xuất không được ghi dữ liệu vào bộ đệm đã đầy.
- Tiến trình tiêu thụ không được đọc dữ liệu từ bộ đệm đang trống.
- Hai tiến trình không được truy xuất bộ đệm cùng lúc.

Thank bạn!! Nhưng bạn có thể nói rõ hơn dữ liệu ở đây là gì không, có phải dữ liệu trong buffer phải cùng một kiểu không nhỉ(vd số nguyên, kiểu chuỗi...)? Và buffer có sẵn trong bộ nhớ hay do hệ thống hay tiến trình tạo vậy?

NguyenThiThuThao(TH09A2)

Tổng số bài gửi : 21
Join date : 09/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  HuynhNgoHaiDang(HLT3) on 24/3/2014, 20:55

VanPhuAnhTuan95(HLT3) đã viết:Các bạn coi thử đoạn code này nha, xem coi nó hoạt động ra sao:


Mấy hàm lấy bên class pthread.h lẽ ra nên chú thích nó làm gì với các thông số, mình nhìn hơi khó hiểu Smile Vả lại thấy tên kiểu một số biến có dính tới MUTEX, code này có phải sử dụng kỹ thuật SEMAPHORE không bạn?
avatar
HuynhNgoHaiDang(HLT3)

Tổng số bài gửi : 8
Join date : 17/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  VanPhuAnhTuan95(HLT3) on 25/3/2014, 20:43

Mình cũng chưa rõ về nó, bởi vậy mới đăng lên hỏi mọi người, nhìn mutex, nhưng chưa chắc dùng semaphore

VanPhuAnhTuan95(HLT3)

Tổng số bài gửi : 31
Join date : 16/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Phân biệt giữa Biên Dịch và Thông Dịch

Bài gửi  TranNguyenBinh(HLT3) on 25/3/2014, 21:01

Biên dịch và thông dịch
Thông dịch(Interpretion) là lần lượt thi hành từng lệnh 1 thông qua 1 chương trình gọi là Trình thông dịch(Interpretor). "Thường được viết ở ngôn ngữ cấp thấp được lưu thành file với đuôi mở rộng *.bat(batch)"

Biên dịch(Compilation) là dịch 1 lần toàn bộ chương trình thông qua 1 chương trình gọi là Trình biên dịch (Compiler)==> Tạo ra file thực thi *.exe (sẽ chạy 1 lần mà không cần phải thông dịch lại).
Trong thông dịch thì mã nguồn không được dịch trước thành ngôn ngữ máy mà mỗi lần cần chạy chương trình thì mã nguồn mới được dịch để thực thi từng dòng 1 (line by line). Tất cả các ngôn ngữ không biện dịch ra mã máy điều phải sử dụng trình thông dịch (PHP, WScripts, Perl, Linux Shell, Python....). Các ngôn ngữ theo trình thông dịch thường được gọi là script (kịch bản)

ví dụ:Thông dịch giống như 1 người thông dịch viên đi dịch cuộc nói chuyện của 2 người. phải biết người này nói gì thì mới dịch được. Người thông dịch viên này thường chi biết 2 thứ tiếng ( là tiếng bản sứ và tiếng cần dịch).

Biên dịch là người ngồi 1 nơi và dịch sách dịch 1 lúc toàn bộ nội dung của cuồn sách đó.
Bạn chạy chương trình vb hay c++ c# chưa? nếu bạn không debug tức chỉ đơn thuần là bấm run ( f5 cho vb và c++, f6 cho c#..). thì cái đó máy sẽ đọc hết 1 lược các câu lệnh rồi mới build thành từng chương trình=>biên dịch
Nhưng khi bạn debug (tức break point tại điểm nào đó ( có hình vòng tròn đỏ ở ngoài) thì tức là bạn đang thông dịch câu lệnh đó. máy sẽ đọc từng câu lệnh =>thông dịch
Biên Dịch giống như một dịch thuật gia, giã sử ông ta dịch một cuốn sách từ English sang Vietnam, sau này một người không biết English vẫn có thể hiểu nội dung quyển sách bằng cách đọc quyển tiếng Việt do ông ta dịch.
Interpreter giống như là thông dịch viên, có một cuộc hôi thảo người báo cáo là người Anh, trong khi hầu hết người dự báo cáo là người việt không biết tiếng Anh thì sẽ cần đến một anh thông dịch viên, lần sau cũng có cuộc hội thảo tương tự như vậy, cùng chủ đề đó nhưng cũng cần đến anh thông dịch viên.

TranNguyenBinh(HLT3)

Tổng số bài gửi : 42
Join date : 18/03/2014
Age : 27
Đến từ : Tiền Giang

Xem lý lịch thành viên

Về Đầu Trang Go down

Các đặc tính của Tiến Trình

Bài gửi  TranNguyenBinh(HLT3) on 25/3/2014, 21:03

Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệ điều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt được những mục tiêu đề ra. Một số đặc tính của tiến trình cần được quan tâm như tiêu chuẩn điều phối :

a) Tính hướng xuất / nhập của tiến trình ( I/O-boundedness):

Khi một tiến trình nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất ? Hoạt động của các tiến trình như thế thường bao gồm nhiều lượt sử dụng CPU , mỗi lượt trong một thời gian khá ngắn.

b) Tính hướng xử lý của tiến trình ( CPU-boundedness):

Khi một tiến trình nhận được CPU, nó có khuynh hướng sử dụng CPU đến khi hết thời gian dành cho nó ? Hoạt động của các tiến trình như thế thường bao gồm một số ít lượt sử dụng CPU , nhưng mỗi lượt trong một thời gian đủ dài.

c) Tiến trình tương tác hay xử lý theo lô :

Người sử dụng theo kiểu tương tác thường yêu cầu được hồi đáp tức thời đối với các yêu cầu của họ, trong khi các tiến trình của tác vụ được xử lý theo lô nói chung có thể trì hoãn trong một thời gian chấp nhận được.

d) Độ ưu tiên của tiến trình :

Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó, một cách hợp lý, các tiến trình quan trọng hơn ( có độ ưu tiên cao hơn) cần được ưu tiên hơn.

e) Thời gian đã sử dụng CPU của tiến trình :

Một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống . Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.

f) Thời gian còn lại tiến trình cần để hoàn tất :

Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách cho các tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước. Tuy nhiên đáng tiếc là rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử lý.

TranNguyenBinh(HLT3)

Tổng số bài gửi : 42
Join date : 18/03/2014
Age : 27
Đến từ : Tiền Giang

Xem lý lịch thành viên

Về Đầu Trang Go down

Trả lời câu 3

Bài gửi  TranNguyenBinh(HLT3) on 25/3/2014, 21:07

CÂU 3 : Phân biệt hàng chờ công việc với hàng chờ sẵn sàng. qua đó làm rõ chức năng của điều phối chậm và điều phối nhanh ( Chú ý: nhấn mạnh điều phối chậm, tại sao lại cần? ...)

Job Queue : là hàng chờ công việc, chứa các tiến trình chờ được vận hành (các tiến trình ở trạng thái New). Vai trò hàng chờ này là chờ cho Hệ điều hành dùng điều phối chậm chọn ra 1 hỗn hợp tối ưu nhất (gồm 2 loại tiến trình là : hướng CPU và hướng I/O ) để chuyển sang trạng thái Ready.

Ready Queue : là hàng chờ sẵn sàng, chứa các tiến trình chờ được cấp CPU (các tiên trình ở trạng thái Ready). Vai trò hàng chờ này là chờ cho Hệ điều hành tuyển chọn ra tiến trình thích hợp để cấp phát CPU thực thi lệnh.

Giống nhau:
- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.

Khác nhau:
- Dùng giải thuật điều phối chậm(Long - term Scheduler) để đưa các tiến trình từ Job Queue vào Ready Queue.
- Dùng giải thuật điều phối nhanh(Short - term Scheduler) chọn các tiến trình trong Ready Queue để cấp CPU.
Job Queue : Có nhiều thời gian xử lý hơn.
Ready Queue : Có ít thời gian so với Job Queue. Ready Queue chứa hỗn hợp 2 loại tiến trình Hướng CPU và Hướng I/O sao cho tối ưu nhất vì đảm bảo được độ cân bằng tải (Load-Balancing) cần thiết.

VD: Thầy giáo gọi tên 6 bạn trong lớp để lên danh sách chuẩn bị lên bảng làm bài tập:
Điều phối chậm: 6 bạn được đưa từ Job Queue (danh sách lớp) vào Ready Queue (danh sách làm bài).
Điều phối nhanh: Sau đó thầy gọi từng bạn trong danh sách làm bài lên bảng.

Chức năng của điều phối chậm, điều phối nhanh:

Trình Điều Phối gồm có:

Điều phối chậm (Long-term scheduler):
- Chọn tiến trình nào sẽ được đưa vào Ready Queue ( tức là xác định các tiến trình để đưa từ hàng chờ công việc ở trạng thái New chuyển sang hàng chờ sẵn sàng ở trạng thái Ready.)
- Kiểm soát Độ đa chương (số tiến trình trong bộ nhớ)
- Do có nhiều thời gian (tới vài phút), loại Scheduler này có điều kiện để lựa chọn kỹ càng nhằm phối hợp cân đối 2 loại tiến trình:

1. Hướng CPU: tính toán nhiều, ít I/O.
Ví dụ: Trong 1 gia đình có 1 Tivi (CPU), mỗi thành viên trong gia đình (tiến trình) đều có 1 kênh yêu thích, người này phải chờ người kia xem xong mới xem được, vậy Tivi sẽ hoạt động và bận liên tục với nhiều thành viên trong gia đình..

2. Hướng I/O: tính toán ít, nhiều I/O
Ví dụ: Công ty có một chiếc ô tô (CPU), các nhân viên trong công ty( tiến trình) chỉ ngồi thực hiện giao dịch tại chỗ (I/O), không sử dụng đến ô tô.Như vậy sẽ gây lãng phí ô tô (CPU).
- Mục đích là cân bằng tải cho toàn hệ thống. Nếu chỉ sử dụng theo hướng CPU, CPU phải làm việc liên tục, luôn bận, làm tốn thời gian của hệ thống. Ngược lại, nếu chỉ sử dụng theo hướng I/O, CPU không phải hoạt động, gây lãng phí tài nguyên, đồng thời làm chậm quá trình. Do vậy, trình điều phối chậm cần phải có để phối hợp cân đối 2 loại tiến trình CPU và I/O.

Điều phối nhanh (Short-term scheduler còn gọi là điều phối CPU) :
- Chọn tiến trình nào sẽ được chiếm CPU để xử lý (tức là từ trạng thái Ready chuyển sang Running)
- Có tần xuất công việc cao: cứ 100ms thì tốn 10ms để xác định tiến trình kế tiếp: 10/(100+10)=9% thời gian CPU được dùng để điều chối chương trình.
Vì đã qua giai đoạn tuyển chọn tốt trước đó nên thời gian tuyển chọn sẽ nhanh hơn.
Ví dụ: 1 công ty vận tải mới thành lập họ mua về rất nhiều xe tải . Giai đoạn đầu họ sẽ phân loại các xe tải này thành ra các nhóm xe thích hợp ,công việc này tốn nhiều thời gian (điều phối chậm) .Nhưng khi họ đã phân loại được ra các nhóm xe thì việc sử dụng, điều phối sẽ diễn ra nhanh chóng (điều phối nhanh).

Ngoài ra, kết hợp 2 loại trình điều phối trên, đưa ra các điều phối mà nhờ đó hỗn hợp các tiến trình trong Ready Queue có tính tối ưu hơn là điều phối vừa (Medium-term scheduler) :
- Điều phối vừa được thêm chức năng chuyển tiến trình từ bộ nhớ chính sang sang bộ nhớ thứ cấp (nhưng vẫn nằm trong không gian bộ nhớ ảo); khi nào cần thì nạp process từ bộ nhớ thứ cấp vào bộ nhớ chính: rút các tiến trình khỏi bộ nhớ, dẫn đến làm giảm Độ đa chương, sau đó đưa lại chúng vào bộ nhớ vào thời điểm thích hợp để tiếp tục thực hiện từ vị trí bị tạm ngừng trước đó.
Ví dụ: 1 Lớp học thực hành, nhưng sinh viên đông, không đủ máy để làm bài (có nhiều tiến trình). Giảng viên sẽ chỉ định một nhóm ra khỏi lớp (rút các tiến trình ra khỏi bộ nhớ). Sau khi nhóm trong lớp học xong, giảng viên gọi lại các bạn bên ngoài vào phòng học (đưa tiến trình vào bộ nhớ vào thời điểm thích hợp).
Có thiếu sót gì các bạn bổ sung thêm  Smile 

TranNguyenBinh(HLT3)

Tổng số bài gửi : 42
Join date : 18/03/2014
Age : 27
Đến từ : Tiền Giang

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 1: Trình bày mô hình chuyển trạng thái của tiến trình (Định nghĩa tiến trình là gì? Chỉ ra 5 trạng thái có thể có trong vòng đời của tiến trình; Phân biệt được hàng chờ công việc với hàng chờ sẵn sàng)

Bài gửi  HuynhNgoHaiDang(HLT3) on 25/3/2014, 21:24

1) Định nghĩa tiến trình (Process):

- Process là chương trình được thực thi:
+ Được nạp vào bộ nhớ.
+ Có các thông tin trạng thái: thanh ghi PC, các thanh ghi, …
- Mỗi process thực thi trên một CPU ảo
- Hệ thống có nhiều process đồng thời:
+ Đa chương- 1 CPU.
+ Đa xử lý – nhiều CPU trên 1 máy.
+ Phân bố – nhiều CPU trên nhiều máy.
-Tổ chức thứ bậc các process:
+ Process có thể được tạo do hệ điều hành, người sử dụng hay do process khác tạo ra.
+ Khi kết thúc process có thể có các kết quả: bình thường, xảy ra lỗi, bị process khác kết thúc.
+ Process tạo process khác: Parent process tạo ra Child process.
+Windows không có tổ chức thứ bậc, các process được tạo là tương đương. Trong UNIX thì là các process group.

2) Mô hình chuyển trạng thái của tiến trình:

Ta có sơ đồ trạng thái sau:


- New: tiến trình được tạo lập, lúc này khối thông tin quản lý process (PCB) đã được tạo. Process chưa được nạp vào bộ nhớ chính.
- Ready: tiến trình đang chờ CPU được xử lý (có thể nằm trong hàng đợi, vì có thể có nhiều ready process).
- Blocked: tiến trình bị chặn, không thể thực thi cho đến khi có biến cố (ví dụ như chờ đến thời gian thực thi) xảy ra (cũng được quản lý bằng hàng đợi).
- Running: tiến trình đang thực thi, chỉ có 1 process được thực thi tại 1 thời điểm trên hệ thống đa chương.
- Exit: tiến trình kết thúc, khối thông tin quản lý process vẫn còn được lưu giữ (cho phép rút trích).
=> Trong quá trình thực thi, các tiến trình có thể xảy ra vấn đề tranh chấp tài nguyên dùng chung, hay hết thời gian thực thi, lúc này tiến trình bị chặn. Khi bị chặn, tiến trình phải chờ xảy ra biến cố mới lại thực thi tiếp (thời gian thực thi hoặc tài nguyên được process kia sử dụng xong), nếu trong tranh chấp tài nguyên thì có thể có tiến trình có độ ưu tiên hơn được thực thi trước. Thực thi xong, kết thúc tiến trình.

Sơ đồ chuyển trạng thái giữa 2 tiến trình:


Tiến trình được thực thi có thể bị dừng do ngắt quãng (Clock Interrupt hay I/O Interrupt) hoặc khi có lệnh gọi hệ thống, lỗi (System call, Trap). Trạng thái lưu vào khối thông tin quản lý PCB này, thực thi tiếp tại PCB được chuyển rồi lại được trả về cho PCB này. Trong khoảng thời gian ngắt quãng các process thay phiên thực hiện luân chuyển cho đến khi hoàn tất.

3) Phân biệt hàng chờ công việc với hàng chờ sẵn sàng: (hay còn gọi là Job Queue và Ready Queue)

Job Queue: là hàng chờ công việc, chứa các tiến trình chờ được vận hành.

Ready Queue: là hàng chờ sẵn sàng, chứa các tiến trình chờ được cấp CPU.

Giống nhau:
- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.

Khác nhau:
- Dùng giải thuật điều phối chậm(Long - term Scheduler) để đưa các tiến trình từ Job Queue vào Ready Queue.
- Dùng giải thuật điều phối nhanh(Short - term Scheduler) chọn các tiến trình trong Ready Queue để cấp CPU.
Job Queue : Có nhiều thời gian xử lý hơn.
Ready Queue : Có ít thời gian so với Job Queue.

***********
MONG CÁC BẠN BỔ SUNG THÊM :)Thanks
avatar
HuynhNgoHaiDang(HLT3)

Tổng số bài gửi : 8
Join date : 17/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Mô hình luân chuyển CPU giữa 2 tiến trình

Bài gửi  VoThiHuynhVan(TH09A2) on 26/3/2014, 08:37

• Tiến trình P0: vào hàng đợi Job-Queue ở trạng thái New, sẽ đợi 1 khoảng thời gian của quá trình điều phối chậm (Scheduler Long Term) của hệ điều hành(HĐH) để chọn tiến trình, sau khi được O.S chọn, P0 chuyển sang hàng đợi reday quueue và ở trạng thái Ready. Lúc này P0 chỉ đợi cấp CPU và running.
•  Sau một khỏang thời gian running, tiến trình P1 xuất hiện. Lúc này, hệ điều hành sẽ ghi lại thông tin của P0 vào thanh PCB1 bao gồm những thông tin: con trỏ, trạng thái của P0, số hiệu của tiến trình P0, Bộ đếm P0, nội dung của P0…Và chuyển P0 sang hàng đợi Waiting và chuyển trạng thái Ready. Lúc này, P1 sẽ được cấp CPU và running. Và sau một khỏang thời gian running, P1 cũng sẽ chuyển sang hàng đợi waiting và chuyển trạng thái ready, lúc này HĐH cũng ghi lại thông tin vào thanh ghi PCB2 như đã làm ở P0. Sau đó, HĐH sẽ load lại thông tin của PCB1 và P0 sẽ tiếp tục running. Quá trình này cũng sẽ lập lại cho P1. Đển khi P0 và P1 kết thúc.

VoThiHuynhVan(TH09A2)

Tổng số bài gửi : 12
Join date : 13/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Mô hình chuyển trạng thái tiến trình

Bài gửi  VoThiHuynhVan(TH09A2) on 26/3/2014, 09:09

Định nghĩa tiến trình:

           - Tiến trình (process) : là chương trình trong thời gian thực hiện đặt dưới sự quản lý của hệ điều hành.
           - Được sinh ra khi chương trình tải vào bộ nhớ để thực hiện.

5 trạng thái tiến trình: Tại một thời điểm, một tiến trình có thể nhận trong một các trạng thái sau đây :

           - Mới tạo : tiến trình đang được tạo lập.
           - Running : các chỉ thị của tiến trình đang được xử lý.
           - Blocked : tiến trình chờ được cấp phát một tài nguyên, hay chờ một
             sự kiện xảy ra .
          - Ready : tiến trình chờ được cấp phát CPU để xử lý.
          - Kết thúc : tiến trình hoàn tất xử lý.
          Tại một thời điểm, chỉ có một tiến trình có thể nhận trạng thái running trên một bộ xử lý bất kỳ. Trong khi đó, nhiều tiến trình có thể ở trạng thái blocked hay ready.

VoThiHuynhVan(TH09A2)

Tổng số bài gửi : 12
Join date : 13/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Bài toán sản xuất tiêu thụ

Bài gửi  VoThiHuynhVan(TH09A2) on 26/3/2014, 09:37

Giải thích code bài toán:
NguyenThiKimThanh (102C) đã viết:Tham khảo code sản xuất và tiêu thụ, các bạn cho ý kiến nha
Code:
#define BUFFER_SIZE  10          //số lượng khoang chứa

int buffer[BUFFER_SIZE];          //bộ nhớ đệm size 10 p.tử
int in=0;                        //con trỏ tới vị trí trống kế tiếp
int out=0;                      //con trỏ tới vị trí trống tiếp theo

int nextProduced=1;    //tạo 1 sản phẩm được sản xuất kế tiếp

//Hàm sản xuất:
void Producer()
{
   while (1)
   {
      //Quá trình tạo ra 1 sản phẩm
      // ... San xuat (nextProduced

      //vòng lặp quẩn tại đây cho đến khi có 1 chỗ trống trong bộ đệm hay ngăn chứa sản phẩm
      while(((in+1)%BUFFER_SIZE)==out);

      //khi vòng lặp while kết thúc =>có 1 chỗ trống để chèn sản phẩm vào
      buffer[in]=nextProduced++;      //chèn sản phẩm tại vị trí in vô ngăn chứa, sản phẩm được sản xuất
      in=(in+1)%BUFFER_SIZE;       //tìm vị trí khác để Producer chèn thêm sản phầm vào

      //hàm SuspendThread dùng để tạo ngưng 1 luồng hiện hành
      SuspendThread(GetCurrentThread());
   }
}

//Hàm tiêu thụ:
void Consumer()
{
   int nextConsumed;
   while (1)
   {
      // vòng lặp quẩn tại đây khi các ngăn chứa sản phầm đều trống
      while(in==out);

      //vòng lặp while thoát khi có 1 ngăn chứa sản phầm
      nextConsumed=buffer[out];   //lấy sản phẩm tại vị trí out ra khỏi ngăn
      out=(out+1)%BUFFER_SIZE;   //tìm vị trí khác để Consumer lấy sản phẩm

      // ... Tieu thu (nextConsumed)--> quá trình tiêu thụ sàn phẩm

      //hàm Sleep đưa luồng vào trạng thái ngủ trong khi chờ Producer sản xuất thêm sản phầm
      //đếm số mili giây trong giờ hiện tại % 5000, hết thời gian thực hiện while kế tiếp
      Sleep(GetTickCount()%5000);
   }
}

int main(){
   HANDLE ProducerHandle1, ProducerHandle2;//biến HANDLE chứa mục quản nhà sản xuất
   HANDLE ConsumerHandle1, ConsumerHandle2;// biến HANDLE chứa mục quản nhà tiêu thụ

   DWORD ProducerID1, ProducerID2, ConsumerID1, ConsumerID2;//chứa ID nhà sản xuất và nhà tiêu thụ
  
   //khởi tạo nhà sản xuất với các thông tin: Producer, ID, số 4 biểu thị trạng thái của Producer lúc khởi tạo: trạng thái ngủ
   ProducerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer,0,4,&ProducerID1);
   ProducerHandle2=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer,0,4,&ProducerID2);

   //khởi tạo nhà tiêu thụ với các thông tin: Consumer, ID, số 0 biểu thị trạng thái của Producer lúc khởi tạo: trạng thái thức
   ConsumerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer,0,0,&ConsumerID1);
   ConsumerHandle2=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer,0,0,&ConsumerID2);

   while(1)
   {
      printf("\n- Nhan phim P/p de san xuat, nhan 0 de ket thuc:");
      switch (getch())
      {
         //nhấn phím P=Producing
         case 'P':
               // đánh thức Producer lúc này đang ở trạng thái ngủ
               ResumeThread(ProducerHandle1);
            break;
         //nhấn phím p=Producing
         case 'p':   ResumeThread(ProducerHandle2);      break;

         //giải phóng Producer và Consumer khỏi bộ nhớ
         case '0':
         {
            CloseHandle(ProducerHandle1);
            CloseHandle(ProducerHandle2);
            CloseHandle(ConsumerHandle1);
            CloseHandle(ConsumerHandle2);
            return 0;

         }
      }
      //ngừng 1 khoảng thời gian nhất định để nhà sản xuất vừa được đánh thức kịp hoàn tất 1 chu trình công việc
      Sleep(1);

      //show kết quả sau khi sản xuất tiêu thụ
      ShowBuffer();
   }
}

Có giải thích khá rõ. Mọi người tham khảo thêm  Very Happy

VoThiHuynhVan(TH09A2)

Tổng số bài gửi : 12
Join date : 13/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Bài toán sản xuất tiêu thụ

Bài gửi  VoThiHuynhVan(TH09A2) on 26/3/2014, 09:55

NguyenThiThuThao(TH09A2) đã viết:
LeThiHuyenTrang(HLT3) đã viết:
đây là bài toán về đồng bộ. hai tiến trình cùng chia sẻ 1 bộ đệm có kích thước giới hạn.Sản xuất là quá trình 1 tiến trình tạo dữ liệu, đặt dữ liệu vào bộ đệm. Tiêu thụ là tiến trình lấy dữ liệu tư2 bộ đệm và xử lý.Hai tiến trình cần thoả các điều kiện sau :
- Tiến trình sản xuất không được ghi dữ liệu vào bộ đệm đã đầy.
- Tiến trình tiêu thụ không được đọc dữ liệu từ bộ đệm đang trống.
- Hai tiến trình không được truy xuất bộ đệm cùng lúc.

Thank bạn!! Nhưng bạn có thể nói rõ hơn dữ liệu ở đây là gì không, có phải dữ liệu trong buffer phải cùng một kiểu không nhỉ(vd số nguyên, kiểu chuỗi...)? Và buffer có sẵn trong bộ nhớ hay do hệ thống hay tiến trình tạo vậy?

Ta nghĩ bài toán này là 1 ví dụ giải thích + minh họa hoạt động của tiến trình, cho nên dữ liệu ở đây là đầu vào (đầu ra), buffer có thể là số nguyên, chuỗi,...cùng 1 kiểu thì chương trình mới ko bắt lỗi Very Happy, buffer là khai báo nên sẽ do người lập trình yêu cầu tạo ra ko có sẵn.

Ý kiến của mình thôi, ko biết có hiểu sai ko nữa. hehe Very Happy

VoThiHuynhVan(TH09A2)

Tổng số bài gửi : 12
Join date : 13/03/2014

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 4

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 1 trong tổng số 4 trang 1, 2, 3, 4  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết