Thảo luận Bài 4
+47
PhanDiecLoi34 (113A)
CaoTheAnh01(113A)
nguyenduchuy19 (113A)
LUUDINHTOAN(I11C)
tranthanhphu49 (113A)
NguyenThiNgocPhuong(113A)
LuuCatTung (113A)
daoquochuy17 (113A)
TranVanTy(113A)
LeThanhNhan45 (113A)
MaiTrieuHung16 (113A)
trantrungnam-HC11TH2A
LeKimHoang (113A)
buidainghia(113A)
NguyenVuLinh12053_I11C
nguyenchithuc(113A)
NguyenThiKimNgan (113A)
nguyenvanlinheban_113a
TranMinhNhat61 (102c)
NguyenVuVien27 (113A)
NguyenVanQuyet57 (113A)
TranVanTien (I12A)
nguyendinhhieu13 (113A)
lechaukhoa(113A)
TranThiThuyQuyen (113A)
TranThanhPhu50 (113A)
VuMinhTan (113A)
DangThiKimKhanh (113A)
NguyenVanNghiem(HC11TH3A)
NguyenPhamTanPhat(113A)
LeVanNhan(I12A)
TranThiThuyHang79 (113A)
DoVanTan(113A)
dothanhnhan44 (113A)
nguyentuannghiaem _(113A)
TranThichThem (113A)
TrangSiMinhHai (113A)
huynhquanghao_I92C
HaHoangCongTien80 (113A)
NguyenThiThuThuy (113A)
Trannguyenkhoa26 (113A)
LeLamThang (113A)
VuDinhThao47 (113A)
PhamQuocAnh02 (113A)
NguyenNgocTrungNam (113A)
NguyenHuuLinh31(113A)
Admin
51 posters
Trang 2 trong tổng số 6 trang
Trang 2 trong tổng số 6 trang • 1, 2, 3, 4, 5, 6
Thảo luận Bài 4
Trình bày những lý do cộng tác giữa các tiến trình( Cooperation Reasons)
những lý do cộng tác (Cooperation Reasons)
- Chia sẻ thông tin (Information Sharing) một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
- Tăng tốc tính toán (Computation speedup): các tiến trình 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.
- Đả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 văn bản, in ấn, duyệt web,lấy file về biên dịch chương trình kiểm tra chính tả.
VD:Nhu cầu nối mạng internet của chúng ta.
những lý do cộng tác (Cooperation Reasons)
- Chia sẻ thông tin (Information Sharing) một tiến trình sử dụng thông tin do tiến trình khác cung cấp.
- Tăng tốc tính toán (Computation speedup): các tiến trình 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.
- Đả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 văn bản, in ấn, duyệt web,lấy file về biên dịch chương trình kiểm tra chính tả.
VD:Nhu cầu nối mạng internet của chúng ta.
LeVanNhan(I12A)- Tổng số bài gửi : 17
Join date : 21/02/2012
Age : 34
Đến từ : Tiền Giang
Đồng bộ hoá liên lạc giữa các tiến trình.
.Đồng bộ hoá liên lạc (Synchronization)
- Gửi thông điệp có chờ (Blocking Send)
- Gửi thông điệp không chờ (Nonblocking Send)
- Nhận thông điệp có chờ (Blocking Receive)
- Nhận thông điệp không chờ (Nonblocking Receive)
- Gửi thông điệp có chờ (Blocking Send)
- Gửi thông điệp không chờ (Nonblocking Send)
- Nhận thông điệp có chờ (Blocking Receive)
- Nhận thông điệp không chờ (Nonblocking Receive)
LeVanNhan(I12A)- Tổng số bài gửi : 17
Join date : 21/02/2012
Age : 34
Đến từ : Tiền Giang
Khối quản lí tiến trình
Một khối điều khiển tiến trình (Process Control Block - PCB) là một cấu trúc dữ liệu trong nhân hệ điều hành chứa thông tin cần thiết để quản lý một tiến trình nhất định.
Tuỳ thuộc vào cài đặt nhưng nói chung PCB trực tiếp hoặc gián tiếp chứa những thông tin như sau:
• Định danh của tiến trình (process identifier hay PID)
• Giá trị các thanh ghi của tiến trình, trong đó đáng chú ý là con trỏ chương trình và con trỏ stack
• Không gian địa chỉ của tiến trình
• Độ ưu tiên (trong đó tiến trình có giá trị cao hơn được ưu tiên trước, ví dụ nice trong các hệ điều hành Unix)
• Thông tin kế toán tiến trình, ví dụ như thời điểm thực thi gần nhất, bao nhiêu thời gian CPU đã sử dụng...
• Con trỏ tới PCB tiếp theo, nghĩa là con trỏ tới tiến trình tiếp theo được chạy
• Thông tin V/R (ví dụ các thiết bị V/R được cấp phát cho tiến trình, danh sách các tệp đang mở...)
Khi chuyển ngữ cảnh, tiến trình đang thực hiện bị dừng lại và một tiến trình khác có cơ hội thực hiện. Nhân dừng việc thực hiện của tiến trình, sao chép các giá trị trong thanh ghi vào PCB và cập nhật thanh ghi với các giá trị của PCB của tiến trình mới.
Vị trí của PCB
Vì PCB chứa những thông tin tối quan trọng đối với tiến trình, nó phải được giữ trong một vùng bộ nhớ được bảo vệ. Trong một số hệ điều hành,, PCB được đặt ở đầu của ngăn xếp nhân của tiến trình
Tuỳ thuộc vào cài đặt nhưng nói chung PCB trực tiếp hoặc gián tiếp chứa những thông tin như sau:
• Định danh của tiến trình (process identifier hay PID)
• Giá trị các thanh ghi của tiến trình, trong đó đáng chú ý là con trỏ chương trình và con trỏ stack
• Không gian địa chỉ của tiến trình
• Độ ưu tiên (trong đó tiến trình có giá trị cao hơn được ưu tiên trước, ví dụ nice trong các hệ điều hành Unix)
• Thông tin kế toán tiến trình, ví dụ như thời điểm thực thi gần nhất, bao nhiêu thời gian CPU đã sử dụng...
• Con trỏ tới PCB tiếp theo, nghĩa là con trỏ tới tiến trình tiếp theo được chạy
• Thông tin V/R (ví dụ các thiết bị V/R được cấp phát cho tiến trình, danh sách các tệp đang mở...)
Khi chuyển ngữ cảnh, tiến trình đang thực hiện bị dừng lại và một tiến trình khác có cơ hội thực hiện. Nhân dừng việc thực hiện của tiến trình, sao chép các giá trị trong thanh ghi vào PCB và cập nhật thanh ghi với các giá trị của PCB của tiến trình mới.
Vị trí của PCB
Vì PCB chứa những thông tin tối quan trọng đối với tiến trình, nó phải được giữ trong một vùng bộ nhớ được bảo vệ. Trong một số hệ điều hành,, PCB được đặt ở đầu của ngăn xếp nhân của tiến trình
LeVanNhan(I12A)- Tổng số bài gửi : 17
Join date : 21/02/2012
Age : 34
Đến từ : Tiền Giang
Phát biểu bài toán Tiêu thụ
Phát biểu bài toán:
• Giả sử có Bộ nhớ đệm (Buffer) bao gồm nhiều khoang (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
• Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
• Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi Buffer đầy, Không được lấy ra khi chưa có.
Trình bày giải thuật:
• Giả sử có Bộ nhớ đệm (Buffer) bao gồm nhiều khoang (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
• Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
• Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi Buffer đầy, Không được lấy ra khi chưa có.
Trình bày giải thuật:
NguyenHuuLinh31(113A)- Tổng số bài gửi : 33
Join date : 19/07/2012
Câu 4: Bài toán với 2 loại tiến trình sản xuất và tiêu thụ
Bài toán sản xuất tiêu thụ được phát biểu chung như sau:
Có một bộ đệm(Buffer) và 2 tiến trình sản xuất Producer và tiến trình tiêu thụ Consumer.Tiến trình Producer lần lượt sản xuất các sản phẩm S1, S2 vào khoang của bộ đệm Buffer.Tiến trình tieu thụ lần lượt lấy các sản phẩm ra khỏi bộ đệm.Công việc của Producer và Consumer cần được đồng bộ hóa tiến trình Consumer không thể lấy sản phẩm ra khi bộ đệm trống, và tiến trình Producer không thể sản xuất khi bộ đệm đầy.
Đồng bộ hóa bằng 2 đèn hiệu semFull và semEmpty.
CODE:
Producer()
{
//Chờ trong khi bộ đệm đầy
WaitForSingleObject(semFull, INFINITE);
// Sản xuất sản phẩm và đưa vào Buffer
ReleaseSemaphore(semEmpty);
//Bộ đệm đã có sản phẩm
}
CODE:
Consumer()
{
//Chờ đến khi có sản phẩm
WaitForSingleObject(semEmpty, INFINITE);
// Tiêu thụ sản phẩm
ReleaseSemaphore(semFull);
//Bộ đệm đã có chỗ trống
}
Hướng I/O và Hướng CPU
Hướng CPU: scan virus, scan registry, defragment hardisk....
( đại khái là những công việc đòi hỏi CPU phải tính toán nhiều, sử dụng nhiều bộ nhớ ( RAM ), và khi nó làm việc thì ta ít chú ý đến nó - vì nó " im hơi lặng tiếng" quá mà
Hướng I/O:Nghe nhạc, xem phim, chơi game....
Phát biểu bài toán sản xuất – tiêu thụ để minh họa 1 hệ thống có nhiều tiến trình cộng tác song song đồnh hành cùng chia sẻ tài nguyên.
* Phát biểu bài toán Sản xuất-Tiêu thụ.
- Giả sử có bộ nhớ đệm (buffer) bao gồm nhiều khoang chứa (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
- Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
- Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi buffer đầy, không được lấy ra khi chưa có sản phẩm.
Tiến trình sản xuất (PRODUCER):
item nextProduced;
while (1)
{
while(((in+1)%BUFFER_SIZE)==out); //quẩn tại đây khi buffer đầy.
buffer[in] = nextProduced;
in = (in+1)%BUFFER_SIZE;
}
Tiến trình tiêu thụ (CONSUMER):
item nextConsumed;
while (1)
{
while(in==out); //quẩn khi buffer rỗng
nextConsumed = buffer[out];
out = (out+1)%BUFFER_SIZE;
}
Có một bộ đệm(Buffer) và 2 tiến trình sản xuất Producer và tiến trình tiêu thụ Consumer.Tiến trình Producer lần lượt sản xuất các sản phẩm S1, S2 vào khoang của bộ đệm Buffer.Tiến trình tieu thụ lần lượt lấy các sản phẩm ra khỏi bộ đệm.Công việc của Producer và Consumer cần được đồng bộ hóa tiến trình Consumer không thể lấy sản phẩm ra khi bộ đệm trống, và tiến trình Producer không thể sản xuất khi bộ đệm đầy.
Đồng bộ hóa bằng 2 đèn hiệu semFull và semEmpty.
CODE:
Producer()
{
//Chờ trong khi bộ đệm đầy
WaitForSingleObject(semFull, INFINITE);
// Sản xuất sản phẩm và đưa vào Buffer
ReleaseSemaphore(semEmpty);
//Bộ đệm đã có sản phẩm
}
CODE:
Consumer()
{
//Chờ đến khi có sản phẩm
WaitForSingleObject(semEmpty, INFINITE);
// Tiêu thụ sản phẩm
ReleaseSemaphore(semFull);
//Bộ đệm đã có chỗ trống
}
Hướng I/O và Hướng CPU
Hướng CPU: scan virus, scan registry, defragment hardisk....
( đại khái là những công việc đòi hỏi CPU phải tính toán nhiều, sử dụng nhiều bộ nhớ ( RAM ), và khi nó làm việc thì ta ít chú ý đến nó - vì nó " im hơi lặng tiếng" quá mà
Hướng I/O:Nghe nhạc, xem phim, chơi game....
Phát biểu bài toán sản xuất – tiêu thụ để minh họa 1 hệ thống có nhiều tiến trình cộng tác song song đồnh hành cùng chia sẻ tài nguyên.
* Phát biểu bài toán Sản xuất-Tiêu thụ.
- Giả sử có bộ nhớ đệm (buffer) bao gồm nhiều khoang chứa (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
- Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
- Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi buffer đầy, không được lấy ra khi chưa có sản phẩm.
Tiến trình sản xuất (PRODUCER):
item nextProduced;
while (1)
{
while(((in+1)%BUFFER_SIZE)==out); //quẩn tại đây khi buffer đầy.
buffer[in] = nextProduced;
in = (in+1)%BUFFER_SIZE;
}
Tiến trình tiêu thụ (CONSUMER):
item nextConsumed;
while (1)
{
while(in==out); //quẩn khi buffer rỗng
nextConsumed = buffer[out];
out = (out+1)%BUFFER_SIZE;
}
HaHoangCongTien80 (113A)- Tổng số bài gửi : 22
Join date : 17/07/2012
Lý do cộng tác trong công việc của các tiến trình
Lý do cộng tác giữa các tiến trình là:
- 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ả,...
HaHoangCongTien80 (113A)- Tổng số bài gửi : 22
Join date : 17/07/2012
Câu 2: 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 của HĐH.
-Khối kiểm soát tiến trình(Process Control Block-PCB) là 1 bảng trong Ram. HĐH lưu lại toàn bộ các công việc của tiến trình.
-Khối kiểm soát tiến trình như là 1 bức ảnh được sao chụp lưu lại trong Ram, để khi chương trình đột xuất đóng thì ta có thể khôi phục lại các chương trình từ Ram.
-Tiến trình có lúc hoạt động và có lúc ngừng, Chúng ta cứ nghĩ tiến trình hoạt động liên tục nhưng thực chất là có ngừng và trước khi ngừng thì sẽ lưu lại ở thanh Ram.
-Vídụ : Các bạn trong lớp đều là tiến trình ng dùng. Nội dung là bảng đen (bộ nhớ dùng chung) và thầy là HĐH. Thầy gọi bạn A lên bảng làm việc, 1 lúc sau thầy gọi bạn B lên bảng vì bạn A đã viết hết bảng nên bạn B hok sử dụng đc vì thế thầy đóng vai trò là HĐH hệ thống nên đã lưu lại nội dung ban A. và bạn B có thể xoá bảng và làm việc. Khi B làm xong thì bạn A tiếp tục làm việc nhưng lại hok còn nội dung, thì thầy( HĐH hệ thống) sẻ giúp bạn A khôi phục lại nội dung. và cứ tiếp tục như thế.
-Khối kiểm soát tiến trình như là 1 bức ảnh được sao chụp lưu lại trong Ram, để khi chương trình đột xuất đóng thì ta có thể khôi phục lại các chương trình từ Ram.
-Tiến trình có lúc hoạt động và có lúc ngừng, Chúng ta cứ nghĩ tiến trình hoạt động liên tục nhưng thực chất là có ngừng và trước khi ngừng thì sẽ lưu lại ở thanh Ram.
-Vídụ : Các bạn trong lớp đều là tiến trình ng dùng. Nội dung là bảng đen (bộ nhớ dùng chung) và thầy là HĐH. Thầy gọi bạn A lên bảng làm việc, 1 lúc sau thầy gọi bạn B lên bảng vì bạn A đã viết hết bảng nên bạn B hok sử dụng đc vì thế thầy đóng vai trò là HĐH hệ thống nên đã lưu lại nội dung ban A. và bạn B có thể xoá bảng và làm việc. Khi B làm xong thì bạn A tiếp tục làm việc nhưng lại hok còn nội dung, thì thầy( HĐH hệ thống) sẻ giúp bạn A khôi phục lại nội dung. và cứ tiếp tục như thế.
NguyenPhamTanPhat(113A)- Tổng số bài gửi : 22
Join date : 17/07/2012
Age : 37
Câu 4: Phát biểu bài toán sản xuất tiêu thụ. Ví dụ minh hoạ.
A.Phát biểu bài toán:
-Giả sử có bộ nhớ đệm (Buffer) là tài nguyên được chia sẻ giữa các tiến trình và chương trình, bào gồm nhiều khoang (Item) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2... vào.
-Tiền trình Consumer lần lượt lấy sàn phẩm ra theo đúng thứ tự.
-Công việc của Producer phải đồng bộ với Consumer. Hok đc đưa sản phẩm vào khi buffer đầy, không đc lấy ra khi chưa có thể đảm bảo tính toàn vẹn giữa các tiến trình.
b.Vídụ: Một lớp học sử dụng chung 1 bảng:
-Mỗi sv 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ề 1 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 rình tiêu thụ.
-Giả sử có bộ nhớ đệm (Buffer) là tài nguyên được chia sẻ giữa các tiến trình và chương trình, bào gồm nhiều khoang (Item) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2... vào.
-Tiền trình Consumer lần lượt lấy sàn phẩm ra theo đúng thứ tự.
-Công việc của Producer phải đồng bộ với Consumer. Hok đc đưa sản phẩm vào khi buffer đầy, không đc lấy ra khi chưa có thể đảm bảo tính toàn vẹn giữa các tiến trình.
b.Vídụ: Một lớp học sử dụng chung 1 bảng:
-Mỗi sv 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ề 1 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 rình tiêu thụ.
NguyenPhamTanPhat(113A)- Tổng số bài gửi : 22
Join date : 17/07/2012
Age : 37
Bài toán Sản xuất-Tiêu thụ với thuật giải dùng kỹ thuật Busy-Waiting
- Tiến trình sản xuất (Producer) tạo ra dòng thông tin để tiến trình tiêu thụ (Consumer) sử dụng.
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
- Ví dụ: Compiler và Assembler vừa là nhà sản xuất vừa là nhà tiêu thụ. Compiler tạo ra mã dùng cho Assembler, tiếp theo Assembler sản sinh mã máy làm đầu vào cho Loader hoặc Linkage Editor.
- Phát biểu bài toán: Bộ nhớ đệm Buffer bao gồm một số hữu hạn các khoang chứa (Items). Producer lần lượt đưa các sản phẩm S1, S2,…vào các khoang của Buffer. Consumer lấy sản phẩm ra theo đúng thứ tự. Công việc của các tiến trình phải đồng bộ với nhau: không đưa ra sản phẩm khi hết chỗ trống, không lấy được sản phẩm khi chưa có.
- Thuật giải dùng kỹ thuật Busy-Waiting (chờ bận) với biến đếm count (chứa số sản phẩm trong Buffer):
+ Producer:
while(1){
while(count == BUFFER_SIZE); // Vòng lặp chờ bận
// Đưa sản phẩm vào Buffer
count++; // Tăng count lên 1
}
+ Consumer:
while(1){
while(count == 0); // Vòng lặp chờ bận
// Lấy sản phẩm từ Buffer
count--; // Giảm count đi 1
}
Ghi chú:
- Vòng lặp chờ bận phải liên tục kiểm tra giá trị biến đếm count, tốn thời gian CPU, dẫn đến giảm hiệu năng hệ thống.
- Có thể không dùng biến đếm count. Khi đó, vòng lặp chờ bận cho Producer được thực thi bằng:
Code:
while(((in+1)%BUFFER_SIZE)==out); // Vòng lặp chờ bận
Còn đối với Consumer thì dùng:
Code:
while(in==out); // Vòng lặp chờ bận
TranThichThem (113A)- Tổng số bài gửi : 41
Join date : 18/07/2012
Age : 34
Một số khái niệm về port và port thông dụng
- Port không phải là " cổng " để "chạy ra chạy vào" mà là một số hiệu ID cho 1 application nào đó.
- Mỗi Application chỉ có thể chạy trên một/nhiều port và mang tính độc quyền, không có Application khác được " chạy ké ".
- Chính vì tính độc quyền nên các Application có thể modify cho phép chạy một port khác với Port default. Ví dụ IIS/Apache làm web server có thể dùng 80 là default nhưng có thể đổi thành 81 82 83 v.v... tùy ý.
- Port cũng có phân chia làm Internal và External .
- Số hiệu từ 1->65535.
Một số cổng thông dụng trong internet:.
1.Cổng 80: Khi một người sử dụng địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80 theo mặc định cho những trang Web.
2.Cổng 81: Khi một người sử dụng nhập địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80. Nếu Cổng thì bị tắc nghẽn, Cổng 81 được sử dụng như một Cổng xen kẽ cho một website hosting nào đó.
3.Cổng 21: Khi người nào đó thử nối tới dịch vụ FTP của các bạn, khách hàng FTP sẽ cố gắng kết nối trên Cổng 21 theo mặc định. Thì cổng 21 mở cho những khách FTP đăng nhập và nối tới server của các bạn
4.Cổng 22: Nếu bạn chạy một SSH Secure Shell, cổng này được yêu cầu cho Khách hàng SSH để nối tới người phục vụ của các bạn.
5.Cổng 23 :Nếu bạn chạy một người phục vụ Telnet, cổng này được yêu cầu cho Khách hàng Telnet để nối tới người phục vụ của các bạn. Telnet có thể được sử dụng cho những cổng khác kiểm tra những công tác dịch vụ, nhưng để sử dụng telnet cho admin và đăng nhập từ xa thì cổng 23 phải mở.
6.Cổng 25: Khi người nào đó gửi một thư từ thông báo tới server SMTP của các bạn, thư từ sẽ cố gắng để đi vào tới server của các bạn trên Cổng 25. Đây là tiêu chuẩn SMTP (thủ tục vận chuyển Thư từ Đơn giản)
7.Cổng 53: DNS
8.Cổng 2525: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ để đi vào tới server của các bạn trên Cổng 25. Cổng 2525 xen kẽ được dùng bởi TZO cho những công tác lưu trữ và truyền lại. Đây là một cổng không tiêu chuẩn, nhưng sẻ hữu ích nếu SMTP (thủ tục vận chuyển Thư từ Đơn giản) bị tắc nghẽn
9.Cổng 110: Khi bạn chạy một máy tính, những người sử dụng sẽ vào theo đường POP3 (Nghi thức cơ quan bưu điện) hay IMAP4 (giao thức truy nhập Thông báo Internet) khôi phục thư từ của họ. POP3 là nghi thức tốt nhất để truy nhập những hòm thư
10.Cổng 119: Khi bạn chạy một server Tin tức, điển hình những khách hàng Tin tức muốn nối tới người phục vụ Tin tức của các bạn sẽ nối trên cổng 119. Cái này chuyển những nhu cầu để mở để chạy server tin tức của mình.
11.Cổng 3389: Chuyển 3389 Là Máy để bàn Từ xa được sử dụng cho Windows. Nếu bạn muốn từ xa kết nối tới máy tính của các bạn để điều khiển từ xa, việc sử dụng máy để bàn Từ xa freeXP yêu cầu cổng 3389 để mở.
12.Cổng 389 : LDAP hay giao thức truy nhập Thư mục Lightweight đang trở nên phổ biến chúng cho sự Truy nhập Thư mục, hay Tên, điện thoại Gửi những Thư mục. Chẳng hạn
LDAP: // LDAP.Bigfoot. Com là một người phục vụ thư mục LDAP.
13.Cổng 143 : IMAP4 hay giao thức truy nhập Thông báo Internet đang trở nên phổ biến hơn và được sử dụng khôi phục Thư từ Internet từ một server từ xa. từ đó tất cả các thông báo đều được cất giữ trên server, Nó dễ dàng trực tuyến, ngoại tuyến và sự sử dụng offline
14.Cổng 443 : Khi bạn chạy một người phục vụ an toàn, những Clients SSL muốn nối tới những server An toàn ,các bạn nối trên cổng 443. Những cổng này được cần để mở để chạy …..
15.Cổng 1503 & 1720 :MS NetMeeting và VOIP cho phép bạn tới host Internet hay gọi là VideoConference. NetMeeting là một sản phẩm tự do mà có thể là được tìm thấy trên Website Microsoft Tại địa chỉ http: // www.microsoft.com /
16.Cổng 5590: Khi bạn chạy một Server VNC để từ xa kiểm soát PC của các bạn, nó sử dụng cổng 5900. VNC sẻ hữu ích nếu bạn muốn từ xa kiểm soát server của các bạn../
17.Cổng 5631: Khi một người phục vụ PCAnywhere được thiết lập nhận được những yêu cầu từ xa, nó tiếp tục nghe TCP cổng 5631. Hostand được cho phép bạn để chạy một PCAnywhere, PCAnywhere này sử dụng Internet để nối với nhau và từ xa kiểm soát PC của các bạn.
- Mỗi Application chỉ có thể chạy trên một/nhiều port và mang tính độc quyền, không có Application khác được " chạy ké ".
- Chính vì tính độc quyền nên các Application có thể modify cho phép chạy một port khác với Port default. Ví dụ IIS/Apache làm web server có thể dùng 80 là default nhưng có thể đổi thành 81 82 83 v.v... tùy ý.
- Port cũng có phân chia làm Internal và External .
- Số hiệu từ 1->65535.
Một số cổng thông dụng trong internet:.
1.Cổng 80: Khi một người sử dụng địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80 theo mặc định cho những trang Web.
2.Cổng 81: Khi một người sử dụng nhập địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80. Nếu Cổng thì bị tắc nghẽn, Cổng 81 được sử dụng như một Cổng xen kẽ cho một website hosting nào đó.
3.Cổng 21: Khi người nào đó thử nối tới dịch vụ FTP của các bạn, khách hàng FTP sẽ cố gắng kết nối trên Cổng 21 theo mặc định. Thì cổng 21 mở cho những khách FTP đăng nhập và nối tới server của các bạn
4.Cổng 22: Nếu bạn chạy một SSH Secure Shell, cổng này được yêu cầu cho Khách hàng SSH để nối tới người phục vụ của các bạn.
5.Cổng 23 :Nếu bạn chạy một người phục vụ Telnet, cổng này được yêu cầu cho Khách hàng Telnet để nối tới người phục vụ của các bạn. Telnet có thể được sử dụng cho những cổng khác kiểm tra những công tác dịch vụ, nhưng để sử dụng telnet cho admin và đăng nhập từ xa thì cổng 23 phải mở.
6.Cổng 25: Khi người nào đó gửi một thư từ thông báo tới server SMTP của các bạn, thư từ sẽ cố gắng để đi vào tới server của các bạn trên Cổng 25. Đây là tiêu chuẩn SMTP (thủ tục vận chuyển Thư từ Đơn giản)
7.Cổng 53: DNS
8.Cổng 2525: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ để đi vào tới server của các bạn trên Cổng 25. Cổng 2525 xen kẽ được dùng bởi TZO cho những công tác lưu trữ và truyền lại. Đây là một cổng không tiêu chuẩn, nhưng sẻ hữu ích nếu SMTP (thủ tục vận chuyển Thư từ Đơn giản) bị tắc nghẽn
9.Cổng 110: Khi bạn chạy một máy tính, những người sử dụng sẽ vào theo đường POP3 (Nghi thức cơ quan bưu điện) hay IMAP4 (giao thức truy nhập Thông báo Internet) khôi phục thư từ của họ. POP3 là nghi thức tốt nhất để truy nhập những hòm thư
10.Cổng 119: Khi bạn chạy một server Tin tức, điển hình những khách hàng Tin tức muốn nối tới người phục vụ Tin tức của các bạn sẽ nối trên cổng 119. Cái này chuyển những nhu cầu để mở để chạy server tin tức của mình.
11.Cổng 3389: Chuyển 3389 Là Máy để bàn Từ xa được sử dụng cho Windows. Nếu bạn muốn từ xa kết nối tới máy tính của các bạn để điều khiển từ xa, việc sử dụng máy để bàn Từ xa freeXP yêu cầu cổng 3389 để mở.
12.Cổng 389 : LDAP hay giao thức truy nhập Thư mục Lightweight đang trở nên phổ biến chúng cho sự Truy nhập Thư mục, hay Tên, điện thoại Gửi những Thư mục. Chẳng hạn
LDAP: // LDAP.Bigfoot. Com là một người phục vụ thư mục LDAP.
13.Cổng 143 : IMAP4 hay giao thức truy nhập Thông báo Internet đang trở nên phổ biến hơn và được sử dụng khôi phục Thư từ Internet từ một server từ xa. từ đó tất cả các thông báo đều được cất giữ trên server, Nó dễ dàng trực tuyến, ngoại tuyến và sự sử dụng offline
14.Cổng 443 : Khi bạn chạy một người phục vụ an toàn, những Clients SSL muốn nối tới những server An toàn ,các bạn nối trên cổng 443. Những cổng này được cần để mở để chạy …..
15.Cổng 1503 & 1720 :MS NetMeeting và VOIP cho phép bạn tới host Internet hay gọi là VideoConference. NetMeeting là một sản phẩm tự do mà có thể là được tìm thấy trên Website Microsoft Tại địa chỉ http: // www.microsoft.com /
16.Cổng 5590: Khi bạn chạy một Server VNC để từ xa kiểm soát PC của các bạn, nó sử dụng cổng 5900. VNC sẻ hữu ích nếu bạn muốn từ xa kiểm soát server của các bạn../
17.Cổng 5631: Khi một người phục vụ PCAnywhere được thiết lập nhận được những yêu cầu từ xa, nó tiếp tục nghe TCP cổng 5631. Hostand được cho phép bạn để chạy một PCAnywhere, PCAnywhere này sử dụng Internet để nối với nhau và từ xa kiểm soát PC của các bạn.
TranThichThem (113A)- Tổng số bài gửi : 41
Join date : 18/07/2012
Age : 34
Mình thêm nội dung cho Phân tích vai trò của khối kiểm soát tiến trình.
Phân tích vai trò của khối kiểm soát tiến trình.
PCB là một cấu trúc dữ liệu được hệ điều hành duy trì cho mỗi tiến trình dùng để chứa các thông tin cần thiết về tiến trình đó. PCB chứa "Bản sao công việc của tiến trình".
Nó lưu lại trạng thái của tiến trình tại thời điểm đang xét . Trạng thái này bao gồm (các địa chỉ liên kết của tiến trình & dữ liệu, số hiệu tiến trình, bộ đếm lệnh, nội dung các thanh ghi, giới hại bộ nhớ của tiến trình, danh sách các file đang mở, các thông tin về thời gian thống kê tiến trình hiện tại).
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 đó. PCB chứa "Bản sao công việc của tiến trình".
Nó lưu lại trạng thái của tiến trình tại thời điểm đang xét . Trạng thái này bao gồm (các địa chỉ liên kết của tiến trình & dữ liệu, số hiệu tiến trình, bộ đếm lệnh, nội dung các thanh ghi, giới hại bộ nhớ của tiến trình, danh sách các file đang mở, các thông tin về thời gian thống kê tiến trình hiện tại).
NguyenVanNghiem(HC11TH3A)- Tổng số bài gửi : 21
Join date : 19/07/2012
Mục tiêu điều phối tiến trình
Bộ điều phối không cung cấp cơ chế, mà đưa ra các quyết định. Các hệ điều hành xây dựng nhiều chiến lược khác nhau để thực hiện việc điều phối, nhưng tựu chung cần đạt được các mục tiêu sau :
a) Sự công bằng ( Fairness) :
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 vô hạn để được cấp phát CPU
b) Tính hiệu qủa (Efficiency) :
Hệ thống phải tận dụng được CPU 100% thời gian.
c) Thời gian đáp ứng hợp lý (Response time) :
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
d) Thời gian lưu lại trong hệ thống ( Turnaround Time) :
Cực tiểu hóa thời gian hoàn tất các tác vụ xử lý theo lô.
e) Thông lượng tối đa (Throughput ) :
Cực đại hóa số công việc được xử lý trong một đơn vị thời gian.
Tuy nhiên thường không thể thỏa mãn tất cả các mục tiêu kể trên vì bản thân chúng có sự mâu thuẫn với nhau mà chỉ có thể dung hòa chúng ở mức độ nào đó.
a) Sự công bằng ( Fairness) :
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 vô hạn để được cấp phát CPU
b) Tính hiệu qủa (Efficiency) :
Hệ thống phải tận dụng được CPU 100% thời gian.
c) Thời gian đáp ứng hợp lý (Response time) :
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
d) Thời gian lưu lại trong hệ thống ( Turnaround Time) :
Cực tiểu hóa thời gian hoàn tất các tác vụ xử lý theo lô.
e) Thông lượng tối đa (Throughput ) :
Cực đại hóa số công việc được xử lý trong một đơn vị thời gian.
Tuy nhiên thường không thể thỏa mãn tất cả các mục tiêu kể trên vì bản thân chúng có sự mâu thuẫn với nhau mà chỉ có thể dung hòa chúng ở mức độ nào đó.
NguyenVanNghiem(HC11TH3A)- Tổng số bài gửi : 21
Join date : 19/07/2012
Các đặc tính của tiến trình
Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệ điều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt được những mục tiêu đề ra. Một số đặc tính của tiến trình cần được quan tâm như tiêu chuẩn điều phối :
a) Tính hướng xuất / nhập của tiến trình ( I/O-boundedness):
Khi một tiến trình nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất ? Hoạt động của các tiến trình như thế thường bao gồm nhiều lượt sử dụng CPU , mỗi lượt trong một thời gian khá ngắn.
b) Tính hướng xử lý của tiến trình ( CPU-boundedness):
Khi một tiến trình nhận được CPU, nó có khuynh hướng sử dụng CPU đến khi hết thời gian dành cho nó ? Hoạt động của các tiến trình như thế thường bao gồm một số ít lượt sử dụng CPU , nhưng mỗi lượt trong một thời gian đủ dài.
c) Tiến trình tương tác hay xử lý theo lô :
Người sử dụng theo kiểu tương tác thường yêu cầu được hồi đáp tức thời đối với các yêu cầu của họ, trong khi các tiến trình của tác vụ được xử lý theo lô nói chung có thể trì hoãn trong một thời gian chấp nhận được.
d) Độ ưu tiên của tiến trình :
Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó, một cách hợp lý, các tiến trình quan trọng hơn ( có độ ưu tiên cao hơn) cần được ưu tiên hơn.
e) Thời gian đã sử dụng CPU của tiến trình :
Một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống . Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.
f) Thời gian còn lại tiến trình cần để hoàn tất :
Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách cho các tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước. Tuy nhiên đáng tiếc là rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử lý.
a) Tính hướng xuất / nhập của tiến trình ( I/O-boundedness):
Khi một tiến trình nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất ? Hoạt động của các tiến trình như thế thường bao gồm nhiều lượt sử dụng CPU , mỗi lượt trong một thời gian khá ngắn.
b) Tính hướng xử lý của tiến trình ( CPU-boundedness):
Khi một tiến trình nhận được CPU, nó có khuynh hướng sử dụng CPU đến khi hết thời gian dành cho nó ? Hoạt động của các tiến trình như thế thường bao gồm một số ít lượt sử dụng CPU , nhưng mỗi lượt trong một thời gian đủ dài.
c) Tiến trình tương tác hay xử lý theo lô :
Người sử dụng theo kiểu tương tác thường yêu cầu được hồi đáp tức thời đối với các yêu cầu của họ, trong khi các tiến trình của tác vụ được xử lý theo lô nói chung có thể trì hoãn trong một thời gian chấp nhận được.
d) Độ ưu tiên của tiến trình :
Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó, một cách hợp lý, các tiến trình quan trọng hơn ( có độ ưu tiên cao hơn) cần được ưu tiên hơn.
e) Thời gian đã sử dụng CPU của tiến trình :
Một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống . Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.
f) Thời gian còn lại tiến trình cần để hoàn tất :
Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách cho các tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước. Tuy nhiên đáng tiếc là rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử lý.
NguyenVanNghiem(HC11TH3A)- Tổng số bài gửi : 21
Join date : 19/07/2012
Mô hình luân chuyển CPU giữa 2 tiến trình
* Tiến trình P1: vào hàng đợi Job-Queue ở trạng thái New, sẽ đợi 1 khoảng thời gian của quá trình điều phối chậm (Scheduler Long Term) của hệ điều hành(HĐH) để chọn tiến trình, sau khi được O.S chọn, P1 chuyển sang hàng đợi reday quueue và ở trạng thái Ready. Lúc này P1 chỉ đợi cấp CPU và running.
* Sau một khỏang thời gian running, tiến trình P2 xuất hiện. Lúc này, hệ điều hành sẽ ghi lại thông tin của P1 vào thanh PCB1 bao gồm những thông tin: con trỏ, trạng thái của P1, số hiệu của tiến trình P1, Bộ đếm P1, nội dung của P1…Và chuyển P1 sang hàng đợi Waiting và chuyển trạng thái Ready. Lúc này, P2 sẽ được cấp CPU và running. Và sau một khỏang thời gian running, P2 cũng sẽ chuyển sang hàng đợi waiting và chuyển trạng thái ready, lúc này HĐH cũng ghi lại thông tin vào thanh ghi PCB2 như đã làm ở P1. Sau đó, HĐH sẽ load lại thông tin của PCB1 và P1 sẽ tiếp tục running. Quá trình này cũng sẽ lập lại cho P2. Đển khi P1 và P2 kết thúc.
* Sau một khỏang thời gian running, tiến trình P2 xuất hiện. Lúc này, hệ điều hành sẽ ghi lại thông tin của P1 vào thanh PCB1 bao gồm những thông tin: con trỏ, trạng thái của P1, số hiệu của tiến trình P1, Bộ đếm P1, nội dung của P1…Và chuyển P1 sang hàng đợi Waiting và chuyển trạng thái Ready. Lúc này, P2 sẽ được cấp CPU và running. Và sau một khỏang thời gian running, P2 cũng sẽ chuyển sang hàng đợi waiting và chuyển trạng thái ready, lúc này HĐH cũng ghi lại thông tin vào thanh ghi PCB2 như đã làm ở P1. Sau đó, HĐH sẽ load lại thông tin của PCB1 và P1 sẽ tiếp tục running. Quá trình này cũng sẽ lập lại cho P2. Đển khi P1 và P2 kết thúc.
NguyenVanNghiem(HC11TH3A)- Tổng số bài gửi : 21
Join date : 19/07/2012
Ý Nghĩa Củ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
#include
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
#include
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).
NguyenVanNghiem(HC11TH3A)- Tổng số bài gửi : 21
Join date : 19/07/2012
Re: Thảo luận Bài 4
[quote="DoVanTan(113A)"]
Khi một tiến trình nhận được CPU nó có khuynh hướng sử dụng CPU đến khi hết thời gian giành cho nó??Hoạt động của các tiến trình như thế thường bao gồm một số ít lược sử dụng CPU , nhưng mỗi lượt trong một thời gian đủ dài..Nếu hướng CPU hết thì CPU luôn bận , tiến trình chờ đợi lâu ..
Hướng I/O
Khi một tiến trình nhận được CPU nó chủ yếu chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất ??Hoạt động của các tiến trình như thế thường bao gồm nhiều llược sử dụng CPU , nhưng mỗi lượt trong một thời gian khá ngắn . Chỉ hướng I/O hết thì CPU sẽ "không có việc làm " , lãng phí CPU , lãng phí tài nguyên ...
Nên phải phối hợp cân đối hai loại hướng tiến trình CPU và hướng I/O ....
Thanks!!!!!
TrangSiMinhHai (113A) đã viết:Câu hỏi thảo luận:
- Tại sao hướng CPU hết là không tốt?
- Tại sao hướng I/O hết là không tốt?
Cho ví dụ minh họa.
Khi một tiến trình nhận được CPU nó có khuynh hướng sử dụng CPU đến khi hết thời gian giành cho nó??Hoạt động của các tiến trình như thế thường bao gồm một số ít lược sử dụng CPU , nhưng mỗi lượt trong một thời gian đủ dài..Nếu hướng CPU hết thì CPU luôn bận , tiến trình chờ đợi lâu ..
Hướng I/O
Khi một tiến trình nhận được CPU nó chủ yếu chỉ sử dụng CPU đến khi phát sinh một yêu cầu nhập xuất ??Hoạt động của các tiến trình như thế thường bao gồm nhiều llược sử dụng CPU , nhưng mỗi lượt trong một thời gian khá ngắn . Chỉ hướng I/O hết thì CPU sẽ "không có việc làm " , lãng phí CPU , lãng phí tài nguyên ...
Nên phải phối hợp cân đối hai loại hướng tiến trình CPU và hướng I/O ....
Thanks!!!!!
DangThiKimKhanh (113A)- Tổng số bài gửi : 32
Join date : 18/07/2012
Tiến trình là gi?
Theo định nghĩa trực quan và đơn giản nhất, tiến trình là một chương trình đang trong quá trình thực hiện. Đa số máy tính hiện nay cho phép thực hiện nhiều chương trình khác nhau cùng một lúc.
Ví dụ: ta có thế vửa chạy trình duyệt vừa soạn thảo văn bản và nhận thư điện tử.
Có hai đặc điểm để phân biệt tiến trình với chương trình.
- Thứ nhất, chương trình là một thực thể tĩnh, không thay đổi theo thời gian, trong khi tiến trình là thực thể động. Chương trình là tập hợp các lệnh và dữ liệu chứa trong file gọi là file chương trình hoặc file thực hiện được.
Ví dụ: ta có thế vửa chạy trình duyệt vừa soạn thảo văn bản và nhận thư điện tử.
Có hai đặc điểm để phân biệt tiến trình với chương trình.
- Thứ nhất, chương trình là một thực thể tĩnh, không thay đổi theo thời gian, trong khi tiến trình là thực thể động. Chương trình là tập hợp các lệnh và dữ liệu chứa trong file gọi là file chương trình hoặc file thực hiện được.
LeVanNhan(I12A)- Tổng số bài gửi : 17
Join date : 21/02/2012
Age : 34
Đến từ : Tiền Giang
TRÌNH ĐIỀU PHỐI CHẬM VÀ TRÌNH ĐIỀU PHỐI NHANH
-Đ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 . Mục đích nhằm cân bằng tải giữa hai 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ủa cân bằng tải trong điều phối chậm:
- Nếu hướng CPU nhiều thì CPU luôn trong trạng thái bận, dẫn đến việc nhiều tiến trình buộc phải chờ.
- Nếu hướng I/O nhiều thì CPU luôn rỗi -> lãng phí CPU.
Vd: Trong công ty có 1 chiếc ô tô, có nhiều người có khuynh hướng sử dụng ô tô để phục vụ công viêc ở xa, nhưng cũng có nhiều người không sử dụng ô tô mà ở lại công ty để nghiên cứu. Vậy nên công ty phải cách để cân bằng giữa hướng ô tô và hướng nghiên cứu.
-Đ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: trong một lớp học người giảng viên gọi nhiều bạn lên kiểm tra bài (điều phối chậm) đang trong job queue , ví dụ là 7 bạn được chọn để đưa vào Ready queue sau đó mới gọi liên tục 1 trong 7 bạn này lên bảng (trình điều phối nhanh) .
Vd: các học sinh đã được chọn để lên bảng thì họ đã biết công việc của mình là phải làm gì .
Nhu cầu xử lý đồng hành .
Có 2 động lực chính khiến cho các hệ điều hành hiện đại thường hỗ trợ môi trường đa nhiệm (multitask) trong đó chấp nhận nhiều tác vụ thực hiện đồng thời trên cùng một máy tính :
- Tăng hiệu suất sử dụng CPU
Phần lớn các công việc khi thi hành đều trải qua nhiều chu kỳ xử lý (sử dụng CPU) và chu kỳ nhập xuất (sử dụng các thiết bị nhập xuất) xen kẽ như sau :
CPU IO CPU IO CPU
Nếu chỉ có 1 tiến trình duy nhất trong hệ thống, thì vào các chu kỳ IO của công việc, CPU sẽ hoàn toàn nhàn rỗi. Ý tưởng tăng cường số lượng công việc trong hệ thống là để tận dụng CPU : nếu công việc 1 xử lý IO, thì có thể sử dụng CPU để thực hiện công việc 2...
Khi đó CPU, bộ nhớ và các tài nguyên khác sẽ được tận dụng tối đa, nâng cao hiệu suất sử dụng tài nguyên.
- Tăng tốc độ xử lý
Trong các trường hợp đó, cần có một mô hình xử lý đồng hành thích hợp. Trên máy tính có cấu hình nhiều CPU, hỗ trợ xử lý song song (multiprocessing) thật sự, điều này sẽ giúp tăng hiệu quả thi hành của hệt thống đáng kể.
+ 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ủa cân bằng tải trong điều phối chậm:
- Nếu hướng CPU nhiều thì CPU luôn trong trạng thái bận, dẫn đến việc nhiều tiến trình buộc phải chờ.
- Nếu hướng I/O nhiều thì CPU luôn rỗi -> lãng phí CPU.
Vd: Trong công ty có 1 chiếc ô tô, có nhiều người có khuynh hướng sử dụng ô tô để phục vụ công viêc ở xa, nhưng cũng có nhiều người không sử dụng ô tô mà ở lại công ty để nghiên cứu. Vậy nên công ty phải cách để cân bằng giữa hướng ô tô và hướng nghiên cứu.
-Đ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: trong một lớp học người giảng viên gọi nhiều bạn lên kiểm tra bài (điều phối chậm) đang trong job queue , ví dụ là 7 bạn được chọn để đưa vào Ready queue sau đó mới gọi liên tục 1 trong 7 bạn này lên bảng (trình điều phối nhanh) .
Vd: các học sinh đã được chọn để lên bảng thì họ đã biết công việc của mình là phải làm gì .
Nhu cầu xử lý đồng hành .
Có 2 động lực chính khiến cho các hệ điều hành hiện đại thường hỗ trợ môi trường đa nhiệm (multitask) trong đó chấp nhận nhiều tác vụ thực hiện đồng thời trên cùng một máy tính :
- Tăng hiệu suất sử dụng CPU
Phần lớn các công việc khi thi hành đều trải qua nhiều chu kỳ xử lý (sử dụng CPU) và chu kỳ nhập xuất (sử dụng các thiết bị nhập xuất) xen kẽ như sau :
CPU IO CPU IO CPU
Nếu chỉ có 1 tiến trình duy nhất trong hệ thống, thì vào các chu kỳ IO của công việc, CPU sẽ hoàn toàn nhàn rỗi. Ý tưởng tăng cường số lượng công việc trong hệ thống là để tận dụng CPU : nếu công việc 1 xử lý IO, thì có thể sử dụng CPU để thực hiện công việc 2...
Khi đó CPU, bộ nhớ và các tài nguyên khác sẽ được tận dụng tối đa, nâng cao hiệu suất sử dụng tài nguyên.
- Tăng tốc độ xử lý
Trong các trường hợp đó, cần có một mô hình xử lý đồng hành thích hợp. Trên máy tính có cấu hình nhiều CPU, hỗ trợ xử lý song song (multiprocessing) thật sự, điều này sẽ giúp tăng hiệu quả thi hành của hệt thống đáng kể.
LeVanNhan(I12A)- Tổng số bài gửi : 17
Join date : 21/02/2012
Age : 34
Đến từ : Tiền Giang
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ả,...
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ả,...
LeVanNhan(I12A)- Tổng số bài gửi : 17
Join date : 21/02/2012
Age : 34
Đến từ : Tiền Giang
Quản lý tiến trình trong linux
Phân loại tiến trình: 3 loại
Interactive process (tiến trình đối thoại)
Là tiến trình khởi động và quản lý bởi shell, kể cả các tiến trình foreground hoặc background.
Batch process
Tiến trình không gắn liền với terminal (tty) và được nằm trong hàng đợi để lần lượt thực hiện.
Daemon process (Disk And Execution MONitor)
Là tiến trình chạy ở chế độ ngầm và được khởi động từ đầu. Các daemon thường được hệ thống phát sinh tự động và có thể hoạt động liên tục hay phát sinh định kỳ.
Hầu hết các dịch vụ mạng là các tiến trình daemon, tên tiến trình kết thúc bằng ký tự “d” như: inetd, named, httpd…
Hiển thị thông tin tiến trình – lệnh ps
Để biết thông tin các tiến trình hiện hành ta sử dụng:
1. -e: hiển thị thông tin về mỗi tiến trình.
-l: hiển thị thông tin đầy đủ tiến trình.
-f: hiển thị thông tin về tiến trình cha.
-a: hiển thị tất cả các tiến trình.
Lưu ý: dòng lệnh ps –aux: liệt kê danh sách các tiến trình đang chạy cùng các thông tin của nó như:
Chủ nhân của tiến trình (owner), mã số nhận diện tiến trình (PID), thời gian hiện sử dụng CPU (%CPU), mức chiếm dụng bộ nhớ của tiến trình (%MEM), trạng thái tiến trình (STAT) và các thông tin khác.
Một số trạng thái của tiến trình thường gặp: R-đang thi hành, S-đang bị đóng, Z-ngừng thi hành, W-không đủ bộ nhớ…
Hiển thị thông tin sử dụng tài nguyên – lệnh top
Hiển thị một danh sách các tiến trình hệ thống theo thời gian thực. Nó thống kê số lượng các tiến trình cùng trạng thái của chúng, tình trạng sử dụng CPU, bộ nhớ …
top [option]
1. -d time: chỉ ra khoảng thời gian trễ time giữa 2 lần cập nhật thông tin trạng thái (mặc định là 5 giây)
-p [pid]: chỉ theo dõi các tiến trình có mã pid
-c: hiển thị đầy đủ dòng lệnh thay vì hiển thị tên lệnh tạo tiến trình.
-a: hiển thị tất cả các tiến trình.
Một điểm khác biệt giữa top và ps là nó cho phép ta thi hành các lệnh của bản thân nó trong quá trình nó đang hiển thị thông tin.
Dừng một tiến trình – lệnh kill
Lệnh kill thường được sử dụng để ngừng thi hành một tiến trình.
kill [signal]
1. signal: là một số hay tên của tín hiệu được gởi tới tiến trình.
PID: mã số nhận diện tiến trình muốn dừng.
Lệnh kill có thể gởi bất kỳ tín hiệu signal nào tới một tiến trình, nhưng theo mặc định nó gởi tín hiệu 15, TERM (là tín hiệu kết thúc chương trình).
Lệnh kill -9 PID: ngừng thi hành tiến trình mà không bị các tiến trình khác can thiệp (tín hiệu 9, KILL).
Super-user mới có quyền dừng tất cả các tiến trình, còn người sử dụng chỉ được dừng các tiến trình của mình.
Các signal thường dùng lệnh kill bao gồm:
Tên Giá trị Tác động
SIGHUP 1 - Hangup (gọi lại tiến trình)
SIGINT 2 - Ngắt từ bàn phím (Ctrl+C)
SIGKILL 9 - Hủy tiến trình
SIGTERM 15 - Kết thúc tiến trình
SIGSTOP 17,19,23: - Dừng tiến trình.
Khi kết thúc một tiến trình hay một chuỗi các tiến trình, thông thường nên tiến hành thử với tín hiệu ít gây nguy hiểm nhất, SIGTERM, nếu không được mới sử dụng các tín hiệu INT hay KILL.
Hiển thị các tiến trình ngầm, thay đổi chế độ cho các tiến trình
Lệnh jobs: Hiển thị các tiến trình ngầm (background)
Ký hiệu + chỉ ra tác vụ đang được xử lý
Ký hiệu – chỉ ra tác vụ sẽ được xử lý kế tiếp
fg: chuyển các tiến trình background -> foreground
$ fg %3 (mã số tác vụ của tiến trình ngầm)
bg: chuyển các tiến trình foreground -> background.
Lưu ý: phải tạm dừng bằng cách nhấn tổ hợp phím (ctrl+z), và sau đó mới chuyển nó sang chế độ ngầm bằng lệnh bg
$ cat vd.txt > abcdef
ctrl + z
$ bg
(lệnh cat sẽ nạp chuỗi abcdef vào file vd.txt, có nhiều cách kết thúc quá trình nạp chuỗi này, nhưng muốn dùng lệnh bg thì phải kết thúc bằng tổ hợp phím ctrl+z)
Một số lệnh xem về hệ thống : free, ps, w, vmstat, iostat, ifstat, netstat v.v
Interactive process (tiến trình đối thoại)
Là tiến trình khởi động và quản lý bởi shell, kể cả các tiến trình foreground hoặc background.
Batch process
Tiến trình không gắn liền với terminal (tty) và được nằm trong hàng đợi để lần lượt thực hiện.
Daemon process (Disk And Execution MONitor)
Là tiến trình chạy ở chế độ ngầm và được khởi động từ đầu. Các daemon thường được hệ thống phát sinh tự động và có thể hoạt động liên tục hay phát sinh định kỳ.
Hầu hết các dịch vụ mạng là các tiến trình daemon, tên tiến trình kết thúc bằng ký tự “d” như: inetd, named, httpd…
Hiển thị thông tin tiến trình – lệnh ps
Để biết thông tin các tiến trình hiện hành ta sử dụng:
1. -e: hiển thị thông tin về mỗi tiến trình.
-l: hiển thị thông tin đầy đủ tiến trình.
-f: hiển thị thông tin về tiến trình cha.
-a: hiển thị tất cả các tiến trình.
Lưu ý: dòng lệnh ps –aux: liệt kê danh sách các tiến trình đang chạy cùng các thông tin của nó như:
Chủ nhân của tiến trình (owner), mã số nhận diện tiến trình (PID), thời gian hiện sử dụng CPU (%CPU), mức chiếm dụng bộ nhớ của tiến trình (%MEM), trạng thái tiến trình (STAT) và các thông tin khác.
Một số trạng thái của tiến trình thường gặp: R-đang thi hành, S-đang bị đóng, Z-ngừng thi hành, W-không đủ bộ nhớ…
Hiển thị thông tin sử dụng tài nguyên – lệnh top
Hiển thị một danh sách các tiến trình hệ thống theo thời gian thực. Nó thống kê số lượng các tiến trình cùng trạng thái của chúng, tình trạng sử dụng CPU, bộ nhớ …
top [option]
1. -d time: chỉ ra khoảng thời gian trễ time giữa 2 lần cập nhật thông tin trạng thái (mặc định là 5 giây)
-p [pid]: chỉ theo dõi các tiến trình có mã pid
-c: hiển thị đầy đủ dòng lệnh thay vì hiển thị tên lệnh tạo tiến trình.
-a: hiển thị tất cả các tiến trình.
Một điểm khác biệt giữa top và ps là nó cho phép ta thi hành các lệnh của bản thân nó trong quá trình nó đang hiển thị thông tin.
Dừng một tiến trình – lệnh kill
Lệnh kill thường được sử dụng để ngừng thi hành một tiến trình.
kill [signal]
1. signal: là một số hay tên của tín hiệu được gởi tới tiến trình.
PID: mã số nhận diện tiến trình muốn dừng.
Lệnh kill có thể gởi bất kỳ tín hiệu signal nào tới một tiến trình, nhưng theo mặc định nó gởi tín hiệu 15, TERM (là tín hiệu kết thúc chương trình).
Lệnh kill -9 PID: ngừng thi hành tiến trình mà không bị các tiến trình khác can thiệp (tín hiệu 9, KILL).
Super-user mới có quyền dừng tất cả các tiến trình, còn người sử dụng chỉ được dừng các tiến trình của mình.
Các signal thường dùng lệnh kill bao gồm:
Tên Giá trị Tác động
SIGHUP 1 - Hangup (gọi lại tiến trình)
SIGINT 2 - Ngắt từ bàn phím (Ctrl+C)
SIGKILL 9 - Hủy tiến trình
SIGTERM 15 - Kết thúc tiến trình
SIGSTOP 17,19,23: - Dừng tiến trình.
Khi kết thúc một tiến trình hay một chuỗi các tiến trình, thông thường nên tiến hành thử với tín hiệu ít gây nguy hiểm nhất, SIGTERM, nếu không được mới sử dụng các tín hiệu INT hay KILL.
Hiển thị các tiến trình ngầm, thay đổi chế độ cho các tiến trình
Lệnh jobs: Hiển thị các tiến trình ngầm (background)
Ký hiệu + chỉ ra tác vụ đang được xử lý
Ký hiệu – chỉ ra tác vụ sẽ được xử lý kế tiếp
fg: chuyển các tiến trình background -> foreground
$ fg %3 (mã số tác vụ của tiến trình ngầm)
bg: chuyển các tiến trình foreground -> background.
Lưu ý: phải tạm dừng bằng cách nhấn tổ hợp phím (ctrl+z), và sau đó mới chuyển nó sang chế độ ngầm bằng lệnh bg
$ cat vd.txt > abcdef
ctrl + z
$ bg
(lệnh cat sẽ nạp chuỗi abcdef vào file vd.txt, có nhiều cách kết thúc quá trình nạp chuỗi này, nhưng muốn dùng lệnh bg thì phải kết thúc bằng tổ hợp phím ctrl+z)
Một số lệnh xem về hệ thống : free, ps, w, vmstat, iostat, ifstat, netstat v.v
TranThichThem (113A)- Tổng số bài gửi : 41
Join date : 18/07/2012
Age : 34
Tiến trình và các trạng thái
1.Tiến trình :
-Tiến trình là một chương trình đang trong quá trình thực hiện
-Tiến trình được sinh ra khi chương trình được tải vào bộ nhớ để thực hiện
+Tiến trình người dùng
+ Tiến trình hệ thống
2. Trạng thái của tiến trình:
Phân biệt theo 2 trạng thái: chạy và không chạy
=> Không phản ánh đầy đủ thông tin về trạng thái tiến trình
=> Mô hình 5 trạng thái: mới khởi tạo, sẵn sàng, chạy, chờ đợi, kết thúc
Mới khởi tạo: tiến trình đang được tạo ra
Sẵn sàng: tiến trình chờ được cấp CPU để thực hiện lệnh của mình
Chạy: lệnh của tiến trình được CPU thực hiện
Chờ đợi: tiến trình chờ đợi một sự kiện gì đó xảy ra (blocked)
Kết thúc: tiến trình đã kết thúc việc thực hiện nhưng vẫn chưa bị xóa
-Tiến trình là một chương trình đang trong quá trình thực hiện
-Tiến trình được sinh ra khi chương trình được tải vào bộ nhớ để thực hiện
+Tiến trình người dùng
+ Tiến trình hệ thống
2. Trạng thái của tiến trình:
Phân biệt theo 2 trạng thái: chạy và không chạy
=> Không phản ánh đầy đủ thông tin về trạng thái tiến trình
=> Mô hình 5 trạng thái: mới khởi tạo, sẵn sàng, chạy, chờ đợi, kết thúc
Mới khởi tạo: tiến trình đang được tạo ra
Sẵn sàng: tiến trình chờ được cấp CPU để thực hiện lệnh của mình
Chạy: lệnh của tiến trình được CPU thực hiện
Chờ đợi: tiến trình chờ đợi một sự kiện gì đó xảy ra (blocked)
Kết thúc: tiến trình đã kết thúc việc thực hiện nhưng vẫn chưa bị xóa
TranThichThem (113A)- Tổng số bài gửi : 41
Join date : 18/07/2012
Age : 34
So sánh Job Queue và Ready Queue
Job Queue: là hàng chờ công việc, chứa các tiến trình chờ được vận hành.
Ready Queue: là hàng chờ sẵn sàng, chứa các tiến trình chờ được cấp CPU.
Giống nhau:
- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.
Khác nhau:
- Dùng giải thuật điều phối chậm(Long - term Scheduler) để đưa các tiến trình từ Job Queue vào Ready Queue.
- Dùng giải thuật điều phối nhanh(Short - term Scheduler) chọn các tiến trình trong Ready Queue để cấp CPU.
Job Queue : Có nhiều thời gian xử lý hơn.
Ready Queue : Có ít thời gian so với Job Queue.
Ready Queue: là hàng chờ sẵn sàng, chứa các tiến trình chờ được cấp CPU.
Giống nhau:
- Đều là các hàng chờ chứa các tiến trình cần vận hành.
- Đều cần thuật giải điều phối để sắp xếp các tiến trình.
Khác nhau:
- Dùng giải thuật điều phối chậm(Long - term Scheduler) để đưa các tiến trình từ Job Queue vào Ready Queue.
- Dùng giải thuật điều phối nhanh(Short - term Scheduler) chọn các tiến trình trong Ready Queue để cấp CPU.
Job Queue : Có nhiều thời gian xử lý hơn.
Ready Queue : Có ít thời gian so với Job Queue.
VuMinhTan (113A)- Tổng số bài gửi : 29
Join date : 30/07/2012
Re: Thảo luận Bài 4
- Điều phối chậm sẽ tối ưu được 2 vấn đề: Nhập Xuất & xử lý của CPU.
Tại sao ta HĐH không hướng nhập xuất nhiều hoặc hướng CPU nhiều ?
+ Hướng nhập xuất nhiều thì CPU luôn phải ở trạng thái chờ dẫn đến lãng phí tài nguyên CPU.
+ Hướng CPU nhiều làm cho CPU phải tính toán liên tục dẫn đến CPU luôn bận và không xử lý được các tiến trình khác.
Tại sao ta HĐH không hướng nhập xuất nhiều hoặc hướng CPU nhiều ?
+ Hướng nhập xuất nhiều thì CPU luôn phải ở trạng thái chờ dẫn đến lãng phí tài nguyên CPU.
+ Hướng CPU nhiều làm cho CPU phải tính toán liên tục dẫn đến CPU luôn bận và không xử lý được các tiến trình khác.
TranThanhPhu50 (113A)- Tổng số bài gửi : 14
Join date : 18/07/2012
Phát biểu bài toán Sản xuất-Tiêu thụ và trình bày Thuật giải với Bộ đệm thực thi bằng mảng xoay vòng.
Phát biểu bài toán:
+ Giả sử có Bộ nhớ đệm (Buffer) bao gồm nhiều khoang (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
+ Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
+ Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi Buffer đầy, Không được lấy ra khi chưa có.
Trình bày giải thuật:
PRODUCER
item nextProduced;
while (1)
{
while(((in+1)%BUFFER_SIZE)==out); //quẩn tại đây khi buffer đầy.
buffer[in] = nextProduced;
in = (in+1)%BUFFER_SIZE;
}
-----------------------------------------------------------------------------------------------------------------------------------------
CONSUMER
item nextConsumed;
while (1)
{
while(in==out); //quẩn khi buffer rỗng
nextConsumed = buffer[out];
out = (out+1)%BUFFER_SIZE;
}
+ Giả sử có Bộ nhớ đệm (Buffer) bao gồm nhiều khoang (Items) được tiến trình Producer lần lượt đưa các sản phẩm S1, S2,... vào.
+ Tiến trình Consumer lần lượt lấy sản phẩm ra theo đúng thứ tự.
+ Công việc của Producer phải đồng bộ với Consumer: Không được đưa sản phẩm vào khi Buffer đầy, Không được lấy ra khi chưa có.
Trình bày giải thuật:
PRODUCER
item nextProduced;
while (1)
{
while(((in+1)%BUFFER_SIZE)==out); //quẩn tại đây khi buffer đầy.
buffer[in] = nextProduced;
in = (in+1)%BUFFER_SIZE;
}
-----------------------------------------------------------------------------------------------------------------------------------------
CONSUMER
item nextConsumed;
while (1)
{
while(in==out); //quẩn khi buffer rỗng
nextConsumed = buffer[out];
out = (out+1)%BUFFER_SIZE;
}
TranThichThem (113A)- Tổng số bài gửi : 41
Join date : 18/07/2012
Age : 34
so sánh VB6 với VB.net ?
* ưu điểm của VB.net
- Giao diện thiết kế đẹp.
- cơ chế đánh dấu sai mã thật hay.
- Có thể tương tác với các ngôn ngữ khác.
* nhược điểm:
- đòi hỏi cấu hình máy phải cao.
- phải cài Frame Work mới sử dụng được.
* ưu điểm VB 6
- cấu hình thấp vẫn chạy được và chạy được ở tất cả các máy.
Tóm lại :
VB6 vẫn là nhất chứ , chỉ có hơi khó về thuật toán tí , mới không mang giao diện không đẹp bằng vb.net chứ vẫn tốt hơn , với lại phần mềm viết trên vb.net đòi hỏi phải có net.framework mới chạy được còn vb6 thì chạy ngon chả cần gì cả ,bạn thấy đó không phải máy nào cũng cài net.framework đâu.
- Giao diện thiết kế đẹp.
- cơ chế đánh dấu sai mã thật hay.
- Có thể tương tác với các ngôn ngữ khác.
* nhược điểm:
- đòi hỏi cấu hình máy phải cao.
- phải cài Frame Work mới sử dụng được.
* ưu điểm VB 6
- cấu hình thấp vẫn chạy được và chạy được ở tất cả các máy.
Tóm lại :
VB6 vẫn là nhất chứ , chỉ có hơi khó về thuật toán tí , mới không mang giao diện không đẹp bằng vb.net chứ vẫn tốt hơn , với lại phần mềm viết trên vb.net đòi hỏi phải có net.framework mới chạy được còn vb6 thì chạy ngon chả cần gì cả ,bạn thấy đó không phải máy nào cũng cài net.framework đâu.
TranThichThem (113A)- Tổng số bài gửi : 41
Join date : 18/07/2012
Age : 34
Trang 2 trong tổng số 6 trang • 1, 2, 3, 4, 5, 6
Similar topics
» Giải giúp bài RRS này nhé
» Thảo luận các vấn đề của Môn học
» Thảo luận Bài 3
» Thảo luận bài 4
» Thảo luận Bài 7
» Thảo luận các vấn đề của Môn học
» Thảo luận Bài 3
» Thảo luận bài 4
» Thảo luận Bài 7
Trang 2 trong tổng số 6 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết