Tải bản đầy đủ (.pdf) (55 trang)

Báo cáo đồ án cơ sở mạng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.37 MB, 55 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
____***____

ĐỒ ÁN
CƠ SỞ NGÀNH MẠNG
NGUYÊN LÝ HỆ ĐIỀU HÀNH: ĐỀ TÀI NĂM TRIẾT GIA ĂN TỐI
LẬP TRÌNH MẠNG: ĐỀ TÀI SỬ DỤNG KỸ THUẬT SOCKET
TRONG JAVA ĐỂ XÂY DỰNG CHƯƠNG TRÌNH CHAT QUA
MẠNG LAN



Đà Nẵng, ngày 01 tháng 11 năm 2018


Báo cáo đồ án

MỤC LỤC

MỞ ĐẦU..................................................................................................................................... 5
PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH ................................................................................. 7
CHƯƠNG I: PHÂN TÍCH BÀI TOÁN ................................................................................. 7
I.

Mô tả............................................................................................................................ 7

II.

Mô tả vấn đề ............................................................................................................ 7



III.

Yêu cầu bài toán ...................................................................................................... 8

CHƯƠNG II: CƠ SỞ LÝ THUYẾT ...................................................................................... 9
I.

Tiến trình (proccess) ................................................................................................... 9

II.

Tài nguyên găng và đoạn găng .............................................................................. 10

III.

Giải pháp Semaphore ............................................................................................ 12

IV.

Deadlock ................................................................................................................ 12

CHƯƠNG III: GIẢI QUYẾT BÀI TOÁN ........................................................................... 15
I.

Quản lý vùng găng .................................................................................................... 15

II.

Giải pháp xử lý deadlock ....................................................................................... 17


III.

Chương trình ......................................................................................................... 17

CHƯƠNG IV: KẾT QUẢ CHƯƠNG TRÌNH ..................................................................... 20
I.
II.

Chương trình tạm dừng ............................................................................................ 20
Chương trình được reset ....................................................................................... 20

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................................................................ 21
I.
II.

Đạt được .................................................................................................................... 21
Chưa đạt ................................................................................................................ 21

PHẦN II: LẬP TRÌNH MẠNG................................................................................................ 22
CHƯƠNG I. PHÂN TÍCH BÀI TOÁN ................................................................................ 22
1.

Bối cảnh, lý do thực hiện đề tài ................................................................................. 22

2.

Cơ sở lập trình........................................................................................................... 23

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT...................................................................................... 24

1.

Yêu cầu của đề tài ..................................................................................................... 24

2.

Giới thiệu mô hình Client/Server .............................................................................. 24

3.

Giới thiệu giao thức IP/TCP ..................................................................................... 25

4.

Giới thiệu các gói phục vụ giao thức IP/TCP ........................................................... 26

GVHD: Trần Hồ Thủy Tiên

Page 1


Báo cáo đồ án
CHƯƠNG 3 : PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH ............................................... 28
1.

Phân tích yêu cầu ...................................................................................................... 28

2.

Phân tích chức năng. ................................................................................................. 28


3.

Phân tích thiết kế chương trình. ............................................................................... 29

CHƯƠNG 4 : KẾT QUẢ CHƯƠNG TRÌNH ...................................................................... 30
1.

Môi trường triển khai ............................................................................................... 30

2.

Kết quả thực hiện ...................................................................................................... 30

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................................................................ 33
Đạt được .................................................................................................................... 33

I.
II.

Chưa đạt được và hướng phát triển ...................................................................... 33

KẾT LUẬN CHUNG................................................................................................................ 34
TÀI LIỆU THAM KHẢO ........................................................................................................ 35
PHỤ LỤC ................................................................................................................................. 36
1.

Phần hệ điều hành......................................................................................................... 36

2.


Phần lập trình mạng ..................................................................................................... 43
2.1.

Cấu trúc chương trình........................................................................................... 43

2.2.

Chương trình Server ............................................................................................. 43

2.3.

Chương trình Client .............................................................................................. 47

GVHD: Trần Hồ Thủy Tiên

Page 2


Báo cáo đồ án

DANH SÁCH HÌNH VẼ
Hình 1. Mô tả bài toán năm triết gia ăn tối
Hình 2. Mô tả tình trạng deadlocked
Hình 3. Thực hiện 5 tiến trình tương ứng 5 triết gia
Hình 4. Chương trình chay và tạm dừng
Hình 5. Chương trình được reset
Hình 6. Mô hình Client/Server
Hình 7. Giao diện Máy Chủ
Hình 8 .Giao diện khi nhất nút “Start Server”

Hình 9. Giao diện đăng nhập của Client
Hình 10. Giao diện chat của Client
Hình 11. Giao diện Gửi File của Client
Hình 12. Cấu trúc chương trình lập trình mạng

GVHD: Trần Hồ Thủy Tiên

Page 3


Báo cáo đồ án

DANH SÁCH TỪ VIẾT TẮT

WAN

Wide Area Network

LAN

Local Area Network

IP

Internet Protocol

TCP

Transmission Control Protocol


CS

Critical Section

API

Application Programming Interface

GVHD: Trần Hồ Thủy Tiên

Page 4


Báo cáo đồ án

MỞ ĐẦU
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 chính 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 tính hiện đại có thể bao gồm: một hoặc nhiều processor, bộ nhớ chí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 (ghi/đọc) 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á 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 nữa.
Vì vậy, chúng ta cần tìm hiểu về những kiến thức cơ bản cũng như nâng cao về hệ
điều hành, nắm bắt được nguyên tắc hoạt động. Qua đó, có một cái nhìn tổng quan
về những gì liên quan đến việc thiết kế cài đặt cũng 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 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.
Nguyên lý hệ điều hành là học phần rất quan trọng và bắt buộc đối với tất cả sinh
viên chuyên ngành công nghệ thông tin. Nguyên lý hệ điều hành cung cấp cho sinh
viên hoạt động cơ bản của hệ điều hành trên máy tính. Hệ điều hành được xem là
thành phần trung gian hay là cầu nối cho sự giao tiếp của người sử dụng và máy
tính. Thông qua hệ điều hành người sử dụng dễ đàng làm việc và khai thác hiệu quả
thiết bị phần cứng máy tính, quản lý phần mềm ứng dụng. Người sử dụng chỉ cần
thao tác các lệnh, các sự kiện và chờ các tiến trình của hệ điều hành thực hiện.

"Bài toán năm triết gia ăn tối" (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ề khía cạnh này của hệ điều hành.

GVHD: Trần Hồ Thủy Tiên

Page 5


Báo cáo đồ án
Về phần đồ án lập trình mạng, có thể thấy mạng Internet đang phát triển như vũ
bão, do vậy việc chuyển thông tin, dữ liệu qua mạng Internet là ưu tiên hàng đầu

trong nghành công nghệ thông tin. Với việc muốn tìm hiểu sâu về cách giao tiếp của
các client với nhau thông qua server cũng như củng bố chắc lập trình mạng lý
thuyết nên em đã chọn đề tài “Sử dụng kỹ thuật socket trong java để xây dựng
chương trình chat qua mạng LAN”. Đề tài đi sâu tìm hiểu về các kết nối socket
trong mô hình Client-Server giúp em nắm chắc kiến thức về lý thuyết môn lập trình
mạng.
Qua đồ án lần này, em xin cảm ơn sự hướng dẫn tận tình của cô Trần Hồ Thủy Tiên
đã giúp em hoàn thành đề tài này. Mong các quý thầy cô góp ý để em có thể tích lũy
kinh nghiệm cho những đồ án tiếp theo.
Sinh viên thực hiện
Nguyễn Tiến Dũng

GVHD: Trần Hồ Thủy Tiên

Page 6


Báo cáo đồ án
PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH
CHƯƠNG I: PHÂN TÍCH BÀI TOÁN
I.

Mô tả

Viết chương trình giải quyết bài toán “Năm triết gia ăn tối”. Chương trình tạo ra
năm quá trình con mô phỏng hoạt động của năm triết gia. Sử dụng Semaphore để
đồng bộ hoạt động của năm triết gia này.
II.

Mô tả vấn đề


Đây là bài toán cổ điển về hệ điều hành. Bài toán bữa tối của các triết gia được
đưa ra bởi nhà toán học E. W. Dijkstra. Bài toán được mô tả như sau :
Có năm triết gia cùng ngôi ăn tối quanh một chiếc bàn tròn, trước mặt mỗi người
có một đĩa thức ăn, giữa 2 triết gia thì có một chiếc muỗng.

Hình 1. Mô tả bài toán năm triết gia ăn tối

Khi một triết gia suy nghĩ, ông ta không giao tiếp với các triết gia khác. Thỉnh
thoảng, một triết gia cảm thấy đói và cố gắng chọn hai chiếc đũa gần nhất (hai chiếc
đũa nằm giữa ông ta với hai láng giềng trái và phải). Một triết gia có thể lấy chỉ một
chiếc đũa tại một thời điểm. Chú ý, ông ta không thể lấy chiếc đũa mà nó đang được
dùng bởi người láng giềng. 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 đũa xuống. Khi triết gia ăn xong, ông ta đặt đũa xuống và
bắt đầu suy nghĩ tiếp.

GVHD: Trần Hồ Thủy Tiên

Page 7


Báo cáo đồ án
Đói : một triết gia có thể chết đói nếu ông ta không có cách nào để ăn được.
Tắc nghẽn : các triết gia phải đợi lẫn nhau nên không có ai ăn được.
III.

Yêu cầu bài toán

Phải đặt ra thuật toán sao cho khi một triết gia bị đói thì ông ta sẽ được ăn và
đảm bảo không có triết gia nào bị chế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ắc nghẽn có
thể xảy ra.
Một giải pháp đơn giản là thể hiện mỗi chiếc đũa bởi một biến semaphore. Một triết
gia cố gắng chiếm lấy một chiếc đũa bằng cách thực thi thao tác wait trên biến
semaphore đó, triết gia đặt hai chiếc đũa xuống bằng cách thực thi thao tác signal
trên các biến semaphore tương ứng.
Thuật toán đưa ra ở đây là Semaphore.

GVHD: Trần Hồ Thủy Tiên

Page 8


Báo cáo đồ án
CHƯƠNG II: CƠ SỞ LÝ THUYẾT
I.

Tiến trình (proccess)

1. Khái niệm
Tiến trình là một bộ phận của một chương trình đ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. Định nghĩa tiến trình
Định nghĩa của Saltzer: Tiến trình là một chương trình do một processor logic
thực hiện.
Định nghĩa của Horning & Rendell: Tiến trình là một quá trình chuyển từ trạng

thái này sang trạng thái khác dưới tác động của hàm hành động, xuất phát từ một
trạng thái ban đầu nào đó.
3. Các loại tiến trình
Các tiến trình trong hệ thông có thể chia thành 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, tức là có thể khởi tạo một tiến trình mới khi các tiến
trình trước đó chưa kết thúc.
Tiến trình tuần tự xuất hiện trong các hệ điều hành đơn nhiệm như hệ điều hành
MSDOS.
Các tiến trình song song xuất hiện trong hệ điều hành đa nhiệm.

GVHD: Trần Hồ Thủy Tiên

Page 9


Báo cáo đồ án
4. Tuyến (Thread)
Tuyến là một 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 với nhau tương tự như
các tiến trình 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 các 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 ( nếu hệ điều hành của bạn chạy trên phần cứng nhiều bộ xử
lí thì tuyến thực sự chạy song song chứ không phải giả lập kiểu xoay vòng ).

Ưu điểm của sử dụng tuyến trong tiến trình đơ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. Ví dụ trong môi trường đồ họa, khi bạn copy một file có kích
thước lớn, chương trình sẽ được thiết kế sao cho một tuyến thực hiện đọc ghi dữ
liệu từ đĩa, tuyến khác sẽ đảm trách việc hiển thị phần trăm hoàn thành công việc
cho người dùng theo dõi tiến độ.
Đối với hệ điều hành chi phí để chuyển đổi giữa ngữ cảnh của tiến trình cao và
chậm hơn chi phí chuyền đổi ngữ cảnh dành cho tuyến ( với tiến trình hệ điều hành
phải cất thông số môi trường, thanh ghi trạng thái, hoán đổi vùng nhớ...)
Tuy nhiên, điểm yếu của việc dùng tuyến đó là khả năng đổ vở của một tuyến sẽ
ảnh hưởng đến tất cả các tuyến khác và toàn bộ tiến trình đang hoạt động. Lí do là
các tuyến dùng chung vùng nhớ và không gian địa chỉ của tiến trình. Ngược lại, một
tiến trình bị đồ vỡ luôn được hệ điều hành cô lập hoàn toàn không gây ảnh hưởng
đến các tiến trình khác. Tiến trình có thể chạy trên nhiều máy khác nhau trong khi
tuyến chỉ được thực thi trên một máy và trong một tiến trình.
II.

Tài nguyên găng và đoạn găng

1. Tài nguyên găng (Critical Resource)
Trong môi trường hệ điều hành đa nhiệm - đa chương - đa người sử dụng, việc
chia sẻ tài nguyên cho các tiến trình của người sử dụng dùng chung là cần thiết,
nhưng nếu hệ điều hành không tổ chức tốt việc sử dụng tài nguyên dung chung của
các tiến trình hoạt động đồng thời, thì không những không mang lại hiệu quả khai
thác tài nguyên của hệ thông mà còn làm hỏng dữ liệu của các ứng dụng. Và nguy
hiểm hơn là việc hỏng dữ liệu này có thể hệ điều hành và ứng dụng không thể phát
hiện được. Việc hỏng dữ liệu của ứng dụng có thể làm sai lệch ý nghĩa thiết kế của
nó. Đây là điều mà cả hệ điều hành và người lập trình đều không mong muốn.

GVHD: Trần Hồ Thủy Tiên


Page 10


Báo cáo đồ án
Các tiến trình hoạt động đồng thời thường cạnh tranh với nhau trong việc sử
dụng tài nguyên dùng chung. Hai tiến trình hoạt động đồng thời cùng ghi vào một
không gian nhớ chung (một biến chung) trên bộ nhớ hay hai tiến trình đồng thời
cùng ghi dữ liệu vào một file chia sẻ, đó là những biểu hiện của sự cạnh tranh về
việc sử dụng tài nguyên dùng chung của các tiến trình. Để các tiến trình hoạt động
đồng thời không cạnh tranh hay xung đột với nhau khi sử dụng tài nguyên dùng
chung hệ điều hành phải tổ chức cho các tiến trình này được độc quyền truy xuất/sử
dụng trên các tài nguyên dùng chung này.
Những tài nguyên được hệ điều hành chia sẻ cho nhiều tiến trình hoạt động đồng
thời dùng chung, mà có nguy cơ dẫn đến sự tranh chấp giữa các tiến trình này khi
sử dụng chúng, được gọi là tài nguyên găng. Tài nguyên găng có thể là tài nguyên
phần cứng hoặc tài nguyên phần mền, có thể là tài nguyên phân chia được hoặc
không phân chia được, nhưng đa số thường là tài nguyên phân chia được như là: các
biến chung, các file chia sẻ.
2. Đoạn găng (Critical Section)
Đoạn code trong các tiến trình đồng thời, có tác động đến các tài nguyên có thể
trở thành tài nguyên găng được gọi là đoạn găng hay miền găng. Tức là, các đoạn
code trong các chương trình dùng để truy cập đến các vùng nhớ chia sẻ, các tập tin
chia sẻ được gọi là các đoạn găng.
Trong ví dụ ở trên có hai đoạn găng là:
{ L1:=Count và Count:=Ll }
Đề hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành phải
điều khiến các tiến trình sao cho, tại một thời điểm chỉ có một tiến trình nằm trong
đoạn găng, nếu có nhiều tiến trình cùng muốn vào (thực hiện) đoạn găng thì chỉ có
một tiền trình được vào, các tiến trình khác phải chờ, một tiến trình khi ra khỏi (kết

thúc) đoạn găng phải báo cho hệ điều hành và/hoặc các tiến trình khác biết đề các
tiến trình này vào đoạn găng, vv. Các công tác điều khiển tiến trình thực hiện đoạn
găng của hệ điều hành được gọi là điều độ tiến trình qua đoạn găng. Để công tác
điều độ tiến trình qua đoạn găng được thành công, thì cần phải có sự phối hợp giữa
vi xử lý, hệ điều hành và người lập trình. Vi xử lý đưa ra các chỉ thị, hệ điều hành
cung cấp các công cụ để người lập trình xây dựng các sơ đồ điều độ hợp lý, để đảm
bảo sự độc quyền trong việc sử dụng tài nguyên găng của các tiến trình.
3. Yêu cầu đối với đoạn găng
Đoạn găng phải thỏa các yêu cầu sau:
 Tại một thời điểm không thể có hai tiến trình nằm trong đoạn găng.

GVHD: Trần Hồ Thủy Tiên

Page 11


Báo cáo đồ án
 Nếu có nhiều tiến trình đồng thời cùng xin được vào đoạn găng thì chỉ có
một tiến trình được phép vào đoạn găng, các tiến trình khác phải xếp hàng
chờ trong hàng đợi.
 Tiến trình chờ ngoài đoạn găng không được ngăn cản các tiến trình khác vào
đoạn găng.
 Không có tiến trình nào được phép ở lâu vô hạn trong đoạn găng và không có
tiến trình phải chờ lâu mới được vào đoạn găng (chờ trong hàng đợi).
 Nếu tài nguyên găng được giải phóng thì hệ điều hành có nhiệm vụ đánh
thức các tiến trình trong hàng đợi ra để tạo điều kiện cho nó vào đoạn găng.
Các vấn đề có thể gặp phải đối với đoạn gang:
 Có thể dẫn đến tắc nghẽn (Deadlock) trong hệ thống.
 Các tiến trình có thể bị đói (Stravation) tài nguyên.
III.


Giải pháp Semaphore

Semaphore là một đóng góp quan trọng khác của nhà toán học E. W. Dijkstra.
Có thể xem Semaphore như là một mở rộng của Mutex locks.
Semaphore (sự đánh tín hiệu bằng cờ) S là một biến 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 găng 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.
Chỉ có hai thao tác Down và Up được tác động đến semaphore (sự đánh tín hiệu
bằng cờ) S. Down giảm S xuống một đơn vị, Up tăng S lên một đơn vị.
Mỗi tiến trình trước khi vào đoạn găng thì phải gọi Down để kiểm tra và xác lập
quyền vào đoạn găng.
Mỗi tiến trình ngay sau khi ra khỏi đoạn găng phải gọi Up đề kiểm tra xem có
tiến trình nào đang đợi trong hàng đợi hay không, nếu có thì đưa tiến trình trong
hàng đợi vào đoạn găng. Khi tiền trình gọi Up thì hệ thống sẽ thực hiện.
Ở đâ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ông
thể tách rời nhau.

IV.

Deadlock

GVHD: Trần Hồ Thủy Tiên

Page 12


Báo cáo đồ án
1. Giới thiệu vấn đề

Trong môi trường đa chương, nhiều quá trình có thể cạnh tranh một số giới hạn
tài nguyên. Một quá trình yêu cầu tài nguyên, nếu tài nguyên không sẵn dùng tại
thời điểm đó, quá trình đi vào trạng thái chờ. Quá trình chờ có thể không bao giờ
chuyển trạng thái trở lại vì tài nguyên chúng yêu cầu bị giữ bởi những quá trình
đang chờ khác. Trường hợp này được gọi là deadlock (khoá chết).
Trong trường hợp bài toán là khi tất cả các triết gia đều đói cùng một lúc, họ
ngồi vào bàn và tất cả cùng nhắc chiếc nĩa bên tay phải (hoặc bên phải) của mình,
và cùng chờ đợi chiếc nĩa từ hàng xóm bên cạnh dẫn đến các tiến trình bị khóa chết.

Hình 2. Mô tả tình trạng deadlocked

2. Điều kiện hình thành tắt nghẽn
Năm 1971, Coffman đã đưa ra và chứng tỏ được rằng, nếu hệ thống tồn tại đồng
thời bốn điều kiện sau đây thì hệ thống sẽ xảy ra tắt nghẽn:
 Loại trừ lẫn nhau (mutual excution) hay độc quyền sử dụng: Đối với các tài
nguyên không phân chia được thì tại mỗi thời điểm chỉ có một tiến trình sử
dụng được tài nguyên.
 Giữ và đợi (hold and wait): Một tiến trình hiện tại đang chiếm giữ tài nguyên,
lại xin cấp phát thêm tài nguyên mới.
 Không ưu tiên (No preemption): Không có tài nguyên nào có thể được giải
phóng từ một tiến trình đang chiếm giữ nó.

GVHD: Trần Hồ Thủy Tiên

Page 13


Báo cáo đồ án

Sự tắc nghẽn có thể tồn tại với ba điều kiện trên, nhưng cũng có thể không xảy

ra chỉ với 3 điều kiện đó. Để chắc chắn tắc nghẽn xảy ra cần phải có điều kiện thứ
tư:
 Đợi vòng tròn (Circular warf): Đây là trường hợp của ví dụ l mà chúng ta đã
nêu ở trên. Tức là, mỗi tiến trình đang chiếm giữ tài nguyên mà tiến trình
khác đang cần.
3. Ngăn chặn tắc nghẽn (Deadlook Prevention)
Ngăn chặn tắc nghẽn là thiết kế một hệ thống sao cho hiện tượng tắc nghẽn bị
loại trừ. Các phương thức ngăn chặn tắc nghẽn đều tập trung giải quyết bốn điều
kiện gây ra tắc nghẽn, sao cho hệ thống không thể xảy ra đồng thời bốn điều kiện
tắc nghẽn:
 Đối với điều kiện độc quyền: Điều kiện này gần như không tránh khỏi, vì sự
độc quyền là cần thiết đối với tài nguyên thuộc loại phân chia được như các
biến chung, các tập tin chia sẻ, hệ điều hành cần phải hỗ trợ sự độc quyền
trên các tài nguyên này.
 Đối với điều kiện giữ và đợi: Điều kiện này có thể ngăn chặn bằng cách yêu
cầu tiến trình yêu cầu tất cả tài nguyên mà nó cần tại một thời điểm và tiến
trình sẽ bị khoá (blocked) cho đến khi yêu cầu tài nguyên của nó được hệ
điều hành đáp ứng. Phương pháp này không hiệu quả. Thứ nhất, tiến trình
phải đợi trong một khoảng thời gian dài để có đủ tài nguyên mới có thể
chuyển sang hoạt động được, trong khi tiến trình chỉ cần một số ít tài nguyên
trong số đó là có thể hoạt động được, sau đó yêu cầu tiếp. Thứ hai, lãng phí
tài nguyên, vì có thể tiến trình giữa nhiều tài nguyên mà chỉ đến khi sắp kết
thúc tiến trình mới sử dụng, và có thể đây là những tài nguyên mà các tiến
trình khác đang rất cần. Ở đây hệ điều hành có thể tô chức phân lớp tài
nguyên hệ thống. Theo đó tiến trình phải trả tài nguyên ở mức thấp mới được
cấp phát tài nguyên ở cấp cao hơn.
 Đối với điều kiện No preemption: Điều kiện này có thể ngăn chặn bằng cách,
khi tiến trình bị rơi vào trạng thái khoá, hệ điều hành có thể thu hồi tài
nguyên của tiến trình bị khoá để cấp phát cho tiến trình khác và cấp lại đầy
đủ tài nguyên cho tiến trình khi tiến trình được đưa ra khỏi trạng thái khoá.

 Đối với điều kiện chờ đợi vòng tròn: Điều kiện này có thể ngăn chặn bằng
cách phân lớp tài nguyên của hệ thống. Theo đó, nếu một tiến trình được cấp
phát tài nguyên ở lớp L, thì sau đó nó chỉ có thể yêu cầu các tài nguyên ở lớp
thấp hơn lớp L.

GVHD: Trần Hồ Thủy Tiên

Page 14


Báo cáo đồ án

CHƯƠNG III: GIẢI QUYẾT BÀI TOÁN
I.

Quản lý vùng găng

Chương trình xem mỗi triết gia là 1 tiến trình, chopstick là tài nguyên chung cần
được bảo vệ.
Biến taken được xây dựng trong class Chopstick để quản lý tài nguyên dùng
chung là các chopsticks, mỗi chopsticks được tạo ra sẽ có 1 biến khóa taken để đánh
dấu :
 taken = true: chopstick đã được sử dụng.
 taken = false: chopstick chưa được sử dụng.
Class Chopstick đóng vai trò quản lý vùng găng với 2 phương thức
synchronized put() và get() để mở và đóng vùng găng.

Phương thức này tương ứng với hành động một triết gia đặt Chopstick xuống
(giải phóng Chopstick) để các triết gia khác có thể sử dụng tài nguyên chung này.


Nếu tài nguyên chung (Chopstick) đang được sử dụng thì triết gia phải đợi
(wait) cho đến khi tài nguyên được giải phóng, lúc đó triết gia sử dụng tài nguyên
này đồng thời thiết lập taken = true để khóa các tiến trình khác. Như vậy biến taken
đóng vai trò khóa vùng tài nguyên dùng chung khi nó đang được sử dụng bởi một
tiến trình.

GVHD: Trần Hồ Thủy Tiên

Page 15


Báo cáo đồ án

Xét trường hợp cụ thể sau:

Hình 3. Thực hiện 5 tiến trình tương ứng 5 triết gia

Chương trình tạo ra 5 tiến trình tương ứng với 5 triết gia và 5 tài nguyên
dùng chung tương ứng 5 chopsticks:

Xét trạng thái cụ thể của các chopsticks ta có:
chopsticks[0].taken == false
chopsticks[1].taken == false
chopsticks[2].taken == false
chopsticks[3].taken == true
chopsticks[4].taken == false

GVHD: Trần Hồ Thủy Tiên

Page 16



Báo cáo đồ án

Giải pháp xử lý deadlock

II.

Vấn đề deadlock có thể được tránh khỏi bằng việc xây dụng phương thức Wait()
và Signal() sao cho vòng tròn đợi không xảy ra.
Ở đây các phương thức được cài đặt như sau:

Phương thức Wait() và Signal() được xây dựng để quản lí tiến trình ra vào vùng
găng. Với cách xây dựng như trên thì 2 tiến trình cạnh nhau có số thứ tự chẵn lẽ
khác nhau sẽ có thứ tự lấy các chopstick theo thứ tự khác nhau.

III.

Chương trình

Chương trình được xây dựng gồm 4 class:
Class Diners : đây là class chính khởi tạo và liên kết các class khác
Class PhilCanvas : quản lí giao diện
Class Philosopher : class tạo các tiến trình
Class Chopstick : tài nguyên dùng chung (chopstick )

GVHD: Trần Hồ Thủy Tiên

Page 17



Báo cáo đồ án

Các class quan hệ như sơ đồ sau:

1. Class Philosopher
Các biến cần xét:
 private int indentity : dùng để đánh chỉ số (định iđ) cho từng tiến trình
 private Chopstick left, right : đây là 2 tài nguyên dùng chung mà mỗi tiến
trình được phép sử dụng.
Phương thức Wait() và Signal() quản lí tiến trình vào vùng găng và giải quyết
vấn đề tắc nghẽn.
Phương thức run() : chạy tiến trình

GVHD: Trần Hồ Thủy Tiên

Page 18


Báo cáo đồ án

1 và 2: tiến trình đang chờ đợi để vào vùng găng.
3: tiến trình gọi phương thức Wait() để kiểm tra điều kiện vào vùng găng.
4 và 5: tiến trình được thực thi.
6 thoát khỏi vùng găng và giải phóng tài nguyên.
2. Class Chopstick
Các biến cần xét:
 private boolean taken : đánh dấu trạng thái của chopstick đã được sử dụng
hay chưa, taken == true là tài nguyên đã được sử dụng, taken != false chưa
được sử dụng.

 private int indentity : định danh cho chopstick.
Phương thức get() được gọi khi một tiến trình muốn sử dụng tài nguyên.
Phương thức put() được gọi để giải phóng tài nguyên.
3. Class Diner
Khởi tạo giao diện, khởi tạo các tiến trình, tạo môi trường cho các tiến trình hoạt
động.

4. Class PhilCanvas
Quản lí giao diện.

GVHD: Trần Hồ Thủy Tiên

Page 19


Báo cáo đồ án

CHƯƠNG IV: KẾT QUẢ CHƯƠNG TRÌNH
I.

Chương trình tạm dừng
Từ kết quả demo ta có :

Hình 4. Chương trình chay và tạm dừng

II.

Chương trình được reset

GVHD: Trần Hồ Thủy Tiên


Page 20


Báo cáo đồ án

Hình 5. Chương trình được reset

Khởi động lại các tiến trình được tạm dừng, reset lại băng thông báo trạng thái.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
I.

Đạt được

Chương trình đạt được chức năng mô tả bài toán bằng giao điện trực quan sinh
động, sử dụng giao diện swing trên nền applet.
Tạo các tiến trình mô phỏng dựa trên lớp Thread.
Bằng cách sử dụng slider cho phép người dùng tùy chỉnh thời gian cung cấp cho
các tiến trình, giúp đễ dàng nắm bắt và kiểm soát.
Bằng cách xây dựng phương thức Wait() chương trình đã xử lý được vấn đề
deadlock.
Chương trình được phân thành các class với các chức năng rõ ràng tạo thuận lợi
cho việc mở rộng và phát triển sau này, đặc biệt phát triển giao diện một cách dễ
dàng mà không ảnh hưởng đến phân lõi của chương trình.
II.

Chưa đạt
Phần giao điện chương trình chưa được bắt mắt.
Chương trình có thể được phát triển mở rộng cho n tiến trình tùy ý.


GVHD: Trần Hồ Thủy Tiên

Page 21


Báo cáo đồ án

PHẦN II: LẬP TRÌNH MẠNG
CHƯƠNG I. PHÂN TÍCH BÀI TOÁN
1. Bối cảnh, lý do thực hiện đề tài
Hiện nay mạng internet toàn cầu đã phát triển rất mạnh, đáp ứng rất tốt các nhu
cầu về thông tin khoa học, giải trí, liên lạc, mua bán, quảng cáo v.v... của con người.
Internet đã trở thành một thành phần không thể thiếu với cuộc sống hiện đại. Về bản
chất, Internet chẳng qua là một hệ thống mạng, liên kết các máy tính trên toàn thế
giới lại theo những chuẩn chung của nó. Với phạm vi nhỏ hơn nhưng cũng rất tương
tự, có những mạng khác đó là WAN, LAN.., mỗi mô hình đó đều được ứng dụng rất
nhiều tiện ích khác nhau.
Với mục tiêu để cho các sinh viên ra trường với một kiến thức tốt về mạng, về
lập trình ứng dụng trên mạng để có thể làm được nhiều việc khác nhau, bộ môn lập
trình mạng ra đời. Vì vậy, em đã tìm hiểu đề tài “Sử dựng socket trong java để xây
dựng chương trình chat qua mạng LAN”, điều đó giúp em thực hành để có cơ hội
hiểu rõ hơn về mạng, về lập trình mạng – một lĩnh vực lập trình rất thú vị này.

GVHD: Trần Hồ Thủy Tiên

Page 22


Báo cáo đồ án

2. Cơ sở lập trình
Ứng dụng hoạt động dựa vào giao thức IP/TCP để truyền dữ liệu giữa hai máy
khác nhau, cụ thể ở đây là một máy server để cung cấp dịch vụ và nhiều máy client
sử dụng dịch vụ do máy server cung cấp để cho người dùng sử dụng.
Ngôn ngữ lập trình ở đây là ngôn ngữ Java vì Java là ngôn ngữ có thể được sử
dụng để viết ứng dụng chạy trên hầu hết các thiết bị (ở đây ta quan tâm tới thiết bị
có hỗ trợ mạng). Trọng điểm, có mấy khả năng nổi trội do Java cung cấp mà ta có
thể sử dụng là :
-

-

Lập trình đa tuyến trình (Cùng 1 ứng dụng nhưng có thể chạy nhiều tiến trình
song song với nhau thay vì cứ phải tiến trình này đợi tiến trình kia kết thúc
mới có thể thực hiện)
Java là một nền tảng có thể chạy trên nhiều loại thiết bị với nhiều hệ điều
hành khác nhau nên có phạm vi ứng dụng rất rộng rãi.
Lập trình mạng. Lớp quan trọng nhất mà ta sử dụng là lớp Socket và
ServerSocket.

GVHD: Trần Hồ Thủy Tiên

Page 23


Báo cáo đồ án
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
1. Yêu cầu của đề tài
Viết chương trình Client/Server cho phép nhiều người sử dụng có thể gửi tin
nhắn cho nhau dưới dạng một phòng chat room và có thêm chức năng gửi file với

dung lượng nhỏ.
2. Giới thiệu mô hình Client/Server
Server được hiểu là máy chủ, thường là một hệ thống máy lớn, có bộ xử lý
mạnh, có khả năng hoạt động đáng tin cậy, có khả năng lưu trữ dữ liệu lớn, nó
chuyên quản lý tài nguyên (chủ yếu là cơ sở dữ liệu), cung cấp các dịch vụ mạng
cho các máy khách (client) sử dụng. Bình thường nó chạy suốt thời gian thực và sẵn
sàng chấp nhận các yêu cầu kết nối và các yêu cầu dịch vụ khác từ máy khách.
Client là máy khách, nó thường được sử dụng bởi người dùng cuối. Nó hoạt
động dựa trên việc sử dụng dịch vụ mà máy server cung cấp để thực hiện các công
việc mà người dùng cuối mong muốn.

-

Quy trình hoạt động của mô hình này lặp lại 2 quá trình như sau :
Client gửi yêu cầu lên server.
Server nhận được yêu cầu thì xử lý thích hợp và trả lời lại client.

Hình 6. Mô hình Client/Server

GVHD: Trần Hồ Thủy Tiên

Page 24


×