1. Trang chủ
  2. » Giáo Dục - Đào Tạo

VIẾT CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH ĐỒNG BỘ TIẾN TRÌNH THEO THEO THUẬT TOÁN 5 TRIẾT GIA ĂN TỐI BẰNG NGÔN NGỮ JAVA

12 48 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 233,43 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

HỌC VIỆN KỸ THUẬT MẬT Mà KHOA CÔNG NGHỆ THÔNG TIN ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ BÀI TẬP MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH VIẾT CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH ĐỒNG BỘ TIẾN TRÌNH THEO THEO THUẬT TOÁN 5 TRIẾT GIA ĂN TỐI BẰNG NGÔN NGỮ JAVA Ngành: An toàn thông tin Sinh viên thực hiện: Nguyễn Văn Hiệp Phạm Công Hưởng Nguyễn Anh Tuấn Lớp: AT16C0405 Người hướng dẫn: TS. Nguyễn Đào Trường Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã Hà Nội, 2022 NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN ..................................................................................................................................... ..................................................................................................................................... .............................................................. Nếu không có phần mềm, máy tính chỉ là một thiết bị điện tử thông thường. Với sự hỗ trợ của phần mềm, máy tính có thể lưu trữ, xử lý thông tin và người sử dụng có thể gọi lại được thông tin này. Phần mềm máy tính có thể chia thành nhiều loại: chương trình hệ thống, quản lý sự hoạt động của máy tính. Chương trình ứng dụng, giải quyết các vấn đề liên quan đến việc sử dụng và khai thác máy tính của người sử dụng. hệ điều hành thuộc nhóm các chương trình hệ thống và nó là một chương trình hệ thống quan trọng nhất đối với máy tính và cả người sử dụng. Hệ điều hành điều khiển tất cả các tài nguyên của máy tính và cung cấp một môi trường thuận lợi để các chương trình ứng dụng do người sử dụng viết ra có thể chạy được trên máy tính. Một máy tinh hiện đại có thể bao gồm: một hoặc nhiều processor, bộ nhớ, clocks, đĩa, giao diện mạng, và các thiết bị vào/ra khác. Tất cả nó tạo thành một hệ thống phức tạp. Để viết các chương trình để theo dõi tất cả các thành phần của máy tính và sử dụng chúng một cách hiệu quả, người lập trình phải biết processor thực hiện chương trình như thế nào, bộ nhớ lưu trữ thông tin như thế nào, các thiết bị đĩa làm việc (đọc/ghi) như thế nào, lỗi nào có thể xảy ra khi đọc một block đĩa,… đây là những công việc rất khó khăn và quá quá khó đối với người lập trình. Nhưng rất may cho cả người lập trình ứng dụng và người sử dụng là những công việc trên đã được hệ điều hành hỗ trợ nên họ không cần quan tâm đến cái đấy nữa. Chúng ta cần tìm hiểu về hệ điều hành đề có một cái nhìn tổng quát về những gì liên quan đến việc thiết kế cài đặt cũgn như chức năng của hệ điều hành để hệ điều hành đạt được mục tiêu: Giúp người sử dụng khai thác máy tính một cách dễ dàng và chương trình của người sử dụng có thể chạy được trên máy tính. “Bài toán bữa tối của các triết gia” (Dining Philosophers), một bài toán kinh điển về tương tranh và chia sẻ tài nguyên. Việc nghiên cứu bài toán sẽ cho chúng ta hiểu rõ hơn về khia cạnh này của hệ thống. CHƯƠNG 1: CƠ SỞ LÝ THUYẾT I, Tiến trình(processes). 1, Khái niệm: - Tiến trình là một bộ phận của một chương trình thực đang thực hiện, đơn vị thực hiện tiến trình là processer. - Vì tiến trình là một bộ phận của chương trình nên tương tự như chương trình tiến trình cũng sở hữu một con trỏ lệnh, một con trỏ stack, một tập các thanh ghi, một không gian địa chỉ trong bộ nhớ chính và tất cả các thông tin cần thiết khác để tiến trình có thể hoạt động được. 2, Các loại tiến trình: - Các tiến trình trong hệ thống chia làm hai loại: tiến trình tuần tự và tiến trình song song. + Tiến trình tuần tự là các tiến trình mà điểm khởi tạo của nó là điểm kết thúc của tiến trình trước đó. + Tiến trình song song là các tiến trình mà điểm khởi tạo của tiến trình này nằm ở thân của các tiến trình khác, thức là có thể khởi tạo một tiến trình mới khi các tiến trình đó chưa kết thúc. II, Luồng(Thread). Luồng là thành phần của tiến trình sở hữu ngăn xếp và thực thi độc lập ngay trong mã lệnh của tiến trình. Nếu như hệ điều hành có nhiều tiến trình thì trong mỗi tiến trình bạn có thể tạo ra nhiều tuyến hoạt động song song trong hệ điều hành. Ưu điểm của tuyến là chúng hoạt động trong cùng một không gian địa chỉ của tiến trình. Tập hợp một nhóm các tuyến có thể sử dụng chung biến toàn cục, vùng nhớ Heap, bảng mô tả file… của tiến trình, cơ chế liên lạc giữa tuyến đơn giản và hiệu quả hơn cơ chế liên lạc giữa các tiến trình với nhau. Ưu điểm của việc sử dụng luồng trong tiến trìnhh đơn giản hơn lập trình tuần tự. Nhiều thao tác xuất nhập hoặc hiển thị dữ liệu có thể tách rời và phân cho các tuyến chạy độc lập thực thi. III, Giải pháp Semaphore. Semaphore là một dóng góp quan trọng của nhà toán học E. W. Dijktra. Có thể xem Semaphore như là một mở rộng của Mutex locks. Semaphore S là một biến tài nguyên, khởi gán bằng một giá trị không âm, đó là khả năng phục vụ của tài nguyên tương ứng với nó. Ứng với S có một hàng đợi F(s) để lưu các tiến trình đang bị blocked trên S.

Trang 1

HỌCVIỆN KỸTHUẬTMẬTMÃ

KHOACÔNGNGHỆTHÔNG TIN

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

BÀITẬPMÔNHỌCNGUYÊNLÝHỆĐIỀUHÀNH

VIẾT CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH ĐỒNG BỘ

TIẾNTRÌNH THEO THEO THUẬT TOÁN 5 TRIẾT GIA ĂN TỐI

BẰNGNGÔNNGỮJAVA

Ngành:Antoànthôngtin

Sinh viên thực

hiện:Nguyễn Văn

HiệpPhạm Công

HưởngNguyễn Anh

TuấnLớp:AT16C04

05

Ngườihướng dẫn:

TS.NguyễnĐàoTrường

KhoaCôngnghệthôngtin–Họcviện Kỹthuật mật mã

Trang 2

HàNội,2022

Trang 3

NHẬNXÉTVÀ CHO ĐIỂMCỦAGIÁO VIÊN

Trang 4

Nếu không có phần mềm, máy tính chỉ là một thiết bị điện tử thông thường.Với sự hỗ trợ của phần mềm, máy tính có thể lưu trữ, xử lý thông tin và người sửdụng có thể gọi lại được thông tin này Phần mềm máy tính có thể chia thành nhiềuloại: chương trình hệ thống, quản lý sự hoạt động của máy tính Chương trình ứngdụng, giải quyết các vấn đề liên quan đến việc sử dụng và khai thác máy tính củangười sử dụng hệ điều hành thuộc nhóm các chương trình hệ thống và nó là mộtchương trình hệ thống quan trọng nhất đối với máy tính và cả người sử dụng Hệđiềuhànhđiềukhiểntấtcảcáctàinguyêncủamáytínhvàcungcấpmộtmôitrườngthuận lợi để các chương trình ứng dụng do người sử dụng viết ra có thể chạy đượctrên máytính

Một máy tinh hiện đại có thể bao gồm: một hoặc nhiều processor, bộ nhớ,clocks, đĩa, giao diện mạng, và các thiết bị vào/ra khác Tất cả nó tạo thành một hệthống phức tạp Để viết các chương trình để theo dõi tất cả các thành phần của máytính và sử dụng chúng một cách hiệu quả, người lập trình phải biết processor thựchiệnchươngtrìnhnhưthếnào,bộnhớlưutrữthôngtinnhưthếnào,cácthiếtbịđĩalàm việc (đọc/ghi) như thế nào, lỗi nào có thể xảy ra khi đọc một block đĩa,… đâylà những công việc rất khó khăn và quá quá khó đối với người lập trình Nhưng rấtmay cho cả người lập trình ứng dụng và

đãđượchệđiềuhànhhỗtrợnênhọkhôngcầnquantâmđếncáiđấynữa.Chúngtacầntìmhiểuvềhệ điềuhànhđềcómộtcáinhìntổngquátvềnhữnggìliênquanđếnviệcthiếtkếcàiđặtcũgnnhưchứcnă

ng củahệđiềuhànhđểhệđiềuhànhđạtđượcmụctiêu: Giúp người sử dụng khai thác máy tính một cách dễ dàng và chương trình củangười sửdụngcóthể chạyđược trên máytính

“Bài toán bữa tối của các triết gia” (Dining Philosophers), một bài toán kinhđiển về tương tranh và chia sẻ tài nguyên Việc nghiên cứu bài toán sẽ cho chúng tahiểu rõhơnvềkhia cạnhnày của hệthống

Trang 5

CHƯƠNG1:CƠ SỞLÝTHUYẾT

I,Tiếntrình(processes)

1,Kháiniệm:

- Tiến trình là một bộ phận của một chương trình thực đang thực hiện,đơn vị thực hiệntiếntrình làprocesser

- Vìtiếntrìnhlàmộtbộphậncủachươngtrìnhnêntươngtựnhưchươngtrình tiến trình cũng sở hữu một con trỏ lệnh, một con trỏ stack, một tập các thanhghi,mộtkhônggianđịachỉtrongbộnhớchínhvàtấtcảcácthôngtincầnthiếtkhácđểtiếntrìn hcóthểhoạtđộngđược

2,Cácloạitiếntrình:

- Các tiến trình trong hệ thống chia làm hai loại: tiến trình tuần tự vàtiến trìnhsongsong

+ Tiến trình tuần tự là các tiến trình mà điểm khởi tạo của nó làđiểmkếtthúc của tiếntrìnhtrước đó

+Tiếntrìnhsongsonglàcáctiếntrìnhmàđiểmkhởitạocủatiếntrình này nằm ở thân của các tiến trình khác, thức là có thể khởi tạo một tiến trìnhmớikhicáctiếntrìnhđóchưa kếtthúc

II,Luồng(Thread)

Luồng là thành phần của tiến trình sở hữu ngăn xếp và thực thi độc lập ngaytrong mã lệnh của tiến trình Nếu như hệ điều hành có nhiều tiến trình thì trong mỗitiến trình bạn có thể tạo ra nhiều tuyến hoạt động song song trong hệ điều hành Ưuđiểmcủatuyếnlàchúnghoạtđộngtrongcùngmộtkhônggianđịachỉcủatiếntrình.Tập hợp một nhóm các tuyến có thể sử dụng chung biến toàn cục, vùng nhớ Heap,bảngmôtảfile… củatiếntrình,cơchếliênlạcgiữatuyếnđơngiảnvàhiệuquảhơncơchếliênlạcgiữa các tiếntrìnhvớinhau

Ưu điểm của việc sử dụng luồng trong tiến trìnhh đơn giản hơn lập trình tuầntự Nhiều thao tác xuất nhập hoặc hiển thị dữ liệu có thể tách rời và phân cho cáctuyến chạyđộc lậpthực thi

III,GiảiphápSemaphore

SemaphorelàmộtdónggópquantrọngcủanhàtoánhọcE.W.Dijktra.Cóthểxem Semaphorenhưlà mộtmởrộngcủa Mutexlocks

Semaphore S là một biến tài nguyên, khởi gán bằng một giá trị không âm, đólàkhảnăngphụcvụcủa tàinguyêntương ứngvớinó

Ứng với Scó mộthàngđợi F(s)đểlưu cáctiếntrìnhđangbịblocked trên S

Trang 6

ChỉcóhaithaotácDownvàUpđượctácđộngđếnSemaphoreS.DowngiảmSxuốngmột đơnvị,UptăngSlênmộtđơnvị

Ở đây chúng ta cần lưu ý rằng: Down và Up là các thủ tục của hệ điều hành,nên hệ điều hành đã cài đặt cơ chế độc quyền cho nó, tức là các lệnh bên trong nókhôngthểtáchrờinhau

IV,Deadlock

- Deadlocklàmộttrạngtháimàởđómộttậpcáctiếntrìnhbịchặnvìmỗitiếntrìnhđangchiế mgiữtàinguyênvàchờđợiđượccấppháttàinguyênkhácđượcgiữbởi tiến trình khác Nói cách khác, mỗi

đượccấppháttàinguyênđangbịchiếmgiữbởitàinguyênkhác.Nếutàinguyênđókhôngđược giải phóng

để tiến trình khác có thể sử dụng, thì tiến trình đang chờ lấy tàinguyên sẽchờmãi,chờmãi dẫnđếnkhoáchết(Deadlock)

- CácđiềukiệnphátsinhDeadlock:

+ Loại từ tương hỗ (Mutual Exclusion): tại một thời điểm, tài nguyênkhôngthểchiasẻđượcchohệthốngcấpphátchomộttiếntrìnhduynhất.Tiếntrìnhkháckh ôngthểsửdụng chođếnkhi tàinguyênđược giảiphóng

+ Giữ và chờ (hold and wait): Mỗi tiến trình trong tập hợp tiến trìnhđanggiữmộttàinguyênvàchờđợi đểđược cấpphátmột tàinguyênmới

+ Không có quyền ưu tiên (No Preemption): Một tiến trình không thểciếm giữ tài nguyên cho đến khi tài nguyên đó được giải phóng bởi tiến trình đangsửdụng nó

+ Tồn tại chu kì chờ (Circular Wait): Các tiến trình giữ một tài nguyênvàchờnhậnmộttàinguyênkhácbởitiếntrìnhkahsc.Chúngnốiđuôinhautạothànhvòngtròn Chờvôtận

Trang 7

CHƯƠNG2:MÔTẢ BÀI TOÁN

I,Đềbài:

Viết chương trình mô phỏng quá trình đồng bộ tiến trình (điều độ) theo thuậttoán5triếtgia ăntốibằngngônngữJava

II,Mô tảbài toán:

Đâylàmộtbàitoáncổđiểnvềhệđiềuhành.Bàitoánbữatốicủacáctriếtgiađưuocjđưarabời nhàtoánhọcE.W.Dijkstra.Bàitoánđượcmôtảnhưsau:Cónămtriết gia cùng ngồi ăn quanh một chiếc bàn tròn,

đồăn,mỗingườicómộtđĩa,giữahaitriếtgiathìcómộtchiếcđũa.Bàitoánđượcphátbiểunhưsau:“ khimộttriếtgiasuynghĩ,ôngtakhôngthểgiaotiếpvớicáctriếtgiakhác.Thỉnhthoảng,mộttriếtgiacả mthấyđóivàcốgắngchọn2chiếcđũagầnnhất(đũatráivàđũaphải).Mộttriếtgiachỉcóthểchỉlấymột chiếcđũatạimộtthờiđiểm.Chú ý, ông ta không thể lấy chiếc đũa mà nó đang được dùng bởi người bên cạnh.Khi một triết gia đối và có hai chiếc đũa cùng một lúc, ông ta ăn mà không đặt đũaxuống.Khi triếtgiaăn xong,ông tađặt đũaxuốngvàbắtđầu suy nghĩtiếp”

III,Yêucầu:

- Tìmcách đểkhôngaichếtđói

- Bài toán đặt ra vấn đề “đồng bộ giữa các tiến trình”, giải quyết vấn đề tắcnghẽn cóthểxảyra

Trang 8

CHƯƠNG3:CÁCHGIẢI QUYẾTBÀI TOÁN

I,Môtảhướnggiảiquyết

Đểgiảiquyếtbàitoán,thìtrongphầnnày,tasẽsửdụngthuậttoánSemaphore

Và sử dụng tính chất hoạt động song song của đa luồng

(Thread).II,Giảithíchcodevàkếtquả

1,ClassFork(đũa):

- Với class này, chúng ta áp dụng thuật toán Semaphore để đánh dấu trạng thái củanhữngchiếcđũatrongbàitoán.Nhữngchiếcđũabanđầusẽcógiátrịlà1.Ởgiátrịnày,thìnóc oilàđangkhông được sửdụng

- Khimàchiếcđũađangđượcsửdụng,vớiphươngthứcacquire(),sẽgánchochiếcđũađấygiátr ịlà 0–haylàđangtrongtrạngtháisửdụng

- Khimàsửdụngxong(Hếtsleeptime)thìphươngthứcrelease()sẽtrảlạichochiếcđũađấygiátrịlà 1

- Ởđây,tasẽchothêmphươngthứcisFree(),phươngthứcnàysẽgiúpkiểmtratrạngtháicủa

chiếcđũa

2,ClassPhilosopher

Trang 9

- VớiclassPhilosopher,tasẽkếthừaclassThreadđểgiúpchoclassnàysửdụngcơchếđa luồngcủa Thread

- Đầu tiên, sẽ có 3 thuộc tính, đó là number: số thứ tự của các nhà triết gia, leftForkvàrightFork:làđũatrái,đũaphảicủacáctriếtgiatương ứng

- Tiếptheo,sẽcó mộthàmkhởitạo củaclassnày

- Cáctriếtgiacócáchànhđộnglà:thamgiavàobữaăn,lấyđũatrái,lấyđũaphải,suy nghĩvàăn

3,Main:

Trang 10

- PhươngthứcMain,làphươngthứcsẽsửdụnghaiclassmàđãtạolàclassForkvàclass Philosopher đểchạychươngtrình

- Dùngđểtạomột mảng chứacácđốitượngđũa

- Dùng đểtạomảnggáncácđốitượngnhàtriếtgiavàkhởiđộngluồng

Trang 11

- Với vòng lặp While, vòng lặp này sẽ có tác dụng kiểm tra quá trình Deadlock Tấtcả các luồng được kiểm tra về tài nguyên đang được chiếm giữ Nếu như tất cả cácluồngbịquátảidokhôngđủtàinguyên,dẫnđếngiớihạncủaDeadlock,ngườidùngsẽnhận một cảnhbáovàtựđộngdừng chươngtrình

Trang 12

Qua bài tập này, chúng ta sẽ hiểu rõ hơn về cách thức hoạt động của luồngtrong hệ điều hành, cách các luồng nhận và giả lại tài nguyên sao cho hợp lý

để chohệ điều hành hoạt động tốt nhất có thể Và hiểu thêm về thuật toán Semaphore vàcách thức hoạt động của nó, kết hợp với luồng, để có thể sử dụng trong một trườnghợpnàođấytrongtương lai.Emcảmơnthầyđãchoemcơhộiđượcnghiên

cứuvềđềtàinàyvàgiúpemcóthêmkiếnthức.Emxin cảmơn!

Ngày đăng: 16/03/2022, 18:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w