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 ... ... ... ... pipe () ... 5
Атаулы
каналдар....................................................................
.......................8
Каналдар....................................................................
.....................................10
pipe ... жән ... ... оқу және ... және ... ... 24
Қолданылған ... ... ... ... ... көптеген жерлерде, яғни ұжымдық мекемелер
мен ғимараттарында оқуда тегін және өте ... OS Unix ... ... барлық операциялық жүйелердің жақсы қасиеттерін Linux өзінде
қамтып тұр. Оны OS/2 ... жүйе ... ... ... ... Оның
графиктік интерфейсі WindowsXP-мен пара-пар және желінің жасалу мүмкіндігі
WindowsNT-дан жоғары, ал көпқолданбалы жұмыс тәртібі Unix ... ... ... ... жоқ деп ... ... бұл операциялық жүйенің
он бір жылдық тарихы бізге керісінше ойлануға кепілдік береді.
Бұл жұмыстың мақсаты ... ... мен ... ... ... табылады. Бөлімдерде операциялық жүйенің жалпы мағлұматтары
және оны дербес ... ... ... ... ... бірге
операциялық жүйеде графиктік және мәтіндік ... ... ... ... Және де ... администраторлау мағлұматтары мен OS-
тің жан-жақты қамтылуы беріледі.
Linux – те ... ... ... ... ... сіз өзіңіздің жеке қолданбаларыңызды, құжат-
тарыңызды, WEB ... ... ... ... де компьютерлік графиктерге дейінде қатынас құра ... ... ... ... ... ... ... негізгі тірек
болып табылады. Интернетте жүріп саяхаттаудан тыс, Linux операциялық жүйесі
интернет тораптарын және FTP – серверлерін ... ... ... Осының
арқасында басқа қолданушылар (мысалы, модемі компьютерге қосылған, сіздің
достарыңыз) сіздің Linux жүйеңізге көп ... ... ... ... ... ... қысқармасы (аббревиатурасы) былай айырып оқылады ... яғни ... ... ... ... бұл ат арқылы
қандай да болмасын бір операциялық жүйеде ... ... әр ... беру ... ... ... ... әрекеттесу түрлерінің талабы
бойынша мысалы, бөлінетін жады арқылы орындала-тын синхрондаудың әр түрлі
формалары қолдануы мүмкін.
Соңғы 30 жыл ... Unix ... ... ... даму ... ... әдістері келесідей дамытылды:
Пайдаланушылар мен программаларға рұқсат етілген, ең бірінші кең
қолданулы үрдістердің өзара ... ... бірі – ... ... ... ... ол ортақ ата-анасы (anchestor) ... ... ... ... ... ... ... бұл
кемшілік атаулы каналдар (named pipes) немесе FIFO каналдарының пайда
болуымен жойылды.
Каналдар (pipes) – екі ... одан да көп ... ... ... ... ... әрекеттесу механизмі. Олар әдетте бір
утилитаның стандартты ... ... ... ... біріктіру үшін,
shell-дің ішінде қолданылады. Мысалы, төменде ... ... ... жүйеде қанша пайдаланушылар бар екен-дігін анықтайды:
$ who | wc –l
who утилитасы бір пайдаланушы үшін бір ... ... ... Бұл
шығару кейін, -1 опциясымен шақыру барысындағы өз кірісіндегі жалпы жолдар
санын ... wc ... ... who ... жолдар санын есептеу арқылы, каналданған команда ... ... ... ... ... жазушы және оқушы үрдістерінің бір уақытта орындалуын түсіну
өте маңызды; егер канал шіли толып кетсе, канал ... ... ... ... және оны ... тұрады. Сол сияқты, егер канал босатылса,
онда қайсыбір шығару қатынаулы болмайынша, ... ... ... барлық версиялары, shell пайдаланатын каналдар түрлері болып
келетін, атаусыз каналдарды қолдайды. Сол сияқты, System V да ... ... ... ка-
налдардың күштірек түрін қолданылады.
Linux операциялық жүйесіндегі pipe () ... ... (unnamed pipe) – бұл ... ... өз ... ... ... Unix-тің түрлі версияларында өзгереді, бірақ
жобалап 5 Кбайт-қа тең) және pipe() жүйелік шақыру ... ... ... ... байланыс. Каналдың әр ... ... ... бар. ... “жазыла-тын” соңы write()
жүйелік ... ... ... ... мүмкін, ал “оқылатын” соңы read()
жүйелік шақыруы арқылы оқылуы ... ... ... ... ... жұмысын аяқтаған кезде, close() жүйелік шақыруын қолдану арқылы
оны жабуы керек. Синтаксис: int pipe (int ... ... ... ... ... ... және файлдың екі
дескрипто-рын қайтарады; “оқылатын” канал соңымен байланысқан ... ... ол ... ... ... ... дескриптор
fd[1]-де сақталады.
Келесіде келтірілген ережелер каналдан оқитын үрдістерге қолданыланады:
• егер, ... ... соңы ... ... оқып ... онда read()
жүйелік шақыруы енгізудің соңын көрсетіп 0 қайтарады;
• егер үрдіс жазылатын соңы әлі де ашық ... бос ... оқып ... ол ... ... қатынаулы болмайынша ұйықтап қалады;
• егер үрдіс каналда бар байттар санынан көбірек ... ... ... ... ... ... қайтарады және read() жүйелік
шақыруы нақты оқыл-ған байттар санын қайтарады.
Келесі ережелер каналға жазатын үрдістерге ... егер ... ... соңы ... ... жазып жатса, жазылушы қатемен
аяқта-лады, ал жазушыға SIGPIPE ... ... егер ... канал ұстай алатын байттар санынан азырақ ... ... ... ... ... ... өз ... шақы-руын басқа үрдістің үзуінсіз-ақ аяқтайды.
Егер үрдіс канал ұстай алатын байттар санынан көбірек ... ... ... болмайды.
Атаусыз каналға қатынау файл ... ... ... әдетте тек каналды жасайтын үрдіс және оның ұрпағы
каналды қолдана алады. Жыл-жымалы жағдайларда ... ... ... канал арқылы беріп ... ... ... ... ... ... қолдану барысында, оның ешқандай мағыналары
болмайды. Егер ядро жаңа ... үшін ... ... ... бере алмаса,
pipe() –1 қайтарады, әйтпесе 0 қайтарылады.
Егер код орындалып жатса, онда ... ... ... ... ... атаусыз каналдарды бір жазу үрдісі және басқа оқу үрдісі бар
ата-аналық және туынды ... ... үшін ... ... ... ... ... келесідей:
1. Ата-аналық үрдіс атаусыз каналдарды pipe()жүйелік шақыру көмегімен
жасайды.
2. Ата-аналық үрдіс ... ... өз ... ... ... жауып, оқырманға оның жазушы соңын
жабу-ды көрсетеді.
4. Үрдістер write() және read() ... ... ... ... ... жұмыс аяқталған кезде, әр үрдіс каналдың өз активті
дескрипторын жабады.
Екібағытты байланыс тек екі ... ... ... ғана ... ... ... мына кішкентай программа, ата-анаға өзінің туынды
үрдісінен хабар ... ... ... ... ... cat talk.c ... шығару.
#include
#define READ 0 /*Каналдың оқушы ... ... WRITE 1 ... ... ... ... phrase = “Stuff this in your pipe and smoke it”;
main()
{
int fd[2], bytesRead;
char message [100]; /*Ата-аналық ... ... ... (fd); ... ... ... (fork() == 0) ... жазушы*/
{
close(fd[READ]); /*Қолданылмайтын соңын жабу*/
write (fd[WRITE], phrase, strlen (phrase) + 1); /*NULL қоса*/
close(fd[WRITE]); /*Қолданылатын соңын жабу*/
else ... ... ... ... ... жабу*/
bytesRead = read (fd[READ], message, 100);
printf (“Read %d bytes: %s\n”, bytesRead, message); /*Жіберу*/
close (fd[READ]); ... ... ... talk ... ... 37 bytes: Stuff this in your pipe and smoke it
$ ... ... NULL -ді қосқанын байқаңыз, ол ата-аналық ... оңай ... ... ... ... сияқты фразаның соңы белгісі.
Жазушы үрдісі каналға ай-нымалы ... бір ... да көп ... кезде, ол оқырманға хабардың соңын индикациялау үшін ... ... Бұны ... үшін ... ... мыналарды құрайды:
❖ Хабарды тікелей жіберу алдында, хабар ұзындығын (байттарда) жіберу;
❖ Хабарды арнайы символмен аяқтау мысалы, жаңа жол ... ... 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 ... ... ... ... қандай екендігіне көңіл аударыңыз – ол ls
утилитасы листингінің бірінші позициясында тұрған р ... ... ... ... ... ... құру ... S_IFIFO файл
ре-жимі ретінде анықталуы тиіс. Канал режимін ... chmod() ... ... ... ... ... ... мен топқа оқуға және
жазуға рұқсат етілген атаулы каналды ... ... мына ... ... S_IFIFO, 0); ... ... құру*/
chmod (“myPipe”, 0660); /*Оның рұқсат жалауларын ... ... ... ... да ... ... ... сол: арнайы
файл файл-дық жүйеге қосылады. Атаулы канал open() жүйелік шақыруы арқылы
ашыла салысы-мен, басқа ... ... - write()- FIFO ... ... қосады және read()FIFO кезегінің соңынан деректерді жояды. ... ... ... ... соң, ол ... ... көмегімен
оны жабуы тиіс. Ал атаулы канал ... емес ... ... оны ... unlink() ... ... арқылы жою қа-жет.
Атаусыз канал сияқты, атаулы канал да тек ... ... ... үшін ... Жазушы-үрдіс атаулы каналды тек жазу үшін
ашуы тиіс, ал оқырман –үрдіс тек оқу үшін. Дегенмен, ... ... ... үшін де, оқу үшін де ... онда ... үлкен практикалық мән жоқ.
Атаулы каналдарды қолданатын ... ... ... ... ... ... ... егер үрдіс атаулы каналды тек оқу үшін ашуды байқап көрсе, және сол
файлды қазіргі уақытта жазу үшін ашқан ... жоқ ... ... ... жа-зу үшін ашпайынша тосып тұрады; бірақ егер
O_NONBLOCK/O_NDELAY жалауы орнатылса, онда open() ... ... ... ... егер ... ... ... тек жазу үшін ашуды байқап көрсе, және
сол файлды қазіргі уақытта оқу үшін ... ... жоқ ... оқырман
үрдістің файлды оқу үшін ашпайынша ... ... ... ... ... ... онда open() ... шақыруы
қатемен бірден аяқталады;
❖ атаулы каналдар желі арқылы жұмыс ... ... екі ... ... – “оқырман” және “жазушы” – ... ... ... ... Жалғыз оқушы үрдіс aPipe атаулы каналын құра орындайды. Содан соң
канал барлық ... ... ... ... ... ... ... жолдарды оқып, шығарады.
❖ Бір немесе бірнеше жазушы ... ... ... ... ... каналын ашып, оған үш хабар жібереді.
Каналдар
Каналдар үрдістер арасында түсу ... ... ... ... ... ... ... мүмкіндік береді. Оларды қолдану каналдың
соңында қандай үрдістер бары ... ... ... ... ... ... ... береді. Каналдардың үйреншікті орындалуы
мәліметтерді сақтау үшін ... ... ... ... екі ... ... ... және аталмаған каналдар. Олар үрдістердің
бастапқы сұранысының түрінен басқа барлық жағынан ... ... ... ... ... үшін ... open жүйелік функциясын, ... ... үшін pipe ... ... ... ... жұмыс кезінде үрдістер әдеттегі read, write және close сияқты
файлдарға ... ... ... Тек pipe ... ... ... болып табылатын бір-бірімен байланысқан үрдістер ғана
аталмағана каналдарға қатынау құруды өз ... бөле ... ... В ... канал құрып, D және Е үрдістерін туғызса, бұл үш үрдіс өз
аралығында каналға қатынауды ... ... ... ... ... ... ... арақатынастарына байланыссыз және тек файлға қатынаудың
қарапайым құқықтары бар болған жағдайда қатынас құра ... ... ... құру ... шақырудың синтаксисі:
pipe(fdptr);
, мұндағы fdptr – екі бүтін санды айнымалыдан тұратын ... ... ... оқу үшін және каналға жазу үшін ... ... ... ... ... Ядро каналдарды файлдық жүйе ішінде
құратындықтан және ... оны ... ... жүйеде болмағандықтан ядро
каналды құрған кезде оған ... ... ... Ол және де ... үшін ... қолданушы дескрипторларын және оларға ... ... ... ... ... Ядро ... кестесін қолданғандықтан
read, write және т.б. функцияларды шақырудың интерфейсі қарапайым файлдар
интерфейсімен сәйкестендіріліп ... ... ... оқу
немесе жазуды қарапайым файл немесе каналға орындап ... ... ... Pipe ... ... ... жоқ ... ... жазу үшін файл дескрипторы ... үшін файл ... |
|{ ... ... жаңа индекс тағайындау(ialloc ... ... ... бір ... оқу ... бірін –қайта жазу үшін |
|белгілеу; ... ... ... олар жаңа ... ... ... |
|етіп инициалдау; ... бір ... ... оқу ... біреуін қайта жазу үшін ... ... ... кестесінде сәйкес кіру нүктелерін көрсетіп |
|тұратындай етіп ... ... ... ... ... 2-ге тең етіп ... ... және ... ... жатқан үрдістер санын санаудың санағышының |
|мәнін 1 етіп қою; |
|} ... ... ... ... ... ... каналдар құру алгоритмі көрсетілген. Ядро
канал үшін файлдық жүйеден «канал құрылғысы» ретінде белгіленген ... ... ... арқылы жариялайды. Канал құрылғысы – бұл ... ... ... алатын және мәліметтер үшін ... ... жүйе ... ... Жүйе ... ... жүйені конфигурациялау кезінде көрсетеді және бұл құрылғылар әр
түрлі файлдық жүйелерде сәйкес келуі мүмкін. Канал активті болып ... ... ... және мәліметтік блоктарды басқа файлға қайта жариялай
алмайды.
Содан соң ядро файлдар кестесінде каналға жазу және оқу ... ... екі ... ... және ... ... ... мәліметтерді түзетеді. Файлдар кестесіндегі әрбір белгіленген
жазбада каналдың неше экземпляры оқу немесе жазу үшін ашық ... ... ... мәлімет сақталады, ал индекстегі жүгінушілер санағышы канал
неше рет ... ... 2) ... ... индексте канал
ішіндегі байттар ығысуы енгізу немесе шығарудың ... ... ... ... ... Осы ... индексте сақтауға
байланысты каналдағы мәліметтерге ... ... ... ... ... орындауға болады; бұл жер каналдардың ерекшелігін көрсетіп береді,
себебі қарапайым файлдар үшін ... ... ... ... бұл ... lseek функциясының көмегімен ауыстыра алмайды.
Сондықтан канал мәліметтеріне кездейсоқ қатынау мүмкін емес.
Аталған және ... ... ... – 1973 жылы ... ... ... ... IPC-дің
алғашқы формасы. Көп жағдайдағы падалылығына қарамастан ... ... ... ... жоқтығы болып табылады. Осының әсерінен
олар тек туыстас үрдістер қатынасы үшін ғана пайдалануы мүмкін. Бұл ... System III-те ... ... каналдар деп аталатын FIFO каналдарын қосу
арқылы түзетілген еді. Аталған және аталмаған каналдарға ... құру ... read және write ... ... Программалық каналдарға бір-біріне дескриптор беру мүмкіндіктерін
берсек, олар туыстас емес ... ... ... ... ... бұл ... ... туыстасы бар үрдістер арасындағы қатынасты
құру үшін қолданылады.
Аталған каналды ашу
Аталған канал – бұл аталмаған ... ... ... ... ... ... келеді. Бірақ бұл файлға каталогтағы жазба сәйкес келеді және
оған қатынасу аты тұрақты аты ... ... ... аталған
каналдарды қарапайым файлдар сияқты ашады және осыған сәйкес ... ... ... мүлдем қатыссыз үрдістер қатынас құруы
мүмкін. Аталған каналдар файлдық жүйе иерархиясында ... ... ... ... олар unlink ... ... көмегімен өшіріледі), ал аталмаған
каналдар уақытша ... ... ... үрдістер каналмен жұмысын
аяқтағаннан соң ядро оның индексін ... алып ... ... ... ... ... ... ашудың алгоритміне ұқсас
келеді. Бірақ та функциядан шығып кетудің алдында ядро аталған каналды ... жазу үшін ... ... санын көрсететін индекстегі санағыштар
мәндерін ... ... ... оқу үшін ... үрдіс өз жұмысын басқа
үрдіс аталған каналды жазу үшін ашпағанша тоқтата тұрады және ... ... ... ... ... оқу үшін ... мағынасы жоқ.
Үрдістің каналды оқу немесе жазу үшін ашып ... ... ... ... ... үрдістер жұмысын қайта бастайды.
Егер үрдіс аталған каналды оқу үшін ашып жатса және каналға жазатын ... ... онда ашу ... ... егер үрдіс «no delay» параметріне
ие аталған файлды ашып жатса, онда бірде-бір жазу үрдісі ... ... open ... ... ... ... Барлық басқа жағдайларда жазу
енгізетін үрдіс каналды ашпағанша үрдіс тоқтатылып тұрады. Осындай ережелер
каналды жазу үшін ашып ... ... үшін де ... оқу және ... жазу
Каналды қарастырғанда үрдістер каналдың бір жағынан жазу енгізіп, ал
екінші жағынан мәліметтерді оқып жатады деп түсінген жөн. ... ... ... ... мәліметтерге олардың каналға келіп түсу ретіне
байланысты қатынасады; бұл жағдай мәліметтер каналға ... ... ... ... ... ... ... келетінін білдіреді. ... ... ... мен ... ... ... үрдістер
санының сәйкес келуі шартты емес; егер бір сан екіншісінен 1-ден ... онда ... ... ... өз ... басқа
механизмдерге сүйеніп координациялауы тиіс. Ядро каналдағы мәліметтерге
қарапайым файлдағы ... ... ... ... ... ... ... және write функциясының орындалуы
кезінде каналға керекті блок санын жариялайды. Канал және қарапайым ... жады ... ... ... ... ... өнімділігін
жоғарылату мақсатында тек тура адрестеу блоктарын ... ... ... ... бір ... ... ... көлеміне белгілі мөлшерде
шектеулер қояды. Ядро индекстің тура адресациялау блоктарымен циклдік кезек
сияқты жұмыс жасайды, яғни өз ... ... ... ... ... ... үшін оқу және жазу ... қолдап отырады.
Каналға енгізу-шығарудың төрт мысалын қарастырайық: мәліметтер жазу үшін
орын жеткілікті каналға жазу; ... ... үшін ... ... оқу; ... жеткіліксіз каналдан оқу; мәліметтер
жазуға орын жеткіліксіз каналға жазу.
Бірінші жағдайды қарастырайық. Мұнда үрдіс мәліметтер ... үшін ... ... каналға жазу енгізеді: жазылғалы байттар көлемінің
каналда бар байттар санымен қосындысы ... ... кіші ... ... Ядро ... ... енгізудің алгоритміне бағынады, бірақ ол канал
өлшемін автоматты түрде write функциясының әрбір орындалуынан соң ... ... ... ... ... ... көлемі әрбір жазу
операциясының орындалуымен бірге өсіп отырады. ... ... ... ... орындалады: үрдіс файл көлемін тек ол мәліметтерді жазу
кезінде файл соңының шекарасынан асқан кезде ғана ... Егер ... ... ... ... ... ... талап етсе, ядро үрдіс
кеңістігіндегі ығысудың мәнін канал басына ... ... ... ... ... 0-ге тең). Ядро еш ... ... мәліметтерді
өшірмейді; ол ығысу мәнін 0-ге ... ... ... ол ... көлемінен сол уақытта асып кете алмайтынын анықтады. Үрдіс өзінің
барлық мәліметтерін каналға ... ... соң ядро ... ... ... ... үрдіс каналға жазуды алдыңғы write операциясы
тоқтаған жерден бастайтындай етіп коррекциялайды. Содан соң ядро ... ... күту ... ... ... басқа үрдістердің
орындалуын жаңадан бастайды.
Үрдіс каналдан оқу функциясын жүктеген кезде ол каналдың бос не бос ... ... Егер ... ... ... ядро ... қарапайым
файлдан оқығандағыдай сәйкес алгоритм арқылы оқиды. Бірақ бастапқы ығысу
индексте сақталып тұрған оқу нұсқағышының мәні болып ... және ол ... ... ... ... отырады. Әрбір блокты оқып
болғаннан соң ядро канал көлемін ... ... ... ... отырады және үрдіс кеңістігіндегі ... ... ... соңына
жеткен жағдайда ол оның басына нұсқап тұратындай етіп орнатады. read
жүйелік ... ... ... соң ядро ... тоқтатылған жазу
үрдістерінің орындалуын қайта бастайды және ... оқу ... ... ... ... қояды .
Егер үрдіс каналдағы бар ақпараттан көп ақпарат оқуға сұраныс жасаса, read
функциясы сол мезетте ... бар ... ... ... ... ... қанағаттандырмағандығына қарамастан сәтті
аяқталады. Егер ... бос ... ... ... ... бір ... ... енгізбегенше тоқтатылып тұрады. Содан соң мәліметтердің енгізілуін
күтіп тұрған барлық үрдістер өз жұмыстарын қайта жандандырады және каналдан
оқу үшін ... ... ... та егер ... «no delay» ... ие ... ... ашса, каналда мәліметтер жоқ жағдайда read
функциясы ... ... ... ... ... ... орындап жатқан болса және каналда барлық
мәліметтер үшін орын жеткіліксіз ... ядро ... ... және ... тазартылып бастамағанша үрдісті тоқтата тұрады. ... ... ... ... ... ... орындаған кезде ядро каналдың
тазартылуын күтіп ... ... ... ... және ... ... бастайды. Бұл жағдайдың ерекше жағдайы үрдіс каналға көлемі
каналдың көлемінен ... ... ... ... ... ... бұл
жағдайда ядро каналға сиятын мәліметтерді енгізіп, үрдісті бос орын пайда
болатын ... ... ... ... ... жағдай орын алуы
мүмкін:егер басқа үрдістер каналға жазба ... ... ... ... өз
жұмысын тоқтату уақытына сәйкес келсе, жазылып жатқан мәліметтер каналда
үзіліссіз орынды алмайды.
Каналдардың ... ... келе ... ... қарапайым файлдар
интерфейсімен сәйкес келетінін байқауға болады. Алайда оның ... ... ... ядро оқу және жазу үшін ... ... ... индексте сақтайды. Ядро аталған каналдар үшін ығысулар
мәндерін ... ... және бұл ... ... осы ... ортақ
пайдалана алуы үшін жасалған: олар файлдар кестесіндегі мәндерді ортақ
пайдалана алмайтын еді, ... ... open ... ... ... соң
файлдар кестесінде жаңа жазбаға ие болады. Осыған қарамастан индексте ... жазу ... ... пайдалану аталған каналдардың шығуынан алдын ... ... ... ... ... ... ... файлдар кестесіне ортақ кіру нүктелері арқылы бөліседі. Сондықтан
олар файлдар ... оқу және жазу ... ... ... еді. ... оған ... себептері ядрода жұмыс ... ... ... ... ... жазбаларға қатынау құра алмайды:
программа үрдістердің индекстегі ығысулар мәнін ортақ ... ... ... ... ... ... версияларында бар. Канал ... ... және бір ... ... ... мүмкіндік береді.
#include
int pipe(int fd[2]);
/*сәтті аяқталған жағдайда 0, қате жағдайда -1 қайтарады*/
Функция екі файлдық дескерипторды: fd[0] және ... ... ... оқу ... ал ... жазу үшін ашылады.
Ескерту. Unix-тің кейбір версиялары, атап ... SVR4 екі ... ... pipes) ... Бұл ... канал екі ұшынан
да оқу-жазуға ашық болып саналады. Екі ... IPC ... ... ендігі бір
тәсілі socketpair функциясын шақыру ... ... Оны ... ... ... қолдануға болады. Бірақ көп ... ... ... ... ... ... ... Бұл жерде бір
жақты канлдарды қолдану орынды болады.
Дескриптор (файл, программалық ... ... FIFO) ... анықтау үшін
S_ISFIFO макросын қолдануға болады. Ол жалғыз stat құрылымының ... ... ... және ... ... тең ... ... «жалған»
(нөл) мәндерін қайтарады. Канал үшін stat құрылымын fstat ... FIFO үшін ... fstat, lstat және stat ... бір ... ... ... ... ол тек осы үрдіспен ғана
өте сирек ... ... ... екі ... ... (аталық және
балалық) байланыс құру үшін келесідей қолданылады: үрдіс ... ... ... соң ... ... ...... үрдісті құру үшін шақырады.
Осыдан кейін аталық үрдіс каналдың оқу үшін ... ... ал өз ... ... жазу үшін ашылған канал ұшын жабады. Бұл жағдай үрдістер
арасында мәліметтерді бір бағытты жіберуге жағдай ... ... | sort | ... ... команда енгізілгенде ... ... ... жоғарыда аталған іс-қимылдарды арасында екі
каналы бар үш ... құру үшін ... ... ... интерпретатор оқу
үшін ашылған әрбір каналдың ұшын стандартты енгізу ағынына, ал жазу ...... ... ... ... ... каналдардың барлығы бір бағытты, яғни мәліметтерді
тек бір бағытта жіберуге ... ... еді. ... екі ... керек болған жағдайда мәліметтерді бір жаққа жіберу үшін бір жұп
каналдарды құру ... Екі ... ... IPC ... ... ... 1 (fd1[0] және fd1[1]) және 2 (fd2[0] және fd2[1]) каналдарды құрылады.
2. fork-ті шақыру.
3. Аталық үрдіс оқуға ашылған 1 (fd1[0]) каналының ... ... ... ... ... ашылған 2 (fd2[1]) каналының соңын жабады.
5. Балалық үрдіс жазуға ашылған 1 (fd1[1]) каналының ... ... ... ... ... ашылған 2 (fd2[0]) каналының соңын жабады.
Бұл іс-әрекеттерді орындайтын программа мәтіні ... ... ... ... жоғарыдағы аталған әрекеттерді орындайтын
программа келтірілген. main функциясы екі ... ... және ... ... үшін ... шақырады. Бұл жерде аталық үрдіс клиент, ал
балалық үрдіс сервер болып қалыптасады. Бірінші канал толық атты ... беру ... ал ... файл ... ... қате ... ... клиентке беру үшін қолданылады.
//pipe/mainpipe.c
1 #include ... void client (int, int), server (int, ... ... main (int argc, char ... {
6 int ... pipe2[2];
7 pid_t ... ... /*екі ... құрылуы*/
9 Pipe(pipe2);
10 if ... ... ... ... ... ... }
16 ... ... ... client(pipe2[0],pipe1[1]);
20 ... NULL, 0); ... ... ... ... ... және FIFO-файлдар.
Үрдістер өздерінің арасында файлдар көмегімен мәліметтермен ... ... ... ие ... ... ... ... кезек секілді
орындалатын FIFO-файлдар (first in, first out) да ... ... оқу ... ... ... ... ... жұмыс шарларды құбыр арқылы
өткізуге ұқсас келеді – бір ... ... ... ал ... олар ... Бос ... оқу ... read шақыруын FIFO-
файлға қандай да бір мәлімет енгізілмегенше тоқтатып ... ... ... ... ... ... ... FIFO-
файл келесі жүйелік шақыру арқылы құрылады
#include
#include
mknod( файлАты, S_IFIFO | 0666, 0 );
, мұндағы 0666 – ... ... ... ... ... ... ... үрдістер қатынаса алады.
FIFO-файлдың бір түрі аталмаған FIFO-файл болып табылады. Ол аталық ... ... ... ... ... ... ... Осындай файл –
байланыс каналы «құбыр» терминімен немесе pipe деп ... Ол ... ... conn[2]; ... ... PIPEFILE ... ие болғанда pipe шақыруын ... ... ... ... S_IFIFO | 0600, ... = open("PIPEFILE", O_RDONLY);
conn[1] = open("PIPEFILE", O_WRONLY);
unlink("PIPEFILE");
fork-ті шақыру кезінде екі үрдістің әрқайсысына мұра ... бір ... ... A ... B
А ... ... В ... ... ... Онда А үрдісі
close(conn[0]);
// т.к. не собирается ничего читать
write(conn[1], ... );
,ал В үрдісі
close(conn[1]);
// орындайды, себебі ештеңе ... ... ... жоқ
read (conn[0], ... );
Нәтижесінде келесіні аламыз:
conn[1]---->----FIFO---->-----conn[0]
үрдіс A ... ... А ... шығаруын conn[1] каналына
dup2 (conn[1], 1); close(conn[1]);
write(1, ... ); /* или printf */
, ал В ... ... conn[0] ... ... ... 0); ... ... ); /* или gets ... СиШелл тілінде жазылған келесі құрылысқа сәйкес келеді
$ A | B
pipe үшін бөлінетін файл ... ... ие ... ... ... ... ... Ол толығымен толғаннан соң write шақыруы
арқылы құбырға жазып жатқан үрдіс құбырда бос орын ... ... ... тұрады. Бұл жағдай шешімсіз жағдайға әкелуі мүмкін. А үрдісі В
үрдісінің балалық үрдіс болсын және В ... conn[0] ... ... ... орындасын. Ал А үрдісі conn[1] құбырына аса көп мәлімет енгізсін.
Осы жағдайда біз екі үрдістің ұйқыға кетуін ... ... ... аса толған, ал В үрдісі А үрдісінің аяқталуын күтіп
тұрғандықтан одан еш ... ... ... А ... ... ... ал ол өзінің мәліметін жазып
болмағанша аяқталмайды.
Бұл жағдайдың шешімі келесідей: В ... ол ... ... оқып ... (EOF ... wait ... ... тыйым
салу. Тек осыдан соң close(conn[0]) орындап, В үрдісі wait шақыруын орындай
алады.
Егер В үрдісі құбырдың өз ... А ... оған ... аяқтағаннан алдын
жауып тастаса close(conn[0]), онда А ... write ... ... А ... SIGPIPE сигналын, яғни «ешкімнің тарапынан оқылмайтын
каналға жазу орындау» жібереді.
FIFO файлдың ашылуы FIFO-файлдың буфері бос ... ... ... ... ... ... Үрдіс open шақыруының ішінде буферде
бір нәрсе ... ... ... ... ... ... болдырмау үшін файлға оны ашуға болатыны жайлы сұраныс
жіберу қажет. Бұл open ... O_NDELAY ... ... ... fd = ... O_RDONLY|O_NDELAY);
Егер open шақыру ішінде үрдістің бұғатталуына әкелетін болса, оның орнына (-
1) мәні ... ... Егер де файл ... ... ... ... болса, >=0 мәніне тең дұрыс дескриптор қайтарылады және файл ... ... ... файл ... ... ... Мысалға, оны
құрылғылар файлдарымен, яғни мысалы тізбекті порттарға апаратын аттармен
қатар қолдануға болады. Бұл құрылғылар ... ... ... тек ... аша алатын қасиетке ие (бұл құрылғылардың ... ... ... ... ... ... егер бір ... портпен жұмыс
жасап жатқан болса, ал осы уақытта екіншісі оны ... ... ... open ішінде «ұйқыға кетеді» және бірінші үрдістің close портын
босатуын күтіп тұрады. ... ... ... үшін ... ... ашу ...
#include
/* Енді қажет емес O_NDELAY алып тастау */
void nondelay(int fd){
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NDELAY);
}
int main(int ac, char ... ... *port = ac > 1 ? ... : ... if((fd = open(port, O_RDWR|O_NDELAY)) < 0){
perror(port);
sleep(10);
goto retry;
}
printf("Порт %s ашық.\n", port);
nondelay(fd);
printf("Портпен жұмыс жасау!\n");
sleep(60);
printf("Соңы.\n");
return 0;
}
Жұмыс жасаудың нәтижесі төмендегідей:
su# a.out & a.out ... ... ... ... жұмыс жасау!
/dev/cua/a: Device busy
/dev/cua/a: Device busy
/dev/cua/a: Device busy
/dev/cua/a: Device ... Device ... Device ... /dev/cua/a ашық.
Портпен жұмыс жасау!
su#
Каналдарды жабу
Каналды жабарда ... ... ... ... ... ... ... ядро канал индексін босатудан алдын арнайы өңдеу өткізеді.
Ол ... ... ... ... ... оқу ... жазу
үрдістерінің санын азайтады. Егер каналға жазатын үрдістер санағышының мәні
0-ге теңессе және каналдан оқу үрдісін күтіп тұрып ... ... ... ... ... ... және олар өзінің оқу ... да бір ... ... аяқтайды. Егер каналдан оқитын
үрдістер санағышының мәні 0-ге теңессе және ... жазу ... ... ... бар болса, ондда ядро соңғыларын орындауды жалғастырады
және оларға қате туралы ақпарат ... Екі ... да егер ... ... ұшырауы жайлы үміт болмаса, үрдістерді тоқтатып тұрудың қажеті
жоқ. Мысалға, егер ... ... ... оқудың мүмкіндігін күтіп тұрған
болса және жүйеде бұл каналға жазатын үрдістер жоқ ... ... ... пайда болмайды. Каналдың аталған болуына қарамастан жалпы жағдайда
жаңа оқитын немесе ... ... ... ... ... Ядро бұл ... ... каналдар үшін орындағандай қабылдайды. Егер каналған бірде-
бір оқитын немесе жазатын ... ... ... ядро ... ... ... ... және индексті каналдың бос ... етіп ... ... Ядро ... ... ... осымен қатар бұл индекстің дискілік көшірмесін де қайта жариялау
үшін босатады.
Мысалдар
Төмендегі программа ... ... ... ... келітірілген.
Үрдіс каналды құрып, каналға «hello» символдар ... ... және ... ... ... кіреді. Бұл жерде ядро каналға жазу енгізетін және
одан оқитын үрдістің бір екенін байқамайды.
| char string[] = "hello"; ... |
|{ ... ... ... *cp1,*cp2; ... fds[2]; |
| ... = string; ... = buf; ... ... = *cp1++; ... ... (;;) |
|{ ... ... |
|} |
|} ... оқу және ... ... ... программаны орындайтын үрдіс «fifo» атты аталған
каналды ... Егер бұл ... ... (формальді) аргументімен жүктелсе,
ол каналға үздіксіз «hello» символдар қатарын жазады; ... ... ... ... ... ... оқуды орындайды. Екі үрдіс өз
араларында «fifo» аталған каналы арқылы қатынас құруы жайлы ... бір ... ... жүктеледі. Бірақ оларға туыстас үрдістер
болудың қажеттілігі тумайды. Басқа қолданушылар программаны ... ... ... ... ... оған ... ... мүмкін.
| #include ... string[] = "hello"; ... ... argc; ... *argv[]; |
|{ ... fd; ... ... |
| ... ... ... үшін ... және ... рұқсат етілетін аталған |
|каналды құру */ ... ... == 2) ... = ... ... ... = open("fifo",O_RDONLY); ... (;;) ... == 2) ... ... ... |
|} ... ... жабдықтардың әр түрлілігін ескере отырып, ол ... деп ... ... ... ол бұлай емес! Linux ядросы мен оған
жазылған бағдарламалардың көп бөлігін Іnternet арқылы, негізінен ... және ... ... ... ... олар ... таратылады.
Linux-ті оқып, үйренуге қиындаққа түседі, сондықтан онымен жұмыс істеу
үшін ... ... ... ... бірақ ол біздің елімізде әлі де
қаралған жоқ. Linux серверде қондырылғандықтан, бұл – ... ... ... ... және ... толық қорғалуы.Linux ресурстарды
қажет етпейді және де ескі i386 мен i486 ... кіре ... Linux ... да ... ... жоғары деңгейге жеткізеді.Сонымен,
Linux – бұл эксплуатация кезінде өте жеңіл және өте керекті ... бір ... ... ... жұмысын қамтамасыз етеді, бұл
оның көпқолданбалылық артықшылықтарын ... ... ... Бұдан үлкен құндылық шықпақ: Linux-ті қосымшалар ... ... ... ... ... немесе өздерінің дербес
компьютерлерінен жергілікті желі ... Linux ... ... ... ... осы ... бағдармаларды жүктей алады.
Linux қазіргі уақытта қорытқы end-user желісі ретінде қолданылмайды,
өйткені ол басқа желістердің драйверлерімен ... ... ... ... ... ... түрлері, “Win”-модемдері, мықты
да, басқа ешқайсыларымен салыстырылмайтын видеоадаптерлер – дәл ... ... ... ... ... ... ... түседі, сондықтан онымен жұмыс істеу
үшін керекті базалық білімдер жеткіліксіз, бірақ ол біздің елімізде әлі де
қаралған жоқ.
Linux ... ... бұл – ... ... ... қызмет және ақпараттың толық қорғалуы.
Linux ресурстарды ... ... және де ескі i386 мен ... кіре ... оқылған Linux әрқашан да адамның білімін жоғары деңгейге
жеткізеді.
Сонымен, Linux – бұл ... ... өте ... және өте керекті
операциялық жүйе.
Linux – Unix-тің жемісі.
Linux – ең ... ... ... ... ... ... ... Данеш “Linux Red Hat 7.1”. Полное руководство: А.Данеш – Киев,
2002 – ... С. ... ... система Linux”. Позновательная книга плюс,
Москва, 2000 – 511с.
3. Р. Петерсен “Linux” 2000. Руководство по ... ... ...... К. ... “Linux от ... к ... ДМК, Москва, 2000 – 572с.
5. Ч. Рассел “Unix и Linux”: книга переводов. СПБ, Питер, 1999-296с.
6. У.Девис. “Операционные системы”. Москва, “Мир”,1980ж.
7. ... А.В., ... А.Ю. ... ... обеспечение”. С-
Петербург, “Питер”, 2001ж.
8. Э. Немет, Г. Снайдер - «Руководство системного администратора»,
Киев 2000.
9. Д. Бэкон, Т. ... - ... ... Питер 2004.

Пән: Информатика
Жұмыс түрі: Курстық жұмыс
Көлемі: 21 бет
Бұл жұмыстың бағасы: 700 теңге









Ұқсас жұмыстар
Тақырыб Бет саны
"қабылданған шешімді орындаудағы ұйымның функциясы"6 бет
2 – сынып математика сабақтарында оқытудың тәрбиелік функциясын жүзеге асыру64 бет
Delphi ортасында бір айнымалының функциясын зерттеу әдістемесін жасау18 бет
INTEL процессорларының құрылымы мен функциясы19 бет
Linux (Red Hat) операциялық жүйесі16 бет
Linux жүйесі28 бет
Linux операциондық жүйесінде kill функциясын оқып үйрену және оны Си тілінде программалау24 бет
Linux операциялық жүйесі10 бет
Linux операциялық жүйесінің пайда болуы26 бет
Linux операциялық жүйесінің функциялары20 бет


Исходниктер
Пәндер
Көмек / Помощь
Арайлым
Біз міндетті түрде жауап береміз!
Мы обязательно ответим!
Жіберу / Отправить


Зарабатывайте вместе с нами

Рахмет!
Хабарлама жіберілді. / Сообщение отправлено.

Сіз үшін аптасына 5 күн жұмыс істейміз.
Жұмыс уақыты 09:00 - 18:00

Мы работаем для Вас 5 дней в неделю.
Время работы 09:00 - 18:00

Email: info@stud.kz

Phone: 777 614 50 20
Жабу / Закрыть

Көмек / Помощь