Phát biểu bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting.
+8
buuhuynh
phuong.ntt-08h1010074
cathytranha
phamvietthanh
PhamThiKhanhHa
tranmongthuy
lqhlam
hienminhchau2005
12 posters
Trang 2 trong tổng số 2 trang
Trang 2 trong tổng số 2 trang • 1, 2
Re: Phát biểu bài toán Sản xuất - Tiêu thụ với thuật giải dùng kỹ thuật Busy - Waiting
buuhuynh đã viết:Đọc bài này mình có chút ý kiến thế này mong các bạn góp ý, vấn để là ở assembler.Theo mình được biết assebler là trình biên dich. Máy tính làm việc bằng hợp ngữ, khi người dùng đưa dữ liều vào thì được assebler dich sang mã máy để máy tình thực thi chứ assembler không có khả năng sản sinh ra mã máy.Có thể bạn nhầm , và cũng có thể là kiến thức của tớ chưa tới mong các bạn góp ý .thankshienminhchau2005 đã viết:- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
Code:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
Code:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
Bạn ơi, ở đây là ví dụ Tiến trình sản xuất tạo ra dòng thông tin để Tiến trình tiêu thụ sử dụng.
Trinhg Complier tạo ra các lệnh của ngôn ngữ Assembler, trình Assembler nhận để tạo ra mã đích (Object Code), mã này được Loader hoặc Linkage Editor tiêu thụ.
Ví dụ này nằm trong Slides của thầy, bạn xem kỹ có thể "hienminhchau2005" tóm gọn hơn nên đọc bạn thấy thắc mắc.
Chúc mọi người thi tốt!
Lethanhtruc- Tổng số bài gửi : 64
Join date : 24/03/2009
Trang 2 trong tổng số 2 trang • 1, 2
Trang 2 trong tổng số 2 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết