Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Волгоградский государственный технический университет
Факультет послевузовского образования
Кафедра «Cистемы автоматизированного проектирования и
поискового конструирования»
Выполнил студент
Группы __________
Проверил:
Албегов Е.В.
Волгоград 2013 г.
Задание 1.
Привести краткую сравнительную характеристику операционных систем семейства Windows и Linux в виде сводной таблицы.
Задание 2.
Изучение практической реализации потоков выполнения и синхронизации в ОС на примере программы с использованием многопоточности:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#define NUM_THREADS 6
void *thread_function(void *arg);
int main() {
int res;
int lots_of_threads;
pthread_t a_thread[NUM_THREADS];
void *thread_result;
srand ( (insigned)time(NULL) );
for (lots_of_threads = 0; lots_of_threads < NUM_THREADS;
lots_of_threads++)
{
res = pthread_create (&(a_thread[lots_of_threads]),NULL,
thread_function, (void *)&lots_of_threads);
if (res != 0) {
perror(“Thread creation failed”);
exit(EXIT_FAILURE);
}
}
printf(“Waiting for threads to finish...\n”);
for (lots_of_threads = NUM_THREADS - 1; lots_of_threads >= 0;
lots_of_threads--)
{
res = pthread_join (a_thread[lots_of_threads],&thread_result);
if (res == 0) printf(“Picked up a thread\n”);
else perror(“pthread_join failed”);
}
printf(“All done\n”);
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg) {
int my_number = *(int *)arg;
int rand_num;
printf (“thread_function is running. Argument was %d\n”,
my_number);
rand_num=1+(int)(9.0*rand()/(RAND_MAX+1.0));
printf (“Bye from %d\n”, my_number);
pthread_exit(NULL);
}
Задачи:
Задание 3.
Изучение практической реализации процессов и синхронизации в ОС на примере программы с использованием семафора:
#include <unistd.h>
#include <stdio.h>
#include <error.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <fcntl.h>
#include <time.h>
#include <iostream.h>
#define MAXLINE 128
#define SVSEM_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
#define SKEY 1234L
union semun {
int val;
struct semid_ds *buf;
ushort *array;
};
int var;
int main(int argc, char **argv) {
char filename[] = "./rezult.txt";
pid_t pid;
time_t ctime;
int oflag, c, semid;
struct tm *ctm;
union semun arg;
struct semid_ds seminfo;
struct sembuf psmb;
unsigned short *prt = NULL;
var = 0;
oflag = SVSEM_MODE | IPC_CREAT;
printf("Parent: Creating semaphore...\n");
semid = semget(SKEY, 1, oflag);
arg.buf = &seminfo;
printf("Parent: Getting info about semaphore (not required, for
example)...\n");
semctl(semid, 0, IPC_STAT, arg);
g.buf->sem_ctime;
ctm = localtime(&ctime);
printf("%s %d %s %d %s %d %s","Parent: Creating time - ",
ctm->tm_hour,":",ctm->tm_min,":",ctm->tm_sec,"\n");
arg.val = 5;
printf("%s %d %s","Parent: Setting value \"",arg.val, "\" to
semaphores...\n");
semctl(semid, 0, SETVAL, arg);
printf("Parent: Creating child process...\n");
if ((pid = fork()) == 0) { // child process ;
printf(" Child: Child process was created...\n");
struct sembuf csmb;
unsigned short semval;
union semun carg;
int oflag = SVSEM_MODE | IPC_EXCL;
printf(" Child: Opening semaphore...\n");
int smd = semget(SKEY, 1, oflag); //
csmb.sem_num = 0;
csmb.sem_flg = 0;
csmb.sem_op = -1;
printf(" Child: Locking semaphore...\n");
semop(smd,&csmb,1);
printf(" Child: Do something...\n");
printf(" Child: Done something...\n");
carg.buf = NULL;
carg.array = &semval;
semctl(smd,0,GETALL,carg);
semval = *carg.array;
printf("%s %d %s"," Child: Semaphore value = ",semval,"\n");
csmb.sem_num = csmb.sem_flg = 0;
csmb.sem_op = -semval;
printf(" Child: Unlocking semaphore...\n");
semop(smd,&csmb,1);
printf(" Child: Terminating child process...\n");
exit(0);
}
printf("Parent: Waiting for unlocking semaphore...\n");
psmb.sem_num = psmb.sem_flg = psmb.sem_op = 0;
semop(semid,&psmb,1);
printf("Parent: Semaphore is unlocked...\n");
printf("Parent: Waiting for SIGCHILD...\n");
waitpid(pid,NULL,0);
printf("Parent: Deleting semaphore...\n");
semctl(semid, 0, IPC_RMID);
exit(0);
}
Задачи: