1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình socket trong linux

49 19 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập Trình Socket Trong Linux
Trường học Trường Đại Học
Chuyên ngành Lập Trình
Thể loại Luận Văn Tốt Nghiệp
Định dạng
Số trang 49
Dung lượng 578,28 KB

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

Nội dung

Tuy nhiên để viết được ứng dụng mạng thì cần có một số khái niệm cơ bản về hạ tầng mạng cũng như để viết được một ứng dụng trong Linux thì cần có những khái niệm cơ bản trong hệ điều hàn

Trang 1

PHẦN 1 : GIỚI THIỆU ĐỀ TÀI

1.GIỚI THIỆU ĐỀ TÀI

Lập trình mạng là vấn đề khá thú vị, hấp dẫn đang được rất nhiều người quan tâm Trên hệ thống Linux, để viết các ứng dụng mạng người ta thường sử dụng thư viện socket chuẩn Việc tạo ra socket và đọc ghi dữ liệu nó cho phép chúng ta truyền dữ liệu từ máy này sang máy khác hoặc từ ứng dụng này sang ứng dụng khác Tuy nhiên để viết được ứng dụng mạng thì cần có một số khái niệm cơ bản về hạ tầng mạng cũng như để viết được một ứng dụng trong Linux thì cần có những khái niệm cơ bản trong hệ điều hành này.Vì những lý do đó đề tài "Lập trình socket trong Linux" nêu lên những vấn đề chính để xây dựng ứng dụng mạng trong Linux Bắt đầu từ những khái niệm cơ bản về hạ tầng mạng, một số khái niệm trong hệ điều hành Linux, giao tiếp bằng socket và cuối cùng là xây dựng chương trình mô phỏng cho việc giao tiếp bằng socket trong Linux

1.1 Sự hình thành bài toán

Đối với thực trạng ngày nay khi khoa học công nghệ phát triển mạnh và nhất là trong lĩnh vực công nghệ thông tin Từ việc nghiên cứu đến giải trí thì nhu cầu con người ngày càng đặt ra rất lớn Khi mạng thông tin toàn cầu Internet phát triển một cách mạnh mẽ thì nhu cầu trao đổi thông tin của con người trên mạng ngày càng cao và phức tạp Các dịch vụ như WWW, Email, IRC, FTP ngày càng nhiều và đa dạng Người sử dụng muốn thông tin của họ phải đảm bảo được nhanh chóng, dễ dàng, có thể trao đổi được ở nhiều dạng text, picture,voice không chỉ trên Windows mà cả trên Unix/Linux Như chúng ta đã biết có rất nhiều chương trình truyền thông xuất hiện trên môi trường Windows nhưng trong Unix/Linux thì còn ít, mặt khác Linux là một hệ điều hành có mã nguồn mở, nó đang thực sự hấp dẫn và khiến cho nhiều người muốn tìm hiểu nó Vậy truyền

Trang 2

thông trong Linux được thực hiện như thế nào hay nói cách khác là các máy trong mạng LAN trong môi trường Linux trao đổi dữ liệu với nhau ra sao đó là lý do thúc đẩy ra đời đề tài này Đề tài thực hiện dựa trên mô hình client - server trên môi trường Linux

Trang 3

Khi người làm việc ở máy server muốn kiểm tra xem ở máy client hiện tại

có người làm việc không thì server sẽ gửi một message đến client đó, nếu ở client đó có tín hiệu trả lời thì dịch vụ sẽ trả về một mesage thông báo là hiện tại đang có người làm việc, còn sau một khoảng thời gian qui định nếu không có trả lời thì sẽ trả về một mesage thông báo là hiện tại không có người làm việc

1.3 Các giả thiết của bài toán

- Các máy tính đã được nối với nhau trong mạng LAN

- Bỏ qua các vấn đề như sự mất mát thông tin hay do đường truyền mà

dữ liệu không còn đúng khi truyền từ server đến client và ngược lại

1.4 Mô hình

Để dữ liệu được truyền là đảm bảo, giao thức được chọn là TCP/IP và mô hình là client - server Bởi vì giao thức TCP/IP cung cấp cho chúng ta một khả năng truyền dữ liệu trên mạng là không lỗi, không mất mát dữ liệu và chúng có khả năng tự kiểm tra lỗi, khi mất mát dữ liệu thì chúng tự truyền lai hoặc có khả năng bỏ đi những dữ liệu trùng lặp

Trang 4

Chương1 KIẾN TRÚC MẠNG VÀ MÔ HÌNH TCP/IP

1.1 Kiến trúc mạng và những vấn đề liên quan:

Sự phân cấp protocol

Dữ liệu trong mạng được truyền và nhận theo một giao thức (protocol) được qui định trước Một giao thức là tập hợp các qui tắc cho việc truyền nhận

dữ liệu giữa các máy tính với nhau

Kiến trúc mạng là một tập các lớp (layer) và các giao thức (protocol) tương ứng với mỗi lớp

Mỗi một lớp có nhiệm vụ cung cấp các dịch vụ cho lớp bên trên của nó và

có thể gọi các dịch vụ mà lớp bên dưới nó cung cấp việc liên lạc giữa các nhóm

Protocol layer N

Protocol layer N-1

Protocol layer 2

Protocol layer 1 Layer N/N-1

Interface

Trang 5

tương ứng trong mạng phải theo một số luật hay quy ước nà đó gọi là giao thức (protocol)

1.2 Mô hình OSI (Open System Interconnection):

Trang 6

trên đường truyền vật lý cho các lớp cao hơn Vấn đề đặt ra ở đây là phải xác định

cơ chế để xác nhận một frame có được truyền thành công hay không, xử lý nhiễu (truyền lại)

1.2.4 Transport layer

Chức năng của lớp này là chia nhỏ gói dữ liệu được đưa từ lớp bên trên xuống thành những đơn vị nhỏ hơn để truyền qua mạng với sự đảm bảo là dữ liệu

sẽ tới nơi một cách chính xác Lớp này cung cấp cho các lớp bên trên phương tiện

để truyền các mesage độc lập với các lớp bên dưới

1.2.5 Session layer:

Cung cấp những phương tiện cho phép hai thực thể của lớp ứng dụng có thể

tổ chức và đồng bộ cuộc đối thoại và quản lý sự trao đổi thông tin giữa chúng

1.2.6 Presentation layer:

Lớp này biểu diễn những thông tin được truyền nó đồng nhất các thông tin giữa các hệ thống khác nhau Ngoài ra nó còn cung cấp dịch vụ thao tác trên dữ liệu như nén và mã hoá

Trang 7

máy này sang máy kia trong mạng thì phải qua tất cả các lớp của mô hình OSI ở

cả hai máy ), nó chỉ là tiêu chuẩn để các nhà phát triển dựa theo đó mà phát triển các mô hình khác tối ưu hơn Có rất nhiều mô hình khác nhau, tuy nhiên trên thế giới hiện nay với sự phát triển như vũ bão của mạng Internet mô hình TCP/IP được sử dụng phổ biến nhất

TCP/IP là tên chung cho một tập hợp hơn 100 protcol được sử dụng để kết nối các máy tính vào mạng, để tổ chức các thiết bị máy tính và các thiết bị viễn thông trên mạng Tên TCP/IP viết tắt của hai protocol quan trọng nhất trong nhóm là TCP (Transmission Coltrol Protocol) và IP (Internet Protocol)

Khi ta gửi đi một thông điệp, TCP sẽ chia thông điệp này thành các packet, mỗi packet được đánh dấu một số thứ tự và địa chỉ người nhận, thêm vào đó là một số thông tin kiểm soát lỗi Các packet này được gửi lên mạng và công việc của IP là truyền tải chúng tới host Tại nơi nhận, TCP nhận các gói và kiểm tra lỗi, gởi trả lại nếu gói không đúng, với những gói đúng, TCP sử dụng số thứ tự để tạo lại thông điệp ban đầu Tóm lại công việc của IP là chuyển dữ liệu thô - các packet từ nơi này đến nơi khác còn công việc của TCP là quản lý dòng chảy và đảm bảo rằng dữ liệu là đúng

TCP/IP có những đặc điểm sau:

- Độc lập với cách nối mạng

- Độc lập với phần cứng của mạng

- Các nghi thức theo tiêu chuẩn của hệ mở

- Cách đánh địa chỉ phổ dụng

- Cung cấp một số dịch vụ như :E_mail, FTP, Telnet…

- Là cơ sở để xây dựng các ứng dụng theo mô hình client/server

Mô hình TCP/IP được phân chia thành 4 lớp trong đó 2 lớp dưới của mô hình OSI (1 và 2) được gộp lại thành một lớp gọi là lớp hots-to-network, hai lớp Session và Presentation của OSI không có trong mô hình TCP/IP

Trang 8

Tương tự như mô hình OSI, mô hình TCP/IP, dữ liệu từ một máy cũng đi

từ lớp Aplication xuống lớp Transport, rồi xuống tiếp lớp Internet, sau cùng đi tới lớp host-to-network (ứng với datalink layer của OSI) thông qua đường dây vật lý đến một máy khác trong mạng, dữ liệu ở đây sẽ đi ngược từ dưới lên trên (tức là

từ lớp hots -to-network đến Aplication của máy thứ hai Cũng như mô hình OSI,

ở đây giữa các lớp của hai máy giao tiếp với nhau thông qua một protocol, giữa lớp này với lớp kia của một máy giao tiếp với nhau trực tiếp gọi là Interface Lớp bên dưới cung cấp các dịch vụ cho lớp bên trên

1.3.1 Host-to-network layer (Physical layer):

Kết nối host với network sao cho chúng có thể chuyển các message tới các địa chỉ IP

1.3.2 Internet layer:

Đây là lớp thực hiện một hệ thống mạng có khả năng chuyển mạch gói các

dữ liệu dựa trên một lớp mạng Connectionless (không có cầu nối) hay Oriented (có cầu nối ) Mỗi khi truyền dữ liệu thì thiết lập một đường đi rồi mới truyền, Connectionless truyền nhanh nhưng độ tin cậy kém còn Connection-Oriented thì ngược lại, tùy theo dịch vụ mà ta dùng một trong hai cách trên

Connection-Trong mô hình TCP/IP người ta đưa ra khái niệm IP address để định địa chỉ các host trên mạng (IP address là một tập hợp số 4 byte có dạng A.B.C.D mỗi byte có giá trị từ 0 đến 255, tuy nhiên hiện nay số 4 byte là không đủ đáp ứng nhu cầu của Internet nên người ta lại đưa ra khái niệm mới như Expanded IP gồm 8 byte để tăng số đường địa chỉ lên

1.3.3 Transport layer

Lớp Transport được thiết kế để cho các phần tử ngang cấp ở lớp host có thể đối thoại với nhau

Hai protocol chính là :

Trang 9

TCP : là 1 Connection Oriented Protocol cho phép chuyển một chuỗi byte

từ host này sang host kia mà không có lỗi (dùng cơ chế phân chia dữ liệu thành những gói nhỏ ở máy nguồn và gom lại ở máy đích)

UDP (User Datagram Protocol) là 1 Connectionless Protocol được xây

dựng cho các ứng dụng không muốn sử dụng cách truyền theo một thứ tự của TCP

mà muốn tự mình thực hiện điều đó

Số hiệu port

Một máy có thể liên lạc với một máy khác thông qua địa chỉ IP Tuy nhiên với một địa chỉ như vậy không đủ cho một process của máy này liên lạc với một process của máy khác Vì vậy TCP/UDP đã dùng 16 bits để có thể đặc tả nên một

số hiệu port

Như vậy để 2 process ở hai máy bất kỳ trong mạng có thể giao tiếp được với nhau thì mỗi frame ở cấp network có IP gồm :

+ Protocol (TCP/UDP)

+ Địa chỉ IP của máy nguồn

+ Số hiệu port của process ở máy nguồn

+ Địa chỉ IP của máy đích

+ Số hiệu port của process ở máy đích

Thí dụ :{Tcp, 172.28.11.83, 6000, 172.28.11.241, 7000}

1.3.4 Aplication layer (process layer)

Chứa các dịch vụ như trong các lớp Session, Presentation, Application của

mô hình OSI Thí dụ :Telnet là một virual terminal cho phép user xâm nhập vào một host ở xa và làm việc ở đó như đang làm việc với một máy ở local, FTP là một công cụ hữu hiệu để chuyển file từ máy này sang máy kia trên mạng, DNS (Domain Name Service) dùng để ánh xạ tên host thành địa chỉ IP của nó

Chương 2 MÔ HÌNH CLIENT - SERVER

Trang 10

2.1 Giới thiệu

Mô hình client - server là một mô hình tổ chức trao đổi thông tin trong đó

mô tả cách mà các máy có thể giao tiếp với nhau theo một phương thức nhất định Phương thức này là một chiến lược tổ chức phân cấp mà trong đó có một máy tính đặc biệt phục vụ các yêu cầu về lưu trữ, xử lý, tính toán của các máy khác trong mạng Kiểu tổ chức tổng quát của mô hình này là một mạng LAN được thiết lập từ nhiều máy tính khác nhau, trong đó có một máy tính gọi là máy chủ (server) Một chương trình client chạy từ bất kỳ máy nào trong mạng cũng có thể gửi các yêu cầu của mình đến server, khi server nhận được các yêu cầu này thì nó sẽ xử lý và gửi trả kết qủa về cho client

Mô hình chuẩn của các ứng dụng mạng là mô hình client - server Một server

là một tiến trình, tiến trình này chờ sự liên hệ từ tiến trình client Một phiên làm việc điển hình là mô hình này như sau :

- Tiến trình server được khởi động lên trên hệ thống máy tính Sau khi khởi tạo xong thì nó sẽ chờ một tiến trình client liên hệ nó để yêu cầu một số dịch vụ

- Tiến trình client gửi một yêu cầu thông qua mạng đến server để yêu cầu một số dịch vụ nào đó Một số thí dụ về dịch vụ mà server có thể cung cấp :

+ Trả về giờ trong ngày cho client (time of day)

Client

Trang 11

+ In một file trên máy in cho client

+ Đọc hay ghi một file trên hệ thống của server cho client

+ Thực thi một công việc cho client trên hệ thống server

- Sau khi tiến trình server đã hoàn tất việc cung cấp dịch vụ cho client, server quay về trạng thái "nghỉ" để chờ yêu cầu của client kế tiếp

Chúng ta có thể chia hơn nữa các tiến trình server thành 2 kiểu :

- Khi chỉ có một yêu cầu của client được server phục vụ tại một thời điểm thì người ta gọi đó là server "lặp" (interative servers) Loại server này do chỉ thực hiện một yêu cầu của client tại một thời điểm nên không hiệu quả

- Khi server có thể thực hiện nhiều yêu cầu từ phía client gửi đến thì ta gọi đó

là server "đồng thời" Trong trường hợp này hệ điều hành phải cho phép chạy nhiều server cùng một lúc, một server "đồng thời" yêu cầu các quá trình khác (bản sao tạo ra từ server) xử lý mỗi yêu cầu đến từ client, và như vậy thì tiến trình server nguyên thuỷ có thể quay lại chế độ "nghỉ" (sleep) để chờ yêu cầu từ các client kế tiếp

2.2 Những giải thuật khi thiết kế trình client

Phần mềm client có thể sử dụng một trong các phương pháp sau đây để tìm địa chỉ IP của server và port :

- Dùng địa chỉ IP và port là hằng số trong chương trình

- Yêu cầu user nhập khi chạy chương trình

- Lấy thông tin về server từ file

Dùng địa chỉ server như hằng số làm cho chương trình client nhanh hơn và

ít phụ thuộc vào môi trường tính toán cục bộ Tuy nhiên nó cũng có nghĩa là client

sẽ phải dịch lại khi server bị di chuyển Quan trọng hơn là nó không thể dùng với server khác dù chỉ để kiểm tra

Trang 12

Lưu địa chỉ server trong file làm cho chương trình client mềm dẻo hơn nhưng khi đó chương trình client không thể thực thi được nếu không có file đó Do

đó phần mềm client không thể mang đến máy tính khác dễ dàng

Để giảm độ phức tạp và sự phụ thuộc vào môi trường cục bộ, phần lớn client giải quyết vấn đề bằng cách cho user nhập đối số chỉ định server vào khi chạy chương trình client Phương pháp dùng đối số để chỉ định địa chỉ server là phương pháp mềm dẻo nhất Một chương trình chấp nhận đối số địa chỉ có thể được kết hợp với những chương trình khác lấy địa chỉ server từ đĩa

2.2.1 Giải thuật tạo kết nối với server và giao tiếp với nó

- Tìm địa chỉ IP và port của server muốn liên lạc

- Cấp phát socket

- Connect socket với server

- Giao tiếp với server dùng protocol cấp ứng dụng

- Đóng kết nối

Hàm hệ thống connect cho phép client TCP khởi tạo theo chiến lược bắt tay

3 lần Hàm connect không trả về cho đến khi kết nối TCP đã được thiết lập hoặc TCP bị timeout và bị bỏ cuộc Connect thực hiện 4 công việc, trước tiên nó kiểm tra để đảm bảo socket là hợp lệ

2.2.2 Giải thuật lập trình cho TCP client

- Tìm địa chỉ và port của server muốn liên lạc

- Cấp phát socket (gọi hàm socket(…) tạo socket)

- Gọi hàm connect kết nối đến server

- Giao tiếp với server dùng protocol cấp ứng dụng

- Đóng socket

2.2.3 Giải thuật lập trình cho UDP client

- Tìm địa chỉ IP và port của server muốn liên lạc

- Cấp phát socket

Trang 13

- Chỉ ra server cần gửi thông điệp đến

- Giao tiếp với server dùng protocol cấp ứng dụng

- Đóng socket

2.3 Những giải thuật thiết kế trình server

Về ý tưởng, server tạo ra một socket và ràng buộc socket vào port mà nó muốn nhận yêu cầu Sau đó nó vào một vòng lặp vô tận trong đó nó chấp nhận yêu cầu kế tiếp đến từ client, xử lý yêu cầu và gửi trả về cho client

Chúng ta dùng thuật ngữ interative server để mô tả một sự thực hiện server

xử lý một yêu cầu một lần và thuật ngữ concurrent server để mô tả một server điều khiển nhiều yêu cầu cùng lúc Mặc dù phần lớn concurrent server đạt được tính đồng thời rõ rệt nhưng đôi khi không cần thực hiện tính đồng thời, nó tuỳ thuộc vào ứng dụng

Việc sử dụng interative server mặc dù dễ xây dựng và dễ hiểu hơn nhưng nó

có thể cho hiệu quả tồi bởi vì chúng làm cho client phải chờ phục vụ Ngược lại thực hiện concurrent server khó xây dựng hơn nhưng cho hiệu quả cao hơn

Ưu điểm chính của server có kết nối là ở chỗ dễ lập trình Đặc biệt là protocol cấp transport xử lý các trường hợp mất packet, thứ tự gửi sai…một cách tự động nên server không phải làm việc đó Trong khi một kết nối cần mở, TCP cung cấp tất cả độ tin cậy cần thiết Nó tự động truyền lại data bị mất, kiểm tra xem dữ liệu đến có bị lỗi đường truyền không và sắp xếp lại các packet khi cần thiết

Những server không kết nối cũng có những ưu và khuyết điểm Trong khi những server không kết nối không phải chịu vấn đề về cạn kiệt tài nguyên, chúng không thể dựa vào cấp transport để có độ tin cậy khi truyền Thông thường client phải có trách nhiệm truyền lại yêu cầu nếu không có đáp ứng đến

Có 4 loại server cơ bản là:

- Server tuần tự không kết nối

- Server tuần tự có kết nối

Trang 14

- Server đồng thời không kết nối

- Server đồng thời có kết nối

2.3.1 Giải thuật cho server tuần tự, có kết nối:

- Tạo một socket và ràng buộc nó vào một địa chỉ đã công bố cho dịch vụ mà server cung cấp

- Đặt socket ở chế độ thụ động làm cho nó sẵn sàng để sử dụng

- Chấp nhận yêu cầu kết nối từ client và lấy một socket mới để kết nối

- Lặp lại các công việc sau : đọc yêu cầu từ client, xử lý yêu cầu và gửi kết quả về cho client

- Khi hoàn tất với một client nào đó, đóng kết nối và trở về bước 3

2.3.2 Giải thuật cho server tuần tự, không kết nối :

- Tạo một socket và ràng buộc vào địa chỉ đã công bố cho dịch vụ mà server cung cấp

- Lặp đi lặp lại thao tác đọc yêu cầu kế tiếp từ client, xử lý yêu cầu và gửi đáp ứng về cho client

2.3.3 Giải thuật cho server đồng thời, không kết nối:

Master process:

- Tạo một socket và ràng buộc vào địa chỉ đã công bố mà server cung cấp

- Lặp đi lặp lại việc nhận yêu cầu kế tiếp từ client và tạo một quá trình slave mới để xử lý yêu cầu

Slave process:

- Nhận yêu cầu lúc được tạo ra

- Xử lý yêu cầu và gửi trả kết quả về cho client

- Exit (tức là quá trình slave kết thúc sau khi xử lý một yêu cầu)

Trang 15

2.3.4 Giải thuật cho server đồng thời, có kết nối :

Master process :

- Tạo một socket và ràng buộc socket vào địa chỉ đã công bố cho dịch vụ

mà server cung cấp

- Đặt socket vào chế độ thụ động

- Lặp đi lặp lại lệnh gọi accept để nhận yêu cầu kế tiếp từ client và tạo một

quá trình slave mới để xử lý yêu cầu

Slave process :

- Nhận một yêu cầu kết nối khi được tạo ra

- Tương tác với client, dùng kết nối để đọc yêu cầu và gửi trả kết quả

- Đóng cầu nối và exit Quá trình slave chấm dứt sau khi đã xử lý toàn bộ yêu cầu của một client

Mặc dù không thể đạt được sự đồng thời thực sự giữa các process dùng chung bộ nhớ, ta có thể đạt được gần như đồng thời nếu những yêu cầu đến server không vượt quá khả năng xử lý của nó Để làm được điều đó server hoạt động như một quá trình đơn và dùng hàm hệ thống select() để xử lý I/O bất đồng bộ

Giải thuật:

- Tạo một socket và ràng buộc socket vào địa chỉ đã công bố cho dịch vụ

mà server cung cấp Thêm socket vào danh sách những socket có thể phục vụ I/O

- Dùng select để đợi I/O trên những socket đã có

- Nếu socket ban đầu sẵn sàng, dùng read để lấy yêu cầu tiếp theo, tạo đáp ứng và dùng write để gửi đáp ứng về cho client

- Trở về bước 2

Trang 16

Chương 3 MỘT SỐ KHÁI NIỆM TRONG HỆ ĐIỀU HÀNH

LINUX

3.1 Giới thiệu

Linux là một hệ điều hành họ UNIX miễn phí đang được sử dụng rộng rãi hiện nay Được viết vào năm 1991 bởi Linus Tovard hệ điều hành Linux đã thu được những thành công nhất định Hiện nay, Linux ngày càng phát triển, được đánh giá cao

và thu hút nhiều sự quan tâm của các nhà tin học

Là một hệ điều hành đa nhiệm, đa người dùng, Linux có thể chạy được trên nhiều nền phần cứng khác nhau Linux hỗ trợ chuẩn POSIX, tức là hoàn toàn tương thích với các hệ UNIX khác Với tính năng ổn định và mềm dẻo, Linnux đang dần được sử dụng nhiều trên các máy chủ cũng như máy trạm trong các mạng máy tính Ngoài ra, với tính năng mã nguồn mở, hệ điều hành này còn cho phép khả năng tuỳ biến cao, thích hợp cho các nhu cầu sử dụng cụ thể

3.2 Kernel và Shell

Kernel (Nhân Linux)

Linux là hệ điều hành đa người dùng và đa nhiệm vận hành giống như hệ điều hành UNIX về phương diên nhân và thiết bị ngoại vi Linux có tất cả đặc tính của UNIX, cộng với những cải thiện gần đây đã tăng thêm tính linh hoạt cho Linux Toàn bộ mã nguồn dành cho Linux và trình tiện ích của nó hoàn toàn miễn phí

Ban đầu nhân Linux được thiết kế cho chế độ bảo vệ của CPU 80386 Intel

80386 được thiết kế với tính năng đa nhiệm và Linux tận dụng hoàn toàn những đặc tính nâng cao có sẵn trong CPU Cơ chế quản lý bộ nhớ cực kỳ mạnh với

80386 (so với nhưng CPU trước kia) Thủ tục mô phỏng dấu chấm động cho phép Linux hoạt động trên những máy móc không có bộ đồng xử lý toán học

Trang 17

Linux cho phép dùng chung các tập tin có thể thi hành để nhỡ có nạp nhiều bản sao của một trình ứng dụng đặc biệt (do người dùng chạy nhiều tác vụ) thì tất

cả tác vụ đều có thể dùng chung một bộ nhớ Tiến trình này gọi là sao chép trên trang ghi, sử dụng triệt để RAM của bộ nhớ

Nhân Linux còn hỗ trợ tiến trình phân trang theo yêu cầu, có nghĩa là chỉ những phần nào cần thiết của chương trình mới được đọc vào RAM Để sử dụng

bộ nhớ tối ưu hơn, Linux dùng một tổ hợp nhớ hợp nhất cho phép bộ nhớ rãnh trên

hệ thống được sử dụng như một bộ nhớ cache truy nhập nhanh chóng và hiệu quả các chương trình và dữ liệu sử dụng thường xuyên

Để phục vụ cho những yêu cầu bộ nhớ quá lớn trong khi RAM bộ nhớ quá nhỏ, Linux hỗ trợ không gian tráo đổi Không gian tráo đổi cho phép các trang nhớ được ghi vào một vùng đĩa dành sẵn và được sử dụng như một vùng mở rộng của bộ nhớ vật lý Bằng cách di chuyển tới lui giữa không gian tráo đổi và RAM, Linux có thể vận hành như thể nó có RAM vật lý nhiều hơn thế, bù lại tốc độ truy cập đĩa cứng sẽ chậm hơn làm giảm tốc độ truy cập của máy

Linux sử dụng rộng rãi thư viện dùng chung động Thư viện này sử dụng một vùng thư viện chung cho nhiều trình ứng dụng khác nhau, cắt giảm đáng kể kích thước của mỗi trình ứng dụng

Cũng như hệ điều hành UNIX, Kernel của Linux được thiết kế theo kiểu

mô đun sao cho các bộ phận cấu thành khác nhau có thể được phân biệt với nhau

Ưu điểm của cấu trúc này (ngoại trừ việc nó có thể được nghiên cứu dễ dàng) là

nó cho phép sửa đổi Việc bổ sung các thành phần nào đó chẳng hạn như lệnh gọi

hệ thống và điều khiển thiết bị ngoại vi là đơn giản và không cần xem xét lại cấu trúc hệ thống

Các thành phần khác nhau của kernel hệ điều hành họ UNIX được liệt kê như sau:

+ Các lệnh gọi hệ thống : thực hiện các thao tác cần phải chạy ở chế độ kernel

Trang 18

+ Hệ thống lưu trữ : các đầu vào / đầu ra ở các thiết bị ngoại vi

+ Buffer cache : vùng đệm tinh vi cho các đầu vào, đầu ra

+ Quản lý các thiết bị ngoại vi : quản lí ở mức các đĩa, các thiết bị nhập xuất, các máy in …

+ Quản lý mạng : các giao thức mạng truyền thông

+ Giao diện máy : giao diện mã máy (thường là mã hợp ngữ) cho truy cập bậc thấp đến các tài nguyên vật lý của máy

+ Kernel :

- Quản lý tiến trình

- Bộ lập lịch biểu

- Các thông điệp

- Các mô đun nạp (nạp các phần nào đó của kernel theo nhu cầu)

- Quản lý bộ nhớ (điều khiển bộ nhớ vật lí và bộ nhớ ảo)

Shell (hệ vỏ)

Hệ điều hành thường cung cấp các hàm hay dịch vụ để chương trình ứng dụng triệu gọi Để triệu gọi được các hàm hệ thống của hạt nhân, ngoài việc xây dựng các chương trình và biên dịch chúng ra mã nhị phân để hệ điều hành triệu gọi, hệ điều hành còn cung cấp khả năng giao tiếp với hạt nhân thông qua trình diễn dịch trung gian, đó là hệ vỏ còn được gọi là Shell Shell quen thuộc với chúng ta trong môi trường DOS, đó chính là tập lệnh command.com có thể dịch các lệnh như copy, del, thành các lời triệu gọi DOS cấp thấp Ngoài ra DOS còn cung cấp cách điều khiển tự động hoá hệ điều hành bằng các lệnh bó (Batch) trong tập tin BAT Mặc dù vậy các lệnh điều khiển của file BAT trong DOS rất nghèo nàn và không tận dụng được triệt để sức mạnh của hệ thống Linux trái lại cung cấp các Shell tương tác rất mạnh mẽ, Linux không bắt buộc phải sử dụng các Shell

cứng nhắc và quy định sẵn csh, bash là các hệ vỏ điển hình trong Linux có thể

Trang 19

diễn dịch và cho phép người dùng lập trình script dưới dạng ngôn ngữ C rất uyển chuyển

3.3 Process (Tiến trình)

Tiến trình là một khái niệm ảnh hưởng đến toàn bộ kiến trúc của hệ điều hành Linux Mỗi chương trình dù lớn dù nhỏ trong Linux đều được gọi là tiến trình Các tiến trình có một không gian bộ nhớ độc lập hoạt động dưới sự điều phối của hệ điều hành Linux cũng như các hệ điều hành nổi bật hiện nay là WindowsNT, Unix … là các hệ điều hành đa nhiệm Các tiến trình có thể chạy song song đồng thời

Các tiến trình thường nhận dữ liệu đầu vào xử lý và ghi kết xuất ra một nơi nào đó Thường thì bàn phím hay file là nơi gửi dữ liệu đến tiến trình, còn màn hình hay file là nơi dữ liệu sẽ kết xuất ra Linux qui định cơ bản đầu vào là bàn phím stdin ( thiết bị nhập chuẩn) và đầu ra là màn hình stdout (thiết bị xuất chuẩn)

Muốn xem các tiến trình đang chạy trong hệ thống Linux hiện hành ta gọi lệnh ps

# ps -a

Mỗi tiến trình khi bước vào hoạt động đều được hệ điều hành cấp cho một

mã số duy nhất gọi là PID (Process Identify) Hầu như tất cả các lệnh xử lý tiến trình trong Linux đều dựa vào số PID này để tương tác và điêù khiển tiến trình đang chạy

Tiến trình trong Linux có hai chế độ hoạt động :

Trang 20

vụ và chấm dứt, hệ điều hành (chính xác hơn là hệ vỏ Shell) sẽ trả lại dấu nhắc để

gõ tiếp lệnh thực thi chương trình khác Chương trình hoạt động theo cách này gọi

là chương trình tiền cảnh (foreground)

3.3.2 Chế độ hậu cảnh (background)

Nếu có cách nào đó yêu cầu Linux đưa các tiến trình chiếm nhiều thời gian

xử lý hoặc ít tương tác với người dùng ra hoạt động ở phía hậu cảnh (background), trả lại ngay dấu nhắc để các tiến trình ở tiền cảnh có thể thực thi thì

tốt hơn Linux cung cấp khả năng này bằng chỉ thị lệnh & kết hợp với lệnh của

chương trình gõ từ dấu nhắc của hệ thống Tất cả những lệnh gõ kèm theo chỉ thị

& đều được hệ điều hành đưa vào hoạt động ngầm bên trong.Dấu nhắc của hệ

thống sẽ được trả lại ngay để triệu gọi một lệnh khác

3.3.3 Tạm dừng tiến trình

Khi một tiến trình đang chạy và ta muốn đưa nó vào hậu cảnh thì sao ?

Chẳng hạn ta đánh lệnh ls -R và không kèm theo chỉ thị & để Linux đưa tiến

trình vào hậu cảnh Sau một thời gian khá lâu, chúng ta muốn chuyển tiến trình vào hậu cảnh để lấy lại dấu nhắc của hệ thống Ta thực hiện công việc này bằng phím Ctrl-Z Khi một chương trình đang chạy và nhận được tín hiệu Ctrl-Z, nó sẽ

bị hệ thống cho tạm dừng và đưa vào hậu cảnh Dấu nhắc hệ thống được trả lại cho người dùng Tuy đưa vào hậu cảnh nhưng tiến trình đang bị tam dừng, nó chỉ thực sự chạy lại ở hậu cảnh khi người dùng cho phép Chúng ta có thể thử nghiệm khả năng này của Linux như sau :

# ls -R / >allfiles.txt

^Z

[1]+ Stopped ls-R/ >allfiles.txt

Trang 21

Linux thông báo tác vụ [1] đã bị dừng lại và đưa vào hậu cảnh Muốn xem PID của tác vụ bạn gọi ps -af

3.3.4 Đánh thức tiến trình

Để biết được tiến trình đang chạy hay đang dừng ta dùng lệnh jobs

#jobs

[1]+ Stopped ls - R/ >allfiles.txt

Lệnh jobs hiển thị trạng thái của tất cả tiến trình đang chạy ở hậu cảnh Như

kết quả trên ta thấy tác vụ [1] đang ở trạng thái dừng, ta dùng lệnh bg để yêu cầu

tiến trình tiếp tục hoạt động ở hậu cảnh

# bg 1

ls - R/ >allfile.txt

#jobs

[1]+ Running ls - R/ >allfiles.txt &

Nếu muốn mang tiến trình trở lại hoạt động phía tiền cảnh ta dùng lệnh fg

trình đang ở trạng thái lặp vô tận

Kill PID

Ngoài ra trong lập trình Linux cũng cung cấp một số cách để giao tiếp giữa các tiến trình

Trang 22

Chương 4 GIAO TIẾP BẰNG SOCKET

4.1 Giới thiệu về socket

4.1.1 Socket là gì?

Khi viết ứng dụng và yêu cầu tương tác với một ứng dụng khác chúng ta thường dựa vào mô hình khách chủ (client/server).Theo mô hình này, ứng dụng có khả năng phục vụ hoặc cung cấp những thông tin gì đó gọi là ứng dụng chủ (trình chủ hay server), ứng dụng gửi yêu cầu đến trình chủ được gọi là ứng dụng khách (trình khách hay client) Như vậy trước khi yêu cầu một dịch vụ của trình chủ thực hiện điều gì đó trình khách phải có khả năng kết nối được với trình chủ Quá trình kết nối này được thực hiện thông qua một cơ chế trừu tượng hóa gọi là socket (tạm dịch là "cơ chế ổ cắm")

4.1.2 Cách socket kết nối

Trước hết ứng dụng chủ mở một ổ cắm socket Gọi hàm socket() để tạo "ổ

cắm " cho trình chủ server.Tiếp đến để ứng dụng khách biết đến ổ cắm socket của trình chủ, ta phải đặt cho socket một cái tên Nếu trên máy cục bộ và dựa vào hệ thống file của Linux thì có thể đặt tên cho socket như một tên file (với đầy đủ đường dẫn) Chỉ cần đặt tên còn đường dẫn đặt trong thư mục /tmp hay usr/tmp Đối với giao tiếp mạng thông qua giao thức TCP/IP tên của socket được thay thế bằng một khái niệm cổng (port) Cổng là một số nguyên 2 bytes thay thể cho tên

Trang 23

tập tin Ngoài ra giao thức TCP/IP còn yêu cầu xác định thêm địa chỉ IP để kết nối đến máy chủ ở xa

Sau khi đã định tên hoặc số hiệu cổng cho socket, ta gọi hàm bind() để ràng

buộc hay đặt tên chính thức cho socket của trình chủ Tiếp đến là chờ kết nối từ phía trình khách, trình chủ sẽ gọi hàm listen() để tạo hàng đợi nhận các kết nối do trình khách đưa đến Nếu có yêu cầu kết nối từ trình khách, trình chủ gọi hàm accept() để tiếp nhận yêu cầu của trình khách accept sẽ tạo ra một socket vô danh khác, cắm kết nối của trình khách vào socket vô danh này và thực hiện quá trình chuyển dữ liệu trao đổi giữa khách và chủ Socket được đặt tên đó vẫn tiếp tục hoạt động để chờ nhận yêu cầu từ trình khách khác

Mọi giao tiếp thông qua socket cũng đơn giản như việc bạn dùng lệnh read/write để đọc ghi trên file Nếu file dựa vào số mô tả (file descriptor) để đọc ghi trên một tập tin xác định thì socket cũng dựa vào số mô tả (socket descriptor)

để xác định socket cần đọc ghi cho hàm read/write

Phía trình khách bạn chỉ cần tạo một socket vô danh, chỉ định tên và vị trí socket của trình chủ

Yêu cầu kết nối bằng hàm connect() và đọc ghi, truy xuất dữ liệu của

socket bằng lệnh read/write

4.2.Tìm hiểu cách socket làm việc

4.2.1 Thuộc tính của socket

Socket được định nghĩa dựa trên 3 thành phần thuộc tính đó là : vùng (domain), kiểu (type) và giao thức (protocol) Socket còn căn cứ vào một địa chỉ kết hợp với nó Địa chỉ này phụ thuộc vào vùng của socket và thường được gọi là dòng giao thức Ví dụ như dòng giao thức theo hệ thống file của Sun thường lấy tên file làm đường dẫn địa chỉ, trong khi giao thức TCP/IP lại lấy địa chỉ là số IP (32 bit) để tham chiếu và thực hiện kết nối vật lý

4.2.1.1 Vùng giao tiếp của socket (domain)

Trang 24

Vùng dùng xác định hạ tầng mạng nơi giao tiếp của socket diễn ra Vùng giao tiếp socket thông dụng nhất hiện nay là AF_INET hay giao tiếp socket theo chuẩn mạng Internet Chuẩn này sử dụng địa chỉ IP để xác định nút kết nối vật lý trên mạng Ngoài ra nếu chỉ cần giao tiếp cục bộ ta có thể dùng vùng giao tiếp theo chuẩn của Sun AF_UNIX, đó là dùng đường dẫn và hệ thống file để đặt tên

và xác định kết nối giữa hai hay nhiều ứng dụng Tuy nhiên vùng AF_UNIX lại ít được sử dụng trong thực tế Ngày nay hầu hết các ứng dụng mạng sử dụng socket đều theo vùng AF_INET là chủ yếu

Vùng AF_INET như đã nêu sử dụng địa chỉ IP (Internet Protocol) là một số

32 bits để xác định kết nối vaatj lý Số này thường được viết ở dạng nhóm như 192.168.1.1, 203.162.42.1 hay 127.0.0.1 là các địa chỉ IP hợp lệ Địa chỉ IP có thể được ánh xạ thành một tên dễ nhớ hơn như www.yahoo.com hay www.microsoft.com, chúng được gọi là tên vùng (domain name) Việc ánh xạ địa chỉ IP thành tên vùng thường do máy chủ DNS (Domain Name Server) thực hiện

Tuy nhiên, ta có thể tự ánh xạ tên vùng ngay trên máy cục bộ bằng cách sử dụng tập tin dữ liệu /etc/host

Socket theo dòng giao thức IP sử dụng port (số hiệu cổng) để đặt tên cho một socket Cổng dùng để phân biệt dữ liệu gửi đến sẽ chuyển cho ứng dụng nào Nếu địa chỉ IP dùng để xác định được máy hay nơi kết nối vật lý để đưa dữ liệu đến thì cổng là địa chỉ phụ dùng để gửi chính xác dữ liệu đến nơi ứng dụng cần Điều này là do trên một máy có thể có nhiều ứng dụng chạy và cùng sử dụng socket để giao tiếp Các ứng dụng trên cùng một máy không được sử dụng trùng

số cổng Do cổng là một giá trị nguyên 2 bytes nên ta có thể sử dụng 65 ngàn cổng để tự do đặt cho socket Trừ các số hiệu cổng nổi tiếng như FTP(21),Web(80) là không nên sử dụng còn thì ta có thể chon số cổng >1024 để

mở cho socket của ứng dụng

Mở socket theo kết nối IP như sau:

Ngày đăng: 17/07/2021, 11:10

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w