1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập nhập môn hệ điều hành lab 5 1

18 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Báo Cáo Bài Tập Nhập Môn Hệ Điều Hành Lab 5
Tác giả Trần Ngọc Hải My
Trường học Trường Đại Học Tôn Đức Thắng
Chuyên ngành Công Nghệ Thông Tin
Thể loại lab report
Năm xuất bản 2023
Định dạng
Số trang 18
Dung lượng 1,15 MB

Nội dung

PHẦN THỰC HÀNHVí Dụ 1: Biên dịch chương trình đầu tiênA: Code Chương Trình#include#include#includevoid *thr1void* ar { printf"this is thread %d\n", *int*ar; sleep2; pthread_create&tid[i]

Trang 1

PAGE \* MERGEFORMAT 35

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP NMHĐH

HK2, 2022-2023 Lab 5 Nhóm: 10 Tổ: 01

1: Trần Ngọc Hải My ( MSSV: 52300128)

Trang 2

A PHẦN THỰC HÀNH

Ví Dụ 1: Biên dịch chương trình đầu tiên

A: Code Chương Trình

#include<pthread.h>

#include<stdlib.h>

#include<stdio.h>

void *thr1(void* ar) {

printf("this is thread %d\n", *(int*)ar);

sleep(2);

}

int main(int argc, char *argv[]) {

int i;

int num = atoi(argv[1]);

pthread_t tid[num];

for(i = 0; i<num; i++) {

pthread_create(&tid[i], NULL, thr1, (void*) &tid[i]); }

sleep(3);

return 0;

}

B: Kết Quả Demo

Trang 3

PAGE \* MERGEFORMAT 35

Ví Dụ 2: ……….

A: Code chương trình

#include<stdio.h>

#include<pthread.h>

struct arr {

int n;

int a[10];

};

void* thr1(void* ar) {

int count;

struct arr *ap = (struct arr*) ar;

for(count = 0; count<ap->n; count++) printf("%d\t", ap->a[count]); printf("\n");

}

int main(int argc, char* argv[]) {

struct arr ar;

ar.n = 5;

int i;

for(i = 0; i<ar.n; i++)

ar.a[i] = i+1;

pthread_t tid;

pthread_create(&tid, NULL, &thr1, &ar); sleep(2);

return 0;

}

B: Kết quả Demo

Trang 4

Ví Dụ 3:

A: Code Chương Trình

#include<pthread.h>

#include<stdio.h>

void* thr1(void* ar) {

int count;

printf("this is thread %d\n", *((int*)ar));

sleep(2);

}

int main(int argc, char* argv[]) {

int i;

pthread_t tid[3];

int status, *pstatus = &status;

for(i = 0; i<3; i++) {

pthread_create(&tid[i], NULL, thr1, (void*) &tid[i]); }

for(i = 0; i<3; i++) {

if(pthread_join(tid[i], (void**) pstatus)>0) {

printf("pthread_join for thread %d failure\n",(int)tid[i]); return 0;

}

printf("pthread waited of %d OK, return code %d\n", (int)tid[i], status);

sleep(1);

Trang 5

PAGE \* MERGEFORMAT 35

}

sleep(1);

return 0;

}

B: Kết Quả Demo

Ví Dụ 4:

A: Code Chương Trình

#include<pthread.h>

#include<stdio.h>

#include<stdlib.h>

struct arr{

int n;

int a[10];

};

struct file {

struct arr ar;

char* filename;

};

static int sum = 0;

void* thr1(void* ar) {

struct arr *ap = (struct arr*) ar; ap->n = 3; int i = 0;

Trang 6

for(i = 0; i<ap->n; i++)

ap->a[i] = i + 1;

}

void* thr2(void* ar) {

struct arr *ap = (struct arr*) ar;

int i, s = 0;

for(i = 0; i<ap->n; i++)

s = s + ap->a[i];

sum = s;

}

void* thr3(void* ar) {

struct file *fi = (struct file*) ar;

FILE *out ; int count;

out = fopen(fi->filename,"wb");

fprintf(out, "number element of array: %d\n", fi->ar.n); for(count = 0; count<fi->ar.n; count++) {

fprintf(out, "%d\t", fi->ar.a[count]);

}

fprintf(out, "\n");

fprintf(out, "sum=%d\n", sum);

fclose(out);

}

int main(int argc, char* argv[]) {

int i;

pthread_t tid[3];

struct arr ar;

int status, *pstatus = &status;

pthread_create(&tid[0], NULL, thr1, (void*) &ar); sleep(1);

if(pthread_join(tid[0], (void**) pstatus)==0) {

Trang 7

PAGE \* MERGEFORMAT 35

pthread_create(&tid[1], NULL, thr2, (void*) &ar); if(pthread_create(&tid[1], NULL, thr2, (void*) &ar)==0) { struct file arf;

arf.ar = ar;

arf.filename = argv[1];

pthread_create(&tid[2], NULL, thr3, (void*) &arf); }

}

sleep(2);

return 0;

}

B: Kết Quả Demo

Trang 9

B PHẦN BÀI TẬP BÀI 1: Write a program that creates three threads that perform the following tasks:

- The first thread takes arguments from the environment (argv [1]), checks if the number is 0, calculates the factorial of this number (can use struct or global variables)

- The second thread waiting for the first thread to complete, perform the calculation of the number of words smaller than the result of the first factorial factor calculated

- Third thread waiting for the second thread to complete, write the result into the file is the second argument from the environment variable (argv [2]) The contents of the record include: the first line stores the value of argv [1]; The second line stores the results of the factorial; The third line stores the sum of smaller numbers than the factorial

For example: run /bai1 4 res1

Output to res1 file is as follows:

N = 4

4! = 24

Sum = 276

A: Code Chương Trình:

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

struct arr{

n; int

factorial; int

};

struct file {

struct arr ar;

char * filename;

};

static int sum ; =

void * thr1 ( void * ar) {

struct arr ap ( * = struct arr ) ar; *

ap factorial -> = 1 ;

for(int i ; i = <= ap->n ; i ++ )

ap factorial -> *= i;

}

void * thr2 ( void * ar) {

struct arr ap ( * = struct arr ) ar; *

i, s ; int =

for (i = 1 ; i < ap factorial -> ; i ++ )

Trang 10

s += i;

sum s; =

}

void * thr3 ( void * ar) {

struct file fi ( * = struct file ) ar; *

FILE out ; count; * int

out = fopen (fi filename -> , "wb" );

fprintf (out, "N = %d\n " , fi ar -> n);

fprintf (out, "4! = %d\n " , fi ar -> factorial);

fprintf (out, "Sum = %d\n " , sum);

fclose (out);

}

int main ( argc, int char * argv [] ) {

i; int

pthread_t tid[ ]; 3

struct arr ar;

ar.n atoi (argv[ ]); 1

status, pstatus int * = & status;

pthread_create ( & tid[0 ], NULL , thr1, ( void * & ) ar);

sleep (1);

if( pthread_join (tid[0 ], ( void ** ) pstatus) == 0 ) {

pthread_create ( & tid[1 ], NULL , thr2, ( void * & ) ar); if( pthread_create ( & tid[1 ], NULL , thr2, ( void * & ) ar) == 0 ) {

struct file arf;

arf ar ar; =

arf filename = argv[ ]; 2

pthread_create ( & tid[2 ], NULL , thr3, ( void * )

& arf);

}

}

sleep (2);

return 0 ;

}

B: Kết Quả Demo:

Trang 11

PAGE \* MERGEFORMAT 35

Trang 12

Write a program of threads that perform the following tasks:

- The first read the input file is the first argument from the environment variable

- The second thread counts the sum of primes in the array

- Third thread sorts array increase

- The fourth thread executes the writing of the result file

The input and output file contents are as follows:

For example, the input file is of the following format

ten

4

5

7

8

11

9

20

13

2

3

The result in the result file looks like this:

Size of array: 10

Value of elements: 4 5 7 8 11 9 20 13 2 3

Primes: 5 7 11 13 2 3

Sum of Primes: 41

Primes sorted from smallest to highest: 2 3 5 7 11 13

A: Code Chương Trình:

#include <stdio.h>

#include <pthread.h>

#include <stdlib.h>

#define MAX_SIZE 99999

int n, a [MAX_SIZE], prime [MAX_SIZE], primeSorted [MAX_SIZE];

static int sum ; =

int k = 0;

Trang 13

PAGE \* MERGEFORMAT 35

void * thr1 ( void * filenameIn) {

FILE in * = fopen ((char * ) filenameIn, "r" );

(in if == NULL ) {

printf ( "Error opening file \n " );

pthread_exit ( NULL );

}

fscanf (in, " %d " , & n);

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

fscanf (in, " %d " , & a[i]);

}

fclose (in);

pthread_exit ( NULL );

}

void * thr2 ( void * temp) {

s int = 0 ;

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

isPrime ; int =

( [i] if a <= ) { 1

isPrime = 0 ;

} else if ( [i] ) { a != 2

for(int j ; j j = * <= [i]; j a ++ ) {

( [i] j if a % == 0 ) {

isPrime = 0 ;

break ;

}

}

}

(isPrime if == 1 ) {

prime [k] = a[i];

primeSorted [k] = a[i];

s += a[i];

k ++ ;

}

}

sum s; =

// Sort primeSorted array

for(int i ; i k ; i = < - 1 ++ ) {

Trang 14

for(int j i = + 1 ; j k; j < ++ ) {

( if primeSorted [j] < primeSorted [i]) {

temp int = primeSorted[i];

primeSorted [i] = primeSorted[j];

primeSorted [j] temp; =

}

}

}

pthread_exit ( NULL );

}

void * thr3 ( void * filenameOut) {

FILE out * = fopen ((char * ) filenameOut, "w" );

(out if == NULL ) {

printf ( "Error opening file for writing \n " );

pthread_exit ( NULL );

}

fprintf (out, "Size of array: %d\n " , n);

fprintf (out, "Value of elements: " );

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

fprintf (out, " %d " , a[i]);

}

fprintf (out, " \n " );

fprintf (out, "Primes: " );

for(int i ; i k; i = < ++ ) {

fprintf (out, " %d " , prime[i]);

}

fprintf (out, " \n " );

fprintf (out, "Sum of Primes: %d\n " , sum);

fprintf (out, "Primes sorted from smallest to highest: " );

for(int i ; i k; i = < ++ ) {

fprintf (out, " %d " , primeSorted[i]);

}

fprintf (out, " \n " );

fclose (out);

pthread_exit ( NULL );

}

int main ( argc, int char * argv [] ) {

(argc ) { if != 3

Trang 15

PAGE \* MERGEFORMAT 35

printf ( "Usage: %s <input_filename> <output_filename> \n " , argv[ ]); 0

return 1 ;

}

pthread_t tid[ ]; 3

pthread_create ( & tid[0 ], NULL , thr1, ( void * ) argv[ ]); 1

status; int

( if pthread_join (tid[0 ], ( void ** & ) status) != 0 ) {

printf ( "Error joining thread 1 \n " );

return 1 ;

}

pthread_create ( & tid[1 ], NULL , thr2, NULL);

pthread_create ( & tid[2 ], NULL , thr3, ( void * ) argv[ ]); 2

pthread_join (tid[1 ], NULL);

pthread_join (tid[2 ], NULL);

return 0 ;

}

B: Kết Quả Demo:

Ngày đăng: 08/05/2024, 16:24

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w