Thảo luận Bài 7

Trang 1 trong tổng số 5 trang 1, 2, 3, 4, 5  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Thảo luận Bài 7

Bài gửi  Admin on 1/8/2011, 15:59

Thảo luận những vấn đề liên quan đến Bài 7

Admin
Admin

Tổng số bài gửi : 285
Join date : 18/02/2009

Xem lý lịch thành viên http://hedieuhanh.forumvi.net

Về Đầu Trang Go down

Câu 1: Những lý do đồng bộ hóa công việc tiến trình. Cho ví dụ minh họa

Bài gửi  thanhnam06511c on 20/10/2011, 17:07

- Mục đích của đồng bộ hóa 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 chung và Tránh được hiện tượng Deadloack( Hiện tượng kẹt tiến trình )
+ Đả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) .
VD1: 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


thanhnam06511c

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 2 : Trình bày vấn đề và cấu trúc mã của đoạn tương tranh (Critical-Section Problem)

Bài gửi  NguyenXuanTri28 on 20/10/2011, 19:00

- Đ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).

NguyenXuanTri28

Tổng số bài gửi : 39
Join date : 05/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 1: Những lý do đồng bộ hóa công việc tiến trình. Cho ví dụ minh họa

Bài gửi  NguyenXuanTri28 on 20/10/2011, 19:11

- Đả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) .
Ví dụ: Một công ty có 1 một thang máy ( tài nguyên dùng chung), nhân viên nào vào trước thì được dùng thang máy trước và đi trước. Các nhân viên còn lại phải chờ cho đến khi thang máy trống thì nhân viên kế tiếp mới được vào thang.

NguyenXuanTri28

Tổng số bài gửi : 39
Join date : 05/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 3: Trình bày khái niệm đèn hiệu như một phương tiện đồng bộ hóa công việc các tiến trình. Trình bày 2 ứng dụng của đèn hiệu

Bài gửi  NguyenXuanTri28 on 20/10/2011, 19:20

Khái niệm đè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

NguyenXuanTri28

Tổng số bài gửi : 39
Join date : 05/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Ví dụ về Đoạn tương tranh và Loại trừ lẫn nhau

Bài gửi  TrinhThiPhuongThaoI11C on 20/10/2011, 21:02

ĐƠN XIN VIỆC
Kính gửi: Giám đốc công ty X
Tôi tên là: Nguyễn Văn A
.........(nội dung đơn).........
TP.HCM, ngày 20 tháng 10 năm 2011
Người làm đơn
............(chữ ký).............
Nguyễn Văn A

Nội dung đơn này phải đảm bảo tính toàn vẹn( Integrity), ví dụ: Phía trên là Nguyễn Văn A thì phía dưới cũng phải là Nguyễn Văn A.
Nếu vài tiến trình(hơn 1) cùng sửa đơn trên một lúc( không đảm bảo được tính Loại trừ lẫn nhau) thì nội dung của nó có thể không đúng. Ví dụ: Giả sử tiến trình P1(nhà sản xuất) sửa Nguyễn Văn A phía trên thành Nguyễn Văn An, trong khi P2(nhà sản xuất khác) sửa Nguyễn Văn A phía dưới thành Nguyễn Văn Ân, mà có tiến trình P3( nhà tiêu thụ) nào đó "lấy" đơn về dùng( để in ra) thì kết quả sẽ không nhất quán.

TrinhThiPhuongThaoI11C

Tổng số bài gửi : 19
Join date : 29/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 2:Trình bày vấn đề và cấu trúc mã của đoạn tương tranh(Critical-SectionProblem)

Bài gửi  thanhnam06511c on 20/10/2011, 21:10

- Đ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).
Ví dụ:
ĐƠN XIN VIỆC
Kính gửi: Giám đốc công ty x
Tôi tên là: Nguyễn Thi Lan
..........(nội dung đơn).............
TP Hồ Chí Minh, ngày 20 tháng 10năm 2011
Người làm đơn
....(chữ ký)....
Nguyễn Thi Lan


. Nội dung đơn này phải được đảm bảo tính toàn vẹn (Integrity), ví dụ: Phía trên là Lê Văn Ba thì phía dưới cũng phải là Lê Văn Ba.
. Nếu vài tiến trình (hơn 1) cùng sửa đơn trên một lúc (không đảm bảo được tính Loại trừ lẫn nhau) thì nội dung của nó có thể không đúng. Ví dụ, giả sử tiến trình P1 (nhà sản xuất) sửa Lê Văn Ba phía trên thành Lê Văn Bàng, trong khi P2 (nhà sản xuất khác) sửa Lê Văn Ba phía dưới thành Lê Văn Bá, mà có tiến trình P3 (nhà tiêu thụ) nào đó "lấy" đơn về dùng (để in ra) thì kết quả sẽ không nhất quán như sau:

ĐƠN XIN VIỆC
Kính gửi: Giám đốc công ty x
Tôi tên là: Nguyễn Thi Lan
..........(nội dung đơn).............
TP Hồ Chí Minh, ngày 5 tháng 5 năm 2011
Người làm đơn
....(chữ ký)....
Lê Văn Nguyễn

thanhnam06511c

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 3: Trình bày Khái niệm đèn hiệu như 1 phương tiện đồng bộ hóa công việc các tiến trình. Trình bày 2 ứng dụng của đèn hiệu

Bài gửi  thanhnam06511c on 20/10/2011, 21:15

Khái niệm đè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 nhị phân là đèn 1 chỉ có 2 trạng thái xanh và đỏ (1&0)

thanhnam06511c

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 5: Thực thi đèn hiệu trong Windows

Bài gửi  thanhnam06511c on 20/10/2011, 21:16


thanhnam06511c

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Ví dụ đồng bộ hóa 3,4

Bài gửi  TRANTHINHPHAT (I11C) on 20/10/2011, 21:21

Ví dụ đồng bộ hóa (3)
Giả sử P và Q thực hiện song song với nhau
và giá trị của counter là 5:
register1 = counter; // register1=5
register1 = register1 + 1; // register1=6
register2 = counter; // register2=5
register2 = register2 - 1; // register2=4
counter = register1; // counter=6 !!
counter = register2; // counter=4 !!
Ví dụ đồng bộ hóa (4)
Lỗi: Cho phép P và Q đồng thời thao tác trên
biến chung counter. Sửa lỗi:
register1 = counter; // register1=5
register1 = register1 + 1; // register1=6
counter = register1; // counter=6
register2 = counter; // register2=6
register2 = register2 - 1; // register2=5
counter = register2; // counter=5


Được sửa bởi TRANTHINHPHAT (I11C) ngày 20/10/2011, 21:38; sửa lần 2.

TRANTHINHPHAT (I11C)

Tổng số bài gửi : 52
Join date : 29/08/2011
Age : 27
Đến từ : THU DAU MOT, BINH DUONG

Xem lý lịch thành viên

Về Đầu Trang Go down

Hiểu thêm về AlanMathison Turing

Bài gửi  thanhnam06511c on 20/10/2011, 21:22

Alan Mathison Turing (23/6/1912 – 7/6/1954) là một nhà toán học, logic học và mật mã học người Anh thường được xem là cha đẻ của ngành khoa học máy tính. Thử thách Turing (Turing test) là một trong những cống hiến của ông trong ngành trí tuệ nhân tạo: thử thách này đặt ra câu hỏi rằng máy móc có khi nào đạt được ý thức và có thể suy nghĩ được hay không. Ông đã công thức hóa khái niệm thuật toán và tính toán với máy Turing, đồng thời đưa ra phiên bản của "Turing", mà ngày nay được đông đảo công chúng chấp nhận, về luận đề Church-Turing, một luận đề nói rằng bất cứ mô hình tính toán thiết thực nào đều có khả năng thấp hơn hoặc bằng khả năng của một máy Turing.


Trong Đệ nhị thế chiến, Turing đã từng làm việc tại Bletchley Park, trung tâm giải mật mã của Anh, và một thời là người chỉ huy của Hut 8, một bộ phận của Anh có trách nhiệm trong việc giải mã của hải quân Đức. Ông đã sáng chế ra nhiều kỹ sảo hòng phá mật mã của Đức, trong đó có phương pháp nối các máy giải mã lại với nhau thành một bộ Bombe, một máy điện-cơ để tìm ra công thức gài đặt cho máy Enigma.

Sau chiến tranh, ông cộng tác tại Phòng thí nghiệm Vật lý Quốc gia (National Physical Laboratory), và đã tạo ra một trong những đồ án đầu tiên cho một máy tính có khả năng lưu trữ chương trình (stored-program computer), nhưng nó không bao giờ được kiến tạo thành máy. Năm 1947 ông chuyển đến Đại học Victoria tại Manchester để làm việc, đa số trên phần mềm cho máy Manchester Mark I, lúc đó là một trong những máy tính hiện đại đầu tiên.

Năm 1952, Turing bị kết án với tội đã có những hành vi khiếm nhã nặng nề, sau khi ông tự thú đã có quan hệ đồng tính luyến ái với một người đàn ông ở Manchester. Ông bị tù treo và phải dùng liệu pháp hoóc môn.

Turing qua đời năm 1954; cuộc điều tra cái chết của ông cho thấy ông đã tự tử bằng cách ăn một quả táo có tẩm thuốc độc xyanua.


Thời thơ ấu và thiếu niên

Mẹ của Alan mang thai ông vào năm 1911, tại Chatrapur, Ấn Độ. Cha ông, Julius Mathison Turing, lúc đó là một công chức trong ngành Dân chính Ấn Độ (Indian Civil Service), lúc đó vẫn dưới sự cai quản của chính phủ Anh. Julius và vợ mình, bà Ethel (nguyên họ là Stoney) muốn con mình lớn lên tại Anh, nên họ đã trở về Paddington, Luân Đôn, nơi Alan Turing được sinh ra vào ngày 23 tháng 6 năm 1912. Vì nhiệm vụ với ngành dân chính của cha ông vẫn còn, trong lúc Alan còn nhỏ, cha mẹ của ông thường phải di chuyển giữa Guildford (Anh) và Ấn Độ, để hai đứa con trai của họ cho các người bạn tại Anh giữ hộ, vì tình trạng y tế ở Ấn Độ còn thấp kém. Ngay từ lúc còn nhỏ, ông đã thể hiện các dấu hiệu thiên tài. Ông tự tập đọc trong vòng ba tuần, và có biểu lộ ham thích toán học, cùng với giải đáp các câu đố.

Lúc Alan 6 tuổi, cha mẹ cho ông học tại trường St. Michael\'s. Bà hiệu trưởng của trường đã nhận thấy thiên tài của Alan từ lúc ban đầu, cũng như các giáo viên của ông sau này. Năm 1926, khi ông 14 tuổi, ông đến học tại trường nội trú Sherborne ở Dorset. Ngày khai giảng của khóa đầu xảy ra cùng ngày với một cuộc tổng đình công tại Anh, nhưng vì ông quyết trí muốn đến lớp, ông đã chạy xe đạp trên 60 dặm (100 km) từ Southampton đến trường, không có người dẫn, chỉ dừng lại và trọ qua đêm tại một quán trọ trên đường. Sự kiện này đã được báo chí địa phương tường trình.
Tuy có năng khiếu toán và khoa học, Turing không được các thầy cô coi trọng tại Sherborne, một trường công nổi tiếng và đắt đỏ (thật sự đây là một trường tư ở Anh nổi tiếng với tính từ thiện) vì trường này đánh giá các môn kinh điển cao hơn. Hiệu trưởng của ông đã viết thư cho cha mẹ ông nói "Tôi hy vọng rằng anh ta không rơi vào tình trạng lơ lửng, giữa trường nọ với trường kia. Nếu anh ta muốn ở lại Trường Công, thì anh ta nhất định phải đặt mục tiêu để trở thành một người có giáo dục. Còn nếu anh ta chỉ muốn trở thành một Nhà khoa học chuyên ngành thì tôi e rằng anh ta đang phung phí thời gian của mình tại Trường Công" .

Mặc dầu vậy, Turing vẫn biểu hiện năng khiếu trong các môn ông ưa thích. Ông đã giải được nhiều bài toán bậc cao trong năm 1927 trước khi học đến giải tích cơ bản. Khi ông 16 tuổi (1928), ông đã hiểu được các tác phẩm của Albert Einstein, không những nắm được nội dung, ông còn suy luận được về những thắc mắc của Einstein đối với các định luật của Newton về chuyển động trong một bài viết mà Einstein không nói thẳng ra.

Trong lúc học tại Sherborne, Turing đã ngầm yêu Christopher Morcom, một người bạn, nhưng mối tình không được đáp lại. Morcom qua đời một vài tuần trước khi ra trường vì bệnh lao đã mắc phải sau khi uống sữa bò có vi khuẩn lao lúc còn nhỏ. Turing rất đau lòng vì sự việc này.


Đại học và các nghiên cứu trong toán học

Vì Turing không chịu học các môn ngoài toán và khoa học, ông không nhận được học bổng để học tại Học viện Trinity của Đại học Cambridge, mà phải học tại Học viện King\'s của Đại học Cambridge từ năm 1931 đến 1934 và tốt nghiệp đại học với bằng danh dự. Năm 1935 ông được chọn làm nghiên cứu sinh tại trường King\'s, do sức thuyết phục của mình trong luận văn về hàm số độ sai của Gauss.

Trong bài viết nổi tiếng của ông, tựa đề "Các số khả tính, với áp dụng trong Vấn đề về lựa chọn" (On Computable Numbers, with an Application to the Entscheidungsproblem) - thuật toán lôgic - (đệ trình ngày 28 tháng 5 năm 1936), Turing tái dựng lại kết quả của Kurt Gödel hồi năm 1931 về những hạn chế trong chứng minh và tính toán, thay đổi thuật ngữ tường trình số học chính quy của Gödel, bằng cái mà ngày này người ta gọi là máy Turing, một dụng cụ chính quy và đơn giản. Ông đã chứng minh rằng một cái máy như vậy sẽ có khả năng tính toán bất cứ một vấn đề toán học nào, nếu vấn đề ấy có thể được biểu thị bằng một biểu trình thuật toán, ngay cả khi một cái máy Turing cụ thể như vậy không có mấy công dụng thực tiễn vì sự chậm chạp của nó so với những cơ chế khác.
Máy Turing, cho đến nay, vẫn là một vấn đề nghiên cứu trung tâm trong lý thuyết về máy tính. Ông còn tiếp tục chứng mình rằng vấn đề về lựa chọn (Entscheidungsproblem) là một vấn đề không có giải đáp, bằng cách đầu tiên chứng minh rằng nan đề ngưng hoạt động trong máy của Turing là một nan đề bất khả định; khó mà có thể quyết định được rằng một cái máy Turing nào đó sẽ ngưng hoạt động tại một điểm nào đó. Tuy chứng minh của ông được đăng công khai sau chứng minh tương tự của Alonzo Church đối với giải tích lambda (lambda calculus), chứng minh của Turing được coi là dễ hiểu và trực giác hơn. Chứng minh của ông còn nổi tiếng về đề bạt một cái "máy Turing vạn năng" (Universal (Turing) Machine), một ý tưởng rằng một cái máy như vậy có thể làm bất cứ việc gì mà các máy khác phải làm. Bài viết còn giới thiệu quan niệm về số khả định (definable number).

Hầu hết thời gian giữa năm 1937 và 1938, ông cư trú tại Đại học Princeton, nghiên cứu dưới sự chỉ đạo của Alonzo Church. Năm 1938, ông đạt được bằng Tiến sĩ tại trường này. Luận văn của ông giới thiệu quan niệm tính toán tương đối (relative computing). Trong quan niệm này, nhiều máy Turing được ghép lại, trở thành một cái máy tiên tri (oracle machine), cho phép nghiên cứu những phương trình không thể giải được nếu chỉ sử dụng một cái máy Turing mà thôi.

Sau khi quay trở lại Cambridge vào năm 1939, ông thính dự giảng đường của Ludwig Wittgenstein về nền tảng của toán học (foundations of mathematics). Hai người tranh cãi và bất đồng ý kiến một cách kịch liệt. Trong khi Turing bảo vệ lập trường của chủ nghĩa hình thức (formalism), thì Wittgenstein lại tranh cãi rằng toán học được đánh giá quá mức, và bản thân nó không thể tìm ra bất cứ một chân lý cuối cùng nào (absolute truth) (Wittgenstein 1932/1976).


Giải mật mã
Hầu hết thời gian giữa năm 1937 và 1938, ông cư trú tại Đại học Princeton, nghiên cứu dưới sự chỉ đạo của Alonzo Church. Năm 1938, ông đạt được bằng Tiến sĩ tại trường này. Luận văn của ông giới thiệu quan niệm tính toán tương đối (relative computing). Trong quan niệm này, nhiều máy Turing được ghép lại, trở thành một cái máy tiên tri (oracle machine), cho phép nghiên cứu những phương trình không thể giải được nếu chỉ sử dụng một cái máy Turing mà thôi.
Sau khi quay trở lại Cambridge vào năm 1939, ông thính dự giảng đường của Ludwig Wittgenstein về nền tảng của toán học (foundations of mathematics). Hai người tranh cãi và bất đồng ý kiến một cách kịch liệt. Trong khi Turing bảo vệ lập trường của chủ nghĩa hình thức (formalism), thì Wittgenstein lại tranh cãi rằng toán học được đánh giá quá mức, và bản thân nó không thể tìm ra bất cứ một chân lý cuối cùng nào (absolute truth) (Wittgenstein 1932/1976).

Máy bombe của Turing và Welchman

Chỉ trong vài tuần sau khi đến Bletchley Park[2], Turing đã sáng chế ra một cái máy cơ-điện tử (electromechanical machine) giúp vào việc giải mã máy Enigma, đặt tên là máy bombe, lấy tên theo cái máy "bomba" được sáng chế tại Ba Lan. Máy bombe, với một nâng cấp được đề bạt bởi nhà toán học Gordon Welchman, trở thành dụng cụ chủ yếu dùng để đọc nguồn tin truyền qua lại từ máy Enigma.

Máy bombe dò tìm công thức cài đặt của khối quay trong máy Enigma, và nó cần phải có một bộ mã (crib), tức là một dòng chữ chưa mã hóa và một dòng mật mã tương ứng. Với mỗi dự kiến cài đặt của khối quay, máy bombe hoàn thiện một chuỗi các tiến trình suy luận lôgic, dựa vào bộ mã, dùng các cấu kết mạch điện tử đã được lắp ráp. Máy bombe lùng tìm và phát hiện mâu thuẫn khi nó xảy ra, loại bỏ công thức cài đặt gây nên sự mâu thuẫn ấy, rồi tiếp tục lùng tìm một công thức khác, hợp lý hơn. Đa số các công thức cài đặt khả quan đều gây nên sự mâu thuẫn, và bị loại bỏ, chỉ để lại một số ít các công thức khả dĩ để được nghiên cứu chi tiết hơn. Máy bombe của Turing lần đầu tiên được lắp ráp vào ngày 18 tháng 3 năm 1940. Có đến trên 200 cái máy bombe như vậy vẫn đang hoạt động khi chiến tranh kết thúc

Hut 8 và máy Enigma của hải quân Đức


Hai gian nhà trong sân trước chuồng ngựa tại Bletchley Park. Turing đã từng làm việc tại đây trong những năm 1939–1940 cho đến khi ông chuyển sang Hut 8
Vào tháng 12 năm 1940, Turing khám phá ra hệ thống chỉ thị của máy Enigma của hải quân Đức, một hệ thống chỉ thị phức tạp hơn tất cả các hệ thống chỉ thị khác đang được dùng bởi các chi nhánh trong quân đội. Turing cũng sáng chế ra công thức xác suất Bayes (Bayesian), một kỹ thuật trong thống kê được đặt tên là "Banburismus", để giúp vào việc giải mã Enigma của hải quân Đức. Banburismus cho phép loại bỏ một số công thức cài đặt của khối quay của máy Enigma, giảm lượng thời gian kiểm nghiệm các công thức cài đặt cần thiết trên các máy bombe.
Vào mùa xuân năm 1941, Turing đính hôn với một nhân viên cùng làm việc tại Hut 8, tên là Joan Clarke, nhưng chỉ đến mùa hè, cả hai đã thoả thuận hủy bỏ cuộc hôn nhân.

Tháng 7 năm 1942, Turing sáng chế ra một kỹ sảo, đặt tên là Turingismus hoặc Turingery, dùng vào việc chống lại máy mật mã Lorenz. Rất nhiều người lầm tưởng rằng Turing là một nhân vật quan trọng trong việc thiết kế máy tính Colossus, song điều này không phải là một sự thật [3].

Tháng 11 năm 1942, Turing du lịch sang Mỹ và bắt liên lạc với những nhân viên phân tích mật mã của hải quân Mỹ tại Washington, D.C., thông báo cho họ biết về máy Enigma của hải quân Đức, cùng với sự việc lắp ráp máy bombe. Ông đồng thời trợ lý việc kiến tạo các công cụ truyền ngôn bảo mật (secure speech) tại Bell Labs. Tháng 3 năm 1948, ông quay trở lại Bletchley Park. Trong khi ông vắng mặt, Hugh Alexander thay thế ông làm trưởng phòng Hut 8, tuy trên thực tế Hugh Alexander đã nắm quyền trưởng phòng trong một thời gian khá lâu. Turing rất ít quan tâm đến việc quản lý công việc hằng ngày của bộ phận. Turing trở thành cố vấn chung về phân tích mật mã tại Bletchley Park.

Trong những ngày sau rốt của chiến tranh, ông tự trau dồi về công nghệ điện tử, trong khi chịu trách nhiệm (được sự hỗ trợ của kỹ sư Donald Bayley) thiết kế một cái máy di động - mật hiệu là Delilah - cho phép thông tin truyền âm bảo mật (secure voice). Với xu hướng ứng dụng trong các công dụng khác, máy Delilah thiếu khả năng truyền sóng radio trường tuyến (long-distance radio transmission), và không được sử dụng trong chiến tranh vì sự hoàn thành của nó quá muộn. Tuy Turing đã thao diễn chức năng của máy cho các quan chức cấp trên, bằng cách mật mã hóa và giải mã một bản ghi âm lời nói của Winston Churchill, máy Delilah vẫn không được chọn và sử dụng.

Trong năm 1945, Turing đã được tặng huy chương OBE (Order of the British Empire) vì thành tích phục vụ trong cuộc chiến tranh.


Những máy tính đầu tiên và kiểm nghiệm của Turing

Từ năm 1945 đến năm 1947, Turing đã làm việc tại Phòng thí nghiệm Vật lý Quốc gia (National Physical Laboratory). Tại đây, ông thiết kế máy tính ACE (Automatic Computing Engine - Máy tính tự động). Ngày 19 tháng 2 năm 1946, ông đệ trình một bản thiết kế hoàn chỉnh đầu tiên của Anh về máy tính với khả năng lưu trữ lập trình (xem kiến trúc Von Neumann). Tuy ông đã thành công trong việc thiết kế máy ACE, song do những trì hoãn trong việc khởi công đề án, ông trở nên thất vọng và chán nản. Cuối năm 1947, ông quay trở lại Cambridge, bắt đầu một năm nghỉ ngơi của mình (sabbatical year). Trong khi ông đang nghỉ ngơi tại Cambridge, công việc xây dựng máy ACE đã bị huỷ bỏ hoàn toàn, trước khi nó được khởi công xây dựng. Năm 1949, ông trở thành phó giám đốc phòng thí nghiệm máy tính (computing laboratory) của Đại học Manchester, và viết phần mềm cho một trong những máy tính đầu tiên — máy Manchester Mark I. Trong thời gian này, ông tiếp tục làm thềm những công việc trừu tượng, và trong bài viết "Vi tính máy móc và trí thông minh" (Computing machinery and intelligence) - tờ Mind, tháng 10 năm 1950 - ông nói đến vấn đề về "trí tuệ nhân tạo" (artificial intelligence) và đề đạt một phương thức kiểm nghiệm, mà hiện giờ được gọi là kiểm nghiệm Turing (Turing test), một cố gắng định nghĩa tiêu chuẩn cho một cái máy được gọi là "có tri giác" (sentient).
Năm 1948, Turing, hiện đang làm việc với một người bạn học cũ, D.G. Champernowne, bắt đầu viết một chương trình đánh cờ vua cho một máy tính chưa từng tồn tại. Năm 1952, tuy thiếu một máy tính đủ sức để thi hành phần mềm, Turing đã chơi một ván cờ. Trong ván cờ này, ông bắt trước cái máy tính, đợi nửa tiếng đồng hồ trước khi đi một quân cờ. Ván cờ đã được ghi chép lại; phần mềm thua người bạn đồng hành của Turing, Alick Glennie, song lại thắng người vợ của ông Champernowne.

Tạo mẫu hình và sinh toán học

Turing nghiên cứu vấn đề sinh toán học (mathematical biology) từ năm 1952 cho đến khi qua đời năm 1954, đặc biệt về hình thái học (morphogenesis). Năm 1952, ông đã cho xuất bản một bài viết về vấn đến này, dưới cái tên "Cơ sở hoá học của hình thái học" (The Chemical Basis of Morphogenesis). Điểm trọng tâm thu hút sự chú ý của ông là việc tìm hiểu sự sắp xếp lá theo chu trình của dãy số Fibonacci, sự tồn tại của dãy số Fibonacci trong cấu trúc của thực vật. Ông dùng phương trình phản ứng phân tán, cái mà hiện nay là trung tâm của nghành Tạo mẫu hình (pattern formation). Những bài viết sau này của ông không được xuất bản, cho mãi đến năm 1992, khi loạt các cuốn "Những nghiên cứu và sáng chế của A.M. Turing" (Collected Works of A.M. Turing) được xuất bản.

thanhnam06511c

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Edsger Dijkstra

Bài gửi  TRANTHINHPHAT (I11C) on 20/10/2011, 21:24

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.


TRANTHINHPHAT (I11C)

Tổng số bài gửi : 52
Join date : 29/08/2011
Age : 27
Đến từ : THU DAU MOT, BINH DUONG

Xem lý lịch thành viên

Về Đầu Trang Go down

Thực thi đèn hiệu trong window

Bài gửi  nguyenthithuylinh (I11C) on 20/10/2011, 22:06

thanhnam06511c đã viết:

typedef int semaphore;
semaphore s = n;//n là giá trị ban đầu của đèn hiệu.
wait (s);
signal (s);
-Thực thi trong C++(TH):
HANDLE s;
s=CreateSemaphore (0, n, max, t);//max là giá trị tối đa của đèn hiệu
// t – Tên đèn hiệu hoặc t =0
// n- Giá trị ban đầu của đèn hiệu
WaitForSingleObject (s, timeout); /* timeout = INFINITE hoặc số mili giây chờ */
ReleaseSemaphore (s, 1, NULL);

nguyenthithuylinh (I11C)

Tổng số bài gửi : 23
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Nhà khoa học Edsger Dijkstra

Bài gửi  NguyenThanhTam (I11C) on 20/10/2011, 22:06

Nguồn http://vi.wikipedia.org/wiki/Edsger_Dijkstra
Edsger Wybe Dijkstra (phát âm tiếng Hà Lan: [ˈɛtsxər ˈwibə ˈdɛɪkstra]; 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.

  • 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ó, để đ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.)

  • Ô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.

Thuật toán Dijkstra là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không có cạnh mang trọng số âm.
Bài toán
Cho một đồ thị có hướng G=(V,E), một hàm trọng số w: E → [0, ∞) và một đỉnh nguồn s. Cần tính toán được đường đi ngắn nhất từ đỉnh nguồn s đến mỗi đỉnh của đồ thị.
Ví dụ: Chúng ta dùng các đỉnh của đồ thị để mô hình các thành phố và
các cạnh để mô hình các đường nối giữa chúng. Khi đó trọng số các cạnh
có thể xem như độ dài của các con đường (và do đó là không âm). Chúng
ta cần vận chuyển từ thành phố s đến thành phố t. Thuật toán Dijkstra
sẽ giúp chỉ ra đường đi ngắn nhất chúng ta có thể đi.
Trọng số không âm của các cạnh của đồ thị mang tính tổng quát hơn
khoảng cách hình học giữa hai đỉnh đầu mút của chúng. Ví dụ, với 3 đỉnh
A, B, C đường đi A-B-C có thể ngắn hơn so với đường đi trực tiếp A-C.
Thuật toán
  • Ta quản lý một tập hợp động S. Ban đầu S={s}.

  • Với mỗi đỉnh v, chúng ta quản lý một nhãn d[v] là độ dài bé nhất trong các đường đi từ nguồn s đến một đỉnh u nào đó thuộc S, rồi đi theo cạnh nối u-v.

Chứng minh
  • Chúng ta sẽ chỉ ra, khi một đỉnh v được bổ sung vào tập S, thì d[v] là giá trị của đường đi ngắn nhất từ nguồn s đến v.

  • Theo định nghĩa nhãn d, d[v] là giá trị của đường đi ngắn nhất trong các đường đi từ nguồn s, qua các đỉnh trong S, rồi theo một cạnh nối trực tiếp u-v đến v.

  • Giả sử tồn tại một đường đi từ s đến v có giá trị bé hơn d[v]. Như vậy trong đường đi, tồn tại đỉnh giữa s và v không thuộc S. Chọn w là đỉnh đầu tiên như vậy.



Thời gian chạy
Thuật toán Dijkstra bình thường sẽ có độ phức tạp là O( n^2+m ). Tuy nhiên ta có thể sử dụng kết hợp với cấu trúc heap, khi đó độ phức tạp sẽ là O( (n+m)*log2(n) ).
avatar
NguyenThanhTam (I11C)

Tổng số bài gửi : 21
Join date : 25/08/2011
Age : 29

Xem lý lịch thành viên

Về Đầu Trang Go down

Thực thi bài toán sản xuất, tiêu thụ được đồng bộ bằng 3 đèn hiệu:

Bài gửi  nguyenthithuylinh (I11C) on 20/10/2011, 22:31

HANDLE semEmpty, semFull; //hai đèn hiệu
CRITICAL_SECTION critSec;//Biến kiểu Mutex
void Producer(void * p)
{
while (1)
{
// ... Sản xuất (nextProduced)
// Chờ đến khi có chỗ trống
WaitForSingleObject(semEmpty, INFINITE);
EnterCriticalSection(&critSec);
//…Sắp sản phẩm vào Buffer
// Tăng (semFull) lên 1
ReleaseSemaphore(semFull, 1, NULL);
LeaveCriticalSection(&critSec);
SuspendThread(GetCurrentThread());
}
}
void Consumer()
{
int nextConsumed;
while (1)
{
// Chờ đến khi có sản phẩm
WaitForSingleObject(semFull, INFINITE);
EnterCriticalSection(&critSec);
nextConsumed=buffer[out];
out=(out+1)%BUFFER_SIZE;
// Tăng (semEmpty) lên 1
ReleaseSemaphore (semEmpty, 1, NULL);
LeaveCriticalSection(&critSec);
// ... Tiêu thụ (nextConsumed)
SuspendThread(GetCurrentThread());
}
}
- Biến semEmpty dùng để chứa mục quản của đèn hiệu quản lý số vùng trống trong bộ đệm.
- Biến semFull dùng để chứa mục quản của đèn hiệu quản lý số sản phẩm trong bộ đệm.
- CritSec là đối tượng đèn hiệu kiểu mutex dùng để bảo vệ đoạn tương tranh để đảm bảo tính loại trừ lẫn nhau trong công việc của các tiến trình với tài nguyên dùng chung.

nguyenthithuylinh (I11C)

Tổng số bài gửi : 23
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Bổ sung hinh minh hoạ

Bài gửi  NguyenThanhTam (I11C) on 20/10/2011, 22:34

thanhnam06511c đã viết:- Mục đích của đồng bộ hóa 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 chung và Tránh được hiện tượng Deadloack( Hiện tượng kẹt tiến trình )
+ Đả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) .
VD1: 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



avatar
NguyenThanhTam (I11C)

Tổng số bài gửi : 21
Join date : 25/08/2011
Age : 29

Xem lý lịch thành viên

Về Đầu Trang Go down

Thực thi đèn hiệu trong windows

Bài gửi  NgoDucTuan (I11C) on 20/10/2011, 22:49

typedef int semaphore;
semaphore s = n;
wait (s);
signal (s);

HANDLE s;
s=CreateSemaphore (0, n, max, t);
WaitForSingleObject (s, timeout);
ReleaseSemaphore (s, 1, NULL);

Ai hiểu code nầy không giải thích gúp mình với
Cảm ơn mọi người nhiều lắm.
avatar
NgoDucTuan (I11C)

Tổng số bài gửi : 52
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 7

Bài gửi  tranphanhieu36_i11c on 21/10/2011, 06:41

NgoDucTuan (I11C) đã viết:typedef int semaphore;
semaphore s = n;
wait (s);
signal (s);

HANDLE s;
s=CreateSemaphore (0, n, max, t);
WaitForSingleObject (s, timeout);
ReleaseSemaphore (s, 1, NULL);

Ai hiểu code nầy không giải thích gúp mình với
Cảm ơn mọi người nhiều lắm.


Chào bạn !
Đoạn code này trình bày về vấn đề thực thi đèn hiệu trong windows. Cụ thể là bài toán Producer-Consumer được đồng bộ bằng 2 đèn hiệu.

Đoạn code :
typedef int semaphore;
semaphore s = n;
wait (s);
signal (s);
là đoạn code theo định nghĩa nói về vấn đề này.

Còn đoạn code :
HANDLE s;
s=CreateSemaphore (0, n, max, t);
WaitForSingleObject (s, timeout);
ReleaseSemaphore (s, 1, NULL);
Là đoạn code cụ thể theo đoạn code định nghĩa ở trên được viết bằng C++

Mình sẽ giải thích song song cả hai đoạn code luôn, cũng như trong slide 7.14 đã chia làm 3 phần thì mình xin giải thích theo từng phần nha :

1. Đoạn code ở phần đầu ( 2 dòng đầu ) theo định nghĩa nói về tạo lập đèn hiệu và khởi tạo đèn hiệu.
typedef int semaphore; tạo 1 kiểu dữ liệu semaphore ( kiểu đèn hiệu, kiểu nguyên)
HANDLE s; ( Trong C++) cụ thể hơn là tạo 1 biến s ( coi như là semaphore) kiểu HANDLE(nhớ viết hoa hết nha) là kiểu mục quản đã được định nghĩa sẵn trong C++ bằng hàm thư viện
semaphore s = n;// tạo 1 biến s kiểu semaphore và gán dữ liệu đầu tiên cho nó lúc khởi tạo là n (đã cho trước)
s=CreateSemaphore (0, n, max, t); (Trong C++) gán giá trị khởi tạo cho biến s (kiểu HANDLE) bằng hàm CreateSemaphore() với 4 tham số bên trong là :
-1.Tham số đầu tiên bằng 0 không cần quan tâm
-2.Tham số thứ 2 là tham số truyền vào giá trị khởi tạo đầu tiên cho đèn hiệu (từ 0->max nha)
-3.Tham số thứ 3 là tham số max (giá trị tối đa được phép có của đèn hiệu)
-4.Tham số thứ 4 là tham số tên đèn hiệu (chuỗi ký tự nào đó hoặc là 0)
Nếu đặt nó là chuỗi ký tự thì s là Liên tiến trình
Nếu đặt nó là 0 thì nó là Nội tiến trình
Nếu bạn cần biết về liên tiến trình & nội tiến trình khác nhau chỗ nào thì bạn cứ hỏi sau nha !
Nói chung về đoạn code này là tạo đèn hiệu->Khởi tạo màu sắc đầu tiên cho đèn hiệu

2.Đoạn code thứ 2
wait(s);// Đây là hàm :
wait (semaphore s) { // s là kiểu semaphore ( hay còn gọi là đèn hiệu
while ( S <= 0 ); // chờ bận nếu s<=0 , (chờ bận nếu đèn đỏ )
S --; // Giảm s đi 1, khi bắt đầu thực hiện thì giảm màu đèn( có thể về màu thấp nhất hoặc màu thấp hơn)
}
Cụ thể trong C++
WaitForSingleObject (s, timeout);// đây là hàm tương đương chức năng với hàm wait bên trên với s là tên đèn truyền vào, và có thêm thông số thứ hai là timeout là thông số chờ với thời gian timeout(tính theo mili giây). Nều hết thời gian timeout mà đèn hiệu không bật thì vẫn thực thi đoạn code.
/* timeout = INFINITE (vô hạn) hoặc số mili giây chờ */

3.Đoạn code thứ 3
signal (s);// dưới đay là định nghĩa đơn giản hàm này
signal (semaphore S) {// tham số s là kiểu semaphore nha
S ++; // Tăng s lên 1, cũng như là đổi màu đèn hiệu khi thực hiện xong
}
Cụ thể trong C++
ReleaseSemaphore (s, 1, NULL);// Đây là hàm tương đương chức năng với hàm signal trên nhưng có thêm một số chức năng nâng cao.
-với thông đầu tiên ta truyền vào biến cụ thể kiểu HANDLE (ví dụ như là s ở trên) tương đương như là đèn hiệu cần tăng màu lên.
-với thông số thứ 2 là thông số số màu đèn hiệu cần tăng lên ( có thể 1, hay 2,3...)
-Thông số thứ 3 mình nghe thầy giảng là không dùng, cũng chẳng cần quan tâm, mà mình cũng chưa có thời gian để tìm hiểu. Bạn phải truyền vào nó là NULL hay 0 nha.

Admin: Tham số thứ 3 có thể là một biến nguyên v nào đó dùng để nhận giá trị của đèn hiệu trước khi tăng.

Đoạn code này mình nghĩ bạn nên nghĩ nó giống như ví dụ đèn giao thông của thầy, giờ mình phải đi học rồi nên nếu bạn cần sẽ gửi sau để bạn tìm hiểu kỹ hơn.
Với hàm wait() và signal() bạn nên tìm hiểu kỹ hơn trong định nghĩa lại ở slide 7.14 trong chương 7 tài liệu thầy gửi để rõ hơn nha. Trong slide đó hàm còn có thêm 1 số chức năng nữa đó.
Với 3 hàm cụ thể trong C++ nếu bạn muốn biết code trong nó là gì thì nhắn tin cho mình, mình sẽ gửi cho nha, Nhưng nếu bạn không có nhiều thời gian thì đầu tiên mình nghĩ là nên học cách sử dụng nó trước (như mình đã trình bày ở trên) rồi tìm hiểu kỹ sau.

Bài trả lời của mình nếu có gì sai sót hay thiếu gì thì mong thầy và các bạn bổ sung. Nhưng về cơ bản mình nghĩ là nó đúng, vì mình trình bày theo bài giảng của thầy trên lớp.
Cảm ơn bạn đã hỏi ! Smile

tranphanhieu36_i11c

Tổng số bài gửi : 31
Join date : 25/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu 1: Những lý do đồng bộ hóa công việc tiến trình. Cho ví dụ minh họa

Bài gửi  ThanhThao04(I11C) on 21/10/2011, 06:47

thanhnam06511c đã viết:- Mục đích của đồng bộ hóa 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 chung và Tránh được hiện tượng Deadloack( Hiện tượng kẹt tiến trình )
+ Đả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) .
VD1: 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

Các bạn tham khảo thêm ví dụ về đồng bộ hóa tiến trình
Đồng bộ tập ảnh
Để đồng bộ (import) phim và ảnh từ máy ảnh của điện thoại, bạn nhấn đúp chuột vào mục Import pictures and videos. Windows sẽ tự động tìm kiếm ảnh có trong thư viện ảnh chụp (camera roll). Bạn cũng có thể bổ sung các từ khóa (tag) nếu muốn, sau đó nhấn OK để bắt đầu quá trình đồng bộ.
Bạn có thể chọn thêm tùy chọn xóa hẳn ảnh trong thư viện ảnh chụp trên máy, hay vẫn duy trì chúng trên điện thoại. Khi mọi dữ liệu được đồng bộ vào máy tính, một cửa sổ Explorer sẽ xuất hiện để thông báo cho bạn những ảnh nào đã được chép vào máy tính.
Ví dụ này cũng giống như ví dụ trên lớp thầy minh họa: Một bạn lên bảng viết đầy đủ họ tên mình -> khi viết xong một bạn dưới lớp chụp lại họ tên bạn lên bảng viết =>2 việc làm của 2 bạn được gọi là đồng bộ hóa công việc các tiến trình.


Được sửa bởi ThanhThao04(I11C) ngày 21/10/2011, 16:17; sửa lần 1.
avatar
ThanhThao04(I11C)

Tổng số bài gửi : 34
Join date : 31/08/2011
Đến từ : Phú Yên

Xem lý lịch thành viên

Về Đầu Trang Go down

RE: Mục đích đồng bộ hóa tiến trinh? Ví Dụ

Bài gửi  LaVanKhuong (I11C) on 21/10/2011, 07:31

- Mục đích của đồng bộ hóa công việc của các tiến trình nhằm đảm bảo tính nhất quán tính toàn vẹn của tài nguyên dùng chung và tránh được hiện tượng ket(dealdock)
ví dụ trên lớp thầy giảng:
-Ban Dương Trung Tính lên bảng(Tài nguyên dùng chung) viết tên của mình, nếu bạn chưa viết xong mà bạn khác chụp ảnh trên bảng để đưa về xử lý sẽ dẫn đến thông tin bị sai, do vậy việc đồng bộ có tác dụng rất lớn nghĩa là chờ bạn Tính viết xong(nghĩa là có chờ) sau đó mới chụp ảnh lấy về thì đảm bảo thông tin chính xác.


LaVanKhuong (I11C)

Tổng số bài gửi : 15
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Bổ sung thêm về Thực thi đèn hiệu !!!

Bài gửi  DaoQuangSieu (I11C) on 21/10/2011, 07:35

nguyenthithuylinh (I11C) đã viết:
thanhnam06511c đã viết:

typedef int semaphore;
semaphore s = n;//n là giá trị ban đầu của đèn hiệu.
wait (s);
signal (s);
-Thực thi trong C++(TH):
HANDLE s;
s=CreateSemaphore (0, n, max, t);//max là giá trị tối đa của đèn hiệu
// t – Tên đèn hiệu hoặc t =0
// n- Giá trị ban đầu của đèn hiệu
WaitForSingleObject (s, timeout); /* timeout = INFINITE hoặc số mili giây chờ */
ReleaseSemaphore (s, 1, NULL);
Mình xin bổ sung thêm:
-Đèn hiệu có tên t được gọi là đèn hiệu liên tiến trình.Nó được dùng bên trong 1 lớp.
-Đèn hiệu có t=0 là đèn hiệu nội tiến trình.
*Tại sao có đèn hiệu liên tiến trình mà dùng thêm đèn hiệu nội tiến trình ?
Khi dùng đèn hiệu nội tiến trình thì sẽ hiệu quả hơn.

DaoQuangSieu (I11C)

Tổng số bài gửi : 29
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Câu hỏi bài tập về nhà

Bài gửi  chipphonui on 21/10/2011, 07:37

câu 4: bộ hóa công việc của p1,p2,p3. sao cho:
a, p1 trước p2, p2 trước p3?
b, p1 trước p2 và p3?
c, p1 và p2 trước p3?
đã ai giải bài tập này chưa? ai giúp mình với. mình có đi học nhưng không hiểu cách làm bt này. help me! help me! thanks thanks...
avatar
chipphonui

Tổng số bài gửi : 21
Join date : 07/09/2011
Age : 28
Đến từ : Gia lai

Xem lý lịch thành viên

Về Đầu Trang Go down

Giải bài tập

Bài gửi  nguyenminhlai.(I11C) on 21/10/2011, 07:47

câu 4: bộ hóa công việc của p1,p2,p3. sao cho:
a, p1 trước p2, p2 trước p3?
b, p1 trước p2 và p3?
c, p1 và p2 trước p3?
mình chưa bao giờ thấy bài tập này khi nào cả? Bạn nào biết giải cho mình và mọi người cùng xem với. Smile Smile Smile

nguyenminhlai.(I11C)

Tổng số bài gửi : 24
Join date : 26/08/2011
Age : 28
Đến từ : Quảng Nam

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 7

Bài gửi  nguyenthaihiep (I11C) on 21/10/2011, 08:23

chipphonui đã viết:câu 4: bộ hóa công việc của p1,p2,p3. sao cho:
a, p1 trước p2, p2 trước p3?
b, p1 trước p2 và p3?
c, p1 và p2 trước p3?
đã ai giải bài tập này chưa? ai giúp mình với. mình có đi học nhưng không hiểu cách làm bt này. help me! help me! thanks thanks...
Bài mới học hôm qua mà, bạn nên suy nghĩ tìm cách giải đi, nếu suy nghĩ mãi mà vẫn ko tìm ra lời giải thì hãy tham khảo người khác, vừa rèn luyện cho mình tính kiên nhẫn vừa giúp mình ngày một giỏi hơn đó.

nguyenthaihiep (I11C)

Tổng số bài gửi : 34
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 7

Bài gửi  NguyenTienPhong083 (I11C) on 21/10/2011, 08:28

Khái niệm về đồng bộ hóa tiến trình
Đồng bộ hóa tiến trình là đồng bộ hóa các luồng ở bên trong của tiến trình, là biết cách điều khiển các luồng cho chúng ăn nhập với nhau có trước có sau để đảm bảo tính nhất quán và tính toàn vẹn của tài nguyên dùng chung,và đảm bảo theo yêu cầu của người dùng.
Tài nguyên dùng chung trong bài toán sản xuất tiêu thụ là Buffer, các biến In,Out
Ví dụ BUFFER_SIZE 10
Tài nguyên dùng chung là vùng nhớ để chúng trao đổi thông tin với nhau.
Tránh được hiện tượng Deadlock.
Trở lại vấn đề bài toán sản xuất – tiêu thụ với giải pháp mới dùng biến đếm Count.
Cấu trúc bộ nhớ đệm chung.
#define BUFFER_SIZE 10
typedef struct {
. . . // Mô tả các thành phần của 1 khoang chứa
} item;
item buffer [BUFFER_SIZE]; // Bộ nhớ đệm.
int in = 0; // Con trỏ tới vị trí trống kế kiếp.
int out = 0; // Con trỏ tới vị trí lấy tiếp theo.
int count= 0;// Đếm số sản phẩm có trong Buffer.

Giải pháp mới duy trì đủ [BUFFER_SIZE] sản phẩm cùng một lúc trong Buffer.


NguyenTienPhong083 (I11C)

Tổng số bài gửi : 37
Join date : 26/08/2011
Age : 28

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 7

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 1 trong tổng số 5 trang 1, 2, 3, 4, 5  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết