Кіріспе

Бірнеше бағдарламалардың өзара пайдалануы үшін жасалған код кітапханасы. Ортақ кітапхана немесе ортақ нысан – орындалатын уақытта бірнеше компьютерлік бағдарламалардың немесе басқа кітапханалардың пайдалануы үшін арналған орындалатын кодты қамтитын компьютерлік файл. Ортақ кітапхананы пайдалануға конфигурацияланған бағдарламаны іске қосқанда, операциялық жүйе ортақ кітапхананы файлдан (бағдарламаның орындалатын файлынан өзге) жүктеу уақытында немесе орындау кезінде жадқа жүктейді. Мысалы, бағдарлама кітапхананың орындалатын кодын өзінің орындалатын файлына енгізіп, монолиттік болуы мүмкін, бірақ бағдарламаның орындалатын файлына енгізілген кітапхана кодын басқа бағдарламалар пайдалана алмайды. Ортақ кітапханалар компиляция кезінде статикалық байланыс арқылы байланыстырылуы мүмкін, яғни кітапханаға сілтемелер ашылады және орындалатын файл жасалғанда кітапханаға жад бөлінеді. Алайда, ортақ кітапханаларды байланыстыру көбінесе олар жүктелгенге дейін кейінге шегеріледі. Көптеген қазіргі заманғы операциялық жүйелер ортақ кітапханалар мен орындалатын файлдар үшін бірдей форматты қолданады. Бұл екі негізгі артықшылықты ұсынады: біріншіден, тек бір жүктеуіш қажет (бір жүктеуішті құрастыру және күтіп ұстау кез келген күрделілікке тұрарлық), екіншіден, орындалатын файлды ортақ кітапхана ретінде пайдалануға болады (егер ол символдар кестесіне ие болса). Ортақ кітапханалар мен орындалатын файлдар үшін қолданылатын файл форматтарының мысалдары: ELF, Mach O және PE. Кейбір ескі орталарда, мысалы, 16 биттік Windows немесе HP 3000 үшін MPE, ортақ кітапхана кодарында тек стекке негізделген (жергілікті) деректерге ғана рұқсат етілді немесе ортақ кітапхана кодарына басқа да маңызды шектеулер қойылды.

Жадымен бөлісу

Кітапхана коды бірнеше процестермен жадыда да, дискіде де ортақ болуы мүмкін. Егер виртуалды жад қолданылса, процестер процестердің әртүрлі адрестік кеңістіктеріне бейімделген RAM-ның бірдей физикалық бетін орындайды. Бұл тиімді. Мысалы, OpenStep жүйесінде қолданбалар көбінесе бірнеше жүз килобайт көлемде болып, жылдам жүктелетін; олардың көп бөлігі код опералық жүйе басқа мақсаттар үшін бұрыннан жүктеген кітапханаларда орналасқан. Бағдарламалар RAM-ды ортақтастыруды Unix-тегідей позицияға тәуелсіз кодты пайдалану арқылы іске асыра алады, бұл күрделі, бірақ икемді архитектураға алып келеді, немесе Windows және OS/2 сияқты ортақ виртуалды мекенжайларды пайдалану арқылы. Бұл жүйелер әртүрлі тәсілдермен, мысалы, адрестік кеңістікті алдын ала бейімдеу және әр ортақ кітапхана үшін орын резервтеу арқылы кодтың ортақ пайдалану ықтималдығы жоғары екенін қамтамасыз етеді. Үшінші балама – IBM System/38 және оның ізбасарлары қолданған бір деңгейлі сақтау. Бұл позицияға тәуелді кодты қабылдайды, бірақ кодты қайда орналастыруға немесе оны қалай ортақтастыруға болады деген маңызды шектеулер қоймайды. Кейбір жағдайларда ортақ кітапханалардың әртүрлі нұсқалары мәселе тудыруы мүмкін, әсіресе егер әртүрлі нұсқалардың кітапханалары бірдей файл атын алғанда және жүйеге орнатылған әртүрлі қолданбалардың әрқайсысы белгілі бір нұсқаны қажет етсе. Мұндай жағдай Windows және OS/2 DLL файлының атымен аталған DLL тозағы деп танылады. 2001 жылдан кейінгі көптеген қазіргі заманғы операциялық жүйелер мұндай жағдайларды жою үшін тазалау әдістерін қолданады немесе қолданбаға арналған "жеке" кітапханаларды пайдаланады.

Динамикалық байланысу

Динамикалық байланыстыру немесе кеш байланыстыру – бағдарлама жүктеліп жатқанда (жүктеу уақыты) немесе орындалғанда (орындалу уақыты) жасалатын байланыстыру, орындалатын файл құрылған кезде емес. Динамикалық байланысты кітапхана (динамикалық байланысты кітапхана немесе DLL, Windows және OS/2 жүйелерінде; OpenVMS жүйесінде бөлісілетін кескін; Unix сияқты жүйелерде динамикалық бөлісілетін нысан немесе DSO) – динамикалық байланыстыру үшін арналған кітапхана. Орындалатын файл жасалғанда, байланыстырушы минимал жұмыс ғана жасайды; ол бағдарламаға қандай кітапхана функциялары қажет екенін және кітапханадағы функциялардың индекс атауларын немесе нөмірлерін жазады. Байланыстыру жұмысының көп бөлігі бағдарлама жүктелгенде (жүктеу уақыты) немесе орындалу кезінде (орындалу уақыты) жасалады. Әдетте, қажетті байланыстыру бағдарламасы, "динамикалық байланыстырушы" немесе "байланыстыру жүктеуіші" деп аталады, негізгі операциялық жүйенің бір бөлігі болып табылады. (Дегенмен, динамикалық байланысты пайдаланатын және өзінің динамикалық байланыстырушысын қамтитын бағдарлама жазу мүмкін және бұл аса қиын емес, тіпті өзі динамикалық байланыстыруды қолдамайтын операциялық жүйе үшін де.) Бағдарламашылар динамикалық байланыстыруды алғаш рет 1964 жылы басталған Multics операциялық жүйесінде және 1960 жылдардың соңында құрылған MTS (Michigan Terminal System) жүйесінде әзірледі.

Оңтайландырулар

Көптеген жүйелердегі ортақ кітапханалар көбінесе жиі өзгермейді, сондықтан жүйелер әрбір ортақ кітапхананың жүйедегі болжамды жүктелу мекенжайын қажеттілік туғанға дейін есептеп, осы ақпаратты кітапханалар мен атқарылатын файлдарда сақтай алады. Егер жүктелетін әрбір ортақ кітапхана осы процестен өткен болса, онда олардың әрқайсысы алдын ала анықталған мекенжайда жүктеледі, бұл динамикалық байланыс процесін жылдамдатады. Бұл оңтайландыру macOS және Linux жүйелерінде сәйкесінше алдын ала байланыстыру (prebinding) немесе prelinking деп аталады. IBM z/VM ұқсас техниканы қолданады, ол "Үзіліссіз сақталған сегменттер" (DCSS) деп аталады. Бұл техниканың кемшіліктеріне ортақ кітапханалар өзгерген сайын осы мекенжайларды алдын ала есептеуге кеткен уақыт, мекенжай кеңістігінің орналасуын кездейсоқтандыру мүмкін еместігі және пайдалану үшін жеткілікті виртуалды мекенжай кеңістігінің қажеттігі (кем дегенде 64-биттік архитектураларды қабылдау арқылы уақытша шешілетін мәселе) жатады.

Орындау кезінде кітапханаларды табу

Ортақ кітапханаларды жүктеушілер функционалдығы жағынан әртүрлі. Кейбіреулері орындалатын файлдың кітапханаларға нақты жолдарды сақтауына тәуелді. Кітапхана атауын немесе файлдық жүйенің құрылымын өзгерту осы жүйелердің жұмыс істемей қалуына себеп болады. Көбінесе, орындалатын файлда кітапхананың тек атауы (және жолы емес) сақталады, ал операциялық жүйе белгілі бір алгоритм негізінде дискіде кітапхананы табу әдісін ұсынады. Егер орындалатын файлға қажетті ортақ кітапхана жойылса, жылжытылса немесе аты өзгертілсе, немесе кітапхананың үйлесімсіз нұсқасы іздеу тізімінде ертерек орналасқан жерге көшірілсе, орындалатын файл жүктеле алмайды. Бұл тәуелділік тозағы деп аталады және көптеген платформаларда кездеседі. Windows-тағы осы мәселенің белгілі бір түрі DLL тозағы деп танылады. Егер әр кітапхананың әр нұсқасы бірегей идентификатормен анықталса және әр бағдарлама кітапханаларға тек толық бірегей идентификаторлары арқылы сілтеме берсе, бұл мәселе туындамайды. Windows-тың бұрынғы нұсқаларындағы "DLL тозағы" мәселесі бағдарламалардағы динамикалық сілтемелерді шешу үшін кітапханалардың тек атауларын пайдаланудан туындады, олардың бірегей екеніне кепілдік берілмеді. (DLL тозағынан сақтану үшін Windows-тың жаңа нұсқалары көбінесе бағдарламаларға жеке DLL-дерді орнату мүмкіндігіне сүйенеді – бұл ортақ кітапханаларды пайдаланудан ішінара бас тарту, сонымен қатар ортақ жүйелік DLL-дерді олардың ескі нұсқаларымен алмастырудың алдын алатын механизмдерді қамтиды.)

Microsoft Windows-тың жүйелік жүйесі

Microsoft Windows COM объектілерін іске асыратын DLL-дерді жүктеуге тиіс орнын анықтау үшін тіркелімді тексереді, ал басқа DLL-дер үшін ол каталогтарды белгілі бір ретпен тексереді. Біріншіден, Windows бағдарламаны жүктеген каталогты тексереді. (NET Framework үшін жазылған жеке DLL қолданбалары 2002 жылдан бері DLL тозағы мәселесін болдырмау үшін ортақ DLL файлдарының негізгі сақтағышы ретінде Global Assembly Cache-ті де тексереді.)

OpenStep- ті ашу

OpenStep жүйесі бастапқыда іске қосылғанда, бірнеше белгілі орындардан кітапханалар тізімін жинап, көбірек икемділікке ие болды (PATH ұғымына ұқсас). Кітапханаларды жылжыту ешқандай мәселе тудырмайды, бірақ пайдаланушылар жүйені алғаш рет іске қосқанда уақыт шығынына тап болады.

Unix-қа ұқсас жүйелер

Unix-ке ұқсас көптеген жүйелерде динамикалық кітапханаларды іздеу үшін файлдық жүйе каталогтарын көрсететін "іздеу жолы" болады. Кейбір жүйелер конфигурациялық файлда әдепкі жолды анықтайды, ал басқалары оны динамикалық жүктеуге тікелей енгізеді. Кейбір атқарылатын файл форматтары белгілі бір бағдарлама үшін кітапханаларды іздеуге арналған қосымша каталогтарды көрсетуге мүмкіндік береді. Мұны әдетте орта айнымалысымен өзгертуге болады, бірақ setuid және setgid бағдарламалары үшін бұл мүмкіндік өшірілген, сондықтан пайдаланушы мұндай бағдарламаны root құқықтарымен кез келген кодты іске қосуға мәжбүрлей алмайды. Кітапханаларды жасаушылар өздерінің динамикалық кітапханаларын әдепкі іздеу жолындағы орындарға орналастыруға ынталандырылады. Алайда, бұл жаңа кітапханаларды орнатуды қиынға түсіреді, сондай-ақ бұл "белгілі" орындарда кітапхана файлдарының саны жылдам өсіп, басқаруды күрделі етеді.

Динамикалық жүктеме

Динамикалық жүктеу, динамикалық байланыстырудың бір бөлігі, талап бойынша орындалу кезінде динамикалық байланыстырылған кітапхананы жүктеу және түсіруді қамтиды. Мұндай талап ашық немесе жасырын түрде берілуі мүмкін. Жасырын талаптар компилятор немесе статикалық байланыстырғыш кітапхана сілтемелерін қосатын кезде жасалады, олар файл жолдары немесе тек файл атауларын қамтиды. Ашық талаптар қолданбалар операциялық жүйенің API-сына тікелей шақырғанда жасалады. Динамикалық байланыстырылған кітапханаларды қолдайтын көптеген операциялық жүйелер осындай кітапханаларды орындалу уақытында байланыстыратын API арқылы динамикалық жүктеуді де қолдайды. Мысалы, Microsoft Windows Microsoft Dynamic Link Libraries бағдарламаларымен LoadLibrary, LoadLibraryEx, FreeLibrary және GetProcAddress API функцияларын пайдаланады; POSIX негізіндегі жүйелер, UNIX және UNIX-қа ұқсас жүйелерді қоса алғанда, dlopen, dlclose және dlsym функцияларын пайдаланады. Кейбір әзірлеу жүйелері бұл процесті автоматтандырады.