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 4 trong tổng số 13 trang
Trang 4 trong tổng số 13 trang • 1, 2, 3, 4, 5 ... 11, 12, 13
Điều phối CPU nhanh / chậm
Điều phối chậm:
• Chọn tiến trình từ Job Queue để đưa vào Ready Queue.
• Kiểm soát độ đa chương (Số tiến trình trong bộ nhớ).
• Do có nhiều thời gian (vài phút), loại Scheduler này có điều kiện để lựa chọn kỹ các tiến trình cần nhằm phối hợp cân đối 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: Cân bằng tải cho nhiều hệ thống.
Điều phối nhanh:
• Còn gọi là điều phối CPU.
• Chọn tiến trình từ Ready Queue để cấp CPU.
• Có tần suất công việc cao. Thường cứ 100ms lại tốn 10ms để xác định tiến trình kế tiếp, như vậy 10/(100+10) = 9% thời gian CPU được dùng để điều phối công việc.
• Chọn tiến trình từ Job Queue để đưa vào Ready Queue.
• Kiểm soát độ đa chương (Số tiến trình trong bộ nhớ).
• Do có nhiều thời gian (vài phút), loại Scheduler này có điều kiện để lựa chọn kỹ các tiến trình cần nhằm phối hợp cân đối 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: Cân bằng tải cho nhiều hệ thống.
Điều phối nhanh:
• Còn gọi là điều phối CPU.
• Chọn tiến trình từ Ready Queue để cấp CPU.
• Có tần suất công việc cao. Thường cứ 100ms lại tốn 10ms để xác định tiến trình kế tiếp, như vậy 10/(100+10) = 9% thời gian CPU được dùng để điều phối công việc.
DuongKimLong(I111C)- Tổng số bài gửi : 29
Join date : 26/08/2011
cộng tác tiến trình
Nhu cầu liên lạc giữa các tiến trình
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
Hầu hết các hệ điều hành đưa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế có những đặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
Hầu hết các hệ điều hành đưa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế có những đặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.
DuongKimLong(I111C)- Tổng số bài gửi : 29
Join date : 26/08/2011
bổ sung ý nghĩa hàm Fork
Hàm fork() là hàm chỉ có trong HĐH Unix mà trong Windows không có . Fork tạo ra một process con (child process) là copy (nhân bản) của chính process tạo ra nó (parent process) (làm mình nhớ đến clone() để tạo copy một object trong OOP). Để phân biệt giữa parent process và child process chính là giá trị trả về của hàm fork. Ở parent process thì hàm fork sẽ trả về chính là processID của tiến trình con, còn ở child process thì fork sẽ trả về 0. Fork sẽ trả về 2 lần ở tiến trình cha và tiến trình con.
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Ngay khi hàm fork được gọi thì ngay lập tức phải suy nghĩ song song 2 process. Tất cả những instruction tiếp theo sau lệnh fork đều được thực hiện ở cả hai process (parent and child). Nghĩa là mã lệnh thực thi của cả 2 tiến trình là giống nhau. Hai tiến trình này có không gian địa chỉ riêng rẽ (virtual memory 4G bộ nhớ), stack riêng rẽ, vùng dữ liệu riêng mà. Ở tiến trình con thì sẽ có thêm PPID (parent processID) chính là processID của tiến trình cha.
pid_t childpid;
childpid = fork();
switch (childpid) {
case -1: // Can not fork new process
break;
case 0: // Child process
break;
default: // Parent process
break;
}
Thế nếu muốn nhân bản nhiều child process thì làm thế nào. Khi ấy sẽ không thể suy nghĩ rằng hãy đặt các lệnh fork liên tiếp( fork(); fork() ). Vì ngay sau khi thực hiện lệnh fork thì tiến trình cha đã được nhân bản và tiến trình con cũng sẽ thực hiện lệnh fork tiếp và nhân bản chính tiến trình con đó. Khi ấy ta sẽ có một cây nhị phân tăng theo cấp số nhân 2. Thay vì đó ta hãy đặt lệnh fork tạo process con tiếp theo ở đoạn mã của tiến trình cha.
switch (childpid) {
. . .
default: // Parent process
newchildpid = fork(); // Tạo new child process của tiến trình cha ở đây
switch ( newchildpid )
. . .
break;
}
Tạo các con theo cùng bậc thì chúng ta lại code theo “chiều dọc” (các đoạn switch lồng nhau).
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Ngay khi hàm fork được gọi thì ngay lập tức phải suy nghĩ song song 2 process. Tất cả những instruction tiếp theo sau lệnh fork đều được thực hiện ở cả hai process (parent and child). Nghĩa là mã lệnh thực thi của cả 2 tiến trình là giống nhau. Hai tiến trình này có không gian địa chỉ riêng rẽ (virtual memory 4G bộ nhớ), stack riêng rẽ, vùng dữ liệu riêng mà. Ở tiến trình con thì sẽ có thêm PPID (parent processID) chính là processID của tiến trình cha.
pid_t childpid;
childpid = fork();
switch (childpid) {
case -1: // Can not fork new process
break;
case 0: // Child process
break;
default: // Parent process
break;
}
Thế nếu muốn nhân bản nhiều child process thì làm thế nào. Khi ấy sẽ không thể suy nghĩ rằng hãy đặt các lệnh fork liên tiếp( fork(); fork() ). Vì ngay sau khi thực hiện lệnh fork thì tiến trình cha đã được nhân bản và tiến trình con cũng sẽ thực hiện lệnh fork tiếp và nhân bản chính tiến trình con đó. Khi ấy ta sẽ có một cây nhị phân tăng theo cấp số nhân 2. Thay vì đó ta hãy đặt lệnh fork tạo process con tiếp theo ở đoạn mã của tiến trình cha.
switch (childpid) {
. . .
default: // Parent process
newchildpid = fork(); // Tạo new child process của tiến trình cha ở đây
switch ( newchildpid )
. . .
break;
}
Tạo các con theo cùng bậc thì chúng ta lại code theo “chiều dọc” (các đoạn switch lồng nhau).
DuongKimLong(I111C)- Tổng số bài gửi : 29
Join date : 26/08/2011
Re: Thảo luận Bài 4
NgoLeYen48(I11C) đã viế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.
- 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.
1. Nhu cầu liên lạc giữa các tiến trình
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
Hầu hết các hệ điều hành đưa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế có những đặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.
PhanThiThanhNguyen_72I11C- Tổng số bài gửi : 6
Join date : 26/08/2011
Re: Thảo luận Bài 4
iến trình (process) : là chương trình trong thời gian thực hiện(đặt dưới sự quản lý của hệ điều hành) .
So sánh tiến trình với chương trình:
Bản than tiến trình không là chương trình vì là thực thể thụ động , trong khi tiến trình là thực thể hoạt động với nhiều thôn g tin về trạng thái trong đó có bộ đếm chương trình cho biết vị trí lệnh hiện hành .
- Nhiều tiến trình có thể liên quan đến một chương trình và là các thực thể khác nhau khi vận hành .
- Mỗi tiến trình có thể sinh ra nhiều tiến trình con khác khi vận hành.
- Tiến trình cần các tài nguyên ( CPU , Memory,tâp tin, thiết bị I/O) để hoàn thành công việc .
- Tài nguyên cấp cho tiến trinh ngay từ đầu (khi tiến trình được tạo lập) hoặc trong thời gian vận hành và được thu hồi hết khi tiến trình kết thúc .
- Tiến trình là thực thể hoạt động , chương trình là thực thể thụ động , tiến trình có thông – Điểm khác nhau giữa tiến trình và chương trình : tiến trình có thông tin trạng thái để phản ánh tiến trình đang ở trạng thái nào .
So sánh tiến trình với chương trình:
Bản than tiến trình không là chương trình vì là thực thể thụ động , trong khi tiến trình là thực thể hoạt động với nhiều thôn g tin về trạng thái trong đó có bộ đếm chương trình cho biết vị trí lệnh hiện hành .
- Nhiều tiến trình có thể liên quan đến một chương trình và là các thực thể khác nhau khi vận hành .
- Mỗi tiến trình có thể sinh ra nhiều tiến trình con khác khi vận hành.
- Tiến trình cần các tài nguyên ( CPU , Memory,tâp tin, thiết bị I/O) để hoàn thành công việc .
- Tài nguyên cấp cho tiến trinh ngay từ đầu (khi tiến trình được tạo lập) hoặc trong thời gian vận hành và được thu hồi hết khi tiến trình kết thúc .
- Tiến trình là thực thể hoạt động , chương trình là thực thể thụ động , tiến trình có thông – Điểm khác nhau giữa tiến trình và chương trình : tiến trình có thông tin trạng thái để phản ánh tiến trình đang ở trạng thái nào .
PhanThiThanhNguyen_72I11C- Tổng số bài gửi : 6
Join date : 26/08/2011
Phân tích vai trò của khối kiểm soát tiến trình trong công việc quản lý tiến trình Hệ Điều Hành
Mỗi tiến trình trong Hệ điều hành được quản lý bởi một khối kiểm soát tiến trình PCB( Process Control Block). Nó đóng vai trò là một khối chứa tất cả các thông tin liên quan tới tiến trình. Các khối này được lưu vào bộ nhớ Ram. Vai trò của khối PCB là lưu tất cả các thông tin cần thiết của một quá trình trong quá trình hoạt động, để khi tiến trình kết thúc phiên làm việc, nó có thể dùng các thông tin đã được lưu để tiếp tục hoạt động trong lần tiếp theo.
Một PCB chứa các thông tin:
• Con trỏ liên kết(Pointer): địa chỉ liên kết.
• Trạng thái (process state): trạng thái có thể là mới, sẳn sàng, đang chạy, chờ đợi, kết thúc, …
• Số hiệu tiến trình (process number): mỗi tiến trình có một ID riêng
• Bộ đếm lệnh (program counter): bộ đếm hiển thị địa chỉ của lệnh hiện hành được thực thi cho tiến trình.
• Nội dung các thanh ghi (registers): 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 đó .
• 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( scheduler), 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(Base register) và thanh ghi giới hạn(Limits Register – hiển thị giới hạn bộ nhớ -Memory limits), 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ố tiến 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ở( list of open files)..
Một PCB chứa các thông tin:
• Con trỏ liên kết(Pointer): địa chỉ liên kết.
• Trạng thái (process state): trạng thái có thể là mới, sẳn sàng, đang chạy, chờ đợi, kết thúc, …
• Số hiệu tiến trình (process number): mỗi tiến trình có một ID riêng
• Bộ đếm lệnh (program counter): bộ đếm hiển thị địa chỉ của lệnh hiện hành được thực thi cho tiến trình.
• Nội dung các thanh ghi (registers): 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 đó .
• 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( scheduler), 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(Base register) và thanh ghi giới hạn(Limits Register – hiển thị giới hạn bộ nhớ -Memory limits), 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ố tiến 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ở( list of open files)..
BuiHuuThanhLuan(I11C)- Tổng số bài gửi : 30
Join date : 30/08/2011
Trong windows có hàm fork để tạo tiến trình con hay không?
Hàm fork() là hàm chỉ có trong HĐH Unix mà trong Windows không có . Fork tạo ra một process con (child process) là copy (nhân bản) của chính process tạo ra nó (parent process) (làm mình nhớ đến clone() để tạo copy một object trong OOP). Để phân biệt giữa parent process và child process chính là giá trị trả về của hàm fork. Ở parent process thì hàm fork sẽ trả về chính là processID của tiến trình con, còn ở child process thì fork sẽ trả về 0. Fork sẽ trả về 2 lần ở tiến trình cha và tiến trình con.
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Ngay khi hàm fork được gọi thì ngay lập tức phải suy nghĩ song song 2 process. Tất cả những instruction tiếp theo sau lệnh fork đều được thực hiện ở cả hai process (parent and child). Nghĩa là mã lệnh thực thi của cả 2 tiến trình là giống nhau. Hai tiến trình này có không gian địa chỉ riêng rẽ (virtual memory 4G bộ nhớ), stack riêng rẽ, vùng dữ liệu riêng mà. Ở tiến trình con thì sẽ có thêm PPID (parent processID) chính là processID của tiến trình cha.
pid_t childpid;
childpid = fork();
switch (childpid) {
case -1: // Can not fork new process
break;
case 0: // Child process
break;
default: // Parent process
break;
}
Thế nếu muốn nhân bản nhiều child process thì làm thế nào. Khi ấy sẽ không thể suy nghĩ rằng hãy đặt các lệnh fork liên tiếp( fork(); fork() ). Vì ngay sau khi thực hiện lệnh fork thì tiến trình cha đã được nhân bản và tiến trình con cũng sẽ thực hiện lệnh fork tiếp và nhân bản chính tiến trình con đó. Khi ấy ta sẽ có một cây nhị phân tăng theo cấp số nhân 2. Thay vì đó ta hãy đặt lệnh fork tạo process con tiếp theo ở đoạn mã của tiến trình cha.
switch (childpid) {
. . .
default: // Parent process
newchildpid = fork(); // Tạo new child process của tiến trình cha ở đây
switch ( newchildpid )
. . .
break;
}
Tạo các con theo cùng bậc thì chúng ta lại code theo “chiều dọc” (các đoạn switch lồng nhau).
Tuy nhiên nếu khi dùng có phần nào không hiểu thì cậu cũng nên đưa phần đó lên để người khác trao đổi tìm phương án giúp; chứ đừng hỏi chung chung!
Nguyenminhduc (I11C)- Tổng số bài gửi : 18
Join date : 07/09/2011
Trình bày sơ đồ luận chuyển CPU giữa hai tiến trình P0 và P1
Có 3 tiến trình cùng xảy ra đồng thời:
Trái: Tiến trình P0
Giữa: Tiến trình hệ thống
Phải: Tiến trình P1
- Tại thời điểm T0: CPU cấp cho P0, P0 thực thi tới t1,P0 nghỉ tới t4, lúc này P1 cũng đang nghĩ tới t2
- Tại thời điểm T1: CPU cấp cho HDH, P0 bị ngắt bởi hệ điều hành, thông tin của P0 được lưu vào khối kiểm soát tiến trình của P0(PCB0).CPU cũng mở khối kiểm soát tiến trình của P1(PCB1) để chuẩn bị cho P1 thực thi.
- Tại thời điểm T2:CPU cấp cho P1, P1 thực thi tới t3
- Tại thời điểm T3:CPU cấp cho Hệ điều hành, lưu thông tin vào khối kiểm soát P1(PCB1), mở khối kiểm soát của P0(PCB0).
- Tại thời điểm T4: CPU cấp cho P0, P0 thực thi cho tới khi hoàn thành xong.
BuiHuuThanhLuan(I11C)- Tổng số bài gửi : 30
Join date : 30/08/2011
Cộng tác giữa các tiến trình
Các tiến trình phải cộng tác với nhau để chia sẻ thông tin với nhau,tăng tốc độ tính toán,đảm bảo tính đơn thể tốt hơn.
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác.Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác.Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
NguyenMinhNhut.(I11c)- Tổng số bài gửi : 8
Join date : 30/08/2011
Tại sao phải tổ chức 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.
- Tăng tốc tính toán (computation Speedup): Các tiến trình 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.
- Đảm bảo tính tiện dụng (Convenience): người dùng có nhu cầu làm nhiều việc cùng 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ả,...
- Tăng tốc tính toán (computation Speedup): Các tiến trình 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.
- Đảm bảo tính tiện dụng (Convenience): người dùng có nhu cầu làm nhiều việc cùng 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ả,...
tranvanhai_21(I11c)- Tổng số bài gửi : 47
Join date : 25/08/2011
Age : 41
Đến từ : Đồng Nai
Vẽ và giải thích sơ đồ luân chuyển CPU giữa 2 tiến trình
Trong sơ đồ trên có 3 tuyền thời gian
- Tuyến bên trái là tuyến thời của P0
- Tuyến bên phải là tuyến thời của P1
- Tuyến giữa là tuyến thời gian của hệ thống
Giả sử lúc 9h00 tiến trình P0 chạy đến 9h05, ngắt xảy ra.Lưu môi trường P0 vào PCB0, nạp môi trường và trạng thái làm việc P1 từ PCB1. 9h08 tiến trình P1 chạy.Đến 9h20 ngắt xảy ra, tương tự trên lưu môi trường và trạng thái làm việc P1 vào PCB1, nạp môi trường và trạng thái làm việc P0 từ PCB0
HoangThiVe (I11C)- Tổng số bài gửi : 15
Join date : 25/08/2011
Age : 36
Định nghĩa module
Module có nghĩa là Đơn thể, một chương trình có thể chứa nhiều đơn thể. Từ khoá End Module là từ khoá kết thúc chương trình không giông, không như Pascal hoặc các ngôn ngữ khác như: C/C++, J#, Java. Visual Basic không cần có dấu phân cách giữa các câu lệnh, các câu lệnh phải nằm khác dòng.
Một chương trình Visual Basic. NET mang tên "Hello, World":
Module HelloWorld
Sub Main()
Console.WriteLine("Hello, World")
Console.ReadLine()
End Sub
End Module
Đây là một loại chương trình cổ điển nhưng đầy đủ về mặt cú pháp thường dùng.
Kết quả xuất ra màn hình như sau:
Hello, World
Đơn thể (hay Module) là một đoạn chương trình được viết theo một cấu trúc nào đó, giải quyết một vấn đề tương đối độc lập của bài toán.Khi viết một chương trình, chúng ta có thể triển khai theo hai cách:
Cách 1: Toàn bộ các lệnh của chương trình được viết trong hàm main(). Các lệnh được viết theo trình tự để giải quyết bài toán đặt ra
.Cách 2: Chương trình được tạo thành từ nhiều đơn thể khác nhau. Các đơn thể thực hiện những nhiệm vụ tương đối độc lập và được “lắp ghép” lại thành chương trình thông qua những lời gọi đơn thể trong hàm main().
Một chương trình Visual Basic. NET mang tên "Hello, World":
Module HelloWorld
Sub Main()
Console.WriteLine("Hello, World")
Console.ReadLine()
End Sub
End Module
Đây là một loại chương trình cổ điển nhưng đầy đủ về mặt cú pháp thường dùng.
Kết quả xuất ra màn hình như sau:
Hello, World
Đơn thể (hay Module) là một đoạn chương trình được viết theo một cấu trúc nào đó, giải quyết một vấn đề tương đối độc lập của bài toán.Khi viết một chương trình, chúng ta có thể triển khai theo hai cách:
Cách 1: Toàn bộ các lệnh của chương trình được viết trong hàm main(). Các lệnh được viết theo trình tự để giải quyết bài toán đặt ra
.Cách 2: Chương trình được tạo thành từ nhiều đơn thể khác nhau. Các đơn thể thực hiện những nhiệm vụ tương đối độc lập và được “lắp ghép” lại thành chương trình thông qua những lời gọi đơn thể trong hàm main().
VOTHANHTRUNG(I11C)- Tổng số bài gửi : 26
Join date : 26/08/2011
[b]Phân biệt class và module[/b]
Mã trong VB được lưu trữ trong các module, bao gồm 3 loại: form, standard và class.
Các ứng dụng đơn giản có thể bao gồm chỉ một form, và tất cả mã nguồn trong ứng dụng chứa trong chính form module đó. Khi các ứng dụng của bắt đầu lớn hơn và phức tạp hơn, bạn cần đưa chúng vào thêm các form khác. Cuối cùng bạn phát hiện những đoạn mã thường dùng nằm trong các form khác nhau. Bạn không muốn lặp lại các đoạn mã đó, nên bạn cần phải tạo ra một module riêng để chứa đựng các thủ tục để thực hiện các mã lệnh đó. Module riêng này gọi là một standard module. Theo thời gian, bạn có thể xây dựng một thư viện chứa các thủ tục dùng chung.
Mỗi standard, class, và form module có thể chứa:
* Khai báo. Bạn có thể đặt hằng số, kiểu dữ liệu, biến và thủ tục DDL (thư viện động) ở cấp độ module của form, class hoặc standard modules.
* Thủ tục. Một Sub, Function hoặc Property procedure chứa các phần của đoạn mã có thể thực thi.
Form Modules
Form modules (.FRM file name extension) là một cơ sở của hầu hết các ứng dụng VB. Nó có thể chứa các thủ tục xử lý sự kiện, các thủ tục chuẩn và các khai báo cấp form của biến, hằng, kiểu dữ liệu và các thủ tục mở rộng. Nếu bạn xem một form bằng một trình soạn thảo văn bản, bạn có thể nhìn thấy các chú thích của form và các điều khiển của nó, bao gồm cả các thiết lập của thuộc tính. Các mã bạn viết trong form module là một cách đặc biệt để tiếp cận ứng dụng đặc trưng của form. Nó có thể tham chiếu đến các form khác hoặc các đối tượng khác bên trong ứng dụng.
Standard Modules
Standard modules (.BAS file name extension) là nội dung của thủ tục và khai báo thường được truy cập bởi các module bên trong ứng dụng. Nó có thể chứa các khai báo biến, hằng, kiểu dữ liệu và thủ tục mở rộng ở cấp độ module hoặc global (có hiệu lực cho cả ứng dụng). Đoạn mã mà bạn viết trong standard module tất nhiên là không thể thực hiện với các ứng dụng đặc trưng. Nếu bạn cẩn thận không cho tham chiếu các forms hoặc điều khiển bằng tên, một standard module có thể dùng lại trong các ứng dụng khác nhau.
Class Modules
Class modules (.CLS file name extension) là một cơ sở của lập trình hướng đối tượng trong VB. Bạn có thể viết mã trong các class module để tạo một đối tượng mới. Có những đối tượng mới được phép có những thiết lập về thuộc tính và phương thức mà bạn đã cài đặt. Một cách chính xác, các form chỉ có class module có thể có cả các điều khiển đặt trên chúng và có thể hiện thị cửa sổ form.
1. Giống nhau : Cả hai đều có thể chứa các thuộc tính (Properties), hàm (Function), thủ tục (Sub) (hàm và thủ tục được gọi chung là Method)...
2. Khác nhau : trong Module, các thuộc tính, hàm, thủ tục có thể được sử dụng trực tiếp. Còn trong Class ta phải khởi tạo một biến có kiểu là Class đó thì mới sử dụng được, trừ khi các thuộc tính, hàm, thủ tục được khai báo với từ khóa Shared trong VB Net hay Static trong C# (trong trường hợp này lại giống Module).
Module có thể sử dụng 2 qui định truy xuất là Public hoặc Friend, nếu không khai báo gì hết thì mặc định của Module là Friend. Với truy xuất Friend, thì Module chỉ được hiểu phạm vi trên cùng một file (.vb), còn với truy xuất Public ,Module sẽ được hiểu trên toàn project.
Do đó khi muốn tạo một kiểu dữ liệu mới, thì dùng Class (hoặc Structure). Muốn tạo sẵn một số hằng, hàm, thủ tục để có thể truy xuất bất cứ lúc nào thì nên dùng Module (hoặc có thể dùng Class nhưng phải khai báo là Shared).
Các ứng dụng đơn giản có thể bao gồm chỉ một form, và tất cả mã nguồn trong ứng dụng chứa trong chính form module đó. Khi các ứng dụng của bắt đầu lớn hơn và phức tạp hơn, bạn cần đưa chúng vào thêm các form khác. Cuối cùng bạn phát hiện những đoạn mã thường dùng nằm trong các form khác nhau. Bạn không muốn lặp lại các đoạn mã đó, nên bạn cần phải tạo ra một module riêng để chứa đựng các thủ tục để thực hiện các mã lệnh đó. Module riêng này gọi là một standard module. Theo thời gian, bạn có thể xây dựng một thư viện chứa các thủ tục dùng chung.
Mỗi standard, class, và form module có thể chứa:
* Khai báo. Bạn có thể đặt hằng số, kiểu dữ liệu, biến và thủ tục DDL (thư viện động) ở cấp độ module của form, class hoặc standard modules.
* Thủ tục. Một Sub, Function hoặc Property procedure chứa các phần của đoạn mã có thể thực thi.
Form Modules
Form modules (.FRM file name extension) là một cơ sở của hầu hết các ứng dụng VB. Nó có thể chứa các thủ tục xử lý sự kiện, các thủ tục chuẩn và các khai báo cấp form của biến, hằng, kiểu dữ liệu và các thủ tục mở rộng. Nếu bạn xem một form bằng một trình soạn thảo văn bản, bạn có thể nhìn thấy các chú thích của form và các điều khiển của nó, bao gồm cả các thiết lập của thuộc tính. Các mã bạn viết trong form module là một cách đặc biệt để tiếp cận ứng dụng đặc trưng của form. Nó có thể tham chiếu đến các form khác hoặc các đối tượng khác bên trong ứng dụng.
Standard Modules
Standard modules (.BAS file name extension) là nội dung của thủ tục và khai báo thường được truy cập bởi các module bên trong ứng dụng. Nó có thể chứa các khai báo biến, hằng, kiểu dữ liệu và thủ tục mở rộng ở cấp độ module hoặc global (có hiệu lực cho cả ứng dụng). Đoạn mã mà bạn viết trong standard module tất nhiên là không thể thực hiện với các ứng dụng đặc trưng. Nếu bạn cẩn thận không cho tham chiếu các forms hoặc điều khiển bằng tên, một standard module có thể dùng lại trong các ứng dụng khác nhau.
Class Modules
Class modules (.CLS file name extension) là một cơ sở của lập trình hướng đối tượng trong VB. Bạn có thể viết mã trong các class module để tạo một đối tượng mới. Có những đối tượng mới được phép có những thiết lập về thuộc tính và phương thức mà bạn đã cài đặt. Một cách chính xác, các form chỉ có class module có thể có cả các điều khiển đặt trên chúng và có thể hiện thị cửa sổ form.
1. Giống nhau : Cả hai đều có thể chứa các thuộc tính (Properties), hàm (Function), thủ tục (Sub) (hàm và thủ tục được gọi chung là Method)...
2. Khác nhau : trong Module, các thuộc tính, hàm, thủ tục có thể được sử dụng trực tiếp. Còn trong Class ta phải khởi tạo một biến có kiểu là Class đó thì mới sử dụng được, trừ khi các thuộc tính, hàm, thủ tục được khai báo với từ khóa Shared trong VB Net hay Static trong C# (trong trường hợp này lại giống Module).
Module có thể sử dụng 2 qui định truy xuất là Public hoặc Friend, nếu không khai báo gì hết thì mặc định của Module là Friend. Với truy xuất Friend, thì Module chỉ được hiểu phạm vi trên cùng một file (.vb), còn với truy xuất Public ,Module sẽ được hiểu trên toàn project.
Do đó khi muốn tạo một kiểu dữ liệu mới, thì dùng Class (hoặc Structure). Muốn tạo sẵn một số hằng, hàm, thủ tục để có thể truy xuất bất cứ lúc nào thì nên dùng Module (hoặc có thể dùng Class nhưng phải khai báo là Shared).
VOTHANHTRUNG(I11C)- Tổng số bài gửi : 26
Join date : 26/08/2011
lập trình module và yếu điểm của nó
Trong lập trình module các thủ tục có cùng chức năng sẽ được nhóm lại với nhau tọa thành một modul riêng biệt.Một chương trình sẽ không chỉ bao gồm một phần đơn lẻ.Nó được chia thành vài phần nhỏ hơn tương tác với nhau qua các lời gọi thủ tục và hoàn thành chương trình
Chương trình chính là sự kết hợp giữa các lời gọi tới các thủ tục trong module riêng biệt vơi các dữ liệu thích hợp
Yếu điểm của lập trình thủ tục và lập trình module hóa
[*]Khi độ phức tạp của chương trình tăng lên,sự phụ thuộc của nó và các kiểu dữ liệu cơ bản mà nó xử lý cũng tăng lên Vấn đề trở nên rõ ràng rằng cấu trúc dữ liệu trng chương trình cũng quan trọng không kém các phép toán thực hiện trên chúng.Nghĩa là khi kích thước chương trình tăng.các kiểu dữ liệu được xử lý nhiều trong các thủ tục của một chương trình có cấu trúc.Do đó khi thay đổi cài đặt của một kiểu dữ liệu sẽ dẫn đến những thay đổi trong các thủ tục sử dụng nó.
Một nhược điểm nữa là khi cần nhiều nhóm làm việc để xây dựng chương trình chung.Trong lập trình có cấu trúc mỗi người sẽ được giao xây dựng các kiểu dữ liệu và thủ tục.Những lập trình viên xử lý các thủ tục khác nhau nhưng lại có liên quan đến các kiểu dữ liệu dùng chung nên nếu một người thay đổi kiểu dữ liệu thì sẽ làm ảnh hưởng công việc của người khác,đặc biệt là khi có sai xót trong việc liên lạc giữa thành viên của nhóm
Việc phát triển các phần mềm mất nhiều thời gian tập trung xây dựng lại các cấu trúc dữ liệu cơ bản.Khi xây dựng một chưong trình mới trong lập trình có cấu trúc,lập trình viên phải xây dựng các cấu trúc dữ liệu cơ bản cho phù hợp với bài toán và điều này đôi khi mất rất nhiều thời gian
Chương trình chính là sự kết hợp giữa các lời gọi tới các thủ tục trong module riêng biệt vơi các dữ liệu thích hợp
Yếu điểm của lập trình thủ tục và lập trình module hóa
[*]Khi độ phức tạp của chương trình tăng lên,sự phụ thuộc của nó và các kiểu dữ liệu cơ bản mà nó xử lý cũng tăng lên Vấn đề trở nên rõ ràng rằng cấu trúc dữ liệu trng chương trình cũng quan trọng không kém các phép toán thực hiện trên chúng.Nghĩa là khi kích thước chương trình tăng.các kiểu dữ liệu được xử lý nhiều trong các thủ tục của một chương trình có cấu trúc.Do đó khi thay đổi cài đặt của một kiểu dữ liệu sẽ dẫn đến những thay đổi trong các thủ tục sử dụng nó.
Một nhược điểm nữa là khi cần nhiều nhóm làm việc để xây dựng chương trình chung.Trong lập trình có cấu trúc mỗi người sẽ được giao xây dựng các kiểu dữ liệu và thủ tục.Những lập trình viên xử lý các thủ tục khác nhau nhưng lại có liên quan đến các kiểu dữ liệu dùng chung nên nếu một người thay đổi kiểu dữ liệu thì sẽ làm ảnh hưởng công việc của người khác,đặc biệt là khi có sai xót trong việc liên lạc giữa thành viên của nhóm
Việc phát triển các phần mềm mất nhiều thời gian tập trung xây dựng lại các cấu trúc dữ liệu cơ bản.Khi xây dựng một chưong trình mới trong lập trình có cấu trúc,lập trình viên phải xây dựng các cấu trúc dữ liệu cơ bản cho phù hợp với bài toán và điều này đôi khi mất rất nhiều thời gian
VOTHANHTRUNG(I11C)- Tổng số bài gửi : 26
Join date : 26/08/2011
Re: Thảo luận Bài 4
II. Windows API làm được những việc gì
Nói một cách cơ bản, Windows API quản lý mọi vấn đề làm ra Windows. Tất nhiên, bao gồm cả những vấn đề đã nói ở trên như truy xuất đĩa, cấp phát bộ nhớ, hiển thị trên màn hình… Tuy nhiên, nó đồng thời cũng cung cấp hầu hết các tính năng thông dụng cho tất cả các chương trình trên nền Windows. Ví dụ, các hộp thoại thông dụng (Open, Save As, Choose Font, …), các thiết lập hệ điều hành, các sự kiện, … Các ứng dụng trên nền Windows dùng Windows API hầu như trong mọi tác vụ. Thậm chí nếu bạn không dùng Windows API một cách rõ ràng khi lập trình thì trong ngôn ngữ lập trình cũng sẽ gọi các Windows API trong chương trình được tạo ra để quản lý nhiều tác vụ khác nhau.
III. Windows API được chứa ở đâu:
Hầu hết các hàm Windows API được chứa trong các file *.DLL (Dynamic Link Library – thư viện liên kết động) chứa trong thư mục hệ thống của Windows (..\Windows\System\). Các file DLL cho phép các chương trình bên ngoài dùng các hàm của chúng. Hầu hết các hàm API chứa trong user32.dll (các hàm giao diện người dùng), kernel32.dll (các hàm của hệ điều hành), gdi32.dll (các hàm giao tiếp thiết bị đồ họa) và shell32.dll (các hệ vỏ Windows).
IV. Các thành phần của Windows API
Khi nói đến Windows API, người ta thường hay nghĩ ngay đến các hàm. Nhưng thực ra ra, các hàm cũng chủ là một thành phần của Windows API. Sau đây là danh sách các đối tượng tạo nên Windows API:
· Các hàm (function): Như đã đề cập, các hàm chính là hạt nhân của Window API. Chúng là những mã lệnh thực sự để hoàn thành các công việc khác nhau. Chúng được chứa trong các dll và có thể được truy xuất một cách dễ dàng bởi các chương trình trên windows
· Cấu trúc (structure): là sự kết hợp của nhiều biến riêng biệt, thường được dùng để nhóm các thông tin có liên quan với nhau thành một nhóm. Nhiều hàm API đòi hỏi một cấu trúc phải được truyền cho chúng để có thể vận chuyển một lượng lớn thông tin mà không cần phải dùng quá nhiều đối số trong hàm. Mặc dù những cấu trúc này được dùng trong các hàm API, chương trình của bạn vẩn có thể tự định nghĩa chúng (đối với Visual Basic hầu như phải tự định nghĩa lại cấu trúc).
· Các hằng được đặt tên (named constant): các hằng được đặt tên là một cách thức thuận lợi để tham chiếu đến các mã số khó nhớ (ví dụ mã quét của bàn phím chẳng hạn). Đôi khi các hằng được dùng như là các cờ. Cũng như với cấu trúc, các hằng phải được định nghĩa rõ ràng trong chương trình của bạn (Visual Basic).
· Các hàm gọi lại (callback function): về khái niện, các hàm callback ngược với các hàm API. Một hàm callback được định nghĩa hoàn toàn trong chương trình của bạn. Sau đó hàm này sẽ được một hàm API khác gọi khi nó thực thi một tác vụ nào. Các hàm callback cung cấp một cách thức để chương trình của bạn có thể can thiệp trực tiếp vào tác vụ đó. Nó tương tự như con trỏ hàm (pointer function) trong C/C++. Trong Visual Basic các thủ tục sử lý sự kiện của bạn là một hình dung dễ nhất về callback function.
Nói một cách cơ bản, Windows API quản lý mọi vấn đề làm ra Windows. Tất nhiên, bao gồm cả những vấn đề đã nói ở trên như truy xuất đĩa, cấp phát bộ nhớ, hiển thị trên màn hình… Tuy nhiên, nó đồng thời cũng cung cấp hầu hết các tính năng thông dụng cho tất cả các chương trình trên nền Windows. Ví dụ, các hộp thoại thông dụng (Open, Save As, Choose Font, …), các thiết lập hệ điều hành, các sự kiện, … Các ứng dụng trên nền Windows dùng Windows API hầu như trong mọi tác vụ. Thậm chí nếu bạn không dùng Windows API một cách rõ ràng khi lập trình thì trong ngôn ngữ lập trình cũng sẽ gọi các Windows API trong chương trình được tạo ra để quản lý nhiều tác vụ khác nhau.
III. Windows API được chứa ở đâu:
Hầu hết các hàm Windows API được chứa trong các file *.DLL (Dynamic Link Library – thư viện liên kết động) chứa trong thư mục hệ thống của Windows (..\Windows\System\). Các file DLL cho phép các chương trình bên ngoài dùng các hàm của chúng. Hầu hết các hàm API chứa trong user32.dll (các hàm giao diện người dùng), kernel32.dll (các hàm của hệ điều hành), gdi32.dll (các hàm giao tiếp thiết bị đồ họa) và shell32.dll (các hệ vỏ Windows).
IV. Các thành phần của Windows API
Khi nói đến Windows API, người ta thường hay nghĩ ngay đến các hàm. Nhưng thực ra ra, các hàm cũng chủ là một thành phần của Windows API. Sau đây là danh sách các đối tượng tạo nên Windows API:
· Các hàm (function): Như đã đề cập, các hàm chính là hạt nhân của Window API. Chúng là những mã lệnh thực sự để hoàn thành các công việc khác nhau. Chúng được chứa trong các dll và có thể được truy xuất một cách dễ dàng bởi các chương trình trên windows
· Cấu trúc (structure): là sự kết hợp của nhiều biến riêng biệt, thường được dùng để nhóm các thông tin có liên quan với nhau thành một nhóm. Nhiều hàm API đòi hỏi một cấu trúc phải được truyền cho chúng để có thể vận chuyển một lượng lớn thông tin mà không cần phải dùng quá nhiều đối số trong hàm. Mặc dù những cấu trúc này được dùng trong các hàm API, chương trình của bạn vẩn có thể tự định nghĩa chúng (đối với Visual Basic hầu như phải tự định nghĩa lại cấu trúc).
· Các hằng được đặt tên (named constant): các hằng được đặt tên là một cách thức thuận lợi để tham chiếu đến các mã số khó nhớ (ví dụ mã quét của bàn phím chẳng hạn). Đôi khi các hằng được dùng như là các cờ. Cũng như với cấu trúc, các hằng phải được định nghĩa rõ ràng trong chương trình của bạn (Visual Basic).
· Các hàm gọi lại (callback function): về khái niện, các hàm callback ngược với các hàm API. Một hàm callback được định nghĩa hoàn toàn trong chương trình của bạn. Sau đó hàm này sẽ được một hàm API khác gọi khi nó thực thi một tác vụ nào. Các hàm callback cung cấp một cách thức để chương trình của bạn có thể can thiệp trực tiếp vào tác vụ đó. Nó tương tự như con trỏ hàm (pointer function) trong C/C++. Trong Visual Basic các thủ tục sử lý sự kiện của bạn là một hình dung dễ nhất về callback function.
VOTHANHTRUNG(I11C)- Tổng số bài gửi : 26
Join date : 26/08/2011
Re: Thảo luận Bài 4
Duongthithanhhuynh (I11C) đã viết:Hai bạn đưa ra ví dụ thật hay. Tại bữa mình không nhớ rõ phần này nên còn lơ mơ nhờ hai ví dụ này mà mình hiểu ra vấn đề, thank hai bạn nhiêu nha.DaoQuangSieu (I11C) đã viết:Ví dụ như một lớp sử dụng chung 1 cái bảng:NguyenHuuHung(I11C) đã viết:Ta lấy ví dụ một người bán trà đá:
Người bán trà đá sẽ đóng vai trò là người sản xuất.
Người mua trà đá và uống sẽ là người tiêu thụ.
Những ly trà đá sẽ đóng vai trò là sản phẩm.
Hệ thống tiến trình như sau:
Người bán trà đá sẽ pha trà và rót ra từng ly để bán. Các vị khách (người mua trà đá) sẽ mua từng ly trà và lần lượt hoặc cùng nhau uống trà. Như vậy, cứ người mua uống hết ly trà thứ nhất người bán trà lạ rót trà vào ly bừa hết. Người khách thứ 2 uống ly trà thứ 2 xong, người bán lại rót trà vào ly thứ 2 để tiếp tục bán. Tiến trình này cứ xảy ra song song như vậy giữa các ly trà, người mua và người bán.
- Mỗi sinh viên là một tiến trình
- Những sinh viên nào lên bảng viết hoặc trình bày quan điểm của mình về một vấn đề nào đó thì ta gọi đó là một tiến trình sản xuất.
- Những sinh viên phía dưới tập trung lắng nghe, đọc thông tin hoặc chụp hình, sao lưu thì ta gọi đó là một tiến trình tiêu thụ.
* Trong cuộc sống, hai tiến trình luôn xảy ra song song với nhau.Có tiêu thụ thì có sản xuất và ngược lại sản xuất ra thì cần phải có thứ để tiêu thụ.
uhm cái ví dụ này là của Thầy giảng bài hôm bữa nè, do mình ngồi xa quá nghe ko rõ thanks bạn nhé !
tranvanhai_21(I11c)- Tổng số bài gửi : 47
Join date : 25/08/2011
Age : 41
Đến từ : Đồng Nai
GIẢI THÍCH 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 .
- 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 .
PhamAnhKhoa(I11C)- Tổng số bài gửi : 13
Join date : 28/08/2011
Process control block
Các hệ điều hành phải biết thông tin cụ thể về quy trình quản lý, kiểm soát và cũng để thực hiện các mô hình quy trình, hệ điều hành duy trì một bảng (một mảng của cấu trúc), được gọi là bảng tiến trình, với một mục cho mỗi quá trình.
Những mục nhập này được gọi là khối kiểm soát quá trình (PCB) - còn được gọi là kiểm soát công việc khối.
Mục nhập này có chứa thông tin về process'state, chương trình truy cập của nó, con trỏ ngăn xếp, cấp phát bộ nhớ, tình trạng của các tập tin mở, kế toán và lập kế hoạch thông tin của mình, và mọi thứ khác về quá trình phải được lưu khi quá trình chuyển từ chạy trạng thái sẵn sàng hoặc bị chặn để nó có thể được khởi động lại sau đó như thể nó chưa bao giờ được dừng lại. Một PCB được thể hiện.
Thông tin như vậy thường được nhóm lại thành hai loại: Quy trình Thông tin và thông tin điều khiển quá trình. Bao gồm những:
Quy trình . Các bang có thể được mới, sẵn sàng, chạy, chờ đợi, tạm dừng, và như vậy.
Chương trình truy cập. Truy cập cho biết địa chỉ của lệnh tiếp theo được thực hiện cho quá trình này.
CPU đăng ký. Đăng ký thay đổi về số lượng và loại, tùy thuộc vào kiến trúc máy tính. Họ bao gồm ắc quy, chỉ số đăng ký, con trỏ ngăn xếp, và đăng ký mục đích chung, cộng với thông tin bất kỳ điều kiện mã.
CPU-thông tin lập kế hoạch. Thông tin này bao gồm một quá trình ưu tiên, con trỏ đến hàng đợi lập kế hoạch, và các thông số lập kế hoạch nào khác.
Quản lý bộ nhớ thông tin. Thông tin này có thể bao gồm các thông tin như giá trị của cơ sở, hạn chế đăng ký, bảng biểu trang, hoặc các bảng phân đoạn, tùy thuộc vào bộ nhớ hệ thống được sử dụng bởi hệ điều hành.
Kế toán thông tin. Thông tin này bao gồm số lượng của CPU và thời gian thực được sử dụng, giới hạn thời gian, số tài khoản, số lượng công việc hoặc quá trình, và như vậy.
I / O thông tin trạng thái. Thông tin này bao gồm danh sách các thiết bị I / O được phân bổ để xử lý, một danh sách các tập tin mở, và như vậy.
Những mục nhập này được gọi là khối kiểm soát quá trình (PCB) - còn được gọi là kiểm soát công việc khối.
Mục nhập này có chứa thông tin về process'state, chương trình truy cập của nó, con trỏ ngăn xếp, cấp phát bộ nhớ, tình trạng của các tập tin mở, kế toán và lập kế hoạch thông tin của mình, và mọi thứ khác về quá trình phải được lưu khi quá trình chuyển từ chạy trạng thái sẵn sàng hoặc bị chặn để nó có thể được khởi động lại sau đó như thể nó chưa bao giờ được dừng lại. Một PCB được thể hiện.
Thông tin như vậy thường được nhóm lại thành hai loại: Quy trình Thông tin và thông tin điều khiển quá trình. Bao gồm những:
Quy trình . Các bang có thể được mới, sẵn sàng, chạy, chờ đợi, tạm dừng, và như vậy.
Chương trình truy cập. Truy cập cho biết địa chỉ của lệnh tiếp theo được thực hiện cho quá trình này.
CPU đăng ký. Đăng ký thay đổi về số lượng và loại, tùy thuộc vào kiến trúc máy tính. Họ bao gồm ắc quy, chỉ số đăng ký, con trỏ ngăn xếp, và đăng ký mục đích chung, cộng với thông tin bất kỳ điều kiện mã.
CPU-thông tin lập kế hoạch. Thông tin này bao gồm một quá trình ưu tiên, con trỏ đến hàng đợi lập kế hoạch, và các thông số lập kế hoạch nào khác.
Quản lý bộ nhớ thông tin. Thông tin này có thể bao gồm các thông tin như giá trị của cơ sở, hạn chế đăng ký, bảng biểu trang, hoặc các bảng phân đoạn, tùy thuộc vào bộ nhớ hệ thống được sử dụng bởi hệ điều hành.
Kế toán thông tin. Thông tin này bao gồm số lượng của CPU và thời gian thực được sử dụng, giới hạn thời gian, số tài khoản, số lượng công việc hoặc quá trình, và như vậy.
I / O thông tin trạng thái. Thông tin này bao gồm danh sách các thiết bị I / O được phân bổ để xử lý, một danh sách các tập tin mở, và như vậy.
nguyenminhlai.(I11C)- Tổng số bài gửi : 24
Join date : 26/08/2011
Age : 35
Đến từ : Quảng Nam
Cooperating Processes
Khi sử dụng máy tính tiến hóa từ chế độ hàng loạt chế độ tương tác, multiprogramming đã không còn là một phương pháp tiếp cận phù hợp. Mỗi người dùng muốn xem chương trình của mình đang chạy như thể nó là chương trình duy nhất trong máy tính. Việc sử dụng chia sẻ thời gian này có thể, với trình độ mà các máy tính sẽ không có vẻ như nhanh chóng đến bất kỳ một người sử dụng vì nó thực sự sẽ được nếu nó được chạy duy nhất mà chương trình của người sử dụng.
Sớm hệ thống đa nhiệm sử dụng các ứng dụng tự nguyện nhường thời gian với nhau. Cách tiếp cận này, cuối cùng đã được hỗ trợ bởi nhiều hệ điều hành máy tính, được biết đến ngày hôm nay là hợp tác xã đa nhiệm. Mặc dù nó hiếm khi được sử dụng trong các hệ thống lớn hơn, đa nhiệm hợp tác xã khi Đề án lập kế hoạch làm việc của Microsoft Windows (trước khi Windows 95 và Windows NT) và Mac OS (trước khi hệ điều hành Mac OS X) để cho phép nhiều ứng dụng được chạy đồng thời . Windows 9x cũng được sử dụng hợp tác đa nhiệm, nhưng chỉ cho các ứng dụng di sản 16-bit, nhiều cách giống như trước khi phiên bản của Mac OS X Leopard PowerPC sử dụng cho các ứng dụng cổ điển. Hệ thống điều hành mạng NetWare sử dụng hợp tác xã đa nhiệm đến NetWare 6,5. Hợp tác xã đa nhiệm vẫn được sử dụng ngày nay trên các hệ thống RISC OS.
Bởi vì một hệ thống multitasked hợp tác dựa vào mỗi quá trình thường xuyên bỏ thời gian để các quá trình khác trên hệ thống, một thiết kế kém chương trình có thể tiêu thụ tất cả các CPU thời gian cho chính mình hoặc gây ra toàn bộ hệ thống treo. Trong một môi trường máy chủ, đây là một mối nguy hiểm mà làm cho toàn bộ mạng giòn và dễ vỡ. Tất cả các phần mềm phải được đánh giá và tiêu chuẩn để sử dụng trong một môi trường thử nghiệm trước khi được cài đặt trên máy chủ chính, hoặc một chương trình hỏng trên máy chủ chậm lại hoặc đóng băng toàn bộ mạng.
Mặc dù những khó khăn của thiết kế và thực hiện hệ thống hợp tác multitasked, thời gian hạn chế, các hệ thống nhúng thời gian thực (chẳng hạn như tàu vũ trụ) thường được thực hiện bằng cách sử dụng mô hình này. Điều này cho phép kiểm soát, độ tin cậy cao xác định trình tự thời gian thực phức tạp, ví dụ, bắn đẩy cho các chỉnh sửa trình sâu không gian.
Sớm hệ thống đa nhiệm sử dụng các ứng dụng tự nguyện nhường thời gian với nhau. Cách tiếp cận này, cuối cùng đã được hỗ trợ bởi nhiều hệ điều hành máy tính, được biết đến ngày hôm nay là hợp tác xã đa nhiệm. Mặc dù nó hiếm khi được sử dụng trong các hệ thống lớn hơn, đa nhiệm hợp tác xã khi Đề án lập kế hoạch làm việc của Microsoft Windows (trước khi Windows 95 và Windows NT) và Mac OS (trước khi hệ điều hành Mac OS X) để cho phép nhiều ứng dụng được chạy đồng thời . Windows 9x cũng được sử dụng hợp tác đa nhiệm, nhưng chỉ cho các ứng dụng di sản 16-bit, nhiều cách giống như trước khi phiên bản của Mac OS X Leopard PowerPC sử dụng cho các ứng dụng cổ điển. Hệ thống điều hành mạng NetWare sử dụng hợp tác xã đa nhiệm đến NetWare 6,5. Hợp tác xã đa nhiệm vẫn được sử dụng ngày nay trên các hệ thống RISC OS.
Bởi vì một hệ thống multitasked hợp tác dựa vào mỗi quá trình thường xuyên bỏ thời gian để các quá trình khác trên hệ thống, một thiết kế kém chương trình có thể tiêu thụ tất cả các CPU thời gian cho chính mình hoặc gây ra toàn bộ hệ thống treo. Trong một môi trường máy chủ, đây là một mối nguy hiểm mà làm cho toàn bộ mạng giòn và dễ vỡ. Tất cả các phần mềm phải được đánh giá và tiêu chuẩn để sử dụng trong một môi trường thử nghiệm trước khi được cài đặt trên máy chủ chính, hoặc một chương trình hỏng trên máy chủ chậm lại hoặc đóng băng toàn bộ mạng.
Mặc dù những khó khăn của thiết kế và thực hiện hệ thống hợp tác multitasked, thời gian hạn chế, các hệ thống nhúng thời gian thực (chẳng hạn như tàu vũ trụ) thường được thực hiện bằng cách sử dụng mô hình này. Điều này cho phép kiểm soát, độ tin cậy cao xác định trình tự thời gian thực phức tạp, ví dụ, bắn đẩy cho các chỉnh sửa trình sâu không gian.
nguyenminhlai.(I11C)- Tổng số bài gửi : 24
Join date : 26/08/2011
Age : 35
Đến từ : Quảng Nam
Sockets
Ổ cắm chương trình con có các loại ổ cắm và ổ cắm giao thức như các thông số. Một chương trình ứng dụng quy định cụ thể một loại ổ cắm cho thấy phong cách truyền thông mong muốn cho rằng ổ cắm hoặc cặp ổ cắm. Một chương trình ứng dụng xác định một giao thức socket cho thấy mong muốn của các loại dịch vụ. Dịch vụ này phải nằm trong các dịch vụ cho phép của gia đình giao thức.
Sockets được phân loại theo đặc tính của thông tin liên lạc. Các quy trình thường giao tiếp giữa ổ cắm cùng loại. Tuy nhiên, nếu các giao thức truyền thông cơ bản hỗ trợ các thông tin liên lạc, ổ cắm các loại khác nhau có thể giao tiếp.
Mỗi ổ cắm có một loại liên quan, trong đó mô tả ngữ nghĩa của thông tin liên lạc bằng cách sử dụng ổ cắm. Các loại ổ cắm xác định các tính chất giao tiếp ổ cắm chẳng hạn như độ tin cậy, đặt hàng, và công tác phòng chống sao chép của tin nhắn. Các thiết lập cơ bản của các loại ổ cắm được định nghĩa trong file sys / socket.h:
/*Standard socket types */
#define SOCK_STREAM 1 /*virtual circuit*/
#define SOCK_DGRAM 2 /*datagram*/
#define SOCK_RAW 3 /*raw socket*/
#define SOCK_RDM 4 /*reliably-delivered message*/
#define SOCK_CONN_DGRAM 5 /*connection datagram*/
Sockets được phân loại theo đặc tính của thông tin liên lạc. Các quy trình thường giao tiếp giữa ổ cắm cùng loại. Tuy nhiên, nếu các giao thức truyền thông cơ bản hỗ trợ các thông tin liên lạc, ổ cắm các loại khác nhau có thể giao tiếp.
Mỗi ổ cắm có một loại liên quan, trong đó mô tả ngữ nghĩa của thông tin liên lạc bằng cách sử dụng ổ cắm. Các loại ổ cắm xác định các tính chất giao tiếp ổ cắm chẳng hạn như độ tin cậy, đặt hàng, và công tác phòng chống sao chép của tin nhắn. Các thiết lập cơ bản của các loại ổ cắm được định nghĩa trong file sys / socket.h:
/*Standard socket types */
#define SOCK_STREAM 1 /*virtual circuit*/
#define SOCK_DGRAM 2 /*datagram*/
#define SOCK_RAW 3 /*raw socket*/
#define SOCK_RDM 4 /*reliably-delivered message*/
#define SOCK_CONN_DGRAM 5 /*connection datagram*/
nguyenminhlai.(I11C)- Tổng số bài gửi : 24
Join date : 26/08/2011
Age : 35
Đến từ : Quảng Nam
Tíê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 Tiến trình hệ thống(của HĐH) với Tíê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ể Họat độ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í 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ể Họat độ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í hiện hành.
NgoLeYen48(I11C)- Tổng số bài gửi : 34
Join date : 26/08/2011
Tạo và sử dụng module
Bạn cần thực hiện các công việc sau:
+ Tăng hiệu quả thực thi và sử dụng bộ nhớ của ứng dụng bằng cách bảo đảm rằng bộ thực thi nạp các kiểu ít được sử dụng chỉ khi nào cần thiết.
+ Biên dịch các kiểu được viết trong C# thành một dạng có thể sử dụng lại được trong các ngôn ngữ .NET khác.
+ Sử dụng các kiểu được phát triển bằng một ngôn ngữ khác bên trong ứng dụng C# của bạn.
--> Sử dụng đối số /target:module (của trình biên dịch C#) để xây dựng mã nguồn C# của bạn thành một module. Sử dụng đối số /addmodule để kết hợp các module hiện có vào assembly của bạn.
Module là các khối cơ bản tạo dựng nên các assembly .NET. Module bao gồm một file đơn chứa:
+ Mã ngôn ngữ trung gian (Microsoft Intermediate Language—MSIL): Được tạo từ mã nguồn C# trong quá trình biên dịch.
+ Siêu dữ liệu (metadata): Mô tả các kiểu nằm trong module.
+ Các tài nguyên (resource): Chẳng hạn icon và string table, được sử dụng bởi các kiểu trong module.
Assembly gồm một hay nhiều module và một manifest. Khi chỉ có một module, module và manifest thường được xây dựng thành một file cho thuận tiện. Khi có nhiều module, assembly là một nhóm luận lý của nhiều file được triển khai như một thể thống nhất. Trong trường hợp này, manifest có thể nằm trong một file riêng hay chung với một trong các module.
Việc xây dựng một assembly từ nhiều module gây khó khăn cho việc quản lý và triển khai assembly; nhưng trong một số trường hợp, cách này có nhiều lợi ích, bao gồm:
• Bộ thực thi sẽ chỉ nạp một module khi các kiểu định nghĩa trong module này được yêu cầu. Do đó, khi có một tập các kiểu mà ứng dụng ít khi dùng, bạn có thể đặt chúng trong một module riêng mà bộ thực thi chỉ nạp khi cần. Việc này có các lợi ích sau:
▪ Tăng hiệu quả thực thi, đặc biệt khi ứng dụng được nạp qua mạng.
▪ Giảm thiểu nhu cầu sử dụng bộ nhớ.
• Khả năng sử dụng nhiều ngôn ngữ khác nhau để viết các ứng dụng chạy trên bộ thực thi ngôn ngữ chung (Common Language Runtime—CLR) là một thế mạnh của .NET Framework. Tuy nhiên, trình biên dịch C# không thể biên dịch mã nguồn được viết bằng Microsoft Visual Basic .NET hay COBOL .NET trong assembly của bạn. Bạn phải sử dụng trình biên dịch của ngôn ngữ đó biên dịch mã nguồn thành MSIL theo một cấu trúc mà trình biên dịch C# có thể hiểu được—đó là module. Tương tự, nếu muốn lập trình viên của các ngôn ngữ khác sử dụng các kiểu được phát triển bằng C#, bạn phải xây dựng chúng thành một module.
Để biên dịch file nguồn ConsoleUtils.cs thành một module, sử dụng lệnh:
csc /target:module ConsoleUtils.cs
Lệnh này sẽ cho kết quả là một file có tên là ConsoleUtils.netmodule. Phần mở rộng netmodule là phần mở rộng mặc định cho module, và tên file trùng với tên file nguồn C#.
Bạn cũng có thể xây dựng một module từ nhiều file nguồn, cho kết quả là một file (module) chứa MSIL và siêu dữ liệu cho các kiểu chứa trong tất cả file nguồn. Ví dụ, lệnh:
csc /target:module ConsoleUtils.cs WindowsUtils.cs
biên dịch hai file nguồn ConsoleUtils.cs và WindowsUtils.cs thành một module có tên là ConsoleUtils.netmodule.
Tên của module được đặt theo tên file nguồn đầu tiên trừ khi bạn chỉ định cụ thể bằng đối số /out. Ví dụ, lệnh:
csc /target:module /out:Utilities.netmodule
ConsoleUtils.cs WindowsUtils.cs
sẽ cho kết quả là file Utilities.netmodule.
Để xây dựng một assembly gồm nhiều module, sử dụng đối số /addmodule. Ví dụ, để xây dựng file thực thi MyFirstApp.exe từ hai module: WindowsUtils.netmodule và ConsoleUtils.netmodule và hai file nguồn: SourceOne.cs và SourceTwo.cs, sử dụng lệnh:
csc /out:MyFirstApp.exe /target:exe
/addmodule:WindowsUtils.netmodule,ConsoleUtils.netm odule
SourceOne.cs SourceTwo.cs
Lệnh này sẽ cho kết quả là một assembly gồm các file sau:
• MyFirstApp.exe: Chứa manifest cũng như MSIL cho các kiểu được khai báo trong hai file nguồn SourceOne.cs và SourceTwo.cs.
• ConsoleUtils.netmodule và WindowsUtils.netmodule: Giờ đây là một phần của assembly nhưng không thay đổi sau khi biên dịch. (Nếu bạn chạy MyFirstApp.exe mà không có các file netmodule, ngoại lệ System.IO.FileNotFoundException sẽ bị ném).
Trích từ "Các giải pháp lập trình C#" (http://www.dvpub.com.vn/dv/details.aspx?itemid=243)
+ Tăng hiệu quả thực thi và sử dụng bộ nhớ của ứng dụng bằng cách bảo đảm rằng bộ thực thi nạp các kiểu ít được sử dụng chỉ khi nào cần thiết.
+ Biên dịch các kiểu được viết trong C# thành một dạng có thể sử dụng lại được trong các ngôn ngữ .NET khác.
+ Sử dụng các kiểu được phát triển bằng một ngôn ngữ khác bên trong ứng dụng C# của bạn.
--> Sử dụng đối số /target:module (của trình biên dịch C#) để xây dựng mã nguồn C# của bạn thành một module. Sử dụng đối số /addmodule để kết hợp các module hiện có vào assembly của bạn.
Module là các khối cơ bản tạo dựng nên các assembly .NET. Module bao gồm một file đơn chứa:
+ Mã ngôn ngữ trung gian (Microsoft Intermediate Language—MSIL): Được tạo từ mã nguồn C# trong quá trình biên dịch.
+ Siêu dữ liệu (metadata): Mô tả các kiểu nằm trong module.
+ Các tài nguyên (resource): Chẳng hạn icon và string table, được sử dụng bởi các kiểu trong module.
Assembly gồm một hay nhiều module và một manifest. Khi chỉ có một module, module và manifest thường được xây dựng thành một file cho thuận tiện. Khi có nhiều module, assembly là một nhóm luận lý của nhiều file được triển khai như một thể thống nhất. Trong trường hợp này, manifest có thể nằm trong một file riêng hay chung với một trong các module.
Việc xây dựng một assembly từ nhiều module gây khó khăn cho việc quản lý và triển khai assembly; nhưng trong một số trường hợp, cách này có nhiều lợi ích, bao gồm:
• Bộ thực thi sẽ chỉ nạp một module khi các kiểu định nghĩa trong module này được yêu cầu. Do đó, khi có một tập các kiểu mà ứng dụng ít khi dùng, bạn có thể đặt chúng trong một module riêng mà bộ thực thi chỉ nạp khi cần. Việc này có các lợi ích sau:
▪ Tăng hiệu quả thực thi, đặc biệt khi ứng dụng được nạp qua mạng.
▪ Giảm thiểu nhu cầu sử dụng bộ nhớ.
• Khả năng sử dụng nhiều ngôn ngữ khác nhau để viết các ứng dụng chạy trên bộ thực thi ngôn ngữ chung (Common Language Runtime—CLR) là một thế mạnh của .NET Framework. Tuy nhiên, trình biên dịch C# không thể biên dịch mã nguồn được viết bằng Microsoft Visual Basic .NET hay COBOL .NET trong assembly của bạn. Bạn phải sử dụng trình biên dịch của ngôn ngữ đó biên dịch mã nguồn thành MSIL theo một cấu trúc mà trình biên dịch C# có thể hiểu được—đó là module. Tương tự, nếu muốn lập trình viên của các ngôn ngữ khác sử dụng các kiểu được phát triển bằng C#, bạn phải xây dựng chúng thành một module.
Để biên dịch file nguồn ConsoleUtils.cs thành một module, sử dụng lệnh:
csc /target:module ConsoleUtils.cs
Lệnh này sẽ cho kết quả là một file có tên là ConsoleUtils.netmodule. Phần mở rộng netmodule là phần mở rộng mặc định cho module, và tên file trùng với tên file nguồn C#.
Bạn cũng có thể xây dựng một module từ nhiều file nguồn, cho kết quả là một file (module) chứa MSIL và siêu dữ liệu cho các kiểu chứa trong tất cả file nguồn. Ví dụ, lệnh:
csc /target:module ConsoleUtils.cs WindowsUtils.cs
biên dịch hai file nguồn ConsoleUtils.cs và WindowsUtils.cs thành một module có tên là ConsoleUtils.netmodule.
Tên của module được đặt theo tên file nguồn đầu tiên trừ khi bạn chỉ định cụ thể bằng đối số /out. Ví dụ, lệnh:
csc /target:module /out:Utilities.netmodule
ConsoleUtils.cs WindowsUtils.cs
sẽ cho kết quả là file Utilities.netmodule.
Để xây dựng một assembly gồm nhiều module, sử dụng đối số /addmodule. Ví dụ, để xây dựng file thực thi MyFirstApp.exe từ hai module: WindowsUtils.netmodule và ConsoleUtils.netmodule và hai file nguồn: SourceOne.cs và SourceTwo.cs, sử dụng lệnh:
csc /out:MyFirstApp.exe /target:exe
/addmodule:WindowsUtils.netmodule,ConsoleUtils.netm odule
SourceOne.cs SourceTwo.cs
Lệnh này sẽ cho kết quả là một assembly gồm các file sau:
• MyFirstApp.exe: Chứa manifest cũng như MSIL cho các kiểu được khai báo trong hai file nguồn SourceOne.cs và SourceTwo.cs.
• ConsoleUtils.netmodule và WindowsUtils.netmodule: Giờ đây là một phần của assembly nhưng không thay đổi sau khi biên dịch. (Nếu bạn chạy MyFirstApp.exe mà không có các file netmodule, ngoại lệ System.IO.FileNotFoundException sẽ bị ném).
Trích từ "Các giải pháp lập trình C#" (http://www.dvpub.com.vn/dv/details.aspx?itemid=243)
TranVanDucHieu I11c- Tổng số bài gửi : 12
Join date : 25/08/2011
Age : 35
Re: Thảo luận Bài 4
TranHaDucHuy (I11c) đã viết:1. Nhu cầu liên lạc giữa các tiến trình
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
Hầu hết các hệ điều hành đưa ra nhiều cơ chế liên lạc khác nhau, mỗi cơ chế có những đặc tính riêng, và thích hợp trong một hoàn cảnh chuyên biệt.
Mình đang tìm hiiểu thêm về các loại tiến trình. bài viết này minh đang xem .cảm ơn bạn hiền nhé
NguyenTrongHuy(I11C)- Tổng số bài gửi : 18
Join date : 19/09/2011
Update thêm về thông tin Trạng Thái
- Ở tiến trình trạng thái New : có job queue.Khi 1 process được sinh ra, các process sẽ chuyển từ trạng thái New sang trạng thái Ready
- Read: Có read queue. Ở read queue có nhiều process ở trạng thái ready nhưng chỉ có 1 process được CPU phát tín hiệu chuyển sang trạng thái running
- Running :
+ Process nhận được tín hiệu kết thúc (lệnh end, exit...) thì tiền trình sẽ chuyển sang trạng thái Terminated
+ Process nhận được tín hiệu ngắt có nghĩa process bị tiếm quyền CPU (có thể chiếm nhiều thời gian,..)thì chuyển sang trạng thái Ready
+ Khi process chờ 1 tín hiệu I/O hoặc even nào đó để tiếp tục thì chuyển sang Waiting
- Waiting: Sau khi tín hiệu I/O hoặc even kết thúc thì chuyển sang trạng thái Ready
- Read: Có read queue. Ở read queue có nhiều process ở trạng thái ready nhưng chỉ có 1 process được CPU phát tín hiệu chuyển sang trạng thái running
- Running :
+ Process nhận được tín hiệu kết thúc (lệnh end, exit...) thì tiền trình sẽ chuyển sang trạng thái Terminated
+ Process nhận được tín hiệu ngắt có nghĩa process bị tiếm quyền CPU (có thể chiếm nhiều thời gian,..)thì chuyển sang trạng thái Ready
+ Khi process chờ 1 tín hiệu I/O hoặc even nào đó để tiếp tục thì chuyển sang Waiting
- Waiting: Sau khi tín hiệu I/O hoặc even kết thúc thì chuyển sang trạng thái Ready
NguyenTrongHuy(I11C)- Tổng số bài gửi : 18
Join date : 19/09/2011
Tại sao phải quản lý tiến trình ?
Nhằm :
_ Sự công bằng : Các tiến trình chia sẻ CPU một cách công bằng, không có tiến trình nào phải chờ đợi gia hạn để được cấp phát CPU
_ Tính hiệu qủa : Hệ thống phải tận dụng được CPU 100% thời gian
_ Thời gian đáp ứng hợp lý : Cực tiểu hoá thời gian hồi đáp cho các tương tác của người sử dụng
_ Thời gian lưu lại trong hệ thống : Cực tiểu hóa thời gian hoàn tất các tác vụ xử lý theo lô.
_ Thông lượng tối đa : Cực đại hóa số công việc được xử lý trong một đơn vị thời gian
Đây chỉ là lý thuyết còn theo em nghĩ khó mà có thể đạt được tất cả các yếu tố trên vì được cái này thì phải mất cái kia. Bạn nào có góp ý gì xin chỉ giáo
_ Sự công bằng : Các tiến trình chia sẻ CPU một cách công bằng, không có tiến trình nào phải chờ đợi gia hạn để được cấp phát CPU
_ Tính hiệu qủa : Hệ thống phải tận dụng được CPU 100% thời gian
_ Thời gian đáp ứng hợp lý : Cực tiểu hoá thời gian hồi đáp cho các tương tác của người sử dụng
_ Thời gian lưu lại trong hệ thống : Cực tiểu hóa thời gian hoàn tất các tác vụ xử lý theo lô.
_ Thông lượng tối đa : Cực đại hóa số công việc được xử lý trong một đơn vị thời gian
Đây chỉ là lý thuyết còn theo em nghĩ khó mà có thể đạt được tất cả các yếu tố trên vì được cái này thì phải mất cái kia. Bạn nào có góp ý gì xin chỉ giáo
LeMinhDuc (I11C)- Tổng số bài gửi : 39
Join date : 26/08/2011
Trang 4 trong tổng số 13 trang • 1, 2, 3, 4, 5 ... 11, 12, 13
Trang 4 trong tổng số 13 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết