Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ điều kiện không deadlock trong Hệ điều hành


Cho P tiến trình trong bộ nhớ và N tài nguyên cần thiết bởi chúng để hoàn thành thực thi. Nhiệm vụ là tìm số tài nguyên tối thiểu R cần cấp phát cho các tiến trình sao cho deadlock không bao giờ xảy ra.

Deadlock là gì?

Deadlock là tình huống trong hệ điều hành nơi nhiều tiến trình trong bộ nhớ không thể thực thi vì tài nguyên cần thiết cho thực thi chương trình đang bị giữ bởi tiến trình khác đang chờ tài nguyên khác để hoàn thành.

Giả sử có hai tiến trình P1 và P2 trong bộ nhớ, P1 cần tài nguyên R1, P2 cần R2. Deadlock xảy ra khi P1 giữ R2 và chờ R1, tương tự P2 giữ R1 và chờ R2.

Chương trình C++ điều kiện không deadlock trong Hệ điều hành

Đây là ví dụ của chờ vòng tròn - một nguyên nhân của deadlock. Vì vậy, để ngăn chặn deadlock, cần tính số tài nguyên nên có sẵn cho các tiến trình sao cho deadlock không xảy ra.

Điều kiện không Deadlock

R ≥ P * (N - 1) + 1

trong đó, R là Tài nguyên, P là Tiến trình, N là Nhu cầu của tiến trình

Ví dụ

Input: processes = 5, need = 3 Output: minimum required resources are: 11
Input: Processes = 7, need = 2 Output: minimum required resources are: 8

Phương pháp dùng trong chương trình dưới −

  • Nhập số tiến trình và nhu cầu của tiến trình trong bộ nhớ
  • Áp dụng công thức cho trước để tính số tài nguyên cần
  • Hiển thị kết quả

Thuật toán

BẮT ĐẦU
Bước 1: khai báo hàm tính tài nguyên tối thiểu
    int min_resource(int process, int need)
    Khai báo int calculate = 0
    Gán calculate = process * (need - 1) + 1
    return calculate
Bước 2: Trong main()
    Khai báo int process = 5 và need = 3
    Gọi min_resource(process, need)
KẾT THÚC

Ví dụ

#include <bits/stdc++.h>
using namespace std;
// tính tài nguyên tối thiểu
int min_resource(int process, int need) {
    int calculate = 0;
    calculate = process * (need - 1) + 1;
    return calculate;
}
int main() {
    int process = 5, need = 3;
    cout << "Tài nguyên tối thiểu cần: " << min_resource(process, need);
    return 0;
}

Kết quả

Tài nguyên tối thiểu cần: 11