Реферат по предмету "Информатика, программирование"


Копирование содержимого Файла 1 в остальные файлы

СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1    Анализзадания и разработка алгоритма
2    Теоретическиесведения
3    Листингпрограммы
4    Тестирование
ВЫВОДЫ
ЛИТЕРАТУРА

ВВЕДЕНИЕ
Целью выполнения работы является закреплениезнаний умений и навыков в области взаимодействия модулей, использованиясистемных вызовов и библиотечных функций управления процессами и файламисовременных операционных систем для создания системных и пользовательскихпрограмм, процедур и функций на примере ОС семейства UNIX/Linux. В ходевыполнения работы студенту необходимо продемонстрировать знания функций,алгоритмов, механизмов управления процессами, разделяемыми ресурсами, файлами,вводом-выводом.
Процесс — понятие, которое определяетсяпо-разному. Это может быть — “упорядоченный набор команд и принадлежащих емуресурсов”. С точки зрения ОС Unix процесс — это объект, зарегистрированный вспециальной таблице процессов.
Телом процесса называется набор команд и данных,которыми оперирует процесс.
Контекст процесса — атрибут, который присутствуетпрактически во всех ОС, в разных ОС он может называться по-разному. Контекстывсех процессов размещаются в адресном пространстве ОС и содержат оперативнуюинформацию о состоянии процесса и текущую информацию, связанную с процессом иего запуском.

1 АНАЛИЗ ЗАДАНИЯ ИРАЗРАБОТКА АЛГОРИТМА
По заданиюсогласно варианта по списку необходимо организовать копирование содержимого изФайла 1 в остальные файлы (1->2, 1->3, 1->4).
Основныепринципы по которым будет создаваться программа:
·  Будутсозданы 4-е процесса, а именно 1-ый процесс породит 2-ый процесс, 1-ый процесс,в свою очередь породит 3-ий процесс, 1-ый процесс породит 4-тый процесс.
·  Каждыйпроцесс будет иметь файл с соответствующими именами – file1, file2, file3,file4.
·  Процессыбудут обмениваться через разделяемую память и временный файл.
·  Обменсодержимым файлов будет происходить по сигналу, семафорам и обмену сообщениями.
Процессы Process1 и Process4 обмениваются пользовательскимисигналами, по которым выполняется запись процессом Process1 во временный файл Tempfile, после чего Process4 считывает из негоданные, удаляет временный файл, затем записывает информацию в File4, ждетзавершения обмена между процессами Process2, Process3, закрывает разделяемуюпамять и уничтожает всю группу процессов.
Процессы Process1 и Process2 взаимодействуют спомощью семафоров. Process1 записывает в разделяемую память содержимое файлаFile1, после этого по семафору Process2 считывает из памятиданные и пишет в File2.
Процессы Process2 иProcess3 взаимодействуют с помощьюочереди сообщений. Когда данные уже записаны процессом Process2 в File2, онотсылает сообщение своему потомку, после чего Process3 считывает из разделяемойпамяти данные, пишет в свой файл File3, отсылает сообщение назад изавершается, после чего закрывается и его родительProcess2.
/>
Рис.1 Схемавзаимодействия процессов
2 ТЕОРЕТИЧЕСКИЕСВЕДЕНИЯ
Сиспользованием функций в языке СИ связаны три понятия — определение функции(описание действий, выполняемых функцией), объявление функции (задание формыобращения к функции) и вызов функции.
Определениефункции задает тип возвращаемого значения, имя функции, типы и число формальныхпараметров, а также объявления переменных и операторы, называемые теломфункции, и определяющие действие функции. В определении функции также можетбыть задан класс памяти.
Функцияfork:
intfork ( )
Вызовfork приводит к созданию нового процесса (порожденного процесса) — точной копиипроцесса, сделавшего вызов (родительского процесса). Точнее, порожденныйпроцесс наследует у родительского процесса следующие характеристики:
·       Окружение.
·       Флаг «закрыть при выполнении вызова exec»
·       Способы обработки сигналов (то есть SIG_DFL, SIG_IGN, SIG_HOLD,адреса функций обработки сигналов).
·       Разрешение переустанавливать действующий идентификаторпользователя.
·       Разрешение переустанавливать действующий идентификатор группы.
·       Состояние профилирования (включено/выключено).
·       Значение поправки к приоритету.
·       Все присоединенные разделяемые сегменты памяти.
·       Идентификатор группы процессов.
·       Идентификатор группы терминала.
·       Текущий рабочий каталог.
·       Корневой каталог.
·       Маска режима создания файлов.
·       Ограничение на размер файла.
Порожденныйпроцесс отличается от родительского процесса следующим:
·       Порожденный процесс имеет свой уникальный идентификатор процесса.
·       Порожденный процесс имеет иной идентификатор родительскогопроцесса, равный идентификатору процесса, его породившего.
·       Порожденный процесс имеет свои собственные копии родительскихдескрипторов файлов. Каждый дескриптор файла порожденного процесса разделяет ссоответствующим родительским дескриптором файла общий указатель текущей позициив файле.
·       Все semadj значения сбрасываются.
·       Порожденный процесс не наследует у родительского процессапризнаков удержания в памяти сегмента команд, данных или всего процессацеликом.
·       Обнуляются счетчики времени, потраченного для обслуживания этогопроцесса (tms_utime, tms_stime, tms_cutime, tms_cstime). Отменяется запрос кбудильнику.
3 ЛИСТИНГ ПРОГРАММЫ
Программасостоит из главного модуля rgr.c:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define       SHMKEY5
#define       SEMKEY5
#define       K32
#define       Count4
#define       InitVal        {1,0,0,0}
#define       MSGKEY5
#define       InitT3
voidcreat_mem(void);
voidcreat_sem(void);
voidprss1(void);
voidprss2(void);
voidprss3(void);
voidprss4(void);
intpid1; int pid2; int pid3; int pid4; int pid; int ppid;
intfd; int st;
externint p14(int), p41(int);
//mem
intshmid;
int*pint;
char*addr;
//sem
intsemid;
shortinitarray[Count] = InitVal;
structsembuf p, v;
//message:
intprnum;
intmsgid;
longnextT;
struct {
longmtype;
intData;
}Message;
intmain(void)
{
remove(«file2»);
remove(«file3»);
remove(«file4»);
creat_mem();
creat_sem();
pid1= getpid();
pid= fork();
if(!pid) prss2();
elseprss1();
sleep(2);
wait(&st);
}
voidcreat_mem(void)
{
printf("---func creat_mem(): memory creating: %dbytes — pid=%d\n", K, getpid());
shmid= shmget(SHMKEY, 1*K, 0777|IPC_CREAT);
addr= shmat(shmid, 0, 0);
pint= (int *) addr;
}
voidcreat_sem(void)
{
printf("---func creat_sem(): semaphor creating: — pid=%d\n", getpid());
semid= semget(SEMKEY, Count, 0777|IPC_CREAT);
semctl(semid,Count, SETALL, initarray);
p.sem_op= -1;
p.sem_flg= SEM_UNDO;
v.sem_op= 1;
v.sem_flg= SEM_UNDO;
}
voidcreat_mesg(void)
{
msgid= msgget(MSGKEY, 0666|IPC_CREAT);
msgsnd(msgid,(struct msgbuf *) &Message, 8, 0);
}
voidprss1(void)
{       
inti;
charbuf[32] = " ";
prnum= 1;
p.sem_num= 0;
v.sem_num= 1;
ppid= getppid();
printf("=I= prss%d, pid = %d, parent: %d\n", prnum, pid1, ppid);
pid= fork();
if(!pid) prss4();
else
{
fd= open(«file1», O_RDONLY);
read(fd,buf,strlen(buf));
close(fd);
printf(«I:reading from FILE1:\t%s\n»,buf);
signal(SIGUSR2,p41);
sleep(1);//ojidaniepriema signala ot prssa4
kill(pid1+2,SIGUSR1);
printf("==================prss1: writing to memory\n");
for(i= 0; i
semop(semid,&p, 1);
semop(semid,&v, 1);
sleep(2);
wait(&st);
wait(&st);
printf("=I= __eto konec prssa%d\n", prnum);
}
}
voidprss2(void)
{       
inti;
charbuf_2[32]=" ";
prnum= 2;
p.sem_num= 1;
pid2= getpid();
ppid= getppid();
printf("=II= prss%d, pid = %d, parent: %d\n", prnum, pid2, ppid);
creat(«file2»,fd);
pid= fork();
if(!pid) prss3();
else
{
semop(semid,&p, 1);
printf("==================prss%d: file2 editing /Semaphor/\n", prnum);
fd= open(«file2», O_WRONLY);
for(i= 0; i
write(fd,buf_2,strlen(buf_2));
printf(«II:writing to FILE2:\t%s\n»,buf_2);
printf("---func creat_mesg(): message creating: — pid=%d\n", pid2);
Message.mtype= InitT;
Message.Data=3;
creat_mesg();
printf("=II= __eto konec prssa%d\n", prnum);
fclose(fd);
}
}
voidprss3(void)
{       
inti;
charbuf_3[32]=" ";
prnum= 3;
pid3= getpid();
ppid= getppid();
printf("=III= prss%d, pid = %d, parent: %d\n", prnum, pid3, ppid);
creat(«file3»,fd);
msgrcv(msgid,(struct msgbuf *) (&Message), 8, prnum, 0);
if(Message.Data==3)
{
         printf("==================prss%d: file3 editing /Message/\n", prnum);
fd= open(«file3», O_WRONLY);
for(i= 0; i
write(fd,buf_3,strlen(buf_3));
        
printf(«III:writing to FILE3:\t%s\n»,buf_3);
printf("=III= __eto konec prssa%d\n", prnum);
fclose(fd);
}
}
voidprss4(void)
{       
inti;
prnum= 4;
pid4= getpid();
ppid= getppid();
printf("=IV= prss%d, pid = %d, parent: %d\n", prnum, pid4, ppid);
creat(«file4»,fd);
signal(SIGUSR1,p14);
kill(pid1,SIGUSR2);
sleep(1);
printf("=IV= __eto konec prssa%d\n", prnum);
         shmctl(shmid,IPC_RMID,0);
printf("==================prss4: memory closed\n");
kill(0,SIGKILL);
}
intp14(int signum) //2-oj sig
{
         chartemp_buf4[32]=" ";
signal(SIGUSR1,p14);
printf("***SIGUSR1***: prss 4 (%d) has got a signal from prss 1 (%d)\n",pid4,pid1);
fd= open(«temp_file», O_RDONLY);
read(fd,temp_buf4,strlen(temp_buf4));
close(fd);
creat(«file4»,fd);
printf("**SIGUSR1* *: writing from temp_file to file4\n");
fd= open(«file4», O_WRONLY);
write(fd,temp_buf4,strlen(temp_buf4));
close(fd);
printf(«IV:writing to FILE4:\t%s\n»,temp_buf4);
remove(«temp_file»);
printf("**SIGUSR1* *: temp_file was removed\n");
printf("***SIGUSR1***: end\n");
}
intp41(int signum) //1-ij sig
{
chartemp_buf1[32]=" ";
signal(SIGUSR2,p41);
printf("***SIGUSR2***prss 1 (%d) has got a signal from prss 4 (%d)\n",pid1,pid1+2);
fd= open(«file1», O_RDONLY);
read(fd,temp_buf1,strlen(temp_buf1));
close(fd);
creat(«temp_file»,fd);
printf("**SIGUSR2* *: temp_file was created\n");
fd= open(«temp_file», O_WRONLY);
write(fd,temp_buf1,strlen(temp_buf1));
close(fd);
printf("***SIGUSR2***: end\n");
}

4 ТЕСТИРОВАНИЕ
Результатвыполнения программы в консоли:
yuna@YunieHost:/media/8_Gb_hard_ONPU/LINUX/rgr28march$ ./rgr
— func creat_mem(): memory creating: 32bytes — pid=6798
— func creat_sem(): semaphor creating: — pid=6798
=II=prss2, pid = 6799, parent: 6798
=I=prss1, pid = 6798, parent: 6655
=III=prss3, pid = 6801, parent: 6799
=IV=prss4, pid = 6800, parent: 6798
I:reading from FILE1: >
***SIGUSR2***prss 1 (6798) has got a signal from prss 4 (6800)
**SIGUSR2* *: temp_file was created
***SIGUSR2***: end
==================prss1: writing to memory
==================prss2: file2 editing /Semaphor/
II:writing to FILE2: >
— func creat_mesg(): message creating: — pid=6799
=II=__eto konec prssa2
***SIGUSR1***: prss 4 (6800) has got a signal from prss 1 (6798)
==================prss3: file3 editing /Message/
III:writing to FILE3: >
=III=__eto konec prssa3
**SIGUSR1* *: writing from temp_file to file4
IV:writing to FILE4: >
**SIGUSR1* *: temp_file was removed
***SIGUSR1***: end
=IV=__eto konec prssa4
==================prss4: memory closed
Killed
/>
Рис.2 Результат работыпрограммы (содержимое из file1 было скопировано в остальные файлы)
Следовательно,программа работает корректно и поставленная на данную расчетно-графическуюработу задача была решена.

ВЫВОДЫ
В даннойработе частично описана структура системы UNIX, взаимоотношения междупроцессами, выполняющимися в режиме задачи и в режиме ядра. Процессывыполняются в режиме задачи или в режиме ядра, в котором они пользуютсяуслугами системы благодаря наличию набора обращений к операционной системе.
Архитектурасистемы поддерживает такой стиль программирования, при котором из небольшихпрограмм, выполняющих только отдельные функции, но хорошо, составляются болеесложные программы, использующие механизм каналов и переназначение ввода-вывода.
Обращения коперационной системе позволяют процессам производить операции, которые иначе невыполняются. В дополнение к обработке подобных обращений ядро операционнойсистемы осуществляет общие учетные операции, управляет планированием процессов,распределением памяти и защитой процессов в оперативной памяти, обслуживаетпрерывания, управляет файлами и устройствами и обрабатывает особые ситуации, возникающиев системе.
В функцииядра системы UNIX намеренно не включены многие функции, являющиеся частьюдругих операционных систем, поскольку набор обращений к системе позволяетпроцессам выполнять все необходимые операции на пользовательском уровне.

ЛИТЕРАТУРА
1. Дж.Такет (мл.), С.Барнет. Использование Linux/ Специальное издание.: 5-е изд.:Пер. с англ.: Уч.пос. – М.: Издательский дом «Вильямс», 2000. – 784 с.
2. Максимальнаязащита Linux. Искусство настройки.: Пер. с англ./ под.ред. Дж.Рея – СПб.: ООО«ДиаСофтЮП», 2002. – 752 с.
3. БраунС. Операционная система UNIX — М.: Мир, 1986 — 463 с.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Спикер
Реферат Професійна характеристика та особисті риси педагога
Реферат Психология управления Урбанович
Реферат Математические модели и методы их расчета
Реферат Конкуренция, как важное условие функционирования рыночной экономической системы
Реферат Роботы в ближайшем будущем
Реферат Универсальные и культурно-специфичные аспекты общения
Реферат Taming Temper Tantrums Essay Research Paper Taming
Реферат Лекции по истории
Реферат Из истории создания женских монастырей на Северном Кавказе во второй половине XIX начале XX
Реферат Формирование устной монологической речи детей с минимальными дизартрическими расстройствами
Реферат Бухгалтерская экспертиза при расследовании и судебном разбирательстве уголовных дел
Реферат The Directand Indirectimpact Of Rhetoric On The
Реферат Расцвет и падение древнего Вавилона
Реферат Евфимий Чудовский