Thảo luận Bài 7

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

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

Vấn đề đoạn tương tranh (miền găng).

Bài gửi  Tranvancanh(I11C) on 23/10/2011, 13:48

- Giả sử 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ỗ về phương diện thời gian:khi có 1 tiến trình ở 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 trong 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 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,Critical Section,Exit Section và các remainder Section.
Code:
While(1)
{
Remainder section
Entry section // các tiến trình(1 lệnh hoặc chuỗi lệnh) được chờ tại đây.
Critical section //vùng tương tranh
Exit section
Remainder section
}

Tranvancanh(I11C)

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

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

Về Đầu Trang Go down

Nữ lập trình viên đầu tiên trên thế giới

Bài gửi  nguyenthingocloan (I11C) on 23/10/2011, 15:32

Ada Lovelace - Nữ lập trình viên đầu tiên trên thế giới

Ada Lovelace (tên đầy đủ: Augusta Ada King, bà Bá tước Lovelace; tên trước khi lấy chồng: Augusta Ada Byron; 10 tháng 12, 1815 – 27 tháng 11, 1852) nổi tiếng vì đã viết bản mô tả chiếc máy tính của Charles Babbage, nhan đề The Analytical Engine. Bà cũng được xem như là lập trình viên đầu tiên trong lịch sử, tuy đây còn là một vấn đề gây tranh cãi.



Sinh 10 tháng 12, 1815(1815-12-10)
London
Mất 27 tháng 11, 1852 (36 tuổi)
Marylebone, London
Quốc tịch Anh Quốc
Ngành Toán học, Khoa học máy tính
Tiểu sử :

- Ada là con chính thức độc nhất của Lord Byron và bà Annabella Milbanke. Ada được đặt tên Augusta vì Byron đã có một mối liên hệ với người em cùng cha khác mẹ, Augusta Leigh, mà mọi người đồn là họ đã có một con với nhau. Để tránh scandal Augusta Leigh khuyên Byron cưới vợ, và Byron đã miễn cưỡng chọn Annabella. Vào ngày 16 tháng 1 năm 1816, khi Ada chỉ độ 1 tháng, Annabella bỏ Byron. Vào ngày 21 tháng 4 cùng năm Byron ký giấy ly dị vợ và rời khỏi Anh một vài ngày sau đó. Ông sẽ không bao giờ nhìn thấy mặt vợ con và nước Anh nữa.

- Khi rời bỏ Byron, Annabella mang Ada (lúc đó hãy còn mang họ cha là Augusta Ada Byron) theo mình nhưng Ada có thật sự lớn lên với mẹ hay không thì không ai biết chính xác. Có người nói là Ada sống dưới sự kiểm soát và kiềm chế của mẹ, ngay cả sau khi đã có chồng; có người nói là Ada không biết mặt cả cha lẫn mẹ. Lúc nhỏ, Ada có giáo viên học tư tại nhà, đặc biệt là về toán học và khoa học. Khi còn trẻ, Ada được biết đến trong xã hội (các người trung lưu và quý tộc) của London thời đó; Ada cũng là hội viên của hội Bluestockings.

- Ada LovelaceNăm 1835, Ada lấy William King, Bá tước Lovelace. Họ có 3 người con: Byron King sinh ngày 12 tháng 5 năm 1836, Annabella King sinh ngày 22 tháng 9 năm 1837 (sau này được biết đến như Lady Anne Blunt) và Ralph Gordon King sinh ngày 2 tháng 7 năm 1839. Từ khi lấy chồng về sau, tên hiệu đầy đủ của Ada là The Right Honourable Augusta Ada, Countess of Lovelace (hay "Augusta Ada, bà Bá tước Lovelace"). Nhưng trên thực tế bà được mọi người biết với tên Ada Lovelace.

- Bà có quen biết với Mary Somerville, một nhà nghiên cứu về khoa học và tác giả nổi tiếng trong thế kỷ 19. Chính Mary Somerville đã giới thiệu bà với Charles Babbage vào ngày 5 tháng 6 năm 1833. Ngoài ra bà cũng quen biết với nhiều nhân vật nổi tiếng như: Sir David Brewster, Charles Wheatstone, Charles Dickens và Michael Faraday.

- Sau khi Charles Babbage phát minh ra cái máy tính cơ khí của ông, The Analytical Engine, nhà toán học người Ý Luigi Menabrea đã viết một quyển sách về chiếc máy này. Trong thời gian 9 tháng, giữa 1842 và 1843, Ada (dưới tên Ada Byron) đã giúp Babbage dịch cuốn sách đó. Trong bản dịch, không những cho thêm ý kiến của mình, bà còn phụ chú một chương nói về cách tính chuỗi số Bernoulli bằng cách dùng máy tính của Babbage. Bản phụ chú này (Xem Bản phụ chú của Ada Byron) được xem như là chương trình máy tính đầu tiên trong lịch sử.

- Ada Lovelace mất khi 36 tuổi. Bà bị ung thư tử cung. Với kiến thức y khoa lúc đó, các bác sĩ đã làm cho bà mất máu mà chết.

Tranh luận về vai trò lập trình viên :

- Nhiều người viết tiểu sử đã chú ý đến việc Ada Lovelace phải chật vật với toán. Họ cũng đã tranh luận xem bà có thật sự thấu hiểu các khái niệm về cái máy được phát minh bởi Charles Babbage, hay chỉ phải dùng vì vị trí trong xã hội và vì là một người đàn bà.

- Những người viết tiểu sử cũng chú ý đến việc các chương trình máy tính (trong phụ chú của Ada) được soạn bởi Babbage, Ada chỉ tìm ra một lỗi trong cách tính chuỗi số Bernoulli và viết cho Babbage nhờ sửa. Các thư từ giữa hai người trong thời gian cộng tác chứng minh là người soạn các chương trình là Charles Babbage. Ngoài sự khám phá ra lỗi trên, Ada đã chỉ ra các khả năng của chiếc máy mà Babbage chưa đề cập đến. Bà đã dám tiên đoán "the Engine might compose elaborate and scientific pieces of music of any degree of complexity or extent".

- Tuy nhiên, dưới vai trò của người phụ nữ đầu tiên trong lĩnh vực tin học, Ada Lovelace chiếm một vị trí quan trọng trong lịch sử. Sự đóng góp của bà, thật sự là to lớn hay không, không thể xét qua với các thông tin và các tài liệu hiện có.

nguyenthingocloan (I11C)

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

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

Về Đầu Trang Go down

Khái niệm đoạn tương tranh, loại trừ lẫn nhau, vùng tranh chấp.

Bài gửi  nguyenthingocloan (I11C) on 23/10/2011, 15:51

- Đoạn tương tranh là 1 đoạn mã trong chương trình của HĐH. Đoạn mã có tính chất khi thực hiện các lệnh trong đoạn tương tranh thì các đoạn đó có thể tác động đến tài nguyên dùng chung, biến dùng chung (count ++, count --), có thể sửa chữa những kết quả trong tài nguyên.
- "Loại trừ lẫn nhau" hay còn gọi là đoạn tương hỗ. Chỉ có 1 tiến trìnhđược rơi vào đoạn tương tranh mà thôi, có 1 tiến trình khác muốn tương tranh thì phải chờ HĐH cho phép.
VD: Bạn Tính đang ghi tên trên bảng thì bạn An không được ghi hoặc bạn Thanh không được chụp ảnh...
- Đoạn tương tranh là đoạn mã khi thực hiện ảnh hưởng đến vùng tranh chấp, các code trong mã khi sử dụng ảnh hưởng đến miền. Vùng tranh chấp là đoạn tương tranh.

nguyenthingocloan (I11C)

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

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

Về Đầu Trang Go down

Em rất thích cách điểm danh của thầy.

Bài gửi  nguyenthingocloan (I11C) on 23/10/2011, 16:00

Thứ 5 tuần rồi Thầy điểm danh trên lớp, qua cách điểm danh đó em rất thích:
- Cách điểm danh đó lạ so với cách thông thường em đã biết.
- Thông thường, hằng ngày đi học chúng em chỉ biết mặt nhau nhưng không biết tên, nhờ thầy em đã biết được tên rất nhiều bạn.
Một lần nữa, em rất cám ơn và rất thích với chương trình điểm danh "Voice" của Thầy.

nguyenthingocloan (I11C)

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

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

Về Đầu Trang Go down

Khái niệm Đoạn tương tranh và Loại trừ lẫn nhau

Bài gửi  PhamAnhKhoa(I11C) on 23/10/2011, 17:39

- Giả sử 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 ( ĐTT ) 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 Đ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).

PhamAnhKhoa(I11C)

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

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

Về Đầu Trang Go down

Thực thi đèn hiệu có chờ

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

- Với tác nguyên Wait có vòng lặp vô tận kiểm tra biến đếm S có nhỏ hơn 0 hay không, điều đó làm cho các tiến trình có thể tự khóa mình (Block Itseft) và chuyển sang trạng thái waiting, sau đó xếp vào hàng chờ của đèn hiệu. Trình điếu phối CPU có thể chọn tiến trình khác trong hàng chờ Ready để thực hiện.
- Khi một tiến trình nào đó thực hiện lệnh Signal(S), một tiến trình P nào đó đang chờ tại S được lựa chọn và đánh thức bằng lệnh WakeUp(P) để chuyển P từ trạng thái Waiting sang trạng thái Ready. Lúc này trình điều phối có thể cho P thực thi ngay hay không còn tuỳ thuộc vào thuật giải cụ thể.
avatar
LeMInhTien(I11C)

Tổng số bài gửi : 40
Join date : 07/09/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  vohongcong(I111C) on 24/10/2011, 01:18

caotanthanh(i11c) đã viết:các bạn ơi chỉ giúp mình cách đưa hình lênh diễn đàn với,minh đưa bài lênh mà không có hình ,hic hic

Mún đưa hình lên diễn đàn rất dễ .Đầu tiên bạn cần up hình ảnh lên website ví dụ như http://www.upanh.com/http://www.upanh.com/.Sau đó bạn copy link ảnh.Kế tiếp trong khung gửi trả lời bạn nhấn vào nút chèn hình ảnh và pass link ảnh vào.Khi đưa chuột đến biêu tượng chèn hình ảnh phía dưới sẽ có dòng hướng dan mau xanh.Cú pháp giống như là chèn hình vào website bình thương.Chúc bạn thành công.
avatar
vohongcong(I111C)

Tổng số bài gửi : 32
Join date : 25/08/2011
Age : 28
Đến từ : Bến Tre

Xem lý lịch thành viên http://dmg.com.vn

Về Đầu Trang Go down

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

Bài gửi  minhgiangbc on 24/10/2011, 11:17

Tranvancanh(I11C) đã viết:
caotanthanh(I11c) đã viết:các bạn ơi chỉ giúp mình cách đưa hình lênh diễn đàn với,minh đưa bài lênh mà không có hình ,hic hic
Thứ 1 là bạn có thể : up lên 1 trang nào khác vd như upanh.com rùi past link vào là ok.
Thứ 2 là bạn dùng sẵn chức năng của diễn đàn tên nó là Host an Image, vào đó bạn chỉ cần up ảnh cần đưa lên là ok.



Chúc bạn thành công nhé.

mình thấy bạn chỉ zậy thi chắc không mấy bạn biết rùi, đầu tiên vô

sau đó chọn đuờng dẫn-> browse...--> hiện ra đuờng dẫn để bạn chọn hình-->chon hình xong bạn nhấn -->host it !,hiện nên 1 trang khác-->
tiếp theo chọn

--forum code-->copy đừong link pass vô mục cần bỏ hình vô
ok xong.

minhgiangbc

Tổng số bài gửi : 24
Join date : 16/09/2011
Age : 29
Đến từ : lâm đồng

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

Về Đầu Trang Go down

Giải Thưởng Turing

Bài gửi  lamhuubinh(I91C) on 24/10/2011, 18:05

-Bắt đầu từ năm 1966, Giải thưởng Turing đã được Association for Computing Machinery (Hiệp hội Máy tính) trao cho cá nhân có đóng góp kĩ thuật cho cộng đồng máy tính. Giải này được coi như tương đương với giải Nobel trong cộng đồng này.

Ngày 23 tháng 6 năm 2001 một bức tượng của Turing được đặt tại công viên Sackville Park của thành phố Manchester, giữa tòa nhà của Đại học Manchester trên phố Whitworth và khu gay village của phố Canal. Để kỉ niệm 50 năm ngày mất của ông, một tấm bảng kỉ niệm đã được khánh thánh tại nơi ông ở trước đây, Hollymeade, Wilslow, vào ngày 6 tháng 7 năm 2004.

Tấm bảng đánh dấu nơi ở cũ của TuringViện khoa học Alan Turing (Alan Turing Institute) được sáng lập bởi UMIST và Đại học Manchester vào mùa hè năm 2004.

Lễ kỉ niệm cuộc đời và sự nghiệp của Turing đã được tổ chức tại Đại học Manchester vào ngày 5 tháng 6 năm 2004 do British Logic Colloquium (Hội Logic Anh) và British Society for the History of Mathematics (Nhóm nghiên cứu Lịch sử Toán học Anh) tổ chức.

Vào ngày 28 tháng 10 năm 2004 a bức tượng đồng của Alan Turing, tạc bởi John W. Mills, được khánh thành tại Đại học Surrey. Bức tượng kỷ niệm 50 năm ngày Turing mất. Nó diễn tả Turing đang cầm sách đi trong viện đại học này.

Holtsoft đã sản xuất ngôn ngữ lập trình mang tên Turing. Ngôn ngữ này dành cho người mới bắt đầu lập trình và không tương tác trực tiếp với phần cứng.

lamhuubinh(I91C)

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

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

Về Đầu Trang Go down

Người Nhận Giải Thưởng Turing 2009

Bài gửi  lamhuubinh(I91C) on 24/10/2011, 18:08

Hiệp hội Máy tính điện tử (ACM) đã quyết định trao giải thưởng A.M. Turing Award 2009 cho ông Charles P. Thacker vì những đóng góp trong việc khai phá PC nối mạng.

Năm 1974, khi đang làm việc tại Trung tâm Nghên cứu Palo Alto của Xerox (PARC), ông Thacker đã xây dựng một nguyên mẫu máy tính để bàn tên là Alto. Alto có một số đổi mới mà ngày nay đã trở nên thông thường trên các PC như: màn hình giống TV, giao diện người dùng đồ họa (GUI), trình soạn thảo văn bản WYSIWYG (what-you-see-is-what-you-get). Ông Thacker lãnh đạo việc phát triển phần cứng còn ông Butler Lampson lãnh đạo việc phát triển phần cho Alto.

Sự sáng tạo của ông Thacker không chỉ giới hạn trong một chiếc máy tính đơn thuần. Ông còn nghiên cứu, triển khai việc kết nối nhiều máy tính, máy in laser, máy chủ trong mạng Ethernet cũng như có những nguyên mẫu máy trạm nhiều BXL, máy tính bảng.

Ngày nay, ông Thacker đang nghiên cứu kiến trúc máy tính tại cơ sở ở Silicon Valley của Microsoft Research. Ông có 29 sáng chế trong lĩnh vực hệ thống máy tính và mạng.

Từ năm 1966, ACM đã bắt đầu trao giải Turing Award (mang tên nhà toán học, người đi tiên phong trong lĩnh vực máy tính người Anh Alan M. Turning) cho các nhà khoa học, các kỹ sư có đóng góp lớn trong lĩnh vực khoa học máy tính (như Donald Knuth, Alan Kay, Vinton Cerf). ACM gọi đây là giải Nobel cho ngành máy tính.

Ông Thacker sẽ được vinh danh và nhận giải thưởng 250.000 đô la Mỹ (250.000 USD, ~4,81 tỷ đồng) tại buổi tiệc tổ chức ở San Francisco (Mỹ) trong tháng 6/2010.

Hiệp hội Máy tính điện tử (ACM) đã quyết định trao giải thưởng A.M. Turing Award 2009 cho ông Charles P. Thacker vì những đóng góp trong việc khai phá PC nối mạng.

Năm 1974, khi đang làm việc tại Trung tâm Nghên cứu Palo Alto của Xerox (PARC), ông Thacker đã xây dựng một nguyên mẫu máy tính để bàn tên là Alto. Alto có một số đổi mới mà ngày nay đã trở nên thông thường trên các PC như: màn hình giống TV, giao diện người dùng đồ họa (GUI), trình soạn thảo văn bản WYSIWYG (what-you-see-is-what-you-get). Ông Thacker lãnh đạo việc phát triển phần cứng còn ông Butler Lampson lãnh đạo việc phát triển phần cho Alto.

Sự sáng tạo của ông Thacker không chỉ giới hạn trong một chiếc máy tính đơn thuần. Ông còn nghiên cứu, triển khai việc kết nối nhiều máy tính, máy in laser, máy chủ trong mạng Ethernet cũng như có những nguyên mẫu máy trạm nhiều BXL, máy tính bảng.

Ngày nay, ông Thacker đang nghiên cứu kiến trúc máy tính tại cơ sở ở Silicon Valley của Microsoft Research. Ông có 29 sáng chế trong lĩnh vực hệ thống máy tính và mạng.

Từ năm 1966, ACM đã bắt đầu trao giải Turing Award (mang tên nhà toán học, người đi tiên phong trong lĩnh vực máy tính người Anh Alan M. Turning) cho các nhà khoa học, các kỹ sư có đóng góp lớn trong lĩnh vực khoa học máy tính (như Donald Knuth, Alan Kay, Vinton Cerf). ACM gọi đây là giải Nobel cho ngành máy tính.

Ông Thacker sẽ được vinh danh và nhận giải thưởng 250.000 đô la Mỹ (250.000 USD, ~4,81 tỷ đồng) tại buổi tiệc tổ chức ở San Francisco (Mỹ) trong tháng 6/2010.

BĐV
Theo IDG News Service, 9/3/2010

Theo IDG News Service, 9/3/2010

lamhuubinh(I91C)

Tổng số bài gửi : 34
Join date : 28/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  TangHuynhThanhThanh I11C on 24/10/2011, 18:44

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


Mình bổ sung ví dụ về bài toán Đồng bộ hóa :
Giả sử có hai tiến trình P1 và P2 thực hiện công việc của các kế toán, và cùng chia sẻ một vùng nhớ chung lưu trữ biến taikhoan phản ánh thông tin về tài khoản. Mỗi tiến trình muốn rút một khoản tiền tienrut từ tài khoản:

if (taikhoan - tienrut >=0)

taikhoan = taikhoan - tienrut;

else

error(� khong the rut tien ! �);

Giả sử trong tài khoản hiện còn 800, P1 muốn rút 500 và P2 muốn rút 400. Nếu xảy ra tình huống như sau :

Sau khi đã kiểm tra điều kiện (taikhoan - tienrut >=0) và nhận kết quả là 300, P1 hết thời gian xử lý mà hệ thống cho phép, hệ điều hành cấp phát CPU cho P2.

P2 kiểm tra cùng điều kiện trên, nhận được kết quả là 400 (do P1 vẫn chưa rút tiền) và rút 400. Giá trị của taikhoan được cập nhật lại là 400.

Khi P1 được tái kích hoạt và tiếp tục xử lý, nó sẽ không kiểm tra lại điều kiện (taikhoan - tienrut >=0)-vì đã kiểm tra trong lượt xử lý trước- mà thực hiện rút tiền. Giá trị của taikhoan sẽ lại được cập nhật thành -100. Tình huống lỗi xảy ra !

Các tình huống tương tự như thế - có thể xảy ra khi có nhiều hơn hai tiến trình đọc và ghi dữ liệu trên cùng một vùng nhớ chung, và kết quả phụ thuộc vào sự điều phối tiến trình của hệ thống.

Admin
Một ví dụ thiết thực !

TangHuynhThanhThanh I11C

Tổng số bài gửi : 6
Join date : 27/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  NgoDucTuan (I11C) on 24/10/2011, 23:38

TangHuynhThanhThanh I11C đã viết:
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


Mình bổ sung ví dụ về bài toán Đồng bộ hóa :
Giả sử có hai tiến trình P1 và P2 thực hiện công việc của các kế toán, và cùng chia sẻ một vùng nhớ chung lưu trữ biến taikhoan phản ánh thông tin về tài khoản. Mỗi tiến trình muốn rút một khoản tiền tienrut từ tài khoản:

if (taikhoan - tienrut >=0)

taikhoan = taikhoan - tienrut;

else

error(� khong the rut tien ! �);

Giả sử trong tài khoản hiện còn 800, P1 muốn rút 500 và P2 muốn rút 400. Nếu xảy ra tình huống như sau :

Sau khi đã kiểm tra điều kiện (taikhoan - tienrut >=0) và nhận kết quả là 300, P1 hết thời gian xử lý mà hệ thống cho phép, hệ điều hành cấp phát CPU cho P2.

P2 kiểm tra cùng điều kiện trên, nhận được kết quả là 400 (do P1 vẫn chưa rút tiền) và rút 400. Giá trị của taikhoan được cập nhật lại là 400.

Khi P1 được tái kích hoạt và tiếp tục xử lý, nó sẽ không kiểm tra lại điều kiện (taikhoan - tienrut >=0)-vì đã kiểm tra trong lượt xử lý trước- mà thực hiện rút tiền. Giá trị của taikhoan sẽ lại được cập nhật thành -100. Tình huống lỗi xảy ra !

Các tình huống tương tự như thế - có thể xảy ra khi có nhiều hơn hai tiến trình đọc và ghi dữ liệu trên cùng một vùng nhớ chung, và kết quả phụ thuộc vào sự điều phối tiến trình của hệ thống.
Cảm ơn Thanh vì ví dụ rất thực tế làm cho mình hiểu vấn đề này hơn
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  TrinhThiOanh (I11C) on 25/10/2011, 02:48

DaoQuangSieu (I11C) đã viết:
phamdieptuan (I11C) đã viết:câu 4: đồng 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?

Giải:
Giả sửa có 3 tiến trình P1, P2 và P3 có mã tương ứng là S1, S2 và S3

a) P1 trước P2, P2 trước P3
Semaphore synch1 = 0, synch2 = 0;
P1P2P3
S1wait(synch1);wait(synch2);
signal(synch1);S2

signal(synch2);

S3
Khi P1 dc thực hiện, thì P2 bị khóa tại hàm wait(synch1) do synch1=0; P3 bị khóa tại hàm wait(synch2) do synch2=0. Sau khi S1 dc thi hành thì synch1 sẽ tăng lên 1 do signal(synch1).
Lúc này P2 sẽ dc thực hiện(synch1 =1), nhưng P3 vẫn bị khóa do synch2 =0, sau khi S2 thi hành xong thì synch2 =1(signal(synch2)) lúc này P3 mới dc thực hiện.
=> P1 trước P2, P2 trước P3.

b) P1 trước P2 và P3
Semaphore synch = 0;
P1P2P3
S1wait(synch);wait(synch);
signal(synch, 2);S2S3
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 synch = 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) P1 và P2 trước P3
Semaphore synch = -1;
P1P2P3
S1S2wait(synch);
signal(synch);signal(synch);S3
Tại thời điểm ban đầu: P1 và P2 đang thực hiện lệnh S1, S2, lúc này synch=-1.
Lúc này P3 đang bị khóa tại hàm wait(synch) đợi khi synch >0.
Khi P1 thực hiện, S1 dc thi hành xong thì hàm signal(synch) sẽ tăng synch lên 1 và synch= 0. P3 lúc này vẫn bị khóa do synch=0.
Khi P2 thực hiện, S2 dc thi hành xong thì hàm signal(synch) sẽ tăng synch lên 1 và synch= 1.
Lúc này P3 mới dc thực hiện.
=>P1 và P2 trước P3.

Mong thầy và các bạn góp ý.
Đề nghị bạn giải thích rõ câu b giùm. Mình chưa hiểu rõ !!! THANKS Mad

Mình cũng giống như bạn khi đọc giải thích câu b mình khó hiểu lắm.
Qua tìm hiểu mình xin góp ý bổ sung giải thích như sau:

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 tức là bị khóa tại hàm kiểm tra điều kiện while (S<=0) Hàm này sẽ kiểm tra synch đã lớn hơn 0 chưa và chờ cho đến khi synch>0 thì hàm S2 sẽ được thực hiện.

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 tức là bị khóa tại hàm kiểm tra điều kiện while (S<=0) Hàm này sẽ thường xuyên kiểm tra synch đã lớn hơn 0 chưa và chờ cho đến khi synch>0 thì hàm S3 sẽ được thực hiện.

Các bạn góp ý thêm để hoàn thiện bài này hơn nha.

TrinhThiOanh (I11C)

Tổng số bài gửi : 8
Join date : 26/08/2011
Age : 28
Đến từ : GIA LAI

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

Về Đầu Trang Go down

Phân biệt sự khác nhau giữa đoạn tương tranh và vùng tranh chấp.

Bài gửi  tranphanhieu36_i11c on 25/10/2011, 09:18

Trên lớp thầy đã giảng nhưng mình xin nói lại cho các bạn chưa nhớ :

Thuật ngữ: Critical section là đoạn tương tranh, Đoạn mã găng,đoạn mã tới hạn.
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. Đoạn tương tranh thường nằm giữa Entry Section (Đoạn đăng nhập) và Exit Section (Đoạn đăng xuất).
Ví dụ minh họa : Trong slide 7.9 chương 7 ta có hai đoạn mã là đoạn tương tranh trong việc sử dụng đèn hiệu
1.wait (semaphore S) {
while ( S <= 0 ); // chờ bận nếu S<0
S --; // Giảm S đi 1
}

2.signal (semaphore S) {
S ++; //Tăng S lên 1
}
Vùng tranh chấp: là vùng chứa các biến dùng chung mà các đoạn mã tương tranh tác động.
Ví dụ :
Trong ví dụ bạn Dương Trung Tính lên bảng viết tên của bạn ấy lên bảng thì cái bảng là "vùng tranh chấp", trong ví dụ các chuyến xe qua chung 1 cây cầu có đèn hiệu thì cây cầu chính là "vùng tranh chấp".

Admin
Còn Đoạn tương tranh đâu ?

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

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

Bài gửi  nguyenquoctruong (I11C) on 25/10/2011, 10:28

tranphanhieu36_i11c đã viết:Trên lớp thầy đã giảng nhưng mình xin nói lại cho các bạn chưa nhớ :

Thuật ngữ: Critical section là đoạn tương tranh, Đoạn mã găng,đoạn mã tới hạn.
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. Đoạn tương tranh thường nằm giữa Entry Section (Đoạn đăng nhập) và Exit Section (Đoạn đăng xuất).
Ví dụ minh họa : Trong slide 7.9 chương 7 ta có hai đoạn mã là đoạn tương tranh trong việc sử dụng đèn hiệu
1.wait (semaphore S) {
while ( S <= 0 ); // chờ bận nếu S<0
S --; // Giảm S đi 1
}

2.signal (semaphore S) {
S ++; //Tăng S lên 1
}
Vùng tranh chấp: là vùng chứa các biến dùng chung mà các đoạn mã tương tranh tác động.
Ví dụ :
Trong ví dụ bạn Dương Trung Tính lên bảng viết tên của bạn ấy lên bảng thì cái bảng là "vùng tranh chấp", trong ví dụ các chuyến xe qua chung 1 cây cầu có đèn hiệu thì cây cầu chính là "vùng tranh chấp".

Admin
Còn Đoạn tương tranh đâu ?

Mình xin bổ sung thêm đoạn tương tranh trong đoạn code và ví dụ theo đúng ý của Thầy hỏi không nha.
- Đoạn tương tranh :
typedef int semaphore;
semaphore mutex=1;
while (1) {
remainder section
wait (mutex);
critical section
signal (mutex);
remainder section
}
Ví dụ : bạn Dương Trung Tính lên bảng viết tên của bạn ấy lên bảng thì cái bảng là "vùng tranh chấp". Bạn Tuấn phải chờ bạn Tính viết tên của mình xong và nhấn đèn xanh thì bạn Tuấn mới lên bảng viết tiếp. Trong ví dụ các chuyến xe qua chung 1 cây cầu có đèn hiệu thì cây cầu chính là "vùng tranh chấp". Chiếc xe thứ nhất đang qua cầu thì đèn đang đỏ, các xe tiếp theo đứng chờ cho đến khi xe thứ nhất qua bên kia cầu, đèn xanh bật lên thì thứ hai tiếp tục qua cầu.

nguyenquoctruong (I11C)

Tổng số bài gửi : 22
Join date : 29/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  caotanthanh(i11c) on 25/10/2011, 11:30



Mún đưa hình lên diễn đàn rất dễ .Đầu tiên bạn cần up hình ảnh lên website ví dụ như http://www.upanh.com/http://www.upanh.com/.Sau đó bạn copy link ảnh.Kế tiếp trong khung gửi trả lời bạn nhấn vào nút chèn hình ảnh và pass link ảnh vào.Khi đưa chuột đến biêu tượng chèn hình ảnh phía dưới sẽ có dòng hướng dan mau xanh.Cú pháp giống như là chèn hình vào website bình thương.Chúc bạn thành công.[/quote]
cảm ơn các bạn rất nhiều!
avatar
caotanthanh(i11c)

Tổng số bài gửi : 16
Join date : 03/09/2011
Age : 29
Đến từ : Buôn Hồ-KrongBuk-ĐakLak

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

Về Đầu Trang Go down

Định nghĩa đèn hiệu với 2 tác nguyên Wait và Signal.

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

- Đè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).
avatar
LeMInhTien(I11C)

Tổng số bài gửi : 40
Join date : 07/09/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  nguyenthanhphuong(I11C) on 26/10/2011, 08:54

Edsger Wybe Dijkstra: 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.

nguyenthanhphuong(I11C)

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

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

Về Đầu Trang Go down

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  lakhaiphat-i11c on 26/10/2011, 16:00

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

lakhaiphat-i11c

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

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

Về Đầu Trang Go down

thuật giải PERTRSION

Bài gửi  LeMinhDuc (I11C) on 26/10/2011, 22:59

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int flag[2];
int turn;
void p0()
{
while(true)
{
flag[0]=true;
turn=1;
while(flag[1]==true&&turn==1);
printf("qt dang trong vung du lieu");
flag[0]=false;
printf("qt dang ngoai vung du lieu");
}
}
void p1()
{
while(true)
{
flag[1]=true;
turn=0;
while(flag[0]==true&&turn==0);
printf("qt dang trong vung du lieu");
flag[1]=false;
printf("qt dang ngoai vung du lieu");
}
}
void main()
{
flag[0]=false;
flag[1]=false;
p0();
p1();
//PaBegin(p0,p1);
}

LeMinhDuc (I11C)

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

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

Về Đầu Trang Go down

Định nghĩa đèn hiệu với 2 tác nguyên Wait và Signal.

Bài gửi  TranHaDucHuy (I11c) on 27/10/2011, 01:34

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

TranHaDucHuy (I11c)

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

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

Về Đầu Trang Go down

Trình bày kái niệm đèn hiệu như 1 phương tiện đồng bộ hóa các tiên trình .Trình bày 2 ví dụ minh họa

Bài gửi  NguyenDoTu (I11C) on 27/10/2011, 07:27

Để giải thích cho định nghĩa đèn hiệu mình xcin nêu 2 ví dụ sau :
Ví dụ 1 : Có 1 cây câu bắc ngang qua sông .Cây cầu này chỉ chịu tải được 1 xe ô tô vì vậy để tránh trường hợp có nhiều hơn 1 xe ô tô qua cầu thì ta phải đồng bộ hóa quá trình này .Ở đây ta sẽ áp dụng đèn hiệu để giải quyét bài toán này..Đèn hiệu lúc này sẽ có 2 giá trị xanh hoặc đỏ.
Xanh tức trên cầu không có xe nào .
Đỏ tức trên cầu hiện đang có 1 xe ô tô.
Ban đầu thì giá trị đèn hiệu sẽ là màu xanh. Khi có 1 xe ô tô bắt đầu qua cầu thì đèn hiệu lại chuyển sang màu đỏ .Lúc này thì không có xe nào được phép lên cầu cho đến khi xe ô tô đó qua cầu xong tức là đèn hiệu chuyển sang màu xanh
Về mặt lập trình thì sẽ có 3 hàm : wait(S) quacau() signal(s)
Chờ nếu S = 0 và đi nếu S=1
Ví dụ 2 : đèn hiệu còn đươc áp dụng tại các điểm thu phí xe.Tại cá điểm này thì khi thu phí chỉ có duy nhất 1 xe được thu phí trong 1 lúc nên cần có đèn hiệu để báo cho hệ thống biết mà ha cần ngăn xuống

NguyenDoTu (I11C)

Tổng số bài gửi : 22
Join date : 26/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  BuiHoangTuan.131.I11C on 27/10/2011, 09:08

thanhnam06511c đã viết: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.

Tình cờ trên mạng mình kiếm được có một giải thưởng tương tự như giải Turing, được xem là giải Nobel do người Nhật lập ra. Xin nói sơ về giải này.

Giải Kyoto (Nhật: 京都賞 Kyōto-shō?, Kinh Đô thưởng) là một giải thưởng hàng năm của Quỹ Inamori, do Inamori Kazuo thành lập từ năm 1985. Đây là một giải thưởng của Nhật Bản có mục đích tương tự như giải Nobel, là nhìn nhận các công trình xuất sắc trong các lãnh vực Triết học, Nghệ thuật, Khoa học và Công nghệ học. Giải không chỉ trao cho những người đại diện hàng đầu trong từng lãnh vực riêng nói trên, mà còn trao cho các người có đóng góp vào mục tiêu nhân đạo trong các công trình của mình.

Các giải gồm các thể loại : Giải Kyoto Công nghệ tiên tiến, Giải Kyoto Khoa học cơ bản và Giải Kyoto Nghệ thuật và Triết học. Trong mỗi thể loại lớn, giải lại chia luân phiên cho các lãnh vực nhỏ, ví dụ “Giải Công nghệ tiên tiến” được chia luân phiên các ngành điện tử, công nghệ Sinh học, Khoa học Vật liệu và Công trình và Khoa học thông tin.

Giải được tặng vốn 50 triệu yen và cổ phần của Công ty cổ phần Kyocera. Giải này có uy tín lớn vì nó bao trùm các lãnh vực thường nằm ngoài các giải Nobel.



Năm 1988 ông Jojn McCarthy (1927-2011) người Mĩ là cha đẻ của môn Trí tuệ nhận tạo đạt được giải này..

Nói tóm lược về tiểu sử ông.



Năm 1958, tại MIT, ông McCarthy đã phát minh ra ngôn ngữ lập trình LISP, và LISP đã trở thành ngôn ngữ chính cho AI. Ông cũng là một trong những người đồng sáng lập của phòng thí nghiệm AI đầu tiên tại MIT và là người sáng lập của phòng thí nghiệm AI tại Đại học Stanford.

Ông McCarthy là giáo sư danh dự về khoa học máy tính tại Đại học Stanford.

Với học vị tiến sĩ toán học, ông McCarthy không nổi tiếng trong lĩnh vực AI, mặc dù ông được coi là một trong những người sáng lập của lĩnh vực này và giữ một vị trí quan trọng trong lịch sử của nó vì ông đã phát triển ngôn ngữ lập trình được sử dụng trong AI.

Trong tất cả các ngôn ngữ lập trình bậc cao cấp mà ngày nay vẫn còn sử dụng, chỉ có FORTRAN là “lớn tuổi” hơn LISP, và chỉ hơn 1 năm.

Nhiều năm nghiên cứu AI của ông McCarthy dựa trên tiền đề rằng, trí thông minh của con người có thể được hiểu và miêu tả ngắn gọn, đủ để dạy cho máy tính.

Năm 1988, ông McCarthy được nhận của giải thưởng Kyoto, được người Nhật Bản coi là tương đương với giải Nobel, vì những đóng góp suốt đời cho khoa học máy tính và trí tuệ nhân tạo.



avatar
BuiHoangTuan.131.I11C

Tổng số bài gửi : 44
Join date : 26/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  08H1010052 on 27/10/2011, 10:41

TrinhThiOanh (I11C) đã viết:
DaoQuangSieu (I11C) đã viết:
phamdieptuan (I11C) đã viết:câu 4: đồng 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?

Giải:
Giả sửa có 3 tiến trình P1, P2 và P3 có mã tương ứng là S1, S2 và S3

a) P1 trước P2, P2 trước P3
Semaphore synch1 = 0, synch2 = 0;
P1P2P3
S1wait(synch1);wait(synch2);
signal(synch1);S2

signal(synch2);

S3
Khi P1 dc thực hiện, thì P2 bị khóa tại hàm wait(synch1) do synch1=0; P3 bị khóa tại hàm wait(synch2) do synch2=0. Sau khi S1 dc thi hành thì synch1 sẽ tăng lên 1 do signal(synch1).
Lúc này P2 sẽ dc thực hiện(synch1 =1), nhưng P3 vẫn bị khóa do synch2 =0, sau khi S2 thi hành xong thì synch2 =1(signal(synch2)) lúc này P3 mới dc thực hiện.
=> P1 trước P2, P2 trước P3.

b) P1 trước P2 và P3
Semaphore synch = 0;
P1P2P3
S1wait(synch);wait(synch);
signal(synch, 2);S2S3
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 synch = 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) P1 và P2 trước P3
Semaphore synch = -1;
P1P2P3
S1S2wait(synch);
signal(synch);signal(synch);S3
Tại thời điểm ban đầu: P1 và P2 đang thực hiện lệnh S1, S2, lúc này synch=-1.
Lúc này P3 đang bị khóa tại hàm wait(synch) đợi khi synch >0.
Khi P1 thực hiện, S1 dc thi hành xong thì hàm signal(synch) sẽ tăng synch lên 1 và synch= 0. P3 lúc này vẫn bị khóa do synch=0.
Khi P2 thực hiện, S2 dc thi hành xong thì hàm signal(synch) sẽ tăng synch lên 1 và synch= 1.
Lúc này P3 mới dc thực hiện.
=>P1 và P2 trước P3.

Mong thầy và các bạn góp ý.
Đề nghị bạn giải thích rõ câu b giùm. Mình chưa hiểu rõ !!! THANKS Mad

Mình cũng giống như bạn khi đọc giải thích câu b mình khó hiểu lắm.
Qua tìm hiểu mình xin góp ý bổ sung giải thích như sau:

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 tức là bị khóa tại hàm kiểm tra điều kiện while (S<=0) Hàm này sẽ kiểm tra synch đã lớn hơn 0 chưa và chờ cho đến khi synch>0 thì hàm S2 sẽ được thực hiện.

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 tức là bị khóa tại hàm kiểm tra điều kiện while (S<=0) Hàm này sẽ thường xuyên kiểm tra synch đã lớn hơn 0 chưa và chờ cho đến khi synch>0 thì hàm S3 sẽ được thực hiện.

Các bạn góp ý thêm để hoàn thiện bài này hơn nha.

Mình xin giải thích theo cách hiểu của mình như sau:
Đầu tiên ta có 3 tiến trình P1,P2,P3 giả sử đã được cấp CPU và thực hiện. Đối với P2 và P3 thì khi ban đầu khởi tạo nhận được lệnh Wait với giá trị synch=0 nên 2 tiến trình này sẽ nằm chờ không thực hiện mã s2,s3.
Còn P1 thì theo cấu trúc mã sẽ không nhận lệnh Wait khi thực hiện nên sẽ lập tức thực hiện liền mã s1. Sau đó nhận lệnh Signal nhưng với tham số synch tăng lên 2 đơn vị (synch từ giá trị ban đầu là 0 -> 2) và kết thúc tiến trình P1.
* Vấn đề là tại điểm này: nếu ta hiểu theo thứ tự ban đầu P2 được khởi tạo và được xếp vào hàng chờ theo thuật toán điều phối của HĐH trước P3 thì sẽ có kết quả như trên, nghĩa là:
=> synch=2 và Wait(synch) của P2 trong hàng chờ sẽ kiểm tra điều kiện(synch lúc này sẽ được giãm 1 đơn vị synch=1) và thực hiện mã s2 và kết thúc tiến trình P2
=> Tùy theo thuật toán có tiếm quyền hay không thì lúc này synch=1 P3 được cấp CPU để running sau P2, khi đó Wait của P3 kiểm tra điều kiện và thực hiện mã s3 và kết thúc tiến trình cuối cùng P3.
* Mở rộng thêm: nếu ta hiểu cả 3 tiến trình P1,2,3 được cấp CPU cùng lúc thì trạng thái P2,3 lúc này đang chờ tại Wait => lúc này do HĐH quản lý tiến trình, tùy theo tiến trình nào mà HĐH cấp trước thì làm trước.
Nếu chúng ta muốn quản lý thứ tự thì chúng ta sẽ dùng 2 biến synch tương ứng cho P1:synch1=0 và P2:synch2=0 như cách giải của câu (a) phía trên. Tùy theo ý thích mà ta sẽ thay đổi synch tương ứng cho các tiến trình tương ứng (ví dụ: muốn chạy P3 trước thì Signal tại P1 sẽ tăng giá trị synch3=1. Ngược lại chạy P2 thì tăng synch2=1).
Trên đây là cách hiểu của mình. Mong Thầy và các bạn góp ý thêm.
Cám ơn Thầy và các bạn!

08H1010052

Tổng số bài gửi : 52
Join date : 02/07/2010

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  NguyenTrongHuy(I11C) on 27/10/2011, 13:36

NgoDucTuan (I11C) đã viết:
TangHuynhThanhThanh I11C đã viết:
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


Mình bổ sung ví dụ về bài toán Đồng bộ hóa :
Giả sử có hai tiến trình P1 và P2 thực hiện công việc của các kế toán, và cùng chia sẻ một vùng nhớ chung lưu trữ biến taikhoan phản ánh thông tin về tài khoản. Mỗi tiến trình muốn rút một khoản tiền tienrut từ tài khoản:

if (taikhoan - tienrut >=0)

taikhoan = taikhoan - tienrut;

else

error(� khong the rut tien ! �);

Giả sử trong tài khoản hiện còn 800, P1 muốn rút 500 và P2 muốn rút 400. Nếu xảy ra tình huống như sau :

Sau khi đã kiểm tra điều kiện (taikhoan - tienrut >=0) và nhận kết quả là 300, P1 hết thời gian xử lý mà hệ thống cho phép, hệ điều hành cấp phát CPU cho P2.

P2 kiểm tra cùng điều kiện trên, nhận được kết quả là 400 (do P1 vẫn chưa rút tiền) và rút 400. Giá trị của taikhoan được cập nhật lại là 400.

Khi P1 được tái kích hoạt và tiếp tục xử lý, nó sẽ không kiểm tra lại điều kiện (taikhoan - tienrut >=0)-vì đã kiểm tra trong lượt xử lý trước- mà thực hiện rút tiền. Giá trị của taikhoan sẽ lại được cập nhật thành -100. Tình huống lỗi xảy ra !

Các tình huống tương tự như thế - có thể xảy ra khi có nhiều hơn hai tiến trình đọc và ghi dữ liệu trên cùng một vùng nhớ chung, và kết quả phụ thuộc vào sự điều phối tiến trình của hệ thống.
Cảm ơn Thanh vì ví dụ rất thực tế làm cho mình hiểu vấn đề này hơn

Khi P1 được tái kích hoạt và tiếp tục xử lý, nó sẽ không kiểm tra lại điều kiện (taikhoan - tienrut >=0)-vì đã kiểm tra trong lượt xử lý trước- mà thực hiện rút tiền. Giá trị của taikhoan sẽ lại được cập nhật thành -100. Tình huống lỗi xảy ra ! <<== chổ này mình hơi hem hiểu. Để mình nghiên cứu kỹ lại nhé. Cảm ơn bạn nhiều lém

NguyenTrongHuy(I11C)

Tổng số bài gửi : 18
Join date : 19/09/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  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 3 trong tổng số 5 trang Previous  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