Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Классикалық Mac OS (алғашқы Apple Macintosh операциялық жүйесі) кеңейтулер жүйенің мүмкіндіктерін кеңейтетін шағын код бөліктері болды. Олар жүйе іске қосылғанда бастапқыда орындалды және түрлі механизмдер арқылы жұмыс істеді, соның ішінде кодты түзету (trap patching) және басқа да кодты өзгерту техникалары. Бастапқыда Apple әзірлеушілерінің тәжірибесі болған кеңейтулер модульдік операциялық жүйені ұсынудың стандартты тәсіліне айналды. TCP/IP желілік стектері (MacTCP және Open Transport) және USB және FireWire қолдауы сияқты маңызды жүйелік қызметтердің көп бөлігі кеңейтулер ретінде жүзеге асырылған қосымша компоненттер болды. "Жүйелік кеңейту" термині кейіннен фондық процестерді де қамтуға бастады. Кеңейтулер, әдетте DOS-тың тоқтату және тұрақты резиденттік бағдарламаларымен немесе Unix-тың демонды бағдарламаларымен бірдей рөл атқарды, бірақ негізгі операциялық жүйе кодын өзгерту арқылы, олар қолданыстағы операциялық жүйенің әрекетін өзгертуге қабілетті болды, ал қалған екеуі мұндай мүмкіндікке ие емес еді.
On the classic Mac OS (the original Apple Macintosh operating system), extensions were small pieces of code that extended the system's functionality. They were run initially at start up time, and operated by a variety of mechanisms, including trap patching and other code modifying techniques. Initially an Apple developer hack, extensions became the standard way to provide a modular operating system. Large amounts of important system services such as the TCP/IP network stacks (MacTCP and Open Transport) and USB and FireWire support were optional components implemented as extensions. The phrase "system extension" later came to encompass faceless background applications as well. Extensions generally filled the same role as DOS's terminate and stay resident programs, or Unix's daemons, although by patching the underlying OS code, they had the capability to modify existing OS behaviour, the other two did not.
INIT тетігі
Кеңейтулер тұжырымы Macintosh жүйесінің бастапқы бағдарламалық жасақтамасында болған жоқ, бірақ жүйеде жеке түзету механизмі болды, сонымен бірге әзірлеушілер INIT жүктеушісін пайдалануды үйренді. Бұл код "INIT" типіндегі жүйелік ресурстарды іздеп, жүктеу және жүйе қосылғанда оларды іске қосатын. Код ресурстары Mac System suitcase-тің ресурс бөлімінде тікелей сақталуы керек еді, яғни ол тек ResEdit немесе басқа ресурс редакторын пайдалануға дағдылы "күшті пайдаланушыларға" ғана қолжетімді болды. Бұл механизмді пайдалану қолдау көрсетілмейтін хакерлік әрекет болғандықтан және осылай тек 32 INIT жүктеуге болатындықтан, Apple компаниясы жауап ретінде басқарылатын шешім ұсынды. Бастапқыда бұл жүйелік файлда ID 31 нөмірімен орналасқан "INIT" типті ресурс болды, ол жүйелік папкадағы "INIT" типіндегі қосымша файлдарды іздеп, олардың ішіндегі INIT ресурстарын жүктеп, іске қосатын. (Осы себепті кейбір тәжірибелі Mac бағдарламашылары кеңейтулерді жүктеу механизмін "INIT 31 амалы" деп атайды. INIT енді жүйелік папкаға файлды орналастыру арқылы орнатылуы мүмкін болды, бұл орташа пайдаланушының мүмкіндіктері шегінде. System 7 нұсқасынан бастап кеңейтулер ыңғайлы болу үшін жүйелік папкадағы "Extensions" папкасына көшірілді, сондай-ақ автоматты бағыттау механизмі енгізілді, сондықтан кеңейтуді жүйелік папкаға сүйреп тастау арқылы файл тиісті қосалқы папкаға орналастырылатын. Кеңейтулер өмір бойы "INIT" ресурс типін сақтап келді, ал жүктеуші осы ресурстарды көптеген орындарда іздеу үшін біртіндеп жаңартылды, соның ішінде әртүрлі форматтағы басқару панельдерінің ресурс бөлімдерінде және Chooser-де.
The concept of extensions was not present in the original Macintosh system software, but the system nevertheless had a private patching mechanism that developers soon learned to take advantage of the INIT loader. This code would search for system resources of type 'INIT', and load and run them at boot time. The code resources had to be stored directly in the Mac System suitcase's resource fork, meaning it was only really available to "power users" who would be comfortable using ResEdit or other resource editor. Since taking advantage of this mechanism was an unsupported hack, and only 32 INITs could be loaded in this manner, Apple responded by providing a more managed solution. Initially this itself was in the form of an 'INIT' resource with ID 31 placed in the System file that would search for further files of type 'INIT' in the System Folder, and load and run INIT resources inside them. (This is why some veteran Mac programmers still refer to the extensions loading mechanism as the "INIT 31 trick". INITs could now be installed simply by placing a file in the System Folder, well within the abilities of the average user. Starting with System 7, extensions were relocated to the Extensions folder within the System Folder for convenience, and an auto routing mechanism was implemented so that placing an extension into the System Folder through drag and drop would actually place the file in the appropriate subfolder. Extensions retained the resource type of 'INIT' throughout their lifetime, and the loader was gradually enhanced to search for these resources in numerous places, including in the resource forks of control panels in a variety of formats and the Chooser.
Ұзартулар
INIT жүйелік кеңейтулерге айналды, соның ішінде қосымша арнайы хаттамалар пайда болды, мысалы, жүктелу кезінде көрсетілетін белгішені беру (оның бастауы "ShowINIT" болған). Әрбір кеңейту жүктеліп жатқанда экрандағы «бөлшектер мен белгішелер шеруі» барлық Mac пайдаланушыларына таныс болды. Apple өзі де операциялық жүйенің маңызды (бірақ қосымша) бөліктерін кеңейтулер ретінде шығарды, мысалы QuickTime, QuickDraw 3D және тағы да басқалары. Mac OS-тегі көптеген қызметтер мен драйверлер – ресми және үшінші тараптан – кеңейтулер түрінде ұсынылды, бұл оларды өшіру арқылы жүйенің көлемін кішірейте беруге мүмкіндік берді. Жүйелік кеңейтулер Macintosh-та тұрақсыздыққа себеп болатын жиі кездесетін мәселе болды, себебі үшінші тараптың кодының сапасы әртүрлі болды және олар жүйені дұрыс жұмыс істемейтін тәсілдермен өзгертуге тырысты. Кейбір кеңейтулер бір-бірімен үйлесімсіз жұмыс істеді немесе тек белгілі бір ретпен жүктелгенде ғана жұмыс істеді. Сонымен қатар, әртүрлі кеңейтулер жүйенің бір бөлігін өзгертуге тырысуы мүмкін, бұл кеңейтулердің қақтығысына және басқа тұрақсыздықтарға әкелуі мүмкін. Бұл мәселелерді анықтау – көптеген Mac пайдаланушылары кездесетін тағы бір қиындық болды. Mac OS кеңейтулерін жөндеу – уақытты көп алатын, екіге бөліп, сынақтар мен қателер арқылы іздеу процесі болуы мүмкін. Жүйені таза күйінде жүктеудің ең оңай жолы – Shift пернесін басып тұру: кеңейтулерді жүктеу процесі өткіріліп тасталады. System 7.5 кеңейтулерді басқарушыны (Extensions Manager) қосты, ол пайдаланушыға белгілі бір кеңейтулерді жылдам қосуға немесе өшіруге, сондай-ақ бір-бірімен дұрыс жұмыс істейтін жиынтықтарды анықтауға мүмкіндік берді. Extensions Manager екі оқуға арналған базалық жиынтықпен бірге келді: біреуі жүйенің негізгі жұмысы үшін қажетті кеңейтулердің кіші жиынтығын қамтиды, ал екіншісі жүйемен бірге келген барлық ресми кеңейтулерді қосты, бірақ барлық үшінші тарап кеңейтулерін өшірді. Кеңейтулерді жүктеу реті – GetFInfo функциясының жанама салдары болды, жүктеуші осы функцияны Кеңейтулер бумасындағы файлдарды санау үшін пайдаланды. Apple әрқашан осы функцияны пайдаланып файлдарды санау нәтижесіндегі рет анықталмаған десе де, HFS томдарында бұл функция HFS каталогында сақталған ретпен файлдарды санады. Адамдар файл атауының бірінші таңбасын өзгерту кеңейтулерді жүктеу ретін өзгерте алатынын анықтады, бұл Mac OS 8.1 HFS+ жүйесіне көшкенде қиындықтар тудырды. Apple осы функциямен қайтарылған файл атауларын кестеге сұрыптау үшін жүктеушіні өзгертуге мәжбүр болды және бағдарламалық жасақтамаға кестені өзгертуге мүмкіндік беретін интерфейс ұсынды.
INITs evolved into system extensions, gaining additional ad hoc protocols along the way, such as supplying an icon to be displayed at boot time (the origin of this was 'ShowINIT'). The 'parade of puzzle pieces and icons' across the screen as each extension loaded became familiar to all Mac users. Apple themselves eventually released major (but optional) pieces of the operating system as extensions, such as QuickTime, QuickDraw 3D and many others. A substantial number of services and drivers in Mac OS—both official and third party—were provided as extensions, allowing for the OS to be trimmed down by disabling them. System extensions were a common source of instability on the Macintosh, as third party code was of variable quality and would often patch the system in ways that did not always work correctly. Some extensions didn't work properly together, or worked only when loaded in a particular order. In addition, different extensions might try to patch the same part of the system, which could lead to extension conflicts and other instability. Tracking down these sources of trouble was another task most Mac users encountered at some point. Troubleshooting Mac OS extensions could be a time consuming process of bisecting and trial and error. The simplest way to clean boot the operating system was to hold the shift key: loading of extensions would be bypassed. System 7.5 added the Extensions Manager, which allowed the user to quickly enable or disable particular extensions, and also to define sets of them that would work correctly together. Extensions Manager came with two read only base sets provided: one that contained the subset of extensions needed for basic OS operation, and one that enabled all the official extensions that shipped with the OS but disabled all third party extensions. The loading order of extensions was a side effect of the GetFInfo function that was used by the loader to enumerate the files in the Extension folder. While Apple always have said that the order that results from enumeration of files using this function is undefined, on HFS volumes this function enumerated files in the order stored in the HFS catalog. People figured out that changing the first character in the file name could change the extension loading order, which caused trouble when Mac OS 8.1 moved to HFS+. Apple ended up having to change the loader to sort the filenames returned by this function into a table, and provided an interface to allow software to change the table.
Конфигурация және басқару панельдері
Жүйелік кеңейтулерде пайдаланушы интерфейсі болмады: кеңейтумен ұсынылатын қызметтерді пайдаланушы баптауға арналған стандартты механизм жоқ еді. Кеңейтулер графикалық интерфейсті өзгерте алатын (мысалы, мәзір жолағына жаңа мәзірлер қосу арқылы) және осылайша пайдаланушы конфигурациясын қабылдай алатын, немесе конфигурациялық интерфейсті ұсынатын қосымшамен бірге келе алатын. System 7-мен бірге басқару панельдері дискідегі жеке Finder плагиндеріне айналды, оларды пайдаланушы іске қоса алатын. Басқару панеліне INIT кодын енгізу арқылы, жүктелу кезінде операциялық жүйені өзгертетін және кез келген басқа операциялық жүйенің басқару панелі сияқты өз құрамында конфигурациялық интерфейсі бар кеңейту/басқару панелі гибридтерін жасау мүмкін болды.
System extensions had no user interface: there was no standard mechanism by which the user could configure the services provided by an extension. Extensions were able to alter the graphical interface (such as adding new menus to the menu bar) and thus accept user configuration, or they could be accompanied by an application to provide the configuration interface. With System 7, control panels become separate Finder plugins on disc that could be launched by the user. By inserting INIT code into a control panel, it became possible to build extension/control panel hybrids that modified the operating system at boot time and contained their own in built configuration interface in the same form as any other operating system control panel.
Бетсіз фонды қолдану
MultiFinder және System 7 және одан кейінгі нұсқалары UNIX даемондары немесе Windows қызметтері сияқты интерфейсі жоқ аядағы қолданбаларды қолдады, бірақ кооперативтік көп тапсырмалылықты пайдаланды. Мысалдарға Time Synchronizer (күндізгі уақытты түзету және қашықтан уақытты синхрондау), Бағдарламалық жасақтаманы жаңарту кестесі және Папка әрекеттері (папка оқиғаларын өңдеу) кіреді. Интерфейсі жоқ аядағы қолданбалар – бұл қолданбалар мәзірде көрсетілмейтін шектеумен бірге, әдеттегі қолданбалар болатын. Интерфейсі жоқ аядағы қолданба мен әдеттегі қолданба арасындағы жалғыз техникалық айырмашылық – 'SIZE' ресурсының ішіндегі "тек аяда" деген белгі қойылған. Оларға әдеттегі қолданба деңгейіндегі терезені ашуға тыйым салынған: егер олар мұны істесе, жүйе тоңып қалатын. Дегенмен, олар назарды ала да, жоғалта да алмайтын жаһандық қалқымалы терезелерді ашуға құқылы болды. Mac OS 8 және 9-дағы Control Strip – пайдаланушымен өзара әрекеттесуді қамтамасыз ету үшін жаһандық қалқымалы терезені көрсеткен интерфейсі жоқ аядағы қолданбаның мысалы еді. Қолданбаларды ауыстыру да сондай болатын. Алайда, пайдаланушы Control Strip-тің жұмыс істеп тұрған процесс екенін білмеді; ол жай ғана қосымша интерфейс мүмкіндігі ретінде ұсынылды. Жүйе интерфейсі жоқ аядағы қолданбаларды жай ғана "жүйелік қолданбалар" деп сипаттады. Ашық скрипт архитектурасындағы (және демек AppleScript) тілдік мүмкіндіктер бастапқыда "скрипт қосымшалары" немесе OSAXes деп аталатын динамикалық түрде жүктелетін плагиндер ретінде жүзеге асырылды. Mac OS 8 және 9-да бұларға қажет болғанда аяда жүктелетін интерфейсі жоқ қолданбалар қосылды. Әдеттегі қолданбалар сияқты, осы қолданбаларға tell операторларын пайдаланып қол жеткізілді: OSAXes-тегідей жаһандық атау кеңістігі жаңартылмады. Операциялық жүйе мұндай процестердің іске қосылғанын немесе олардың жұмыс істеп жатқанын көрсетпеді.
MultiFinder and System 7 and later supported faceless background applications similar to UNIX daemons or Windows Services, though using cooperative multitasking. Examples included Time Synchronizer (daylight saving time adjustment and remote time synchronization), Software Update Scheduler, and Folder Actions (folder event handling). Faceless background applications were regular applications with the restriction that they did not show up on the application menu. The only technical differences between a faceless background application and a regular application were that the "Only background" flag was set in the 'SIZE' resource. They were prohibited from opening a normal application level window: if they did so, the system would freeze. They were free to open global floating windows, however, since these could neither gain nor lose focus. The Control Strip in Mac OS 8 and 9 was an example of a faceless background application that displayed a global floating window to provide user interaction. The Application Switcher was another. However, the user was not aware at any time that the Control Strip was a running process; it was simply presented as an extra interface feature. The system simply described faceless background applications as "system applications". Language features in the Open Scripting Architecture (and thus AppleScript) were initially implemented as dynamically loadable plugins known as "scripting additions" or OSAXes. In Mac OS 8 and 9, these were augmented by faceless background applications that were loaded in the background on demand. Just as with regular applications, these applications were accessed using tell clauses: the global namespace was not updated as was the case with OSAXes. The operating system did not indicate the launch of such processes nor indicate whether or not they were running.
INIT-тен тыс басқа кеңейтулер
INIT типті кеңейтулер операциялық жүйені жаңарту үшін жүктелу кезінде жүктелді. Ұқсас жағдайларда, Extensions папкасына басқа да файлдар орналастырылуы мүмкін еді, олардың көпшілігі жүктелу кезінде жүктелмейтін. Олардың ең маңыздысы – оңай іздеу үшін Extensions папкасына жиі орналастырылатын ортақ кітапханалар. Ортақ кітапханалар жүктелу кезінде жүктелмейтін. INIT типті файлдар ғана жүйелік кеңейту емес. Тағы бір түрі – scri, немесе WorldScript кеңейтімі. BootX Linux жүктеуіші scri ретінде іске асырылды, себебі мұндай файлдар жүктелу процесінің өте басында, басқа кеңейтулерге дейін жүктеледі. BootX содан кейін пайдаланушыға Mac OS жүктеуді аяқтауға немесе Linux жүктеуге рұқсат беру үшін диалог көрсетуге мүмкіндік берді.
INIT type extensions were loaded at boot time to update the operating system. Confusingly, various other files could be placed into the Extensions folder as well, many of which were not loaded at boot time. The most notable of these were shared libraries which were commonly put into the Extensions folder for ease of location. Shared libraries were not loaded at boot time. INIT type files were not the only type of system extension. Another type was scri, or WorldScript extension. The BootX Linux bootloader was implemented as a scri simply because such files were loaded very early on in the boot process, before all other extensions. BootX could then display a dialog offering to let the user finish booting Mac OS or load Linux instead.