Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 44

Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

MỤC LỤC
MỤC LỤC HÌNH ẢNH..................................................................................................... 5
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN .............................................................. 6
PHẦN I: HỆ ĐIỀU HÀNH: .............................................................................................. 6
TIÊU ĐỀ: XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC GIẢI THUẬT LẬP
LỊCH CPU. ......................................................................................................................... 6
MỞ ĐẦU ............................................................................................................................. 7
1. Đề tài: .......................................................................................................................... 7
2. Mục tiêu của đề tài: .................................................................................................... 7
3. Nội dung đề tài: .......................................................................................................... 7
CHƯƠNG I: CƠ SỞ LÝ THUYẾT: ................................................................................ 8
1. Tiến trình: ................................................................................................................... 8
1.1. Khái niệm: ............................................................................................................ 8
1.2. Quản lý tiến trình. ................................................................................................ 9
1.3. Các trạng thái của tiến trình: ............................................................................ 10
1.4. Cơ chế điều phối độc quyền: ............................................................................. 10
1.5. Cơ chế điều phối không độc quyền. .......................Error! Bookmark not defined.
2. Lập lịch CPU: ........................................................................................................... 12
2.1. Khái niệm: .......................................................................................................... 12
2.2. Mục đích: ............................................................................................................ 12
2.3. Các thuật toán lập lịch CPU: ............................................................................ 12
CHƯƠNG II: PHÂN TÍCH THIẾT KẾ HỆ THỐNG: ............................................... 13
1. Mô tả bài toán: ......................................................................................................... 13
2. Cấu trúc dữ liệu: ...................................................................................................... 13
2.1. Thông tin tiến trình:........................................................................................... 13
2.2. Kết quả đánh giá sau khi thực hiện các tiến trình: ......................................... 14
2.3. Cấu trúc cho hàng chờ ready: ................................Error! Bookmark not defined.
3. Thuật toán: ............................................................... Error! Bookmark not defined.
3.1. Thuật toán xử lí chính: ...........................................Error! Bookmark not defined.
3.2. Thuật toán FIFO: ....................................................Error! Bookmark not defined.

Nguyễn Công Định – 15T2 1


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

3.3. Thuật toán SRT:......................................................Error! Bookmark not defined.


3.4. Thuật toán SJF: ..................................................................................................... 14
3.5. Thuật toán Round Robin: ......................................Error! Bookmark not defined.
3.6. Thuật toán Priority: ................................................Error! Bookmark not defined.
CHƯƠNG III: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ:........................................ 18
1. Môi trường làm việc:.................................................................................................. 18
2. Các modun cài đặt: .................................................. Error! Bookmark not defined.
2.1. Modun Input và Output. ........................................Error! Bookmark not defined.
2.2. Hàm thực hiện các thuật toán: ...............................Error! Bookmark not defined.
2.3. Hàm main của chương trình: .................................Error! Bookmark not defined.
3. Kết quả triển khai: ................................................................................................... 18
3.1. Demo Input: ........................................................................................................ 18
3.2. Kết quả FIFO: .................................................................................................... 18
3.3. Kết quả SRT: ...................................................................................................... 19
3.4. Kết quả SJF: ....................................................................................................... 20
3.5. Thuật toán RR:................................................................................................... 20
3.6. Kết quả Priority: ................................................................................................ 20
4. Đánh giá kết quả: ..................................................................................................... 21
CHƯƠNG IV: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN: .......................................... 22
1. Kết luận: .................................................................................................................... 22
2. Hướng phát triển ...................................................................................................... 22
PHẦN II: LẬP TRÌNH MẠNG: .................................................................................... 23
TIÊU ĐỀ:MÔ PHỎNG MÁY RÚT TIỀN TỰ ĐỘNG ATM. ..................................... 23
MỞ ĐẦU ........................................................................................................................... 23
1. Đề tài: ........................................................................................................................ 23
2. Mục tiêu: ................................................................................................................... 23
3. Nội dung đề tài: ........................................................................................................ 23
CHƯƠNG I: CƠ SỞ LÝ THUYẾT: .............................................................................. 23
1. Luồng: ....................................................................................................................... 23
1.1. Khái niệm luồng và đa luồng: ........................................................................... 23

Nguyễn Công Định – 15T2 2


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

1.2. Vòng đời của một luồng trong Java: ................................................................ 23


1.3. Quyền ưu tiên của một luồng trong Java: ........................................................ 24
1.4. Các cách để triển khai luồng trong Java. ......................................................... 24
2. Đồng Bộ Hóa-Synchronization: .............................................................................. 25
2.1.Phương thức đồng bộ:......................................................................................... 25
2.2.Khối lệnh đồng bộ: .............................................................................................. 28
2.3.Bế tắc-DeadLock. .....................................................Error! Bookmark not defined.
3. Lập trình socket: ...................................................................................................... 29
3.1. Khái niệm: .......................................................................................................... 29
3.2. Cơ chế gọi hàm trong lập trình socket. ............................................................ 30
3.3. Lập trình socket trong Java: ............................................................................. 31
CHƯƠNG II: PHÂN TÍCH THIẾT KẾ HỆ THỐNG. ................................................ 31
1. Mô tả bài toán: ......................................................................................................... 31
2. Phân tích hệ thống: .................................................................................................. 31
2.1. Hệ thống cho Server: ......................................................................................... 31
2.2. Hệ thống cho Client: .......................................................................................... 33
CHƯƠNG III: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ. ........................................ 33
1. Môi trường cài đặt. .................................................................................................. 35
2. Các mudun cài đặt. .................................................. Error! Bookmark not defined.
2.1. Modun của Server:..................................................Error! Bookmark not defined.
2.2. Modun của Client: ..................................................Error! Bookmark not defined.
3. Kết quả triển khai. ................................................... Error! Bookmark not defined.
3.1. Server: ......................................................................Error! Bookmark not defined.
3.2. Client: .......................................................................Error! Bookmark not defined.
4. Đánh giá kết quả....................................................................................................... 42
CHƯƠNG IV: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN. .......................................... 43
1. Kết luận: .................................................................................................................... 43
2. Hướng phát triển. ..................................................................................................... 43
TÀI LIỆU THAM KHẢO ............................................................................................... 44

Nguyễn Công Định – 15T2 3


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Nguyễn Công Định – 15T2 4


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

MỤC LỤC HÌNH ẢNH

Hình 1: Các trạng thái của tiến trình. ............................................................................... 10


Hình 2: Thuật toán FIFO. ................................................. Error! Bookmark not defined.
Hình 3: Thuật toán xử lí chính.......................................... Error! Bookmark not defined.
Hình 4: Sơ đồ thuật toán FIFO. ........................................ Error! Bookmark not defined.
Hình 5: Sơ đồ thuật toán SRT. ......................................... Error! Bookmark not defined.
Hình 6: Sơ đồ thuật toán SJF. ........................................... Error! Bookmark not defined.
Hình 7: Sơ đồ thuật toán RR. ........................................... Error! Bookmark not defined.
Hình 8: Sơ đồ thuật toán Priority. ..................................... Error! Bookmark not defined.
Hình 9: Cấu trúc File Input. .............................................. Error! Bookmark not defined.
Hình 10: In ra màn hình input nhập vào. .......................................................................... 18
Hình 11: Kết quả demo cho thuật toán FIFO. .................................................................. 19
Hình 12: Kết quả demo cho thuật toán SRT..................................................................... 19
Hình 13: Kết quả demo cho thuật toán SJF. ..................................................................... 20
Hình 14: Kết quả demo cho thuật toán RR....................................................................... 20
Hình 15: Kết quả demo cho thuật toán Priority. ............................................................... 21
Hình 16: Ống dẫn trên 1 chiều. ........................................ Error! Bookmark not defined.
Hình 17: Ống dẫn 2 chiều mô hình Client-Server. ........... Error! Bookmark not defined.
Hình 18: Ống dẫn trong Java. ........................................... Error! Bookmark not defined.
Hình 19: Cơ chế TCP. ...................................................................................................... 30
Hình 20: Thread chính cho Server. ................................... Error! Bookmark not defined.
Hình 21: Thread giao tiếp Server-Server, Server-Client. . Error! Bookmark not defined.
Hình 22: Thuật toán cho Client Socket. ........................... Error! Bookmark not defined.
Hình 23: Khởi động Server, chờ kết nối........................... Error! Bookmark not defined.
Hình 24: Kết nối thành công đến một Client. ................... Error! Bookmark not defined.
Hình 25: Nhận tin nhắn từ Client và xử lí. ....................... Error! Bookmark not defined.
Hình 26: Ngắt kết nối tới một Client. ............................... Error! Bookmark not defined.
Hình 27: Giao diện kết nối của Client. ............................. Error! Bookmark not defined.
Hình 28: Kết nối thành công đến Server. ......................... Error! Bookmark not defined.
Hình 29: Gửi tin nhắn đến Server. .................................... Error! Bookmark not defined.
Hình 30: Nhận tin nhắn từ Server. .................................... Error! Bookmark not defined.

Nguyễn Công Định – 15T2 5


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................

...............................................................................................................................................

...............................................................................................................................................

...............................................................................................................................................

...............................................................................................................................................

Đà Nẵng,.….tháng….. năm 2018

PHẦN I: HỆ ĐIỀU HÀNH:

TIÊU ĐỀ: XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC GIẢI THUẬT LẬP
LỊCH CPU.

Nguyễn Công Định – 15T2 6


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

MỞ ĐẦU
1. Đề tài:
Xây dựng chương trình mô phỏng các giải thuật lập lịch CPU.
2. Mục tiêu của đề tài:
 Nghiên cứu về tiến trình, cơ chế hoạt động của các tiến trình.
 Nghiên cứu về cơ chế hoạt động, nguyên lý của các thuật toán lập lịch CPU (FIFO,
SJF, SRT, RR, Priority).
 Xây dựng chương trình mô phỏng các giải thuật trên bằng ngôn ngữ C++.

3. Nội dung đề tài:


Tìm hiểu lý thuyết, xây dựng một chương trình mô phỏng hoạt động của các giải
thuật lập lịch CPU. Qua đó nghiên cứu thêm về tiến trình, hệ điều hành.

Nguyễn Công Định – 15T2 7


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

CHƯƠNG I: CƠ SỞ LÝ THUYẾT:
1. Tiến trình:
1.1. Khái niệm:
Tất cả các máy tính hiện đại đều có thể thực hiện nhiều việc cùng một lúc. Trong
khi thực hiện chương trình của người sử dụng, máy tính có thể đọc dữ liệu từ đĩa và đưa ra
màn hình hoặc máy in. Trong môi trường đa chương trình (multiprogramming system),
một CPU có thể chuyển từ chương trình này sang chương trình khác, thực hiện mỗi chương
trình trong khoảng 1% hoặc 1/10 mili giây. Nếu nói chính xác, thì tại một thời điểm, CPU
chỉ thực hiện được một chương trình. Nhưng nếu xét trong khoảng thời gian phần trăm
giây thì CPU có thể thực hiện nhiều công việc. Để hổ trợ hoạt động đa nhiệm,hệ thống máy
tính cần phải có khả năng thực hiện nhiều tác vụ xử lý đồng thời nhưng việc điều khiển
hoạt động song hành ở cấp độ phần cứng là rất khó khăn.Vì vậy,các nhà thiết kế hệ điều
hành đề xuất một mô hình song hành giả lập bằng cách chuyển đổi bộ xử lý qua lại giữa
các chương trình để duy trì hoạt động của nhiều chương trình phải cùng một thời
điểm.Trong mô hình này các chương trình của hệ thống được tổ chức thành các tiến
trình(process).
Có thể chia thành hai loại: tiến trình tuần tự (MS_DOS) và tiến trình song song(
uniprocesser và multiprocesser). 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 mằn ở 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. Trong này tiế n trình song song đươ ̣c
chia thành nhiề u loa ̣i:
 Tiế n triǹ h song song đô ̣c lâ ̣p
 Tiế n triǹ h song song có quan hê ̣ thông tin
 Tiế n triǹ h song song phân cấ p
Trong mô hình này hệ điều hành phải giải quyết vấn đề cấp phát tài nguyên cho các
tiến trình con. Các tiến trình hoạt động song song sử dụng chung tài nguyên theo nguyên
tắc lần lượt, mỗi tiến trình sau một khoảng thời gian chiếm giữ tài nguyên phải tự động trả
lại tài nguyên cho tiến trình kia. Công việc phân phối tài nguyên cho các tiến trình gọi là
Lập lịch cho CPU. Bao gồm các giải thuật First In First Out (FIFO), Shortest Job First
(SJF), Shortest Remain Time (SRT), Round Robin (RR), Priority,…[1]

Nguyễn Công Định – 15T2 8


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

1.2. Quản lý tiến trình.


Tất cả các hệ điều hành đa chương, từ các hệ điều hành đơn người sử dụng đến
các hệ điều hành có thể hỗ trợ đến hàng ngàn người sử dụng, đều phải xây dụng dựa
trên khái niệm tiến trình. Vì thế, một yêu cầu quan trọng trong thiết kế hệ điều hành là
thành phần quản lý tiến trình của hệ điều hành phải đáp ứng tất cả những gì liên quan
đến tiến trình:
 Hệ điều hành phải cho phép thực hiện nhiều tiến trình đồng thời để khai
thác tối đa thời gian xử lý của processor nhưng cũng cung cấp được thời
gian hồi đáp hợp lý.
 Hệ điều hành phải cấp phát tài nguyên để tiến trình hoạt động một cách
hiệu quả với một chính sách hợp lý nhưng không xảy ra tình trạng tắc
nghẽn trong hệ thống.
 Hệ điều hành có thể được yêu cầu để hỗ trợ truyền thông liên tiến trình
và người sử dụng tạo ra tiến trình.
Hệ điều hành phải có nhiệm vụ tạo ra tiến trình, điều khiển sự hoạt động của tiến trình và
kết thúc tiến trình.
Một số hệ điều hành phân biệt hai khái niệm tiến trình và tiểu trình. Tiến trình liên quan
đến quyền sở hữu tài nguyên, tiểu trình liên quan đến sự thực hiện chương trình.
Trong các hệ điều hành đa chương, có nhiều tiến trình tồn tại trên bộ nhớ chính, các tiến
trình này luân phiên giữa hai trạng thái: sử dụng processor và đợi thực hiện vào/ra hay
một vài sự kiện nào đó xảy ra.

Nguyễn Công Định – 15T2 9


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

1.3. Các trạng thái của tiến trình:


Trạng thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiện thời
của tiến trình tại thời điểm đó. Trong quá trình sống, một tiến trình thay đổi trạng thái do
nhiều nguyên nhân như : phải chờ một sự kiện nào đó xảy ra, hay đợi một thao tác
nhập/xuất hoàn tất, buộc phải dừng hoạt động do đã hết thời gian xử lý …
Tại một thời điểm mô ̣t tiế n trin ̀ h có thể nhâ ̣n mô ̣t trong các tra ̣ng thái sau đây:
 Mới ta ̣o(new): tiến trin ̀ h đang đươ ̣c ta ̣o lâ ̣p.
 Running: các chỉ thi ̣của tiế n trình đang đươ ̣c xử lý.
 Blocked: tiến trình chờ được cấ p phát tài nguyên, hay chờ mô ̣t sự kiê ̣n xảy
ra.
 Ready(ready): tiế n triǹ h chờ được cấ p phát CPU để xử lý. *
 Waiting (đợi): tiến trình phải dừng vì thiếu tài nguyên hoặc chờ một sự kiện
nào đó.
 Kế t thúc(halt) : tiế n triǹ h hoàn tấ t xử lý Các trạng thái của tiến trình được
biểu diễn qua sơ đồ sau:

Hình 1: Các trạng thái của tiến trình.


1.4. Cơ chế điều phối độc quyền và không độc quyền
Thuật toán điều phối cần xem xét và quyết định thời điểm chuyển đổi CPU giữa
các tiến trình. Hệ điều hành có thể thực hiện cơ chế điều phối theo nguyên lý độc quyền
hoặc không độc quyền:
- Điều phối độc quyền: Nguyên lý điều phối độc quyền cho phép một tiến trình khi
nhận được CPU sẽ có quyền độc chiếm CPU đến khi hoàn tất xử lý hoặc tự nguyện giải
phóng CPU. Khi đó, quyết định điều phối CPU sẽ xảy ra trong các tình huống sau:

Nguyễn Công Định – 15T2 10


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

 Khi tiến trình chuyên từ trạng thái xử lý (Running) sang trạng thái bị
chặn (Blocked) (Ví dụ chờ một thao tác nhập xuất hay chờ một tiến trình
con kết thúc...)
 Khi tiến trình kết thúc.
Các giải thuật độc quyền thường đơn giản và dễ cài đặt. Tuy nhiên chúng thường
không thích hợp với các hệ thống tổng quát, nhiều người dùng, vì nếu cho phép một tiến
trình có quyền xử lý bao lâu tùy ý, có nghĩa là tiến trình này đã giữ CPU một khoảng thời
gian không xác định, có thể ngăn cản những tiến trình còn lại trong hệ thống có một cơ
hội để xử lý

- Điều phối không độc quyền: Ngược lại với nguyên lý độc quyền, điều phối theo
nguyên lý không độc quyền cho phép tạm dừng hoạt động của một tiến trình sẵn sàng xử
lý. Khi tiến trình nhận được CPU, nó vẫn được sử dụng CPU đến khi hoàn tất hoặc tự
nguyện giải phóng. Nhưng khi có một tiến trình khác có độ ưu tiến có thể dành quyền sử
dụng CPU của tiến trình ban đầu. Như vậy là tiến trình có thể bị tạm dừng hoạt động bất
cứ lúc nào mà không được báo trước, để tiến trình khác xử lý. Các quyết định điều phối
xảy ra khi:

 Khi tiến trình chuyển từ trạng thái đang xử lý (Running) sang trạng thái bị
chặn (Blocked).
 Khi tiến trình chuyên trừ trạng thái đang xử lý (Running) sang trạng thái
Ready (vì xảy ra một ngắt).
 Khi tiến trình chuyển từ trạng thái chờ (Blocked) sang trạng thái sẵn sàng
(Ready) (Ví dụ một thao tác nhập xuất hoàn tất).
 Khi tiến trình kết thúc.
Trong các hệ thống sử dụng nguyên lý điều phối độc quyền có thể xảy ra tình
trạng các tác vụ cần thời gian xử lý ngắn phải chờ các tác vụ xử lý với thời gian rất dài
hoàn tất. Nguyên lý điều phối độc quyền thường chỉ thích hợp với các hệ xử lý theo lô.
Đối với các hệ thống tương tác (Time sharing), các hệ thời gian thực (Real Time),
cần phải sử dụng nguyên lý điều phối không độc quyền để các tiến trình quan trọng có cơ
hội hồi đáp kịp thời. Tuy nhiên thực hiện điều phối theo nguyên lý không độc quyền đòi
hỏi những cơ chế phức tạp trong việc phân định độ ưu tiên và phát sinh thêm chi phí
chuyển đổi qua lại giữa các tiến trình

Nguyễn Công Định – 15T2 11


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

2. Lập lịch CPU:


2.1. Khái niệm giờ CPU:
CPU là một loại tài nguyên quan trọng của máy tính. Mọi tiến trình muốn hoạt động
được đều phải có sự phục vụ của CPU (để xử lý, tính toán...). Thời gian mà CPU phục vụ
cho tiến trình hoạt động được gọi là giờ CPU.
Tại mỗi thời điểm duy nhất, chỉ có một tiến trình được phân phối giờ CPU để hoạt
động (Thực hiện các lệnh của mình).
2.2. Mục đích:
 Sự công bằng: Các tiến trình chia sẻ CPU một cách công bằng,không có tiến trình
nào phải chờ đợi vô hạn để được cấp phát CPU.
 Tính hiệu quả: Hệ thống phải tận dụng được CPU 100% thời gian.(thời gian chờ
trung bình ngắn).
 Thời gian đáp ứng hợp lý: Cực tiểu hóa thời gian hồi đáp cho các tương tác của
người sử dụng.
 Thời gian lưu lại trong hệ thống: Cực tiểu hóa thời gian hoàn tất các tác vụ xử lý.
 Thông lượng tối đa: Cực đại hóa số công việc được xử lý trong một đơn vị thời
gian.

Tuy nhiên thường không thể thỏa mãn tất cả các mục tiêu kể trên vì bản thân chúng có
sự mâu thuẩn nhau mà chỉ có thể dung hòa chúng ở mức độ nào đó.
2.3. Khai niệm lập lịch cho CPU:
Để điều khiển tiến trình ở nhiều trạng thái khác nhau, hệ thống thường tổ chức các
từ trạng thái (thực chất là các khối điều khiển tiến trình) để ghi nhận tình trạng sử dụng
tài nguyên và trạng thái tiến trình.
Như vậy, lập lịch cho CPU có nghĩa là tổ chức một hàng đợi các tiến trình sẵn
sàng để phân phối giờ CPU cho chúng dựa trên độ ưu tiên của các tiến trình; sao cho hiệu
suất sử dụng CPU là tối ưu nhất.
Mỗi tiến trình ở trạng thái sẵn sàng sẽ được gắn với một thứ tự ưu tiên. Thứ tự ưu
tiên này được xác định dựa vào các yếu tố như: thời điểm hình thành tiến trình, thời gian
thực hiện tiến trình, thời gian kết thúc tiến trình.

Nguyễn Công Định – 15T2 12


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

CHƯƠNG II: PHÂN TÍCH THIẾT KẾ HỆ THỐNG:


1. Mô Hình Cài Đặt Thuật Toán:
Thuật toán xử lý chung
Việc cài đặt thuật toán được mô phỏng theo cách làm việc của CPU và tất cả các thuật
toán con đều theo mô hình thuật toán này:
• Tiến trình ở đầu danh sách sẽ được ưu tiên xử lý trước và nó chiếm dụng
CPU tại thời điểm đó.
• Việc đi kèm theo là xem xét thời gian xử lý các tiến trình đã hết chưa. Nếu
đã hết thì nghĩa là đã hoàn thành việc xử lý, ngược lại thì tiếp tục xử lý theo
thuật toán.
• Xong mỗi chu kỳ của CPU (1 quantum) thì cập nhật lại danh sách để loại bỏ
các tiến trình đã hoàn thành hay sắp xếp hay thêm các tiến trình mới vào.

2. Thuật Toán
2.1. First Come First Server (FCFS)
Trong thuật toán này, độ ưu tiên phục vụ tiến trình căn cứ vào thời điểm hình thành tiến trình.
Hàng đợi các tiến trình được tổ chức theo kiểu FIFO (first in first out). Mọi tiến trình đều được phục vụ
theo trình tự xuất hiện cho đến khi kết thúc hoặc bị ngắt.

Hình 3 : Thuật toán FCFS

Ưu điểm của thuật toán này là giờ CPU không bị phân phối lại (không bị ngắt) và chi phí thực hiện thấp
nhất (vì không phải thay đổi thứ tự ưu tiên phục vụ, thứ tự ưu tiên là thứ tự của tiến trình trong hàng
đợi).

Nhược điểm của thuật toán là thời gian trung bình chờ phục vụ của các tiến trình là như nhau
(không kể tiến trình ngắn hay dài), do đó dẫn tới ba điểm sau:

Nguyễn Công Định – 15T2 13


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

- Thời gian chờ trung bình sẽ tăng vô hạn khi hệ thống tiếp cận với khả năng
phục vụ của mình.
- Nếu độ phát tán thời gian thực hiện tiến trình tăng thì thời gian chờ đợi trung
bình cũng tăng theo.
Khi có tiến trình dài, ít bị ngắt thì các tiến trình khác phải chờ đợi lâu hơn.

2.2. Shorstest Job First (SJF)


Một tiếp cận khác đối với việc định thời CPU là giải thuật định thời công việc
ngắn nhất trước (Shortest Job First). Giải thuật này tham chiếu tới mỗi độ dài quá trình
của chu kỳ CPU tiếp theo cho quá trình sau đó. Khi CPU sẵn dùng, nó được gán tới quá
trình có chu kỳ CPU kế tiếp ngắn nhất. Nếu hai quá trình có cùng chiều dài chu kỳ CPU
kế tiếp, định thời FIFO được sử dụng.

Hình 4: Thuật toán SJF

2.3. Shortest Remain Time (SRT)


Tương tự như SJF nhưng trong thuật toán này, độ ưu tiên thực hiện các tiến trình
dựa vào thời gian cần thiết để thực hiện nốt tiến trình (bằng tổng thời gian trừ đi thời gian
đã thực hiện). Như vậy, trong thuật toán này cần phải thường xuyên cập nhật thông tin về
giời gian đã thực hiện của tiến trình.
Đồng thời, chế độ phân bổ lại giờ CPU cũng phải được áp dụng nếu không sẽ làm
mất tình ưu việc của thuật toán.
 Ưu điểm :
- Thời gian chờ đợi,tồn tại trong hệ thống của mỗi tiến trình đều ngắn.
 Nhược điểm :

Nguyễn Công Định – 15T2 14


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

- Việc cài đặt thuật toán khá phức tạp.


- Cần quản lý chặt chẽ việc điều phối các tiến trình.
- Quản lý thời gian đến của mỗi tiến trình.

2.4. Round Robin (RR)


Tương tự như SJF nhưng trong thuật toán này, độ ưu tiên thực hiện các tiến trình
dựa vào thời gian cần thiết để thực hiện nốt tiến trình(bằng tổng thời gian trừ đi thời gian
đã thực hiện). Như vậy, trong thuật toán này cần phải thường xuyên cập nhật thông tin về
giời gian đã thực hiện của tiến trình. Đồng thời, chế độ phân bổ lại giờ CPU cũng phải
được áp dụng nếu không sẽ làm mất tình ưu việc của thuật toán.
 Ưu điểm :
- Thời gian chờ đợi, tồn tại trong hệ thống của mỗi tiến trình đều ngắn.
 Nhược điểm :
- Việc cài đặt thuật toán khá phức tạp.
- Cần quản lý chặt chẽ việc điều phối các tiến trình.
- Quản lý thời gian đến của mỗi tiến trình.

3.4. Thiết Kế Hệ Thống


● Cấu trúc dữ liệu của tiến trình
struct process // cau truc du lieu cua tien trinh
{ int id; // ma cua tien trinh. ta ko dung ten tien trinh
int timexh; // thoi gian den cua tien trinh
int timeth; // thoi gian xu ly cua tien trinh
}
● Cấu trúc dữ liệu biểu diễn ở sơ đồ Gantt
struct sodo // cau truc du lieu bieu dien o cua so do Gantt
{ int *ten; // ten cua so do trung voi ten cua tien trinh
int *moc; // moc thoi gian cap cpu cho tien trinh

Nguyễn Công Định – 15T2 15


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

int sl; // tong so luong cac o trong so do Gantt


}
● Thuật toán FCFS
sodo FCFS(process *a,int &n) // thuat toan fcfs
{ sodo G; process *x; int i,j;
x=new process[n]; // cap phat danh sach x gom n process
for(i=0;i<n;i++)
x[i]=a[i]; // gan danh sach x bang danh sach a
G.sl=0; // so luong o trong so do Gantt ban dau la 0
G.ten=new int;
G.moc=new int;
G.moc[0]=0; // khoi tao moc thoi gian ban dau la 0
j=0,i=0; // j dung dem so tien trinh i dung xac dinh moc dang xet
●Thuật toán SJF
sodo SJF(process *a,int &n) // thuat toan SJF
{ sodo G; process *x,tg; int i,j,k,h;
x=new process[n];
for(i=0;i<n;i++)
x[i]=a[i];
G.sl=0;
G.ten=new int;
G.moc=new int;
G.moc[0]=0;
j=0,i=0;
●Thuật toán SRT
sodo G; int i,j,tg; process *a;

Nguyễn Công Định – 15T2 16


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

a=new process[n];
for(i=0;i<n;i++)
a[i]=x[i];
int *vt; // vi process co the bi ngat tra cpu cho tien trinh khac
// nen ta dung them vt de danh dau cac vi tri
cua tien trinh
int *th; // thoi gian xu ly cua tien trinh
int *cl; // thoi gian xu ly con lai cua tien trinh
int sopt=0; // so process trong danh sach san sang
int slxh=0; // so luong tien trinh da den
int *xh; // danh dau process da xu ly chua
●Thuật toán SJF
sodo SJF(process *a,int &n) // thuat toan SJF
{ sodo G; process *x,tg; int i,j,k,h;
x=new process[n];
for(i=0;i<n;i++)
x[i]=a[i];
G.sl=0;
G.ten=new int;
G.moc=new int;
G.moc[0]=0;
j=0,i=0;
●Thuật toán SRT
sodo G; int i,j,tg; process *a;
a=new process[n];
for(i=0;i<n;i++)
a[i]=x[i];

Nguyễn Công Định – 15T2 17


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

int *vt; // vi process co the bi ngat tra cpu cho tien trinh khac
// nen ta dung them vt de danh dau cac vi tri
cua tien trinh
int *th; // thoi gian xu ly cua tien trinh
int *cl; // thoi gian xu ly con lai cua tien trinh
int sopt=0; // so process trong danh sach san sang
int slxh=0; // so luong tien trinh da den
int *xh; // danh dau process da xu ly chua

CHƯƠNG III: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ:


1. Môi trường làm việc:
Lập trình bằng ngôn ngữ C++, Phần mềm Dev-C++ và giao diện console để hiển
thị kết quả.
2. Kết quả triển khai:
3.1. Demo Input:
Với dữ liệu input được cho trong file input.txt như sau:

Hình 2: In ra màn hình input nhập vào.


3.2. Kết quả FIFO:

Nguyễn Công Định – 15T2 18


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 3: Kết quả demo cho thuật toán FIFO.


3.3. Kết quả SRT:

Hình 4: Kết quả demo cho thuật toán SRT.

Nguyễn Công Định – 15T2 19


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

3.4. Kết quả SJF:

Hình 5: Kết quả demo cho thuật toán SJF.


3.5. Thuật toán RR:

Hình 6: Kết quả demo cho thuật toán RR.


3.6. Kết quả Priority:

Nguyễn Công Định – 15T2 20


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 7: Kết quả demo cho thuật toán Priority.

4. Đánh giá kết quả:


 Kết quả ra đúng yêu cầu của các thuật toán.
 Hiển thị được đầy đủ các yêu cầu.
 Chương trình thực hiện khá nhanh.

Nguyễn Công Định – 15T2 21


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

CHƯƠNG IV: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN:

1. Kết luận:
Những kết quả đạt được:
 Xây dựng chương trình mô phỏng đầy đủ 5 thuật toán FIFO, SRT, SJF, RR, Priority.
 Hiểu được cách hoạt động của các tiến trình, các phân phối thời gian, tài nguyên
trong CPU.
 Tìm hiểu nhiều hơn về ngôn ngữ C++
Những mặt hạn chế:
 Chưa có giao diện đẹp mắt.
 Thuật toán còn hạn chế độ phức tạp còn quá cao.
2. Hướng phát triển
 Xây dựng thêm giao diện.
 Sử dụng thêm nhiều thuật toán khác để so sánh.
 Xây dựng kịch bản để hoàn thiện.

Nguyễn Công Định – 15T2 22


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

PHẦN II: LẬP TRÌNH MẠNG:

TIÊU ĐỀ: MÔ PHỎNG BÀI TOÁN RÚT TIỀN TỰ ĐỘNG ATM

MỞ ĐẦU
1. Đề tài:
Mô phỏng bài toán rút tiền tự động ATM theo mô hình Client-Server.
2. Mục tiêu:
 Tìm hiểu các lý thuyết về đa luồng (multi-thread) trong hệ điều hành.
 Tìm hiểu đồng bộ hóa Synchronized
 Tìm hiểu mô hình Client Server
3. Nội dung đề tài:
Viết chương trình bằng ngôn ngữ Java, tạo ra 2 tiến trình Client-Server ,Tiến trình
Server lắng nghe Client kết nối và thực hiện các chức năng rút tiền, nạp tiền, đổi mật khẩu.

CHƯƠNG I: CƠ SỞ LÝ THUYẾT:
1. Luồng
1.1. Khái niệm luồng và đa luồng:
Theo định nghĩa, đa nhiệm (multitasking) là khi nhiều tiến trình chia sẻ nguồn xử lý
chung ví dụ như một CPU. Thread kế thừa ý tưởng của đa nhiệm trong các ứng dụng để
bạn có thể chia nhỏ các hoạt động riêng biệt bên trong một ứng dụng đơn thành các luồng
(thread) riêng lẻ. Mỗi một thread có thể chạy song song. Hệ điều hành phân chia thời gian
xử lý không chỉ trong các ứng dụng khác nhau, mà còn trong mỗi luồng bên trong một ứng
dụng.
1.2. Vòng đời của một luồng trong Java:
Một thread đi qua các giai đoạn khác nhau trong vòng đời của nó:

Hình 1: Vòng đời của một Thread.

Nguyễn Công Định – 15T2 23


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Các giai đoạn trên được giải thích như sau:

 New: Một thread mới bắt đầu vòng đời của nó trong trạng thái new. Nó tồn tại trong trạng
thái này tới khi chương trình bắt đầu thread này. Nó cũng được xem như là một thread mới
sinh.
 Runnable: Sau khi một thread mới sinh ra được bắt đầu, thread trở thành runnable. Một
thread trong trạng thái này được xem như đang thực hiện tác vụ của nó.
 Waiting: Đôi khi, một thread quá độ qua trạng thái waiting trong khi thread đợi cho thread
khác thực hiện một tác vụ. Một thread chuyển về trạng thái runnable chỉ khi thread khác ra
hiệu cho thread đang đợi để tiếp tục thực thi.
 Timed waiting: Một thread trong trạng thái runnable có thể đi vào trạng thái timed waiting
trong một khoảng thời gian nào đó. Một thread trong trạng thái này chuyển về trạng thái
runnable khi khoảng thời gian đó kết thúc hoặc khi sự kiện nó đang đợi xuất hiện.
 Terminated: Một thread trong trạng thái runnable có thể đi vào trạng thái terminated khi
nó hoàn thành tác vụ của nó hoặc nó chấm dứt…

1.3. Quyền ưu tiên của một luồng trong Java:


Mỗi thread trong Java có một quyền ưu tiên mà giúp hệ điều hành xác định thứ tự
thread nào được ghi lịch trình.

Quyền ưu tiên của thread trong Java là một dãy giữa MIN_PRIORITY (hằng số 1)
và MAX_PRIORITY (hằng số 10). Theo mặc định, mỗi thread được cung cấp một quyền
ưu tiên NORM_ PRIORITY (hằng số 5).

Các thread với quyền ưu tiên cao hơn là quan trọng hơn với một chương trình và
nên được cấp phát thời gian bộ vi xử lý trước các thread có quyền ưu tiên thấp hơn. Tuy
nhiên, các quyền ưu tiên của thread bảo đảm thứ tự trong đó các thread thực thi và phụ
thuộc rất nhiều vào platform.

1.4. Các cách để triển khai luồng trong Java.


 Kế thừa lớp Thread.
 Triển khai giao diện (interface) Runnable.

Nguyễn Công Định – 15T2 24


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

2. Đồng bộ hóa- Synchronization


Mục đích của Synchronization là đảm bảo rằng, khi có nhiều Thread muốn truy cập
vào một tài nguyên, chỉ có một Thread có thể truy cập nó trong một thời gian xác định. Có
hai phương pháp mà ta có thể sử dụng synchronization để quản lý hoạt động của các thread.

– Quản lý mã lệnh ở mức phương thức - sử dụng các phương thức đồng bộ.

– Quản lý mã lệnh ở mức khối - sử dụng các khối lệnh đồng bộ.

Và trong một lớp ta có thể khai báo nhiều phương thức đồng bộ. Khi được khai báo
synchronized thì tại mỗi thời điểm trong một đối tượng của lớp chỉ có một Thread được
thực hiện. Một hàm muốn gọi để thực hiện một hàm đồng bộ thì nó phải chờ để có được
chìa khóa của đối tượng hàm đó. Trong khi một hàm luồng đang thực hiện hàm đồng bộ
thì tất cả các luồng khách muốn thực hiện hàm này của cùng một đối tượng, đều phải chờ
cho đến khi luồng đó thực hiện xong và được giải phóng. Bằng cách đó các hàm đồng bộ
sẽ không bao giừo bị tắc nghẽ. Những hàm không được đồng bộ có thể được các luồng gọi
thực hiện một lúc mọi nơi và bất kỳ đối tượng nào
Như vậy, chỉ có một trong các phương thức đồng bộ hoá trong một lớp của đối tượng
có thể thi hành trong một thời gian xác định. Chỉ khi phương thức đồng bộ hoá của một đối
tượng hoạt động hiện thời kết thúc thì phương thức đồng bộ hoá khác của đối tượng đó
mới bắt đầu thi hành.

2.1. Phương thức đồng bộ


Để đồng bộ các phương thức ta dùng từ khóa synchronized trước phương thức cần
được đồng bộ. Ví dụ:

synchronized public void method1() {

//nội dung hàm

Và trong một lớp ta có thể khai báo nhiều phương thức đồng bộ. Khi được khai báo
synchronized thì tại mỗi thời điểm trong một đối tượng của lớp chỉ có một Thread được
thực hiện. Một hàm muốn gọi để thực hiện một hàm đồng bộ thì nó phải chờ để có được
chìa khóa của đối tượng hàm đó. Trong khi một hàm luồng đang thực hiện hàm đồng bộ
thì tất cả các luồng khách muốn thực hiện hàm này của cùng một đối tượng, đều phải chờ

Nguyễn Công Định – 15T2 25


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

cho đến khi luồng đó thực hiện xong và được giải phóng. Bằng cách đó các hàm đồng bộ
sẽ không bao giừo bị tắc nghẽ. Những hàm không được đồng bộ có thể được các luồng gọi
thực hiện một lúc mọi nơi và bất kỳ đối tượng nào.

Như vậy, chỉ có một trong các phương thức đồng bộ hoá trong một lớp của đối tượng
có thể thi hành trong một thời gian xác định. Chỉ khi phương thức đồng bộ hoá của một đối
tượng hoạt động hiện thời kết thúc thì phương thức đồng bộ hoá khác của đối tượng đó
mới bắt đầu thi hành.

Phương pháp đồng bộ hóa bằng giá trị của một khóa (Lock) mà tất cả các đối tượng
đều liên kết với nó. Khóa là một loại cờ thiết lập bằng một xử lý, tương ứng với locking
hoặc lock action, khi một phương thức đồng bộ hóa bắt đầu thi hành. Mỗi phương thức
đồng bộ hoá của một đối tượng kiểm tra xem khóa có được thiết lập bởi phương thức khác
hay không. Nếu có, nó sẽ chờ cho tới khi khóa được thiết lập lại bởi một trạng thái mở
khóa. Như vậy chỉ có một phương thức đồng bộ hoá có thể thi hành tại một thời điểm, bởi
vì phương thức đó sẽ thiết lập khóa sẽ ngăn chặn các phương thức đồng bộ hoá khác thực
hiện.

Chú ý rằng, ở đây không có sự ràng buộc đối với các phương thức đồng bộ hoá thi
hành đồng thời đối với hai đối tượng khác nhau trong cùng một lớp, mà chỉ là sự kiểm soát
việc truy cập đồng thời tới cùng một đối tượng nào đó.

Giả sử có 3 phương thức được khai báo trong lớp MyClass, có hai phương thức khai
báo là đồng bộ hoá, vì vậy với những đối tượng này, chỉ có một trong số chúng có thể thi
hành trong một thời điểm. Với phương thức không khai báo là đồng bộ hoá, thì chúng có
thể được gọi bởi nhiều luồng.

Một điều quan trọng, là sự khác biệt giữa các đối tượng thuộc trong cùng một lớp có
các phương thức đồng bộ thì chúng sẽ được thi hành ra sao ? . Một giả thuyết về mối quan
hệ giữa ba Thread và hai đối tượng được minh họa trong biểu đồ sau:

Nguyễn Công Định – 15T2 26


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 2.2: Sự đồng bộ của các phương thức

Những con số trên các mũi tên trong biểu đồ cho biết trình tự sự kiện. No! cho biết
Thread đó đợi cho đến khi phương thức này được mở khóa thì nó mới thi hành. Trong khi
method1() của obj1 thi hành, method2() của nó không thể thi hành. Sự đồng bộ hóa của hai
phương thức trong một đối tượng cung cấp một mức bảo vệ cho đối tượng, trong đó chỉ có
một phương thức synchronized có thể can thiệp vào dữ liệu trong đối tượng ở một thời
điểm.

Tuy nhiên, mỗi đối tượng là độc lập với nhau khi nó là phương thức đồng bộ hoá.
Khi một Thread thi hành một phương thức đồng bộ hoá của một đối tượng, nó được bảo
đảm độc quyền truy cập đến đối tượng trước các phương thức đồng bộ hoá liên quan trong
đối tượng đó. Những Thread khác vẫn có thể gọi phương thức này trong đối tượng khác.
Trong khi method1() của obj1 thi hành, nó không ngăn cản được method1() của obj2 thi
hành bằng các Thread khác.

Hơn nữa nếu có một phương thức trong đối tượng được khai báo không phải là đồng
bộ hoá như method3() trong ví dụ một Thread nào đó có thể gọi ở bất kỳ thời điểm nào,
bất chấp trạng thái của phương thức đồng bộ hoá nào trong đối tượng.

Nguyễn Công Định – 15T2 27


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

2.2. Khối lệnh đồng bộ.


Để tăng thêm khả năng cho phương thức đồng bộ hoá trong một lớp đối tượng, ta có
thể chỉ rõ một câu lệnh hoặc một khối lệnh trong chương trình là đồng bộ hoá. Điều này
làm tăng thêm sức mạnh, từ đó ta xác định đối tượng cá biệt nào được coi là đồng bộ trong
câu lệnh hoặc khối lệnh đó, chứ không chỉ là đối tượng như trong trường hợp phương thức
đồng bộ hoá ở phần trên. Ở đây ta có thể thiết lập một khóa cho bất kỳ đối tượng nào bằng
một khối lệnh. Khi một khối lệnh là đồng bộ hoá trong một đối tượng đang thi hành, không
có khối lệnh nào hoặc phương thức nào là đồng bộ hoá trong cùng đối tượng đó có thể thi
hành cùng với nó. Để xác định câu lệnh đồng bộ, ta khai báo khối lệnh như sau:
synchronized(<Tham chiếu đến đối tượng>){khối lệnh}

Đương nhiên điều này cũng cho kết quả đúng như câu lệnh đồng bộ là một lời gọi
đến một phương thức. Câu lệnh này có thể tương đương với một khối lệnh nằm trong dấu
ngoặc. Bây giờ ta có thể khóa một đối tượng riêng biệt trong khi khối lệnh đó vẫn đang thi
hành.

Khai báo phương thức là phương thức đồng bộ hoá, chúng ta đã hạn chế chương trình
khá nhiều. Không thể có một hoạt động nào có thể thực hiện trong khi một hoạt động khác
đang tiến hành. Đây là sự giới hạn không cần thiết, không có lý do nào phải ngăn cản việc
thực thi với một đối tượng này trong khi một giao dịch trên một đối tượng khác đang thực
hiện(2 đối tượng này khác nhau). Điều ta thực sự cần là trong chương trình cần ngăn chặn
việc chồng lấp các hoạt động trên cùng một đối tượng, và việc khai báo các khối lệnh đồng
bộ hoá trên một đối tượng riêng biệt có thể giúp giải quyết vấn đề trên.

Biểu thức trong dấu ngoặc đơn sau từ khóa đồng bộ hoá xác định đối tượng là một áp
dụng đồng bộ. Một lần nữa khối lệnh đồng bộ hoá được thi hành với một đối tượng, không
có khối lệnh hoặc phương thức nào khác với khai báo đồng bộ hoá có thể tiến hành trên
cùng đối tượng với nó.

Một đối tượng trong khối lệnh đồng bộ hoá hành động khá giống với một cây gậy
truyền tay trong môn thể thao chạy tiếp sức. Chỉ có vận động viên đang cầm cây gậy đó
mới được phép chạy. Vận động viên kế tiếp trong nhóm chỉ có thể chạy khi họ cầm được
cậy gậy. Tất nhiên trong cuộc chạy tiếp sức nào cũng có một số cây gậy khác nhau vì vậy
ta có thể có một số nhóm vận động viên. Cũng với cách thức này, ta có thể chỉ định một số
nhóm khác nhau thuộc các khối lệnh đồng bộ hoá trong một lớp, mỗi nhóm được điều

Nguyễn Công Định – 15T2 28


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

khiển bởi một đối tượng khác nhau. Điều này quan trọng trong thực tế, các khối mã là đồng
bộ hoá cùng với các đối tượng riêng biệt không cùng một lớp. Chúng có thể ở bất kỳ vị trí
nào trong chương trình của ta, nơi một đối tượng phù hợp được xác định.

3. Lập trình socket:


3.1. Khái niệm:
3.1.1. Socket:
Socket là một điểm cuối (end-point) của liên kết truyền thông hai chiều (two-way communication)
giữa hai chương trình chạy trên mạng. Các lớp Socket được sử dụng để biểu diễn kết nối giữa client
và server, được ràng buộc với một cổng port (thể hiện là một con số cụ thể) để các tầng TCP (TCP Layer)
có thể định danh ứng dụng mà dữ liệu sẽ được gửi tới..
Lập trình socket là lập trình cho phép người dùng kết nối các máy tính truyền tải và nhận dữ liệu
từ máy tính thông qua mạng
Hiểu đơn giản, socket là thiết bị truyền thông hai chiều gửi và nhận dữ liệu từ máy khác.
Có 2 loại Socket:
+ Stream Socket: Dựa trên giao thức TCP( Tranmission Control Protocol) việc
truyền dữ liệu chỉ thực hiện giữa 2 quá trình đã thiết lập kết nối.
Ưu điểm: Có thể dùng để liên lạc theo mô hình client và sever. Nếu là mô hình client /sever thì
sever lắng nghe và chấp nhận từ client. Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận
một cách đáng tin cậy, đúng thứ tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và
cơ chế chống tắc nghẽn.
Hạn chế: Có một đường kết nối (địa chỉ IP) giữa 2 tiến trình nên 1 trong 2 tiến trình kia phải đợi
tiến trình kia yêu cầu kết nối.
+ Datagram Socket: Dựa trên giao thức UDP( User Datagram Protocol) việc
truyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa 2 quá trình
Ưu điểm: Tuy nhiên vì nó không yêu cầu thiết lập kết nối không phải có những cơ
chế phức tạp nên tốc độ nhanh…ứng dụng cho các ứng dụng truyền dữ liệu nhanh như
chat, game…..
Nhược điểm: Dữ liệu được truyền theo giao thức UDP không được tin cậy, có thế
không đúng trình tự và lặp lại[2]
3.1.2. Port:

Port xác định duy nhất một quá trình (process) trên một máy trong mạng. Hay nói
cách khác là cách mà phân biệt giữa các ứng dụng.
VD: Khi máy bạn chạy nhiều ứng dụng mạng như Yahoo,Firefox, game online… . Ví dụ
chương Yahoo sử dụng ( port 5150 hay 5050) thì khi ai đó gửi tin nhắn đến cho bạn, lúc
tin nhắn đến máy bạn nó sẽ dựa vào port để nhận biết đó là chương trình Yahoo ( port
5150) chứ ko pải là chương trình khác. Sau đó thông tin sẽ đc xử lý và hiễn thị tin nhắn
lên.
Một TCP/IP Socket gồm một địa chỉ IP kết hợp với một port ? Xác định duy nhất
một tiến trình (process ) trên mạng.Hay nói cách khác Luồng thông tin trên mạng dựa vảo
IP là để xác định máy một máy trên mạng còn port xác định 1 tiến trình trên 1 máy.

Nguyễn Công Định – 15T2 29


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

3.1.3. Ứng dụng Client – Server:


Mục tiêu lập trình mạng sẽ đưa ra những ứng dụng dạng Client – Server. Tức là sẽ
có 2 loại ứng dụng chính đó là Client và Server.
Quy trình hoạt động của ứng dụng Server – Client như sau:
 Server có nhiệm vụ của là lắng nghe, chờ đợi kết nối từ Client trên địa chỉ IP của
mình với PORT được quy định sẵn. Khi client gởi dữ liệu tới Server thì nó phải giải
quyết một công việc là nhận dữ liệu đó -> xử lý -> trả kết quả lại cho Client.
 Client là ứng dụng được phục vụ, nó chỉ gửi truy vấn và chờ đợi kết quả từ Server
3.2. Cơ chế gọi hàm trong lập trình socket.
Trong phạm vi bài báo cáo chỉ đề cập đến cơ chế TCP:

Hình 8: Cơ chế TCP.

TCP (Transmission Control Protocol - "Giao thức điều khiển truyền vận") là một
trong các giao thức cốt lõi của bộ giao thức TCP/IP. Sử dụng TCP, các ứng dụng trên các
máy chủ được nối mạng có thể tạo các "kết nối" với nhau, mà qua đó chúng có thể trao đổi
dữ liệu hoặc các gói tin. Giao thức này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách
đáng tin cậy và đúng thứ tự. TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng
hạn, dịch vụ Web và dịch vụ thư điện tử) đồng thời chạy trên cùng một máy chủ.

Nguyễn Công Định – 15T2 30


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

3.3. Lập trình socket trong Java:


Ngôn ngữ Java có hỗ trợ đầy đủ các hàm để thực hiện việc kết nối Client-Server thông
qua gói java.net:

 Lớp IntetAddress: Lớp này quản lý địa chỉ Internet bao gồm địa chỉ IP và tên
máy tính.
 Lớp Socket: Hỗ trợ các phương thức liên quan đến Socket cho chương trình Client ở
chế độ có nối kết.
 Lớp ServerSocket: Hỗ trợ các phương thức liên quan đến Socket cho chương
trình Server ở chế độ có nối kết.

Các bước tổng quát xây dựng một chương trình Client – Server ở chế độ TCP như sau:

CHƯƠNG II: PHÂN TÍCH THIẾT KẾ HỆ THỐNG.


1. Mô tả bài toán:

Áp dụng Thread, Socket để xây dựng một hệ thống như sau:

 Tạo ra 1 tiến trình Server để lắng nge các tiến trình Client kết nối đến
 Khi Client đã kết nối được Server, nó thực hiện đăng nhập vào hệ thống dựa vào
tài khoản của Client được đăng ký trên database
 Hoàn thành đăng nhập sau đó thực hiện các chức năng như xem thông tin số dư,
nạp tiền vào tài khoản, rút tiền, đổi mật khẩu.

2. Phân tích hệ thống:


2.1. Hệ thống
Hệ thống bao gồm các tác nhân chính sau:

Khách hàng: Muốn mở tài khoản cá nhân thì đến ngân hàng để làm thủ tục mở tài
khoản và làm thẻ rút tiền tự động của hệ thống rút tiền bằng máy ATM (Khách hàng điền
tất cả các thông tin cần thiết mà hệ thống yêu cầu).

Ngân hàng: Quản lý các thông tin của khách hàng bằng cách cập nhập thông tin đó
vào hệ thống, để hệ thống tạo ra một tài khoản cho khách hàng cùng với mật khẩu bí mật
cho khách hàng. Quản lý tiền gửi của khách hàng,…

Hệ thống rút tiền bằng máy ATM: Có nhiệm vụ kiểm tra số tài khoản cùng với mật
khẩu. Nếu đúng thì cho phép người dùng thực hiện các giao dịch (gửi tiền, rút tiền, kiểm

Nguyễn Công Định – 15T2 31


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

tra số dư tài khoản, thay đổi mật khẩu) ngược lại thông báo cho người dùng đăng nhập lại
hệ thống.

Hệ thống này có thể mô tả theo sơ đồ sau:

Hình 3.1: Biểu diễn các thành phần trong hệ thống

Gửi tiền
vào

Kiểm tra In kết quả

Hình 3.3: Quan hệ sử dụng giữa các Use Case

Khách hàng có thể chọn các loại giao dịch sau đây của hệ thống ATM:

 Gửi tiền vào

 Rút tiền ra

 Kiểm tra số dư trong tài khoản

Nguyễn Công Định – 15T2 32


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

 Thay đổi mật khẩu

Điều kiện kiểm tra sẽ xuất hiện các lỗi trong khi khách hàng thực hiên giao dịch tại
máy ATM. Cần phải tính trước đến những điều kiện gây lỗi đó, ví dụ :

 Mức tiền trong tài khoản không đủ để rút tiền

 Password không đúng

 Nhập số tiền rút không phải là bội số của 50.000

 Đồng bộ tài khoản để khi 2 tài khoản giống nhau cùng thực hiện 1 chức năng hay
2 chức năng khác nhau tại cùng một thời điểm.

2.2. Xây dựng cơ sở dữ liệu


Bảng khachhang

Field Name Data Type Description

sotaikhoan varchar[50] Số tài khoản

matkhau varchar[50] Mật khẩu giao dịch

hoten varchar[50] Họ tên khách hàng

tongtien int Tổng số tiền của khách hàng

diachi varchar[50] Địa chỉ của khách hàng

sodienthoai varchar[50] Số điện thoại của khách hàng

2.3. Mô tả chương trình


Chương trình được thực hiện trên máy chủ của ngân hàng:

Nguyễn Công Định – 15T2 33


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Chương trình chạy trên máy chủ của ngân hàng nhận thông tin giao dịch từ nhiều
máy khách(khách hàng giao dịch). Chương trình trên máy chủ hoạt động theo cơ chế đa
luồng nên cùng lúc sẽ có thể thực hiện nhiều kết nối đến với máy khách.

Máy chủ xử lý thông tin nhận được, sau đó tiến hành giao dịch với khách hàng. Nếu
giao dịch thành công, khách hàng sẽ nhận được thông báo ngược lại sẽ nhận được các thông
báo lỗi. Và hệ thống sẽ ghi lại lịch sử giao dịch của khách hàng nếu giao dịch đó thành
công. Từ đó nhân viên ngân hàng dễ dàng kiểm soát được quá trình giao dịch của khách
hàng tại ATM.

Chức năng:

Xử lý 5 việc chính sau đây:

 Xử lý việc nạp tiền vào tài khoản của khách hàng

 Xử lý việc rút tiền trong tài khoản của khách hàng

 Xử lý việc đổi mật khẩu (pin) trong tài khoản của khách hàng

 Xử lý việc kiểm tra số dư trong tài khoản của khách hàng

Chức năng của mỗi lớp

Ta định nghĩa các lớp sau:

Một lớp SQLServer kế thừa giao diện Runnable chứa các phương thức thực hiện
giao dịch của khách hàng. Trong đó có sử dụng đồng bộ theo khối lệnh trên cùng một đối
tượng tại các phương thức sau: Xemsodu (thực hiện chức năng xem số dư trong tài khoản
của khách hàng), Nap (thực hiện chức năng nạp tiền vào tài khoản), Rut (thực hiện chức
năng rút tiền từ tài khoản), Doimatkhau (thực hiện chức năng đổi mật khẩu của khách
hàng).

Một lớp Server dùng để lắng nghe kết nối từ máy khách-khách hàng, tạo ra các tiến
trình để thực hiện các giao dịch của khách hàng.

Chương trình được thực thi trên các trạm (máy khách) bởi các khách hàng
tham gia giao dịch.

Nguyễn Công Định – 15T2 34


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Chương trình chạy trên máy khách bới khách hàng với một giao diện đồ hoạ đẹp, dễ
dàng thao tác, nó thực hiện kết nối với máy chủ thông quả 1 cổng nào đó(ở đây là cổng
8000), sau đó nhận thông tin từ khách hàng và chuyển thông tin đến máy chủ xử lý.

Chức năng

Chức năng chủ yếu của nó là nhận thông tin giao dịch của các khách hàng khác nhau
và chuyển về cho máy chủ xử lý. Thông tin giao dịch gồm các loại sau: rút tiền, nạp tiền,
chuyển khoản, đổi mật khẩu….

CHƯƠNG III: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ.


1. Demo chương trình
Khách hàng có thể sử dụng chương trình trên hai loại ngôn ngữ là tiếng việt
và tiếng anh. Chương trình demo dưới đây được thực hiện trên ngôn ngữ tiếng việt.

Hình 3.6: Giao diện lựa chọn ngôn ngữ


Đầu tiên máy khách (khách hàng) thực hiện đăng nhập thông qua số tài khoản
và mật khẩu. Tài khoản và mật khẩu của khách hàng được lấy từ cơ sở dữ liệu trong

Nguyễn Công Định – 15T2 35


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

cơ sở dữ liệu sql server. Sau khi nhập tên tài khoản và mật khẩu chúng ta click chuột
vào nút “Dang Nhap”.

Hình 3.7: Giao diện đăng nhập


Khi đăng nhập thành công. Màn hình welcome như bên dưới.

Nguyễn Công Định – 15T2 36


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 3.8: Giao diện chào mừng khi đăng nhập thành công

Thực hiện chức năng xem số dư

Hình 3.9: Giao diện xem số dư tài khoản


Thực hiện chức năng nạp tiền

Nguyễn Công Định – 15T2 37


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 3.10: Giao diện nạp tiền

Hình 3.11: Giao diện thông báo nộp tiền


Ngoài ra chương trình còn hổ trợ thêm chức năng nạp tiền số khác.

Nguyễn Công Định – 15T2 38


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 3.12: Giao diện nạp tiền số khác


Thực hiện chức năng rút tiền

Hình 3.13: Giao diện rút tiền

Nguyễn Công Định – 15T2 39


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 3.14: Giao diện thông báo rút tiền


Ngoài ra chương trình còn hổ trợ thêm chức năng rút tiền số khác

Hình 3.15: Giao diện rút tiền số khác

Nguyễn Công Định – 15T2 40


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Thực hiện chức năng đổi mật khẩu (pin)


Khi khách hàng muốn thay đổi mật khẩu vì lí do bảo mật chính đáng nào đó
thì chương trình cũng thể hiện được chức năng thay đổi mật khẩu cho khách hàng.
Để thay đổi mật khẩu thì khách hàng cần nhập mật khẩu cũ của mình sau đó nhập
mật khẩu mới cần đổi và kiểm tra lại mật khẩu mới. Sau đó click chuột vào nút “Doi
mat khau”.

Hình 3.18: Giao diện thông báo đổi mật khẩu

Nguyễn Công Định – 15T2 41


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

Hình 3.19: Giao diện thông báo kết thúc chương trình

Thực hiện chức năng kết thúc giao dịch

2. Đánh giá kết quả.

 Cả Server – Client thực hiện trơn tru và chưa thấy xuất hiện lỗi.
 Các thao tác thực hiện nhanh.
 Có thể kết nối được nhiều Client một lúc.

Nguyễn Công Định – 15T2 42


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

CHƯƠNG IV: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN.


1. Kết luận:

 Hiểu được cơ chế hoạt động của thread và socket.


 Nắm khá vững về các hàm cơ bản của các cơ chế trên trong ngôn ngữ Java.
 Lập trình thành công ứng dụng trên Java về vấn đề trên.

2. Hướng phát triển.

 Hoàn thiện giao diễn quản lý Server.


 Đưa dữ liệu vào cơ sở dữ liệu.
 Hướng tới việc đăng nhập, người dùng.
 Thêm chức năng gửi hình ảnh, video.

Nguyễn Công Định – 15T2 43


Đồ án Cơ sở ngành mạng – Bộ môn mạng và truyền thông

TÀI LIỆU THAM KHẢO

[1] https://viblo.asia/p/tien-trinh-trong-he-dieu-hanh-phan-1-Qbq5QrBwKD8

[2] https://blog.tinohost.com/socket-la-gi/

[1]Đặng Vũ Tùng, Giáo trình nguyên lý hệ điều hành, NXB Hà Nôi, 2005.

[2] Trần Hồ Thuỷ Tiên, Bài giảng Nguyên lý hệ điều hành, Khoa CNTT trường Đại học
Bách khoa Đà nẵng.

[3] Internet

Nguyễn Công Định – 15T2 44

You might also like