Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Электронный учебно-методический комплекс по учебной дисциплине «Системное программирование» для специальностей 1-40 01 01 «Программное обеспечение информационных технологий», 6-05-0612-01 «Программная инженерия»

.pdf
Скачиваний:
0
Добавлен:
28.12.2025
Размер:
3.06 Mб
Скачать

Белорусский национальный технический университет

Международный институт дистанционного образования Кафедра «Информационные системы и технологии»

ЭЛЕКТРОННЫЙ УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС

ПО УЧЕБНОЙ ДИСЦИПЛИНЕ

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ

для специальностей:

1-40 01 01 «Программное обеспечение информационных технологий» 6-05-0612-01 «Программная инженерия»

Составитель:

Бумай Андрей Юрьевич, ассистент

Минск

БНТУ

2024

СИСТЕМНОЕ

ПРОГРАММИРОВАНИЕ

2

Перечень материалов

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

Пояснительная записка

Цели данного ЭУМК – повышение эффективности организации учебного процесса с использованием дистанционных технологий; предоставление возможности студентам заниматься самообразованием, пользуясь комплектом учебно-методических материалов по дисциплине «Системное программирование».

ЭУМК содержит четыре раздела: теоретический, практический, контроля знаний и вспомогательный.

Теоретический раздел представлен конспектом лекций. Лекционный материал подготовлен в соответствии с основными разделами и темами учебной программы.

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

Раздел контроля знаний включает контрольную работу, содержащую индивидуальные варианты заданий, требования к оформлению контрольной работы, вопросы к экзамену. Вспомогательный раздел представлен учебной программой. Данное ЭУМК в первую очередь разработано для студентов МИДО дистанционной (заочной) формы получения образования, однако ЭУМК также может быть полезным студентам дневной формы получения образования и всем, кто заинтересован в освоении дисциплины «Системное прогаммирование».

3

СОДЕРЖАНИЕ

СОДЕРЖАНИЕ ...........................................................................................................

4

РАЗДЕЛ 1 ТЕОРЕТИЧЕСКИЙ ..................................................................................

8

ВВЕДЕНИЕ..............................................................................................................

8

1.1 ОБЗОР ЯЗЫКА ПРОГРАММИРОВАНИЯ C ................................................

9

1.1.1 Характеристика языка С............................................................................

9

1.1.2 Основные сведения о синтаксисе языка C ............................................

10

1.1.3 Структура программ на языке С.............................................................

11

1.1.4 Функции и библиотеки функций языка С .............................................

12

1.2 ДЕКЛАРАЦИЯ ОБЪЕКТОВ ПРОГРАММЫ НА ЯЗЫКЕ C......................

14

1.2.1 Операционные объекты в языке C .........................................................

14

1.2.2 Понятие типа объекта в языке С.............................................................

15

1.2.3 Базовые типы данных в языке С.............................................................

16

1.2.4 Массивы в языке С ...................................................................................

17

1.2.5 Структуры и объединения в языке C .....................................................

17

1.2.6 Перечисления............................................................................................

21

1.2.7 Оператор переопределения типа ............................................................

22

1.2.8 Константы в программах на языке C .....................................................

24

1.3 ОПЕРАТОРЫ И ВЫРАЖЕНИЯ....................................................................

26

1.3.1 Обзор операций языка С..........................................................................

26

1.3.2 Операции присваивания ..........................................................................

26

1.3.3 Арифметические операции .....................................................................

29

1.3.4 Операции отношений...............................................................................

30

1.3.5 Логические операции...............................................................................

32

1.3.6 Операции над битами...............................................................................

33

1.3.7 Условное вычисление ..............................................................................

35

1.3.8 Определение размера объекта.................................................................

36

1.3.9 Операция приведения типа .....................................................................

37

1.3.10 Последовательное вычисление выражений.........................................

40

1.3.11 Операции над указателями....................................................................

40

1.3.12 Операция вызова функции ....................................................................

47

4

 

1.3.13 Приоритет и порядок выполнения операций ......................................

50

1.4 УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ .................................................................

52

1.4.1 Условные операторы................................................................................

52

1.4.2 Операторы цикла ......................................................................................

53

1.4.3 Оператор выбора альтернатив (переключатель)...................................

56

1.4.4 Операторы передачи управления ...........................................................

58

1.5 СТРУКТУРИЗАЦИЯ ПРОГРАММ И ДАННЫХ........................................

59

1.5.1 Области действия объектов программ...................................................

59

1.5.2 Классы памяти объектов программ........................................................

60

1.5.3 Инициализации объектов программ ......................................................

62

1.5.4 Управляемая память.................................................................................

64

1.6 ПРЕПРОЦЕССОР ЯЗЫКА C .........................................................................

67

1.6.1 Возможности препроцессора и его вызов .............................................

67

1.6.2 Операторы лексемного замещения идентификаторов .........................

67

1.6.3 Макрозамещение ......................................................................................

68

1.6.4 Оператор включения файлов исходного текста....................................

70

1.6.5 Условная компиляция..............................................................................

71

1.6.6 Изменение нумерации строк и имени файла.........................................

73

1.6.7 Расширенные возможности современных процессоров ......................

73

1.7 ЗАПУСК И ЗАВЕРШЕНИЕ ПРОГРАММ ...................................................

75

1.7.1 Головная функция программ на языке C...............................................

75

1.7.2 Порождение и идентификация задач .....................................................

77

1.7.3 Завершение программ..............................................................................

80

1.7.4 Идентификация задач и виды межзадачных взаимодействий ............

80

1.8 СИСТЕМНО ЗАВИСИМЫЕ КОНСТРУКЦИИ ЯЗЫКА С ........................

81

1.8.1 Системно зависимые расширения языка C ...........................................

81

1.8.2 Понятие псевдо-регистров ......................................................................

81

1.8.3 Функции - обработчики прерываний .....................................................

82

1.8.4 Дополнительные атрибуты указателей ..................................................

83

1.8.5 Модификаторы типа объектов ................................................................

85

1.8.6 Использование ассемблера......................................................................

86

5

 

1.9 ВВОД-ВЫВОД ДАННЫХ .............................................................................

87

1.9.1 Организация ввода-вывода данных в C .................................................

87

1.9.2 Бесформатный ввод-вывод......................................................................

92

1.9.3 Форматный ввод-вывод ...........................................................................

93

1.10 СТРУКТУРЫ ДАННЫХ ..............................................................................

99

1.10.1 Виды организации хранения данных в памяти ...................................

99

1.10.2 Абстрактные структуры данных.........................................................

101

1.10.3 Отображение структур данных в памяти...........................................

102

1.10.4 Примеры представления структур данных........................................

104

1.11 СОРТИРОВКА И ПОИСК ДАННЫХ.......................................................

107

1.11.1 Характеристика проблемы сортировки .............................................

107

1.11.2 Методы внутренней сортировки.........................................................

108

1.11.3 Поиск данных .......................................................................................

111

1.11.4 Cтандартные процедуры сортировки и поиска данных ...................

114

1.12ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ СИСТЕМНОГО

ПРОГРАММИРОВАНИЯ ..................................................................................

116

1.12.1 Анализ схемы распределения памяти в MS-DOS .............................

116

1.12.2 Вывод списка установленных драйверов устройств ........................

119

1.12.3 Получение информации о системных ресурсах................................

121

1.12.4 Обработка прерываний в ПЭВМ типа IBM PC/XT/AT....................

126

1.12.5 Понятие системы типа "клиент-сервер" ............................................

130

1.12.6 Пример построения системы "клиент-сервер" в QNX .....................

131

1.12.7 Защита файлов от копирования ..........................................................

138

1.13 ИНТЕРПРЕТАЦИЯ СИСТЕМ ПРОДУКЦИЙ НА ЯЗЫКЕ С ................

142

1.13.1 Сетевое представление системы продукций .....................................

142

1.13.2 Входное описание систем продукций ................................................

144

1.13.3 Интерпретация систем продукций .....................................................

148

ЗАКЛЮЧЕНИЕ ...................................................................................................

149

РАЗДЕЛ 2 ПРАКТИЧЕСКИЙ................................................................................

151

ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО КУРСУ СИСТЕМНОЕ

ПРОГРАММИРОВАНИЕ...................................................................................

151

ЛАБОРАТОРНАЯ РАБОТА №1 ОБЗОР ЯЗЫКА ПРОГРАММИРОВАНИЯ С ....................................

151

6

 

ЛАБОРАТОРНАЯ РАБОТА №2 ФУНКЦИИ В ЯЗЫКЕ С....................................................................

167

ЛАБОРАТОРНАЯ РАБОТА №3 АДРЕСНАЯ АРИФМЕТИКА И УПРАВЛЕНИЕ ПАМЯТЬЮ ..............

174

ЛАБОРАТОРНАЯ РАБОТА №4 ОБРАБОТКА СТРУКТУРИРОВАННЫХ ДАННЫХ............................

186

ЛАБОРАТОРНАЯ РАБОТА №5 РАБОТА С ФАЙЛАМИ ...................................................................

193

ЛАБОРАТОРНАЯ РАБОТА №6 ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ.....................

204

ЛАБОРАТОРНАЯ РАБОТА №7 ПРОЦЕССЫ И ПОТОКИ .................................................................

215

ЛАБОРАТОРНАЯ РАБОТА №8 СИНХРОНИЗАЦИЯ ПРОЦЕССОВ И ПОТОКОВ..............................

229

РАЗДЕЛ 3 КОНТРОЛЬ ЗНАНИЙ .........................................................................

236

ОБЩИЕ ТРЕБОВАНИЯ К КОНТРОЛЬНОЙ РАБОТЕ ..................................

236

ВАРИАНТЫ ЗАДАНИЯ НА КОНТРОЛЬНУЮ РАБОТУ .............................

242

ВОПРОСЫ ДЛЯ КОНТРОЛЯ ЗНАНИЙ ..........................................................

259

РАЗДЕЛ 4 ВСПОМОГАТЕЛЬНЫЙ ......................................................................

261

УЧЕБНАЯ ПРОГРАММА 1-40 01 01 ...............................................................

261

УЧЕБНАЯ ПРОГРАММА 6-05-0612-01...........................................................

275

ОБЩИЕ ТРЕБОВАНИЯ К КУРСОВОМУ ПРОЕКТУ ...................................

287

ПРИЛОЖЕНИЕ А Титульный лист (пример) ..................................................

292

ПРИЛОЖЕНИЕ Б Лист-задания (пример) .......................................................

293

ПРИЛОЖЕНИЕ В Примерный образец структуры и содержания

пояснительной записки к курсовому проекту..................................................

296

СПИСОК ЛИТЕРАТУРНЫХ ИСТОЧНИКОВ ................................................

297

7

РАЗДЕЛ 1 ТЕОРЕТИЧЕСКИЙ

ВВЕДЕНИЕ

Системными программами называют набор программ, используемых в процессе подготовки прикладных программ на этапах от постановки задачи до выполнения на ЭВМ. Примеры системных программ - трансляторы, редакторы связей, текстовые редакторы, загрузчики, отладчики, канальные программы, драйверы.

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

Принципиальное отличие системного программирования от прикладного - зависимость от вычислительной системы. Системное програмирование непосредственно связано с особенностями аппаратуры ЭВМ и механизмов операционной системы.

Основные вопросы системного программиста по архитектуре ЭВМ, построенной на идее совместно запоминаемых программы и данных (Дж.фон Нейман):

память - минимальная адресуемая единица памяти, объем памяти, схема адресации;

регистры - количество регистров, их размер, функция и взаимосвязь;

данные - обрабатываемые типы и формат представления в памяти арифметических, символьных и логических данных;

команды - классы команд ЭВМ, набор команд обработки арифметических, логических и символьных данных, команд управления, формат команд и схема их хранения в памяти;

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

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

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

Под ассемблером (автокодом, системой символического кодирования) понимают систему программирования, включающую: язык символического кодирования программы на машинном уровне в терминах мнемонических

8

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

Ассемблер применяют после убедительного обоснования в редких классах задач: создание базовых элементов системного программного обеспечения; решение задач со специальными требованиями по вычислительной эффективности либо методам использования вычислительных ресурсов; комплексирование разнородных программных продуктов. Языком ассемблера представляют: заключительный уровень детализации результатов транслятором языка высокого уровня либо генератором прикладных программ; элементы настройки операционных систем и сложных пакетов прикладных программ на конкретные условия применения; фрагменты адаптируемых посредством дизассемблирования чужих программ при отсутствии исходного текста. Язык C, в отличие от языка ассемблера, ориентирован на переносимость программ, по крайней мере, на уровне исходного текста с одной вычислительной системы на другую. Это обеспечивается наличием трансляторов языка С практически на всех современных вычислительных системах.

1.1 ОБЗОР ЯЗЫКА ПРОГРАММИРОВАНИЯ C

1.1.1 Характеристика языка С

Язык C первоначально доминировал в среде мини-ЭВМ, работающих под управлением ОС UNIX, но в дальнейшем получил широкое распространение и в других классах вычислительных систем. Сейчас трудно найти вычислительную систему без поддержки такого языка.

Достоинства языка С:

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

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

Недостаток языка C - относительно плохая "читаемость" текста программ из-за неоднозначности синтаксиса.

9

Области применения языка C - системное программирование и прикладные задачи с жесткими требованиями по скорости и памяти.

Язык С относится к классу языков процедурного типа с адресной арифметикой и формально является подмножеством языка объектноориентированного программирования C++. Освоение языка C создает фундамент для изучения языка C++ [1].

1.1.2 Основные сведения о синтаксисе языка C

Начальные сведения о синтаксисе любого языка программирования включают элементарные правила записи исходного текста программы - идентификация объектов программы, комментарии, формат исходного текста.

Идентификаторы объектов программы на языке C могут включать:

цифры 0...9;

латинские прописные и строчные буквы A...Z, a...z;

символ подчеркивания _.

Первый символ идентификатора не может быть цифрой. Длина

идентификатора определяется реализацией транслятора C и редактора связей (компоновщика). Современная тенденция - снятие ограничений длины идентификатора.

Разделители идентификаторов объектов программы:

пробелы;

символы табуляции, перевода строки и страницы;

комментарии (играют роль пробелов).

Комментарий - любая последовательность символов, начинающаяся парой

символов /* и заканчивающаяся парой символов */.

Формат записи исходного текста программ на языке C – свободный [1].

/* ПРИМЕР ПРОГРАММЫ ТЕСТА ГЕНЕРАТОРА СЛУЧАЙНЫХ ЧИСЕЛ */

#include <stdio.h> #include <stdlib.h>

#define RANGE 100

void main() { int i,j,k,s;

/* Запрос объема выборки */

while (printf("\n K-? "), !scanf(" %d",&k); /* Генерация случайных чисел */

printf("\n Значения %d случайных чисел:\n",k);

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]