Кіріспе

Файл орындау (кітапхана функциясы және/немесе жүйелік шақыру) – компьютерлік операциялық жүйе функциясы.

Компьютерлік техникада, exec – бұл операциялық жүйенің қызметі, ол жаңадан ашылған процесс аясында атқарылатын файлды (орындалатын файлды) іске қосады, бұрынғы атқарылатын файлды алмастырады. Бұл әрекет жабылу деп те аталады. Бұл Unix сияқты жүйелерде ерекше маңызды, бірақ басқа жерлерде де кездеседі. Жаңа процесс құрылмағандықтан, процесс идентификаторы (PID) өзгермейді, бірақ процесс машинасының коды, деректері, үйіндісі және стегі жаңа бағдарламаның машиналарының кодымен, деректерімен, үйіндісімен және стегімен алмастырылады. Exec шақыруы көптеген бағдарламалау тілдері үшін қолжетімді, оның ішінде компиляцияланатын және кейбір сценарийлік тілдер үшін де. Операциялық жүйе командаларын түсіндіргіштерде, кіріктірілген команда қабық процесін көрсетілген бағдарламамен алмастырады.

Номенклатура

Exec интерфейсі мен оның іске асырылуы әртүрлі. Бағдарламалау тіліне байланысты ол бір немесе бірнеше функция арқылы қолжетімді болуы мүмкін, ал операциялық жүйеге байланысты ол бір немесе бірнеше нақты жүйе шақыруларымен ұсынылуы мүмкін. Осы себепті exec кейде функциялар жиынтығы ретінде сипатталады. C тіліндегі осындай функциялардың стандартты атаулары , , , және (төменде қараңыз), бірақ "exec" емес. Linux ядросында "execve" деп аталатын бір сәйкес жүйе шақыруы бар, ал жоғарыда аталған барлық функциялар оның айналасындағы пайдаланушы кеңістігіндегі орамалар болып табылады. Жоғары деңгейдегі тілдерде әдетте бір шақыру беріледі .

Әсерлер

exec шақырылғанда ашық қалған файл дескрипторы, егер FD_CLOEXEC нұсқасымен өңделмесе немесе O_CLOEXEC нұсқасымен ашылмаса (соңғысы POSIX.1 2001 стандартында енгізілді), жаңа процесс бейнесінде ашық күйінде қалады. Осы мүмкіндік жаңа бағдарламаның стандарттық ағындарын (stdin, stdout және stderr) анықтау үшін пайдаланылады. Сәтті жабылу (overlay) процестің бұрынғы жад адрестік кеңістігін жояды, ал ортақ емес барлық жад аймақтары операциялық жүйеге қайтарылады. Осының салдарынан, жаңа бағдарламаға жіберілмеген немесе басқаша сақталмаған барлық деректер жойылады.

DOS операциялық жүйелері

DOS көп тапсырмалы операциялық жүйе емес, бірақ бұрынғы орындалатын бейнені алмастыру, қатал негізгі жад шектеулері және виртуалды жадтың болмауы себепті үлкен пайда әкеледі. DOS-та бағдарламаларды үстемелеу үшін сол API қолданылады және бұл POSIX жүйелеріндегі әсерге ұқсас. MS DOS exec функциялары жаңа бағдарламаны жадыға, бағдарламаның орындалатын файлының тақырыпшасындағы "максималды бөлу" 0xFFFF әдепкі мәніне орнатылғандай етіп жүктейді. EXEHDR құралын бағдарламаның максималды бөлу өрісін өзгерту үшін пайдалануға болады. Дегенмен, егер мұндай өзгеріс жасалса және бағдарлама exec функцияларының бірі арқылы шақырылса, ол операциялық жүйенің командалық жолынан немесе spawn функцияларының бірімен тікелей шақырылған бағдарламадан өзгеше жұмыс істеуі мүмкін (төменде қараңыз).

Командалық аудармашылар

Көптеген Unix shell-дерде shell процесін көрсетілген бағдарламамен алмастыратын кіріктірілген команда болады. Бұл команда сонымен қатар қайта бағыттауды да жүзеге асыра алады. Кейбір shell-дерде команданы тікелей алмастырусыз, тек қайта бағыттау үшін де қолдану мүмкіндігі бар.

Баламалар

Дәстүрлі Unix жүйесінде жаңа орындалатын бағдарламаны іске қосып, бірден жаңа процесс құру мүмкіндігі жоқ, осы себепті Unix бағдарламалау үшін exec өте маңызды. Басқа жүйелерде орындалатын файлдарды іске қосу үшін spawn негізгі құрал ретінде қолданылуы мүмкін. Оның нәтижесі Unix сияқты жүйелердегі fork-exec тізбегімен бірдей. POSIX, spawn реттілігін міндетті емес, бірақ көбінесе vfork арқылы іске асырылатын кеңейту ретінде қолдайды.

Басқа жүйелер

OS/360 және одан кейінгі нұсқаларында exec-ке ұқсас қызмет атқаратын XCTL (басқаруды беру) жүйелік шақыруы бар.