Sunteți pe pagina 1din 11

Ministerul Educaţiei, Tineretului şi Sportului al Republicii Moldova

Universitate Tehnică a Moldovei

Disciplina: „ Sisteme Operaționale”

Lucrarea de laborator Nr.3

Tema: Algoritmului bancherului

A realizat: …………………… ………….

st. gr. C-…

A verificat: Rotaru Lilia


Chişinău 2012

Scopul lucrarii:
 Însuşirea modalităţilor de sincronizare pentru algoritmul bancherului;
 Realizarea sincronizării firelor de execuţie pentru algoritmul bancherului;
Etapele de realizare:
1) Sincronizarea firelor de execuţie pentru algoritmul bancherului;
2) Realizarea metodelor de sincronizare a firelor de execuţie pentru algoritmul
bancherului;
3) Crearea interfeţii programului;
4) Prezentarea lucrării

Sarcina Scrie un program pentru algoritmul bancher pentru X (numărul variantei înmulţit
cu numărul subgrupei) procesele şi Y (numarul variantei plus numărul subgrupei ănmulţit
cu trei) resurse cu specificarea timpului de utilizare.

Listingul Programului:
package zx;

public class Zx {

static int n = 2, k = 9;

static Integer c[][] = new Integer[n][k];

static Integer r[][] = new Integer[n][k];

static Integer e[] = new Integer[k];

static Integer p[] = new Integer[k];

static Integer a[] = new Integer[k];

static Integer s[] = new Integer[n];

static void defineS() {

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

s[i] = 0;

2
}

static void defineP() {

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

p[j] = 0;

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

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

p[j] += c[i][j];

/* Resurse utilizate*/

System.out.print("P=( ");

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

System.out.print(p[j] + " ");

System.out.println(")");

static boolean defineA() {

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

a[j] = e[j] - p[j];

if (a[j] < 0) {

System.out.println("Datele de intrare sint gresite");

return false;
3
}

/* Resurse disponibile */

System.out.print("A=( ");

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

System.out.print(a[j] + " ");

System.out.println(")");

return true;

//==========================================================================
=

public static void main(String[] args) {

/*Matricae C arata cite resurse de fiecare tip ocupa in prezent fiecare proces*/

c[0][0] = 1;

c[0][1] = 0;

c[0][2] = 1;

c[0][3] = 0;

c[0][4] = 1;

c[0][5] = 0;

c[0][6] = 1;

c[0][7] = 0;

c[0][8] = 1;

c[1][0] = 1;
4
c[1][1] = 0;

c[1][2] = 1;

c[1][3] = 0;

c[1][4] = 1;

c[1][5] = 0;

c[1][6] = 1;

c[1][7] = 0;

c[1][8] = 1;

/**/

System.out.println("C={");

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

System.out.print(" ");

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

System.out.print(c[i][j] + " ");

System.out.println();

System.out.println(" }");

/* Matricea R arata cantitatea de resurse care trebue sa fie adaugate pentru fiecare process, ca sa aiba
o finalizare cu succes

r[0][0]=1; r[0][1]=1; r[0][2]=0; r[0][3]=0;

r[1][0]=0; r[1][1]=1; r[1][2]=1; r[1][3]=2;

r[2][0]=3; r[2][1]=1; r[2][2]=0; r[2][3]=0;

5
r[3][0]=0; r[3][1]=0; r[3][2]=1; r[3][3]=0;

r[4][0]=2; r[4][1]=1; r[4][2]=1; r[4][3]=0;

/* Stare instabila */

r[0][0] = 2;

r[0][1] = 1;

r[0][2] = 5;

r[0][3] = 3;

r[0][4] = 0;

r[0][5] = 2;

r[0][6] = 6;

r[0][7] = 1;

r[0][8] = 3;

r[1][0] = 1;

r[1][1] = 3;

r[1][2] = 3;

r[1][3] = 3;

r[1][4] = 1;

r[1][5] = 3;

r[1][6] = 5;

r[1][7] = 2;

r[1][8] = 2;

// Stare stabila

r[0][0] = 8;

r[0][1] = 1;
6
r[0][2] = 3;

r[0][3] = 3;

r[0][4] = 0;

r[0][5] = 2;

r[0][6] = 1;

r[0][7] = 2;

r[0][8] = 0;

r[1][0] = 4;

r[1][1] = 3;

r[1][2] = 2;

r[1][3] = 4;

r[1][4] = 1;

r[1][5] = 5;

r[1][6] = 2;

r[1][7] = 4;

r[1][8] = 2;

System.out.println("R={ ");

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

System.out.print(" ");

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

System.out.print(r[i][j] + " ");

System.out.println();

System.out.println(" }");
7
/* Initializarea vectorului datelor existente */

e[0] = 6;

e[1] = 4;

e[2] = 5;

e[3] = 4;

e[4] = 4;

e[5] = 5;

e[6] = 4;

e[7] = 5;

e[8] = 4;

System.out.print("E=( ");

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

System.out.print(e[j] + " ");

System.out.println(")");

defineP();

defineS();

if (defineA() == true) {

int quantityOfGoodStrings = 0;

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

if (s[i] != 1) {

int g = 0;

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


8
if (r[i][j] <= a[j]) {

g++;

if (g == k) {

System.out.println("Rindul bun este: " + (i));

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

a[j] += r[i][j];

r[i][j] = 0;

s[i] = 1;

quantityOfGoodStrings++;

i = 0;

if (quantityOfGoodStrings == n) {

System.out.println("Stare stabila");

return;

} else {

if (i == (n - 1)) {

System.out.println("Stare instabila");

return;

}
9
}

Rezultatele obtinute:

Stare instabila:
run:

C={

101010101

101010101

R={

813302120

432415242

E=( 6 4 5 4 4 5 4 5 4 )

P=( 2 0 2 0 2 0 2 0 2 )

A=( 4 4 3 4 2 5 2 5 2 )

Rindul bun este: 1

Stare instabila

ПОСТРОЕНИЕ УСПЕШНО ЗАВЕРШЕНО (общее время: 0 секунд)

Stare stabila:
run:

C={

101010101

101010101

R={

213302120

432415242

E=( 6 4 5 4 4 5 4 5 4 )

P=( 2 0 2 0 2 0 2 0 2 )

10
A=( 4 4 3 4 2 5 2 5 2 )

Rindul bun este: 0

Rindul bun este: 1

Stare stabila

ПОСТРОЕНИЕ УСПЕШНО ЗАВЕРШЕНО (общее время: 0 секунд)

Concluzie: In urma efectuarii acestei lucrari de laborator am acumulat cunostinte noi in


domeniul programarii cum ar fi cum ar fi crearea thread-urilor si crearea unui grup de
thread-uri. Elaborind aceasta lucrare am demonstrat ca am insusit cu succes tema data si
putem sa aplicam pe viitor cunostintele acumulate. Desi la inceput parea o lucrare grea sa
dovedit a fi o lucrere simpla datorita cursului pe care l-am studiat.

11

S-ar putea să vă placă și