Bài giảng Hệ điều hành - Chương III: Tiến trình - Trần Công Án
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ điều hành - Chương III: Tiến trình - Trần Công Án", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_he_dieu_hanh_chuong_iii_tien_trinh_tran_cong_an.pdf
Nội dung text: Bài giảng Hệ điều hành - Chương III: Tiến trình - Trần Công Án
- CT107. Hệ Điều Hành Chương 3. Tiến Trình (Process) Giảng viên: Trần Công Án (tcan@cit.ctu.edu.vn) Bộ môn Mạng máy tính & Truyền thông Khoa Công Nghệ Thông Tin & Truyền Thông Đại học Cần Thơ 2014
- [CT107] Ch3. Tiến trình Mục Tiêu Giới thiệu các khái niệm về Tiến trình và những thao tác cơ bản trong quản lý Tiến trình như tạo, định thời và kết thúc tiến trình. Các phương thức giao tiếp liên tiến trình cũng sẽ được trình bày. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 2
- [CT107] Ch3. Tiến trình Nội Dung Các khái niệm cơ bản Định thời cho Tiến trình (Process Scheduling) Các thao tác trên Tiến trình Hợp tác Tiến trình (Cooperating process) Giao tiếp trong hệ thống Client–Server TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 3
- [CT107] Ch3. Tiến trình Các khái niệm cơ bản Khái niệm Tiến trình Khái Niệm Tiến Trình I Tiến trình là thể hiện (instance) của một chương trình máy tính trong bộ nhớ, đang thực thi hoặc chờ thực thi. I Mỗi tiến trình thường được gán 1 số định danh tiến trình (process identifier, pid), dùng để định danh các tiến trình. I Một tiến trình bao gồm: I Mã lệnh chương trình (program code) I Bộ đếm chương trình (program counter) và các thanh ghi của CPU I Ngăn xếp (stack) I Phần dữ liệu (data section) I Có thể gồm phần bộ nhớ cấp phát động khi tiến trình thực thi (heap) TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 4
- [CT107] Ch3. Tiến trình Các khái niệm cơ bản Khái niệm Tiến trình Chương Trình & Tiến Trình max stack I Chương trình là một thực thể bị động, được lưu trữ trên đĩa. I Tiến trình là một thực thể chủ động, lưu trú trên bộ nhớ chính. I Khi một chương trình được kích hoạt (nhấp chuột, CLI, . . . ), một thể hiện của chương trình heap sẽ được nạp lên bộ nhớ, tạo ra 1 tiến trình. data I Một chương trình có thể có vài tiến trình trong bộ nhớ. text 0 TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 5
- [CT107] Ch3. Tiến trình Các khái niệm cơ bản Trạng thái của Tiến trình (Process state) Trạng Thái Của Tiến Trình (Process State) I Một tiến trình có thể có một trong các trạng thái sau: I new: tiến trình đang được khởi tạo. I running: các chỉ thị của tiến trình đang được thực thi. I waiting: tiến trình đang chờ đợi một sự kiện nào đó xảy ra (hoàn thành I/O, tín hiệu từ tiến trình khác, . . . ). I ready: tiến trình sẵn sàng để thực thi (đang đợi để được sử dụng CPU). I terminated: tiến trình đã kết thúc. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 6
- [CT107] Ch3. Tiến trình Các khái niệm cơ bản Trạng thái của Tiến trình (Process state) Sơ Đồ Chuyển Trạng Thái Của Tiến Trình new admitted interrupt exit terminated ready running scheduler dispatch I/O or event completion I/O or event wait waiting TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 7
- [CT107] Ch3. Tiến trình Các khái niệm cơ bản Khối điều khiển Tiến trình (Process Control Block – PCB) Khối Điều Khiển Tiến Trình (PBC) I Chứa thông tin của tiến trình trong Hệ điều hành: process state process number I Trạng thái của quá trình: ready, running, . . . program counter I Bộ đếm chương trình: chỉ thị kế tiếp sẽ được thực thi I Các thanh ghi: phụ thuộc vào k/trúc máy tính registers I Thông tin về định thời sử dụng CPU memory limits I Thông tin về quản lý bộ nhớ list of open files I Thông tin về chi phí: t/gian sử dụng CPU, pid, . . . • • • I Thông tin về trạng thái nhập/xuất: các thiết bị đang được cấp phát, danh sách tập tin đang mở, . . . TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 8
- [CT107] Ch3. Tiến trình Các khái niệm cơ bản Chuyển CPU giữa các Tiến trình Chuyển CPU Giữa Các Tiến Trình I PCB là nơi lưu giữ process P0 operating system process P1 trạng thái của tiến interrupt or system call trình executing save state into PCB0 Trạng thái của tiến I • idle • trình phải được lưu trữ • vào PCB khi một reload state from PCB1 interrupt xuất hiện, nhằm cho phép tiến idle interrupt or system call executing trình có thể tiếp tục chính xác về sau. save state into PCB1 • I Tác vụ chuyển CPU • idle còn được gọi là chuyển • reload state from PCB0 ngữ cảnh (context executing switch). TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 9
- [CT107] Ch3. Tiến trình Định thời cho Tiến trình (Process Scheduling) Định Thời Tiến trình (Process Scheduling) I Là một tác vụ của hệ điều hành trong các hệ thống đa chương dựa trên phân chia thời gian (time-sharing) nhằm lựa chọn một tiến trình được phép sử dụng CPU và phân bổ thời gian sử dụng CPU của tiến trình. I Thành phần lựa chọn/định thời cho các tiến trình được gọi là bộ định thời tiến trình (process scheduler). I Bộ định thời tiến trình dùng 1 hệ thống các hàng đợi (queue) để sắp xếp và định thời cho các tiến trình. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 10
- [CT107] Ch3. Tiến trình Định thời cho Tiến trình (Process Scheduling) Hàng đợi Tiến trình (Process queues) Hàng Đợi Tiến Trình (Process Queues) I Các hàng đợi dùng cho việc định thời tiến trình: I Hàng đợi công việc (job queue): tập hợp tất cả các tiến trình trong hệ thống. I Hàng đợi sẵn sàng (ready queue): tập hợp tất cả các tiến trình đang nằm trong bộ nhớ, sẵn sàng và đang chờ để thực thi. I Hàng đợi thiết bị (device queue): tập hợp các tiến trình đang đợi sử dụng một thiết bị vào ra. I Tiến trình có thể di chuyển giữa các hàng đợi khác nhau. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 11
- [CT107] Ch3. Tiến trình Định thời cho Tiến trình (Process Scheduling) Hàng đợi Tiến trình (Process queues) Hàng Đợi Sẵn Sàng & Hàng Đợi Thiết Bị queue header PCB7 PCB2 ready head queue tail registers registers • • • • • • mag head tape unit 0 tail mag head tape PCB3 PCB14 PCB6 unit 1 tail disk head unit 0 tail PCB5 terminal head unit 0 tail • • • TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 12
- [CT107] Ch3. Tiến trình Định thời cho Tiến trình (Process Scheduling) Hàng đợi Tiến trình (Process queues) Sơ Đồ Định Thời Tiến Trình ready queue CPU I/O I/O queue I/O request time slice expired child fork a executes child interrupt wait for an occurs interrupt TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 13
- [CT107] Ch3. Tiến trình Định thời cho Tiến trình (Process Scheduling) Các loại bộ định thời (Schedulers) Các Loại Bộ Định Thời (Shcedulers) I Bộ định thời dài kỳ (long-term scheduler/job scheduler): I chọn tiến trình nào sẽ được đặt vào hàng đợi sẵn sàng (nạp vào bộ nhớ) I được gọi rất không thường xuyên (seconds, minutes) ⇒ có thể chậm I khống chế cấp độ đa chương (degree of multiprogramming) I Bộ định thời ngắn kỳ (short-term scheduler/CPU scheduler): I chọn ra tiến trình sẽ được thực thi kế tiếp và cấp CPU cho nó. I được gọi rất thường xuyên (milliseconds) ⇒ phải nhanh TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 14
- [CT107] Ch3. Tiến trình Định thời cho Tiến trình (Process Scheduling) Các loại bộ định thời (Schedulers) Bộ Định Thời Trung Kỳ (Medium-term) I là mức trung gian giữa bộ định thời ngắn và dài kỳ I thực hiện hoán vị (swapping) các tiến trình ra/vào bộ nhớ/đĩa do cạnh tranh CPU, bộ nhớ I thường được sử dụng trong các hệ thống phân chia thời gian. swap in partially executed swap out swapped-out processes ready queue CPU end I/O waiting I/O queues TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 15
- [CT107] Ch3. Tiến trình Các thao tác trên Tiến trình Các Thao Tác Cơ Bản Trên Tiến Trình I Có 2 thao tác cơ bản trên tiến trình: I Tạo tiến trình I Kết thúc tiến trình TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 16
- [CT107] Ch3. Tiến trình Các thao tác trên Tiến trình Tạo Tiến trình Tạo Tiến Trình I Một tiến trình (cha) có thể tạo những tiến trình khác (con) I Quan hệ “cha–con” của các tiến trình tạo nên cây tiến trình. init! pid = 1! login! kthreadd! sshd! pid = 2234! pid = 2! pid = 2244! bash! khelper! khelper! sshd! pid = 8111! pid = 6! pid = 6! pid = 2244! . . . . . . . . . . . . TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 17
- [CT107] Ch3. Tiến trình Các thao tác trên Tiến trình Tạo Tiến trình Một Số Vấn Đề Giữa Tiến Trình Cha – Con I Chia sẻ tài nguyên: I Tiến trình cha và con chia sẻ tất cả các tài nguyên I Tiến trình cha chia sẻ một phần tài nguyên cho tiến trình con I Tiến trình cha và con không chia sẻ gì cả I Dữ liệu khởi tạo: được chuyển từ tiến trình cha sang con. I Thực thi: song song hoặc tuần tự theo thứ tự cha – con. I Không gian địa chỉ: I Tiến trình con sao chép từ tiến trình cha (cả code và dữ liệu) I Tiến trình con tự nạp chương trình riêng. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 18
- [CT107] Ch3. Tiến trình Các thao tác trên Tiến trình Tạo Tiến trình Tạo Tiến Trình Trên UNIX & Windows NT I UNIX: I fork(): lời gọi hệ thống để tạo tiến trình mới. I execlp(): thay thế không gian địa chỉ của tiến trình gọi bằng một tiến trình mới. I Windows NT: I CreateProcess( ): lời gọi hệ thống để tạo 1 tiến trình con và thay thế không gian địa chỉ tiến trình con bằng 1 tiến trình mới. I Tiến trình mới được chỉ định trong đối số của lời gọi hệ thống. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 19
- [CT107] Ch3. Tiến trình Các thao tác trên Tiến trình Tạo Tiến trình Ví Dụ Tạo Tiến Trình Trên UNIX #include #include int main() { int pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, “Fork failed”); exit(-1); } else if (pid ==0) { /* child process */ execlp(“/bin/ls”, “ls”, NULL); } else { /*parent waits for the child to complete*/ wait(NULL); printf(“Child completed”); exit (0); } } TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 20
- [CT107] Ch3. Tiến trình Các thao tác trên Tiến trình Kết thúc Tiến trình Kết Thúc Tiến Trình I T/trình thực thi câu lệnh cuối cùng và yêu cầu HĐH xóa nó (exit()) I Truyền dữ liệu từ tiến trình con lên tiến trình cha (wait()). I Thu hồi tài nguyên đã được cấp phát cho tiến trình. I Tiến trình con kết thúc trước khi t/trình cha gọi wait() ⇒ zombie I Tiến trình con còn thực thi khi t/trình cha đã kết thúc ⇒ orphan I Tiến trình cha có thể kết thúc tiến trình con (abort()): I Tiến trình con đã có vượt quá số tài nguyên được cấp. I Công việc giao cho tiến trình con làm nay không còn cần thiết nữa. I Tiến trình cha đang thoát: một vài HĐH không cho phép orphan. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 21
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Hợp Tác Tiến Trình (Cooperating Process) I Tiến trình độc lập: không thể ảnh hưởng hoặc không bị ảnh hưởng bởi sự thực thi của quá trình khác. I Hợp tác tiến trình: có thể ảnh hưởng hoặc bị ảnh hưởng bởi sự thực thi của quá trình khác. I Thuận lợi của sự hợp tác quá trình: I Chia sẻ thông tin I Gia tăng tốc độ tính toán (nếu máy có nhiều CPU) I Module hóa I Tiện dụng TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 22
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Giao Tiếp Liên Tiến Trình I Các tiến trình muốn trao đổi dữ liệu với nhau cần sử dụng cơ chế giao tiếp liên tiến trình (interprocess communication, IPC): 124 Chapter 3 Processes bộ nhớ chia sẻ truyền thông điệp process A process A process A shared memory process B process B process B message queue message queue m0 m1 m2 m3 mn m0 m1 m2 m3 mn kernel kernel kernel (a) (b) Figure 3.12 Communications models. (a) Message passing. (b) Shared memory. memory regions. OnceTS. shared Trần memory Công Ánis established, (Khoa CNTT&TT) all accesses are treated[CT107] Ch3. Tiến trình 23 as routine memory accesses, and no assistance from the kernel is required. Recent research on systems with several processing cores indicates that message passing provides better performance than shared memory on such systems. Shared memory suffers from cache coherency issues, which arise because shared data migrate among the several caches. As the number of processing cores on systems increases, it is possible that we will see message passing as the preferred mechanism for IPC. In the remainder of this section, we explore shared-memory and message- passing systems in more detail. 3.4.1 Shared-Memory Systems Interprocess communication using shared memory requires communicating processes to establish a region of shared memory. Typically, a shared-memory region resides in the address space of the process creating the shared-memory segment. Other processes that wish to communicate using this shared-memory segment must attach it to their address space. Recall that, normally, the operating system tries to prevent one process from accessing another process’s memory. Shared memory requires that two or more processes agree to remove this restriction. They can then exchange information by reading and writing data in the shared areas. The form of the data and the location are determined by these processes and are not under the operating system’s control. The processes are also responsible for ensuring that they are not writing to the same location simultaneously. To illustrate the concept of cooperating processes, let’s consider the producer–consumer problem, which is a common paradigm for cooperating processes. A producer process produces information that is consumed by a consumer process. For example, a compiler may produce assembly code that is consumed by an assembler. The assembler, in turn, may produce object modules that are consumed by the loader. The producer–consumer problem
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Bộ nhớ chia sẻ (Shared-memory) Bộ Nhớ Chia Sẻ (Shared-Memory) I Một vùng đệm (buffer) được dùng để chia sẻ dữ liệu giữa các t/trình: I kích thước không giới hạn (unbounded buffer): tiến trình đọc có thể chờ, tiến trình ghi không bao giờ chờ. I kích thước có giới hạn (bounded buffer): cả tiến trình đọc và ghi có thể chờ. I Ví dụ kinh điển “Nhà sản xuất – Người tiêu thụ”: tiến trình Nhà sản xuất sinh dữ liệu, được sử dụng bởi tiến trình Người tiêu thụ. I Tạo 1 vùng nhớ đệm (buffer) chung. I Tiến trình Nhà sản xuất ghi dữ liệu lên buffer. I Tiến trình Người tiêu thụ lấy dữ liệu từ buffer. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 24
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Bộ nhớ chia sẻ (Shared-memory) Tạo Vùng Đệm (Buffering) #define BUFFER_SIZE 10 ! ! typedef struct {! . . . ! } item;! ! item buffer[BUFFER_SIZE]; ! ! int in_item = 0; ! int out_item = 0; TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 25
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Bộ nhớ chia sẻ (Shared-memory) Nhà Sản Xuất (Producer) item next_produced; ! ! while (true) { ! /* produce an item in next produced */! ! while (((in_item + 1) % BUFFER_SIZE) == out_item) ! ; /* do nothing */! ! buffer[in_item] = next_produced; !! in_item = (in_item + 1) % BUFFER_SIZE; ! } TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 26
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Bộ nhớ chia sẻ (Shared-memory) Người Tiêu Dùng (Consumer) item next_consumed; while(true){ while(in_item == out_item) ; /* do nothing */ next_consumed = buffer[out_item]; out_item = (out_item + 1) % BUFFER_SIZE; /* consume the item in next consumed */ } TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 27
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Truyền thông điệp (Message passing) Truyền Thông Điệp (Message Passing) I Giao tiếp giữa các tiến trình không cần dùng bộ nhớ chia sẻ ⇒ hữu ích trong môi trường phân tán, giao tiếp qua mạng. I Cần hai thao tác: send(msg) và receive(msg). I Tiến trình P và Q muốn giao tiếp với nhau: I Tạo một nối kết giao tiếp (communication link) I Trao đổi thông điệp thông qua send/receive I Phương thức cài đặt nối kết giao tiếp (mức luận lý): I Giao tiếp trực tiếp hay gián tiếp I Đồng bộ hay bất đồng bộ I Kích thước thông điệp cố định hay biến đổi TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 28
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Truyền thông điệp (Message passing) Giao Tiếp Trực Tiếp (Direct Communication) I Các quá trình phải được đặt tên rõ ràng: I Send(P, msg): gởi thông điệp tới quá trình P. I Receive(Q, msg): nhận thông điệp từ quá trình Q. I Các thuộc tính của nối kết giao tiếp: I Các nối kết được thiết lập tự động. I Một nối kết kết hợp với chính xác một cặp quá trình. I Giữa mỗi cặp quá trình tồn tại chính xác một nối kết. I Nối kết có thể một hướng, nhưng thường là hai hướng. I Giao tiếp bất đối xứng: Send(P, msg), Receive(id, msg). TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 29
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Truyền thông điệp (Message passing) Giao Tiếp Gián Tiếp (Indirect Communication) I Các thông điệp được gửi và nhận thông qua mailbox hay port. I Mỗi mailbox có một định danh (id) duy nhất. I Các quá trình chỉ có thể giao tiếp nếu chúng dùng chung mailbox. I Send/Receive(A, msg): gởi/nhận thông điệp tới/từ hộp thư A. I Các thuộc tính của nối kết gián tiếp: I Nối kết chỉ được thiết lập nếu các quá trình chia sẻ một hộp thư chung. I Một nối kết có thể kết hợp với nhiều quá trình. I Mỗi cặp quá trình có thể dùng chung nhiều nối kết giao tiếp. I Nối kết có thể một hướng hay hai hướng. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 30
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Truyền thông điệp (Message passing) Các Tác Vụ Trong Giao Tiếp Gián Tiếp I Các tác vụ cơ bản: tạo mailbox mới, gửi và nhận thông điệp qua mailbox, và xóa mailbox. I Chia sẻ mailbox: I Các tiến trình có thể chia sẻ cùng 1 mailbox. I Vấn đề: nếu 1 tiến trình gửi thì tiến trình nào sẽ nhận? I Giải pháp cho việc chia sẻ mailbox: I Một liên kết chỉ tương ứng với 2 tiến trình. I Chỉ cho phép 1 tiến trình thực hiện thao tác nhận tại 1 thời điểm. I HĐH chỉ định tiến trình nhận (1 tiến trình), và thông báo cho tiến trình gửi biết người nhận. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 31
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Truyền thông điệp (Message passing) Đồng Bộ Hóa (Synchronisation) I Truyền thông điệp có thể chặn (blocking) hay không chặn (non-blocking). I Blocking được xem là đồng bộ (synchronous): I Blocking send: tiến trình gửi chờ cho đến khi thông điệp được nhận. I Blocking receive : tiến trình nhận chờ cho đến khi thông điệp sẵn sàng . I Non-blocking được xem là bất đồng bộ (asynchronous): I Non-blocking send: gửi thông điệp và tiếp tục thực hiện công việc khác. I Non-blocking receive: nhận một thông điệp hay rỗng. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 32
- [CT107] Ch3. Tiến trình Hợp tác Tiến trình (Cooperating process) Truyền thông điệp (Message passing) Tạo Vùng Đệm (Buffering) I Vùng đệm dùng để chứa các thông điệp của 1 nối kết. I Ba cách cài đặt: I Sức chứa là0 (zero capacity): tiến trình gửi bị chặn đến khi thông điệp được nhận (no buffering!?). I Sức chứa giới hạn (bounded capacity): kích thước vùng đệm giới hạn n thông điệp. Tiến trình gửi bị chặn khi vùng đệm bị đầy. I Sức chứa không giới hạn (unbounded capacity): kích thước không giới hạn. Tiến trình gửi không bao giờ bị chặn. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 33
- [CT107] Ch3. Tiến trình Giao tiếp trong hệ thống Client–Server Giao Tiếp Trong Hệ Thống Client–Server I Có 3 phương pháp cơ bản thường được dùng để giao tiếp trong mô hình client–server: I Socket I Remote Procedure Calls (RPCs) I Pipe (ống dẫn) I Các phương pháp chia sẻ bộ nhớ và truyền thông điệp cũng có thể dùng cho giao tiếp client–server. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 34
- [CT107] Ch3. Tiến trình Giao tiếp trong hệ thống Client–Server Giao tiếp bằng Socket Socket I Socket là một điểm nút của giao tiếp (endpoint of communication) của hai tiến trình. I Hình thành từ 1 địa chỉ IP và 1 số hiệu cổng (port, 0–65535). I Socket 192.168.10.20:8080 là socket có cổng 8080 trên máy 192.168.10.20 I Mỗi cặp tiến trình giao tiếp dùng 1 cặp socket – 1 client socket và 1 server socket. I Số hiệu cổng của client socket được gán tự động khi tạo ra, còn số hiệu cổng của server socket phải khai báo tường minh. I Các tiến trình trong cùng hệ thống không được dùng port trùng nhau. TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 36
- [CT107] Ch3. Tiến trình Giao tiếp trong hệ thống Client–Server Giao tiếp bằng Socket Mô Hình Giao Tiếp Dùng Socket host X (146.86.5.20) socket (146.86.5.20:1625) web server (161.25.19.8) socket (161.25.19.8:80) TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 37
- [CT107] Ch3. Tiến trình Giao tiếp trong hệ thống Client–Server Giao tiếp bằng Socket Date Server public static void main(String[] args) { try { ServerSocket sock = new ServerSocket(6013); /* now listen for connections */ while (true) { Socket client = sock.accept(); PrintWriter pout = new PrintWriter(client.getOutputStream(), true); ! /* write the Date to the socket */ pout.println(new java.util.Date().toString()); ! /* close the socket and resume listening */ client.close(); } } catch (IOException ioe) { System.err.println(ioe); } } TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 38
- [CT107] Ch3. Tiến trình Giao tiếp trong hệ thống Client–Server Giao tiếp bằng Socket Date Client public static void main(String[] args) { ! try { ! /* make connection to server socket */ ! Socket sock = new Socket("127.0.0.1",6013); ! InputStream in = sock.getInputStream(); ! BufferedReader bin = new ! BufferedReader(new InputStreamReader(in)); ! ! /* read the date from the socket */ ! String line; ! while ( (line = bin.readLine()) != null) ! System.out.println(line); ! /* close the socket connection*/ ! sock.close(); ! } ! catch (IOException ioe) { ! System.err.println(ioe); ! } ! }! TS. Trần Công Án (Khoa CNTT&TT) [CT107] Ch3. Tiến trình 39