Thảo luận Bài 4
+105
TranQuyThanh (I11C)
HoangThanhChuong (I11C)
Truc_Phuong(I111C)
PhamDuyPhuong87(I11C)
TranVuThuyVan_(I11C)
nguyenhoangthinh (I11C)
NguyenTienPhong083 (I11C)
HuynhVanNhut (I11C)
nguyenthanhphuong(I11C)
NguyenVietThuan11
minhgiangbc
nguyenduc_gia.18(I11c)
chipphonui
quicly_I111c
nguyen huynh nhu (102C)
LeMInhTien(I11C)
nguyenquoctruong (I11C)
LeThiThuyDuong (I11C)
NguyenXuanTri28
HuynhPhuong (I11C)
tranleanhngoc88(i11c)
AnhDuong
HuynhThiThanhHien25(I11C)
thanhnam06511c
nguyenthingocloan (I11C)
nguyenvanlinheban (I11C)
vohongcong(I111C)
hoangquocduy.i11c
TranMinh (I11C)
NguyenThiThanhThuy(I11C)
lequocthinh (I11C)
TangHuynhThanhThanh I11C
NguyenCongVinh(102C)
NguyenDoTu (I11C)
HoangNgocQuynh(I11C)
NGUYENDINHNGHIA-I11C
PhamHuyHoang (I11C)
BuiHoangTuan.131.I11C
lengocthuthao89 (i11c)
NguyenNgocMyTien(I11C)
dongocthien (I11C)
ngocquynh2091(i11C)
chauchanduong (I11C)
NgoThiCamNhung47 (I11C)
TranCamThu(I11C)
nguyenthithutrang (I11C)
DuongTrungTinh(I11C)
TranTrungKien (I11C)
08H1010052
caotanthanh(i11c)
dangminhthinh2107
NguyenThiMinhHuong(I11C)
LeMinhDuc (I11C)
NguyenTrongHuy(I11C)
TranVanDucHieu I11c
nguyenminhlai.(I11C)
PhamAnhKhoa(I11C)
VOTHANHTRUNG(I11C)
HoangThiVe (I11C)
tranvanhai_21(I11c)
NguyenMinhNhut.(I11c)
Nguyenminhduc (I11C)
PhanThiThanhNguyen_72I11C
DuongKimLong(I111C)
buithithudung24 (i11c)
DoThiNgocNuong (I11C)
luuphuvinh1985
LaVanKhuong (I11C)
NguyThiGai (I11C)
nguyenvulinh_i11c
BuiHuuThanhLuan(I11C)
TranThanhHoang(I91C)
namzhou(I11C)
TruongThiThuyPhi(I11C)
VanTanVu(I11c)
lakhaiphat-i11c
phamdieptuan (I11C)
LeTanDat (I11C)
DoThuyTien16 (I11C)
nguyenthithuylinh (I11C)
Tranvancanh(I11C)
nguyenthaihiep (I11C)
Duongthithanhhuynh (I11C)
TranTrungTinh(I11C)
XuanThai_I11C
DaoQuangSieu (I11C)
hongthuanphong (I11C)
NguyenDongGiang
HoiHoangHongVu I11C
tranphanhieu36_i11c
NguyenHuuHung(I11C)
lamhuubinh(I91C)
TranHaDucHuy (I11c)
BuiVanHoc(I11C)
NgoDucTuan (I11C)
DaoVanHoang (I11C)
TranThiMyTien18(i11c)
VoMinhHoang (I11C)
ToThiThuyTrang (I11C)
NguyenThanhTam (I11C)
tranvantoan83(I11c)
NgoLeYen48(I11C)
tannamthanh(I11C)
TruongHanhPhuc (I11C)
Admin
109 posters
Trang 13 trong tổng số 13 trang
Trang 13 trong tổng số 13 trang • 1, 2, 3 ... 11, 12, 13
Re: Thảo luận Bài 4
Cãm ơn bạn! Bài này rất hay!tranphanhieu36_i11c đã viết:Mình xin bổ sung thêm một số các mô hình trạng thái của process mà mình tham khảo thêm được ở một số tài liệu khác cho rõ hơn, bạn nào có thông tin nào cần bổ sung thêm thì đóng góp nha :
Có 2 mô hình các trạng thái cơ bản của Process ngoài mô hình 5 trạng thái thầy trình bày trên lớp còn có mô hình đơn giản hơn nữa là mô hình 3 trạng thái :
+ Mô hình 3 trạng thái
Các trạng thái Của mô hình 3 trạng thái
Running - Thực thi
Tiến trình đang thực thi, đang sử dụng CPU
Chỉ có 1 Running Process tại 1 thời điểm trên hệ thống đa chương
Ready- Sẵn sàng
Là tiến trình đã sẵn sàng để thực thi, đang tạm dừng để chờ CPU
Có nhiều Ready Process ( Ở trên hàng đợi )
Các Ready Process được quản lý bằng Ready Queue ( Thầy đã giảng trên lớp )
Blocked - Bị chặn
Đang chờ biến cố xảy ra (I/O...), không thể thực thi cho đến khi biến cố xảy
Có thể có nhiều Block Process
Các Blocked Process được quản lý bằng Blocked Queue
Sự chuyển trạng thái
-Running -> Blocked (1) Process nào đang thực thi mà cần thực hiện biến cố rồi mới thực thi tiếp thì sẽ chuyển từ trạng thái Running sang Blocked. Và sẽ ở Queue cho đến khi biến cố xảy ra
-Running -> Ready (2) Process đang thực hiện chưa xong nhưng hết thời gian thì sẽ được Hệ Điều Hành chuyển sang Ready Queue
-Ready -> Running (3) Process tới lượt thực thi thì sẽ từ hàng đợi Ready Queue sang CPU và được thực thi
-Blocked -> Ready (4) Process đang ở trong Blocked Queue chờ biến cố xảy ra và khi biến cố đã xảy ra thì process này được trở lại hàng đợi Ready Queue
Việc chuyển trạng thái này do bộ điều phối của Hệ Điều Hành thực hiện (scheduler)
Các thời điểm chuyển trạng thái
+Ngắt quãng thời gian - Clock Interrup : Dùng để kiểm soát thời gian của process đang thực thi trong CPU. Khi process đang thực hiện chưa xong nhưng hết thời gian rồi thì sẽ bị ngắt
+Ngắt quãng thiết bị - I/O Interrup : Khi process đang thực thi mà cần công việc của các thiết bị I/O và phải chờ thiết bị I/O thực hiện thì process sẽ bị ngắt
+Lệnh gọi hệ thống, lỗi : System call, trap :
-Khi hệ điều hành yêu cầu ngắt bằng System call, hay khi có lỗi xảy ra
-Lỗi truy xuất bộ nhớ ( Memory Fault)
-Bẫy (trap)
+ Mô hình 5 trạng thái
-New: Khối thông tin quản lý process đã được tạo. Process vẫn chưa được nạp vào bộ nhớ chính.
-Exit: Process đã kết thúc, khối thông tin quản lý process vẫn được lưu trữ -> cho phép rút trích.
-Chuyển trạng thái:
+NULL -> New
+New -> Ready : Khi số process nạp chưa vượt quá giới hạn của hàng đợi (Ready Queue đó)
+Running -> Exit : Process kết thúc xảy ra tương ứng với các tình huống chủ động
Các trạng thái trì hoãn ( suspend )
-Tiến trình không được thực thi được chuyển tạm ra bộ nhớ ngoài => đình hoãn
-Dành bộ nhớ để nạp các tiến trình thực thi khác.
NguyenCongVinh(102C)- Tổng số bài gửi : 26
Join date : 23/02/2011
Re: Thảo luận Bài 4
LIÊN LẠC GIỮA CÁC TIẾN TRÌNH VÀ VẤN ĐỀ ĐỒNG BỘ HÓA
Liên lạc giữa các tiến trình:
-Một tiến trình thực thi độc lập thì không ảnh hưởng và không bị ảnh hưởng bởi các tiến trình khác trong hệ thống. Tuy nhiên, một số tiến trình có thể cộng tác, trao đổi dữ liệu với nhau để hoàn thành công việc
-Ưu điểm của sự cộng tác:
+Chia xẻ thông tin.
+Hiệu suất tính toán cao.
-Sự cộng tác của các tiến trình yêu cầu hệ điều hành hỗ trợ cơ chế giao tiếp (communication) và cơ chế đồng bộ hoạt động của các tiến trình (synchronization).
Các cơ chế thông tin liên lạc:
1/ Tín hiệu.
2/ Pipe.
3/ Vùng nhớ chia xẻ.
4/ Interprocess Communication (IPC).
5/ Sockets.
Liên lạc giữa các tiến trình:
-Một tiến trình thực thi độc lập thì không ảnh hưởng và không bị ảnh hưởng bởi các tiến trình khác trong hệ thống. Tuy nhiên, một số tiến trình có thể cộng tác, trao đổi dữ liệu với nhau để hoàn thành công việc
-Ưu điểm của sự cộng tác:
+Chia xẻ thông tin.
+Hiệu suất tính toán cao.
-Sự cộng tác của các tiến trình yêu cầu hệ điều hành hỗ trợ cơ chế giao tiếp (communication) và cơ chế đồng bộ hoạt động của các tiến trình (synchronization).
Các cơ chế thông tin liên lạc:
1/ Tín hiệu.
2/ Pipe.
3/ Vùng nhớ chia xẻ.
4/ Interprocess Communication (IPC).
5/ Sockets.
nguyenhoangthinh (I11C)- Tổng số bài gửi : 34
Join date : 25/08/2011
trinh dieu phoi nhanh va cham
Điều phối chậm(long –term queue) chọn 1 tiến trình từ job queue đưa sang qua Ready queue(chuyển từ New sang Ready). Scheduler lựa chọn kỹ các tiến trình nhằm phối hợp cân bằng giữa hai loại tiến trình
+ hướng CPU(CPU-BOUND) tính toán nhiều , ít I/O.
+ hướng I/O(I/O BOUND) tính toán ít , nhiều I/O.
Mục đích nhằm cân bằng tải giữa hai tiến trình..
VD: Trong cuộc thi Vietnam Idol, các thi sinh ngồi đợi bên ngoài đang trong Job Queue ( đều phối chậm),
sau đó giám khảo sẽ gọi 3 bạn vào Ready Queue rồi sẽ gọi liên tục 1 trong 3 bạn lên trình bày (điều phối nhanh)
_ Điều phối nhanh (Short-term scheduler): Chọn tiến trình sẽ chiếm CPU để xử lý (chuyển từ trạng thái Ready sang trạng thái Runing).
VD: Các thí sinh đã được gọi lên trình diễn thì đã biết mình phải làm gì.
+ hướng CPU(CPU-BOUND) tính toán nhiều , ít I/O.
+ hướng I/O(I/O BOUND) tính toán ít , nhiều I/O.
Mục đích nhằm cân bằng tải giữa hai tiến trình..
VD: Trong cuộc thi Vietnam Idol, các thi sinh ngồi đợi bên ngoài đang trong Job Queue ( đều phối chậm),
sau đó giám khảo sẽ gọi 3 bạn vào Ready Queue rồi sẽ gọi liên tục 1 trong 3 bạn lên trình bày (điều phối nhanh)
_ Điều phối nhanh (Short-term scheduler): Chọn tiến trình sẽ chiếm CPU để xử lý (chuyển từ trạng thái Ready sang trạng thái Runing).
VD: Các thí sinh đã được gọi lên trình diễn thì đã biết mình phải làm gì.
TranVuThuyVan_(I11C)- Tổng số bài gửi : 11
Join date : 26/08/2011
Re: Thảo luận Bài 4
Liên lạc giữa các tiến trình và vấn đề đồng bộ hóa (tt)
1/Tín hiệu:
-Tín hiệu là một cơ chế phần mềm tương tự như ngắt cứng tác động đến các tiến trình.
-Một tín hiệu được sử dụng để thông báo cho tiến trình về một sự kiện nào đó xảy ra.
-Có nhiều tín hiệu được định nghĩa, mỗi một tín hiệu có một ý nghĩa tương ứng với một sự kiện đặc trưng.
Ví dụ: một số tín hiệu của UNIX.
-Các tín hiệu được gởi đi bởi
+Phần cứng (ví dụ lỗi do các phép tính số học)
+Hạt nhân hệ điều hành gởi đến một tiến trình (ví dụ lưu ý tiến trình khi có một thiết bị I/O tự do)
+Một tiến trình gởi đến một tiến trình khác (ví dụ tiến trình cha yêu cầu tiến trình con kết thúc)
+Người dùng (ví dụ nhấn phím Ctrl-C để ngắt xử lý tiến trình)
2/Pipe:
-Một pipe là một kênh liên lạc trực tiếp giữa hai tiến trình: dữ liệu xuất của tiến trình này được chuyển đến làm dữ liệu nhập cho tiến trình kia dưới dạng một dòng các byte
-Khi một pipe được thiết lập giữa hai tiến trình:
+Một tiến trình ghi dữ liệu vào pipe và tiến trình kia sẽ đọc dữ liệu từ pipe.
+Thứ tự dữ liệu truyền qua pipe được bảo toàn theo nguyên tắc FIFO.
+Một pipe có kích thước giới hạn (thường là 4096 ký tự).
+Hệ điều hành sẽ cung cấp các lời gọi hệ thống read/write cho các tiến trình thực hiện thao tác đọc/ghi dữ liệu trong pipe.
3/Vùng nhớ chia xẻ:
-Cách tiếp cận của cơ chế này là cho nhiều tiến trình cùng truy xuất đến một vùng nhớ chung gọi là vùng nhớ chia xẻ (shared memory).
-Không có bất cứ hành vi truyền dữ liệu nào xảy ra ở đây.
-Dữ liệu chỉ đơn giản được đặt vào vùng nhớ mà nhiều tiến trình có thể truy cập được.
4/Interprocess Communication (IPC):
-IPC là cơ chế cung cấp bởi hệ điều hành nhằm giúp các tiến trình giao tiếp và đồng bộ hoạt động mà không cần dùng cơ chế chia xẻ vùng nhớ
-Cơ chế thực hiện IPC là Message-Passing
-Hệ điều điều hành cung cấp các hàm chuẩn
+Send(message)
+Receive(message)
-Các bước thực hiện giao tiếp giữa hai tiến trình
+Thiết lập một kênh giao tiếp
+Trao đổi message qua các tác vụ send/receive
a/Thông tin trực tiếp
-Các tiến trình phải chỉ định tên một cách tường minh khi gởi:
+Send(P, message): gởi một message cho tiến trình P.
+Receive(Q, message): nhận một message từ tiến trình Q.
-Đây là phương thức giao tiếp đối xứng (symmetric communication)
-Thực hiện giao tiếp trực tiếp bất đối xứng (asymmetry):
+Send(Q, message): gởi một message cho tiến trình P.
+Receive(id,message): nhận message từ tiến trình bất kỳ.
b/Thông tin gián tiếp:
-Message được gởi/nhận thông qua mailbox:
+Mỗi mailbox có một định danh duy nhất.
+Các tiến trình chỉ có thể giao tiếp nếu cùng chia sẻ một mailbox A:
Send(A, message) và receive(A, message)
-Thuộc tính của đường liên kết thông tin:
+Các kênh giao tiếp được thiết lập khi các tiến trình chia sẻ một mailbox.
+Mỗi kênh giao tiếp có thể liên kết với nhiều tiến trình.
+Mỗi cặp tiến trình có thể chia sẻ nhiều kênh giao tiếp.
1/Tín hiệu:
-Tín hiệu là một cơ chế phần mềm tương tự như ngắt cứng tác động đến các tiến trình.
-Một tín hiệu được sử dụng để thông báo cho tiến trình về một sự kiện nào đó xảy ra.
-Có nhiều tín hiệu được định nghĩa, mỗi một tín hiệu có một ý nghĩa tương ứng với một sự kiện đặc trưng.
Ví dụ: một số tín hiệu của UNIX.
-Các tín hiệu được gởi đi bởi
+Phần cứng (ví dụ lỗi do các phép tính số học)
+Hạt nhân hệ điều hành gởi đến một tiến trình (ví dụ lưu ý tiến trình khi có một thiết bị I/O tự do)
+Một tiến trình gởi đến một tiến trình khác (ví dụ tiến trình cha yêu cầu tiến trình con kết thúc)
+Người dùng (ví dụ nhấn phím Ctrl-C để ngắt xử lý tiến trình)
2/Pipe:
-Một pipe là một kênh liên lạc trực tiếp giữa hai tiến trình: dữ liệu xuất của tiến trình này được chuyển đến làm dữ liệu nhập cho tiến trình kia dưới dạng một dòng các byte
-Khi một pipe được thiết lập giữa hai tiến trình:
+Một tiến trình ghi dữ liệu vào pipe và tiến trình kia sẽ đọc dữ liệu từ pipe.
+Thứ tự dữ liệu truyền qua pipe được bảo toàn theo nguyên tắc FIFO.
+Một pipe có kích thước giới hạn (thường là 4096 ký tự).
+Hệ điều hành sẽ cung cấp các lời gọi hệ thống read/write cho các tiến trình thực hiện thao tác đọc/ghi dữ liệu trong pipe.
3/Vùng nhớ chia xẻ:
-Cách tiếp cận của cơ chế này là cho nhiều tiến trình cùng truy xuất đến một vùng nhớ chung gọi là vùng nhớ chia xẻ (shared memory).
-Không có bất cứ hành vi truyền dữ liệu nào xảy ra ở đây.
-Dữ liệu chỉ đơn giản được đặt vào vùng nhớ mà nhiều tiến trình có thể truy cập được.
4/Interprocess Communication (IPC):
-IPC là cơ chế cung cấp bởi hệ điều hành nhằm giúp các tiến trình giao tiếp và đồng bộ hoạt động mà không cần dùng cơ chế chia xẻ vùng nhớ
-Cơ chế thực hiện IPC là Message-Passing
-Hệ điều điều hành cung cấp các hàm chuẩn
+Send(message)
+Receive(message)
-Các bước thực hiện giao tiếp giữa hai tiến trình
+Thiết lập một kênh giao tiếp
+Trao đổi message qua các tác vụ send/receive
a/Thông tin trực tiếp
-Các tiến trình phải chỉ định tên một cách tường minh khi gởi:
+Send(P, message): gởi một message cho tiến trình P.
+Receive(Q, message): nhận một message từ tiến trình Q.
-Đây là phương thức giao tiếp đối xứng (symmetric communication)
-Thực hiện giao tiếp trực tiếp bất đối xứng (asymmetry):
+Send(Q, message): gởi một message cho tiến trình P.
+Receive(id,message): nhận message từ tiến trình bất kỳ.
b/Thông tin gián tiếp:
-Message được gởi/nhận thông qua mailbox:
+Mỗi mailbox có một định danh duy nhất.
+Các tiến trình chỉ có thể giao tiếp nếu cùng chia sẻ một mailbox A:
Send(A, message) và receive(A, message)
-Thuộc tính của đường liên kết thông tin:
+Các kênh giao tiếp được thiết lập khi các tiến trình chia sẻ một mailbox.
+Mỗi kênh giao tiếp có thể liên kết với nhiều tiến trình.
+Mỗi cặp tiến trình có thể chia sẻ nhiều kênh giao tiếp.
nguyenhoangthinh (I11C)- Tổng số bài gửi : 34
Join date : 25/08/2011
Re: Thảo luận Bài 4
Liên lạc giữa các tiến trình và vấn đề đồng bộ hóa(tt)
Nhu cầu đồng bộ hóa:
-Các tiến trình thực thi đồng thời chia sẻ mã, chia sẻ dữ liệu (qua bộ nhớ chia sẻ, file).
-Nếu không có sử điều khiển khi truy cập dữ liệu chia sẻ thì có thể xảy ra trường hợp không nhật quán dữ liệu.
-Để duy trì sự nhất quán dữ liệu hệ thống cần có cơ chế bảo đảm sự thực thi có thứ tự của các tiến trình đồng thời.
-Miền găng (critical section)
+Giả sử có n tiến trình cùng truy xuất đồng thời dữ liệu chia sẻ
+Không phải tất cả các đoạn mã phải được quan tâm giải quyết các vấn đề tranh chấp mà chỉ những đoạn mã có chứa các thao tác trên dữ liệu chia sẻ. Đoạn mã này được gọi là vùng tranh chấp – critical section (CS).
-Ràng buộc của bài toán tranh chấp:
+Mutual Exclusion (sự loại trừ tương hỗ).
+Tại mỗi thời điểm, chỉ có một tiến trình được phép thực thi trong vùng tranh chấp (CS).
-Nếu không có tiến trình nào đang thực thi trong vùng tranh chấp và đang có một số tiến trình chờ đợi vào vùng tranh chấp thì:
+Chỉ những tiến trình không phải đang thực thi trong vùng không tranh chấp mới được là ứng cử viên cho việc chọn tiến trình nào được vào vùng tranh chấp kế tiếp.
+Quá trình chọn lựa này không được trì hoãn vô thời hạn.
-Chờ đợi có giới hạn (Bounded Waiting):
+Mỗi tiến trình chỉ phải chờ để được vào vùng tranh chấp trong một khoảng thời gian nào đó.
Nhu cầu đồng bộ hóa:
-Các tiến trình thực thi đồng thời chia sẻ mã, chia sẻ dữ liệu (qua bộ nhớ chia sẻ, file).
-Nếu không có sử điều khiển khi truy cập dữ liệu chia sẻ thì có thể xảy ra trường hợp không nhật quán dữ liệu.
-Để duy trì sự nhất quán dữ liệu hệ thống cần có cơ chế bảo đảm sự thực thi có thứ tự của các tiến trình đồng thời.
-Miền găng (critical section)
+Giả sử có n tiến trình cùng truy xuất đồng thời dữ liệu chia sẻ
+Không phải tất cả các đoạn mã phải được quan tâm giải quyết các vấn đề tranh chấp mà chỉ những đoạn mã có chứa các thao tác trên dữ liệu chia sẻ. Đoạn mã này được gọi là vùng tranh chấp – critical section (CS).
-Ràng buộc của bài toán tranh chấp:
+Mutual Exclusion (sự loại trừ tương hỗ).
+Tại mỗi thời điểm, chỉ có một tiến trình được phép thực thi trong vùng tranh chấp (CS).
-Nếu không có tiến trình nào đang thực thi trong vùng tranh chấp và đang có một số tiến trình chờ đợi vào vùng tranh chấp thì:
+Chỉ những tiến trình không phải đang thực thi trong vùng không tranh chấp mới được là ứng cử viên cho việc chọn tiến trình nào được vào vùng tranh chấp kế tiếp.
+Quá trình chọn lựa này không được trì hoãn vô thời hạn.
-Chờ đợi có giới hạn (Bounded Waiting):
+Mỗi tiến trình chỉ phải chờ để được vào vùng tranh chấp trong một khoảng thời gian nào đó.
nguyenhoangthinh (I11C)- Tổng số bài gửi : 34
Join date : 25/08/2011
Vai trò của khối kiểm soát tiến trình (Process control block) trong việc quản lý tiến trình của Hệ điều hành
Quản lý nội dung và các tiến trình
Nhận thấy các giá trị từ các tài sản và đơn giản các nhu cầu thông tin bằng cách cung cấp sự kiểm soát toàn bộ vòng đời của nội dung điện tử bao gồm có các tài liệu (documents), các trang web, các file PDF, các thông điệp về thư điện tử. Làm hợp lý các tiến trình kinh doanh thông qua các Dòng công việc (workflows), sử dụng các khuân mẫu định dạng điện tử, đơn giản, thích hợp cho những người dùng có kinh nghiệm thông qua các ứng dụng máy trạm quen thuộc.
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ý.
Cấu trúc dữ liệu khối quản lý tiến trình
Hệ điều hành quản lý các tiến trình trong hệ thống thông qua khối quản lý tiến trình (process control block -PCB). PCB là một vùng nhớ lưu trữ các thông tin mô tả cho tiến trình, với các thành phần chủ yếu bao gồm :
Định danh của tiến trình (1) : giúp phân biệt các tiến trình
Trạng thái tiến trình (2): xác định hoạt động hiện hành của tiến trình.
Ngữ cảnh của tiến trình (3): mô tả các tài nguyên tiến trình đang trong qu� trình, hoặc để phục vụ cho hoạt động hiện tại, hoặc để làm cơ sở phục hồi hoạt động cho tiến trình, bao gồm các thông tin về:
Trạng thái CPU: bao gồm nội dung các thanh ghi, quan trọng nhất là con trỏ lệnh IP lưu trữ địa chỉ c�u lệnh kế tiếp tiến trình sẽ xử lý. Các thông tin này cần được lưu trữ khi xảy ra một ngắt, nhằm có thể cho phép phục hồi hoạt động của tiến trình đ�ng như trước khi bị ngắt.
Bộ xử lý: dùng cho máy có cấu hình nhiều CPU, xác định số hiệu CPU mà tiến trình đang sử dụng.
Bộ nhớ chính: danh sách các khối nhớ được cấp cho tiến trình.
Tài nguyên sử dụng: danh sách các tài mguyên hệ thống mà tiến trình đang sử dụng.
Tài nguyên tạo lập: danh sách các tài nguyên được tiến trình tạo lập.
Thông tin giao tiếp (4): phản ánh các thông tin về quan hệ của tiến trình với các tiến trình khác trong hệ thống :
Tiến trình cha: tiến trình tạo lập tiến trình này .
Tiến trình con: các tiến trình do tiến trình này tạo lập .
Độ ưu tiên : giúp bộ điều phối c� th�ng tin để lựa chọn tiến trình được cấp CPU.
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ý.
H�nh 2.2 Sơ đồ chuyển trạng th�i giữa c�c tiến tr�nh
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.
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.
PhamDuyPhuong87(I11C)- Tổng số bài gửi : 23
Join date : 31/08/2011
LIÊN LẠC GIỮA CÁC TIẾN TRÌNH VÀ VẤN ĐỀ ĐỒNG BỘ HÓA
[quote="nguyenhoangthinh (I11C)"]LIÊN LẠC GIỮA CÁC TIẾN TRÌNH VÀ VẤN ĐỀ ĐỒNG BỘ HÓA
Trong phần này, ta sẽ đi sâu vào việc phân tích mô hình NSX-NTT phân tán làm cơ sở cho việc xây dựng giải pháp kỹ thuật giám sát hệ thống.
Bài toán NSX-NTT là mô hình quen thuộc trong phần nguyên lý hệ điều hành các máy tính. Theo đó thì khả năng tiêu thụ là nguyên nhân chính hạn chế số lượng hàng hóa sản xuất ra sao cho lượng hàng hóa sản xuất ra đó không được phép vượt quá số lượng tiêu thụ một giá trị lớn hơn N. Người sản xuất P và người tiêu thụ C là 2 người nằm trên 2 Server cách xa nhau (liên lạc qua hệ thống đường truyền).
Giả sử rằng NP là số lượng sản xuất ra và NC là số lượng tiêu thụ tại thời điểm khởi sự (start), C chỉ tiêu thụ được một sản phẩm, nếu sản xuất sản phẩm đó đã diễn ra.
Trong phần này, ta sẽ đi sâu vào việc phân tích mô hình NSX-NTT phân tán làm cơ sở cho việc xây dựng giải pháp kỹ thuật giám sát hệ thống.
Bài toán NSX-NTT là mô hình quen thuộc trong phần nguyên lý hệ điều hành các máy tính. Theo đó thì khả năng tiêu thụ là nguyên nhân chính hạn chế số lượng hàng hóa sản xuất ra sao cho lượng hàng hóa sản xuất ra đó không được phép vượt quá số lượng tiêu thụ một giá trị lớn hơn N. Người sản xuất P và người tiêu thụ C là 2 người nằm trên 2 Server cách xa nhau (liên lạc qua hệ thống đường truyền).
Giả sử rằng NP là số lượng sản xuất ra và NC là số lượng tiêu thụ tại thời điểm khởi sự (start), C chỉ tiêu thụ được một sản phẩm, nếu sản xuất sản phẩm đó đã diễn ra.
PhamDuyPhuong87(I11C)- Tổng số bài gửi : 23
Join date : 31/08/2011
Trình bày những lý do cộng tác giữa các tiến trình
Trình bày những lý do cộng tác giữa các tiến trình
- 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. Ví dụ: các bạn trong lớp chia nhóm học. Nhóm một nghiên cứu chương 1, nhóm hai nghiên cứu chương 2. Sau đó, hai nhóm trao đổi thông tin cho nhau. Kết quả hai nhóm mau chóng tìm hiểu hết hai chương.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình cùng làm việc song song trên 1 hoặc nhiều máy để 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 vận hành trong các tiến trình hoặc luồng khác nhau. Ví dụ: mỗi bạn học một bài, đảm bảo tính đơn thể.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có nhu cầu làm nhiều việc một lúc: Soạn thảo, In ấn, Duyệt Web, Lấy file về, Biên dịch chương trình, Kiểm tra chính tả,...
- 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. Ví dụ: các bạn trong lớp chia nhóm học. Nhóm một nghiên cứu chương 1, nhóm hai nghiên cứu chương 2. Sau đó, hai nhóm trao đổi thông tin cho nhau. Kết quả hai nhóm mau chóng tìm hiểu hết hai chương.
- Tăng tốc tính toán (Computation Speedup): Các tiến trình cùng làm việc song song trên 1 hoặc nhiều máy để 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 vận hành trong các tiến trình hoặc luồng khác nhau. Ví dụ: mỗi bạn học một bài, đảm bảo tính đơn thể.
- Đảm bảo tính tiện dụng (Convenience): Người dùng có nhu cầu làm nhiều việc một lúc: Soạn thảo, In ấn, Duyệt Web, Lấy file về, Biên dịch chương trình, Kiểm tra chính tả,...
lakhaiphat-i11c- Tổng số bài gửi : 12
Join date : 25/08/2011
Phát biểu bài toán sản xuất và tiêu thụ để minh họa 1 hệ thống có nhiều tiến trình cộng tác, song song đồng hành, cùng chia sẽ tài nguyên
Bìa toán sản xuất và tiêu thụ được phát biểu như sau:
Giả sử có 1 bộ nhớ đệm (Buffer) bao gồm nhiều khoang chứa (Item) được tiến trình Producer lần lượt đưa các sản phẩmS1, S2, S3, ....vào.
Tiến trình Consumer lần lượt lấy các sản phẩm ra theo đúng thứ tự.
Công việc của Producer và Consumer phải đồng bộ hóa với nhau. Producer không được đưa sản phẩm vào khi Buffer đầy và Consumer không được lấy sản phẩm ra khi Buffer rỗng.
Giả sử có 1 bộ nhớ đệm (Buffer) bao gồm nhiều khoang chứa (Item) được tiến trình Producer lần lượt đưa các sản phẩmS1, S2, S3, ....vào.
Tiến trình Consumer lần lượt lấy các sản phẩm ra theo đúng thứ tự.
Công việc của Producer và Consumer phải đồng bộ hóa với nhau. Producer không được đưa sản phẩm vào khi Buffer đầy và Consumer không được lấy sản phẩm ra khi Buffer rỗng.
Truc_Phuong(I111C)- Tổng số bài gửi : 44
Join date : 26/08/2011
Đến từ : Trà Vinh
Định nghĩa tiến trình&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.
HoangThanhChuong (I11C)- Tổng số bài gửi : 15
Join date : 25/08/2011
Tại sao phải cộng tác giữa các tiến trình?
Tiến trình hợp tác (Cooperating process)
Có thể tác động hoặc chịu tác động bởi sự thực hiện của tiến trình khác.
Vi du: tiến trình này chia sẻ dữ liệu với tiến trình khác
Các lợi điểm của tiến trình hợp tác
-- Chia sẻ thông tin - Information sharing
-- Tăng tốc độ tính toán - Computation speed-up
-- Mô-đun hóa - Modularity
-- Sự tiện lợi - Convenience (vd người sử dụng cùng thực hiện soạn thảo, in ấn, biên dịch song song)
Sự cộng tác giữa các quá trình yêu cầu hệ điều hành hỗ trợ cơ chế giao tiếp và cơ chế đồng bộ hoạt động của các quá trình
VD: cũng giống như chơi game qua 1 mạng lan có nhiều người: CS chẳng hạn
Có thể tác động hoặc chịu tác động bởi sự thực hiện của tiến trình khác.
Vi du: tiến trình này chia sẻ dữ liệu với tiến trình khác
Các lợi điểm của tiến trình hợp tác
-- Chia sẻ thông tin - Information sharing
-- Tăng tốc độ tính toán - Computation speed-up
-- Mô-đun hóa - Modularity
-- Sự tiện lợi - Convenience (vd người sử dụng cùng thực hiện soạn thảo, in ấn, biên dịch song song)
Sự cộng tác giữa các quá trình yêu cầu hệ điều hành hỗ trợ cơ chế giao tiếp và cơ chế đồng bộ hoạt động của các quá trình
VD: cũng giống như chơi game qua 1 mạng lan có nhiều người: CS chẳng hạn
HoangThanhChuong (I11C)- Tổng số bài gửi : 15
Join date : 25/08/2011
Truyền thông điệp trong Windows
Các hàm API dùng để Gửi/Nhận thông điệp
§ SendMessage: Gửi có chờ
§ PostMessage: Gửi không chờ
§ SendMessageTimeout: Gửi có chờ nhưng với thời hạn
§ WaitMessage: Chờ thông điệp đến
§ GetMessage: Nhận có chờ
§ PeekMessage: Nhận không chờ
§ SendMessage: Gửi có chờ
§ PostMessage: Gửi không chờ
§ SendMessageTimeout: Gửi có chờ nhưng với thời hạn
§ WaitMessage: Chờ thông điệp đến
§ GetMessage: Nhận có chờ
§ PeekMessage: Nhận không chờ
TranQuyThanh (I11C)- Tổng số bài gửi : 53
Join date : 30/08/2011
Re: Thảo luận Bài 4
bài viết dễ hiểu, thanks bạn.lakhaiphat-i11c đã viết: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).
ThanhThao04(I11C)- Tổng số bài gửi : 34
Join date : 31/08/2011
Đến từ : Phú Yên
Tìm hiểu tiến trình chạy ẩn trong Windows: svchost.exe
Trong phần đầu tiên của loạt bài viết về các tiến trình trong Windows chúng ta sẽ cùng tìm hiểu về tiến trình Svchost.exe, tiến trình thường thấy nhất trong Windows.
Svchost.exe là gì ?
Theo Microsoft, svchost.exe là một tiến trình dành cho các dịch vụ (service) của Windows được chạy từ các thư viện liên kết động (file có đuôi .dll). Do 1 file đuôi dll không thể thực thi trực tiếp trên Windows mà phải được nạp từ một file đuôi .exe nên tiến trình svchost.exe đã được ra đời. Một số loại virus thường giả dạng file này với tên gần giống(ví dụ như svch0st.exe) hoặc có cùng tên nhưng nằm trong thư mục khác với thư mục Windows\system32 chứa file hệ thống.
Vì sao lại cần nhiều hơn 1 tiến trình Svchost.exe ?
Trong quá trình hoạt động Windows yêu cầu rất nhiều dịch vụ khác nhau như dịch vụ về âm thanh, internet, in ấn v.v... nên nếu tất cả chúng đều được chạy từ 1 tiến trình svchost.exe duy nhất thì khi có lỗi xảy ra với tiến trình này, nó sẽ kéo theo tất cả các dịch vụ gặp lỗi theo và khiến Windows không hoạt động được. Vì lý do đó mà các dịch vụ được chia ra làm nhiều nhóm và mỗi nhóm sẽ được khởi động từ một tiến trình svchost.exe độc lập.
Kiểm tra các dịch vụ trong svchost.exe
Nếu mở Task Manager lên bạn có thể thấy có nhiều tiến trình svchost.exe được chạy đồng thời, tuy nhiên công cụ này lại không cho phép bạn xem trong từng svchost.exe bao gồm những dịch vụ gì.
Để xem được cụ thể các tiến trình bạn có thể dùng lệnh tasklist /SVC bên trong cửa sổ lệnh cmd (Start -> Run -> gõ cmd).
Tuy nhiên cách này hơi phức tạp đối với những ai không quen sử dụng các lệnh điều khiển nên bạn có thể sử dụng công cụ Process Explorer, nó rất hữu hiệu trong việc theo dõi hoạt động các tiến trình trong Windows. Chỉ cần di chuột vào một tiến trình svchost.exe là các dịch vụ trong đó sẽ được liệt kê đầy đủ.
Bạn còn có thể dừng một dịch vụ thuộc tiến trình svchost.exe bằng cách click đúp vào tiến trình đó để mở cửa sổ Properties, danh sách các dich vụ sẽ hiển thị trong thẻ Services và muốn ngưng dịch vụ nào bạn chỉ cần chọn và nhấn Stop. Ở phần cửa sổ phía dưới có chỉ dẫn đầy đủ về nhiệm vụ của từng dịch vụ nên bạn cần đọc kỹ trước khi tắt một dịch vụ nào đó.
Tắt các dịch vụ khi khởi động
Trong thực tế có nhiều dịch vụ bạn ít hoặc không sử dụng đến nhưng vẫn được Windows load khi khởi động làm chậm máy và tốn bộ nhớ. Nếu bạn đã biết chắc dịch vụ nào là không cần thiết thì có thể ngăn không cho dịch vụ đó khởi động khi vào Windows bằng cách vào Control Panel > Administrative Tools > Services (hoặc gõ services.msc trong Search Menu hoặc Run).
Tìm dịch vụ mà bạn muốn tắt, và click chuột phải rồi chọn Properties.
Thay đổi dòng Startup Type thành Disabled và sau đó click Stop để dừng dịch vụ.
Svchost.exe là gì ?
Theo Microsoft, svchost.exe là một tiến trình dành cho các dịch vụ (service) của Windows được chạy từ các thư viện liên kết động (file có đuôi .dll). Do 1 file đuôi dll không thể thực thi trực tiếp trên Windows mà phải được nạp từ một file đuôi .exe nên tiến trình svchost.exe đã được ra đời. Một số loại virus thường giả dạng file này với tên gần giống(ví dụ như svch0st.exe) hoặc có cùng tên nhưng nằm trong thư mục khác với thư mục Windows\system32 chứa file hệ thống.
Vì sao lại cần nhiều hơn 1 tiến trình Svchost.exe ?
Trong quá trình hoạt động Windows yêu cầu rất nhiều dịch vụ khác nhau như dịch vụ về âm thanh, internet, in ấn v.v... nên nếu tất cả chúng đều được chạy từ 1 tiến trình svchost.exe duy nhất thì khi có lỗi xảy ra với tiến trình này, nó sẽ kéo theo tất cả các dịch vụ gặp lỗi theo và khiến Windows không hoạt động được. Vì lý do đó mà các dịch vụ được chia ra làm nhiều nhóm và mỗi nhóm sẽ được khởi động từ một tiến trình svchost.exe độc lập.
Kiểm tra các dịch vụ trong svchost.exe
Nếu mở Task Manager lên bạn có thể thấy có nhiều tiến trình svchost.exe được chạy đồng thời, tuy nhiên công cụ này lại không cho phép bạn xem trong từng svchost.exe bao gồm những dịch vụ gì.
Để xem được cụ thể các tiến trình bạn có thể dùng lệnh tasklist /SVC bên trong cửa sổ lệnh cmd (Start -> Run -> gõ cmd).
Tuy nhiên cách này hơi phức tạp đối với những ai không quen sử dụng các lệnh điều khiển nên bạn có thể sử dụng công cụ Process Explorer, nó rất hữu hiệu trong việc theo dõi hoạt động các tiến trình trong Windows. Chỉ cần di chuột vào một tiến trình svchost.exe là các dịch vụ trong đó sẽ được liệt kê đầy đủ.
Bạn còn có thể dừng một dịch vụ thuộc tiến trình svchost.exe bằng cách click đúp vào tiến trình đó để mở cửa sổ Properties, danh sách các dich vụ sẽ hiển thị trong thẻ Services và muốn ngưng dịch vụ nào bạn chỉ cần chọn và nhấn Stop. Ở phần cửa sổ phía dưới có chỉ dẫn đầy đủ về nhiệm vụ của từng dịch vụ nên bạn cần đọc kỹ trước khi tắt một dịch vụ nào đó.
Tắt các dịch vụ khi khởi động
Trong thực tế có nhiều dịch vụ bạn ít hoặc không sử dụng đến nhưng vẫn được Windows load khi khởi động làm chậm máy và tốn bộ nhớ. Nếu bạn đã biết chắc dịch vụ nào là không cần thiết thì có thể ngăn không cho dịch vụ đó khởi động khi vào Windows bằng cách vào Control Panel > Administrative Tools > Services (hoặc gõ services.msc trong Search Menu hoặc Run).
Tìm dịch vụ mà bạn muốn tắt, và click chuột phải rồi chọn Properties.
Thay đổi dòng Startup Type thành Disabled và sau đó click Stop để dừng dịch vụ.
leanhhuy (I11C)- Tổng số bài gửi : 22
Join date : 30/08/2011
QUẢN LÝ TIẾN TRÌNH TRÊN LINUX
Tiến trình là một môi trường thực hiện, bao gồm một phân đoạn lệnh và một phân đoạn dữ liệu. Cần phân biệt với khái niệm chương trình chỉ gồm tập hợp lệnh.
Trên hệ điều hành Linux, tiến trình được nhận biết thông qua số hiệu của tiến trình, gọi là pid. Cũng như đối với user, nó có thể nằm trong nhóm. Vì thế để phân biệt ta nhận biết qua số hiệu nhóm gọi là pgrp. Một số hàm của C cho phép lấy được những thông số này:
int getpid() : trả về giá trị int là pid của tiến trình hiện tại
int getppid() : trả về giá trị int là pid của tiến trình cha của tiến trình hiện tại
int getpgrp() : trả về giá trị int là số hiệu của nhóm tiến trình
int setpgrp() : trả về giá trị int là số hiệu nhóm tiến trình mới tạo ra
Ví dụ:
Lệnh : printf("Toi la tien trinh %d thuoc nhom %d",getpid(),getgrp());
Kết quả sẽ là: Toi là tien trinh 235 thuoc nhom 231
Tạo một tiến trình - lệnh fork
int fork() tạo ra một tiến trình con. Giá trị trả lại là 0 cho tiến trình con và dấu hiệu pid cho tiến trình cha. Giá trị sẽ là -1 nếu không tạo được tiến trình mới. Theo nguyên tắc cơ bản của hệ thống, tiến trình con và cha sẽ có cùng đoạn mã. Đoạn dữ liệu của tiến trình mới là một bản sao chép chính xác đoạn dữ liệu của tiến trình cha. Tuy nhiên tiến trình con vẫn khác tiến trình cha ở pid, thời gian xử lý, ...
Dừng một tiến trình
Lệnh kill của Shell có thể dùng để chấm dứt hoạt động của một tiến trình. ví dụ
như khi muốn dừng tiến trình 234 ta dùng lệnh: kill 234
C cũng có lệnh kill như sau:
int kill(pid, sig);
int pid; là dấu hiệu nhận biết của một tiến trình.
int sig; hằng tín hiệu giao tiếp tiến trình.
Giao tiếp giữa các tiến trình
Việc giao tiếp giữa các tiến trình được thực hiện thông qua các tín hiệu chuẩn của hệ thống. Tín hiệu là một sự ngắt quãng logic được gửi đến các tiến trình bởi hệ thống để thông báo cho chúng về những sự việc không bình thường trong môi trường hoạt động của chúng (như lỗi bộ nhớ, lỗi vào ra). Nó cũng cho phép các tiến trình liên lạc với nhau. Một tín hiệu (trừ SIGKILL) có thể được xem xét theo ba cách khác nhau:
1. Tiến trình có thể được bỏ qua: Ví dụ chương trình có thể bỏ qua sự ngắt quãng của người sử dụng hệ thống (đó là sự bỏ qua khi một tiến trình đang được sử dụng ở phần nền.
2. Tiến trình có thể được thực hiện: Trong trường hợp này, khi nhận được 1 tín hiệu, việc thực hiện 1 tiến trình được chuyển về một quy trình do người sử dụng xác định trước, sau đó trở lại nơi nó bị ngắt.
3. Lỗi có thể được tiến trình trả về sau khi nhận được tín hiệu này.Dưới đây là một số tín hiệu thường gặp:
SIGHUP
Tín hiệu này được phát đến các tiến trình vào lúc cuối khi mà nó tự ngắt.
Nó cũng được phát đến mọi tiến trình có tiến trình chính tự ngắt.
SIGINT Tín hiệu này được phát đến các tiến trình khi ta ra lệnh ngắt.
SIGQUIT Tương tự như trên khi ta gõ vào ^D.
SIGILL
Lệnh không hợp lệ, tín hiệu được phát ra khi phát hiện 1 lệnh không đúng
ở cấp độ vật lý (ví dụ như 1 tiến trình thực hiện một lệnh mà máy tính
chông có lệnh này).
SIGTRAP
Tín hiệu được phát ra sau mỗi lệnh trong trường hợp tiến trình có sử dụng lệnh ptrace().
SIGIOT Bẫy được phát khi có các vấn đề về vật lý.
SIGEMT Bẫy của lệnh phát, được phát ra khi có lỗi vật lý trong khi thực hiện.
SIGFPE
Được phát ra khi có lỗi về tính toán như một số có dấu phẩy nối có định dạng không hợp lý. Gần như luôn chỉ ra lỗi khi lập trình.
SIGKILL Trang bị để kết thúc tiến trình. Không thể bỏ qua hoặc cắt tín hiệu này.
SIGBUS Được phát khi gặp lỗi trên bus.
SYSGEGV
Được phát ra khi gặp lỗi trên phân đoạn sự truy cập dữ liệu bên ngoài phân đoạn dữ liệu được cấp phát cho tiến trình.
SIGSYS Đối số không đúng cho hệ thống gọi.
SIGPIPE Viết trên một ống dẫn không mở để đọc.
SIGALRM
Phát ra khi đồng hồ của một tiến trình ngừng lại. Đồng hồ được hoạt động bằng lệnh alrm().
SIGTERM
Được phát ra khi một tiến trình kết thúc bình thường. Cũng có thể dùng để dừng 1 hệ thống để kết thúc tất cả các tiến trình hoạt động.
Liên lạc giữa hai tiến trình
Từ một chương trình đơn giản dưới đây sử dụng các lệnh phát và nhận tín hiệu, sau đó giúp liên lạc giữa hai tiến trình.
Nội dung của ví dụ là sự liên lạc giữa một tiến trình cha và một tiến trình con thông qua các tín hiệu đã được trình bày phần trước.
#include
#include
void fils_atc()
{
printf(" Tien trinh bi loai bo !!!\n");
kill(getpid(), SIGINT);
}
/***********************************/
void fils()
{
signal(SIGUSR1, fils_atc);
printf(" Hinh thanh tien trinh moi. Nhung chuan bi loai bo tien trinh nay !!\n");
while(1);
}
/******************************/
main()
{
int ppid, pid;
if ((pid = fork())==0) fils();
else
{
sleep(3);
printf(" Chap nhan !! Tien trinh se bi loai bo.\n");
kill(pid, SIGUSR1);
}
}
Trong ví dụ trên, tiến trình con có sử dụng hàm signal(SIGUSR1, fils_atc). Hàm này có tác dụng mỗi khi tiến trình con nhận được tín hiệu SIGUSR1 thì hàm fils_atc() sẽ được thực thi.
Như vậy ở ví dụ trên một tiến trình con đã được tạo ra nhưng nó lại không muốn tiếp tục tồn tại. Do vậy sau khi tạm dừng lại sleep(3), tiến trình cha đã gởi đến cho tiến trình con một tín hiệu là SIGUSR1 bằng lệnh:
kill(pid, SIGUSR1);
Ở tiến trình con, tín hiệu SIGUSR1 đã được gán với hàm fils_atc(). Hàm này ra một thông báo báo hiệu tiến trình này sắp chết rồi tự gởi đến chính mình (tiến trình con) tín hiệu SIGINT, tín hiệu ngắt tiến trình. Và tiến trình con đã chết.
kill(getpid(), SIGINT);
Một số nhược điểm khi liên lạc trực tiếp bằng tín hiệu:
- Một tín hiệu có thể bị bỏ qua, kết thúc một tiến trình hoặc bị chặn lại. Đó là lý do chính đưa ra các tín hiệu không thích ứng được để tiến hành liên lạc giữa các tiến trình. Một thông điệp điệp dưới hình thức tín hiệu có thể sẽ bị mất nếu nó được nhận lúc loại tín hiệu này tạm thời bị bỏ qua.
- Một vấn đề khác là các tín hiệu có quyền rất lớn, khi đến chúng làm ngắt quãng công việc hiện tại. Ví dụ việc nhận một tín hiệu trong khi tiến trình đang đợi một sự kiện (mà có thể đến khi sử dụng các lệnh open(), read(), ...) làm cho việc thực thi hàm bị chệch hướng. Khi trở lại, lệnh chính bị ngắt gởi lại một thông điệp báo lỗi mà hoàn toàn không xử lý được.
Ngoài việc liên lạc trực tiếp như ở ví dụ trên, còn cho phép một phương pháp liên lạc giữa các tiến trình khác, đó là liên lạc qua "đường ống".
Lập trình đa tiến trình
Ống dẫn liên lạc
Ống dẫn là một cơ chế cơ bản để liên lạc gián tiếp giữa các tiến trình. Đó là các file đặc biệt (FIFO), ở đó các thông tin được truyền đi 1 đầu và thoát ra ở một đầu khác. Một số đặc điểm của "ống dẫn":
- Các ống dẫn chỉ mang tính chất tạm thời, chỉ tồn tại trong thời gian thực hiện của một tiến trình tạo ra nó.
- Muốn tạo ra một ống dẫn phải bắt đầu bằng một lệnh đặc biệt: pipe().
- Nhiều tiến trình có thể viết và đọc trên cùng một ống dẫn. Tuy nhiên, không có một cơ chế nào để phân biệt thông tin cho các tiến trình ở đầu ra.
- Dung lượng ống dẫn bị hạn chế (khoảng 4KB). Do đó khi chúng ta cố gắng viết khi ống dẫn bị đầy thì sẽ gặp phải trường hợp tắc nghẽn.
- Các tiến trình liên lạc qua ống dẫn phải có mối quan hệ họ hàng và các ống dẫn nối phải được mở trước khi tạo ra các tiến trình con.
- Không thể tự thay đổi vị trí thông tin trong ống.
Thao tác với "ống dẫn liên lạc"
Tạo một ống dẫn:
int p_desc[2];
int pipe(p_desc);
Giá trị trả về là 0 nếu thành công, -1 nếu thất bại.
p_desc[0] : chứa các số hiệu mô tả nhờ đó có thể đọc trong ống dẫn.
p_desc[1] : chứa các số hiệu mô tả nhờ đó có thể viết trong ống dẫn.
Như vậy việc viết trong p_desc[1] là để truyền dữ liệu trong ống và việc đọc trong
p_desc[0] để nhận chúng.
Ví dụ:
#include
#include
main()
{
int i,ret, p_desc[2];
char c;
pipe(p_desc);
write(p_desc[1], "AB", 2);
for (i=1; i<=3,i ++) {
ret=read(p_desc[0], &c, 1);
if (ret == 1)
printf(" Gia tri: %c\n",c);
else
perror("Loi ong dan rong");
}
}
Ví dụ trên chỉ ra rằng ta có thể truyền và nhận thông tin trên ống dẫn. Chúng ta đã dùng hàm read() và write() để viết (truyền) và đọc (nhận) trên ống dẫn.
Liên lạc giữa tiến trình cha và tiến trình con
Trong ví dụ dưới đây, một tiến trình tạo ra một ống dẫn, tạo ra một tiến trình con, viết một văn bản vào ống dẫn.Tiến trình con thừa hưởng ống dẫn và các ký hiệu mô tả của ống dẫn, thực hiện đọc trong ống dẫn:
#include
#include
void code_fils(int number) {
int fd, nread;
char texte[100];
- 31-
fd=number;
printf(" So hieu mo ta la %d\n",fd);
switch (nread=read(fd, texte, sizeof(texte)))
{
case -1:
perror("Loi doc.");
case 0:
perror("EOF");
default:
printf("Van ban nhan duoc co %d ky tu: %s\n",fd, texte);
}
}
main() {
int fd[2];
char chaine[10];
if (pipe(fd)==-1)
{ perror("Loi khoi tao pipe.");
exit(1);
}
switch (fork()) {
case -1:
perror(" Loi khoi tao tien trinh.");
break;
case 0:
if (close(fd[1])==-1)
perror(" Error.");
code_fils(fd[0]);
exit(0);
}
close(fd[0]);
if (write(fd[1]),"hello",6)==-1)
perror("Loi truyen.");
}
Kết quả chương trình:
So hieu mo ta la: 5
Van ban nhan duoc co 6 ky tu: hello
Chú ý rằng, tiến trình con đọc trong ống dẫn mà không viết ở đó nên nó bắt đầu bằng cách đóng phần viết fd[1] để tiết kiệm các tín hiệu mô tả của tổ hợp. Tương tự, vì tiến trình cha chỉ sử dụng phần viết nên nó đóng phần đọc lại (fd[0]). Sau đó tiến trình cha viết vào ống dẫn 6 ký tự và tiến trình con đã đọc chúng.
Nguồn: tổng hợp từ Internet
Trên hệ điều hành Linux, tiến trình được nhận biết thông qua số hiệu của tiến trình, gọi là pid. Cũng như đối với user, nó có thể nằm trong nhóm. Vì thế để phân biệt ta nhận biết qua số hiệu nhóm gọi là pgrp. Một số hàm của C cho phép lấy được những thông số này:
int getpid() : trả về giá trị int là pid của tiến trình hiện tại
int getppid() : trả về giá trị int là pid của tiến trình cha của tiến trình hiện tại
int getpgrp() : trả về giá trị int là số hiệu của nhóm tiến trình
int setpgrp() : trả về giá trị int là số hiệu nhóm tiến trình mới tạo ra
Ví dụ:
Lệnh : printf("Toi la tien trinh %d thuoc nhom %d",getpid(),getgrp());
Kết quả sẽ là: Toi là tien trinh 235 thuoc nhom 231
Tạo một tiến trình - lệnh fork
int fork() tạo ra một tiến trình con. Giá trị trả lại là 0 cho tiến trình con và dấu hiệu pid cho tiến trình cha. Giá trị sẽ là -1 nếu không tạo được tiến trình mới. Theo nguyên tắc cơ bản của hệ thống, tiến trình con và cha sẽ có cùng đoạn mã. Đoạn dữ liệu của tiến trình mới là một bản sao chép chính xác đoạn dữ liệu của tiến trình cha. Tuy nhiên tiến trình con vẫn khác tiến trình cha ở pid, thời gian xử lý, ...
Dừng một tiến trình
Lệnh kill của Shell có thể dùng để chấm dứt hoạt động của một tiến trình. ví dụ
như khi muốn dừng tiến trình 234 ta dùng lệnh: kill 234
C cũng có lệnh kill như sau:
int kill(pid, sig);
int pid; là dấu hiệu nhận biết của một tiến trình.
int sig; hằng tín hiệu giao tiếp tiến trình.
Giao tiếp giữa các tiến trình
Việc giao tiếp giữa các tiến trình được thực hiện thông qua các tín hiệu chuẩn của hệ thống. Tín hiệu là một sự ngắt quãng logic được gửi đến các tiến trình bởi hệ thống để thông báo cho chúng về những sự việc không bình thường trong môi trường hoạt động của chúng (như lỗi bộ nhớ, lỗi vào ra). Nó cũng cho phép các tiến trình liên lạc với nhau. Một tín hiệu (trừ SIGKILL) có thể được xem xét theo ba cách khác nhau:
1. Tiến trình có thể được bỏ qua: Ví dụ chương trình có thể bỏ qua sự ngắt quãng của người sử dụng hệ thống (đó là sự bỏ qua khi một tiến trình đang được sử dụng ở phần nền.
2. Tiến trình có thể được thực hiện: Trong trường hợp này, khi nhận được 1 tín hiệu, việc thực hiện 1 tiến trình được chuyển về một quy trình do người sử dụng xác định trước, sau đó trở lại nơi nó bị ngắt.
3. Lỗi có thể được tiến trình trả về sau khi nhận được tín hiệu này.Dưới đây là một số tín hiệu thường gặp:
SIGHUP
Tín hiệu này được phát đến các tiến trình vào lúc cuối khi mà nó tự ngắt.
Nó cũng được phát đến mọi tiến trình có tiến trình chính tự ngắt.
SIGINT Tín hiệu này được phát đến các tiến trình khi ta ra lệnh ngắt.
SIGQUIT Tương tự như trên khi ta gõ vào ^D.
SIGILL
Lệnh không hợp lệ, tín hiệu được phát ra khi phát hiện 1 lệnh không đúng
ở cấp độ vật lý (ví dụ như 1 tiến trình thực hiện một lệnh mà máy tính
chông có lệnh này).
SIGTRAP
Tín hiệu được phát ra sau mỗi lệnh trong trường hợp tiến trình có sử dụng lệnh ptrace().
SIGIOT Bẫy được phát khi có các vấn đề về vật lý.
SIGEMT Bẫy của lệnh phát, được phát ra khi có lỗi vật lý trong khi thực hiện.
SIGFPE
Được phát ra khi có lỗi về tính toán như một số có dấu phẩy nối có định dạng không hợp lý. Gần như luôn chỉ ra lỗi khi lập trình.
SIGKILL Trang bị để kết thúc tiến trình. Không thể bỏ qua hoặc cắt tín hiệu này.
SIGBUS Được phát khi gặp lỗi trên bus.
SYSGEGV
Được phát ra khi gặp lỗi trên phân đoạn sự truy cập dữ liệu bên ngoài phân đoạn dữ liệu được cấp phát cho tiến trình.
SIGSYS Đối số không đúng cho hệ thống gọi.
SIGPIPE Viết trên một ống dẫn không mở để đọc.
SIGALRM
Phát ra khi đồng hồ của một tiến trình ngừng lại. Đồng hồ được hoạt động bằng lệnh alrm().
SIGTERM
Được phát ra khi một tiến trình kết thúc bình thường. Cũng có thể dùng để dừng 1 hệ thống để kết thúc tất cả các tiến trình hoạt động.
Liên lạc giữa hai tiến trình
Từ một chương trình đơn giản dưới đây sử dụng các lệnh phát và nhận tín hiệu, sau đó giúp liên lạc giữa hai tiến trình.
Nội dung của ví dụ là sự liên lạc giữa một tiến trình cha và một tiến trình con thông qua các tín hiệu đã được trình bày phần trước.
#include
#include
void fils_atc()
{
printf(" Tien trinh bi loai bo !!!\n");
kill(getpid(), SIGINT);
}
/***********************************/
void fils()
{
signal(SIGUSR1, fils_atc);
printf(" Hinh thanh tien trinh moi. Nhung chuan bi loai bo tien trinh nay !!\n");
while(1);
}
/******************************/
main()
{
int ppid, pid;
if ((pid = fork())==0) fils();
else
{
sleep(3);
printf(" Chap nhan !! Tien trinh se bi loai bo.\n");
kill(pid, SIGUSR1);
}
}
Trong ví dụ trên, tiến trình con có sử dụng hàm signal(SIGUSR1, fils_atc). Hàm này có tác dụng mỗi khi tiến trình con nhận được tín hiệu SIGUSR1 thì hàm fils_atc() sẽ được thực thi.
Như vậy ở ví dụ trên một tiến trình con đã được tạo ra nhưng nó lại không muốn tiếp tục tồn tại. Do vậy sau khi tạm dừng lại sleep(3), tiến trình cha đã gởi đến cho tiến trình con một tín hiệu là SIGUSR1 bằng lệnh:
kill(pid, SIGUSR1);
Ở tiến trình con, tín hiệu SIGUSR1 đã được gán với hàm fils_atc(). Hàm này ra một thông báo báo hiệu tiến trình này sắp chết rồi tự gởi đến chính mình (tiến trình con) tín hiệu SIGINT, tín hiệu ngắt tiến trình. Và tiến trình con đã chết.
kill(getpid(), SIGINT);
Một số nhược điểm khi liên lạc trực tiếp bằng tín hiệu:
- Một tín hiệu có thể bị bỏ qua, kết thúc một tiến trình hoặc bị chặn lại. Đó là lý do chính đưa ra các tín hiệu không thích ứng được để tiến hành liên lạc giữa các tiến trình. Một thông điệp điệp dưới hình thức tín hiệu có thể sẽ bị mất nếu nó được nhận lúc loại tín hiệu này tạm thời bị bỏ qua.
- Một vấn đề khác là các tín hiệu có quyền rất lớn, khi đến chúng làm ngắt quãng công việc hiện tại. Ví dụ việc nhận một tín hiệu trong khi tiến trình đang đợi một sự kiện (mà có thể đến khi sử dụng các lệnh open(), read(), ...) làm cho việc thực thi hàm bị chệch hướng. Khi trở lại, lệnh chính bị ngắt gởi lại một thông điệp báo lỗi mà hoàn toàn không xử lý được.
Ngoài việc liên lạc trực tiếp như ở ví dụ trên, còn cho phép một phương pháp liên lạc giữa các tiến trình khác, đó là liên lạc qua "đường ống".
Lập trình đa tiến trình
Ống dẫn liên lạc
Ống dẫn là một cơ chế cơ bản để liên lạc gián tiếp giữa các tiến trình. Đó là các file đặc biệt (FIFO), ở đó các thông tin được truyền đi 1 đầu và thoát ra ở một đầu khác. Một số đặc điểm của "ống dẫn":
- Các ống dẫn chỉ mang tính chất tạm thời, chỉ tồn tại trong thời gian thực hiện của một tiến trình tạo ra nó.
- Muốn tạo ra một ống dẫn phải bắt đầu bằng một lệnh đặc biệt: pipe().
- Nhiều tiến trình có thể viết và đọc trên cùng một ống dẫn. Tuy nhiên, không có một cơ chế nào để phân biệt thông tin cho các tiến trình ở đầu ra.
- Dung lượng ống dẫn bị hạn chế (khoảng 4KB). Do đó khi chúng ta cố gắng viết khi ống dẫn bị đầy thì sẽ gặp phải trường hợp tắc nghẽn.
- Các tiến trình liên lạc qua ống dẫn phải có mối quan hệ họ hàng và các ống dẫn nối phải được mở trước khi tạo ra các tiến trình con.
- Không thể tự thay đổi vị trí thông tin trong ống.
Thao tác với "ống dẫn liên lạc"
Tạo một ống dẫn:
int p_desc[2];
int pipe(p_desc);
Giá trị trả về là 0 nếu thành công, -1 nếu thất bại.
p_desc[0] : chứa các số hiệu mô tả nhờ đó có thể đọc trong ống dẫn.
p_desc[1] : chứa các số hiệu mô tả nhờ đó có thể viết trong ống dẫn.
Như vậy việc viết trong p_desc[1] là để truyền dữ liệu trong ống và việc đọc trong
p_desc[0] để nhận chúng.
Ví dụ:
#include
#include
main()
{
int i,ret, p_desc[2];
char c;
pipe(p_desc);
write(p_desc[1], "AB", 2);
for (i=1; i<=3,i ++) {
ret=read(p_desc[0], &c, 1);
if (ret == 1)
printf(" Gia tri: %c\n",c);
else
perror("Loi ong dan rong");
}
}
Ví dụ trên chỉ ra rằng ta có thể truyền và nhận thông tin trên ống dẫn. Chúng ta đã dùng hàm read() và write() để viết (truyền) và đọc (nhận) trên ống dẫn.
Liên lạc giữa tiến trình cha và tiến trình con
Trong ví dụ dưới đây, một tiến trình tạo ra một ống dẫn, tạo ra một tiến trình con, viết một văn bản vào ống dẫn.Tiến trình con thừa hưởng ống dẫn và các ký hiệu mô tả của ống dẫn, thực hiện đọc trong ống dẫn:
#include
#include
void code_fils(int number) {
int fd, nread;
char texte[100];
- 31-
fd=number;
printf(" So hieu mo ta la %d\n",fd);
switch (nread=read(fd, texte, sizeof(texte)))
{
case -1:
perror("Loi doc.");
case 0:
perror("EOF");
default:
printf("Van ban nhan duoc co %d ky tu: %s\n",fd, texte);
}
}
main() {
int fd[2];
char chaine[10];
if (pipe(fd)==-1)
{ perror("Loi khoi tao pipe.");
exit(1);
}
switch (fork()) {
case -1:
perror(" Loi khoi tao tien trinh.");
break;
case 0:
if (close(fd[1])==-1)
perror(" Error.");
code_fils(fd[0]);
exit(0);
}
close(fd[0]);
if (write(fd[1]),"hello",6)==-1)
perror("Loi truyen.");
}
Kết quả chương trình:
So hieu mo ta la: 5
Van ban nhan duoc co 6 ky tu: hello
Chú ý rằng, tiến trình con đọc trong ống dẫn mà không viết ở đó nên nó bắt đầu bằng cách đóng phần viết fd[1] để tiết kiệm các tín hiệu mô tả của tổ hợp. Tương tự, vì tiến trình cha chỉ sử dụng phần viết nên nó đóng phần đọc lại (fd[0]). Sau đó tiến trình cha viết vào ống dẫn 6 ký tự và tiến trình con đã đọc chúng.
Nguồn: tổng hợp từ Internet
TranMinhTuan143(I12A)- Tổng số bài gửi : 38
Join date : 22/02/2012
Re: Thảo luận Bài 4
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 dùng để chứa các thông tin cần thiết về tiến trình đó
DangLeHieu(I102C)- Tổng số bài gửi : 18
Join date : 05/03/2012
Trang 13 trong tổng số 13 trang • 1, 2, 3 ... 11, 12, 13
Trang 13 trong tổng số 13 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết