Linux операциялық жүйесіндегі pipe() функциясы



I.Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 3
Каналдар туралы жалпы мағлұмат ... ... ... ... ... ... ... ... ... ... ... ... ... .. 4


II .Негізгі бөлім
Linux операциялық жүйесіндегі pipe () функциясы ... ... ... ... ... ... ... ... ... ... ... ... 5
Атаулы каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...8
Каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .10
pipe жүйелік функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 11
Аталған жән еаталмаған каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .13
Аталған каналды ашу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 13
Каналдардан оқу және каналдарға жазу ... ... ... ... ... ... ... ... ... ... ... ... ... .14
Программалық каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 16
Мысал ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .17
«Құбырлар» және FIFO.файлдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .18
Каналдарды жабу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...22
Мысалдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 22



III Қорытынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 24

Қолданылған әдебиеттер тізімі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 25
Linux операциялық жүйесі көптеген жерлерде, яғни ұжымдық мекемелер мен ғимараттарында оқуда тегін және өте қарапайым OS Unix альтернативінде кең таралды.
Бүгінгі барлық операциялық жүйелердің жақсы қасиеттерін Linux өзінде қамтып тұр. Оны OS/2 операциялық жүйе сияқты жеңіл қондыруға болады. Оның графиктік интерфейсі WindowsXP-мен пара-пар және желінің жасалу мүмкіндігі WindowsNT-дан жоғары, ал көпқолданбалы жұмыс тәртібі Unix принципі арқылы жасалған.
OS Linux-тің болашағы жоқ деп айтылуда. Бірақ бұл операциялық жүйенің он бір жылдық тарихы бізге керісінше ойлануға кепілдік береді.
Бұл жұмыстың мақсаты Linux-тің мүмкіндіктері мен жұмыс ережелерімен танысу болып табылады. Бөлімдерде операциялық жүйенің жалпы мағлұматтары және оны дербес компьютерде қондырудың процесі келтіріледі. Сонымен бірге операциялық жүйеде графиктік және мәтіндік режимдермен жұмыс істеуге болатыны көрсетіледі. Және де кейбір администраторлау мағлұматтары мен OS-тің жан-жақты қамтылуы беріледі.
Linux – те инструменттердің жинағы қамтамассыздандырылған, осы инструменттер арқылы, сіз өзіңіздің жеке қолданбаларыңызды, құжат-тарыңызды, WEB парақтарыңызды, презентацияларыңызды, сызбаларды, ойындарды және де компьютерлік графиктерге дейінде қатынас құра аласыз. Интернетте Linux жүйесі персоналды компьютерлерде жұмыс жасайтындарға негізгі тірек болып табылады. Интернетте жүріп саяхаттаудан тыс, Linux операциялық жүйесі интернет тораптарын және FTP – серверлерін құруға рұқсат береді. Осының арқасында басқа қолданушылар (мысалы, модемі компьютерге қосылған, сіздің достарыңыз) сіздің Linux жүйеңізге көп пайдаланушылар режимінде қосыла алады.
1. Арман Данеш “Linux Red Hat 7.1”. Полное руководство: А.Данеш – Киев, 2002 – 686с.

2. С. Ивановский “Операционная система Linux”. Позновательная книга плюс, Москва, 2000 – 511с.

3. Р. Петерсен “Linux” 2000. Руководство по операционной системе, Киев, 1997 – 687с.

4. К. Петцке “Linux от понимания к применению”. ДМК, Москва, 2000 – 572с.

5. Ч. Рассел “Unix и Linux”: книга переводов. СПБ, Питер, 1999-296с.

6. У.Девис. “Операционные системы”. Москва, “Мир”,1980ж.

7. Гардеев А.В., Молчанов А.Ю. “Системное программное обеспечение”. С-Петербург, “Питер”, 2001ж.

8. Э. Немет, Г. Снайдер - «Руководство системного администратора»,
Киев 2000.

9. Д. Бэкон, Т. Харрис - «Операционные системы», Питер 2004.

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ ҒЫЛЫМ ЖӘНЕ БІЛІМ
МИНИСТРЛІГІ
ТҰРАР РЫСҚҰЛОВ АТЫНДАҒЫ ҚАЗАҚ ЭКОНОМИКАЛЫҚ УНИВЕРСИТЕТІ

Қолданбалы информатика кафедрасы

Курстық жұмыс
Тақырыбы: Linux операциялық жүйесіндегі pipe() функциясы

Оқытушы:Скакова А.

Студент:

Мамандығы: ЕТ және БЖ
Тобы: 205

Алматы 2007ж.

Мазмұны
I.Кіріспе
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... 3
Каналдар туралы жалпы
мағлұмат ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4

II .Негізгі бөлім
Linux операциялық жүйесіндегі pipe () функциясы
... ... ... ... ... ... ... ... ... ... ... ... 5
Атаулы
каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... ... ... ...8

Каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... ... ... ... ... ... ... ..10
pipe жүйелік
функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... .11
Аталған жән еаталмаған
каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..13
Аталған каналды
ашу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ...13
Каналдардан оқу және каналдарға
жазу ... ... ... ... ... ... ... ... ... ... ... ... ... ..14
Программалық
каналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... 16

Мысал ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...17
Құбырлар және FIFO-
файлдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..18
Каналдарды
жабу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ...22

Мысалдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... ... ... ... ... ... ... .22

III Қорытынды
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... 24

Қолданылған әдебиеттер тізімі
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 25

Кіріспе

Linux операциялық жүйесі көптеген жерлерде, яғни ұжымдық мекемелер
мен ғимараттарында оқуда тегін және өте қарапайым OS Unix альтернативінде
кең таралды.

Бүгінгі барлық операциялық жүйелердің жақсы қасиеттерін Linux өзінде
қамтып тұр. Оны OS2 операциялық жүйе сияқты жеңіл қондыруға болады. Оның
графиктік интерфейсі WindowsXP-мен пара-пар және желінің жасалу мүмкіндігі
WindowsNT-дан жоғары, ал көпқолданбалы жұмыс тәртібі Unix принципі арқылы
жасалған.
OS Linux-тің болашағы жоқ деп айтылуда. Бірақ бұл операциялық жүйенің
он бір жылдық тарихы бізге керісінше ойлануға кепілдік береді.
Бұл жұмыстың мақсаты Linux-тің мүмкіндіктері мен жұмыс ережелерімен
танысу болып табылады. Бөлімдерде операциялық жүйенің жалпы мағлұматтары
және оны дербес компьютерде қондырудың процесі келтіріледі. Сонымен бірге
операциялық жүйеде графиктік және мәтіндік режимдермен жұмыс істеуге
болатыны көрсетіледі. Және де кейбір администраторлау мағлұматтары мен OS-
тің жан-жақты қамтылуы беріледі.
Linux – те инструменттердің жинағы қамтамассыздандырылған, осы
инструменттер арқылы, сіз өзіңіздің жеке қолданбаларыңызды, құжат-
тарыңызды, WEB парақтарыңызды, презентацияларыңызды, сызбаларды, ойындарды
және де компьютерлік графиктерге дейінде қатынас құра аласыз. Интернетте
Linux жүйесі персоналды компьютерлерде жұмыс жасайтындарға негізгі тірек
болып табылады. Интернетте жүріп саяхаттаудан тыс, Linux операциялық жүйесі
интернет тораптарын және FTP – серверлерін құруға рұқсат береді. Осының
арқасында басқа қолданушылар (мысалы, модемі компьютерге қосылған, сіздің
достарыңыз) сіздің Linux жүйеңізге көп пайдаланушылар режимінде қосыла
алады.

Каналдар туралы жалпы мағлұмат
IPC қысқармасы (аббревиатурасы) былай айырып оқылады interprocess
communica-tion, яғни үрдістердің өзара әрекеттесуі. Әдетте, бұл ат арқылы
қандай да болмасын бір операциялық жүйеде үрдістер арасындағы әр түрлі
хабар беру түсіндіріледі. Осымен бірге қазіргі әрекеттесу түрлерінің талабы
бойынша мысалы, бөлінетін жады арқылы орындала-тын синхрондаудың әр түрлі
формалары қолдануы мүмкін.
Соңғы 30 жыл ішінде Unix операциялық жүйелер жанұясының даму үрдісінде
хабарларды жіберу әдістері келесідей дамытылды:
Пайдаланушылар мен программаларға рұқсат етілген, ең бірінші кең
қолданулы үрдістердің өзара әрекеттесу түрлерінің бірі – каналдар (pipes).
Каналдардың негізгі кем-шілігі, ол ортақ ата-анасы (anchestor) жоқ
каналдардың, үрдістер арасында қолдану мүмкіндігінің жоқтығы, бірақ бұл
кемшілік атаулы каналдар (named pipes) немесе FIFO каналдарының пайда
болуымен жойылды.
Каналдар (pipes) – екі немесе одан да көп үрдістердің бір-біріне
ақпарат жібере алатын, үрдісаралық әрекеттесу механизмі. Олар әдетте бір
утилитаның стандартты шыға-руын басқа стандартты енгізумен біріктіру үшін,
shell-дің ішінде қолданылады. Мысалы, төменде келтірілген қарапaйым shell
командасы, жүйеде қанша пайдаланушылар бар екен-дігін анықтайды:
$ who wc –l
who утилитасы бір пайдаланушы үшін бір шығару жолын генерациялайды. Бұл
шығару кейін, -1 опциясымен шақыру барысындағы өз кірісіндегі жалпы жолдар
санын шығара-тын wc утилитасына “каналданады”. who утилитасын
генерациялайтын жолдар санын есептеу арқылы, каналданған команда ерекше
әдіспен пайдаланушылардың жалпы санын есептейді.
Каналдың жазушы және оқушы үрдістерінің бір уақытта орындалуын түсіну
өте маңызды; егер канал шіли толып кетсе, канал автоматты түрде “жазушы”
шығуын буфер-леп және оны тоқтата тұрады. Сол сияқты, егер канал босатылса,
онда қайсыбір шығару қатынаулы болмайынша, “оқырман” уақытша тоқтатылады.
UNIX-тің барлық версиялары, shell пайдаланатын каналдар түрлері болып
келетін, атаусыз каналдарды қолдайды. Сол сияқты, System V да атаулы канал
деп аталатын ка-
налдардың күштірек түрін қолданылады.

Linux операциялық жүйесіндегі pipe () функциясы
Атаусыз канал (unnamed pipe) – бұл автоматты түрде өз кірісін
буферлейтін (макси-малды өлшем Unix-тің түрлі версияларында өзгереді, бірақ
жобалап 5 Кбайт-қа тең) және pipe() жүйелік шақыру арқылы жасалатын бір
бағытты коммуникациялы байланыс. Каналдың әр соңында файлдың
қауымдастырылған дескрипторы бар. Каналдың “жазыла-тын” соңы write()
жүйелік шақыруы арқылы жазылып алынуы мүмкін, ал “оқылатын” соңы read()
жүйелік шақыруы арқылы оқылуы мүмкін. Үрдіс файлдың каналдық деск-
рипторымен жұмысын аяқтаған кезде, close() жүйелік шақыруын қолдану арқылы
оны жабуы керек. Синтаксис: int pipe (int fd[2])
pipe() жүйелік шақыруы атаусыз каналды жасайды және файлдың екі
дескрипто-рын қайтарады; “оқылатын” канал соңымен байланысқан дескриптор
fd[0]-да сақтала-ды, ол “жазылатын” канал соңымен байланысқан дескриптор
fd[1]-де сақталады.
Келесіде келтірілген ережелер каналдан оқитын үрдістерге қолданыланады:
• егер, үрдіс жазылатын соңы жабылған каналдан оқып жатса, онда read()
жүйелік шақыруы енгізудің соңын көрсетіп 0 қайтарады;
• егер үрдіс жазылатын соңы әлі де ашық тұрған бос каналдан оқып жатса,
онда ол кейбір енгізу қатынаулы болмайынша ұйықтап қалады;
• егер үрдіс каналда бар байттар санынан көбірек оқуды байқап көрсе,
каналдың ағым-дық құрамының барлығын қайтарады және read() жүйелік
шақыруы нақты оқыл-ған байттар санын қайтарады.
Келесі ережелер каналға жазатын үрдістерге қолданыланады:
• егер үрдіс оқылатын соңы жабылған каналға жазып жатса, жазылушы қатемен
аяқта-лады, ал жазушыға SIGPIPE сигналы жіберіледі;
• егер үрдіс канал ұстай алатын байттар санынан азырақ жазса,
write()жүйелік ша-қыруы кепілдендірілгендей атомарлы болады, яғни
жазушы-үрдіс өз жүйелік шақы-руын басқа үрдістің үзуінсіз-ақ аяқтайды.
Егер үрдіс канал ұстай алатын байттар санынан көбірек жазатын болса,
атомарлану кепілдігі болмайды.
Атаусыз каналға қатынау файл дескрипторының механизмі арқылы
орындалғандық-тан, әдетте тек каналды жасайтын үрдіс және оның ұрпағы
каналды қолдана алады. Жыл-жымалы жағдайларда үрдіспен байланыспаған файл
дескрипторларын канал арқылы беріп жіберуге нақты мүмкіндік бар.
lseek()жүйелік шақыруын каналға қолдану барысында, оның ешқандай мағыналары
болмайды. Егер ядро жаңа канал үшін жеткілікті кеңістік бөліп бере алмаса,
pipe() –1 қайтарады, әйтпесе 0 қайтарылады.
Егер код орындалып жатса, онда 2-суретте көрсетілгендей деректер
құрылымы жаса-
лады. Әдетте атаусыз каналдарды бір жазу үрдісі және басқа оқу үрдісі бар
ата-аналық және туынды үрдістерді байланыстыру үшін пайдаланады.
int fd[2];
pipe (fd);
Оқиғалардың типтік жүйелілігі келесідей:
1. Ата-аналық үрдіс атаусыз каналдарды pipe()жүйелік шақыру көмегімен
жасайды.
2. Ата-аналық үрдіс тармақталады.
3. Жазушы өз каналының оқылатын соңын жауып, оқырманға оның жазушы соңын
жабу-ды көрсетеді.
4. Үрдістер write() және read() жүйелік шақырулар арқылы байланысады.
5. Каналмен жұмыс аяқталған кезде, әр үрдіс каналдың өз активті
дескрипторын жабады.

Екібағытты байланыс тек екі каналды қолданған кезде ғана мүмкін болады.
Канал қолда-натын мына кішкентай программа, ата-анаға өзінің туынды
үрдісінен хабар алуға рұқсат береді листинг 5.1.
$ cat talk.c ...программаны шығару.
#include stdio.h
#define READ 0 *Каналдың оқушы соңының индексі*
#define WRITE 1 *Каналдың жазушы соңының индексі*
char* phrase = “Stuff this in your pipe and smoke it”;
main()
{
int fd[2], bytesRead;
char message [100]; *Ата-аналық үрдіс хабарларының буфері*
pipe (fd); *Атаусыз канал құру*
if (fork() == 0) *Туынды, жазушы*
{
close(fd[READ]); *Қолданылмайтын соңын жабу*
write (fd[WRITE], phrase, strlen (phrase) + 1); *NULL қоса*
close(fd[WRITE]); *Қолданылатын соңын жабу*
else *Ата-ана, оқушы*
{
close (fd[WRITE]); *Қолданылмайтын соңын жабу*
bytesRead = read (fd[READ], message, 100);
printf (“Read %d bytes: %s\n”, bytesRead, message); *Жіберу*
close (fd[READ]); *Қолданылатын соңын жабу*
}
}
$ talk ...программаны орындау.
Read 37 bytes: Stuff this in your pipe and smoke it
$ _
Туынды үрдістің NULL -ді қосқанын байқаңыз, ол ата-аналық үрдістің
хабарды оңай көрсету үшін, хабардың бөлігі сияқты фразаның соңы белгісі.
Жазушы үрдісі каналға ай-нымалы ұзындықтың бір хабарынан да көп хабар
жіберген кезде, ол оқырманға хабардың соңын индикациялау үшін протокол
қолдануы тиіс. Бұны орындау үшін қолданыланатын әдістер мыналарды құрайды:
❖ Хабарды тікелей жіберу алдында, хабар ұзындығын (байттарда) жіберу;
❖ Хабарды арнайы символмен аяқтау мысалы, жаңа жол немесе NULL
символымен.
UNIX shell атаусыз каналдарды, каналдық байланыстарды құрастыру үшін
пайдаланады. Бұл үшін ол, бір үрдістің стандартты шығуын басқа үрдістің
стандартты енгізуімен бірік-тіру үшін, алдында бейнеленген қайта тағайындау
механизміне ұқсас айла тәсіл (қулық) пайдаланады. Бұндай әдістемені көрсету
үшін, біріншінің стандартты шығуына екіншінің стандартты енгізуін біріктіру
арқылы, екі ұсынылған программаны орындайтын програм-маны қарастырайық.
Біріктіруді жүзеге асыратын программа, ешқандай программа опция-ларымен
қоса шақырылмайтынын және программа аттары командалық жолда келтірілге-нін
болжайды.

Атаулы каналдар
Атаулы каналдар (named pipes), FIFO (First Input First Output, бірінші
болып келді, бірінші болып шықты) кезегі ретінде жиі аталады. Атаусыз
каналдарға қарағанда азырақ шектелген және келесідей артықшылықтары бар:
❖ файлдық жүйеде бар болатын, аты бар;
❖ байланыспаған үрдістермен пайдалана алады;
❖ ашықтан-ашық жойылмайынша, бар болады.
Өкінішке орай атаулы каналдар тек System V-ні ғана қолдайды. Алдыңғы
бөлімде аталған атаусыз каналдарға қатысты барлық ережелер атаулы
каналдарға да қолданулы, тек атау-лы каналдар буфердің үлкенірек
сиымдылығын иелік етуінен басқа әдетте, 40 Кбайт ша-масында. Атаулы
каналдар файлдық жүйеде арнайы файлдар сияқты өмір сүреді және мы-на екі
әдістің біреуімен құралады:
❖ UNIX mknod утилитасын жүктеу жолымен;
❖ mknod() жүйелік шақыруын қолдану жолымен.
mknod утилитасының көмегімен атаулы канал құру үшін, р опциясын көрсеткен
жөн. Құрылған каналға қатынауға басқаларға рұқсат беру үшін, атаулы канал
режимі chmod утилитасы арқылы орнатылады. Төменде Korn shell-де орындалған
осы процедураның мы-
салы келтірілген:
$ mknod myPipe p ...канал құру.
$ chmod ug+rw myPipe ...құқықтарды жаңарту.
$ ls –lg mePipe ...атрибуттарын қарау.
prw-rw---- 1 glass cs 0 Feb 27 12:38 myPipe
$ _
Атаулы каналдар типінің қандай екендігіне көңіл аударыңыз – ол ls
утилитасы листингінің бірінші позициясында тұрған р символы.
mknod() жүйелік шақыруы арқылы атаулы каналдар құру үшін, S_IFIFO файл
ре-жимі ретінде анықталуы тиіс. Канал режимін кейінірек chmod() жүйелік
шақыруын қол-дану арқылы өзгертуге болады. Иеленуші мен топқа оқуға және
жазуға рұқсат етілген атаулы каналды құратын, С-кодының мына үзіндісі
келтірілген:
mknod (“myPipe”, S_IFIFO, 0); *Атаулы канал құру*
chmod (“myPipe”, 0660); *Оның рұқсат жалауларын өзгерту*
Атаулы каналдың қалай құрылуынан да тәуелсіз, нәтиже бәрібір сол: арнайы
файл файл-дық жүйеге қосылады. Атаулы канал open() жүйелік шақыруы арқылы
ашыла салысы-мен, басқа жүйелік шақыру - write()- FIFO кезегінің басына
деректер қосады және read()FIFO кезегінің соңынан деректерді жояды. Үрдіс
атаулы каналды қолданып бол-ған соң, ол close()жүйелік шақыруы көмегімен
оны жабуы тиіс. Ал атаулы канал керек емес болған кезде, оны файлдық
жүйеден unlink() жүйелік шақыруы арқылы жою қа-жет.
Атаусыз канал сияқты, атаулы канал да тек бірбағытты байланыс ретінде
пайдалану үшін тағайындалған. Жазушы-үрдіс атаулы каналды тек жазу үшін
ашуы тиіс, ал оқырман –үрдіс тек оқу үшін. Дегенмен, үрдіс атаулы каналды
жазу үшін де, оқу үшін де ашалады, онда сондай үлкен практикалық мән жоқ.
Атаулы каналдарды қолданатын прграмманы көрсетпес бұрын, оларды қолданудың
арнайы ережелерін клтірейік:
❖ егер үрдіс атаулы каналды тек оқу үшін ашуды байқап көрсе, және сол
файлды қазіргі уақытта жазу үшін ашқан үрдіс жоқ болса, оқырман
үрдістің файлды жа-зу үшін ашпайынша тосып тұрады; бірақ егер
O_NONBLOCKO_NDELAY жалауы орнатылса, онда open() жүйелік шақыруы
кәдімгідей бірден аяқталады;
❖ егер үрдіс атаулы каналды тек жазу үшін ашуды байқап көрсе, және
сол файлды қазіргі уақытта оқу үшін ашқан үрдіс жоқ болса, оқырман
үрдістің файлды оқу үшін ашпайынша тосып тұрады; бірақ егер
O_NONBLOCKO_NDELAY жалауы орнатылса, онда open() жүйелік шақыруы
қатемен бірден аяқталады;
❖ атаулы каналдар желі арқылы жұмыс істемейді.
Кезекті мысал екі программа қолданады – “оқырман” және “жазушы” – және
төменде келтірілгендей жұмыс істейді.
❖ Жалғыз оқушы үрдіс aPipe атаулы каналын құра орындайды. Содан соң
канал барлық жазушы үрдістерімен жабылмайынша, үрдіс каналдан NULL
символымен аяқталатын жолдарды оқып, шығарады.
❖ Бір немесе бірнеше жазушы үрдістер орындалады, олардың әрқайсысы
aPipe атаулы каналын ашып, оған үш хабар жібереді.

Каналдар

Каналдар үрдістер арасында түсу ретіне байланысты (бірінші кірген бірінші
шығады) мәліметтер алмасуына мүмкіндік береді. Оларды қолдану каналдың
соңында қандай үрдістер бары белгісіз болған жағдайға қарамастан үрдістерге
бір-бірімен әрекеттесуге мүмкіндік береді. Каналдардың үйреншікті орындалуы
мәліметтерді сақтау үшін файлдық жүйені қолданады. Каналдардың екі түрі
ажыратылады: аталған каналдар және аталмаған каналдар. Олар үрдістердің
бастапқы сұранысының түрінен басқа барлық жағынан бір-біріне ұқсас болып
келеді. Аталған каналдар үшін үрдістер open жүйелік функциясын, ал
аталмаған каналдар үшін pipe жүйелік функциясы қолданады. Кейіннен
каналдармен жұмыс кезінде үрдістер әдеттегі read, write және close сияқты
файлдарға арналған функцияларды қолданады. Тек pipe функциясын шақырған
үрдістің туыстастары болып табылатын бір-бірімен байланысқан үрдістер ғана
аталмағана каналдарға қатынау құруды өз араларында бөле алады. Мысалға,
егер В үрдісі канал құрып, D және Е үрдістерін туғызса, бұл үш үрдіс өз
аралығында каналға қатынауды бөлісіп алады. Бірақ барлық үрдістер аталған
каналға олардың арақатынастарына байланыссыз және тек файлға қатынаудың
қарапайым құқықтары бар болған жағдайда қатынас құра алады.

pipe жүйелік функциясы

Канал құру функциясын шақырудың синтаксисі:
pipe(fdptr);
, мұндағы fdptr – екі бүтін санды айнымалыдан тұратын массивке нұсқағыш.
Онда каналдан оқу үшін және каналға жазу үшін арналған файлдың екі
дескрипторы сақталатын болады. Ядро каналдарды файлдық жүйе ішінде
құратындықтан және канал оны қолданудан алдын жүйеде болмағандықтан ядро
каналды құрған кезде оған индекс жариялауы тиіс. Ол және де канал үшін бір
жұп қолданушы дескрипторларын және оларға сәйкес келетін файлдар
кестесіндегі жазбаларды жариялайды. Ядро файлдар кестесін қолданғандықтан
read, write және т.б. функцияларды шақырудың интерфейсі қарапайым файлдар
интерфейсімен сәйкестендіріліп орындалады. Нәтижесінде үрдістердің оқу
немесе жазуды қарапайым файл немесе каналға орындап жатқанын білудің қажеті
жоқ.
Pipe алгоритмі
Кіріс мәліметі: жоқ
Шығыс мәліметі: жазу үшін файл дескрипторы
оқу үшін файл дескрипторы
{
Канал құрылғысынан жаңа индекс тағайындау(ialloc
алгоритмі);
Файлдар кестесіндегі бір жазбаны оқу үшін, бірін –қайта жазу үшін
белгілеу;
Файлдар кестесіндегі жазбаларды олар жаңа индекске көрсетіп тұратындай
етіп инициалдау;
Файлдың бір қолданушы дескрипторын оқу үшін, біреуін қайта жазу үшін
белгілеу, оларды файлдар кестесінде сәйкес кіру нүктелерін көрсетіп
тұратындай етіп инициалдау;
Индекстегі жүгіну санағышының мәнін 2-ге тең етіп орнату;
Оқуды және жазуды орындап жатқан үрдістер санын санаудың санағышының
мәнін 1 етіп қою;
}

Каналдар құрудың алгоритмів (аталмағанх)
Жоғарыдағы кестеде аталмаған каналдар құру алгоритмі көрсетілген. Ядро
канал үшін файлдық жүйеден канал құрылғысы ретінде белгіленген индексті
ialloc алгоритмін қолдану арқылы жариялайды. Канал құрылғысы – бұл ядро
каналдарға индесктер жариялай алатын және мәліметтер үшін блоктарды
белгілейтін файлдық жүйе болып табылады. Жүйе администраторлары канал
құрылғысын жүйені конфигурациялау кезінде көрсетеді және бұл құрылғылар әр
түрлі файлдық жүйелерде сәйкес келуі мүмкін. Канал активті болып тұрғанша
ядро канал индексін және мәліметтік блоктарды басқа файлға қайта жариялай
алмайды.
Содан соң ядро файлдар кестесінде каналға жазу және оқу дескрипторларына
сәйкес келетін екі жазбаны белгілейді және жадыдағы индекс көшірмесіндегі
тіркеушілік мәліметтерді түзетеді. Файлдар кестесіндегі әрбір белгіленген
жазбада каналдың неше экземпляры оқу немесе жазу үшін ашық (бастапқыда 1)
екені жайлы мәлімет сақталады, ал индекстегі жүгінушілер санағышы канал
неше рет ашылғанын (бастапқыда 2) көрсетеді. Соңынан индексте канал
ішіндегі байттар ығысуы енгізу немесе шығарудың ендігі операциясы
басталатын жерге дейін жазылады. Осы ығысуларды индексте сақтауға
байланысты каналдағы мәліметтерге қатынауды олардың каналға келіп түсу
ретімен орындауға болады; бұл жер каналдардың ерекшелігін көрсетіп береді,
себебі қарапайым файлдар үшін ығысулар файлдар кестесінде сақталады.
Үрдістер бұл ығысуларды lseek функциясының көмегімен ауыстыра алмайды.
Сондықтан канал мәліметтеріне кездейсоқ қатынау мүмкін емес.

Аталған және аталмаған каналдар

Аталмаған каналдар – 1973 жылы Unix-тің үшінші версиясында шыққан IPC-дің
алғашқы формасы. Көп жағдайдағы падалылығына қарамастан аталмаған
каналдардың басты кемшілігіне аттың жоқтығы болып табылады. Осының әсерінен
олар тек туыстас үрдістер қатынасы үшін ғана пайдалануы мүмкін. Бұл жағдай
Unix System III-те кейде аталған каналдар деп аталатын FIFO каналдарын қосу
арқылы түзетілген еді. Аталған және аталмаған каналдарға қатынау құру үшні
қарапайым read және write функциялары қолданылады.
Ескерту. Программалық каналдарға бір-біріне дескриптор беру мүмкіндіктерін
берсек, олар туыстас емес үрдістер тарапынан пайдалануы мүмкін. Бірақ
практикада бұл каналдар ортақ туыстасы бар үрдістер арасындағы қатынасты
құру үшін қолданылады.

Аталған каналды ашу

Аталған канал – бұл аталмаған каналдың семантикасына ұқсас болып келетін
файл болып келеді. Бірақ бұл файлға каталогтағы жазба сәйкес келеді және
оған қатынасу аты тұрақты аты бойынша жүргізіледі. Үрдістер аталған
каналдарды қарапайым файлдар сияқты ашады және осыған сәйкес аталған
каналдар көмегімен бір-біріне мүлдем қатыссыз үрдістер қатынас құруы
мүмкін. Аталған каналдар файлдық жүйе иерархиясында тұрақты түрде болады
(ол жерден олар unlink жүйелік функциясы көмегімен өшіріледі), ал аталмаған
каналдар уақытша болып табылады: барлық үрдістер каналмен жұмысын
аяқтағаннан соң ядро оның индексін қайта алып қояды.
Аталған каналды ашудың алгоритмі қарапайым файлды ашудың алгоритміне ұқсас
келеді. Бірақ та функциядан шығып кетудің алдында ядро аталған каналды оқу
немесе жазу үшін ашқан үрдістер санын көрсететін индекстегі санағыштар
мәндерін арттырады. Аталған каналды оқу үшін ашатын үрдіс өз жұмысын басқа
үрдіс аталған каналды жазу үшін ашпағанша тоқтата тұрады және керісінше.
Үрдіс мәліметтерді алуды үміттенбесе, каналды оқу үшін ашудың мағынасы жоқ.
Үрдістің каналды оқу немесе жазу үшін ашып жатқанына байланысты ядро
үрдісті күтіп тоқтатылған үрдістер жұмысын қайта бастайды.
Егер үрдіс аталған каналды оқу үшін ашып жатса және каналға жазатын үрдіс
бар болса, онда ашу тоқтатылады. Немесе егер үрдіс no delay параметріне
ие аталған файлды ашып жатса, онда бірде-бір жазу үрдісі болмаған жағдайда
да open функциясы басқаруды дереу қайтарады. Барлық басқа жағдайларда жазу
енгізетін үрдіс каналды ашпағанша үрдіс тоқтатылып тұрады. Осындай ережелер
каналды жазу үшін ашып жатқан үрдістер үшін де орындалады.

Каналдардан оқу және каналдарға жазу

Каналды қарастырғанда үрдістер каналдың бір жағынан жазу енгізіп, ал
екінші жағынан мәліметтерді оқып жатады деп түсінген жөн. Жоғарыда айтылып
кеткендей үрдістер каналдағы мәліметтерге олардың каналға келіп түсу ретіне
байланысты қатынасады; бұл жағдай мәліметтер каналға келіп түскендегі рет
олардың каналдан оқылу ретіне сәйкес келетінін білдіреді. Каналдан
мәліметтерді оқитын үрдістер мен каналға мәліметтерді енгізетін үрдістер
санының ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Linux операциондық жүйесінде kill функциясын оқып үйрену және оны Си тілінде программалау
Енгізу-шығаруды ұйымдастыру тәсілдері
Информатика пәнінен ДӘРІСТЕР ЖИЫНТЫҒЫ (оқу-әдістемелік құрал)
Көптапсырмалы операциялық жүйе
Windows операциялық жүйесінің тарихы
Linux операциялық жүйесінің пайда болуы
Үрдістер және олардың арасындағы қатынастар
Linux операциялық жүйесіндегі wait()функциясы
Файлды жадқа көрсету
Unix операциялық жүйесі
Пәндер