Vietnamese Developers' Blog

Processes and Multi-process Programming (1)

Posted in Unix/Linux/BSD by Hoang Tran on the October 16th, 2007

Thực sự khi đọc đi đọc lại bài viết về fork() tôi cảm thấy nó rất là tệ vì quá sơ sài, không làm nổi bật được vai trò của process trong operating system, sự phức tạp của nó cũng như ưu điểm của multi-process programming. Nó đơn giản chỉ là viết về một system call fork() mà thôi, và điểm cơ bản là không thấy được multi-process programming có thể giúp cho hệ thống trở nên mạnh mẽ như thế nào.

Khái niệm trọng tâm trong tất cả các hệ điều hành (operating system) là process (tiến trình). Một process về cơ bản chỉ là một chương trình có thể thực thi. Đi cùng với process là một không gian địa chỉ (address space) – vùng nhớ (từ tối thiểu, thông thường là 0, đến cực đại) mà process có thể đọc và ghi. Không gian địa chỉ này bao gồm đoạn mã thực thi, dữ liệu và stack của nó. Cũng đi cùng với mỗi process là một tập các thanh ghi, bao gồm program counter, stack pointer, các thanh ghi khác và tất cả các thông tin cần thiết để chạy chương trình.

Tất cả các hệ điều hành tiên tiến chạy trên các máy tính cá nhân bây giờ đều là multi-process, có nghĩa là cho phép chạy nhiều process “cùng lúc”. Hệ điều hành sẽ là trung tâm quản lý các process, nó sẽ quyết định khi nào thì dừng một process và start hay tiếp tục một process khác. Khi một process được tạm dừng kiểu này, thì nó sau đó phải được restart tại chính trạng thái mà nó bị dừng. Điều đó có nghĩa là tất cả các thông tin của process phải được lưu ở đâu đó bên ngoài trong lúc tạm dừng. Ví dụ một process có thể đang mở một vài file để đọc. Với mỗi file này thì có một con trỏ chỉ đến vị trí đang đọc trong file. Khi một process bị tạm thời dừng lại, thì tất cả các con trỏ này phải được ghi lại để sau đó các lệnh tiếp theo đối với file đang mở sẽ có được dữ liệu chính xác khi process được tiếp tục. Trong rất nhiều hệ điều hành, các thông tin về mỗi process được lưu vào trong một bảng được gọi là process table (là một mảng hay link-list mà mỗi phần tử là process đang tồn tại). Vì vậy mỗi process bao gồm không gian địa chỉ của nó, thường được gọi là core image, và một entry trong process table mà chứa đựng thanh ghi của nó và những thứ khác.

Những system calls quan trọng nhất trong process management là những lệnh liên quan đến quá trình tạo và huỷ process. Hãy xem xét một ví dụ điển hình: một process gọi command interpreter hay shell để đọc lệnh từ terminal. User gõ lệnh yêu cầu chương trình được dịch, và shell phải tạo ra một process mới mà chạy trình biên dịch. Khi process kết thúc quá trình biên dịch, nó thực hiện một system call để huỷ chính nó.

Nếu một process tạo ra một hay nhiều process khác (thường được gọi là child processes) và những process đó lại có thể tạo ra những process con, chúng ta sẽ có một cấu trúc cây process (process tree structure). Việc trao đổi thông tin giữa các process để đồng bộ các hành động giữa các process được gọi là interprocess communication (IPC) cũng là một vấn đề lớn trong multi-process programming.

Xây dựng ứng dụng multi-process là một công việc khó khăn. Process khi hoạt động phải luôn ở trạng thái tôn trọng và sẵn sàng nhường quyền xử lý CPU cho các process khác ở bất kỳ thời điểm nào, khi hệ thống yêu cầu. Nếu process xây dựng không tốt, thì khi nó đổ vỡ và gây ra lỗi thì có thể làm treo các process khác hay thậm chí phá vỡ hệ điều hành (treo).

Tagged with:

One Response to 'Processes and Multi-process Programming (1)'

Subscribe to comments with RSS or TrackBack to 'Processes and Multi-process Programming (1)'.

  1. ngOhoangminh said, on March 31st, 2010 at 10:19 pm

    sao phần này quan trọng lại viết ngắn vậy tác giả ?

Leave a Reply