Tiến trình trong hệ điều hành là gì

Những chiếc máy tính những năm đầu được chế tạo và phát triển chỉ cho phép một chương trình được chạy tại một thời điểm. Do vậy, chương trình đang chạy ấy có quyền điều khiển cả hệ thống, cũng như tất cả tài nguyên của chiếc máy tính. Sau đó, xuất hiện hệ thống cho phép nhiều chương trình cùng chạy. Dẫn tới việc cần phân rõ quyền điều khiển cũng như sự phân chia tài nguyên của hệ thống cho các chương trình đang chạy.

Show

Từ đó xuất hiện khái niệm về quá trình (process). Quá trình là chương trình đang được thực thi, và cũng là một đơn vị vận hành trong những hệ thống máy tính hiện đại.

ĐỊNH NGHĨA

Những “công việc” mà hệ điều hành thực hiện gọi là quá trình, dù tên gọi chúng khác nhau tùy vào cấu trúc hệ điều hành (batch system hay time-shared system).

Nhắc lại về định nghĩa, một process là một chương trình đang được thực thi (đang chạy). Nhưng, một chương trình không phải là một process. Vì chương trình là một file, hay một folder bị động nằm trên máy; Trong khi đó, một process là một chương trình đang hoạt động (đang chạy, đã được tải lên bộ nhớ chính để hoạt động).

Một chương trình có thể có hai (hay nhiều) process đang chạy, nhưng chúng được coi là hai (hay nhiều) quá trình độc lập với nhau.

Hơn những thế, một process có thể là môi trường thực thi (execution environment) cho những dòng code khác. Ví dụ: các chương trình của Java cần được chạy trong Java Virtual Machine (JVM).

Tiến trình trong hệ điều hành là gì

  • New: process mới được tạo.
  • Running: process đang được thực thi/ chạy.
  • Waiting: process đợi I/O hoặc tín hiệu nào đó.
  • Ready: process sẵn sàng được CPU chạy.
  • Terminated: process hoàn thành việc.

Note: Những process của một chương trình cần phải tải lên bộ nhớ chính (cụ thể là RAM) trước khi được CPU nhận và thực hiện những yêu cầu của chương trình.

Các bước chuyển quá trình của process:

(1): Những process được chương trình tạo ra, được sắp vào “hàng chờ” (hay còn gọi là stack).

(2): Process được CPU thấy và thực thi.

(3): Khi process quá bự, CPU phải nhả để thực hiện process khác. (bạn có thể tìm hiểu các thuật toán xử lý process của CPU)

(4): Khi process đã được thực hiện xong.

(5): Khi process đang thực hiện và yêu cầu I/O hay các tín hiệu khác. (ví dụ bạn cần file word in ra, process sẽ phải nói cho CPU, CPU gửi tín hiệu cho máy in, máy in in ra rồi báo lại CPU. Trong thời gian đó, để tiết kiệm thời gian, process này sẽ được chuyển qua trạng thái chờ, cho process khác vào thực hiện)

(6): Sau khi I/O hay tín hiệu đã đến, process được sắp lại vào “hàng chờ”, chờ thực thi.

Process Block Control

Mỗi process khi tạo ra sẽ được lưu thông tin tại một PCB tương ứng.

Những thông tin được chứa trong PCB:

Trạng thái của process: 1 trong 5 trạng thái được liệt kê bên trên Bộ đếm (program counter): chứa địa chỉ (hay trong ngôn ngữ lập trình C, ta gọi nó là con trỏ/ pointer) đến lệnh cần thực thi tiếp theo Thanh ghi CPU: có kiểu khác nhau tùy vào kiến trúc máy tính Thông tin định thời CPU: độ ưu tiên của các process, quy định process nào thì thực thi trước Thông tin quản lý bộ nhớ: tùy hệ thống bộ nhớ của từng hệ điều hành Trạng thái của các tín hiệu I/O: danh sách các I/O được sử dụng bởi các process

Thông tin về số lượng CPU, thời gian sử dụng thực tế, thời gian process được giữ CPU tối đa

Tham khảo bài viết nguyên mẫu tại bài viết về Process là gì

gintakao 06-01-2019

Tiến trình trong hệ điều hành là gì

{{userFollowed ? 'Following' : 'Follow'}}

Bài viết liên quan

Tiến trình trong hệ điều hành là gì

1 5

fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...

Tiến trình trong hệ điều hành là gì

4 0

I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...

Tiến trình trong hệ điều hành là gì

25 1

Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...

Chạy chương trình Program.cs và xem tiến trình trong Task Manager (thiết lập vòng lặp trong hàm Main khoảng 1000 lần để dễ quan sát):

Tiến trình trong hệ điều hành là gì


Tiểu trình là gì?

Một tiến trình có thể tạo nhiều tiểu trình, mỗi tiểu trình thực hiện một chức năng cụ thể.

Các tiểu trình trong cùng một tiến trình dùng chung không gian địa chỉ của tiến trình nhưng có con trỏ lệnh, tập các thanh ghi và stack riêng.

Tiểu trình cũng là đơn vị xử lý cơ bản trong hệ thống, nó cũng xử lý tuần tự đoạn mã của nó, các tiểu trình cũng chia sẻ thời gian xử lý của CPU như các tiến trình.

Các tiểu trình trong một tiến trình chia sẻ một không gian địa chỉ chung, điều này có nghĩa các tiểu trình có thể chia sẻ các biến toàn cục của tiến trình, có thể truy xuất đến stack của tiểu trình khác trong cùng tiến trình. Như vậy với mô hình tiểu trình, trong hệ thống có thể tồn tại nhiều dòng xử lý cùng chia sẻ một không gian địa chỉ bộ nhớ, các dòng xử lý này hoạt động song song với nhau.

Tiến trình trong hệ điều hành là gì


Giải thích đoạn mã trong Program.cs:

Chương trình Program.cs gồm hai tiểu trình: tiểu trình chính (Main) và tiểu trình example.

Để tạo thread trong C#:

Bước 1: Tạo một hàm cần thực thi riêng biệt, song song với tiểu trình chính (hàm Main). Ví dụ:

public void DisplayMessage() // hàm sẽ được chạy dưới hình thức một tiểu trình

    {

        for(int count = 0; count < iterations; count++)

        {

            Console.WriteLine("{0}:{1}", DateTime.Now.ToString("HH:mm:ss.ffff"), message);

            Thread.Sleep(delay);

        }

    }

Bước 2: Tạo tiểu trình bằng cách tạo ra một đối tượng thuộc lớp Thread, truyền vào phương thức khởi tạo tên hàm đã được tạo ở bước 1; gọi phương thức Start() để chạy tiểu trình. Ví dụ:  

public void MyThread() // tạo tiểu trình

    {

        Thread thread = new Thread(DisplayMessage); // tạo tiểu trình trỏ tới một hàm cụ thể

        Console.WriteLine("{0}:Starting new thread.",DateTime.Now.ToString("HH:mm:ss.ffff"));

        thread.Start(); // chạy tiểu trình

    }

Bước 3: Chạy tiểu trình chính (hàm Main), trong tiểu trình chính sẽ gọi tiểu trình được tạo ra ở Bước 2. Ví dụ:

    static void Main(string[] args)

    {

        Program example = new Program(500, "A thread example.", 500);

        example.MyThread(); // gọi và thực thi tiểu trình từ chương trình chính (main)

        for(int count = 0; count < 1000; count++)

        {

            Console.WriteLine("{0} : Continue processing...",

                DateTime.Now.ToString("HH:mm:ss.ffff"));

            Thread.Sleep(500);

        }

        Console.WriteLine("Main method complete. Press Enter.");

    }

Quan sát kết quả sẽ thấy các câu thông báo của hàm Main() và hàm DisplayMessage() được hiển thị đan xen nhau (do chạy song song). Trong các tiểu trình có dùng lệnh Sleep() để dừng chương trình một thời gian, giúp quan sát kết quả dễ hơn.

4.7.2 Tiểu trình dùng chung vùng nhớ

Như đã đề cập trong phần khái niệm tiểu trình: các tiểu trình trong cùng một tiến trình sẽ dùng chung không gian địa chỉ của tiến trình (trong RAM) nhưng có con trỏ lệnh, tập các thanh ghi và stack riêng.

Phần này sẽ viết một chương trình gồm tiểu trình chính (hàm Main) và hai tiểu trình con. Hai tiểu trình con sẽ tham chiếu tới cùng một biến (một vùng nhớ trên RAM). Biến dùng chung giữa hai tiểu trình con có tên là count; hai tiểu trình con có tên là TieuTrinhCong và TieuTrinhTru.

Ý tưởng của chương trình:

– Gán cho biến count giá trị ban đầu (ví dụ: count = 10)

– Tiểu trình chính (hàm Main) sẽ gọi hai tiểu trình con

– TieuTrinhCong(): sẽ tăng liên tục biến count lên 2500 lần

– TieuTrinhTru(): sẽ giảm liên tục biến count lên 2500 lần

– Sau khi chạy xong hai tiểu trình con, sẽ xuất giá trị của biến count trong tiểu trình chính để quan sát kết quả của biến count.

[Thread_Cong_Tru.cs]

using System;

using System.Threading;

class Thread_Cong_Tru

{

    private int count = 10;

    public void HamCong()

    {

        for(int i = 0; i < 2500; i++)

        {

            count = count + 1;

            Console.WriteLine("Gia tri count trong ham cong: " + count);

            Thread.Sleep(300);

        }

    }

    public void HamTru()

    {

        for (int i = 0; i < 2500; i++)

        {

            count = count - 1;

            Console.WriteLine("Gia tri count trong ham tru: " + count);

            Thread.Sleep(300);

        }

    }

static void Main(string[] args)

    {

        Thread_Cong_Tru test = new Thread_Cong_Tru();

        Console.WriteLine("Gia tri khoi tao cua bien count (trong tieu trinh Main): " + test.count);

        // tạo và chạy tiểu trình cộng

        Thread TieuTrinhCong = new Thread(test.HamCong);

        TieuTrinhCong.Start();

        // tạo và chạy tiểu trình trừ

        Thread TieuTrinhTru = new Thread(test.HamTru);

        TieuTrinhTru.Start();

        Console.WriteLine("Gia tri ket thuc cua bien count (trong tieu trinh Main): " + test.count);

    }

}

// Giá trị của biến count có thể là 9, 10, 11, 12, 13: do biến dùng chung này bị thao tác cùng lúc từ hai tiểu trình nên không thể kiếm soát được giá trị. Đây là lý do cần phải đồng bộ hóa giữa các tiến/tiểu trình.

---------------------------------------

Lab 8. Viết chương trình cho phép nhập một số nguyên dương, tìm các số nguyên tố và số chính phương từ 0 tới số vừa nhập. Sử dụng phương pháp lập trình tuần tự, nghĩa là cho người dùng nhập vào một số, chương trình sẽ chạy chức năng tìm và xuất số nguyên dương ra màn hình trước, sau đó sẽ chạy chức năng tìm và xuất số chính phương ra màn hình. (sử dụng ngôn ngữ lập trình tùy chọn)


Page 2