Chào mừng bạn đến với Vimentor!

Tiến trình là gì

Quy trình – Quy trình là một khái niệm cơ bản trong bất kỳ hệ điều hành nào. Một quy trình có thể được định nghĩa là một thực thể chương trình đang chạy trong hệ thống. Máy chủ web chạy trên thiết bị là một quy trình hoặc chương trình xử lý văn bản chạy trên thiết bị cũng là một quy trình.

Ví dụ khác: cùng một chương trình soạn thảo (chẳng hạn như chương trình quen thuộc vim), người dùng mở 16 chương trình vim để thao tác với 16 tệp khác nhau, chúng ta để 16 quy trình đó hoạt động đang chạy trong hệ thống.

Bạn đang xem: Tiến trình là gì

Bài viết này sẽ giới thiệu về các tiến trình, tiến trình nhẹ và luồng trong linux.

Quy trình-Quy trình

Như đã đề cập trước đó, một quy trình là một thực thể chương trình đang thực thi. Nó là một tập hợp các cấu trúc dữ liệu mô tả đầy đủ quá trình chạy của chương trình trong hệ thống.

Một tiến trình trải qua quá trình giống như một con người: nó được sinh ra, cuộc sống của nó có thể có rất ít hoặc không có ý nghĩa gì, nó có thể sinh ra một hoặc nhiều tiến trình con, và thậm chí, nó có thể chết. Sắc thái duy nhất: Các quy trình không có giới tính. Mỗi process chỉ có một parent (hoặc có thể gọi là parent, trong khóa học sẽ gọi là parent j).

Từ quan điểm của nhân, một tiến trình là một thực thể tiêu thụ tài nguyên hệ thống (thời gian sử dụng cpu, bộ nhớ, …)

Khi tiến trình con được tạo, nó gần như giống hoàn toàn với tiến trình cha. Tiến trình con sao chép toàn bộ không gian địa chỉ, thực thi mã nguồn giống như tiến trình cha và bắt đầu chạy mã riêng của tiến trình con từ thời điểm hàm tạo tiến trình mới được gọi.

Mặc dù tiến trình cha và tiến trình con chia sẻ mã nguồn của chương trình nhưng chúng có dữ liệu riêng biệt (ngăn xếp và đống). Điều này có nghĩa là những thay đổi dữ liệu do tiến trình con thực hiện sẽ không ảnh hưởng đến dữ liệu trong tiến trình cha.

Ví dụ để minh họa khái niệm:

Đầu ra khi chương trình chạy:

Chào mừng bạn đến với Vimentor!

Trong ví dụ trên, tiến trình con được tạo ra từ tiến trình cha. Sử dụng lệnh ps trong linux chúng ta sẽ thấy có 2 tiến trình tên là test đang chạy trong hệ thống.

Xem thêm:  Sách giáo khoa ngữ văn lớp 9 tập 1

Xem thêm: Văn mẫu lớp 10: Phân tích nhân vật Tấm trong truyện Tấm Cám Dàn ý & 15 bài phân tích nhân vật Tấm

Tiến trình con kế thừa biến đếm từ tiến trình cha. Tuy nhiên, việc thay đổi biến đếm trong process cha và process con không ảnh hưởng đến nhau.

luồng – luồng người dùng

luồng – Một luồng người dùng (khác với luồng nhân) là một luồng thực thi mã nguồn trong một quy trình. Một quy trình chứa nhiều luồng thực thi như vậy được gọi là quy trình đa luồng.

Các luồng trong một quy trình chỉ có ý nghĩa đối với quy trình đó (không thể nhìn thấy từ bên ngoài), chúng chia sẻ dữ liệu được sử dụng trong quy trình. Vì vậy, khác với tiến trình cha-con, sự thay đổi dữ liệu trong luồng này sẽ ảnh hưởng đến luồng khác.

Ví dụ về luồng: Một ứng dụng cờ vua đơn giản đang chạy trong thời gian chạy cũng là một quy trình đa luồng. Khi ứng dụng đang chạy, ứng dụng sẽ phải đợi nước đi của người chơi được hiển thị trên hình ảnh (đây sẽ là một luồng), và sẽ phải tính toán nước đi tiếp theo của máy để thắng người chơi (đây là lần thứ hai). stream). Hai luồng chia sẻ chung dữ liệu về chuyển động của người chơi, nhưng vẫn chạy song song và làm 2 công việc khác nhau.

Tuy nhiên, từ quan điểm của hạt nhân, một quy trình đa luồng hoàn toàn giống với một quy trình bình thường khác. Ví dụ: chúng tôi đang chạy 3 quy trình, 2 quy trình có 1 luồng, 1 quy trình có 3 luồng. Khi kernel lên lịch cho 3 tiến trình, tiến trình có 3 luồng vẫn chỉ chiếm 1/3 thời gian hoạt động của cpu, giống như 2 luồng còn lại. Điều này có nghĩa là việc tạo, quản lý và lên lịch các chuỗi trong một quy trình sẽ được thực hiện hoàn toàn trong không gian người dùng.

Ngày nay, hầu hết các quy trình đa luồng đều được viết bởi thư viện chuẩn pthreads (các luồng posix).

Một ví dụ về chương trình đa luồng:

Trong ví dụ này, quá trình thử nghiệm tạo ra 2 luồng.

Xem thêm:  1000 hình ảnh dễ thương, cute nhất hiện nay giới trẻ săn lùng

Hai luồng chia sẻ cùng một biến đếm. Khi giá trị của biến đếm thay đổi trong một luồng, luồng kia cũng “biết” về sự thay đổi đó.

Kết quả chạy chương trình:

Chào mừng bạn đến với Vimentor!

Quy trình gọn nhẹ

Như đã đề cập trước đó, một quy trình đa luồng xuất hiện trong kernel giống hệt như bất kỳ quy trình đơn luồng nào khác, vì vậy kernel sẽ cung cấp cùng một tài nguyên hệ thống (thời gian sử dụng cpu) giữa các quy trình, quy trình đa luồng và quy trình đơn luồng . Điều này làm cho các quy trình đa luồng không được tốt lắm.

Xem Thêm: Tập làm văn lớp 4: Tả con vật trong vườn bách thú (54 mẫu) Tả con vật trong sở thú

Trở lại ví dụ về ứng dụng cờ vua đã đề cập ở trên. Trong khi chuỗi đầu tiên (chờ hành động của người chơi xuất hiện trên hình ảnh) được thực thi, chuỗi thứ hai (tính toán nước đi tiếp theo của máy) sẽ tiếp tục chạy, sử dụng thời gian suy nghĩ của người chơi để thực hiện nước đi tốt nhất.

Tuy nhiên, giả sử luồng đầu tiên thực hiện một số lệnh gọi hệ thống chặn, thì luồng thứ hai cũng sẽ bị chặn. Lý do là vì hạt nhân xử lý một quy trình đa luồng giống như bất kỳ quy trình đơn luồng bình thường nào khác, vì vậy khi luồng đầu tiên thực hiện lệnh gọi hệ thống chặn, hạt nhân sẽ coi đó là một hành động cho toàn bộ quy trình và chặn lại toàn bộ quy trình. Do đó, đa luồng không tối ưu cho ứng dụng.

Linux sử dụng các quy trình nhẹ để cung cấp phương pháp thực thi tối ưu hơn cho các ứng dụng đa luồng. Về cơ bản, hai quy trình nhẹ có thể chia sẻ và sử dụng cùng một tài nguyên hệ thống, chẳng hạn như không gian địa chỉ, tệp… Khi một quy trình nhẹ thay đổi tài nguyên được chia sẻ, quy trình nhẹ kia có thể thấy sự thay đổi đó.

Quy trình nhẹ là một quy trình, nhưng nó không có các tài nguyên và không gian địa chỉ độc lập như khái niệm quy trình chung. Chúng có thể chia sẻ và sử dụng cùng một tài nguyên với nhau như khái niệm luồng không gian người dùng.

Xem thêm:  Văn mẫu lớp 9: Cảm nhận của em về bài thơ Mùa xuân nho nhỏ của Thanh Hải Dàn ý & 13 bài văn mẫu hay nhất lớp 9

Sự khác biệt giữa quy trình nhẹ và luồng là hạt nhân xử lý quy trình nhẹ như một quy trình thông thường, vì vậy hạt nhân sẽ cung cấp tài nguyên hệ thống và sắp xếp công việc cho quy trình nhẹ. Vì vậy, nếu hệ thống chạy hai tiến trình, một tiến trình tiền xử lý đơn luồng và một tiến trình đa luồng nhẹ, thì tiến trình đa luồng sẽ chiếm 2/3 thời gian sử dụng cpu.

Phương pháp cơ bản để tạo các ứng dụng đa luồng là gán từng luồng cho một quy trình nhẹ. Có nhiều thư viện luồng sử dụng phương pháp này, ví dụ: linuxthreads, thư viện luồng posix gốc (nptl)  …

Quay lại ví dụ về ứng dụng cờ vua: Nếu hai luồng của ứng dụng được chia thành hai quy trình nhẹ, thì luồng một được sử dụng (chờ nước đi của người chơi được hiển thị trên hình ảnh) và nếu lệnh gọi hệ thống chặn được thực hiện, thì Luồng thứ hai (tính toán bước đi tiếp theo của máy) vẫn thực thi liên tục vì kernel sẽ lên lịch làm việc cho luồng thứ hai.

hiển thị tiến độ nhẹ: Chạy lại chương trình ví dụ bằng chuỗi bên trên và sử dụng lệnh ps với các tùy chọn “-fl -c”. Cột lwp hiển thị số lượng quy trình hạng nhẹ do quy trình thử nghiệm sở hữu. kiểm traQuy trình sẽ có 3 quy trình nhẹ, 1 quy trình chính và 2 quy trình nhẹ phụ tương ứng với 2 luồng phụ đã tạo (luồng 1 và luồng 2)

Chào mừng bạn đến với Vimentor!

Mối quan hệ quy trình-luồng-nhẹ:

Chào mừng bạn đến với Vimentor!

Sơ đồ trên mô tả mối quan hệ quy trình-luồng-ánh sáng-quy trình. Một quy trình đang chạy trong hệ thống có thể bao gồm nhiều luồng người dùng, một luồng được liên kết trực tiếp với một quy trình nhẹ một-một hoặc nhiều luồng có thể được liên kết với một quy trình nhẹ nhiều-một. Việc thực hiện và lập lịch trình của các quy trình nhẹ được thực hiện bởi kernel.

Sau khi đọc bài viết này, bạn đã có khái niệm về quy trình, luồng và quy trình nhẹ trong Linux. Bài tiếp theo sẽ đi sâu vào trạng thái của các tiến trình và cách kernel quản lý các tiến trình trong hệ thống.

Xem thêm: Bot là gì? Top là gì? Top và bot là gì trong cộng đồng LGBT?

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *