Оқулық «Федералдық білім беруді дамыту институты»



Pdf көрінісі
бет57/158
Дата01.07.2023
өлшемі3.83 Mb.
#475485
түріОқулық
1   ...   53   54   55   56   57   58   59   60   ...   158
операциялық жуйелер

78 
 
Файлдар мен құрылғыларды бұғаттау механизмі бірегей 
қолжетімділік қағидасы бойынша жұмыс жасайды — егер қандай да 
бір процес жазбаға арнап файл ашса, осы файлға басқа процестер жаза 
алмайтындай бұғаттау қойылады. 
ПРОЦЕСТІҢ ПАЙДА БОЛУЫ. ҚАСИЕТТЕРДІ 
ИЕМДЕНУ 
UNIX ОЖ жаңа процесті іске қосу тек орындалу үстіндегі басқа 
процес арқылы ғана мүмкін. Іске қосылған процес процесс-буын деп, 
ал іске қосқан процес —аталық процес деп аталады. Процес-буын 
аталық процес туралы ақпаратты өзінің дескрипторында сақтайды. 
Ата-ана процесі жоқ жалғыз процес — бұл 1 тең PID бар init 
операциялық жүйесі ядросының басты процесі. Бұл процестің іске 
қосылуы операциялық жүйені бастапқы жүктегенде орындалады. 
UNIX ОЖ процес жасау және жаңа бағдарламаларды іске қосу 
механизмдері бар. Ол үшін аналықтың толық көшірмесі болып 
табылатын жаңа процесті жасайтын fork() жүйелік шақыртылу 
қолданылады:
#include
#include  pid_t fo rk ( vo id) ;
Процес-буыны және аталық процес арасында келесідей 
айырмашылықтар бар:
■ 
буын PID бірегей идентификатор беріледі, аталықтан ерекше;
■ 
PPID процес-буынының мәні аталық процес PID мәніне көшеді;
 
■ 
Процес-буыны өзінің жеке файлдық дескрипторлар кестесін алады, 
яғни ата-ана ашқан файлдар тобы үшін ондай файлдар қатарына 
жатпайды;
■ 
Процес-буыны үшін барлық жеткізілуді күтіп отырған сигналдар 
тазаланады (10.3-бөлімін қараңыз);
■ 
Процес-буынының 
уақыттық 
орындалу 
статистикасы 
ОЖ 
кестесінде нольге айналады;
■ 
аталыққа 
орнатылған 
жадыны 
және 
жазбаны 
бұғаттау 
қайталанбайды.


79
 
Осыған қарамастан процес келесідей қасиеттерді аталық процестен 
иемденеді: 
■ 
бағдарламаның командалық жолақтарының аргументтері;
■ 
ауысымдық орта;
■ 
процесті іске қосқан пайдаланушылардың (UID) нақты және тиімді 
(EUID) идентификаторлары;
■ 
процесті іске қосқан топтардың шын (GID) және тиімді (EGID) 
идентификаторлары;
■ 
артықшылық;
■ 
сигналдарды өңдеу құрылғылары (10.3.5-бөлімін қараңыз).
Егер процес-буынын жасау сәтсіздікке ұшыраса fork() қызметі -1 мәнін 
қайтарады. Оның себебі келесі жағдайлардың бірі болуы ықтимал:
■ 
ағымдағы пайдаланушы үшін процестердің максимал санының асып 
кетуі. Мысалы BASH қабатын қолданған кезде ағымдағы 
шектеулерді ulimit -u команданың көмегімен білуге немесе 
өзгертуге болады;
■ 
рұқсат етілген еншілес процестер санының толып кетуін getconf 
CHILD_MAX команданы арқылы еншілес процестердің максимал 
санының шектеуін білуге болады;
■ 
жүйеде процестердің максимал санының асып кетуі. Бұл шектеуді 
жүйе өзі қояды және оны sysctl fs.file-max команданың көмегімен 
немесе /proc/sys/fs/file-max файлын қарау арқылы білуге болады. 
■ 
оперативті жады мен тарту бөлімінің көлемімен анықталатын 
виртуал жады сарқылған.
Fork () атқарымы сәтті орындалған жағдайда процес-буынның PID 
аталық процеске және 0 тегі-процеске қайтарады. Процестер 
идентификаторларын сақтау үшін pid_t айналмалы түрі қолданылады. 
Көп жүйелерде бұл түрі int типіне ұқсас, дегенмен int типін қолдану 
UNIX 
болашақ 
нұсқаларымен 
ұқсастықты 
қамтамасыз 
ету 
ұсынылмайды. 
 
PID және PPID мәндерін алу үшін сәйкесінше getpid() және 
getppid() атқарымлары қолданылады. Олар қайтаратын мәннің типі— 
pid_t:
#include 
#include 
pid_t getpid(void); 
pid_t getppid(void);
fork() атқарымы шақыртылғаннан кейін екі процестің орындалуы да 
— аталық және топтар олардан кейін еретін командалар арқылы 
жалғасады, әр процес орындайтын бағдарламалық кодты шектеу қажет.
Ол үшін ең айқын тәсіл — fork() қызметін қайтаратын тексеруші 
кодтың қажет бөліктерін әр түрлі шарт тармақтарында орындау. 




Достарыңызбен бөлісу:
1   ...   53   54   55   56   57   58   59   60   ...   158




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет