Professional Documents
Culture Documents
Baocaodacsnm Nam
Baocaodacsnm Nam
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.
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
TIÊU ĐỀ: XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC GIẢI THUẬT LẬP
LỊCH CPU.
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++.
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]
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
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.
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.
Ư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:
- 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.
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];
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
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.
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ó:
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…
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.
– 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.
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.
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:
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.
Đươ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
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.
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.
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ủ.
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:
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.
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
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.
Gửi tiền
vào
Khách hàng có thể chọn các loại giao dịch sau đây của hệ thống ATM:
Rút tiền ra
Đ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ụ :
Đồ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.
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ý việc đổi mật khẩu (pin) trong tài khoản của khách hàng
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.
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….
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.8: Giao diện chào mừng khi đăng nhập thành công
Hình 3.19: Giao diện thông báo kết thúc chương trình
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.
[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