admin / 05.04.2018

Системное программирование — это… Что такое Системное программирование?

Поиск Лекций


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

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

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

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

В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. Под программированием также может пониматься разработка логической схемы для ПЛИС (Программируемая логическая интегральная схема (англ. 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++. Реализация основных частей в операционной системе и при использовании сетей нуждается в разработчиках системного ПО. Например, реализация постраничности (через виртуальную память) или драйверы устройств.

 

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

 

 

©2015-2018 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Нарушение авторских прав и Нарушение персональных данных

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

Cтраница 1

Системный программист ( программист) должен иметь детальные знания о структуре компонентов ПО и их взаимодействии друг с другом и с операционной системой ЭВМ. Он должен быть знаком с программированием, структурой и форматами данных и распечатками листингов на веех этапах создания ПО, Объем получаемой системным программистом документации достаточно велик, но еще больше документов он создает в процессе разработки ПО.  [1]

Системный программист разрабатывает или эксплуатирует средства программного обеспечения. Для выполнения своих функций он в совершенстве должен знать язык ассемблера, логику работы ОС ЕС ЭВМ и функции каждой компоненты программного обеспечения.  [2]

Системный программист может добавить в конкретную систему ДУВЗ дополнительные программы, получающие управление в определенных ситуациях. Программы должны быть реентерабельными и сохранять регистры в области сохранения, которую обеспечивает ДУВЗ. Регистр 1 содержит адрес списка параметров.  [3]

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

 [4]

Системный программист использует ВМ для генерации ( полной или частичной), для исследования и изменения характеристик функционирования конкретного варианта СВМ ЕС, а также для анализа дампов с помощью ПАД. Виртуальная машина системного программиста должна иметь классы команд С, Е, G, обеспечивать возможность работы с ПДО и доступ к дистрибутивным мини-дискам и резидентному тому СВМ ЕС. Для удобства работы генерация и анализ дампов могут выполняться на отдельно описанных ВМ.  [5]

Системный программист консультирует обслуживающий персонал ЭВМ по функционированию ДОС ЕС, следит за состоянием операционной системы, поддерживает связь со службой сопровождения ДОС ЕС. Необходимое число программистов определяет сам пользователь в зависимости от состава и характера решаемых задач. Операторы могут быть подготовлены самим пользователем.  [6]

Системные программисты могут построить собственные реализации интерфейса Process Manager, связанные с частными прикладными средами.

Содержание

Используя этот метод, разработчик частной системы может задать стратегию планирования, управление ресурсами, учет ресурсов и другие средства обслуживания, которые будут управлять процессами внутри этой системы.  [7]

Системные программисты — разработчики программ после завершения разработки и проверки пакета передают его на эксплуатацию.  [8]

Системные программисты — люди, наиболее посвященные в тайны вычислительной техники и программирования, их основная работа связана с составлением ( преимущественно на АССЕМБЛЕРе), отладкой и сопровождением самых сложных программ и их комплексов. Эта группа предъявляет особые требования к диалогу.  [9]

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

Если распределение обращений не является равномерным, то соответствующими вычислениями можно выбрать оптимальное размещение индекса цилиндров.  [10]

Системный программист осуществляет текущие изменения в программное и информационное обеспечение системы, обусловленные тем, что АСУ ТП как сложная система постоянно развивается и совершенствуется.  [11]

Многие системные программисты отмечают естественный недостаток описанной стратегии минимизации числа вытеснений, заключающийся в том, что иногда применение этой стратегии приводит к удалению из основной памяти активно используемой информации. Предложен ряд решений этой проблемы, но, по существу, все они сводятся к предоставлению самим прикладным программам средств управления освобождением страниц. Для этого в программах должны указываться текущие страницы, где локализованы обращения, а также страницы, которые несмотря на проведенные в последнее время изменения, можно просто удалить.  [12]

Один системный программист, возвращаясь с семинара должен был как-то убить время, ожидая свой самолет в аэропорту. Правила игры такие: надо составить из этих четырех кубиков прямоугольную призму, каждая боковая грань которой раскрашена во все четыре цвета без повторений.  [13]

Для системных программистов, изготавливающих продукт многократного использования, проблема эффективности является одной из наиболее важных. В этом смысле их задача заключается в том, чтобы найти узкие места II улучшить критические характеристики программы.  [14]

Студенты, системные программисты, операторы и другой технический персонал часто считает взлом системы безопасности локальной компьютерной системы личным вызовом. Как правило, они имеют высокую квалификацию и готовы посвящать достижению поставленной перед собой цели значительное количество времени.  [15]

Страницы:      1    2    3    4

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

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

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

Для системного программирования часто доступна только ограниченное количество инструментов.

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

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

 

История

Сначала системные программисты непременно использовали ассемблер. Эксперименты с поддержкой аппаратной части в высокоуровневых языках программирования в конце 60-х привели к появлению таких языков как BLISS и BCPL, но С, которая помогла росту Unix, получила распространение уже в 1980-х. Недавно некоторое использования нашлось и для Embedded C++, например в системе ввода / вывода драйверов в Mac OS X.

1.3 Етапи підготовки програми

При розробці програм, а тим паче складних, використовується принцип модульності, розбиття складної програми на складові частини, кожна з яких може підготовлятися окремо. Модульність є основним інструментом структурування програмного виробу, що полегшує його розробку, налагодження та супроводження.

Дамо визначення програмного модуля згідно з діючим державним стандартом [5].

Програмний модуль — це програма або функціонально завершений фрагмент програми, призначений для зберігання, трансляції, поєднання з іншими програмними модулями та завантаження в оперативну пам’ять.

При обранні модульної структури мають враховуватися такі основні міркування:

  • функціональність — модуль має виконувати закінчену функцію;
  • незв’язуваність — модуль повинен мати мінімум зв’язків з іншими модулями, зв’язок через глобальні змінні та області пам’яті небажаний;
  • специфічність — вхідні та вихідні параметри модуля повинні чітко формулюватися.

На рис.1.1 показано етапи, які проходить програма від її написання до виконання.

Програма пишеться у вигляді початкового модуля (ПМ).

Дамо визначення початкового модуля згідно з діючим державним стандартом [5].

Початковий модуль — це написаний початковою мовою програмний модуль, який обробляється транслятором як ціле, достатнє для проведення трансляції.

Першим (не для всіх мов програмування обов’язковим) етапом підготовки програми є обробка її макропроцесором (або препроцесором). Макропроцесор обробляє текст програми, і на виході його отримується нова редакція тексту (дивись ПМ* на рис. 1.1). У більшості систем програмування макропроцесор суміщений з транслятором, і для програміста його робота і проміжний ПМ* невидимі. Слід мати на увазі, що макропроцесор виконує обробку тексту. Це означає, з одного боку, що він не інтерпретує операторів мови програмування та змінних програми, а з іншого боку, що усі оператори та змінні макромови (тих виразів у програмі, які адресовані макропроцесору) в проміжному ПМ* вже відсутні і для подальших етапів обробки невидимі. Так, якщо макропроцесор замінив у програмі деякий текст A на текст B, то транслятор вже має тільки текст B і не знає, був цей текст написаний програмістом чи він підставлений макропроцесором.


Рисунок 1.1 — Етапи проходження програми

Наступним етапом є трансляція.

Дамо визначення трансляції згідно з діючим державним стандартом [5].

Трансляція — це перетворення програми, поданої однією мовою програмування, у програму, подану іншою мовою програмування, у певному сенсі рівнозначну першій.

Як правило, результатом роботи транслятора є програма, подана на машинній мові цільової обчислювальної системи (ОС). Цільова ОС — це та ОС, на якій програма буде виконуватися.

Дамо визначення машинної мови згідно з діючим державним стандартом [5].

Машинна мова — це мова програмування, яка призначена для подання програми у формі, що дозволяє виконувати її безпосередньо технічними засобами обробки інформації.

Транслятори — загальна назва для програм, що виконують трансляцію. Вони підрозділяються на асемблери та компілятори залежно від початкової мови програми, яку вони обробляють. Асемблери працюють з автокодами або мовами асемблера, компілятори — з мовами високого рівня.

Дамо визначення автокоду, мови асемблера і мови високого рівня згідно з діючим державним стандартом [5].

Автокод — це символьна мова програмування, речення якої за своєю структурою в основному подібні до команд та оброблюваних даних конкретної машинної мови.

Мова асемблера — це мова програмування, яка являє собою символьну форму машинної мови з низкою можливостей, характерних для мови високого рівня (зазвичай включає у себе макрозасоби).

Мова високого рівня — це мова програмування, поняття якої і структура програми, написаній на цій мові, зручні для сприйняття людиною.

Дамо визначення об’єктного модуля (ОМ) згідно з діючим державним стандартом [5].

Об’єктний модуль — це програмний модуль, що отримується в результаті трансляції початкового модуля.

Оскільки результатом трансляції є модуль на мові, близькій до машинної, в ньому вже не залишається ознак того, якою початковою мовою був написаний програмний модуль. Це дає принципову можливість створювати програми із модулів, написаних різними мовами. Специфіка початкової мови, однак, може позначитися на фізичному поданні базових типів даних, способах звернення до процедур або функцій тощо. Для сумісності різномовних модулів мають витримуватися загальні узгодження.

Більша частина об’єктного модуля — команди та дані машинної мови саме у тій формі, в якій вони будуть існувати під час виконання програми. Однак програма в загальному випадку складається з багатьох модулів. Оскільки транслятор обробляє тільки один конкретний модуль, він не може належним чином обробити ті частини цього модуля, в яких запрограмовані звернення до даних або процедур, визначених в інших модулях. Такі звернення називають зовнішніми посиланнями. Ті місця в об’єктному модулі, де містяться зовнішні посилання, транслюються у деяку проміжну форму, що підлягає подальшій обробці. Таким чином, об’єктний модуль являє собою програму на машинній мові з незадовільненими зовнішніми посиланнями.

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

Дамо визначення завантажуваного модуля (ЗМ) згідно з діючим державним стандартом [5].

Завантажуваний модуль — це програмний модуль, поданий у формі, придатній для завантаження в оперативну пам’ять для виконання.

Завантажуваний модуль зберігається у вигляді файла на зовнішній пам’яті. Для виконання програма має бути перенесена (завантажена) до оперативної пам’яті. Іноді при цьому потрібна деяка додаткова обробка (наприклад, настроювання адрес у програмі на ту область оперативної пам’яті, в яку програма завантажилась). Ця функція виконується завантажувачем, який зазвичай входить до складу операційної системи.

Можливий також варіант, в якому редагування зв’язків виконується при кожному запуску програми на виконання та сполучається (поєднується) із завантаженням. Це робить зв’язуючий завантажувач. Варіант зв’язування при запуску більш витратний, оскільки витрати на зв’язування тиражуються при кожному запуску. Але він забезпечує:

  • велику гнучкість у супроводі, оскільки дозволяє змінювати окремі об’єктні модулі програми, не змінюючи решти модулів;
  • економію зовнішньої пам’яті, оскільки об’єктні модулі, що використовуються у багатьох програмах, не копіюються у кожний завантажуваний модуль, а зберігаються в одному екземплярі.

Варіант інтерпретації передбачає пряме виконання початкового модуля.

Дамо визначення інтерпретації згідно з діючим державним стандартом[5].

Інтерпретація — це реалізація сенсу деякого синтаксично закінченого тексту, поданого конкретною мовою.

Інтерпретатор читає з початкового модуля чергове речення програми, перекладає його на машинну мову та виконує. Усі витрати на підготовку тиражуються при кожному виконанні; отже, програма, що інтерпретується, принципово менш ефективна, ніж та, що транслюється. Однак інтерпретація забезпечує зручність розробки, гнучкість у супроводі та переносимість.

Приклади інтерпретаторів: мови процедур (shell, REXX), JVM.

Не обов’язково підготовка програми має проводитись на тій же обчислювальній системі і у тому ж операційному середовищі, в яких програма виконуватиметься. Системи, які забезпечують підготовку програм у середовищі, що відрізняється від цільового, називаються крос-системами. У крос-системі може виконуватися вся підготовка або її окремі етапи:

  • макрообробка та трансляція;
  • редагування зв’язків;
  • налагодження.

Типове застосування крос-систем передбачене для тих випадків, коли цільове обчислювальне середовище просто не має ресурсів, необхідних для підготовки програм (наприклад, вбудовані системи).

Програмні засоби, що забезпечують налагодження програми на цільовій системі, можна також розглядати як окремий випадок крос-системи.

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

Контрольні запитання

  1. Визначення програми та програмного забезпечення.
  2. Необхідні властивості програмного забезпечення.
  3. Визначення системної та прикладної програми.
  4. Визначення системного програмування.
  5. Поділ програмного забезпечення.
  6. Визначення системної керуючої програми.
  7. Визначення системної обслуговуючої програми.
  8. Визначення системи програмування.
  9. Визначення машинної мови.
  10. Визначення автокоду, мови асемблера, мови високого рівня.
  11. Визначення програмного модуля.

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

  12. Визначення початкового модуля.
  13. Визначення об’єктного модуля.
  14. Визначення завантажуваного модуля.
  15. Визначення трансляції та транслятора.
  16. Призначення редактора зв’язків.
  17. Визначення інтерпретації та інтерпретаторів.
  18. Призначення завантажувача.
  19. Призначення крос-системи.
  20. Етапи підготовки програм.

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*