Thảo luận Bài 4
+111
DangLeHieu(I102C)
NguyenTuanHai_I12A
Đỗ Phan Diễm Hương I12A
TRANTHINHPHAT (I11C)
lengocthuthao89 (i11c)
NguyenthechinhI12A
DaoQuangTri38(I12A)
LyHuynhThanhYen (I11C)
BuiDaiNghia-102C
nguyenhuutho
TrinhThiPhuongThaoI12C
TranVanBao(I12A)
tranthithanhuyen85 (I11C)
KimHue36 (I11C)
phanngocthinh(i12a)
fantomas113
PhamDucPhuong(I12A)
VoTrongQuyet-I12A
vominhhai_09H1012028
nguyenvanhonglac_0066
leminhtam13(I12A)
TruongQuocTrung_I12A
HuaTranTuQuyen(I12A)
NguyenNgocDuy(I12A)
PhamMinhLuan(102C)
sonha89
Nguyen Doan Linh051(I11c)
HuynhMinhChanh(i91C)
ngophicamI12A
HuynhNguyenTrungHau_I12C
LeMinhDuc (I11C)
huynhtamhaoI12A
LuongGiaDuc(I12A)
HUYNHMINHHAI(I12A)
TranHuyCuong17 (I12A)
NguyenThanhCang(I12A)
lymydung_I12A
VuNguyenQuynhLam_I12C
TranHoangNhanI12C
BuiHuongTra(I12A)
NgoXuanQuoc_(102C)
NguyenVinhQuang_I12A
LeMInhTien(I11C)
nguyenthihongtham_I12C
maidangvu_I12A
NguyenVanBenI12C
NguyenVanThang25 (I12A)
phamduyI12A
NguyenHaCamThu(I12A)
TranTrungTinh(I12A)
trantrungnam-HC11TH2A
LacChiHao(I12A)
luthioanh-I12A
nguyen_tuan_phat_I12A
lacongchinh_I12A
lethanhsang_I12A
TranTrungHienI12C
plminhhoangI12A
ngothihanHC11TH2A
TranBinhCongLuanI12A
nguyenthanhphongHC11TH2A
quynhnhi.nguyen_I12A
LeXuanHau (I12C)
DaoThaiHuyI12A
levanhop.it
Nguyen Sy Hung I12A
thailongI12C
nguyenthingocmai_I12A
hoanghaiyen
Đinh Đông Dương
NguyenThiHue48(I12A)
phuongnguyen
nguyenthaihiep (I11C)
nguyenthimao_I12A
TranMinhTuan143(I12A)
NguyenHongHaiI12C
nguyenhuutrang_11h1010135
nguyenthanhnghi_I12C
quicly_I111c
NguyenThiHongYen(I12A)
NgoPhuQuoc_I12C
TranThiNgocQuynh(I12C)
hoxuanvu_I12A
LuongHueChanh_I12A
TranThiMyKhanh(I12A)
DoanNgocDan(I12A)
LeLamThang (113A)
tranvanthien27(I12C)
BuiPhamAnBinh(I12A)
LeThanhTung (I11C)
LeQuocKhanh-11H1010059
trinhvanminh_11h1010077
letanthanh18(I12A)
vothingocthuy87(I11C)
NguyenTriVienI12A
NguyenHoangThangI12A
LeThiMaiPhuongI12A
hoanggiangI12C
TranPhiLong (I11C)
phamphihung55
TranThiAnhDao89I12C
TrinhVinhThanh (I12A)
lequanghanh(102c)
Truc_Phuong(I111C)
LePhucHiep(102C)
NguyenXuanTri28
huynhvanhung(I12A)
VoThiHongNhung(I12A)
PhamQuangHien_I12A
minhtam_I12C
Admin
115 posters
Trang 3 trong tổng số 15 trang
Trang 3 trong tổng số 15 trang • 1, 2, 3, 4 ... 9 ... 15
Lý do cộng tác các tiến trình - Cooperating Process
Các quá trình đồng hành thực thi trong hệ điều hành có thể là những quá trình
độc lập hay những quá trình hợp tác. Một quá trình là độc lập (independent) nếu nó
không thể ảnh hưởng hay bị ảnh hưởng bởi các quá trình khác thực thi trong hệ thống.
Rõ ràng, bất kỳ một quá trình không chia sẻ bất cứ dữ liệu (tạm thời hay cố định) với
quá trình khác là độc lập. Ngược lại, một quá trình là hợp tác (cooperating) nếu nó có
thể ảnh hưởng hay bị ảnh hưởng bởi các quá trình khác trong hệ thống. Hay nói cách
khác, bất cứ quá trình chia sẻ dữ liệu với quá trình khác là quá trình hợp tác.
Chúng ta có thể cung cấp một môi trường cho phép hợp tác quá trình với nhiều lý
do:
• Chia sẻ thông tin: vì nhiều người dùng có thể quan tâm cùng phần thông
tin (thí dụ, tập tin chia sẻ), chúng phải cung cấp một môi trường cho phép
truy xuất đồng hành tới những loại tài nguyên này.
• Gia tăng tốc độ tính toán: nếu chúng ta muốn một tác vụ chạy nhanh
hơn, chúng ta phải chia nó thành những tác vụ nhỏ hơn, mỗi tác vụ sẽ thực
thi song song với các tác vụ khác. Việc tăng tốc như thế có thể đạt được
chỉ nếu máy tính có nhiều thành phần đa xử lý (như các CPU hay các kênh
I/O).
• Tính module hóa: chúng ta muốn xây dựng hệ thống trong một kiểu mẫu
dạng module, chia các chức năng hệ thống thành những quá trình hay
luồng như đã thảo luận ở chương trước.
• Tính tiện dụng: Thậm chí một người dùng đơn có thể có nhiều tác vụ thực
hiện tại cùng thời điểm. Thí dụ, một người dùng có thể đang soạn thảo, in,
và biên dịch cùng một lúc.
Thực thi đồng hành của các quá trình hợp tác yêu cầu các cơ chế cho phép các
quá trình giao tiếp với các quá trình khác và đồng bộ hóa các hoạt động của chúng.
Để minh họa khái niệm của các quá trình cộng tác, chúng ta xem xét bài toán người
sản xuất-người tiêu thụ, là mô hình chung cho các quá trình hợp tác. Quá trình người
sản xuất cung cấp thông tin được tiêu thụ bởi quá trình người tiêu thụ. Thí dụ, một
chương trình in sản xuất các ký tự được tiêu thụ bởi trình điều khiển máy in. Một
trình biên dịch có thể sản xuất mã hợp ngữ được tiêu thụ bởi trình hợp ngữ. Sau đó,
trình hợp ngữ có sản xuất module đối tượng, được tiêu thụ bởi bộ nạp.
độc lập hay những quá trình hợp tác. Một quá trình là độc lập (independent) nếu nó
không thể ảnh hưởng hay bị ảnh hưởng bởi các quá trình khác thực thi trong hệ thống.
Rõ ràng, bất kỳ một quá trình không chia sẻ bất cứ dữ liệu (tạm thời hay cố định) với
quá trình khác là độc lập. Ngược lại, một quá trình là hợp tác (cooperating) nếu nó có
thể ảnh hưởng hay bị ảnh hưởng bởi các quá trình khác trong hệ thống. Hay nói cách
khác, bất cứ quá trình chia sẻ dữ liệu với quá trình khác là quá trình hợp tác.
Chúng ta có thể cung cấp một môi trường cho phép hợp tác quá trình với nhiều lý
do:
• Chia sẻ thông tin: vì nhiều người dùng có thể quan tâm cùng phần thông
tin (thí dụ, tập tin chia sẻ), chúng phải cung cấp một môi trường cho phép
truy xuất đồng hành tới những loại tài nguyên này.
• Gia tăng tốc độ tính toán: nếu chúng ta muốn một tác vụ chạy nhanh
hơn, chúng ta phải chia nó thành những tác vụ nhỏ hơn, mỗi tác vụ sẽ thực
thi song song với các tác vụ khác. Việc tăng tốc như thế có thể đạt được
chỉ nếu máy tính có nhiều thành phần đa xử lý (như các CPU hay các kênh
I/O).
• Tính module hóa: chúng ta muốn xây dựng hệ thống trong một kiểu mẫu
dạng module, chia các chức năng hệ thống thành những quá trình hay
luồng như đã thảo luận ở chương trước.
• Tính tiện dụng: Thậm chí một người dùng đơn có thể có nhiều tác vụ thực
hiện tại cùng thời điểm. Thí dụ, một người dùng có thể đang soạn thảo, in,
và biên dịch cùng một lúc.
Thực thi đồng hành của các quá trình hợp tác yêu cầu các cơ chế cho phép các
quá trình giao tiếp với các quá trình khác và đồng bộ hóa các hoạt động của chúng.
Để minh họa khái niệm của các quá trình cộng tác, chúng ta xem xét bài toán người
sản xuất-người tiêu thụ, là mô hình chung cho các quá trình hợp tác. Quá trình người
sản xuất cung cấp thông tin được tiêu thụ bởi quá trình người tiêu thụ. Thí dụ, một
chương trình in sản xuất các ký tự được tiêu thụ bởi trình điều khiển máy in. Một
trình biên dịch có thể sản xuất mã hợp ngữ được tiêu thụ bởi trình hợp ngữ. Sau đó,
trình hợp ngữ có sản xuất module đối tượng, được tiêu thụ bởi bộ nạp.
Được sửa bởi NguyenTriVienI12A ngày 7/3/2012, 23:41; sửa lần 1.
NguyenTriVienI12A- Tổng số bài gửi : 7
Join date : 17/02/2012
Đến từ : Tuy Hòa - Phú Yên
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.
- 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
}
- 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
}
LuongHueChanh_I12A- Tổng số bài gửi : 11
Join date : 17/02/2012
tiến trình và các trạng thái của tiến trình
Định nghĩa tiến trình
Trạng thái của một hệ thống tính toán tại
một thời điểm đ¬ợc hiểu là một bộ thông tin của tất cả các thành phần
trong hệ thống tính toán.
Một dãy chuyển trạng thái của hệ thống tính
toán ký hiệu là S0, S1,..Sn trong đó S0 là trạng thái đầu, Sn là trạng
thái kết thúc thì ta gọi đó là một tiến trình
Tiến trình được xem là một chương trình đang hoạt động, sỡ hữu một con trỏ lệnh, tập các thanh ghi và các biến.
Vì thế nên tiến trình được xem như là một thực thể động. Quá trình thực
thi tiếng trình diễn ra tuần tự( tại một thời điểm chỉ có duy nhất một
chỉ thị trong tiếng trình được thực hiện).
Tiến trình là một chương
trình đang xử lý.Để hoàn thành tác vụ của mình, một tiến trình có thể
cần đến một số tài nguyên: CPU, bộ nhớ chính, các tập tin và thiết bị
nhập/xuất.
Tiến trình gồm có…
Đoạn mã lệnh (code, có sách gọi là text)
Đoạn dữ liệu
Đoạn ngăn xếp và heap (stack/heap)
Các hoạt động hiện tại đượcthể hiện qua con đếm lệnh (IP) và nội dung các thanh ghi (registers) của bộ xử lý
Các trạng thái của tiến trình
Trạng
thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiện
thời của tiến trình tại thời điểm đó. Trong quá trình sống, một tiến
trình thay đổi trạng thái do nhiều nguyên nhân như : phải chờ một sự
kiện nào đó xảy ra, hay đợi một thao tác nhập/xuất hoàn tất, buộc phải
dừng hoạt động do đã hết thời gian xử lý …
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 blockedhay ready.
Các cung chuyển tiếp trong sơ đồ trạng thái biễu diễn sáu sự chuyển trạng thái có thể xảy ra trong các điều kiện sau :
Tiến trình mới tạo được đưa vào hệ thống
Bộ điều phối cấp phát cho tiến trình một khoảng thời gian sử dụng CPU
Tiến trình kết thúc
Tiến trình yêu cầu một tài nguyên nhưng chưa được đáp ứng vì tài nguyên
chưa sẵn sàng để cấp phát tại thời điểm đó ; hoặc tiến trình phải chờ
một sự kiện hay thao tác nhập/xuất.
Bộ điều phối chọn một tiến trình khác để cho xử lý .
Tài nguyên mà tiến trình yêu cầu trở nên sẵn sàng để cấp phát ; hay sự
kiện hoặc thao tác nhập/xuất tiến trình đang đợi hoàn tất.
Trạng thái của một hệ thống tính toán tại
một thời điểm đ¬ợc hiểu là một bộ thông tin của tất cả các thành phần
trong hệ thống tính toán.
Một dãy chuyển trạng thái của hệ thống tính
toán ký hiệu là S0, S1,..Sn trong đó S0 là trạng thái đầu, Sn là trạng
thái kết thúc thì ta gọi đó là một tiến trình
Tiến trình được xem là một chương trình đang hoạt động, sỡ hữu một con trỏ lệnh, tập các thanh ghi và các biến.
Vì thế nên tiến trình được xem như là một thực thể động. Quá trình thực
thi tiếng trình diễn ra tuần tự( tại một thời điểm chỉ có duy nhất một
chỉ thị trong tiếng trình được thực hiện).
Tiến trình là một chương
trình đang xử lý.Để hoàn thành tác vụ của mình, một tiến trình có thể
cần đến một số tài nguyên: CPU, bộ nhớ chính, các tập tin và thiết bị
nhập/xuất.
Tiến trình gồm có…
Đoạn mã lệnh (code, có sách gọi là text)
Đoạn dữ liệu
Đoạn ngăn xếp và heap (stack/heap)
Các hoạt động hiện tại đượcthể hiện qua con đếm lệnh (IP) và nội dung các thanh ghi (registers) của bộ xử lý
Các trạng thái của tiến trình
Trạng
thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiện
thời của tiến trình tại thời điểm đó. Trong quá trình sống, một tiến
trình thay đổi trạng thái do nhiều nguyên nhân như : phải chờ một sự
kiện nào đó xảy ra, hay đợi một thao tác nhập/xuất hoàn tất, buộc phải
dừng hoạt động do đã hết thời gian xử lý …
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 blockedhay ready.
Các cung chuyển tiếp trong sơ đồ trạng thái biễu diễn sáu sự chuyển trạng thái có thể xảy ra trong các điều kiện sau :
Tiến trình mới tạo được đưa vào hệ thống
Bộ điều phối cấp phát cho tiến trình một khoảng thời gian sử dụng CPU
Tiến trình kết thúc
Tiến trình yêu cầu một tài nguyên nhưng chưa được đáp ứng vì tài nguyên
chưa sẵn sàng để cấp phát tại thời điểm đó ; hoặc tiến trình phải chờ
một sự kiện hay thao tác nhập/xuất.
Bộ điều phối chọn một tiến trình khác để cho xử lý .
Tài nguyên mà tiến trình yêu cầu trở nên sẵn sàng để cấp phát ; hay sự
kiện hoặc thao tác nhập/xuất tiến trình đang đợi hoàn tất.
hoxuanvu_I12A- Tổng số bài gửi : 34
Join date : 18/02/2012
Khái niệm đa luồng. So sánh luồng với tiến trình
Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), là một đơn vị cơ bản của việc sử dụng CPU.
Ví dụ: Lớp học là một tiến trình .Trong lớp sẽ có một giáo viên (đơn luồng) và các học viên (đa luồng).
Luồng có thông tin trạng thái như của tiến trình truyền thống (HWP – Heavy Weight Process).Nhiều luồng có thể cùng chung một mã chương trình.
Ví dụ: Sinh viên trong lớp dùng chung code như: mỗi sinh viên làm việc giống nhau, học giống nhau, điểm thưởng, phát biểu….
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Đ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.
Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
Ví dụ: Lớp HCTHI11C đang học là một tiến trình.
Sự giống nhau:
- Đều có thông tin trạng thái
- Luồng cũng là tiến trình nhưng là tiến trình nhẹ (Light Weigh Process)
- Đa luồng hay đa tiến trình có thể liên quan đến một chương trình.
- Chia sẻ tài nguyên cho nhau, tăng tốc tính toán, đảm bảo tính đơn thể
- Do luồng cùng vận hành trong 1 vùng địa chỉ, vì vậy dễ dùng chung tài nguyên hơn đa tiến trình
Ví dụ: Mình cần mượn xe đi đâu đó thì mượn xe trong gia đình để đi thì dễ hơn mượn của người ngoài
- Do dùng chung tài nguyên với luồng cha nên việc tạo lập và chuyển đổi ngữ cảnh cũng nhanh hơn tiến trình
Ví dụ: Việc ngăn phòng riêng ra trong nhà thì dễ hơn việc xây thêm hay mua thêm một nhà khác.
- Cấp phát tài nguyên bộ nhớ cho tiến trình khá tốn kém.
- Lập trình đa luồng thì dễ hơn lập trình đa tiến trình.
Sự khác nhau:
- Lập trình đa luồng dễ hơn lập trình đa tiến trình.
- Tạo mới một tiến trình khó hơn tạo mới một luồng.
- Luồng không cần gởi, nhận thông điệp.
- Luồng chuyển đổi ngữ cảnh nhanh và ít chiếm tài nguyên hơn tiến trình.
- Luồng chia sẻ tài nguyên dùng chung dể hơn tiến trình.
Ví dụ: Lớp học là một tiến trình .Trong lớp sẽ có một giáo viên (đơn luồng) và các học viên (đa luồng).
Luồng có thông tin trạng thái như của tiến trình truyền thống (HWP – Heavy Weight Process).Nhiều luồng có thể cùng chung một mã chương trình.
Ví dụ: Sinh viên trong lớp dùng chung code như: mỗi sinh viên làm việc giống nhau, học giống nhau, điểm thưởng, phát biểu….
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Đ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.
Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
Ví dụ: Lớp HCTHI11C đang học là một tiến trình.
Sự giống nhau:
- Đều có thông tin trạng thái
- Luồng cũng là tiến trình nhưng là tiến trình nhẹ (Light Weigh Process)
- Đa luồng hay đa tiến trình có thể liên quan đến một chương trình.
- Chia sẻ tài nguyên cho nhau, tăng tốc tính toán, đảm bảo tính đơn thể
- Do luồng cùng vận hành trong 1 vùng địa chỉ, vì vậy dễ dùng chung tài nguyên hơn đa tiến trình
Ví dụ: Mình cần mượn xe đi đâu đó thì mượn xe trong gia đình để đi thì dễ hơn mượn của người ngoài
- Do dùng chung tài nguyên với luồng cha nên việc tạo lập và chuyển đổi ngữ cảnh cũng nhanh hơn tiến trình
Ví dụ: Việc ngăn phòng riêng ra trong nhà thì dễ hơn việc xây thêm hay mua thêm một nhà khác.
- Cấp phát tài nguyên bộ nhớ cho tiến trình khá tốn kém.
- Lập trình đa luồng thì dễ hơn lập trình đa tiến trình.
Sự khác nhau:
- Lập trình đa luồng dễ hơn lập trình đa tiến trình.
- Tạo mới một tiến trình khó hơn tạo mới một luồng.
- Luồng không cần gởi, nhận thông điệp.
- Luồng chuyển đổi ngữ cảnh nhanh và ít chiếm tài nguyên hơn tiến trình.
- Luồng chia sẻ tài nguyên dùng chung dể hơn tiến trình.
DoanNgocDan(I12A)- Tổng số bài gửi : 33
Join date : 17/02/2012
Age : 36
Đến từ : DakLak
Trình điều phối -Schedulers
Một quá trình di dời giữa hai hàng đợi định thời khác nhau suốt thời gian sống
của nó. Hệ điều hành phải chọn, cho mục đích định thời, các quá trình từ các hàng đợi
này. Quá trình chọn lựa này được thực hiện bởi bộ định thời hợp lý.
Trong hệ thống bó, thường nhiều hơn một quá trình được gởi đến hơn là có thể
được thực thi tức thì. Các quá trình này được lưu tới thiết bị lưu trữ (như đĩa), nơi
chúng được giữ cho việc thực thi sau đó. Bộ định thời dài (long-term scheduler) hay
bộ định thời công việc (job scheduler), chọn các quá trình từ vùng đệm và nạp chúng
vào bộ nhớ để thực thi. Bộ định thời ngắn (short-term scheduler) hay bộ định thời
CPU chọn một quá trình từ các quá trình sẳn sàng thực thi và cấp phát CPU cho quá
trình đó.
Sự khác biệt chủ yếu giữa hai bộ định thời là tính thường xuyên của việc thực
thi. Bộ định thời CPU phải chọn một quá trình mới cho CPU thường xuyên. Một quá
trình có thể thực thi chỉ một vài mili giây trước khi chờ yêu cầu nhập/xuất. Bộ định
thời CPU thường thực thi ít nhất một lần mỗi 100 mili giây. Vì thời gian ngắn giữa
việc thực thi nên bộ định thời phải nhanh. Nếu nó mất 10 mili giây để quyết định thực
thi một quá trình 100 mili giây thì 10/(100+10) = 9 phần trăm của CPU đang được
dùng (hay bị lãng phí) đơn giản cho định thời công việc.
Ngược lại, bộ định thời công việc thực thi ít thường xuyên hơn. Có vài phút
giữa việc tạo các quá trình mới trong hệ thống. Bộ định thời công việc điều khiển mức
độ đa chương – số quá trình trong bộ nhớ. Nếu mức độ đa chương ổn định thì tốc độ
trung bình của việc tạo quá trình phải bằng tốc độ khởi hành trung bình của quá trình
rời hệ thống. Vì khoảng thời gian dài hơn giữa việc thực thi nên bộ định thời công
việc có thể cấp nhiều thời gian hơn để chọn một quá trình thực thi.
Bộ định thời công việc phải thực hiện một chọn lựa cẩn thận. Thông thường,
hầu hết các quá trình có thể được mô tả như là quá trình hướng nhập/xuất (I/Obound proces) hay quá trình hướng CPU (CPU-bound process). Một quá trình
hướng nhập/xuất mất nhiều thời gian hơn để thực hiện nhập/xuất hơn thời gian tính
toán. Ngược lại, một quá trình hướng CPU phát sinh các yêu cầu nhập/xuất không
thường xuyên, dùng thời gian để thực hiện việc tính toán hơn một quá trình hướng
nhập/xuất dùng. Bộ định thời công việc nên chọn sự kết hợp hài hoà giữa quá trình
hướng nhập/xuất và quá trình hướng CPU. Nếu tất cả quá trình là hướng nhập/xuất thì
hàng đợi sẳn sàng sẽ luôn rỗng và bộ định thời CPU sẽ có ít công việc để thực hiện.
Nếu tất cả quá trình là hướng CPU thì hàng đợi nhập/xuất sẽ luôn rỗng, các thiết bị sẽ
không được sử dụng và hệ thống sẽ mất cân bằng. Hệ thống với năng lực tốt nhất sẽ
có sự kết hợp các quá trình hướng CPU và hướng nhập/xuất.
Trên một vài hệ thống, bộ định thời công việc có thể không có hay rất ít. Thí
dụ, các hệ thống chia thời như UNIX thường không có bộ định thời công việc nhưng
đơn giản đặt mỗi quá trình mới vào bộ nhớ cho bộ định thời CPU. Khả năng ổn định
của hệ thống này phụ thuộc vào giới hạn vật lý (như số lượng thiết bị cuối sẳn dùng)
hay tính tự nhiên tự chuyển đổi của người dùng. Nếu năng lực thực hiện giảm tới mức
độ không thể chấp nhận được thì một số người dùng sẽ thoát khỏi hệ thống.
Một số hệ thống như hệ chia thời có thể đưa vào một cấp độ định thời bổ sung
hay định thời trung gian. Bộ định thời trung gian (medium-term process) này (được
hiển thị trong lưu đồ hình III-6) xóa các quá trình ra khỏi bộ nhớ (từ sự canh tranh
CPU) và do đó giảm mức độ đa chương. Tại thời điểm sau đó, quá trình có thể được
đưa trở lại bộ nhớ và việc thực thi của nó có thể được tiếp tục nơi nó bị đưa ra. Cơ chế
này được gọi là hoán vị (swapping). Quá trình được hoán vị ra và sau đó được hoán
vị vào bởi bộ định thời trung gian. Hoán vị là cần thiết để cải tiến sự trộn lẫn quá trình
(giữa các quá trình hướng nhập/xuất và hướng CPU), hay vì một thay đổi trong yêu
cầu bộ nhớ vượt quá kích thước bộ nhớ sẵn dùng.
của nó. Hệ điều hành phải chọn, cho mục đích định thời, các quá trình từ các hàng đợi
này. Quá trình chọn lựa này được thực hiện bởi bộ định thời hợp lý.
Trong hệ thống bó, thường nhiều hơn một quá trình được gởi đến hơn là có thể
được thực thi tức thì. Các quá trình này được lưu tới thiết bị lưu trữ (như đĩa), nơi
chúng được giữ cho việc thực thi sau đó. Bộ định thời dài (long-term scheduler) hay
bộ định thời công việc (job scheduler), chọn các quá trình từ vùng đệm và nạp chúng
vào bộ nhớ để thực thi. Bộ định thời ngắn (short-term scheduler) hay bộ định thời
CPU chọn một quá trình từ các quá trình sẳn sàng thực thi và cấp phát CPU cho quá
trình đó.
Sự khác biệt chủ yếu giữa hai bộ định thời là tính thường xuyên của việc thực
thi. Bộ định thời CPU phải chọn một quá trình mới cho CPU thường xuyên. Một quá
trình có thể thực thi chỉ một vài mili giây trước khi chờ yêu cầu nhập/xuất. Bộ định
thời CPU thường thực thi ít nhất một lần mỗi 100 mili giây. Vì thời gian ngắn giữa
việc thực thi nên bộ định thời phải nhanh. Nếu nó mất 10 mili giây để quyết định thực
thi một quá trình 100 mili giây thì 10/(100+10) = 9 phần trăm của CPU đang được
dùng (hay bị lãng phí) đơn giản cho định thời công việc.
Ngược lại, bộ định thời công việc thực thi ít thường xuyên hơn. Có vài phút
giữa việc tạo các quá trình mới trong hệ thống. Bộ định thời công việc điều khiển mức
độ đa chương – số quá trình trong bộ nhớ. Nếu mức độ đa chương ổn định thì tốc độ
trung bình của việc tạo quá trình phải bằng tốc độ khởi hành trung bình của quá trình
rời hệ thống. Vì khoảng thời gian dài hơn giữa việc thực thi nên bộ định thời công
việc có thể cấp nhiều thời gian hơn để chọn một quá trình thực thi.
Bộ định thời công việc phải thực hiện một chọn lựa cẩn thận. Thông thường,
hầu hết các quá trình có thể được mô tả như là quá trình hướng nhập/xuất (I/Obound proces) hay quá trình hướng CPU (CPU-bound process). Một quá trình
hướng nhập/xuất mất nhiều thời gian hơn để thực hiện nhập/xuất hơn thời gian tính
toán. Ngược lại, một quá trình hướng CPU phát sinh các yêu cầu nhập/xuất không
thường xuyên, dùng thời gian để thực hiện việc tính toán hơn một quá trình hướng
nhập/xuất dùng. Bộ định thời công việc nên chọn sự kết hợp hài hoà giữa quá trình
hướng nhập/xuất và quá trình hướng CPU. Nếu tất cả quá trình là hướng nhập/xuất thì
hàng đợi sẳn sàng sẽ luôn rỗng và bộ định thời CPU sẽ có ít công việc để thực hiện.
Nếu tất cả quá trình là hướng CPU thì hàng đợi nhập/xuất sẽ luôn rỗng, các thiết bị sẽ
không được sử dụng và hệ thống sẽ mất cân bằng. Hệ thống với năng lực tốt nhất sẽ
có sự kết hợp các quá trình hướng CPU và hướng nhập/xuất.
Trên một vài hệ thống, bộ định thời công việc có thể không có hay rất ít. Thí
dụ, các hệ thống chia thời như UNIX thường không có bộ định thời công việc nhưng
đơn giản đặt mỗi quá trình mới vào bộ nhớ cho bộ định thời CPU. Khả năng ổn định
của hệ thống này phụ thuộc vào giới hạn vật lý (như số lượng thiết bị cuối sẳn dùng)
hay tính tự nhiên tự chuyển đổi của người dùng. Nếu năng lực thực hiện giảm tới mức
độ không thể chấp nhận được thì một số người dùng sẽ thoát khỏi hệ thống.
Một số hệ thống như hệ chia thời có thể đưa vào một cấp độ định thời bổ sung
hay định thời trung gian. Bộ định thời trung gian (medium-term process) này (được
hiển thị trong lưu đồ hình III-6) xóa các quá trình ra khỏi bộ nhớ (từ sự canh tranh
CPU) và do đó giảm mức độ đa chương. Tại thời điểm sau đó, quá trình có thể được
đưa trở lại bộ nhớ và việc thực thi của nó có thể được tiếp tục nơi nó bị đưa ra. Cơ chế
này được gọi là hoán vị (swapping). Quá trình được hoán vị ra và sau đó được hoán
vị vào bởi bộ định thời trung gian. Hoán vị là cần thiết để cải tiến sự trộn lẫn quá trình
(giữa các quá trình hướng nhập/xuất và hướng CPU), hay vì một thay đổi trong yêu
cầu bộ nhớ vượt quá kích thước bộ nhớ sẵn dùng.
NguyenTriVienI12A- Tổng số bài gửi : 7
Join date : 17/02/2012
Đến từ : Tuy Hòa - Phú Yên
bổ sung trạng thái thêm trạng thái của tiến trình
Tất cả các tiến trình mới tạo lập đều được chuyển sang trạng thái NEW
–trạng thái đầu tiên , sau đó đưa vào hàng đợi job queue, hệ điều hành
sẽ sử dụng điều phối chậm (long-term scheduler) và không tiếm quyền để
lựa chọn một tiến trình thích hợp nhất trong hàng đợi job queue để
chuyển nó sang trang thái Ready và đưa tiến trình này vào hàng đợi Ready
Queue.
- Những tiến trình đang ở trạng thái sẵn sang Ready được sếp
vào hàng đợi Ready Queue, ở trạng thái này hệ điều hành sẽ sử dụng trình
điều phối nhanh(Short- Term scheduler) và có tiếm quyền để lựa chọn
tiến trình thích hợp giao CPU cho nó và chuyển nó sang trạng thái
Runing. Tiến trình sau khi giao CPU thì rời khỏi hàng đợi Ready queue
(tiến trình đó vẫn có thể quay trở lại hàng đợi này nếu nó chưa thục thi
xong).
- Tiến trình được giao CPU nếu đã thực thi hoàn tất thì kết
thúc và chuyển sang trạng thái terminated sau đó trả lại CPU cho hệ
thống , việc chuyển trạng thái này được hệ điều hành sử dụng trình điều
phối chậm không tiềm quyền .
- Tiến trình được giao CPU nhưng chưa
thực thi xong công việc và bị tiếm quyền thì sẽ bị chuyển từ trạng thái
Runing sang trạng thái Ready và quay trở về cuối hàng đợi Ready queue để
đợi đến lượt giao CPU kế tiếp , tiến trình chuyển trạng thái xong trả
lại CPU cho hệ điều hành .
- Tiến trình được giao CPU nhưng chưa hoàn
tất công việc của mình vì phải chờ đợi sự xuất hiện của sự kiện hay IO
nào đó thì sẽ được hệ điều hành chuyển sang trạng thái waiting và chuyển
nó vào hàng đợi Waiting queue , việc chuyển sang trạng thái này được hệ
điều hành sử dụng trình điều phối chậm không tiếm quyền .
- Những
tiến trình ở trạng thái Waiting(nằm trong hàng đợi Waiting queue) sau
khi sự kiện hay IO mà nó chờ xuất hiện thì lập tức nó được hệ điều hành
chuyển nó sang trạng thái sẵn sàng Ready và đưa nó vào hàng đợi Ready
queue để sẵn sàng cho lần cấp CPU kế tiếp
–trạng thái đầu tiên , sau đó đưa vào hàng đợi job queue, hệ điều hành
sẽ sử dụng điều phối chậm (long-term scheduler) và không tiếm quyền để
lựa chọn một tiến trình thích hợp nhất trong hàng đợi job queue để
chuyển nó sang trang thái Ready và đưa tiến trình này vào hàng đợi Ready
Queue.
- Những tiến trình đang ở trạng thái sẵn sang Ready được sếp
vào hàng đợi Ready Queue, ở trạng thái này hệ điều hành sẽ sử dụng trình
điều phối nhanh(Short- Term scheduler) và có tiếm quyền để lựa chọn
tiến trình thích hợp giao CPU cho nó và chuyển nó sang trạng thái
Runing. Tiến trình sau khi giao CPU thì rời khỏi hàng đợi Ready queue
(tiến trình đó vẫn có thể quay trở lại hàng đợi này nếu nó chưa thục thi
xong).
- Tiến trình được giao CPU nếu đã thực thi hoàn tất thì kết
thúc và chuyển sang trạng thái terminated sau đó trả lại CPU cho hệ
thống , việc chuyển trạng thái này được hệ điều hành sử dụng trình điều
phối chậm không tiềm quyền .
- Tiến trình được giao CPU nhưng chưa
thực thi xong công việc và bị tiếm quyền thì sẽ bị chuyển từ trạng thái
Runing sang trạng thái Ready và quay trở về cuối hàng đợi Ready queue để
đợi đến lượt giao CPU kế tiếp , tiến trình chuyển trạng thái xong trả
lại CPU cho hệ điều hành .
- Tiến trình được giao CPU nhưng chưa hoàn
tất công việc của mình vì phải chờ đợi sự xuất hiện của sự kiện hay IO
nào đó thì sẽ được hệ điều hành chuyển sang trạng thái waiting và chuyển
nó vào hàng đợi Waiting queue , việc chuyển sang trạng thái này được hệ
điều hành sử dụng trình điều phối chậm không tiếm quyền .
- Những
tiến trình ở trạng thái Waiting(nằm trong hàng đợi Waiting queue) sau
khi sự kiện hay IO mà nó chờ xuất hiện thì lập tức nó được hệ điều hành
chuyển nó sang trạng thái sẵn sàng Ready và đưa nó vào hàng đợi Ready
queue để sẵn sàng cho lần cấp CPU kế tiếp
hoxuanvu_I12A- Tổng số bài gửi : 34
Join date : 18/02/2012
Hai phương thức liên lạc giữa các tiến trình
Liên lạc trực tiếp (Direct Communications)
Theo địa chỉ đối xứng (Symmetric Scheme):
Send (P, Message) - Gửi thông điệp cho P
Receive (Q, Message) - Nhận thông điệp từ Q
Đặc điểm:
Theo địa chỉ phi đối xứng (Asymmetric Scheme):
Send (P, Message) - Gửi thông điệp cho P
Receive (id, Message) - Nhận thông điệp từ tiến trình bất kỳ, Biến id chứa số hiệu tiến trình gửi
Liên lạc gián tiếp (Indirect Communications)
Qua các Hộp thư (Mailboxes) hoặc Cổng (Ports).
Hộp thư là một thực thể qua đó thông điệp được gửi đến và lấy ra.
Mỗi hộp thư có định danh riêng.
Hai tiến trình phải chung nhau một hộp thư nào đó.
Hai loại hộp thư:
Theo địa chỉ đối xứng (Symmetric Scheme):
Send (P, Message) - Gửi thông điệp cho P
Receive (Q, Message) - Nhận thông điệp từ Q
Đặc điểm:
- Liên kết được thiết lập tự động giữa mỗi cặp tiến trình.
- Liên kết chỉ giữa 2 tiến trình.
- Chỉ có 1 liên kết giữa mỗi cặp.
- Tính đối xứng của liên lạc (2 bên đều biết đích xác tên của nhau khi Gửi/Nhận).
Theo địa chỉ phi đối xứng (Asymmetric Scheme):
Send (P, Message) - Gửi thông điệp cho P
Receive (id, Message) - Nhận thông điệp từ tiến trình bất kỳ, Biến id chứa số hiệu tiến trình gửi
Liên lạc gián tiếp (Indirect Communications)
Qua các Hộp thư (Mailboxes) hoặc Cổng (Ports).
Hộp thư là một thực thể qua đó thông điệp được gửi đến và lấy ra.
Mỗi hộp thư có định danh riêng.
Hai tiến trình phải chung nhau một hộp thư nào đó.
Hai loại hộp thư:
- Hộp thư tiến trình (Process Mailbox): Nằm trong vùng địa chỉ của một tiến trình nào đó.
- Hộp thư hệ điều hành (OS Mailbox): Nằm trong vùng địa chỉ của HĐH
TranThiMyKhanh(I12A)- Tổng số bài gửi : 24
Join date : 02/03/2012
Age : 34
điều phối CPU
a) Khái niệm về điều phối CPU
Trong hệ thống phân chia thời gian thực ,có nhiều process được thự hiện đồng thời. Dẫn đến phải có sự chuyển đổi CPU qua lại giữa các process để đảm bảo sự thực hiện đồng thời giữa các process.
điều phối CPU là xác định khi nào gán CPU cho 1 process và gán CPU cho process nào . đây là vấn đề quan trọng vì CPU là tài nguyên quan trọng của hệ thống .
B ) Mục tiêu :
- Công Bằng (fairness):các process được chia sẻ CPU 1 cách công bằng . Không có 1 process nào phải chờ vô hạn .
- Tính hiệu quả (efficiency) : càng làm cho CPU bận rộng càng tốt .
- Hiệu suất cao (throughput) : tăng số process thực hiện trong 1 đơn vị thời gian nhưng phải hợp lý tránh quá tải cho hệ thống .
- Thời gian thực hiện : thời gian thực hiện 1 process có thể chấp nhận được . Bao gồm thởi gian chờ đợi và thời gian thực sự được thực thi .
- ưu tiên các process quan trọng .
Trong hệ thống phân chia thời gian thực ,có nhiều process được thự hiện đồng thời. Dẫn đến phải có sự chuyển đổi CPU qua lại giữa các process để đảm bảo sự thực hiện đồng thời giữa các process.
điều phối CPU là xác định khi nào gán CPU cho 1 process và gán CPU cho process nào . đây là vấn đề quan trọng vì CPU là tài nguyên quan trọng của hệ thống .
B ) Mục tiêu :
- Công Bằng (fairness):các process được chia sẻ CPU 1 cách công bằng . Không có 1 process nào phải chờ vô hạn .
- Tính hiệu quả (efficiency) : càng làm cho CPU bận rộng càng tốt .
- Hiệu suất cao (throughput) : tăng số process thực hiện trong 1 đơn vị thời gian nhưng phải hợp lý tránh quá tải cho hệ thống .
- Thời gian thực hiện : thời gian thực hiện 1 process có thể chấp nhận được . Bao gồm thởi gian chờ đợi và thời gian thực sự được thực thi .
- ưu tiên các process quan trọng .
minhtam_I12C- Tổng số bài gửi : 14
Join date : 15/02/2012
Chức năng của khối kiểm soát tiến trình (Process Control Block – PCB)
Trình điều vận (dispatcher) sao lưu lại toàn bộ ngữ cảnh và môi trường làm việc (như trạng thái, nội dung các thanh ghi, giới hạn bộ nhớ của tiến trình, các thông tin thống kê…) của tiến trình đang xét
Ví dụ: Trong lớp học chỉ có một cái bảng duy nhất, mỗi học sinh là một tiến trình. Khi học sinh thứ nhất (P1) lên bảng giải bài tập của (P1), sau giải xong toàn bộ nội dung của (P1) được lưu vào vở PCB1. Khi học sinh thứ hai (P2) lên bảng giải bài tập tiếp theo, để có chỗ viết (P2) phải xóa nội dung của (P1) đi, rồi sau đó mới viết nội dung của (P2) lên bảng được. Nội dung của (P2) được lưu vào vở PCB2. Nếu P1 muốn bổ sung bài tập của P1 đã làm trước đó thì P1 chỉ cần xóa bảng và lấy toàn bộ nội dung đã được lưu trong vở PCB1 ra và bổ sung.
Ví dụ: Trong lớp học chỉ có một cái bảng duy nhất, mỗi học sinh là một tiến trình. Khi học sinh thứ nhất (P1) lên bảng giải bài tập của (P1), sau giải xong toàn bộ nội dung của (P1) được lưu vào vở PCB1. Khi học sinh thứ hai (P2) lên bảng giải bài tập tiếp theo, để có chỗ viết (P2) phải xóa nội dung của (P1) đi, rồi sau đó mới viết nội dung của (P2) lên bảng được. Nội dung của (P2) được lưu vào vở PCB2. Nếu P1 muốn bổ sung bài tập của P1 đã làm trước đó thì P1 chỉ cần xóa bảng và lấy toàn bộ nội dung đã được lưu trong vở PCB1 ra và bổ sung.
TranThiNgocQuynh(I12C)- Tổng số bài gửi : 14
Join date : 16/02/2012
khối điều khiển tiến trình(Process control Block) là gì? vai trò của nó?
Đại diện cho một process trong Hệ Điều hành(HĐH) là khối điều khiển tiến trình (PCB). PCB là một cấu trúc dữ liệu chứa những thông tin quan trọng về process và có thể khác nhau trong các hệ thống khác nhau, trong đó thường có:
trạng thái hiện tại của process
ID (identifier) duy nhất cho process
độ ưu tiên (priority) của process
thông tin về bộ nhớ
thông tin về các tài nguyên process đang sử dụng
vùng để cho các thanh ghi
PCB là đối tượng quan trọng, nhờ nó HĐH có thể có được toàn bộ thông tin cơ bản nhất về một process. Khi HĐH chuyển (switch) CPU từ đang phục vụ process này sang phục vụ process khác, nó dùng vùng cho các thanh ghi trong PCB lưu thông tin giá trị các thanh ghi của hệ thống để có thể tiếp tục thực hiện process mỗi khi process đến lượt được sử dụng CPU.
Tóm lại, PCB là đối tượng chính đại diện cho process đối với HĐH. Vì HĐH phải có khả năng thực hiện các thao tác với các PCB khác nhau một cách nhanh chóng, trong nhiều hệ thống có những thanh ghi đặc biệt luôn chỉ tới PCB của running process. Và cũng có những lệnh cài đặt ngay trong phần cứng để đảm bảo nhanh chóng ghi thông tin trạng thái vào PCB và tiếp theo là nhanh chóng đọc các thông tin đó.
VD: Một tiến trình đang chờ tín hiệu từ bàn phím người dùng, lúc đó nó không sử dụng CPU. Khi nó chờ, nó giống như "bị treo(suspended)". Khi người dùng gõ bàn phím, HĐH thay đổi trạng thái(status) của tiến trình đó. Khi trạng thái tiến trình thay đổi, ví dụ từ chờ đợi sang chủ động(Active) hoặc từ "treo"(suspended) sang running, thông tin trong PCB sẽ được dùng cho việc thực thi các nhiệm vụ chuyển đổi (Switch) của CPU.
trạng thái hiện tại của process
ID (identifier) duy nhất cho process
độ ưu tiên (priority) của process
thông tin về bộ nhớ
thông tin về các tài nguyên process đang sử dụng
vùng để cho các thanh ghi
PCB là đối tượng quan trọng, nhờ nó HĐH có thể có được toàn bộ thông tin cơ bản nhất về một process. Khi HĐH chuyển (switch) CPU từ đang phục vụ process này sang phục vụ process khác, nó dùng vùng cho các thanh ghi trong PCB lưu thông tin giá trị các thanh ghi của hệ thống để có thể tiếp tục thực hiện process mỗi khi process đến lượt được sử dụng CPU.
Tóm lại, PCB là đối tượng chính đại diện cho process đối với HĐH. Vì HĐH phải có khả năng thực hiện các thao tác với các PCB khác nhau một cách nhanh chóng, trong nhiều hệ thống có những thanh ghi đặc biệt luôn chỉ tới PCB của running process. Và cũng có những lệnh cài đặt ngay trong phần cứng để đảm bảo nhanh chóng ghi thông tin trạng thái vào PCB và tiếp theo là nhanh chóng đọc các thông tin đó.
VD: Một tiến trình đang chờ tín hiệu từ bàn phím người dùng, lúc đó nó không sử dụng CPU. Khi nó chờ, nó giống như "bị treo(suspended)". Khi người dùng gõ bàn phím, HĐH thay đổi trạng thái(status) của tiến trình đó. Khi trạng thái tiến trình thay đổi, ví dụ từ chờ đợi sang chủ động(Active) hoặc từ "treo"(suspended) sang running, thông tin trong PCB sẽ được dùng cho việc thực thi các nhiệm vụ chuyển đổi (Switch) của CPU.
NgoPhuQuoc_I12C- Tổng số bài gửi : 13
Join date : 16/02/2012
Trình Điều Phối (Scheduler)
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à từ New chuyển sang 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ụ: 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: 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 thực hiện giao dịch tại chỗ (I/O), không sử dụng đến ô tô. Vậy quá lãng phí ô tô (CPU)
- Mục đích là cân bằng tải cho toàn hệ thống
Điều phối nhanh (Short-term scheduler (or CPU scheduler)) :
- Chọn tiến trình nào sẽ được chiếm CPU để xử lý (tức là từ Ready chuyển sang Running)
- Tần xuất công việc cao
Điều phối vừa (Medium-term scheduler) :
- 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.
Ví dụ: 1 Lớp học vi tính, nhưng quá nhiều bạn đi học (tức là có nhiều tiến trình). Thầy sẽ chỉ định một số bạn ra khỏi lớp (tức là rút tiến trình ra khỏi bộ nhớ). Sau khi nhóm trong lớp học xong Thầy gọi các bạn bên ngoài vào phòng học (tức là đưa tiến trình vào bộ nhớ vào thời điểm thích hợp).
Đ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à từ New chuyển sang 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ụ: 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: 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 thực hiện giao dịch tại chỗ (I/O), không sử dụng đến ô tô. Vậy quá lãng phí ô tô (CPU)
- Mục đích là cân bằng tải cho toàn hệ thống
Điều phối nhanh (Short-term scheduler (or CPU scheduler)) :
- Chọn tiến trình nào sẽ được chiếm CPU để xử lý (tức là từ Ready chuyển sang Running)
- Tần xuất công việc cao
Điều phối vừa (Medium-term scheduler) :
- 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.
Ví dụ: 1 Lớp học vi tính, nhưng quá nhiều bạn đi học (tức là có nhiều tiến trình). Thầy sẽ chỉ định một số bạn ra khỏi lớp (tức là rút tiến trình ra khỏi bộ nhớ). Sau khi nhóm trong lớp học xong Thầy gọi các bạn bên ngoài vào phòng học (tức là đưa tiến trình vào bộ nhớ vào thời điểm thích hợp).
NguyenThiHongYen(I12A)- Tổng số bài gửi : 20
Join date : 20/02/2012
Tổ chức hoạt động CPU - Cách thức hoạt động
- Các process đang thường trú trong bộ nhớ chính ở trang thái sẵn sàng tiếp nhận CPU để hoạt động sẽ được đưa vào ready queue ( vd : các bạn học sinh sẵn sàng đợi kêu trả bài trước buổi học )
- Bộ điều phối sẽ chọn và cấp CPU cho 1 process trong ready queue.Process được cấp CPU sẽ thực hiện xử lý.( vd : thầy chọn bạn A lên trả bài và đưa ra câu hỏi cần trả lời )
- Trong thời gian này ,process co thể có yêu cầu tài nguyên mà hệ thống chưa đáp ứng được ( vd bạn A trả lời không đúng ý câu hỏi - cần sự giúp đỡ của bạn khác ) .Khi đó process được đưa vào waiting queue của tài nguyên tương ứng .Mặt khác ,process có thể bị buộc dừng xử lý (vd : bạn A không trả lời được câu hỏi - buộc dừng không trả bài tiếp). khi đó process được đưa trở lại ready queue.
- Quá trình xửa lý của 1 process trải qua nhiều lần chuyển đổi giữa ready queue và waiting queue cho đến khi hoàn thành nhiệm vụ thì được hệ thống giải phóng .(vd : sau khi hoàn tất việc trả bài bạn A có thể về chỗ )
- Bộ điều phối sẽ chọn và cấp CPU cho 1 process trong ready queue.Process được cấp CPU sẽ thực hiện xử lý.( vd : thầy chọn bạn A lên trả bài và đưa ra câu hỏi cần trả lời )
- Trong thời gian này ,process co thể có yêu cầu tài nguyên mà hệ thống chưa đáp ứng được ( vd bạn A trả lời không đúng ý câu hỏi - cần sự giúp đỡ của bạn khác ) .Khi đó process được đưa vào waiting queue của tài nguyên tương ứng .Mặt khác ,process có thể bị buộc dừng xử lý (vd : bạn A không trả lời được câu hỏi - buộc dừng không trả bài tiếp). khi đó process được đưa trở lại ready queue.
- Quá trình xửa lý của 1 process trải qua nhiều lần chuyển đổi giữa ready queue và waiting queue cho đến khi hoàn thành nhiệm vụ thì được hệ thống giải phóng .(vd : sau khi hoàn tất việc trả bài bạn A có thể về chỗ )
minhtam_I12C- Tổng số bài gửi : 14
Join date : 15/02/2012
Tạo lập tiến trình trong Windows
Các hàm API dùng tạo mới tiến trình và khởi động chương trình tương ứng:
CreateProcess, CreateProcessWithLogon
WinExec
ShellExecute, ShellExecuteEx
CreateProcess, CreateProcessWithLogon
WinExec
ShellExecute, ShellExecuteEx
quicly_I111c- Tổng số bài gửi : 20
Join date : 30/08/2011
Re: Thảo luận Bài 4
NgoPhuQuoc_I12C đã viết:Đại diện cho một process trong Hệ Điều hành(HĐH) là khối điều khiển tiến trình (PCB). PCB là một cấu trúc dữ liệu chứa những thông tin quan trọng về process và có thể khác nhau trong các hệ thống khác nhau, trong đó thường có:
trạng thái hiện tại của process
ID (identifier) duy nhất cho process
độ ưu tiên (priority) của process
thông tin về bộ nhớ
thông tin về các tài nguyên process đang sử dụng
vùng để cho các thanh ghi
PCB là đối tượng quan trọng, nhờ nó HĐH có thể có được toàn bộ thông tin cơ bản nhất về một process. Khi HĐH chuyển (switch) CPU từ đang phục vụ process này sang phục vụ process khác, nó dùng vùng cho các thanh ghi trong PCB lưu thông tin giá trị các thanh ghi của hệ thống để có thể tiếp tục thực hiện process mỗi khi process đến lượt được sử dụng CPU.
Tóm lại, PCB là đối tượng chính đại diện cho process đối với HĐH. Vì HĐH phải có khả năng thực hiện các thao tác với các PCB khác nhau một cách nhanh chóng, trong nhiều hệ thống có những thanh ghi đặc biệt luôn chỉ tới PCB của running process. Và cũng có những lệnh cài đặt ngay trong phần cứng để đảm bảo nhanh chóng ghi thông tin trạng thái vào PCB và tiếp theo là nhanh chóng đọc các thông tin đó.
VD: Một tiến trình đang chờ tín hiệu từ bàn phím người dùng, lúc đó nó không sử dụng CPU. Khi nó chờ, nó giống như "bị treo(suspended)". Khi người dùng gõ bàn phím, HĐH thay đổi trạng thái(status) của tiến trình đó. Khi trạng thái tiến trình thay đổi, ví dụ từ chờ đợi sang chủ động(Active) hoặc từ "treo"(suspended) sang running, thông tin trong PCB sẽ được dùng cho việc thực thi các nhiệm vụ chuyển đổi (Switch) của CPU.
VD: Một sinh viên lên bảng để trình bày bài viết của mình, trình bày xong một sinh viên khác lên xóa bảng và cũng trình bày bài viết của mình. Nếu sinh viên đầu tiên trở lên bảng lại thì phải xóa bài viết của sinh viên thứ 2 để trình bày lại bài viết của mình giống như lúc chưa xóa
tranvanthien27(I12C)- Tổng số bài gửi : 62
Join date : 15/02/2012
Age : 34
Đến từ : Tuy Hòa - Phú Yên
Các đặc điểm của process
1 ) Phân loại theo thời gian sử dụng CPU , có 2 loại
-I/O-bound process: ít sử dụng CPU chủ yếu thao tác nhập xuất .Hoạt động của các process loại này thường bao gồm nhiều lượt sử dụng CPU nhưng mỗi lượt sử dụng trong thời gian ngắn .
- CPU-bound process : sử dụng CPU chủ yếu .Hoạt động của các process loại này thường bao gồm ít lượt sử dụng CPU nhưng mỗi lượt sử dụng trong thời gian dai .
2 ) Phân loại theo thời gian sử dụng CPU mức độ độc quyền , có 2 loại :
- Non-preemptive process: khi các process nhận được CPU thì nó có quyền độc quyền chiếm CPU cho đến khi hoàn tất việc xử lý hoặc tự nguyện giải phóng CPU .Không thể lấy CPU khi process này đang chiếm giữ.
-Preemptive process:là loại process có thể lấy lại CPU khi nó đang chiếm giữ . Khi có được CPU ,process loại này có thể bị một process loại khác có mức độ ưu tiên cao hơn giành lấy CPU bất cứ lúc nào .
-I/O-bound process: ít sử dụng CPU chủ yếu thao tác nhập xuất .Hoạt động của các process loại này thường bao gồm nhiều lượt sử dụng CPU nhưng mỗi lượt sử dụng trong thời gian ngắn .
- CPU-bound process : sử dụng CPU chủ yếu .Hoạt động của các process loại này thường bao gồm ít lượt sử dụng CPU nhưng mỗi lượt sử dụng trong thời gian dai .
2 ) Phân loại theo thời gian sử dụng CPU mức độ độc quyền , có 2 loại :
- Non-preemptive process: khi các process nhận được CPU thì nó có quyền độc quyền chiếm CPU cho đến khi hoàn tất việc xử lý hoặc tự nguyện giải phóng CPU .Không thể lấy CPU khi process này đang chiếm giữ.
-Preemptive process:là loại process có thể lấy lại CPU khi nó đang chiếm giữ . Khi có được CPU ,process loại này có thể bị một process loại khác có mức độ ưu tiên cao hơn giành lấy CPU bất cứ lúc nào .
nguyenthanhnghi_I12C- Tổng số bài gửi : 14
Join date : 15/02/2012
câu hỏi sản xuất_tiêu thụ
câu 5:Phát biểu bài toán sản xuất_tiêu thụ để minh họa 1 hệ thống bao gồm nhiều tiến trình đồng hành, cộng tác cùng chia sẻ tài nguyên
Phát biểu:
Bài toán sản xuất tiêu thụ được phát biểu chung như sau:
Có một bộ đệm(Buffer) và 2 tiến trình sản xuất Producer và tiến trình tiêu thụ Consumer.Tiến trình Producer lần lượt sản xuất các sản phẩm S1, S2 vào khoang của bộ đệm Buffer.Tiến trình tieu thụ lần lượt lấy các sản phẩm ra khỏi bộ đệm.Công việc của Producer và Consumer cần được đồng bộ hóa tiến trình Consumer không thể lấy sản phẩm ra khi bộ đệm trống, và tiến trình Producer không thể sản xuất khi bộ đệm đầy.
Đồng bộ hóa bằng 2 đèn hiệu semFull và semEmpty.
Thuật giải cho Producer:
CODE:
// Tạo ra sản phẩm mới
wait(semEmpty);
wait(mutex);
//Đưa sản phẩm vào bộ đệm Buffer
Buffer[in]=sp mới;//Xếp sản phẩm vào bộ đệm.
in=(in+1)%BUFFER_SIZE;
signal(semFull);
signal(mutex);
Thuật giải cho Consumer:
CODE:
wait(semFull);
wait(mutex);
// Lấy sản phẩm từ bộ đệm Buffer
p=Buffer[out];
out=(out+1)%BUFFER_SIZE;
// Tiêu thụ sản phẩm vừa lấy được
signal(semEmpty);
signal(mutex);
Phát biểu:
Bài toán sản xuất tiêu thụ được phát biểu chung như sau:
Có một bộ đệm(Buffer) và 2 tiến trình sản xuất Producer và tiến trình tiêu thụ Consumer.Tiến trình Producer lần lượt sản xuất các sản phẩm S1, S2 vào khoang của bộ đệm Buffer.Tiến trình tieu thụ lần lượt lấy các sản phẩm ra khỏi bộ đệm.Công việc của Producer và Consumer cần được đồng bộ hóa tiến trình Consumer không thể lấy sản phẩm ra khi bộ đệm trống, và tiến trình Producer không thể sản xuất khi bộ đệm đầy.
Đồng bộ hóa bằng 2 đèn hiệu semFull và semEmpty.
Thuật giải cho Producer:
CODE:
// Tạo ra sản phẩm mới
wait(semEmpty);
wait(mutex);
//Đưa sản phẩm vào bộ đệm Buffer
Buffer[in]=sp mới;//Xếp sản phẩm vào bộ đệm.
in=(in+1)%BUFFER_SIZE;
signal(semFull);
signal(mutex);
Thuật giải cho Consumer:
CODE:
wait(semFull);
wait(mutex);
// Lấy sản phẩm từ bộ đệm Buffer
p=Buffer[out];
out=(out+1)%BUFFER_SIZE;
// Tiêu thụ sản phẩm vừa lấy được
signal(semEmpty);
signal(mutex);
PhamQuangHien_I12A- Tổng số bài gửi : 62
Join date : 22/02/2012
Age : 35
Đến từ : Quãng Ngãi
Mô hình luân chuyển CPU giữa hai tiến trình
Được sửa bởi quicly_I111c ngày 8/3/2012, 00:27; sửa lần 1.
quicly_I111c- Tổng số bài gửi : 20
Join date : 30/08/2011
Re: Thảo luận Bài 4
Lý do cộng tác giữa các tiến trình (Cooperation Reasons).
- Chia sẽ thông tin(Information Sharing): Một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình làm việc song song trên cùng một hoặc nhiều máy tính để giải quyết bài toán chung.
- Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng riêng vận hành trong các tiến trình hoặc luồng khác nhau.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có khả năng làm nhiều việc cùng một lúc: Soạn thảo, In ấn, Lấy file về,...
VD:Nhu cầu nối mạng internet .
- Chia sẽ thông tin(Information Sharing): Một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình làm việc song song trên cùng một hoặc nhiều máy tính để giải quyết bài toán chung.
- Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng riêng vận hành trong các tiến trình hoặc luồng khác nhau.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có khả năng làm nhiều việc cùng một lúc: Soạn thảo, In ấn, Lấy file về,...
VD:Nhu cầu nối mạng internet .
minhtam_I12C- Tổng số bài gửi : 14
Join date : 15/02/2012
SO Sánh Giữa Job Queue & 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.
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.
nguyenthanhnghi_I12C- Tổng số bài gửi : 14
Join date : 15/02/2012
Phương thức liên lạc giữa các tiến trình qua IPC (Interprocess communication)
Liên lạc trực tiếp (Direct Communications)
Theo địa chỉ đối xứng (Symmetric Scheme)
Send (P, Message) - Gửi thông điệp cho P
Receive (Q, Message) - Nhận thông điệp từ Q
Đặc điểm:
o Liên kết được thiết lập tự động giữa mỗi cặp tiến trình.
o Liên kết chỉ giữa 2 tiến trình.
o Chỉ có 1 liên kết giữa mỗi cặp.
o Tính đối xứng của liên lạc (2 bên đều biết đích xác tên của nhau khi Gửi/Nhận).
Theo địa chỉ phi đối xứng (Asymmetric Scheme)
Send (P, Message) - Gửi thông điệp cho P
Receive (id, Message) - Nhận thông điệp từ tiến trình bất kỳ, Biến id chứa số hiệu tiến trình gửi
Liên lạc gián tiếp (Indirect Communications)
Qua các Hộp thư (Mailboxes) hoặc Cổng (Ports).
Hộp thư là một thực thể qua đó thông điệp được gửi đến và lấy ra.
Mỗi hộp thư có định danh riêng.
Hai tiến trình phải chung nhau một hộp thư nào đó.
Hai loại hộp thư:
o Hộp thư tiến trình (Process Mailbox): Nằm trong vùng địa chỉ của một tiến trình nào đó.
o Hộp thư hệ điều hành (OS Mailbox): Nằm trong vùng địa chỉ của HĐH
Theo địa chỉ đối xứng (Symmetric Scheme)
Send (P, Message) - Gửi thông điệp cho P
Receive (Q, Message) - Nhận thông điệp từ Q
Đặc điểm:
o Liên kết được thiết lập tự động giữa mỗi cặp tiến trình.
o Liên kết chỉ giữa 2 tiến trình.
o Chỉ có 1 liên kết giữa mỗi cặp.
o Tính đối xứng của liên lạc (2 bên đều biết đích xác tên của nhau khi Gửi/Nhận).
Theo địa chỉ phi đối xứng (Asymmetric Scheme)
Send (P, Message) - Gửi thông điệp cho P
Receive (id, Message) - Nhận thông điệp từ tiến trình bất kỳ, Biến id chứa số hiệu tiến trình gửi
Liên lạc gián tiếp (Indirect Communications)
Qua các Hộp thư (Mailboxes) hoặc Cổng (Ports).
Hộp thư là một thực thể qua đó thông điệp được gửi đến và lấy ra.
Mỗi hộp thư có định danh riêng.
Hai tiến trình phải chung nhau một hộp thư nào đó.
Hai loại hộp thư:
o Hộp thư tiến trình (Process Mailbox): Nằm trong vùng địa chỉ của một tiến trình nào đó.
o Hộp thư hệ điều hành (OS Mailbox): Nằm trong vùng địa chỉ của HĐH
quicly_I111c- Tổng số bài gửi : 20
Join date : 30/08/2011
Sản xuất- Tiêu thụ (Producer - Consumer Problem)
- Sản xuất-Tiêu thụ (Producer-Consumer Problem) là một bài toán kinh điển dùng để minh họa sự cần thiết để đồng bộ hóa trong hệ thống có nhiều tiến trình đồng hành, cộng tác cùng chia sẻ tài nguyên.
- Trong vấn đề này, hai tiến trình Sản xuất và Tiêu thụ cùng chia sẻ một bộ nhớ đệm có kích thước cố định (fixed-size buffer).Bộ nhớ đệm gồm nhiều khoang (Items) để chứa sản phẩm.
- Tiến trình Producer sẽ sản xuất sản phẩm và đưa nó lần lượt vào các khoang trong buffer, còn tiến trình Consumer tiêu thụ sản phẩm lần lượt từ buffer này. Hai tiến trình này phải đồng bộ với nhau.
- Để đồng bộ hai tiến trình này thì tiến trình Producer phải bị ngăn không được đưa sản phẩm vào bộ nhớ đệm khi buffer đầy, tiến trình Consumer không được lấy sản phẩm ra khi buffer rỗng. Nếu buffer đầy thì tiến trình Producer phải chờ tiến trình Consumer tiêu thụ bớt sản phẩm trong buffer thì mới có thể tiếp tục đưa sản phẩm vào. Ngược lại, nếu buffer rỗng thì tiến trình Consumer phải chờ tiến trình Producer đưa sản phẩm vào buffer thì mới có thể tiếp tục lấy sản phẩm ra tiêu thụ. (Synchronization có chờ)
- Nếu buffer chưa bị đầy thì tiến trình Producer được phép tiếp tục đưa sản phẩm vào trong buffer và thông báo cho tiến trình Consumer biết rằng buffer không rỗng để tiến trình Consumer có thể tiếp tục lấy sản phẩm ra tiêu thụ. Ngược lại, nếu buffer chưa bị rỗng thì tiến trình Consumer được phép tiếp tục lấy sản phẩm ra ngoài tiêu thụ và thông báo cho tiến trình Producer biết rằng buffer chưa đầy để tiến trình Producer có thể tiếp tục đưa sản phẩm vào trong buffer.
Thuật giải:
Cấu trúc bộ nhớ đệm chung
#define BUFFER_SIZE 10
typedef struct {
. . . // Mô tả các thành phần của 1 khoang chứa
} item;
item buffer[BUFFER_SIZE]; // Bộ nhớ đệm
int in = 0; // Con trỏ tới vị trí trống kế tiếp
int out = 0; // Con trỏ tới vị trí lấy tiếp theo
Giải pháp duy trì (BUFFER_SIZE-1) sản phẩm cùng lúc trong bộ nhớ đệm
TIẾN TRÌNH SẢN XUẤT
item nextProduced;
while (1) {
/* Tạo một sản phẩm và gửi vào biến nextProduced */
while (((in + 1) % BUFFER_SIZE) == out)
; // Quẩn tại đây khi buffer đầy
buffer[in] = nextProduced;
in = (in + 1) % BUFFER_SIZE;
// Số dư phép chia nguyên
}
TIẾN TRÌNH TIÊU THỤ
item nextConsumed;
while (1) {
while (in == out); // Quẩn tại đây khi buffer rỗng
nextConsumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
// Tiêu thụ sản phẩm trong nextConsumed.
}
- Trong vấn đề này, hai tiến trình Sản xuất và Tiêu thụ cùng chia sẻ một bộ nhớ đệm có kích thước cố định (fixed-size buffer).Bộ nhớ đệm gồm nhiều khoang (Items) để chứa sản phẩm.
- Tiến trình Producer sẽ sản xuất sản phẩm và đưa nó lần lượt vào các khoang trong buffer, còn tiến trình Consumer tiêu thụ sản phẩm lần lượt từ buffer này. Hai tiến trình này phải đồng bộ với nhau.
- Để đồng bộ hai tiến trình này thì tiến trình Producer phải bị ngăn không được đưa sản phẩm vào bộ nhớ đệm khi buffer đầy, tiến trình Consumer không được lấy sản phẩm ra khi buffer rỗng. Nếu buffer đầy thì tiến trình Producer phải chờ tiến trình Consumer tiêu thụ bớt sản phẩm trong buffer thì mới có thể tiếp tục đưa sản phẩm vào. Ngược lại, nếu buffer rỗng thì tiến trình Consumer phải chờ tiến trình Producer đưa sản phẩm vào buffer thì mới có thể tiếp tục lấy sản phẩm ra tiêu thụ. (Synchronization có chờ)
- Nếu buffer chưa bị đầy thì tiến trình Producer được phép tiếp tục đưa sản phẩm vào trong buffer và thông báo cho tiến trình Consumer biết rằng buffer không rỗng để tiến trình Consumer có thể tiếp tục lấy sản phẩm ra tiêu thụ. Ngược lại, nếu buffer chưa bị rỗng thì tiến trình Consumer được phép tiếp tục lấy sản phẩm ra ngoài tiêu thụ và thông báo cho tiến trình Producer biết rằng buffer chưa đầy để tiến trình Producer có thể tiếp tục đưa sản phẩm vào trong buffer.
Thuật giải:
Cấu trúc bộ nhớ đệm chung
#define BUFFER_SIZE 10
typedef struct {
. . . // Mô tả các thành phần của 1 khoang chứa
} item;
item buffer[BUFFER_SIZE]; // Bộ nhớ đệm
int in = 0; // Con trỏ tới vị trí trống kế tiếp
int out = 0; // Con trỏ tới vị trí lấy tiếp theo
Giải pháp duy trì (BUFFER_SIZE-1) sản phẩm cùng lúc trong bộ nhớ đệm
TIẾN TRÌNH SẢN XUẤT
item nextProduced;
while (1) {
/* Tạo một sản phẩm và gửi vào biến nextProduced */
while (((in + 1) % BUFFER_SIZE) == out)
; // Quẩn tại đây khi buffer đầy
buffer[in] = nextProduced;
in = (in + 1) % BUFFER_SIZE;
// Số dư phép chia nguyên
}
TIẾN TRÌNH TIÊU THỤ
item nextConsumed;
while (1) {
while (in == out); // Quẩn tại đây khi buffer rỗng
nextConsumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
// Tiêu thụ sản phẩm trong nextConsumed.
}
nguyenhuutrang_11h1010135- Tổng số bài gửi : 19
Join date : 15/02/2012
Khối điều khiển quá trình (PCB)
Mỗi quá trình được hiện diện trong hệ điều hành bởi một khối điều khiển quá trình (Process Control Block-PCB) – cũng được gọi khối điều khiển tác vụ. Một PCB được hiển thị trong hình III-2. Nó chứa nhiều phần thông tin được gắn liền với một quá trình xác định, gồm:
Trạng thái quá trình (process state): trạng thái có thể là mới, sẳn sàng, đang chạy, chờ đợi, kết thúc, …
• Bộ đếm chương trình (program counter): bộ đếm hiển thị địa chỉ của chỉ thị kế tiếp được thực thi cho quá trình này.
• Các thanh ghi (registers) CPU: các thanh ghi khác nhau về số lượng và loại, phụ thuộc vào kiến trúc máy tính. Chúng gồm các bộ tổng (accumulators), các thanh ghi chỉ mục, các con trỏ ngăn xếp, và các thanh ghi đa năng (general-purpose registers), cùng với thông tin mã điều kiện (condition-code information). Cùng với bộ đếm chương trình, thông tin trạng thái này phải được lưu khi một ngắt xảy ra, cho phép quá trình được tiếp tục một cách phù hợp sau đó (Hình III.3).
• Thông tin lập thời biểu CPU (CPU-scheduling information): thông tin gồm độ ưu tiên của quá trình, các con trỏ chỉ tới các hàng đợi lập thời biểu, và bất kỳ tham số lập thời biểu khác.
• Thông tin quản lý bộ nhớ (Memory-management information): thông tin này có thể gồm những thông tin như giá trị của các thanh ghi nền và thanh ghi giới hạn, các bảng trang hay các bảng phân đoạn, phụ thuộc hệ thống bộ nhớ được dùng bởi hệ điều hành.
• Thông tin tính toán (accounting information): thông tin này gồm lượng CPU và thời gian thực được dùng, công việc hay số quá trình,…
• Thông tin trạng thái nhập/xuất (I/O status information): thông tin này gồm danh sách của thiết bị nhập/xuất được cấp phát quá trình này, một danh sách các tập tin đang mở,..
***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.
Trạng thái quá trình (process state): trạng thái có thể là mới, sẳn sàng, đang chạy, chờ đợi, kết thúc, …
• Bộ đếm chương trình (program counter): bộ đếm hiển thị địa chỉ của chỉ thị kế tiếp được thực thi cho quá trình này.
• Các thanh ghi (registers) CPU: các thanh ghi khác nhau về số lượng và loại, phụ thuộc vào kiến trúc máy tính. Chúng gồm các bộ tổng (accumulators), các thanh ghi chỉ mục, các con trỏ ngăn xếp, và các thanh ghi đa năng (general-purpose registers), cùng với thông tin mã điều kiện (condition-code information). Cùng với bộ đếm chương trình, thông tin trạng thái này phải được lưu khi một ngắt xảy ra, cho phép quá trình được tiếp tục một cách phù hợp sau đó (Hình III.3).
• Thông tin lập thời biểu CPU (CPU-scheduling information): thông tin gồm độ ưu tiên của quá trình, các con trỏ chỉ tới các hàng đợi lập thời biểu, và bất kỳ tham số lập thời biểu khác.
• Thông tin quản lý bộ nhớ (Memory-management information): thông tin này có thể gồm những thông tin như giá trị của các thanh ghi nền và thanh ghi giới hạn, các bảng trang hay các bảng phân đoạn, phụ thuộc hệ thống bộ nhớ được dùng bởi hệ điều hành.
• Thông tin tính toán (accounting information): thông tin này gồm lượng CPU và thời gian thực được dùng, công việc hay số quá trình,…
• Thông tin trạng thái nhập/xuất (I/O status information): thông tin này gồm danh sách của thiết bị nhập/xuất được cấp phát quá trình này, một danh sách các tập tin đang mở,..
***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.
NguyenHongHaiI12C- Tổng số bài gửi : 48
Join date : 18/02/2012
Phân tích khái niệm chuyển ngữ cảnh (Context Switch)
Chuyển CPU tới một quá trình khác yêu cầu lưu trạng thái của quá trình cũ và nạp trạng thái được lưu cho quá trình mới. Tác vụ này được xem như chuyển ngữ cảnh (context switch). Ngữ cảnh của quá trình được hiện diện trong PCB của quá trình; Nó chứa giá trị các thanh ghi, trạng thái quá trình và thông tin quản lý bộ nhớ. Khi chuyển ngữ cảnh ngữ cảnh xảy ra, nhân lưu ngữ cảnh của quá trình cũ trong PCB của nó và nạp ngữ cảnh được lưu của quá trình mới được định thời để chạy. Thời gian chuyển ngữ cảnh là chi phí thuần vì hệ thống không thực hiện công việc có ích trong khi chuyển. Tốc độ của nó khác từ máy này tới máy khác phụ thuộc vào tốc độ bộ nhớ, số lượng thanh ghi phải được chép và sự tồn tại của các chỉ thị đặc biệt (như chỉ thị để nạp và lưu tất cả thanh ghi). Điển hình dãy tốc độ từ 1 tới 1000 mili giây.
Những lần chuyển đổi ngữ cảnh phụ thuộc nhiều vào hỗ trợ phần cứng. Thí dụ, vài bộ xử lý (như Sun UltraSPARC) cung cấp nhiều tập thanh ghi. Một chuyển ngữ cảnh đơn giản chứa chuyển đổi con trỏ tới tập thanh ghi hiện hành. Dĩ nhiên, nếu quá trình hoạt động vượt quá tập thanh ghi thì hệ thống sắp xếp lại dữ liệu thanh ghi tới và từ bộ nhớ. Cũng vì thế mà hệ điều hành phức tạp hơn và nhiều công việc được làm hơn trong khi chuyển ngữ cảnh. Kỹ thuật quản lý bộ nhớ nâng cao có thể yêu cầu dữ liệu bổ sung để được chuyển với mỗi ngữ cảnh. Thí dụ, không gian địa chỉ của quá trình hiện hành phải được lưu khi không gian của tác vụ kế tiếp được chuẩn bị dùng. Không gian địa chỉ được lưu như thế nào và lượng công việc được yêu cầu để lưu nó phụ thuộc vào phương pháp quản lý bộ nhớ của hệ điều hành. Chuyển ngữ cảnh có thể dẫn đến thắt cổ chai năng lực thực hiện vì thế các lập trình viên đang sử dụng các cấu trúc mới để tránh nó bất cứ khi nào có thể
Những lần chuyển đổi ngữ cảnh phụ thuộc nhiều vào hỗ trợ phần cứng. Thí dụ, vài bộ xử lý (như Sun UltraSPARC) cung cấp nhiều tập thanh ghi. Một chuyển ngữ cảnh đơn giản chứa chuyển đổi con trỏ tới tập thanh ghi hiện hành. Dĩ nhiên, nếu quá trình hoạt động vượt quá tập thanh ghi thì hệ thống sắp xếp lại dữ liệu thanh ghi tới và từ bộ nhớ. Cũng vì thế mà hệ điều hành phức tạp hơn và nhiều công việc được làm hơn trong khi chuyển ngữ cảnh. Kỹ thuật quản lý bộ nhớ nâng cao có thể yêu cầu dữ liệu bổ sung để được chuyển với mỗi ngữ cảnh. Thí dụ, không gian địa chỉ của quá trình hiện hành phải được lưu khi không gian của tác vụ kế tiếp được chuẩn bị dùng. Không gian địa chỉ được lưu như thế nào và lượng công việc được yêu cầu để lưu nó phụ thuộc vào phương pháp quản lý bộ nhớ của hệ điều hành. Chuyển ngữ cảnh có thể dẫn đến thắt cổ chai năng lực thực hiện vì thế các lập trình viên đang sử dụng các cấu trúc mới để tránh nó bất cứ khi nào có thể
NguyenHongHaiI12C- Tổng số bài gửi : 48
Join date : 18/02/2012
Lý do cộng tác giữa các tiến trình (Cooperation Reasons).
- Chia sẻ thông tin(Information Sharing): Một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình làm việc song song trên cùng một hoặc nhiều máy tính để giải quyết bài toán chung.
- Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng riêng vận hành trong các tiến trình hoặc luồng khác nhau.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có khả năng làm nhiều việc cùng một lúc: Soạn thảo, In ấn, Lấy file về,...
VD:Nhu cầu nối mạng internet của chúng ta.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình làm việc song song trên cùng một hoặc nhiều máy tính để giải quyết bài toán chung.
- Đảm bảo tính đơn thể (Modularity): Chương trình được chia thành các đơn thể chức năng riêng vận hành trong các tiến trình hoặc luồng khác nhau.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có khả năng làm nhiều việc cùng một lúc: Soạn thảo, In ấn, Lấy file về,...
VD:Nhu cầu nối mạng internet của chúng ta.
TranMinhTuan143(I12A)- Tổng số bài gửi : 38
Join date : 22/02/2012
Tiến trình khác Chương trình như thế nào?
-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ĐH).Có sự phận biệt giữa 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.
- 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.
nguyenthimao_I12A- Tổng số bài gửi : 35
Join date : 16/02/2012
Trang 3 trong tổng số 15 trang • 1, 2, 3, 4 ... 9 ... 15
Similar topics
» THAO LUAN MON HOC
» BAI 6: THAO LUAN BAI 6
» Các bạn tích cực và có đóng góp với lớp
» Thảo luận Đề thi Cuối kỳ
» Thảo luận Bài 4
» BAI 6: THAO LUAN BAI 6
» Các bạn tích cực và có đóng góp với lớp
» Thảo luận Đề thi Cuối kỳ
» Thảo luận Bài 4
Trang 3 trong tổng số 15 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết