Thảo luận Bài 7
+82
NguyenVanQuoc (I22B)
Ng0HaiQuan(i22B)
NguyenThiNgocPhuoc(122A)
LeNgocTung (I22A)
levanphap(I22A)
HaTrungMinhPhuc(I22B)
NguyenQuocThang(I22A)
BuiTrongHung41(I11C)
LeThiKimNgan67(I11C)
NguyenTrungTin(I22A)
DuongTrungQuan
NguyenBaoLoc70(I22A)
Dao Duy Thanh(I22B)
NguyenThiPhongLan(I22A)
ToThiMy(I22A)
NguyenXuanThi(I22A)
ThaiMyTu (I22B)
NguyenManhHuy(I22B)
NguyenMinhTam(I22B)
LeVanVan (I22B)
TranAnhTam(I22B)
NguyenVanPhat(I22B)
AnhDao(I22B)
LETHIANHDAO48(I22B)
PhamPhuKhanh52(I22B)
LeThanhQuang (I22B)
DangQuangBinh(I22B)
HoBaoQuoc_I22B
VoMinhThang(I22B)
PhamThiThao (I22B)
NguyenThiNgocHuyen (I22B)
NguyenVanLanh (I22A)
NguyenTanDat(I22B)
NguyenVanTu(I22A)
nguyenhoanglam_I22B
NgT.KimHuyen(I22A)
TruongTranThanhTu(I22B)
NguyenHoangThien(I22B)
NguyenCaoTri (I22B)
TranDangKhoa(I22A)
vivanbieu(I22B)
BuiHuuDang(I22B)
HaVanMinh(I22A)
NguyenTienDat (I22A)
lekhanhhoa(I22B)
TranQuocLoc(I22A)
VoDucDiDaiXuan(I22A)
MaiXuanSon (I22B)
TranVuSang (I22B)
tranvanminh82(I22A)
NguyenHoangKimVu (I11C)
MaiNguyenThanhLong(I22A)
PhamXuanThieu (I22A)
phungvanduong24(I12A)
VanNhatDongGiang(I22A)
NguyenThiMai(I22A)
NguyenThiMyThoa(I22A)
DangTCamLoi(I22A)
NguyenVoDuyTan(I22A)
VANCONGLOI(I22A)
lehongphong(I22B)
NguyenThiBichTram (I22A)
NguyenVanSang(I22A)
NguyenTuHuy(I22A)
DangXuanCanh_14(I22B)
truongtph.i11c
NgoVanTuyen(I22B)
PhamQuocCuong (I22A)
nguyenthithutrang (I11C)
LêAnhNgữ(I22A)
ChauQuangCam (I22B)
TranPhucVinh(I22B)
dangthihoangly(I12A)
BuiThucTuan(I22B)
VoMinhDien(I22B)
HuynhDucQuang(I22B)
CAOTHANHLUAN(I22B)
NguyenQuangHuy(I22B)
TruongMinhTriet(I22B)
NguyenQuocHuy (I22B)
TruongNhuNgoc (I22A)
Admin
86 posters
Trang 5 trong tổng số 10 trang
Trang 5 trong tổng số 10 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
vấn đề và cấu trúc mã của Đoạn tương tranh
Đoạn tương tranh :Xét một hệ có n tiến trình P0,P1, ...,Pn, mỗi tiến trình có một đoạn mã lệnh, nếu như trong đoạn mã này các tiến trình thao tác trên các biến chung,đọc ghi file... (thao tác trên dữ liệu chung) thì đoạn mã lệnh đó là đoạn tương tranh.
- Tính Loại trừ lẫn nhau hay Loại trừ tương hỗ (Mutual Exclusion) về phương diện thời gian: Khi có 1 tiến trình đang ở trong ĐTT của nó thì không có tiến trình nào khác trong nhóm cũng tại đoạn như vậy: Mỗi thời điểm chỉ có 1 tiến trình được phép truy cập hoặc thay đổi tài nguyên chung.
- Các tiến trình tương tranh có cấu trúc mã bao gồm Entry Section (Đoạn Đăng nhập), Critical Section (Đoạn Tương tranh), Exit Section (Đoạn Đăng xuất) và các Remainder Section (Đoạn Còn lại).
- Tính Loại trừ lẫn nhau hay Loại trừ tương hỗ (Mutual Exclusion) về phương diện thời gian: Khi có 1 tiến trình đang ở trong ĐTT của nó thì không có tiến trình nào khác trong nhóm cũng tại đoạn như vậy: Mỗi thời điểm chỉ có 1 tiến trình được phép truy cập hoặc thay đổi tài nguyên chung.
- Các tiến trình tương tranh có cấu trúc mã bao gồm Entry Section (Đoạn Đăng nhập), Critical Section (Đoạn Tương tranh), Exit Section (Đoạn Đăng xuất) và các Remainder Section (Đoạn Còn lại).
TruongTranThanhTu(I22B)- Tổng số bài gửi : 34
Join date : 11/03/2013
Hướng dẫn cách dùng công nghệ giải bài tập RRS
Admin
Có đóng góp vào Công nghệ đã học !
NgT.KimHuyen(I22A)- Tổng số bài gửi : 15
Join date : 10/03/2013
Trình bày vấn đề và cấu trúc mã của đoạn tương tranh (Critical-Section Problem)
- Đoạn tương tranh :Xét một hệ có n tiến trình P0,P1, ...,Pn, mỗi tiến trình có một đoạn mã lệnh, nếu như trong đoạn mã này các tiến trình thao tác trên các biến chung,đọc ghi file... (tổng quát: thao tác trên dữ liệu chung) thì đoạn mã lệnh đó là đoạn tương tranh.
- Tính Loại trừ lẫn nhau hay Loại trừ tương hỗ (Mutual Exclusion) về phương diện thời gian: Khi có 1 tiến trình đang ở trong ĐTT của nó thì không có tiến trình nào khác trong nhóm cũng tại đoạn như vậy, nghĩa là: Mỗi thời điểm chỉ có 1 tiến trình được phép truy cập và/hoặc thay đổi tài nguyên chung.
- Các tiến trình tương tranh có cấu trúc mã bao gồm Entry Section (Đoạn Đăng nhập), Critical Section (Đoạn Tương tranh), Exit Section (Đoạn Đăng xuất) và các Remainder Section (Đoạn Còn lại).
- Tính Loại trừ lẫn nhau hay Loại trừ tương hỗ (Mutual Exclusion) về phương diện thời gian: Khi có 1 tiến trình đang ở trong ĐTT của nó thì không có tiến trình nào khác trong nhóm cũng tại đoạn như vậy, nghĩa là: Mỗi thời điểm chỉ có 1 tiến trình được phép truy cập và/hoặc thay đổi tài nguyên chung.
- Các tiến trình tương tranh có cấu trúc mã bao gồm Entry Section (Đoạn Đăng nhập), Critical Section (Đoạn Tương tranh), Exit Section (Đoạn Đăng xuất) và các Remainder Section (Đoạn Còn lại).
nguyenhoanglam_I22B- Tổng số bài gửi : 16
Join date : 12/03/2013
Re: Thảo luận Bài 7
TruongMinhTriet(I22B) đã viết:Bài 1: Thiết kế lại đèn hiệu ở đầu cầu để cho tối đa được 2 chiếc ô tô cùng 1 lúc trên mặt cầu?
Trả lời: theo bài học thì hàm wait có giá trị truyền vào là mutex và mutex = 1, mình sẽ đổi giá trị đó thành 2 vậy khi xe 1 lên cầu thì giá trị mutex=1 và xe thứ 2 lên thì mutex=0 khi có chiếc thứ 3 tới nó sẽ chờ vì trong hàm wait có vòng lặp while(mutex<-0);, khi 1 xe đã xuống cầu thì nhờ vào hàm signal mà mutex=1, tiếp đó thì xe 3 được lên. Vậy cùng 1 lúc chỉ có 2 chiếc xe trên mặt cầu.
Bài 2: Đồng bộ công việc sao cho P1 trước P2, P2 trước P3
Trả lời: Ta dùng đèn hiệu sau:semaphore synch1 = 0;Bài 3: Đồng bộ P1, P2, P3 sao cho P1 trước P2 và P3
semaphore synch2 = 0;
Cấu trúc P1:
S1
signal(synch1);Cấu trúc P2:
wait(synch1)
S2
signal(synch2);Cấu trúc P3:
wait(synch2)
S3
Trả lời: Ta dùng đèn hiệu sau:semaphore synch1 = 0;Bài 4: Đồng bọ P1, P2, P3 sao cho P1, P2 trước P3
semaphore synch2 = 0;
Cấu trúc P1:
S1
signal(synch1);
signal(synch2);Cấu trúc P2:
wait(synch1)
S2Cấu trúc P3:
wait(synch2)
S3
Trả lời: Ta dùng đèn hiệu sau:semaphore synch1 = 0;P\S: đây là cách giải của mình ai có cách giải khác thì post lên cho mọi người tham khảo .
semaphore synch2 = 0;
Cấu trúc P1:
S1
signal(synch1);Cấu trúc P2:
S2
signal(synch2);Cấu trúc P3:
wait(synch1);
wait(synch2)
S3
Lưu ý: các bài giải trên không bít là đúng hay sai đây chỉ là ý kiến riêng của mình nên mong mọi người chỉ bảo thêm.[code]
Admin
- Cả 4 câu giải tốt với cách làm "Mộc mạc" !
- Với Câu 1: Cần chỉ rõ là giá trị Ban đầu của Mutex được thiết lập bằng 2 (màu xanh da trời) !
cám ơn bài giải của bạn Triết , rất dễ hiểu
TruongTranThanhTu(I22B)- Tổng số bài gửi : 34
Join date : 11/03/2013
Mục đích của việc đồng bộ hóa các tiến trình. Ví dụ minh họa
Đồng bộ hóa tiến trình là điều khiển công việc của luồng và tiến trình sao cho logic và đáp ứng yêu cầu đặt ra.
Mục đích của đồng bộ hóa tiến trình.
- Đảm bảo tính nhất quán của tài nguyên dùng chung.
ví dụ: bài toán sản xuất tiêu thụ.
một bạn trong lớp lên bảng (tài nguyên dùng chung của lớp) ghi thông tin cá nhân nhưng chưa ghi xong thì bạn khác dưới lớp chụp lại thông tin trên sẽ không đúng. muốn lấy thông tin chính xác thì bạn dưới lớp cần lấy thông tin của bạn trên bảng ghi phải chờ bạn ấy ghi hết thông tin rồi mới chụp ảnh.
- Tránh Deadlock ( hiện tượng kẹt tiến trình).
ví dụ: hiện tượng kẹt xe khi có cảnh sát giao thông điều tiết phân luồng thì sẽ không còn kẹt xe .
Mục đích của đồng bộ hóa tiến trình.
- Đảm bảo tính nhất quán của tài nguyên dùng chung.
ví dụ: bài toán sản xuất tiêu thụ.
một bạn trong lớp lên bảng (tài nguyên dùng chung của lớp) ghi thông tin cá nhân nhưng chưa ghi xong thì bạn khác dưới lớp chụp lại thông tin trên sẽ không đúng. muốn lấy thông tin chính xác thì bạn dưới lớp cần lấy thông tin của bạn trên bảng ghi phải chờ bạn ấy ghi hết thông tin rồi mới chụp ảnh.
- Tránh Deadlock ( hiện tượng kẹt tiến trình).
ví dụ: hiện tượng kẹt xe khi có cảnh sát giao thông điều tiết phân luồng thì sẽ không còn kẹt xe .
NguyenVanTu(I22A)- Tổng số bài gửi : 23
Join date : 12/03/2013
E.W.Dijkstra
Edsger Wybe Dijkstra (phát âm tiếng Hà Lan: [ˈɛtsxər ˈwibə ˈdɛɪkstra] ( nghe); 11 tháng 5, 1930 tại Rotterdam – 6 tháng 8, 2002 tại Nuenen), là nhà khoa học máy tính Hà Lan. Ông được nhận giải thưởng Turing cho các đóng góp có tính chất nền tảng trong lĩnh vực ngôn ngữ lập trình Không lâu trước khi chết, ông đã được nhận giải Bài báo ảnh hưởng lớn trong lĩnh vực tính toán phân tán của ACM dành cho bài báo đã khởi đầu cho ngành con Tự ổn định. Sau khi ông qua đời, giải thưởng thường niên này đã được đổi tên thành giải thưởng ACM Edsger W. Dijkstra.
Tiểu sử
Dijkstra học vật lý lý thuyết tại Đại học Leiden, nhưng ông đã nhanh chóng nhận ra rằng ông quan tâm đến lập trình hơn.
Thời kỳ đầu, ông làm việc tại Trung tâm toán học, Viện nghiên cứu quốc gia về toán học và khoa học máy tính tại Amsterdam, ông còn giữ chức vị giáo sư tại Đại học Kỹ thuật Eindhoven, Hà Lan. Đầu thập kỷ 1970, ông làm cộng tác nghiên cứu tại Burroughs Corporation, sau đó giữ vị trí Schlumberger Centennial Chair ngành Khoa học máy tính tại Đại học Texas tại Austin, Mỹ. Ông nghỉ hưu năm 2000.
Trong các đóng góp của ông cho ngành khoa học máy tính có thuật toán đường đi ngắn nhất, còn được biết với tên Thuật toán Dijkstra, hệ điều hành THE và cấu trúc semaphore để phối hợp hoạt động của nhiều bộ vi xử lý và nhiều chương trình. Một khái niệm khác trong lĩnh vực tính toán phân tán đã được khởi đầu nhờ Dijkstra là self-stabilization - một cách khác để đảm bảo tính đáng tin cậy của hệ thống. Thuật toán Dijkstra được sử dụng trong SPF, Shortest Path First, dùng trong giao thức định tuyến OSPF, Open Shortest Path First.
Ông còn nổi tiếng với đánh giá thấp về lệnh GOTO trong lập trình máy tính. Bài báo năm 1968 "A Case against the GO TO Statement" (EWD215) được xem là một bước quan trọng tiến tới việc lệnh GOTO bị thay thế dần trên quy mô lớn bởi các cấu trúc lập trình chẳng hạn như vòng lặp while. Phương pháp này còn được gọi là Lập trình có cấu trúc. Dijkstra đã rất hâm mộ ngôn ngữ lập trình ALGOL 60, và đã làm việc trong nhóm cài đặt trình biên dịch đầu tiên cho ngôn ngữ này.
Từ những năm 1970, mối quan tâm chính của Dijkstra là kiểm định hình thức (formal verification). Quan niệm phổ biến thời đó là người ta nên đưa ra một chứng minh toán học về tính đúng đắn của chương trình sau khi đã viết chương trình đó. Dijkstra đã phản đối rằng các chứng minh thu được rất dài và nặng nề, và rằng chứng minh đó không đem lại hiểu biết về việc chương trình đã được phát triển như thế nào. Một phương pháp khác là dẫn xuất chương trình (program derivation), để "phát triển chứng minh và chương trình một cách đồng thời". Người ta bắt đầu bằng một đặc tả toán học về những gì mà một chương trình cần phải thực hiện, sau đó áp dụng các biến đổi toán học đối với đặc tả đó cho đến khi nó được chuyển thành một chương trình chạy được. Chương trình thu được khi đó được gọi là "đúng đắn theo cách xây dựng" (correct by construction).
Dijkstra còn nổi tiếng với các bài luận của ông về lập trình; ông là người đầu tiên tuyên bố rằng việc lập trình có đặc điểm cố hữu là khó khăn và phức tạp đến mức các lập trình viên cần phải khai thác mọi kỹ thuật và các phương pháp trừu tượng hóa có thể để hy vọng có thể quản lý được độ phức tạp của nó một cách thành công. Ông còn nổi tiếng với thói quen viết tay cẩn thận các bản thảo bằng bút máy. Các bản thảo này được gọi là EWD, do Dijkstra đánh số chúng bằng tiết đầu tố EWD. Ông thường phân phát các bản phô-tô của bản EWD mới cho các đồng nghiệp của mình; những người nhận được lại phô-tô và tiếp tục phân phát các bản sao, bằng cách đó các bản EWD được phát tán khắp cộng đồng khoa học máy tính quốc tế. Các chủ đề chính là về khoa học máy tính và toán học, ngoài ra còn có các báo cáo công tác, thư và các bài phát biểu. Hơn 1300 bài EWD đã được quét thành ảnh, số lượng được chuyển thành dạng điện tử để phục vụ nghiên cứu ngày càng tăng, chúng được lưu trữ và cung cấp trực tuyến tại Đại học Texas[2].
Dijkstra đã là một trong những người tiên phong trong nghiên cứu về tính toán phân tán. Có người còn cho là một số bài báo của ông đã thiết lập ngành nghiên cứu này. Cụ thể, bài báo "Self-stabilizing Systems in Spite of Distributed Control" của ông đã khởi đầu ngành con Self-stabilization.
Dijkstra còn được ghi nhận là cả đời chỉ sở hữu duy nhất một chiếc máy tính (vào cuối đời) và họa hoằn mới thực sự sử dụng nó [3], để đi đôi với quan niệm của ông rằng khoa học máy tính trừu tượng hơn chứ không chỉ là lập trình, quan niệm này được thể hiện trong nhiều câu nói nổi tiếng chẳng hạn như "Khoa học máy tính đối với máy tính cũng như thiên văn học đối với kính thiên văn" (Computer Science is no more about computers than astronomy is about telescopes.)[4]
Ông qua đời tại Nuenen, Hà Lan vào ngày 6 tháng 8, năm 2002 sau một thời gian dài bị ung thư. Năm sau, giải thưởng PODC Influential Paper Award in distributed computing (bài báo ảnh hưởng trong lĩnh vực tính toán phân tán) của tổ chức ACM (Association for Computing Machinery) đã được đổi tên thành Giải thưởng Dijkstra để vinh danh ông.
Tiểu sử
Dijkstra học vật lý lý thuyết tại Đại học Leiden, nhưng ông đã nhanh chóng nhận ra rằng ông quan tâm đến lập trình hơn.
Thời kỳ đầu, ông làm việc tại Trung tâm toán học, Viện nghiên cứu quốc gia về toán học và khoa học máy tính tại Amsterdam, ông còn giữ chức vị giáo sư tại Đại học Kỹ thuật Eindhoven, Hà Lan. Đầu thập kỷ 1970, ông làm cộng tác nghiên cứu tại Burroughs Corporation, sau đó giữ vị trí Schlumberger Centennial Chair ngành Khoa học máy tính tại Đại học Texas tại Austin, Mỹ. Ông nghỉ hưu năm 2000.
Trong các đóng góp của ông cho ngành khoa học máy tính có thuật toán đường đi ngắn nhất, còn được biết với tên Thuật toán Dijkstra, hệ điều hành THE và cấu trúc semaphore để phối hợp hoạt động của nhiều bộ vi xử lý và nhiều chương trình. Một khái niệm khác trong lĩnh vực tính toán phân tán đã được khởi đầu nhờ Dijkstra là self-stabilization - một cách khác để đảm bảo tính đáng tin cậy của hệ thống. Thuật toán Dijkstra được sử dụng trong SPF, Shortest Path First, dùng trong giao thức định tuyến OSPF, Open Shortest Path First.
Ông còn nổi tiếng với đánh giá thấp về lệnh GOTO trong lập trình máy tính. Bài báo năm 1968 "A Case against the GO TO Statement" (EWD215) được xem là một bước quan trọng tiến tới việc lệnh GOTO bị thay thế dần trên quy mô lớn bởi các cấu trúc lập trình chẳng hạn như vòng lặp while. Phương pháp này còn được gọi là Lập trình có cấu trúc. Dijkstra đã rất hâm mộ ngôn ngữ lập trình ALGOL 60, và đã làm việc trong nhóm cài đặt trình biên dịch đầu tiên cho ngôn ngữ này.
Từ những năm 1970, mối quan tâm chính của Dijkstra là kiểm định hình thức (formal verification). Quan niệm phổ biến thời đó là người ta nên đưa ra một chứng minh toán học về tính đúng đắn của chương trình sau khi đã viết chương trình đó. Dijkstra đã phản đối rằng các chứng minh thu được rất dài và nặng nề, và rằng chứng minh đó không đem lại hiểu biết về việc chương trình đã được phát triển như thế nào. Một phương pháp khác là dẫn xuất chương trình (program derivation), để "phát triển chứng minh và chương trình một cách đồng thời". Người ta bắt đầu bằng một đặc tả toán học về những gì mà một chương trình cần phải thực hiện, sau đó áp dụng các biến đổi toán học đối với đặc tả đó cho đến khi nó được chuyển thành một chương trình chạy được. Chương trình thu được khi đó được gọi là "đúng đắn theo cách xây dựng" (correct by construction).
Dijkstra còn nổi tiếng với các bài luận của ông về lập trình; ông là người đầu tiên tuyên bố rằng việc lập trình có đặc điểm cố hữu là khó khăn và phức tạp đến mức các lập trình viên cần phải khai thác mọi kỹ thuật và các phương pháp trừu tượng hóa có thể để hy vọng có thể quản lý được độ phức tạp của nó một cách thành công. Ông còn nổi tiếng với thói quen viết tay cẩn thận các bản thảo bằng bút máy. Các bản thảo này được gọi là EWD, do Dijkstra đánh số chúng bằng tiết đầu tố EWD. Ông thường phân phát các bản phô-tô của bản EWD mới cho các đồng nghiệp của mình; những người nhận được lại phô-tô và tiếp tục phân phát các bản sao, bằng cách đó các bản EWD được phát tán khắp cộng đồng khoa học máy tính quốc tế. Các chủ đề chính là về khoa học máy tính và toán học, ngoài ra còn có các báo cáo công tác, thư và các bài phát biểu. Hơn 1300 bài EWD đã được quét thành ảnh, số lượng được chuyển thành dạng điện tử để phục vụ nghiên cứu ngày càng tăng, chúng được lưu trữ và cung cấp trực tuyến tại Đại học Texas[2].
Dijkstra đã là một trong những người tiên phong trong nghiên cứu về tính toán phân tán. Có người còn cho là một số bài báo của ông đã thiết lập ngành nghiên cứu này. Cụ thể, bài báo "Self-stabilizing Systems in Spite of Distributed Control" của ông đã khởi đầu ngành con Self-stabilization.
Dijkstra còn được ghi nhận là cả đời chỉ sở hữu duy nhất một chiếc máy tính (vào cuối đời) và họa hoằn mới thực sự sử dụng nó [3], để đi đôi với quan niệm của ông rằng khoa học máy tính trừu tượng hơn chứ không chỉ là lập trình, quan niệm này được thể hiện trong nhiều câu nói nổi tiếng chẳng hạn như "Khoa học máy tính đối với máy tính cũng như thiên văn học đối với kính thiên văn" (Computer Science is no more about computers than astronomy is about telescopes.)[4]
Ông qua đời tại Nuenen, Hà Lan vào ngày 6 tháng 8, năm 2002 sau một thời gian dài bị ung thư. Năm sau, giải thưởng PODC Influential Paper Award in distributed computing (bài báo ảnh hưởng trong lĩnh vực tính toán phân tán) của tổ chức ACM (Association for Computing Machinery) đã được đổi tên thành Giải thưởng Dijkstra để vinh danh ông.
NguyenTanDat(I22B)- Tổng số bài gửi : 12
Join date : 09/03/2013
Khái niệm đèn hiệu và 2 ứng dụng của đèn hiệu
- Đèn hiệu là phương tiện đồng bộ hoá được E.W. Dijkstra đề xuất năm 1965.
- Đèn hiệu được mô tả bằng một biến kiểu nguyên với 2 tác nguyên là Wait (Chờ) và Signal (Báo hiệu):
typedef int semaphore; // Định nghĩa kiểu Đèn hiệu
wait (semaphore S)
{
while ( S <= 0 ); // Chờ bận nếu S<=0
S --; // Giảm S đi 1
}
signal (semaphore S)
{
S ++; // Tăng S lên 1
}
- Việc kiểm tra S <= 0 và giảm S (trong Wait) hoặc tăng S (trong Signal) phải được thực hiện trọn vẹn (không xảy ra ngắt trong thời gian thi hành), do đó Wait và Signal được gọi là các tác nguyên (Atomic Operations).
- Đèn hiệu được mô tả bằng một biến kiểu nguyên với 2 tác nguyên là Wait (Chờ) và Signal (Báo hiệu):
typedef int semaphore; // Định nghĩa kiểu Đèn hiệu
wait (semaphore S)
{
while ( S <= 0 ); // Chờ bận nếu S<=0
S --; // Giảm S đi 1
}
signal (semaphore S)
{
S ++; // Tăng S lên 1
}
- Việc kiểm tra S <= 0 và giảm S (trong Wait) hoặc tăng S (trong Signal) phải được thực hiện trọn vẹn (không xảy ra ngắt trong thời gian thi hành), do đó Wait và Signal được gọi là các tác nguyên (Atomic Operations).
NguyenTanDat(I22B)- Tổng số bài gửi : 12
Join date : 09/03/2013
TRÌNH BÀY MỤC ĐÍCH CỦA ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH. CHO VÍ DỤ MINH HỌA.
Theo mjh thì đồng bộ hóa các tiến trình la giúp cho các tiến trình không xảy ra tắc nghẽn tiến trình, giup cho các tiến trình hoạt đông nhip nhàng, nhanh hơn, hiệu quả hơn. Qua đó giúp cho hdh kiễm soát được các tiến trình một cách dẽ dàng và tránh gian lận các tiến trình.
VD1: Một người viết đơn xin việc ngoài việc phải ghi tên đầy đủ vào mục người xin việc thì phải hoàn thành cả mục ký tên bên dưới đơn xin việc.
VD2: Một nhóm nông dân cùng với một cái máy suốt lúa đang chuẩn bị thu hoạch lúa . Mỗi người nông dân có nhiệm khác nhau gắn liền với từng chức năng của một cái máy. Một khi người bê lúa mang đến cho máy ăn thì mới có hạt lúa, gôm, bui bui chay ra thì các nông dân khác làm việc theo. Trong quá trình làm việc thì ko tránh khỏi mệt nhọc đuối sức do đó người bê lúa ngắt ngang đi uống nước thì tất cả những người còn lại điều fai chờ và máy cũng sẽ chạy 0. Do đó làm phí thời gian và chi phí xăng dầu.
VD1: Một người viết đơn xin việc ngoài việc phải ghi tên đầy đủ vào mục người xin việc thì phải hoàn thành cả mục ký tên bên dưới đơn xin việc.
VD2: Một nhóm nông dân cùng với một cái máy suốt lúa đang chuẩn bị thu hoạch lúa . Mỗi người nông dân có nhiệm khác nhau gắn liền với từng chức năng của một cái máy. Một khi người bê lúa mang đến cho máy ăn thì mới có hạt lúa, gôm, bui bui chay ra thì các nông dân khác làm việc theo. Trong quá trình làm việc thì ko tránh khỏi mệt nhọc đuối sức do đó người bê lúa ngắt ngang đi uống nước thì tất cả những người còn lại điều fai chờ và máy cũng sẽ chạy 0. Do đó làm phí thời gian và chi phí xăng dầu.
NguyenVanLanh (I22A)- Tổng số bài gửi : 21
Join date : 08/03/2013
Re: Thảo luận Bài 7
NguyenQuocHuy (I22B) đã viết:Giả sửa có 3 tiến trình P1, P2 và P3 có mã tương ứng là S1, S2 và S3
Semaphore synch = 0;
P1 P2 P3
S1 wait(synch); wait(synch);
signal(synch, 2); S2 S3
Tại thời điểm ban đầu: synch=0,
- Khi tiến trình P2 được thực hiện, thì P2 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
- Khi tiến trình P3 được thực hiện, thì P3 sẽ bị khóa tại hàm wait(synch) do synch=0 cho đến khi synch>0.
- Khi P1 thực hiện ,S1 được thi hành xong thì lệnh signal(synch, 2); dc thực thi, tức là tăng giá trị của synch lên 2.
- Khi đó synch>0 ,tiến trình P2 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=1).
Đồng thời P3 được thực hiện và hàm wait(synch) sẽ giảm giá trị synch xuống 1 đơn vị (synch=0).
->P2 và P3 cùng thực hện.
=>P1 đi trước P2 và P3.
Cám ơn bạn vì bài viết và bạn có thể có cách giải thích nào chi tiết hơn một xíu nữa giúp mình hiểu cách làm của ban hông chứ thực sự là mình dở quá, mình đọc qua, đọc lại bài làm của bạn mãi mà đầu óc vẫn rỗng toét, không thể hiểu được nữa...Cho mình cảm ơn bạn nhiều nhé..
NguyenThiNgocHuyen (I22B)- Tổng số bài gửi : 13
Join date : 13/03/2013
Re: Thảo luận Bài 7
Thanks bạn vì một bài viết rất hữu ích với mình, hôm bữa nghe thầy giảng về nhà tìm đọc thông tin về nhà khoa học này và mình cũng đã lên mạng tìm nhưng tìm hoài mà chẳng thấy. nếu không thấy bài viết này chắc có lẽ mình đã bỏ qua một kiến thức bổ ích về nhà khoa học của giải thưởng Turing. Một lần nữa, cảm ơn bạn hiều nhé!NguyenTanDat(I22B) đã viết:Edsger Wybe Dijkstra (phát âm tiếng Hà Lan: [ˈɛtsxər ˈwibə ˈdɛɪkstra] ( nghe); 11 tháng 5, 1930 tại Rotterdam – 6 tháng 8, 2002 tại Nuenen), là nhà khoa học máy tính Hà Lan. Ông được nhận giải thưởng Turing cho các đóng góp có tính chất nền tảng trong lĩnh vực ngôn ngữ lập trình Không lâu trước khi chết, ông đã được nhận giải Bài báo ảnh hưởng lớn trong lĩnh vực tính toán phân tán của ACM dành cho bài báo đã khởi đầu cho ngành con Tự ổn định. Sau khi ông qua đời, giải thưởng thường niên này đã được đổi tên thành giải thưởng ACM Edsger W. Dijkstra.
Tiểu sử
Dijkstra học vật lý lý thuyết tại Đại học Leiden, nhưng ông đã nhanh chóng nhận ra rằng ông quan tâm đến lập trình hơn.
Thời kỳ đầu, ông làm việc tại Trung tâm toán học, Viện nghiên cứu quốc gia về toán học và khoa học máy tính tại Amsterdam, ông còn giữ chức vị giáo sư tại Đại học Kỹ thuật Eindhoven, Hà Lan. Đầu thập kỷ 1970, ông làm cộng tác nghiên cứu tại Burroughs Corporation, sau đó giữ vị trí Schlumberger Centennial Chair ngành Khoa học máy tính tại Đại học Texas tại Austin, Mỹ. Ông nghỉ hưu năm 2000.
Trong các đóng góp của ông cho ngành khoa học máy tính có thuật toán đường đi ngắn nhất, còn được biết với tên Thuật toán Dijkstra, hệ điều hành THE và cấu trúc semaphore để phối hợp hoạt động của nhiều bộ vi xử lý và nhiều chương trình. Một khái niệm khác trong lĩnh vực tính toán phân tán đã được khởi đầu nhờ Dijkstra là self-stabilization - một cách khác để đảm bảo tính đáng tin cậy của hệ thống. Thuật toán Dijkstra được sử dụng trong SPF, Shortest Path First, dùng trong giao thức định tuyến OSPF, Open Shortest Path First.
Ông còn nổi tiếng với đánh giá thấp về lệnh GOTO trong lập trình máy tính. Bài báo năm 1968 "A Case against the GO TO Statement" (EWD215) được xem là một bước quan trọng tiến tới việc lệnh GOTO bị thay thế dần trên quy mô lớn bởi các cấu trúc lập trình chẳng hạn như vòng lặp while. Phương pháp này còn được gọi là Lập trình có cấu trúc. Dijkstra đã rất hâm mộ ngôn ngữ lập trình ALGOL 60, và đã làm việc trong nhóm cài đặt trình biên dịch đầu tiên cho ngôn ngữ này.
Từ những năm 1970, mối quan tâm chính của Dijkstra là kiểm định hình thức (formal verification). Quan niệm phổ biến thời đó là người ta nên đưa ra một chứng minh toán học về tính đúng đắn của chương trình sau khi đã viết chương trình đó. Dijkstra đã phản đối rằng các chứng minh thu được rất dài và nặng nề, và rằng chứng minh đó không đem lại hiểu biết về việc chương trình đã được phát triển như thế nào. Một phương pháp khác là dẫn xuất chương trình (program derivation), để "phát triển chứng minh và chương trình một cách đồng thời". Người ta bắt đầu bằng một đặc tả toán học về những gì mà một chương trình cần phải thực hiện, sau đó áp dụng các biến đổi toán học đối với đặc tả đó cho đến khi nó được chuyển thành một chương trình chạy được. Chương trình thu được khi đó được gọi là "đúng đắn theo cách xây dựng" (correct by construction).
Dijkstra còn nổi tiếng với các bài luận của ông về lập trình; ông là người đầu tiên tuyên bố rằng việc lập trình có đặc điểm cố hữu là khó khăn và phức tạp đến mức các lập trình viên cần phải khai thác mọi kỹ thuật và các phương pháp trừu tượng hóa có thể để hy vọng có thể quản lý được độ phức tạp của nó một cách thành công. Ông còn nổi tiếng với thói quen viết tay cẩn thận các bản thảo bằng bút máy. Các bản thảo này được gọi là EWD, do Dijkstra đánh số chúng bằng tiết đầu tố EWD. Ông thường phân phát các bản phô-tô của bản EWD mới cho các đồng nghiệp của mình; những người nhận được lại phô-tô và tiếp tục phân phát các bản sao, bằng cách đó các bản EWD được phát tán khắp cộng đồng khoa học máy tính quốc tế. Các chủ đề chính là về khoa học máy tính và toán học, ngoài ra còn có các báo cáo công tác, thư và các bài phát biểu. Hơn 1300 bài EWD đã được quét thành ảnh, số lượng được chuyển thành dạng điện tử để phục vụ nghiên cứu ngày càng tăng, chúng được lưu trữ và cung cấp trực tuyến tại Đại học Texas[2].
Dijkstra đã là một trong những người tiên phong trong nghiên cứu về tính toán phân tán. Có người còn cho là một số bài báo của ông đã thiết lập ngành nghiên cứu này. Cụ thể, bài báo "Self-stabilizing Systems in Spite of Distributed Control" của ông đã khởi đầu ngành con Self-stabilization.
Dijkstra còn được ghi nhận là cả đời chỉ sở hữu duy nhất một chiếc máy tính (vào cuối đời) và họa hoằn mới thực sự sử dụng nó [3], để đi đôi với quan niệm của ông rằng khoa học máy tính trừu tượng hơn chứ không chỉ là lập trình, quan niệm này được thể hiện trong nhiều câu nói nổi tiếng chẳng hạn như "Khoa học máy tính đối với máy tính cũng như thiên văn học đối với kính thiên văn" (Computer Science is no more about computers than astronomy is about telescopes.)[4]
Ông qua đời tại Nuenen, Hà Lan vào ngày 6 tháng 8, năm 2002 sau một thời gian dài bị ung thư. Năm sau, giải thưởng PODC Influential Paper Award in distributed computing (bài báo ảnh hưởng trong lĩnh vực tính toán phân tán) của tổ chức ACM (Association for Computing Machinery) đã được đổi tên thành Giải thưởng Dijkstra để vinh danh ông.
NguyenThiNgocHuyen (I22B)- Tổng số bài gửi : 13
Join date : 13/03/2013
Re: Thảo luận Bài 7
so sanh 2 đoạn code mà thầy đã nêu trong buổi học
Sleep(1);
ShowBuffer();
Giải thích: tạm ngưng trong 1s sau đó xuất ra kết quả Buffer, như vậy sẽ không chuẩn. Chẳng hạn nếu 1s không đủ có tăng lên 10s cũng không đủ,; vì không xác định được thời gian phải chờ trong bao lâu. Trong 1s mà CPU vẫn chưa xử lý xong mà in ra kết quả, như vậy là sai
EnterCriticalSelection(&critSec);
ShowBuffer();
LeaveCriticalSelection(&critSec);
Giải thích: showBuffer nằm trong đoạn tương tranh, đảm bảo được tính loại trừ tương hỗ. Cụ thể là luồng chính và các luông SX-TT loại trừ lẫn nhau trong công việc. Nghĩa là mỗi thời điểm chỉ có 1 tiến trình được phép truy cập và hay là hoặc thay đổi tài nguyên dùng chung. Đông nghĩa với việc đang SX hay TT thì không được ShowBuffer() và ngược lại. Ngoài ra, độ bảo mật và an toàn sẽ cao hơn
Sleep(1);
ShowBuffer();
Giải thích: tạm ngưng trong 1s sau đó xuất ra kết quả Buffer, như vậy sẽ không chuẩn. Chẳng hạn nếu 1s không đủ có tăng lên 10s cũng không đủ,; vì không xác định được thời gian phải chờ trong bao lâu. Trong 1s mà CPU vẫn chưa xử lý xong mà in ra kết quả, như vậy là sai
EnterCriticalSelection(&critSec);
ShowBuffer();
LeaveCriticalSelection(&critSec);
Giải thích: showBuffer nằm trong đoạn tương tranh, đảm bảo được tính loại trừ tương hỗ. Cụ thể là luồng chính và các luông SX-TT loại trừ lẫn nhau trong công việc. Nghĩa là mỗi thời điểm chỉ có 1 tiến trình được phép truy cập và hay là hoặc thay đổi tài nguyên dùng chung. Đông nghĩa với việc đang SX hay TT thì không được ShowBuffer() và ngược lại. Ngoài ra, độ bảo mật và an toàn sẽ cao hơn
VoMinhThang(I22B)- Tổng số bài gửi : 41
Join date : 11/03/2013
Tại sao giá trị ban đầu của SenEnpty = 10 và giá trị ban đầu của SemFull = 0
tại sao vậy các bạn
PhamThiThao (I22B)- Tổng số bài gửi : 54
Join date : 19/03/2013
Tại sao giá trị ban đầu của SenEnpty = 10 và giá trị ban đầu của SemFull = 0
Theo mình được biết:PhamThiThao (I22B) đã viết:tại sao vậy các bạn
semEmpty =10 là vì semEmpty dùng để chứa mục quản của đèn hiệu và quản lý vùng trống trong bộ đệm nên giá trị nó bằng 10
semFull=0 là vì dùng để chứa sản phẩm trong bộ đệm nên giá trị ban đầu nó sẽ bằng 0.
Mong các bạn và thầy góp ý thêm...
HoBaoQuoc_I22B- Tổng số bài gửi : 4
Join date : 18/03/2013
Tại sao cần phải đồng bộ hoá công việc các tiến trình?
Mục đích của đồng bộ hoá công việc các tiến trình là đảm bảo Tính nhất quán của tài nguyên dùng chung và Tránh được hiện tượng Deadlock
PhamThiThao (I22B)- Tổng số bài gửi : 54
Join date : 19/03/2013
Re: Thảo luận Bài 7
Tại khi minh khai báo BUFFER =10,trong khi đó SemEmpty dùng để quản lý số vùng trống trong bộ đệm.PhamThiThao (I22B) đã viết:tại sao vậy các bạn
Còn SemFull dùng để quản lý số sản phẩm có trong bộ đệm
Ta khai báo ban đầu là SemEmpty =10 tức là lúc đầu chưa có sản phẩm nào nên có 10 vùng trống.
Còn SemFull =0 lúc đầu ta chưa có sản phẩm nào nên =0
DangQuangBinh(I22B)- Tổng số bài gửi : 20
Join date : 12/03/2013
Age : 34
Đến từ : I22B
Re: Thảo luận Bài 7
mới tìm được vài câu hỏi ko biết ra thi có dính câu nào không nữa mấy bạn tham khảo có gì góp ý thêm :
1.Tiến trình là gì? Tiến trình khác chương trình thế nào? Nhiệm vụ chính của bộ phận Process Management
Tiến trình là một chương trình đang xử lí, sở hữu một tập con trỏ lệnh, tập các thanh ghi, các biến và một tập các tài nguyên cần cho hoạt động của tiến trình.
Chương trình là một thực thể thụ động chứa các chỉ thị điều khiển máy tính để tiến hành một hoạt động nào đó, khi thực hiện tác vụ này thì chương trình chuyển thành tiến trình – một thực thể hoạt động với con trỏ lệnh xác định chỉ thị tiếp theo sẽ thi hành và tập tài nguyên.
Bộ phận Process Management có nhiệm vụ:
Tạo và hủy tiến trình người dùng và tiến trình hệ thống
Hoãn và khôi phục tiến trình
Cung cấp cơ chế cho việc đồng bộ hóa tiến trình
Cung cấp cơ chế cho việc giao tiếp tiến trình
Cung cấp cơ chế quản lý deadlock
2.Các công việc chính của bộ phận Memory Management, File Management và Secondary Storage Management?
Memory Management
Theo dõi thành phần nào của của bộ nhớ đang được sử dụng và tiến trình nào đang sử dụng
Quyết định tiến trình nào hoặc dữ liệu nào sẽ được di chuyển ra khỏi hoặc đưa vào bộ nhớ
Cấp phát và hủy không gian bộ nhớ nếu cần.
File Management
Tạo và xóa tập tin
Tạo và xóa thư mục
Hỗ trợ các thao tác cơ bản trên tập tin và thư mục
Ánh xạ tập tin vào trong bộ lưu trữ thứ cấp
Sao lưu trên các thiết bị ổn định
Storage Management
Quản lí không gian trống
Cấp phát cho việc lưu trữ dữ liệu
Định thời yêu cầu truy cập bộ nhớ
3.Cho biết công việc chính của I/O Management và Hệ thống bảo vệ?
I/O Management: Che dấu sự khác biệt của các thiết bị đối với người dùng
Cung cấp giao diện chung đến các trình điều khiển thiết bị (device driver)
Bộ điều khiển thiết bị phần cứng
Các cơ chế buffering, caching, spooling
Hệ thống bảo vệ:
Cung cấp cơ chế kiểm soát đăng nhập và đăng xuất
Phân định sự truy cập tài nguyên hợp pháp, bất hợp pháp
Phương tiện thi hành các chính sách (cần bảo vệ dữ liệu của ai đối với ai)
4.System call là gì? Cho ví dụ? System program khác với Application program điểm nào? Liệt kê các system program cơ bản.
System Call là một cơ chế mà các chương trình ứng dụng sử dụng để yêu cầu các dịch vụ có sẵn của hệ điều hành. Hay nói cách khác System Call cung cấp một giao diện cho các dịch vụ mà hệ điều hành cung cấp.
Ví dụ về system call: Lệnh fork() trong Unix dùng để tạo ra một tiến trình mới.
System Program là các chương trình cung cấp một môi trường thuận tiện để phát triển và thực thi chương trình. Application là chương trình được viết ra để giúp người sử dụng giải quyết một vấn đề nào đó hoặc thao tác trong công việc. Ví dụ như Web Browser, Microsoft Office Word
Vài ví dụ về các System Program là: Compiler, Linker, Loader, Debugger
5.Kernel Mode và User Mode là gì? Cho biết sự khác nhau giữa chúng? Các trạng thái của một quá trình, vẽ sơ đồ và giải thích sự chuyển đổi.
Kernel Mode: là một trong hai chế độ thao tác của CPU. Khi CPU ở trong Kernel Mode, nó có thể thực thi bất cứ chỉ thị nào và tham chiếu đến bất kì địa chỉ nhớ nào
User Mode: Khi CPU ở trong User Mode, nó không thể truy cập tới phần cứng hoặc tham chiếu đến bộ nhớ một cách trực tiếp. Các đoạn mã trong User mode phải được chuyển đổi thành các hàm API hệ thống để có thể truy cập tới bộ nhớ và phần cứng.
6.Tại sao các hệ điều hành hiện đại hỗ trợ môi trường đa nhiệm? Phân biệt multitasking, multiprogramming và multiprocessing?
Các hệ điều hành hiện đại hỗ trợ môi trường đa nhiệm vì: tăng hiệu suất sử dụng CPU và tăng tốc độ xử lý
Multitasking (đa nhiệm): thực hiện nhiều nhiệm vụ cùng một lúc, CPU sẽ luân phiên xử lý các tiến trình trong một khoảng thời gian rồi chuyển sang cho tiến trình khác. VD: nghe nhạc và duyệt web đồng thời
Multiprogramming (đa chương): có nhiều hơn một chương trình đang nằm trong bộ nhớ để được lựa chọn chuyển giao cho CPU thực thi. Ví dụ: mở Word, Excel, Powerpoint cùng lúc, trong khi chúng ta sử dụng Word thì Excel và Powerpoint vẫn thường trực trong bộ nhớ mặc dù chúng không thực hiện việc gì cả
Multiprocessing (đa tiến trình): sử dụng nhiều hơn 1 CPU để có thể xử lý song song cùng lúc nhiều tiến trình.
7.Khái niệm tiến trình được xây dựng nhằm mục đích gì? Sự khác biệt, mối quan hệ giữa tiến trình và tiểu trình?
Để hỗ trợ sự đa chương, máy tính phải có khả năng thực hiện nhiều tác vụ đồng thời. Nhưng việc điều khiển nhiều hoạt động song song ở cấp độ phần cứng là rất khó khăn. Vì thế các nhà thiết kế hệ điều hành đề xuất một mô hình song song gỉa lặp bằng cách chuyển đổi bộ xử lý qua lại giữa các chương trình để duy trì hoạt động của nhiều chương trình cùng lúc, điều này tạo cảm giác có nhiều hoạt động được thực hiện đồng thời. Trong mô hình này, tất cả các phần mềm trong hệ thống được tổ chức thành một số những tiến trình (process).
Tiến trình có không gian địa chỉ và chỉ có một dòng xử lý. Các tiểu trình thì chia sẻ một không gian địa chỉ, và các dòng xử lý này hoạt động song song tương tự như các tiến trình phân biệt.
Một tiến trình có thể có nhiều tiểu trình chạy đồng thời
1.Tiến trình là gì? Tiến trình khác chương trình thế nào? Nhiệm vụ chính của bộ phận Process Management
Tiến trình là một chương trình đang xử lí, sở hữu một tập con trỏ lệnh, tập các thanh ghi, các biến và một tập các tài nguyên cần cho hoạt động của tiến trình.
Chương trình là một thực thể thụ động chứa các chỉ thị điều khiển máy tính để tiến hành một hoạt động nào đó, khi thực hiện tác vụ này thì chương trình chuyển thành tiến trình – một thực thể hoạt động với con trỏ lệnh xác định chỉ thị tiếp theo sẽ thi hành và tập tài nguyên.
Bộ phận Process Management có nhiệm vụ:
Tạo và hủy tiến trình người dùng và tiến trình hệ thống
Hoãn và khôi phục tiến trình
Cung cấp cơ chế cho việc đồng bộ hóa tiến trình
Cung cấp cơ chế cho việc giao tiếp tiến trình
Cung cấp cơ chế quản lý deadlock
2.Các công việc chính của bộ phận Memory Management, File Management và Secondary Storage Management?
Memory Management
Theo dõi thành phần nào của của bộ nhớ đang được sử dụng và tiến trình nào đang sử dụng
Quyết định tiến trình nào hoặc dữ liệu nào sẽ được di chuyển ra khỏi hoặc đưa vào bộ nhớ
Cấp phát và hủy không gian bộ nhớ nếu cần.
File Management
Tạo và xóa tập tin
Tạo và xóa thư mục
Hỗ trợ các thao tác cơ bản trên tập tin và thư mục
Ánh xạ tập tin vào trong bộ lưu trữ thứ cấp
Sao lưu trên các thiết bị ổn định
Storage Management
Quản lí không gian trống
Cấp phát cho việc lưu trữ dữ liệu
Định thời yêu cầu truy cập bộ nhớ
3.Cho biết công việc chính của I/O Management và Hệ thống bảo vệ?
I/O Management: Che dấu sự khác biệt của các thiết bị đối với người dùng
Cung cấp giao diện chung đến các trình điều khiển thiết bị (device driver)
Bộ điều khiển thiết bị phần cứng
Các cơ chế buffering, caching, spooling
Hệ thống bảo vệ:
Cung cấp cơ chế kiểm soát đăng nhập và đăng xuất
Phân định sự truy cập tài nguyên hợp pháp, bất hợp pháp
Phương tiện thi hành các chính sách (cần bảo vệ dữ liệu của ai đối với ai)
4.System call là gì? Cho ví dụ? System program khác với Application program điểm nào? Liệt kê các system program cơ bản.
System Call là một cơ chế mà các chương trình ứng dụng sử dụng để yêu cầu các dịch vụ có sẵn của hệ điều hành. Hay nói cách khác System Call cung cấp một giao diện cho các dịch vụ mà hệ điều hành cung cấp.
Ví dụ về system call: Lệnh fork() trong Unix dùng để tạo ra một tiến trình mới.
System Program là các chương trình cung cấp một môi trường thuận tiện để phát triển và thực thi chương trình. Application là chương trình được viết ra để giúp người sử dụng giải quyết một vấn đề nào đó hoặc thao tác trong công việc. Ví dụ như Web Browser, Microsoft Office Word
Vài ví dụ về các System Program là: Compiler, Linker, Loader, Debugger
5.Kernel Mode và User Mode là gì? Cho biết sự khác nhau giữa chúng? Các trạng thái của một quá trình, vẽ sơ đồ và giải thích sự chuyển đổi.
Kernel Mode: là một trong hai chế độ thao tác của CPU. Khi CPU ở trong Kernel Mode, nó có thể thực thi bất cứ chỉ thị nào và tham chiếu đến bất kì địa chỉ nhớ nào
User Mode: Khi CPU ở trong User Mode, nó không thể truy cập tới phần cứng hoặc tham chiếu đến bộ nhớ một cách trực tiếp. Các đoạn mã trong User mode phải được chuyển đổi thành các hàm API hệ thống để có thể truy cập tới bộ nhớ và phần cứng.
6.Tại sao các hệ điều hành hiện đại hỗ trợ môi trường đa nhiệm? Phân biệt multitasking, multiprogramming và multiprocessing?
Các hệ điều hành hiện đại hỗ trợ môi trường đa nhiệm vì: tăng hiệu suất sử dụng CPU và tăng tốc độ xử lý
Multitasking (đa nhiệm): thực hiện nhiều nhiệm vụ cùng một lúc, CPU sẽ luân phiên xử lý các tiến trình trong một khoảng thời gian rồi chuyển sang cho tiến trình khác. VD: nghe nhạc và duyệt web đồng thời
Multiprogramming (đa chương): có nhiều hơn một chương trình đang nằm trong bộ nhớ để được lựa chọn chuyển giao cho CPU thực thi. Ví dụ: mở Word, Excel, Powerpoint cùng lúc, trong khi chúng ta sử dụng Word thì Excel và Powerpoint vẫn thường trực trong bộ nhớ mặc dù chúng không thực hiện việc gì cả
Multiprocessing (đa tiến trình): sử dụng nhiều hơn 1 CPU để có thể xử lý song song cùng lúc nhiều tiến trình.
7.Khái niệm tiến trình được xây dựng nhằm mục đích gì? Sự khác biệt, mối quan hệ giữa tiến trình và tiểu trình?
Để hỗ trợ sự đa chương, máy tính phải có khả năng thực hiện nhiều tác vụ đồng thời. Nhưng việc điều khiển nhiều hoạt động song song ở cấp độ phần cứng là rất khó khăn. Vì thế các nhà thiết kế hệ điều hành đề xuất một mô hình song song gỉa lặp bằng cách chuyển đổi bộ xử lý qua lại giữa các chương trình để duy trì hoạt động của nhiều chương trình cùng lúc, điều này tạo cảm giác có nhiều hoạt động được thực hiện đồng thời. Trong mô hình này, tất cả các phần mềm trong hệ thống được tổ chức thành một số những tiến trình (process).
Tiến trình có không gian địa chỉ và chỉ có một dòng xử lý. Các tiểu trình thì chia sẻ một không gian địa chỉ, và các dòng xử lý này hoạt động song song tương tự như các tiến trình phân biệt.
Một tiến trình có thể có nhiều tiểu trình chạy đồng thời
lehongphong(I22B)- Tổng số bài gửi : 12
Join date : 13/03/2013
Re: Thảo luận Bài 7
Tóm lại khi không dùng kỹ thuật đồng bộ hóaVoMinhThang(I22B) đã viết:so sanh 2 đoạn code mà thầy đã nêu trong buổi học
Sleep(1);
ShowBuffer();
Giải thích: tạm ngưng trong 1s sau đó xuất ra kết quả Buffer, như vậy sẽ không chuẩn. Chẳng hạn nếu 1s không đủ có tăng lên 10s cũng không đủ,; vì không xác định được thời gian phải chờ trong bao lâu. Trong 1s mà CPU vẫn chưa xử lý xong mà in ra kết quả, như vậy là sai
EnterCriticalSelection(&critSec);
ShowBuffer();
LeaveCriticalSelection(&critSec);
Giải thích: showBuffer nằm trong đoạn tương tranh, đảm bảo được tính loại trừ tương hỗ. Cụ thể là luồng chính và các luông SX-TT loại trừ lẫn nhau trong công việc. Nghĩa là mỗi thời điểm chỉ có 1 tiến trình được phép truy cập và hay là hoặc thay đổi tài nguyên dùng chung. Đông nghĩa với việc đang SX hay TT thì không được ShowBuffer() và ngược lại. Ngoài ra, độ bảo mật và an toàn sẽ cao hơn
EnterCriticalSelection(&critSec);
ShowBuffer();
LeaveCriticalSelection(&critSec);
ta không cần biết nó sản xuất hay tiêu thụ trong bao lâu mà vẫn cho ra kết quả chính xác.
Các giải thích trên sẽ trả lời câu hỏi bữa trước của thầy là Sleep() bao lâu thì đủ.
DangQuangBinh(I22B)- Tổng số bài gửi : 20
Join date : 12/03/2013
Age : 34
Đến từ : I22B
Tại sao cần phải đồng bộ hoá công việc các tiến trình?
PhamThiThao (I22B) đã viết:Mục đích của đồng bộ hoá công việc các tiến trình là đảm bảo Tính nhất quán của tài nguyên dùng chung và Tránh được hiện tượng Deadlock
Đồng bộ hóa còn giúp giảm tình trạng lạm chiếm tài nguyên CPU. Đảm bảo cho chương trình được thông suốt tránh tình trạng tắc nghẽn tiến trình.
HoBaoQuoc_I22B- Tổng số bài gửi : 4
Join date : 18/03/2013
Những lý do đồng bộ hóa công việc tiến trình. Cho ví dụ minh họa
Những lý do đồng bộ hóa công việc tiến trình. Cho ví dụ minh họa
- Đảm bảo tính nhất quán của tài nguyên dùng chung.
- Tránh được hiện tượng Deadlock (Hiện tượng kẹt tiến trình) .
VD: một trường học chỉ có 1 phòng lab (tài nguyên dùng chung) , lớp có giờ học trước thì được vào phòng lab học, các lớp còn lại phải chờ đến khi lớp học trước đó hết giờ mới được vào phòng lab
- Đảm bảo tính nhất quán của tài nguyên dùng chung.
- Tránh được hiện tượng Deadlock (Hiện tượng kẹt tiến trình) .
VD: một trường học chỉ có 1 phòng lab (tài nguyên dùng chung) , lớp có giờ học trước thì được vào phòng lab học, các lớp còn lại phải chờ đến khi lớp học trước đó hết giờ mới được vào phòng lab
PhamThiThao (I22B)- Tổng số bài gửi : 54
Join date : 19/03/2013
Cấu trúc mã của tiến trình tương tranh.
while (1){
Remainder section
Entry section
Critical section
Exit section
Remainder section
}
Remainder section
Entry section
Critical section
Exit section
Remainder section
}
PhamThiThao (I22B)- Tổng số bài gửi : 54
Join date : 19/03/2013
Khái niệm Đoạn tương tranh và Loại trừ lẫn nhau
- Ví dụ có n tiến trình { P0 , P1 ,....., Pn-1 }. Mỗi tiến trình có đoạn mã gọi là Đoạn tương tranh trong đó tiến trình có thể truy cập và thay đổi vùng nhớ, tập tin hay tài nguyên chung.
- Tính Loại trừ lẫn nhau hay Loại trừ tương hỗ (Mutual Exclusion) về phương diện thời gian: Khi có 1 tiến trình đang ở trong Đoạn tương tranh của nó thì không có tiến trình nào khác trong nhóm cũng tại đoạn như vậy, nghĩa là: Mỗi thời điểm chỉ có 1 tiến trình được phép truy cập hoặc thay đổi tài nguyên chung.
- Các tiến trình tương tranh có cấu trúc mã bao gồm Entry Section (Đoạn Đăng nhập), Critical Section (Đoạn Tương tranh), Exit Section (Đoạn Đăng xuất) và các Remainder Section (Đoạn Còn lại).
- Tính Loại trừ lẫn nhau hay Loại trừ tương hỗ (Mutual Exclusion) về phương diện thời gian: Khi có 1 tiến trình đang ở trong Đoạn tương tranh của nó thì không có tiến trình nào khác trong nhóm cũng tại đoạn như vậy, nghĩa là: Mỗi thời điểm chỉ có 1 tiến trình được phép truy cập hoặc thay đổi tài nguyên chung.
- Các tiến trình tương tranh có cấu trúc mã bao gồm Entry Section (Đoạn Đăng nhập), Critical Section (Đoạn Tương tranh), Exit Section (Đoạn Đăng xuất) và các Remainder Section (Đoạn Còn lại).
PhamThiThao (I22B)- Tổng số bài gửi : 54
Join date : 19/03/2013
Re: Thảo luận Bài 7
Bài toán sản xuất tiêu thụ được đồng bộ bằng 2 đèn hiệu: SemEmpty và SemFull
Producer:
Wait (SemEmpty);
Wait (Mutex);
Buffer [in] = sp mới; //xếp sản phẩm vào bộ đệm
in = (in + 1) % BUFFER-SIZE;
Signal (SemFull);
Signal(Mutex);
Consumer:
Wait (SemFull);
Wait (Mutex);
p = Buffer [out] //lấy sản phẩm ra khỏi bộ đệm
out = (out + 1) % BUFFER-SIZE;
Signal (SemEmpty);
Signal (Mutex);
----------------------------------------
Giá trị ban đầu của Mutex là 1.
Giá trị ban đầu của SemFull là 0.
Giá trị ban đầu của SemEmpty là BUFFER-SIZE.
nguyenthithutrang (I11C)- Tổng số bài gửi : 33
Join date : 26/08/2011
Age : 36
Đến từ : Lâm Đồng
Re: Thảo luận Bài 7
SemFull chứ SemFulk gìPhamThiThao (I22B) đã viết:
DangQuangBinh(I22B)- Tổng số bài gửi : 20
Join date : 12/03/2013
Age : 34
Đến từ : I22B
Trang 5 trong tổng số 10 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Trang 5 trong tổng số 10 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết