CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1.1.2 Tổng quan lập trình hệ thống Những điểm đặc biệt trong lập trình hệ thong: - _ Lập trình viên sẽ tạo những giả định về phần cứng và những thông tin khác củ
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYEN THONG VIET HAN Khoa Khoa Hoc May Tinh
VU
LAP TRINH HE THONG VIET CHUONG TRINH TUONG TAC QUA LAI
GIU'A CAC CLIENT
Sinh viên thựchiện : TRẢN VĂN THỌQ-21SE2
TRAN VAN THIET-21SE2 HUỲNH NGỌC THUẬN -21SE5 TRẢN PHƯỚC THÔNG -21SE4 Giảng viên hướng dẫn: TS HOÀNG HỮU ĐỨC
Đà Nẵng, tháng 10 năm 2023
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYEN THONG VIET HAN
Khoa Khoa Hoc May Tinh
VU
LAP TRINH HE THONG VIET CHUONG TRINH TUONG TAC QUA LAI
GIU'A CAC CLIENT
Sinh viên thựchiện : TRẢN VĂN THỌQ-21SE2
TRAN VAN THIET-21SE2 HUỲNH NGỌC THUẬN -21SE5 TRẢN PHƯỚC THÔNG -21SE4 Giảng viên hướng dẫn: TS HOÀNG HỮU ĐỨC
Trang 3Đà Nẵng, tháng 10 năm 2023 LỜI NÓI ĐẦU
Những bước đi của các ngành trong lĩnh vực công nghệ hiện nay đang cho thấy rằng các ứng dụng công nghệ thông tin và việc tin học hóa đã là một trong những yếu tố cốt lõi quyết định nên các hoạt động, cũng như đóng góp vai trò to lớn cho sự phát triển của nhân loại hiện
đại
Cùng với sự phát triển không ngừng nghỉ trong thời gian qua, công nghệ thông tin đã có những bước tiến mạnh mẽ, lần lượt chinh phục hết đỉnh cao này đến đỉnh cao khác Mạng Internet là một trong những sản phâm không thể thiếu, nó có giá trị hết sức lớn lao và ngày
Trang 4càng trở thành một công cụ không thể thiếu, là nền tảng chính cho sự truyền tải, trao đổi thông
tin trên toàn cầu
Ngày nay, ngành công nghệ thông tin đang trải qua một sự bùng nỗ hơn bao giờ hết, và ngày càng có nhiều thương hiệu đang tìm cách mở rộng trong lĩnh vực này vì tiềm năng to lớn Công nghệ thông tin có nhiều ứng dụng khác nhau, đó cũng là lý do tại sao nó được chứng minh là một thành phần quan trọng có lợi trong toàn bộ cấu trúc mà các ngành công nghiệp hiện có Với tầm quan trọng ngày cảng tăng này, điều quan trọng là phải hiểu các khía cạnh quan trọng của ngành công nghiệp này và các thành phần chính làm cho nó trở thành công cụ
mang tính cách mạng
Trang 5Đặc biệt chúng em xin gửi lời cảm ơn chân thành nhất tới thầy giáo -Hoàng Hữu Đức
đã quan tâm giúp đỡ, giúp đỡ tận tình chúng em hoàn thành tốt đồ án này trong thời gian qua
Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế, đồ án này không thể tránh
được những thiếu sót Chúng em rất mong nhận được sự chỉ bảo, đóng góp ý kiến của các thầy
cô để em có điều kiện bổ sung, nâng cao ý thức của mình, phục vụ tốt hơn công tác thực tế sau nảy
Chung em xin chan thành cảm ơn!
Trang 6NHẬN XÉT
(Của giảng viên hướng dẫn)
Trang 7MỤC LỤC
CHƯƠNGI CƠ SỞ LÝ THUYÉT 22::22222+2222221 1.1222 .EE.ttterrriied 1 1.1 Sơ lược về lập trình hệ thống 5 ST E 1EE12112 221112121 11 1 1 1 ru 1 1.1.1 Khai niém 1p trinh hé thong ceccccseeccsscseeseesesessesesesesseseesvseesesseseseeeveveeeess 1
1.1.2 Tổng quan lập trình hệ thống 5-5 s1 SE 115111111 E1121111 1 111101111 e 1
1.1.3 Lịch sử lập trình hệ thống 5c 2E E1 HE 11221 11 2 tre 2 1.2 Tìm hiểu về Unix 25: 2222 222 HH H1 2H HH HH hưu 3
I9 9 3 1.2.2 Thiết kế Unix còn tồn tại tới ngày hôm nay, 52 ST 1 E1 t1 rêu 3
1.2.3 Cau trúc hệ điều hành Unix ©5222+c 2222222222 tt Hee 4
1.3 Giao tiếp liên tiến trình — Interprocess Communication :- 5c sccscxceEtctckxcrrxrei 4 I8 6.0.9 - 4 1.3.2 Vì sao các process phải giao tiếp với nhau? - 5s E111 E211 1E tre 5 1.3.3 Một số cơ chế giao tiếp giữa các tiền trình trong Linux - 5s cccssrcrxerexerxrei 5
1.4 Lập trình Socket trên Lmux cc 0 2221212112211 1121 112111 11112115 111181110111 11t ky 6
I0 009) a¬iốốẢ 6
1.5 Tổng quan về công nghệ chính - 5 S9 E1 1EE12111121121111112111111 11101 1e 7 I2 .À ii e - 7 1.5.2 Ngôn ngữ lập trình C - c1 0 2221122111121 112111 1111811101111 1 118112011111 1152111121 kkca 8 CHƯƠNG2 XU LY LOGIC oioeocecccccceccessesssesssesssesevecssessstessstsiesseetssesseesasesaretisesssessessveess 11
PN cán e 5 H
2.1.1 Khởi tạo một sock€t - - HH HS ng TS g T111 kh 11158355 11
PA) 900ii) 30 3<‹‹aa 12
P TY :0hiìì sẽ sỏi 13
Trang 82.1.4 AcceptQ trong Soeket T1 0012111121112 1101112118111 1 118112811 key 13 2.2 Chạy chương trình - c1 21122111211 11551 15111 1115115111181 51111 11H 111k yky 13
PP Nai nn 13
2.2.2 Khởi động S€TV€T L Q.0 012001211121 11 122 1011111511111 11811201111 k KH kg 14 2.2.3 Khởi động Clieni 02 012122111121 11211101 1111121011111 2811 1011 x1 Ea 1211k Hệ 14
2.2.5 ROL KHOI Phong .ố 15
KET LUAN VA HUGNG PHAT TRIEN u ccccssssssssessssssseesesssssecssssnseseecsnnteesecsnsnneecnsecessees 16
2 Hướng phát triỀn - - Sàn T211 1211211211111 1T 11H n HH n1 nen 16
DANH MUC THAM KHAO ceoccsscssssssesssessesssessssosesssinsssssiisesesinssssssnssuessissusssesenseseessesenseeees 17
Trang 9DANH MỤC HÌNH
Hình 1 — Sơ lược về lập trình hệ thống - + St E2 1EE122121E1121111 111111 11 111tr 1
Hình 2— Lập trình Socket trén Linux cece cece cetecneeeneeseeseeseeeeeseesseseeseetseesieeetseeesas 4 Hình 3— Logo VMware WorksfafIon ác 2112211212 1111121111110 110110 1111101111110 1 1H ykp 5 Hình 4— Logo ngôn ngữ lập trình C, - - c1 2.12011211111111 1111 1111111111111 11111111111 11 HH ướp 7 Hình 5 — Các tính năng của ngôn ngữ C L1 1111212111121 122 12x HH HH key 8 Hình 7— Khởi động S€TVGT - Q11 01 111211211111 11111111011 11 10111115111 111111 11 T1 HH HH Hà TH 16
Hình 8 — Khởi động CÏieni 0 0 2221212112211 112115211 1111110115 1118111011 11511 1k key 17
Hình 9— Chat giữa cÏienf Và S€TVT TQ 1 11211211911 111111111 111111 11116111 KHE HH kh 18
Hình 10 — Kết thúc trò chuyện - 2 1s SE 1 12121 21 121112 111 re rau 19
Trang 10DANH MUC CUM TU VIET TAT
1 IPC Inter-Process Communication
2 OS Operating System
3 TCP Tranmission Control Protocol
4 UDP User Datagram Protocol
Trang 11
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1.2 Tổng quan lập trình hệ thống
Những điểm đặc biệt trong lập trình hệ thong:
- _ Lập trình viên sẽ tạo những giả định về phần cứng và những thông tin khác của hệ thống mà các chương trình đang chạy trên đó, và thường xuyên khai thác những thông tin này (Ví dụ như sử dụng những thuật toán đã biết một cách hiệu quả khi sử dụng với những phần cứng cụ thê)
- _ Thường sử dụng một ngôn ngữ lập trình cấp thấp, bởi:
e - Có thể thực thi trong môi trường hạn chế tài nguyên
Trang 12® Rất hiệu quả và ít khi bị quá tải
e Sử dụng rat it thu vién runtime library, hoặc không sử dụng
e - Cho phép truy cập trực tiếp và điều khiển thô với bộ nhớ control flow
© Cho phép lập trình viên sử dụng trực tiếp mã assembly language trong chương trình
Lập trình hệ thống dẫn đến sự phát triển của phần mềm hệ thống máy tính quản
lý và điều khiển các hoạt động của máy tính Các mã cấp thấp rất gần với cấp độ phần
cứng và xử lý những thứ như thanh ghi và phân bồ bộ nhớ Các chương trình hệ thông
hoặc phần mềm hệ thống phối hợp truyền dữ liệu trên các thành phần khác nhau và liên quan đến việc biên dịch, liên kết, bắt đầu và dừng chương trình, đọc từ các tệp cũng như ghi vào các tệp
Lập trình hệ thống tăng cường hoặc mở rộng các chức năng của một hệ điều hành
và có thể bao gồm các thành phân như trình điều khiển, tiện ích và cập nhật Chúng cho phép quản lý hiệu quả các tài nguyên phần cứng như bộ nhớ, truy cập tệp hoạt động I/O, quan ly thiết bị và quản lý quy trình như quản trị quy trình và da tác vụ Một ví dụ
là một hệ điều hành, thường đóng vai trò là giao điện giữa người dùng, phần mềm ứng dụng và phần cứng máy tính HĐH cung cấp một môi trường cho phép người dùng thực hiện các chương trình khác một cách hiệu quá Bao gồm một bộ các chương trình hệ thống, các chức năng của hệ điều hành bao gồm quản lý lưu trữ, xử lý tệp, quản lý bộ
nhớ, lập lịch và quản lý CPU và thiết bị, xử lý lỗi, kiêm soát quá trình và hơn thế nữa 1.1.3 Lịch sử lập trình hệ thống
Ban đầu, các lập trình viên viết bất biến bằng ngôn ngữ Assembly Các thí nghiệm với hỗ trợ phần cứng bằng các ngôn ngữ cấp cao ( 1960s ) đã dẫn đến sự xuất hiện của các ngôn ngữ như BLISS và BCPL Tuy nhiên, ngôn ngữ lập trình C, đóng một vai trò quan trọng trong việc tạo ra ƯNIX, đã trở nên phô biến và lan rộng khắp mọi nơi vào những năm 1980
Trang 13bộ phận chính trong hệ điều hành và sử dụng mạng cần các nhà phát triển phan mém hé
thống Ví dụ: Việc triển khai phân trang ( qua bộ nhớ ảo ) hoặc trình điều khién thiết bị
1.2 Tìm hiểu về Unix
1.2.1 Unix là gì?
UNIX là một hệ điều hành được phát triển vào thập kỷ 60 Nó là một hệ thống đa
nhiệm, đa người dùng và ôn định đối với các máy chủ, máy trạm hoặc các laptop Các hệ thống UNIX cũng có một giao diện đồ họa (GUI) giống như Windows của Microsoft, tạo sự đễ dàng trong sử dụng Tuy vậy bạn vẫn phải cần đến rất nhiều kiến thức cần thiết cho các hoạt động của UNIX, đây là các kiến thức không được
mô tả bằng chương trình đỗ họa, hoặc không có giao diện cửa số, ví đụ trong một phiên telnet
1.2.2 Thiết kế Unix còn tồn tại tới ngày hôm nay
Có thê bạn chưa biết, Unix đã được phát triển trong Bell Labs của AT&T vào giữa những năm 1960 Bản phát hành ban đầu của Unix có một số thuộc tính thiết kế quan trọng hiện đang tồn tại trên một số hệ điều hành phô biến ngày nay
Một trong số đó là triết lý Unix (Unix philosophy) trong việc tạo ra các tiện
ích nhỏ, các tiện ích theo kiểu các mô-đun cùng thực hiện và hoàn thành tốt một tác
vụ nào đó
Unix cũng có một hệ thống tập tin duy nhất mà các chương trình sử dụng đề giao tiếp với nhau Đây là lý do tại sao có sự xuất hiện của thuật ngữ “everything ¡s a file” trên Linux Điều này bao gồm các thiết bị phần cứng và các tệp đặc biệt cung
cấp thông tm hệ thông hoặc dữ liệu khác Do cting la ly do tai sao chi co Windows co
ký tự 6 dia, đây là một đặc điểm mà nó được thừa hưởng từ DOS Còn trên các hệ
điều hành khác, mọi tệp trên hệ thống là một phần của một hệ thống phân cấp thư mục duy nhất
Trang 141.2.3 Cầu trúc hệ điều hành Unix
Hệ điều hành này Unix được tạo thành từ ba phần: Kernel, Shell và Program (các chương trình)
1.2.3.1 Kernel
Kernel là trung tâm của hệ điều hành, nó có nhiệm vụ phân bồ thời gian và bộ
nhớ cho các chương trình và xử lý các thư mục, thông tin liên lạc dé đáp ứng các
lệnh gọi của hệ thống
1.2.3.2 Shell
Shell hoạt động như một giao diện giữa người dùng và KerneL Khi người dùng đăng nhập, chương trình đăng nhập sẽ kiểm tra tên người dùng và mật khâu, sau đó khởi động một chương trình khác được gọi là Shell Shell là một giao điện dòng lệnh (Command Line Interpreter — CLI), ding dé dién giải các lệnh mà người dùng nhập
vao va sap xếp dé chúng được thực hiện Các lệnh chính là các chương trình: Khi kết
thúc, Shell cung cấp cho người dùng một lời nhắc khác
1.2.3.3 File va process
Moi thir trong Unix đều là file hoặc process
Process là một chương trình đang thực thị được xác định bởi một PID (mã định danh quy trình) duy nhất
File là một tập hợp đữ liệu Chúng được tạo bởi người dùng bằng cách sử dụng trình soạn thảo văn bản, trình biên dịch đang chạy,
1.3 Giao tiếp liên tiến trinh — Interprocess Communication
1.3.1 Khái niệm [PC
Inter Process communication (hay còn gọi là [PC) — giao tiếp giữa các process —
là một phương thức không thê thiếu trong việc giúp các process trao đối thông tin với nhau
Trang 15Hai models chính của IPC la Shared Memory (chia sẻ bộ nhớ) — với nhiệm vụ hình thành khu vực lưu trữ bộ nhớ chung — và Message Passing (truyền tin) — với nhiệm vụ truyền tải tin nhăn liên tục giữa các process
1.3.2 Vi sao cac process phai giao tiếp với nhau?
Việc cho phép truyền data giữa các process là do những lý do sau:
- _ Giúp chia sẻ thông tin gitra cac users
- _ Giúp speech up các tác vụ trong máy tính
- _ Giúp xây dựng module
- _ Giúp thuận tiện trong chạy nhiều tác vụ cùng một lúc
1.3.3 Một số cơ chế giao tiếp giữa các tiễn trình trong Linux
Linux cung cấp một số cơ chế giao tiếp giữa các tiến trình gọi là IPC (Inter Process Communication):
- Signals handling - Trao déi bang tín hiệu
- Pipe -Trao đối bằng cơ chế đường ống
- Message Queues - Trao d6i théng qua hang doi tin nhắn
- Shared Memory - Trao d6i bằng phân đoạn nhớ chung
- Giao tiép thong qua socket
- Giao tiép déng b6 ding semaphore
Trang 161.4 Lap trinh Socket trén Linux
Client — Server là mô hình phổ biến cho giao tiếp giữa 2 máy chủ và máy khách, trong
đó, tiền trình client kết nối đến tiến trình server để yêu cầu trao đổi đữ liệu
Client cần biết về sự tồn tại và địa chỉ của tiến trình server, nhưng server không cần biết
vẻ sự tôn tại và địa chỉ của client cho đến khi kết nỗi được thiết lập
Mỗi khi kết nối được thiết lập, cả 2 bên đều có thé trao đổi (gửi và nhận dữ liệu)
Đề thiết lập một kết nối cho cả 2 phía, cần xây đựng một socket Có thê hiểu socket như một điểm đầu cuối của kênh kết nối giữa 2 tiến trình
Các hệ thống (Linux, Windows) đều cung cấp các hàm hệ thống đề thực hiện thiết lập
một socket
1.4.2 Các loại Socket
Có 2 loai socket duoc str dung rong rai la: Stream Sockets va Datagram Sockets