Кіріспе
Hewlett Packard бағдарламалау тілі (HP) Systems Programming Language, жиі SPL деп қысқартылады, бірақ кейде SPL/3000 деп аталады, бұл Hewlett Packard компаниясы HP 3000 миникомпьютер желісі үшін жазған және алғаш рет 1972 жылы таныстырылған процедуралық бағдарланған бағдарламалау тілі. SPL HP 3000-дің негізгі операциялық жүйесі, Multi Programming Executive (MPE) жазу үшін пайдаланылды. Басқа платформалардағы ұқсас тілдер жалпы жүйелік бағдарламалау тілдері деп аталды, бұл мәселелерді шатастырды. Алғашында 3000 сериясын шығарған даму жобасының атымен аталған Alpha Systems Programming Language деп аталатын SPL Alpha-ның стек негізделген процессор дизайнын пайдалану үшін жасалған. Ол ESPOL-ге негізделген, бұл Burroughs B5000 орталық компьютер жүйелерінде қолданылатын ұқсас ALGOL-ден алынған тіл, ол сонымен қатар 1960 жылдардағы PL360 және JOVIAL сияқты бірқатар тілдерге әсер етті. 1970 жылдардың ортасына дейін HP жүйелерінің табысы бірнеше SPL тармақтарын шығарды. Мысал ретінде Zilog Z80 процессоры үшін ZSPL және Xerox Alto үшін Micro SPL. Кейіннен "Акция!" Atari 8 биттік отбасы үшін, ол сәл сәтті болды. Соңғысы Паскаль синтаксисін көбірек ұстанды, SPL-дің кейбір ерекшеліктерін жоғалтты. SPL HP 3000 платформасының бастапқы 16 биттік нұсқасының өмір сүру кезеңінде кеңінен қолданылған. 1980 жылдары HP 3000 және MPE PA RISC негізделген HP 9000 платформаларында жұмыс істейтін эмуляторда қайта іске асырылды. HP Pascal-ды PA RISC-де сүйікті жүйелік тіл ретінде ұсынды және SPL компиляторымен қамтамасыз етпеді. Бұл кодты күтіп-ұстау мәселесін туындатты, осы қажеттілікті қанағаттандыру үшін 3-ші тараптың SPL компиляторлары енгізілді.
the HP programming language
Systems Programming Language, often shortened to SPL but sometimes known as SPL/3000, was a procedurally oriented programming language written by Hewlett Packard for the HP 3000 minicomputer line and first introduced in 1972. SPL was used to write the HP 3000's primary operating system, Multi Programming Executive (MPE). Similar languages on other platforms were generically referred to as system programming languages, confusing matters. Originally known as Alpha Systems Programming Language, named for the development project that produced the 3000 series, SPL was designed to take advantage of the Alpha's stack based processor design. It is patterned on ESPOL, a similar ALGOL derived language used by the Burroughs B5000 mainframe systems, which also influenced a number of 1960s languages like PL360 and JOVIAL. Through the mid 1970s, the success of the HP systems produced a number of SPL offshoots. Examples include ZSPL for the Zilog Z80 processor, and Micro SPL for the Xerox Alto. The later inspired Action! for the Atari 8 bit family, which was fairly successful. The latter more closely followed Pascal syntax, losing some of SPL's idiosyncrasies. SPL was widely used during the lifetime of the original 16 bit version of the HP 3000 platform. In the 1980s, the HP 3000 and MPE were reimplemented in an emulator running on the PA RISC based HP 9000 platforms. HP promoted Pascal as the favored system language on PA RISC and did not provide an SPL compiler. This caused code maintenance concerns, and 3rd party SPL compilers were introduced to fill this need.
Тарих
Hewlett Packard 1967 жылы HP 2100 сериялы алғашқы мини-компьютерлерін ұсынды. Бұл машиналарды Union Carbide үшін жұмыс істейтін сыртқы топ жобалаған болатын, олар негізінен өнеркәсіптік бақылау үшін, кеңінен деректерді өңдеу нарығына емес. HP бұл мәселені өзінің қолданыстағы аспаптар бизнесінің табиғи бөлігі ретінде қарастырды және бастапқыда осы пайдаланушыларға ұсынды. Осыған қарамастан, HP машинаның бағасы мен өнімділігі арақатынасы оларды бизнес нарығында табысты етіп отырғанын анықтады. Осы кезеңде уақыт бөлісу түсінігі танымал болды, әсіресе негізгі жад бағасы төмендеп, жүйелер көбірек жадпен жеткізіле бастады. 1968 жылы HP компаниясы екі 2100 сериялы машинаны HP Time Shared BASIC бағдарламасымен бірге толық операциялық жүйемен қамтамасыз ететін жиынтық жүйе ұсынды. Бұл екі машина жүйесі, жалпы HP 2000s ретінде белгілі, бірден табысқа жетті. HP BASIC көптеген жылдар бойы үлкен ықпал етті және оның синтаксисін көптеген микрокомпьютерлік BASIC-терде, соның ішінде Palo Alto TinyBASIC, Integer BASIC, North Star BASIC, Atari BASIC және басқаларда көруге болады. HP дизайнерлері "Егер біз 2116 сияқты ескі компьютерді пайдаланып, уақыт бөлісу жүйесін осылай жасай алсақ, егер біз өз компьютерімізді жасасақ, не істей алатынымызды ойлап көріңіз". Осы мақсатта 1968 жылы компания жаңа орта өлшемді архитектураны жобалау үшін үлкен команданы құрастыруды бастады. Жаңа команда мүшелері арасында Burroughs және IBM мейнфрейм жүйелерінде жұмыс істегендер болды, ал нәтижесінде пайда болған тұжырымдамалар өте сәтті Burroughs B5000 жүйесіне қатты ұқсастықты білдірді. B5000-де көп бағдарламалауды іске асыруды жеңілдететін стек машина процессоры қолданылды, және осы архитектура жаңа HP тұжырымдамасына да таңдалды. Екі іске асыру қарастырылды, 32 биттік мейнфреймдік масштабтағы машина Omega деп аталады, ал 16 биттік дизайн Alpha деп аталады. Барлық күш-жігер Омегаға бағытталды, бірақ 1970 жылдың маусым айында Омега тоқтатылды. Бұл 2100-ші жылдардағыдан ерекшеленуі үшін Альфаның ауқымды қайта жобалануына әкелді, және ол ақыр соңында одан да агрессивті операциялық жүйе дизайны бойынша жоспарлармен пайда болды. Omega топтық режимде жұмыс істеуді және пайдаланушымен өзара әрекеттесуді өңдеу үшін кіші компьютерді, "алдыңғы аяқты" пайдалануды көздеді. Бұл 2000 сериясының жұмыс істеу концепциясымен бірдей болды. Алайда, тағы бір 2000 Альфа үшін жеткіліксіз болады, және партиялық, интерактивті және тіпті нақты уақыт режиміне арналған бір операциялық шешім қабылданды. Бұл жұмысты орындау үшін оған кең ауқымды тікелей жадқа қолжетімділігі (DMA) бар озық компьютерлік шина дизайны қажет болды және пайдаланушының әрекеттеріне тез жауап беру үшін озық операциялық жүйе (OS) қажет болды. B5000 сонымен қатар өзінің операциялық жүйесі мен негізгі құрал-жабдықтары ESPOL жоғары деңгейдегі тілінде бағдарламаланғандығымен ерекше болды. ESPOL - бұл B5000-де жұмыс істеуге бағдарланған ALGOL тілінің туындысы, бұл 1960 жылдары өте ықпалды болған және JOVIAL, PL/360 және BCPL сияқты жаңа тілдерге әкелген. HP тобы операциялық жүйелер жұмысында ALGOL-ден алынған тілді де қолдануды шешті. HP-дің осыған ұқсас тілі бастапқыда Alpha Systems Programming Language деп аталды. 1972 жылы HP 3000 ретінде пайда болғанға дейін Альфа бірнеше жыл бойы дамыды. Бұл машина нарықта бірнеше ай ғана болған, бірақ ол дұрыс жұмыс істемейтіндігі анық болды, және HP барлық 3000-ды қайтарып алуға мәжбүр болды. Ол 1973 жылдың соңында қайта енгізіліп, оның көптеген проблемалары шешілді. Бүкіл жүйеге үлкен жаңарту, CX машинасы және MPE C онымен жұмыс істеуге, оның имиджін қайта қарастырды және 3000 1970-ші жылдардың екінші жартысында тағы бір үлкен жетістікке жетті. Бұл табыстылық SPL-ді 2000 сериясындағы BASIC сияқты кеңінен тарады және сол тіл сияқты SPL-дің басқа платформалар үшін бірқатар нұсқалары пайда болды. Олардың ішінде ең танымал Micro SPL болды, ол Xerox Alto жұмыс станциясы үшін жазылған нұсқа. Бұл машина бастапқыда BCPL-ді негізгі тіл ретінде қолданған, бірақ оның орындалуына қанағаттанбау Генри Бейкерді 1979 жылы Клинтон Паркермен бірге іске асырған рекурсивті емес тілді жасауға итермеледі. Клинтон кейіннен Micro SPL-ді Action! 1983 жылы Atari 8 биттік отбасы үшін. HP HP 3000 жүйесін PA RISC чипсетінде қайта іске қосты, ол MPE/iX операциялық жүйесінің жаңа нұсқасын орындады. MPE/iX-тің екі режімі бар еді, "туған режімі" PA RISC үшін жаңа Pascal компиляторларын пайдалана отырып қайта құрастырылған қолданбаларды орындады, ал "қолайлы режімі" бар бағдарламалық жасақтаманы эмуляция арқылы орындай алады. HP MPE/iX үшін жергілікті режимдегі компиляторды ұсынбаған, со...
Жадыны сегменттеу
Классикалық HP 3000 физикалық жадыны 1, 2, 4, 8 немесе 16 64K (65536) 16 бит сөздер (128K байт) банкіне ұйымдастырды. Код (бөлек, өзгертілмейтін) және деректер бір-бірінен бөлек және әрқайсысы 32 мыңға дейінгі сөзді құрайтын өзгермелі ұзындықтағы сегменттерде сақталды. Процесс ішінде, көрсеткіштер сияқты дерек адрестері базалық регистрден (DB деп аталады) 16 биттік ауытқулар немесе көрсеткіштер регистрінен (Q немесе S) салыстырмалы ауытқулар болды, нәтижесінде процестің дерек аймағында жарамды мекенжай пайда болды (іріктеу деп аталады). Негізінен 16 биттік сөзге бағдарланған болса да, жүйе байт сақталған сөз мекенжайын пайдаланып, жеке байттарды массивте атауды қолдады. Байт сол жаққа 1 бит ауыстырылды, содан кейін жоғарғы байтқа жету үшін 0 немесе төменгі байтқа 1 қосылды. Осылайша байт адрестері сөздік адрестерден бөлек және ерекше болды және адрестің түсіндірілуі тек контекстуалды болды. Бұл өте қиын болып шықты және жүйедегі де, пайдаланушы кодтағы да көптеген қателердің көзі болды. Байт адрестерін 16 бит белгісіз (яғни LOGICAL типінде) ретінде пайдалану үшін сақ болу керек, мысалы, ұзындығын есептеуде, өйткені әйтпесе 2 ^ 16 немесе одан көп байт адресі 2s қосымшасы ретінде қарастырылады, нәтижесінде ұзындығы немесе ауытқулар қате есептеледі. Жеке процесс 32 мыңға дейінгі сөзден тұратын 254 код сегменттеріне қол жеткізе алды. Код сегменттері екі доменге бөлінді: алғашқы 191 - барлық процестер бөлісетін "жүйе" сегменттері, ал қалған 63 - бірдей бағдарламаны орындайтын барлық "пайдаланушы" сегменттері. Басқаруды беру ағымдағы сегменттегі немесе сыртқы сегменттің нөмірі мен оның ішіндегі жүйелік нөмірді көрсетті. Сегмент соңында шағын кестеде реттілік үшін кіру нүктесінің мекенжайы көрсетілген. Процесс коды стектегі деректер бойынша әрекет етті, жеке сегменттің көлемі 32 мың сөзге дейін жетті. Басқа архитектуралардағы стектерден айырмашылығы, HP 3000 стегі процестердің глобалдарына, күйін сақтауға, процедураның жергілікті жеріне (толыққанды қоңыраулар мен қайта кіруді қолдау) және сандық есептеу / бағалау үшін пайдаланылды. Операциялық жүйе қосымша жадқа негізделген (стак емес) дерек сегменттеріне қол жеткізуге мүмкіндік берді, бірақ олар нұсқаулар жиынтығымен шешілмеген, сондықтан бағдарлама қажет болған жағдайда деректерді "қосымша дерек сегменттерінен" және оларға жылжыту үшін жауапты болды. SPL бағдарламаларды оңай сегменттеуге мүмкіндік беретін әртүрлі қолдау жүйелерін қамтыды, содан кейін бұл сегментацияны кодта салыстырмалы түрде көрінбейтін етеді. Негізгі механизм келесі кодты қай сегментте орналастыру керектігін анықтайтын компилятор директивасын пайдалану болды. Әдеттегісі , бірақ бағдарламашы кодты блоктарға ұйымдастыру үшін қосымша атаулы сегменттерді кез келген санда қоса алады.
Басқа ерекшеліктері
SPL-де бітті оңайлатуға мүмкіндік беретін "битті алу" функциясы бар. Сөздегі кез келген битке немесе биттер тізбегіне синтаксис арқылы қол жеткізуге болады, мұнда x және y 0-ден 15-ке дейінгі бастапқы және соңғы биттік орындар болды. (Қосымша, x және y компиляция кезінде белгілі тұрақтылар болуы керек.) Осылайша A сақталатын сөздің төменгі байтын қайтарады. Бұл форматты қажет болған жағдайда биттерді бөлу және біріктіру үшін қолдануға болады. Сонымен қатар, ауысымдар мен айналымдар үшін қосымша операциялар қарастырылған және оларды кез келген айнымалыға қолдануға болады, мысалы .