1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình mô phỏng các phương pháp kiểm tra tính an toàn của hệ

20 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 150,58 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

-��� -BÀI TẬP LỚN MÔN: NGUYÊN LÝ HỆ ĐIỀU HÀNH

ĐỀ TÀI: Lập trình mô phỏng các phương pháp kiểm tra

tính an toàn của hệ

Giảng viên : TS Nguyễn Bá Nghiễn

Nhóm số: 04

Lớp: IT6025.2 - K15

Hà Nội, 2022

Trang 2

Mục lục

Mục lục 1

Lời mở đầu 2

Chương I: Tìm hiểu về hiện tượng bế tắc 3

1.1 Khái niệm bế tắc 3

1.2 Điều kiện xảy ra bế tắc trong hệ thống 4

1.3 Các mức phòng tránh bế tắc 4

1.4 Ngăn chặn bế tắc và an toàn hệ thống 5

1.4.1 Ngăn chặn bế tắc 5

1.4.2 Dãy tiến trình an toàn 7

Chương II: Tìm hiểu về các phương pháp kiểm tra hệ an toàn 8

Chương III: Cài đặt thuật toán 10

3.1 Thuật toán chuyển sang trạng thái an toàn 10

3.2 Thuật toán kiểm tra tính an toàn của hệ 11

3.3 Cài đặt thuật toán 12

3.4 Ví dụ minh họa 16

Kết luận 17

Tài liệu tham khảo 18

Trang 3

Lời mở đầu

Công nghệ thông tin trong giai đoạn hiện nay đang phát triển như vũ bão ở mọi lĩnh vực hoạt động khắp nơi trên thế giới Điều xảy ra trong vòng vài năm qua ở Việt Nam là sự đầu tư ồ ạt vào công nghệ Tin học đã và đang

là một trong các vấn đề không thể thiếu đối với bất kỳ công ty nào Đặc biệt tin học ngày càng giữ vai trò quan trọng trong vấn đề quản lý tại các tổ chức nhất là tại các lĩnh vực thu thập thông tin Tuy ngành công nghệ thông tin ở nước ta mới chỉ phát triển trong vài năm trở lại đây và đang từng bước phát triển nhưng những bước phát triển đó đã cho thấy tiềm năng lớn lao trong lĩnh vực công nghệ thông tin ở nước ta, trong đó phát triển hệ thống thông tin đang

là thế mạnh của đất nước Hệ thống thông tin giúp công việc quản lý dễ dàng hơn, nâng cao hiệu quả sản xuất, tiết kiệm được lượng lớn thời gian và công sức

Qua thời gian học tập và tìm hiểu học phần “Nguyên lý hệ điều hành”, nhóm em đã chọn đề tài “Lập trình mô phỏng các phương pháp kiểm tra hệ an toàn” Báo cáo thực tập gồm có 3 chương sau:

● Chương I: Tìm hiểu về hiện tượng bế tắc

● Chương II: Tìm hiểu về các phương pháp kiểm tra hệ an toàn

● Chương III: Cài đặt thuật toán

Dưới sự hướng dẫn của giảng viên Nguyễn Bá Nghiễn chúng em đã tìm hiểu và hoàn thành đề tài được giao Mong các thầy (cô) góp ý để bài làm của chúng em được hoàn thiện hơn Chúng em xin chân thành cảm ơn!

Trang 5

Chương I: Tìm hiểu về hiện tượng bế tắc

1.1 Khái niệm bế tắc

Bế tắc là trạng thái trong hệ thống có ít nhất hai tiến trình đang dừng chờ lẫn nhau và chúng không thể chạy tiếp được, sự chờ đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài

Hầu hết các hệ điều hành không cung cấp phương tiện ngăn chặn bế tắc Vấn đề bế tắc chỉ trở thành vấn đề phổ biến, xu hướng hiện hành gồm số lượng lớn tiến trình, chương trình đa luồng, nhiều tài nguyên trên hệ thống và đặc biệt các tập tin có đời sống dài và những máy phục vụ cơ sở dữ liệu hơn

là hệ thống đóng

Giả sử rằng có ba Process P1, P2 và P3 Có ba tài nguyên khác nhau R1, R2

và R3 R1 được gán cho P1, R2 được gán cho P2 và R3 được gán cho P3

Sau một thời gian, P1 yêu cầu R1 đang được P2 sử dụng P1 tạm dừng Process thực thi của nó vì nó không thể hoàn thành nếu không có R2 P2 cũng yêu cầu R3 đang được P3 sử dụng P2 cũng dừng Process thực thi của nó vì nó không thể tiếp tục mà không có R3 P3 cũng yêu cầu R1 đang được P1 sử dụng

do đó P3 cũng dừng thực thi

Trong kịch bản này, một chu trình đang được hình thành giữa ba Process Không có Process nào đang diễn ra và tất cả đều đang chờ đợi Máy tính không phản hồi vì tất cả các Process đã bị chặn

Hình 1 Minh họa 3 Process thực thi

Trang 6

1.2 Điều kiện xảy ra bế tắc trong hệ thống

Hiện tượng bế tắc xảy ra khi và chỉ khi trong hệ thống tồn tại bốn điều kiện

- Có tài nguyên găng:

+ Một tài nguyên bị chiếm bởi một tiến trình và không tiến trình nào khác có thể sử dụng tài nguyên này

- Có hiện tượng giữ và đợi:

+ Một tiến trình giữ ít nhất một tài nguyên và chờ một số tài nguyên khác rỗi để sử dụng Các tài nguyên này đang bị một tiến trình khác chiếm giữ

- Không có hệ thống phân phối lại tài nguyên:

+ Tài nguyên bị chiếm giữ chỉ có thể rỗi khi tiến trình tự nguyện giải phóng tài nguyên sau khi đã sử dụng xong

- Có hiện tượng chờ đợi vòng tròn:

+ Một tập tiến trình {P0, P1, …, Pn} có xuất hiện điều kiện “chờ vòng” nếu

P0 chờ một tài nguyên do P1 chiếm giữ, P1 chờ một tài nguyên khác do P2

chiếm giữ, , Pn-1 chờ tài nguyên do Pn chiếm giữ và Pn chờ tài nguyên do

P0 chiếm giữ

1.3 Các mức phòng tránh bế tắc

Để tránh hiện tượng bế tắc, thông thường hệ thống áp dụng ba mức:

Ngăn ngừa: Áp dụng các biện pháp để hệ không rơi vào trạng thái bế tắc

Dự báo và tránh bế tắc: Áp dụng các biện pháp để kiểm tra các tiến trình xem

có bị rơi vào trạng thái bế tắc hay không Nếu có thì thông báo trước khi bế tắc xảy ra

Nhận biết và khắc phục: Tìm cách phát hiện và giải quyết

Trang 7

1.4 Ngăn chặn bế tắc và an toàn hệ thống

1.4.1 Ngăn chặn bế tắc

Mỗi khi phân bổ tài nguyên cho các tiến trình, hệ thống sẽ kiểm tra xem liệu việc phân bổ đó có đẩy hệ thống vào tình trạng bế tắc hay không Nếu có tìm cách giải quyết trước khi bế tắc xảy ra

Ngăn chặn bế tắc (deadlock prevention) là phương pháp xử lý bế tắc, không cho nó xảy ra bằng cách làm cho ít nhất một điều kiện cần của bế tắc là loại trừ lẫn nhau, giữ và chờ, không có đặc quyền hoặc chờ vòng không được thỏa mãn (không xảy ra)

Để ngăn chặn bế tắc cần đảm bảo sao cho 4 điều kiện xảy ra bế tắc không xảy ra đồng thời

- Loại bỏ tài nguyên găng:

+ Loại trừ lẫn nhau: là điều kiện bắt buộc cho các tài nguyên không sử dụng chung được → Khó làm cho C1 không xảy ra vì các hệ thống luôn có các tài nguyên không thể sử dụng chung được

- Loại bỏ yếu tố giữ và đợi: Có thể làm cho “Giữ và đợi “không xảy ra bằng cách đảm bảo:

+ Một tiến trình luôn yêu cầu cấp phát tài nguyên chỉ khi nó không chiếm giữ bất kỳ một tài nguyên nào

+ Một tiến trình chỉ thực hiện khi nó được cấp phát toàn bộ các tài nguyên cần thiết

- Ngăn chặn “không có đặc quyền “: Để ngăn chặn không cho điều kiện này xảy ra, có thể sử dụng giao thức sau:

+ Nếu tiến trình P (đang chiếm tài nguyên R1, , Rn-1) yêu cầu cấp phát tài nguyên Rn nhưng không được cấp phát ngay (có nghĩa là P phải chờ) thì tất cả các tài nguyên R1, , Rn-1 phải được “thu hồi”

Trang 8

+ Nói cách khác R1, , Rn-1 phải được “giải phóng” một cách áp đặt, tức

là các tài nguyên này phải được đưa vào danh sách các tài nguyên mà P đang chờ cấp phát

- Mã lệnh ngăn chặn “không có đặc quyền”:

+ Tiến trình P yêu cầu cấp phát tài nguyên R1, , Rn-1 if (R1, , Rn-1 rỗi) then cấp phát tài nguyên cho P else if ({Ri Rj} được cấp phát cho Q

và Q đang trong trạng thái chờ một số tài nguyên S khác) then thu hồi {Ri .Rj} và cấp phát cho P else đưa P vào trạng thái chờ tài nguyên

R1, , Rn-1

- Loại bỏ yếu tố chờ đợi vòng tròn

+ Một giải pháp ngăn chặn chờ vòng là đánh số thứ tự các tài nguyên và bắt buộc các tiến trình yêu cầu cấp phát tài nguyên theo số thứ tự tăng dần

+ Giả sử có các tài nguyên {R1, …, Rn} Ta gán cho mỗi tài nguyên một

số nguyên dương duy nhất qua một ánh xạ 1 – 1 f: R -> N, với N là tập các số tự nhiên

- Giao thức ngăn chặn “Chờ vòng”:

+ Khi tiến trình P không chiếm giữ tài nguyên nào, nó có thể yêu cầu cấp phát nhiều thể hiện của một tài nguyên Ri bất kỳ

+ Sau đó P chỉ có thể yêu cầu các thể hiện của tài nguyên Rj nếu và chỉ nếu f(R j) > f(R i) Một cách khác, nếu P muốn yêu cầu cấp phát tài nguyên R j, nó đã giải phóng tất cả các tài nguyên Ri thỏa mãn f(R i) ≥ f(R j)

+ Nếu P cần được cấp phát nhiều loại tài nguyên, P phải lần lượt yêu cầu các thể hiện của từng tài nguyên đó

- Ưu nhược điểm của ngăn chặn giải pháp bế tắc:

Trang 9

+ Ưu điểm: ngăn chặn bế tắc (deadlock prevention) là phương pháp tránh được bế tắc bằng cách làm cho điều kiện cần không được thỏa mãn

+ Nhược điểm: Giảm khả năng tận dụng tài nguyên và giảm thông lượng của hệ thống và không mềm dẻo

1.4.2 Dãy tiến trình an toàn

Cho 1 dãy tiến trình P1, P2, P3, …, Pn song hành Dãy tiến trình được gọi là

an toàn (safe process) nếu với mọi tiến trình Pi, tài nguyên mà Pi cần có thể được thỏa mãn bởi các tài nguyên khả dụng của hệ thống và tài nguyên do các tiến trình Pi’ đang giữ với điều kiện i’ < i

Hệ thống ở trạng thái an toàn tại một thời điểm nếu dãy tiến trình song hành tại thời điểm đó có thể được sắp xếp thành dãy an toàn

Trang 10

Chương II: Tìm hiểu về các phương pháp kiểm tra hệ an toàn

Thuật toán banker là một thuật toán phân bổ tài nguyên và tránh bế tắc kiểm tra độ an toàn bằng cách mô phỏng việc phân bổ cho số lượng tối đa có thể được xác định trước của tất cả các tài nguyên, sau đó thực hiện kiểm tra

“trạng thái s” để kiểm tra các hoạt động có thể xảy ra, trước khi quyết định có nên cho phép phân bổ hay không để tiếp tục

Thuật toán của Banker được đặt tên như vậy vì nó được sử dụng trong

hệ thống ngân hàng để kiểm tra xem khoản vay có thể bị xử phạt đối với một người hay không Giả sử có n số chủ tài khoản trong một ngân hàng và tổng

số tiền của họ là S Nếu một người làm thủ tục vay vốn thì trước tiên ngân hàng lấy tổng số tiền ngân hàng trừ đi số tiền cho vay và nếu số tiền còn lại lớn hơn hơn S thì chỉ khoản vay bị xử phạt Nó được thực hiện bởi vì nếu tất

cả các chủ tài khoản đến rút tiền của họ thì ngân hàng có thể dễ dàng thực hiện

Nói cách khác, ngân hàng sẽ không bao giờ phân bổ tiền của mình theo cách mà nó không còn có thể đáp ứng nhu cầu của tất cả các khách hàng của mình Ngân hàng sẽ luôn cố gắng ở trong trạng thái an toàn

Các đặc điểm của thuật toán Banker như sau:

● Nếu bất kỳ quá trình nào yêu cầu một tài nguyên, thì nó phải đợi

● Thuật toán này bao gồm các tính năng nâng cao để phân bổ tài nguyên tối đa

● Có giới hạn tài nguyên trong hệ thống có

● Trong thuật toán này, nếu bất kỳ quá trình nào nhận được tất cả các tài nguyên cần thiết, thì nó sẽ trả lại các tài nguyên đó trong một khoảng thời gian hạn chế

Trang 11

● Các tài nguyên khác nhau được duy trì trong thuật toán này có thể đáp ứng nhu cầu của ít nhất một khách hàng

Ưu điểm:

● Nó chứa các tài nguyên khác nhau đáp ứng các yêu cầu của từng quy trình

● Mỗi quy trình phải cung cấp thông tin cho hệ điều hành về các yêu cầu tài nguyên sắp tới, số lượng tài nguyên và thời gian tài nguyên sẽ được lưu giữ

● Nó giúp hệ điều hành quản lý và kiểm soát các yêu cầu của quy trình đối với từng loại tài nguyên trong hệ thống máy tính

● Thuật toán có thuộc tính Tài nguyên tối đa đại diện cho biết mỗi quá trình có thể chứa số tài nguyên tối đa trong một hệ thống

Nhược điểm:

● Nó yêu cầu một số lượng quy trình cố định và không có quy trình bổ sung nào có thể được khởi động trong hệ thống trong khi thực hiện quy trình

● Thuật toán không còn cho phép các quy trình trao đổi nhu cầu tối đa của nó trong khi xử lý các tác vụ của nó

● Mỗi tiến trình phải biết và nêu trước yêu cầu tài nguyên tối đa của chúng cho hệ thống

● Số lượng yêu cầu tài nguyên có thể được cấp trong một thời gian hữu hạn, nhưng thời hạn để cấp phát tài nguyên là một năm

Khi làm việc với thuật toán của một ngân hàng, nó yêu cầu biết về ba điều:

● Mỗi tiến trình có thể yêu cầu bao nhiêu cho mỗi tài nguyên trong hệ

thống Nó được biểu thị bằng yêu cầu [ MAX ].

● Mỗi quy trình hiện đang giữ mỗi tài nguyên trong một hệ thống là bao

nhiêu Nó được biểu thị bằng tài nguyên [ ALLOCATED ].

● Nó đại diện cho số lượng của mỗi tài nguyên hiện có trong hệ

thống Nó được biểu thị bằng tài nguyên [ AVAILABLE ].

Trang 12

Chương III: Cài đặt thuật toán

3.1 Thuật toán chuyển sang trạng thái an toàn

Giả sử hệ có p tiến trình và r kiểu tài nguyên Các cấu trúc dữ liệu sử dụng trong thuật toán được xây dựng như sau:

- Available: mảng 1x r thể hiện số tài nguyên có thể sử dụng của mỗi kiểu Nếu Available (j) = k suy ra có k tài nguyên kiểu rj có thể sử dụng

- Max: mảng p x r thể hiện số tài nguyên cực đại mà mỗi tiến trình yêu cầu Nếu Max (i, j) = k suy ra tiến trình Pi chỉ có thể yêu cầu cực đại k tài nguyên kiểu rj cực đại là k

- Allocation: mảng p x r thể hiện số tài nguyên mỗi kiểu hiện đã phân bổ cho các tiến trình Nếu Allocation (i, j) = k suy ra tiến trình Pi đang sử dụng k tài nguyên kiểu rj

- Need: mảng p x r thể hiện số tài nguyên còn cần của mỗi tiến trình Need (i, j) = k; Tiến trình còn cần k tài nguyên của ri

- Need (i, j) = Max (i, j) – Allocation (i, j)

- Request: Mảng n x m thể hiện yêu cầu tài nguyên của các tiến trình

- Request (i, j) = k: tiến trình pi yều cầu k tài nguyên kiểu rj

Quy ước: khi viết Request i thể hiện dòng thứ i của mảng (ứng với tiến trình Pi (các biến Need i, Allocation i …)

Khi tiến trình Pi đưa ra một yêu cầu tài nguyên hệ thống tiến hành các bước như sau:

Bước 1: If Request i <= Need i then go to Bước 2

Else Error;

Trang 13

Else Pi đợi (tài nguyên không thể phân bổ);

Bước 3: Hệ thống dự định phân bổ tài nguyên

Available i = Available i – Request i

Allocation i = Allocation i – Request i

Need i = Need i – Request i

Bước 4: Kiểm tra hệ có ở trạng thái an toàn hay không?

Nếu có phân bổ tài nguyên theo dự tính

Nếu không tiến trình Pi phải đợi cùng với tài nguyên Request i

3.2 Thuật toán kiểm tra tính an toàn của hệ

- Trong thuật toán sử dụng thêm hai cấu trúc dữ liệu sau:

Work: mảng 1 x p thể hiện số tài nguyên khả dụng của hệ thống và

số tài nguyên do các tiến trình Pi đang sử dụng với điều kiện i' < i.

Finish: mảng 1 x r đánh dấu các tiến trình đã xét.

- Thuật toán:

Bước 1: Khởi tạo:

Work := Available;

Finish(i) = false; (với mọi i = 1….r) Bước 2: Tìm i sao cho Finish(i) = false và Need(i) <= Work Nếu không tìm thấy, go to bước 4

Bước 3: Work := Work + Allocation(i);

Finish(i) = true;

go to bước 2 Bước 4: Nếu Finish(i) = true với mọi i thì hệ thống ở trạng thái an toàn, ngược lại hệ thống sẽ gặp bế tắc

Trang 14

3.3 Cài đặt thuật toán

#include <iostream>

#include <iomanip>

using namespace std;

#define MAX 100

void nhapDuLieu(int arr[MAX][MAX], int &m, int &n)

{

for (int i = 0; i < m; i++) {

cout << "Nhap hang thu " << i + 1 << endl;

for (int j = 0; j < n; j++) {

cin >> arr[i][j];

} }

}

void tinhNeed(int need[MAX][MAX], int max[MAX][MAX], int

allocation[MAX][MAX], int p, int r)

{

for (int i = 0; i < p; i < i++) {

for (int j = 0; j < r; j++) {

need[i][j] = max[i][j] - allocation[i][j];

} }

}

bool kiemTraHeAnToan(int *process, int allocation[MAX][MAX], int max[MAX][MAX], int *available, int need[MAX][MAX], int p, int r) {

tinhNeed(need, max, allocation, p, r);

// gan tat ca tien trinh bang false;

bool finish[p] = {0};

// luu chuoi tien trinh an toan

int trinhTuAnToan[p];

// gan work = available

int work[r];

for (int i = 0; i < r; i++) {

work[i] = available[i];

}

Trang 15

bool found = false;

for (int i = 0; i < p; i++) {

// kiem tra tien trinh ket thuc chua

if (finish[i] == 0) {

// kiem tra need <= work hay khong int j;

for (j = 0; j < r; j++) {

if (need[i][j] > work[j]) {

break;

} }

// neu tat ca cac need cua tien trinh thoa man

if (j == r) {

// gan work = work + allocation for (int k = 0; k < r; k++) {

work[k] += allocation[i][k];

} // them tien trinh vao trinh tu tien trinh an toan

trinhTuAnToan[count++] = i;

// danh dau tien trinh ket thuc finish[i] = 1;

found = true;

} }

} // neu khong tim thay tien trinh tiep theo trong trinh tu an toan

if (found == false) {

cout << "\t=> HE THONG KHONG O TRANG THAI AN TOAN";

return false;

} }

// neu he thong o trang thai an toan

cout << "\t=> HE THONG O TRANG THAI TOAN.\n\t=> TRINH TU TIEN TRINH AN TOAN: ";

for (int i = 0; i < p; i++) {

cout << trinhTuAnToan[i] << " ";

}

return true;

}

Ngày đăng: 16/07/2022, 18:38

HÌNH ẢNH LIÊN QUAN

Trong kịch bản này, một chu trình đang được hình thành giữa ba Process. Khơng có Process nào đang diễn ra và tất cả đều đang chờ đợi - Lập trình mô phỏng các phương pháp kiểm tra tính an toàn của hệ
rong kịch bản này, một chu trình đang được hình thành giữa ba Process. Khơng có Process nào đang diễn ra và tất cả đều đang chờ đợi (Trang 5)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w