IPC là gì

Interprocess Communication

by Admin


Đăng vào Mon Nov 20 2017



Một process (tiến trình) trong hệ điều hành có thể được tiến hành độc lập hoặc giao tiếp với nhau. Process độc lập là khi process không ảnh hưởng hoặc bị ảnh hưởng bởi các process khác trong hệ thống, và không chia sẻ data với bất kì process nào. Process giao tiếp khi process đó có thể ảnh hưởng hoặc bị ảnh hưởng bởi các process khác trong hệ thống, và sự chia sẻ data có diễn ra.

 

Vì sao các process phải 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 giữa các users.
  • Giúp speech up các tác vụ trong máy tính.
  • Giúp xây dựng modun.
  • Giúp thuận tiện trong chạy nhiều tác vụ cùng một lúc.

 

IPC là viết tắt của từ gì?

Interprocess communication (hay còn gọi là IPC) – 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.

 

Hai models chính của IPC là 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.

 

Cả hai model trên đều phổ biến trong các hệ điều hành. Model message passing hữu ích cho việc trao đổi số lượng nhỏ các data và dễ thực hiện hơn trong hệ cơ sở dữ liệu phân tán - hệ thống phân tán (distributed system). Ngược lại, shared memory có thể nhanh hơn message passing vì các hệ thống truyền thông điệp thường thực hiện thông qua system call (mà chúng tốn nhiều thời gian hơn và phải có sự can thiệp của kernel – nhân hệ điều hành).

 

Trong hệ thống shared memory, các system call chỉ thực hiện khi cần thiết lập các vùng bộ nhớ chung. Một khi đã thiết lập xong, việc truy cập trở thành truy cập bộ nhớ thông thường, không cần sự hỗ trợ của kernel.

Các nghiên cứu gần đây đã chỉ ra rằng message passing tốt hơn shared memory khi sử dụng trong các hệ thống core processing vì các sự cố đồng bộ cache mà shared memory dễ gặp phải khi các data chạy qua caches.

 

mo ta IPC

 

 

Shared-Memory Systems

IPC sử dụng model shared memory sẽ cần những process tham gia mở một vùng nhớ chung. Vùng nhớ chung này được tạo thành từ nhiều vùng nhớ riêng của mỗi process.

 

Các process khác muốn tiếp cận vùng nhớ đó sẽ phải lưu địa chỉ của vùng nhớ chung ấy vào vùng nhớ riêng của mình . Mà thông thường, các hệ điều hành sẽ chặn không cho các process xâm nhập bộ nhớ của nhau.

 

Để sử dụng model shared memory, các process cần cho phép việc truy cập bộ nhớ của nhau để có thể sử dụng và viết data trên vùng chia sẻ chung. Các tiến trình sẽ quyết định kiểu data nào được chia sẻ và vùng chia sẻ chung ở đâu. Tất nhiên chúng phải bảo đảm các vùng chia sẻ chung không bị ghi đè lên nhau.

 

Một ví dụ đơn giản về việc ăn ở quán ăn cho model này. Giả sử, bạn gọi 10 phần ăn,, các món ăn được đem lên dần dần. Cho thức ăn là data cần truyền, người ăn là process cần data và đầu bếp là process cung cấp data. Việc đầu bếp và người ăn cùng thực hiện nhiệm vụ của mình trong cùng thời điểm để đảm bảo thời gian ăn không bị ngắt quãng và lâu. chính là cơ chế IPC. Và chi tiết hơn, họ cùng share một lượng data/ thức ăn. Với điều kiện, người ăn không được ăn (write data) lên phần mà đầu bếp chưa chế biến.



Message-Passing Systems

Bên cạnh việc dùng shared memory, một cách khác để liên kết các process lại với nhau là sử dụng message passing.

Message passing cung cấp một cơ chế cho phép các tiến trình qua lại và đồng bộ các thao tác mà không cần chia sẻ address space của nhau. Điều này đặc biệt hữu ích trong những hệ cơ sở dữ liệu phân tán, nơi mà các process nằm trên các máy tính khác nhau kết nối qua hệ thống mạng. Một ví dụ đó là chương trình chat qua Internet được thiết kế để người dùng kết nối với nhau thông qua việc trao đổi các tin nhắn.

 

Cơ sở truyền in cung cấp ít nhất hai nguồn:

Gửi (tin)                       <=>                       nhận (tin)

Các tin gửi bằng process có thể cố định hoặc biến đổi về kích thước. Nếu chỉ có thể gửi tin nhắn có kích thước cố định thì việc triển khai cấp hệ thống là đơn giản. Tuy nhiên, hạn chế này làm cho nhiệm vụ lập trình trở nên khó khăn hơn. Ngược lại, các thông báo có kích thước thay đổi yêu cầu thực hiện cấp hệ thống phức tạp hơn, nhưng nhiệm vụ lập trình trở nên đơn giản hơn. Đây là một sự cân bằng thông thường được thấy trong suốt quá trình thiết kế hệ điều hành.

 

Ví dụ, nếu process P và Q muốn trao đổi, các tin cần phải được gửi và nhận giữa hai đầu: một liên kết truyền tin phải tồn tại giữa hai process. Liên kết này có thể được thực hiện bằng nhiều cách khác nhau, không phải thông qua các kết nối vật lý (như shared memory, hardware bus, hoặc mạng) mà là với các kết nối logic. Dưới đây là một số phương pháp để thực hiện hợp lý một liên kết và các hoạt động send () / receive ():

  • Kết nối trực tiếp hoặc gián tiếp

o   Đối với kết nối trực tiếp: mỗi process muốn truyền tin cần phải đặt tên cho tin nhắn hoặc tên người gửi

  •  Symmetry: cần cả tên người gửi và tên tin nhắn để process đó thực hiện thao tác gửi
  •  Asymmertry: chỉ cần tên tin nhắn là process đó có thể gửi cho bất kì process nào khác

o   Đối với kết nối gián tiếp: các tin được nhận thông qua các hộp thư hoặc các cổng.

  •  Hộp thư:  
  • Nơi tin nhắn được gửi vào hoặc được lấy ra. Mỗi một hộp thư sẽ được xác định bởi 1 ID duy nhất. Các process có thể liên lạc với nhau thông qua nhiều hộp thư, nhưng chỉ khi các hộp thư đó được thiết lập như hộp thư chung giữa hai process.
  • Kết nối được đồng bộ hoặc không được đồng bộ - blocking và nonblocking

o   Chặn gửi: process gửi tin bị chặn cho đến khi tin nhắn đã được nhận bởi process còn lại hoặc tới khi tin vào hộp thư.

o   Không chặn gửi: process gửi tin xong thì tiếp tục hoạt động.

o   Chặn nhận: Process nhận tin chặn cho đến khi một tin nhắn có sẵn.

o   Không chặn nhận: process nhận tin sẽ nhận một tin hoàn chỉnh hoặc một giá trị null.

  • Bộ đệm tự động hoặc rõ ràng: trong bộ đệm có thể tồn tại các tin nhắn chờ tạm thời dưới ba hình thức:  

o   Zero capacity: bộ đệm không cho phép bất cứ tin nhắn chờ nào, cũng có nghĩa là process gửi tin sẽ bị chặn đến khi bên kia nhận tin.

o   Bounded capacity: sẽ có một giới hạn n các tin nhắn được chờ trong buffer. Có nghĩa là nếu vẫn chưa tới giới hạn, các tin có thể tiếp tục được tạo ra bởi process gửi tin. Nếu đã có n tin nhắn đang chờ được nhận, process này sẽ bị chặn đến khi hàng tin nhắn được trống (bên kia nhận tin)

o   Unbounded capacity: lượng tin nhắn chờ là vô tận, nghĩa là process gửi không bao giờ bị chặn.

Trường hợp zero capacity thường được xem là trường hợp giữa hai process không có bộ nhớ đệm, còn hai trường hợp bounded và unbound thì có bộ đệm giữa hai process.



Google Chrome

 

Ví dụ thực tế của IPC - trình duyệt Chrome



Như bạn đã biết, không như những trình duyệt khác (ví dụ Firefox phiên bản cũ, phiên bản mới thì mình không biết), thường có tình trạng đứng 1 tab là đứng hết cả trình duyệt. Nhưng trình duyệt Chrome thì không như vậy.

 

Đó là nhờ cơ chế multiprocess, mỗi tab của Chrome là một process độc lập với nhau, và chúng luôn chạy đồng thời với nhau.

 

Kiến trúc multiprocess của Chrome hoạt động trên cơ chế nhận biết 3 kiểu của process:

Brownser process: kiểm soát user interface, disk và network. Chỉ có duy nhất 1 process loại này.

Renderer process: bao gồm cách thức render/ hiển thị một trang web. Mỗi lần bạn bật 1 tab mới, Chrome sẽ tự động tạo 1 process loại này cho bạn. Renderer process chạy trên các sandbox, nghĩa là chúng không cho các process trên trình duyệt có khả năng tiếp cận ổ cứng, hệ thống mạng của người dùng, nhằm tăng độ bảo mật.

Plug-in process: hay còn gọi là extension trên trình duyệt, đây là loại process cần được giao tiếp với hai loại process còn lại. (Ví dụ: Flash)


Để lại bình luận:
Curious developer
Tech seeker
Search