Раздел ПМ 1. Разработка программных модулей системного программного обеспечения
Лекция №1
Тема 1.1. Введение
Вопросы для самостоятельного изучения
Организация современного компьютера
1. Внешний вид типичного современного компьютера
2. Структурная схема компьютера
3. Место ассемблера
4. Историческая ретроспектива процессоров Intel
путь: сервер\user\системное программирование\материал для самостоятельного обучения.docx
Системное программирование (или программирование систем) — подраздел программирования, заключающийся в работе над системным программным обеспечением.
Определение «системное» подчеркивает тот факт, что результаты этого вида программирования существенно меняют свойства и возможности вычислительной системы. В то же время бесспорным остаётся тот факт, что в определенной степени этот результат имеет место при применении любых программ, выполняемых в вычислительной системе. Поэтому между программированием «системным» и «несистемным» (прикладным программированием) нет четкой границы.
Вычислительная система имеет иерархическую структуру, которую можно представить в виде набора вложенных слоев, на внешнем из которых находятся прикладные программы, а на самом внутреннем — аппаратура компьютера. Условная степень системности нарастает при программировании, затрагивающем все более внутренние уровни системы.
Одной из основных отличительных черт системного программирования по сравнению с прикладным заключается в том, что результатом последнего является выпуск программ для взаимодействия с пользователем (например, текстовый процессор). В то время как результатом системного программирования является выпуск программ для взаимодействия с аппаратным обеспечением (например, дефрагментация жёсткого диска), что подразумевает сильную зависимость таких программ от аппаратной части. В частности выделим следующее:
- программист должен учитывать специфику аппаратной части и другие, часто уникальные, свойства системы в которой функционирует программа, использовать эти свойства, например, применяя специально оптимизированный для данной архитектуры алгоритм;
- часто используется низкоуровневый язык программирования или такой диалект языка программирования, который:
- позволяет функционирование в окружении с ограниченным набором системных ресурсов;
- работает максимально эффективно и имеет минимальное запаздывание по времени завершения;
- имеет маленькую библиотеку времени выполнения (RTL) или не имеет её вообще;
- позволяет прямое управление (прямой доступ) к памяти и управляющей логике;
- позволяет делать ассемблерные вставки в код.
- отладка программы может быть затруднена при невозможности запустить её в отладчике из-за ограничений на ресурсы, поэтому может применяться компьютерное моделирование для решения этой проблемы.
Подводя итог, можно утверждать, что СИСТЕМНЫМ следует называть подраздел программирования как вида инженерной деятельности, в котором программист использует специфические и часто уникальные свойства и возможности ВНУТРЕННИХ УРОВНЕЙ вычислительной системы.
Системное программирование отличается от прикладного, что обычно приводит к специализации программиста в одном из них.
Часто, для системного программирования доступен ограниченный набор средств. Использование автоматической сборки мусора довольно редкое явление и отладка обычно сложна. Библиотека времени выполнения, при её наличии, часто менее способная и совершает меньшее количество проверок. В связи с этими ограничениями обычно применяют при мониторинге и записи данных — операционные системы.
Разберемся, в чем заключается его суть. Если обычное прикладное программирование это конструирование программ, которые будут предоставлять пользователям определенные услуги, например, базы данных по сотрудникам, справочники, оболочки для обработки текстов и прочее, то системное программирование – это программирование сервисов непосредственно для аппаратного обеспечения, то есть вы пишите программу напрямую привязанную к аппаратуре. Самые знаменитые программы такого плана известны всем пользователям. Это классическая дефрагментация диска, программы поиска «битых» секторов и т.д.
Спектр знаний, которые требуются от программиста, в данном случае значительно шире, чем при прикладном программировании. Программист-системщик должен четко знать архитектуру ПК, причем не в общем виде, а в принципиальном, на уровне схем. Он должен четко представлять структуру и принцип действия машинных команд. Анализируя имеющиеся данные, программист должен уметь адаптировать и подбирать алгоритмы именно под данное аппаратное обеспечение. Как правило, системное программирование базируется на языках низкого уровня, таких как Ассемблер. Это дает возможность эффективного программирования, обеспечивает прямой доступ к памяти и логическим командам ПК. Следовательно, знание языков низкого уровня для такого программиста обязательно. Кроме того, он должен хорошо знать структуру современных системных оболочек и не только классической Windows, но и Linux, Unix и др.
Хочется отметить, что, как правило, программисты подразделяются на тех, кто создает системное ПО и тех, кто занимается прикладным ПО. Это связано с существенной разницей в азах и способах программирования. Большинство системщиков в состоянии создать хорошее ПО, но далеко не любой создатель прикладных программ способен программировать на аппаратном уровне.