Online-uroki.ru

Онлайн уроки и курсы
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Системное и интернет программирование

Программирование «с нуля». Как изучать системное программирование

Итак, вопреки всякой логике вы всё же решили научиться писать программы. Причем именно писать, а не «ваять» наскоро что придется и как придется. Неважно, что сподвигло вас на это решение, – стремление получить престижную профессию, врожденная любознательность, желание выделиться среди друзей или взломать сервер Пентагона. В любом случае вам придется пройти тернистый путь, лишь изредка перемежающийся минутами подлинного торжества.
О том, с чего нужно начинать учиться программированию, сказано немало. Неоднократно писала об этом и «Магия ПК». Однако многое из того, что советуют профессиональные педагоги, на практике оказывается более чем спорным. А потому взглянем на эту проблему еще раз – с позиций практики.

Антиутопия компьютерной педагогики
Во многих современных учебниках по программированию настоятельно рекомендуется начинать с освоения какой-либо системы визуального программирования – Delphi, C++ Builder, Visual C++ или Visual Basic. При этом приводятся следующие аргументы:

• визуальные среды позволяют быстро получить привлекательный результат;
• все современные системы программирования ориентированы на объектный подход; к чему учиться устаревшим парадигмам, если ООП – наиболее современен?
• визуальные среды – профессиональный инструмент, знание которого пригодится в будущей работе.

Оспаривать эти доводы трудно, и тем не менее они более чем странны. Начнем с того, что получение учащимся осязаемого результата действительно весьма важно для последующего обучения, но при этом отнюдь не безразлична ценность самого результата. В конце концов, выигрыш в чемпионате по Quake – тоже результат, вот только ценность его близка к нулю.
Практика показывает, что люди, начавшие учиться с освоения визуальных технологий, в дальнейшем с большим трудом привыкают к тому, что сущность программирования заключается не в перетаскивании управляющих элементов по рисованному окну. Элементарные понятия, связанные с исполнением программы как последовательности инструкций, осознаются ими с большим трудом. Не случайно пользователи Windows затрачивают на изучение программирования значительно больше сил, нежели те, кто знакомился с компьютером во времена более примитивных операционных систем.


Еще более спорным является тезис о целесообразности начинать изучение программирования непосредственно с объектного подхода. Спору нет, ООП – прогрессивная и современная технология, однако это – не панацея. И сейчас во многих случаях решения, диктуемые этим подходом, оказываются далеко не оптимальными. Но не это главное. Главное заключается в том, что идея программного моделирования предметной области, лежащая в основе концепции ООП, слишком сложна для восприятия без предварительной подготовки. И если понять сам принцип восприятия мира как множества взаимодействующих сущностей при наличии определенного философского фундамента еще возможно, то осознать, как исполняется объектная программа на ЭВМ, – почти непосильная задача.
Наконец, третий тезис также не бесспорен. Во-первых, потому что изучение программирования лишь на несколько процентов состоит в освоении конкретной среды, а большую часть времени и сил приходится тратить на осознание общих принципов, формирование специфики мышления, ознакомление с типовыми подходами и приемами. Во-вторых, практика показывает, что профессиональному программисту труднее всего работать именно в той среде, с которой начиналось его обучение.
Это легко объяснимо – на начальной стадии каждый из нас делает массу ошибок, формирует множество неверных представлений, которые впоследствии пересматриваются, однако оставляют заметный след в нашем сознании. И, вторично оказываясь в той же ситуации, с которой ему приходилось сталкиваться в процессе обучения, специалист как бы теряет накопленные профессиональные навыки и непроизвольно ищет решение на основании давних ассоциаций новичка. По крайней мере таково его первое движение, а именно оно играет основную роль в принятии разработчиком ключевых проектных решений.
Однако главное заключается в другом: использование визуальных сред, во всяком случае правильное использование, полностью заслоняет от пользователя архитектуру машины, специфику выполнения ею написанной программы. А между тем, для того, чтобы программирование не превращалось в мистический процесс укрощения своенравного компьютера, а оставалось ремеслом, профессией, очень важно, чтобы разработчик хорошо понимал принципы выполнения своей программы. И с этой точки зрения обучение на основе визуальных сред и ООП бессмысленно, ибо человек, наученный таким образом, подобен монтеру из известной рекламы – работающая программа невольно вызывает у него восклицание: «Ё-мое, что ж я сделал-то?»

«К четырем прибавить два. «
Интересно, что идея начинать обучение с конца характерна только для программирования. В самом деле, никто ведь не пытается преподавать релятивистскую механику прежде законов Ньютона! Все науки прошли долгий путь развития, множество ошибочных и неточных теорий, некорректных экспериментов. Школьник, изучая их, как бы повторяет за несколько лет всё, что делало человечество в течение тысячелетий. Бессмысленная трата времени? Нет! Двигаясь таким образом, ученик как бы сам приходит к тем же выводам, что и его великие предшественники.
Отчего же не начать программирование с начала? Нет, не с тумблеров и светодиодов разумеется, но с фон-неймановской архитектуры и понятия программы как последовательности исполняемых команд. Естественно, рассматривать принципы машинной организации «всухую», особенно если вы молоды и честолюбивы, совсем неинтересно. А потому, если уж начинать писать программы, то лучше всего сразу осваивать язык ассемблера.
Парадокс? Ведь Ассемблер по сей день считается едва ли не самым сложным из языков программирования. Однако на самом деле он имеет немало достоинств именно с точки зрения «обучения с нуля».
Во-первых, Ассемблер прост. Это не просто сенсационное заявление – это факт. Архитектура компьютера, будь то IBM-совместимый ПК или промышленный контроллер от Toshiba, как правило, сравнительно проста – память, регистры, стек. Несколько видов адресации да условные и безусловные переходы. Порождаемый каждой командой эффект обычно тривиален для понимания, а потому весь процесс изучения сводится к механическому запоминанию мнемоник инструкций. Если последние достаточно логичны, как, например, в Ассемблере процессоров Intel, учить машинный язык совсем несложно.
Во-вторых, изучая язык Ассемблера, учащийся волей-неволей вынужден сталкиваться с архитектурными особенностями своего компьютера. Такие понятия, как сегменты памяти, порты или escape-последовательности из чисто абстрактных категорий становятся инструментами для решения прикладных задач. Более того, понимая, можно ли реализовать ту или иную программу на Ассемблере, хотя бы теоретически, программист ощущает пределы возможностей машины, осознает, что можно требовать от компьютера, а что – нет.
Еще одно несомненное преимущество заключается в том, что переход от Ассемблера к языку высокого уровня значительно проще, чем наоборот. Осваивая C++ или Паскаль, ассемблерщик представляет себе, как работает та или иная конструкция на уровне машинного кода, во что она будет скомпилирована. Соответственно, он понимает свою программу, не боится ее.
Кроме того, и это психологически важно, Ассемблер благодаря своей универсальности рождает уверенность, что в случае необходимости отдельные фрагменты программы могут быть написаны или отлажены на самом низком уровне. А это – пусть эфемерная, но всё же гарантия того, что любая техническая проблема может быть решена, пусть большой кровью, но наверняка.
И, наконец, даже сейчас язык Ассемблера иногда бывает полезен и даже незаменим. И не только при программировании для спецмашин, контроллеров и другого «экзотического» оборудования, но и при разработке некоторых программ для ПК – драйверов, системных утилит, фрагментов операционных систем, при реализации алгоритмов, требующих повышенной производительности.
Очень часто основным недостатком Ассемблера называют громоздкость написанных на нем программ и сложность их тестирования и отладки. Действительно, работать с десятками и сотнями тысяч строк кода самыми примитивными средствами нелегко. Но именно так рождается то упорство, та бесконечная настойчивость, без которой самый одаренный человек никогда не сможет стать хорошим программистом. Ибо для хорошего профессионала мало придумать красивый алгоритм, нужно еще уметь при необходимости дни и недели «выуживать» из него неуловимую, непонятную ошибку.

Читать еще:  Школа программирования для детей

«Мы всё начнем сначала…»
Если вы вознамерились начать учиться программированию с освоения Ассемблера, то небесполезно будет знать несколько азбучных истин, способных существенно облегчить учебный процесс.
Во-первых – о книгах. Учиться программированию проще и эффективнее с книгой в руках, но достать в наше время хорошую книгу по Ассемблеру непросто. Чаще всего попадаются либо справочники по архитектуре ЭВМ, либо толстые учебники с массой примеров, лишающие читателя всякого удовольствия от самостоятельного творчества и мешающие воспринимать принципы построения программ, затмевая их массой ненужных деталей. Начинающему лучше всего подойдет простой справочник по системе команд процессора и функциям операционной системы. Удобным компьютерным вариантом такого пособия может служить система TechnoHelp.
Не стоит пытаться писать на Ассемблере под Windows. Вообще, желание сразу получить красивые окошечки мало совместимо с последовательным изучением программирования. В данном же случае вы рискуете утонуть в массе ненужных и непонятных деталей.
Первое, с чем следует ознакомиться, – организация ЭВМ: регистры, память, стек. Первые несколько программ логично написать максимально просто – несколько пересылок между регистрами и памятью, запись и чтение из стека, передачи управления, вызов процедур. Работу программ можно изучить по шагам (в режиме трассировки) в любом доступном отладчике – Turbo Debugger, AFD и даже MS Debug.
Далее можно переходить к функциям DOS – выводу на экран, работе с файлами, распределением памяти. Последний шаг – программирование внешних устройств: динамика, таймера, параллельного и последовательного порта. Имея в запасе такой инструментарий, можно переходить к реальным задачам. Интереснее, но и сложнее всего разрабатывать резидентные программы и драйверы: овладев этим искусством, вы можете смело переходить к языкам более высокого уровня.

Доброе напутствие
Чтобы закончить с общими рекомендациями по тому, как проще всего освоить язык Ассемблера, стоит дать еще несколько конкретных советов:
1. По мнению большинства ассемблерщиков, лучший транслятор для IBM PC – TASM фирмы Borland. Версия, поскольку вы вряд ли будете писать очень сложные программы, решающего значения не имеет.
2. Знание Ассемблера – не вершина, а только первая ступень к профессионализму. Если вам удалось в совершенстве овладеть этим языком, вы скорее всего хорошо представляете себе устройство компьютера и базовые принципы исполнения программ в однозадачной операционной системе. Это – необходимые навыки, но не более того.
3. Закончив изучать Ассемблер, познакомьтесь с одним из процедурных языков, лучше всего Паскалем или C++ в режиме расширенного C. Только поняв особенности конструкций высокого уровня, овладев технологией структурного программирования можно начать готовиться к штурму ООП.
4. Разрабатывая программы на Ассемблере, не стремитесь как можно шире использовать макросредства и специальные директивы компилятора. Во-первых, этим вы, скорее всего, сведете к нулю переносимость своей программы, во-вторых, для целей обучения значительно полезнее, чтобы каждая инструкция, исполняемая в программе, была написана вами собственноручно.
5. Не «срисовывайте» готовые примеры. Возможно, есть люди, способные обучаться на чужом опыте эффективнее, чем на своем, но только мне такие не известны. Естественно, модификация работающих примеров позволит получать результат значительно быстрее, чем при работе «с нуля», только познавательный эффект от нее будет, увы, невелик.
6. Стремитесь не только узнать, но и сделать: доделывайте работу до конца. Разработать хорошую программу на Ассемблере не просто, но если вы справитесь с этой задачей, быстрота и компактность вашего детища станут достойной наградой за труды.
Дерзайте, леди и джентльмены!

OCR: fir-vst, 2016
Рисунок: Игорь Копельницкий
©

Системное программирование

Системное программирование (или программирование систем) — подраздел программирования, заключающийся в работе над системным программным обеспечением.

Определение «системное» подчеркивает тот факт, что результаты этого вида программирования существенно меняют свойства и возможности вычислительной системы. В то же время бесспорным остаётся тот факт, что в определенной степени этот результат имеет место при применении любых программ, выполняемых в вычислительной системе. Поэтому между программированием «системным» и «несистемным» (прикладным программированием») нет четкой границы.

Вычислительная система имеет иерархическую структуру, которую можно представить в виде набора вложенных слоев, на внешнем из которых находятся прикладные программы, а на самом внутреннем — аппаратура компьютера. Условная степень системности нарастает при программировании, затрагивающем все более внутренние уровни системы.

Одной из основных отличительных черт системного программирования по сравнению с прикладным заключается в том, что результатом последнего является выпуск программ для взаимодействия с пользователем (например, текстовый процессор). В то время как результатом системного программирования является выпуск программ для взаимодействия с аппаратным обеспечением (например, дефрагментация жёсткого диска), что подразумевает сильную зависимость таких программ от аппаратной части. В частности выделим следующее:

  • программист должен учитывать специфику аппаратной части и другие, часто уникальные, свойства системы в которой функционирует программа, использовать эти свойства, например, применяя специально оптимизированный для данной архитектуры алгоритм;
  • часто используется низкоуровневый язык программирования или такой диалект языка программирования, который
    • позволяет функционирование в окружении с ограниченным набором системных ресурсов,
    • работает максимально эффективно и имеет минимальное запаздывание по времени завершения,
    • имеет маленькую библиотеку времени выполнения (RTL) или не имеет её вообще,
    • позволяет прямое управление (прямой доступ) к памяти и управляющей логике,
    • позволяет делать ассемблерные вставки в код;
  • отладка программы может быть затруднена при невозможности запустить её в отладчике из-за ограничений на ресурсы, поэтому может применяться компьютерное моделирование для решения этой проблемы.

Подводя итог, можно утверждать, что СИСТЕМНЫМ следует называть подраздел программирования как вида инженерной деятельности, в котором программист использует специфические и часто уникальные свойства и возможности ВНУТРЕННИХ УРОВНЕЙ вычислительной системы.

Системное программирование отличается от прикладного, что обычно приводит к специализации программиста в одном из них.

Часто, для системного программирования доступен ограниченный набор средств. Использование автоматической сборки мусора довольно редкое явление и отладка обычно сложна. Библиотека времени выполнения, при её наличии, часто менее способная и совершает меньшее количество проверок. В связи с этими ограничениями обычно применяют при мониторинге и записи данных — операционные системы.

Читать еще:  Московская олимпиада по программированию

Wikimedia Foundation . 2010 .

Смотреть что такое «Системное программирование» в других словарях:

системное программирование — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN systems programming … Справочник технического переводчика

системное программирование — sisteminis programavimas statusas T sritis automatika atitikmenys: angl. system programming vok. Systemprogrammierung, f rus. системное программирование, n pranc. programmation système, f … Automatikos terminų žodynas

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ — 1) Инженерная дисциплина, разрабатывающая методы построения системных программ, т. е. программ, входящих в состав больших программных комплексов (программных систем), придающих вычислительным средствам постоянные функции нек рой специальной… … Математическая энциклопедия

Системное программное обеспечение — Системное программное обеспечение это комплекс программ, которые обеспечивают управление компонентами компьютерной системы, такими как процессор, оперативная память, устройства ввода вывода, сетевое оборудование, выступая как «межслойный… … Википедия

ПРОГРАММИРОВАНИЕ — 1) процесс составления программы, плана действий; 2) дисциплина, изучающая методы и приемы составления программ. С определенной долей условности П. как дисциплина делится на программирование теоретическое, изучающее математич. абстракции программ … Математическая энциклопедия

ПРОГРАММИРОВАНИЕ — 1) процесс составления программы, плана действий. 2) Раздел информатики, изучающий методы и приёмы составления программ. С долей условности П. как дисциплина разделяется на: теоретическое, изучающее матем. абстракции программ (как объектов с… … Физическая энциклопедия

ПРОГРАММИРОВАНИЕ — совокупность и последовательность действий в целях получения конкретного результата; (1) П. в вычислительной технике процесс составления (см.) в соответствии с данным (см.) на ЭВМ, а также создание средств программного обеспечения, с помощью… … Большая политехническая энциклопедия

Перехват (программирование) — У этого термина существуют и другие значения, см. Перехват. Перехват (англ. hooking) технология, позволяющая изменить стандартное поведение тех или иных компонентов информационной системы. Содержание 1 Назначение технологии перехвата … Википедия

Событийно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия

RAD (программирование) — У этого термина существуют и другие значения, см. RAD. Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектиро … Википедия

Системное программирование

Программирование

Материал из Википедии — свободной энциклопедии

Программирование – процесс и искусство создания компьютерных программ и/или программного обеспечения с помощью языков программирования. Программирование сочетает в себе элементы искусства, фундаментальных наук (прежде всего математики) и инженерии.

В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. Под программированием также может пониматься разработка логической схемы для ПЛИС (Программируемая логическая интегральная схема (англ. programmable logic device, PLD) – электронный компонент, используемый для создания цифровых интегральных схем), а также процесс записи информации в ПЗУ. В более широком смысле программирование — процесс создания программ, то есть разработка программного обеспечения.

Программирование включает в себя:

  • Анализ
  • Проектирование — разработка алгоритма
  • Кодирование и Компиляцию — написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора
  • Тестирование и отладку — выявление и устранение ошибок
  • Сопровождение

Языки программирования

Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.

Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).

Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Даже если требуется полный низкоуровневый контроль над системой, программисты пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора.

В некоторых языках вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, некоторых реализациях Lisp [1] , Java, Perl, Python, а также в языках платформы Microsoft .NET.

См. также

  • Компьютерная программа
  • Язык программирования
  • Разработка программного обеспечения
  • Экстремальное программирование
  • Олимпиады по программированию
  • Блок-схема

Ссылки

  1. см. Lisp 1.5 в России
  • Программирование в DMOZ
  • Библиотека программного кода (offline)
  • Сообщество разработчиков программ
  • Ассоциация ISDEF
  • Теоретический минимум по информатике: Основы программирования (курсы и учебные материалы)

Литература

  • Роберт В Себеста «Основные концепции языков программирования», 5-е издание : Пер. с англ. — М. : 2001. — 672 стр. с ил., «Вильямс»
  • Иан Соммервилл «Инженерия программного обеспечения», 6-е издание : Пер. с англ. — М. : 2002. — 624 стр. с ил., «Вильямс»
  • М.В.Мозговой — Занимательное программирование
  • Иан Грэхем «Объектно-ориентированные методы. Принципы и практика», 3-е издание : Пер. с англ. — М. : 2004. — 880 стр. с ил., «Вильямс»
  • Стив Мак-Коннел, «Совершенный код» (Steve McConnel. Code Complete. Microsoft Press, 1993)

Основные понятия

Проекти́рование – процесс создания проекта, прототипа, прообраза предполагаемого или возможного объекта, состояния.

В технике — разработка проектной, конструкторской и другой технической документации, предназначенной для осуществления строительства, создания новых видов и образцов. В процессе проектирования выполняются технические и экономические расчёты, схемы, графики, пояснительные записки, сметы, калькуляции и описания.

Проект — комплект указанной документации и материалов (определённого свойства). Проект какого-либо объекта может быть индивидуальным или типовым. При разработке индивидуальных проектов широко применяются типовые или типовые проектные решения.

Исполнимый код = машинный код.

Машинный код (также употребляются термины собственный код, или платформенно-ориентированный код, или родной код, или нативный код — от англ. native code) – система команд (язык) конкретной вычислительной машины (машинный язык), который интерпретируется непосредственно микропроцессором или микропрограммами данной вычислительной машины.

Транслятор – программа, которая принимает на вход программу на одном языке (он в этом случае называется исходный язык, а программа — исходный код), и преобразует её в программу, написанную на другом языке (соответственно, целевой язык и объектный код).

Наиболее часто встречаются две разновидности трансляторов:

· Компиляторы – выдают результат в виде исполняемого файла (в данном случае считаем, что компоновка входит в компиляцию). Этот файл:

o транслируется один раз – может быть запущен самостоятельно

o не требует для работы наличия на машине создавшего его транслятора

· Интерпретаторы – исполняют программу после разбора (в этом случае в роли объектного кода выступает внутреннее представление программы интерпретатором). Исполняется она построчно. В данном случае программа

Читать еще:  Школы программирования для детей в москве

o транслируется (интерпретируется) при каждом запуске (если объектный код кэшируется, возможны варианты)

o требует для исполнения наличия на машине интерпретатора и исходного кода

Компилятор – транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд (микропроцессора или виртуальной машины).

Интерпретатор (языка программирования) – программа для интерпретации, т.е. непосредственного исполнения программ (производства вычислений, предписываемых этими программами) из исходного кода на определённом языке.

Ассемблер (от англ. assembler – рабочий-сборщик) – компьютерная программа, компилятор исходного текста программы написанной на языке ассемблера, в программу на машинном коде.

Системное программирование

Системное программирование (или программирование систем) – род деятельности, заключающийся в работе над системным программным обеспечением. Основная отличительная черта системного программирования по сравнению с прикладным программированием заключается в том, что результатом последнего является выпуск программного обеспечения, предлагающего определённые услуги пользователям (например, текстовый процессор). в то время как результатом системного программирования является выпуск программного обеспечения, предлагающего сервисы по взаимодействию с аппаратным обеспечением (например, дефрагментация жёсткого диска), что подразумевает сильную зависимость таких программ от аппаратной части. В частности выделим следующее:

· программист должен учитывать специфику аппаратной части и другие свойства системы в которой функционирует программа, использовать эти свойства, например, применяя специально оптимизированный для данной архитектуры алгоритм.

· обычно используется низкоуровневый язык программирования или такой диалект языка программирования, который

o позволяет функционирование в окружении с ограниченным набором системных ресурсов

o работает максимально эффективно и имеет минимальное запаздывание по времени завершения

o имеет маленькую библиотеку времени выполнения (RTL) или не имеет вообще её

o позволяет прямое управление (прямой доступ) к памяти и управляющей логике

o позволяет делать ассемблерные вставки в код

· отладка программы может быть затруднена при невозможности запустить её в отладчике из-за ограничений на ресурсы, поэтому может применяться компьютерное моделирование для решения этой проблемы.

Системное программирование существенно отличается от прикладного, что обычно приводит к специализации программиста в одном из них.

Часто, для системного программирования доступен ограниченный набор средств. Использование автоматической сборки мусора довольно редкое явление и отладка обычно сложна. Библиотека времени выполнения, при её наличии, часто менее способная и совершает меньшее количество проверок. В связи с этими ограничениями обычно применяют при мониторинге и записи данных — операционные системы.

История

Изначально, программисты безвариантно писали на языке ассемблера. Эксперименты с поддержкой оборудования в языках высокого уровня (1960s привели к появлению таких, как BLISS и BCPL. Однако, язык программирования Си, сыгравший значительную роль в создании UNIX, завоевал большую популярность и распространился повсеместно к 1980-м годах.

В настоящее время (2006) некоторое применение нашлось для встраиваемого C++. Реализация основных частей в операционной системе и при использовании сетей нуждается в разработчиках системного ПО. Например, реализация постраничности (через виртуальную память) или драйверы устройств.

Термин Системное программирование непосредственно связан с термином Системный программист. Это программист, работающий (создающий, отлаживающий, диагностирующий и т. п.) над системным программным обеспечением.

Системное программирование — System programming

Системное программирование (или система программирования ) является деятельностью программирования компьютера системного программного обеспечения . Первичная отличительная черта систем программирования по сравнению с прикладным программированием является то , что прикладное программирование стремится производить программное обеспечение , которое обеспечивает услуги пользователя непосредственно (например , текстовый процессор ), в то время как системы программирование стремится производить программное обеспечение и программные платформы , которые предоставляют услуги другого программного обеспечения, имеет производительность ограничена, или как (например , операционные системы , вычислительные науки приложение, игровые движки и AAA видеоигра , промышленная автоматизация , а также программное обеспечение как сервис — приложения).

Системное программирование требует большой степени осведомленности оборудования. Его цель состоит в том, чтобы добиться эффективного использования имеющихся ресурсов, либо потому, что само программное обеспечение является производительность критически (AAA видеоигры) или потому, что даже небольшие улучшения эффективности непосредственно превращаются в значительные экономии денежных средств для поставщика услуг (облачные текстовые процессоры на основе).

содержание

обзор

Следующие атрибуты характеризуют программирование систем:

  • Программист может делать предположения об аппаратном и других свойствах системы , что программа работает на, и часто будет использовать эти свойства, например , с помощью алгоритма , который , как известно , чтобы быть эффективным при использовании конкретного оборудования.
  • Обычно низкоуровневый язык программирования или язык программирования диалект используется так , что:
    • Программы могут работать в условиях ограниченных ресурсов
    • Программы , написанные , чтобы быть эффективным с небольшим количеством времени выполнения накладных расходов, они могут иметь небольшую библиотеку времени выполнения , или вообще
    • Программы могут использовать прямой и «сырой» контроль над доступом к памяти и управление потоком
    • Программист может написать части программы непосредственно на языке ассемблера
  • Часто программа системы не может быть запущена в отладчике . Запуск программы в моделируемой среде иногда может быть использовано для уменьшения этой проблемы.

Системное программирование существенно отличается от прикладного программирования, что программисты имеют тенденцию специализироваться в одном или другом.

В системном программировании, часто ограниченные средства программирования доступны. Использование автоматической сборки мусора не является распространенным явлением и отладки иногда трудно сделать. Библиотека времени выполнения , даже если она доступна, как правило , гораздо менее мощный, и делает меньше проверки ошибок. Из — за этих ограничений, мониторинг и протоколирование часто используются; операционные системы могут иметь чрезвычайно сложные каротажные подсистемы.

Реализация определенных частей в операционных системах и сетевых требует программирования систем, например , внедрение подкачки ( виртуальной памяти ) или драйвером устройства для операционной системы.

история

Первоначально система программисты всегда писали в ассемблере . Эксперименты с аппаратной поддержки в языках высокого уровня в конце 1960 — х годов привели к таким языкам , как PL / S , BLISS , BCPL , и расширенный ALGOL для Burroughs больших систем . Forth также имеет применение в качестве языка системы. В 1980 — е годы, C стал повсеместно, опираясь на рост Unix . Совсем недавно подмножество C ++ называется Embedded C ++ видел некоторые используют, например , она используется в / O Kit I водителей MacOS .

Альтернативное использование

По историческим причинам некоторые организации используют термин программист системы для описания функции задания , которое было бы более точно назвать системный администратор . Это особенно верно в отношении организаций, компьютерных ресурсы исторически доминировали мэйнфреймы , хотя этот термин даже используются для описания рабочих функций , которые не связаны с мэйнфреймами. Такое использование возникло потому , что администрация IBM мэйнфреймов часто вовлекается написание пользовательского ассемблера ( Basic ассемблер от IBM (БАЛ)), который интегрирован с операционной системой , такими как OS / MVS , DOS / VSE или VM / CMS . Действительно, некоторые IBM программные продукты имели значительный вклад кода из персонала программирования клиента. Этот тип программирования прогрессивно реже, но термин программист системы по- прежнему является де — факто название должности для сотрудников , непосредственно управляющей IBM мэйнфреймы.

Ссылка на основную публикацию
Adblock
detector