E N D
Программное обеспечение • Программное обеспечение является необходимой составной частью любого компьютера. Оно является равнозначной частью любой системы. Программная часть системы (software) и аппаратная часть (hardware), т.е собственно оборудование, составляют информационную систему обработки информации, для которой лишь по традиции сохраняется старое название компьютер • Программное обеспечение может быть разделено на • операционные системы (ОС) и сервисные программы; • инструментальные языки и системы программирования; • прикладные программы
Операционная система - это программа управляющая ресурсами компьютера. Цель ОС сделать аппаратные средства легкими в исполнении. ОС дополняют аппаратные средства любого персонального компьютера, позволяя прикладным программам обращаться к внешним устройствам, а человеку - управлять работой машины с помощью соответствующих команд • ОС - обеспечивает управление всеми аппаратными компонентами и позволяет отделить остальные программы от непосредственного взаимодействия с аппаратурой
ОС управляет 4 основными ресурсами: • Размещение памяти между активными задачами, данными и управляющей программой • Распределение процессорного времени • Распределение периферийных устройств • Организация файловой системы • ОС состоит из: • файловая система • драйверы внешних устройств • процессор командного языка
Файл - это место постоянного хранения информации. Реализуются файлы как участки памяти на внешних машинных носителях • Каждый файл имеет имя, зарегистрированное в каталоге - оглавлении файлов. Каталог может иметь собственное имя и храниться в другом каталоге наряду с обычными файлами • К файловой системе имеет доступ также и любая прикладная программа. Понятие файла может быть обобщено на любой источник или потребитель информации в машине: коммуникационный канал, принтер, дисплей, клавиатуру и др.
Компьютер может иметь довольно большой набор внешних устройств (ВУ) • Каждое ВУ характеризуется своей пропускной способностью и структурой передаваемых/принимаемых данных • Поддержка широкого набора ВУ - одна из важнейших функций ОС • Для ее осуществления введено понятие драйвера - программы специального типа, ориентированной на управление внешним устройством
Взаимодействие пользователя с ОС осуществляется с помощью командного языка, который позволяет выполнять те или иные действия • Анализ и выполнение команд пользователя осуществляется командным процессором. Кроме ввода отдельных команд, которые немедленно выполняются, имеется возможность составления целых программ на командном языке, с помощью которых можно выполнять довольно сложные последовательности действий • Кроме того взаимодействие с ОС может осуществляться с помощью графических оболочек.
Наиболее простые ОС, предоставляют пользователю лишь самый необходимый набор средств для управления ресурсами компьютера, доступа к файловой системе и организации диалога. ОС данного класса не дают никаких особых возможностей для организации вычислительного процесса, поэтому их применение оправдано на дешевых персональных компьютерах. Наиболее распространенные среди систем такого типа ОС-CP/M и MS-DOS. • Первоначально предполагалось, что компьютеры IBM/PC будут оборудованы операционной системой CP/M. Однако руководитель фирмы Digital Research, когда к нему приехали представители IBM играл в гольф, а его жена отказалась их выслушать в отсутствие мужа. В результате заказ попал к Биллу Гейтсу, который купил похожую на CP/M систему и переименовал ее. • Тим Петерсон, работая в фирме Seattle Computer Products, написал ОС SCP86DOS для микропроцессора 8086. Фирма Микрософт закупила исключительные права на программу с новым именем MS-DOS. Тим Петерсон затем перешел в Микрософт, где полностью переработал свою ОС.
ОС с более развитыми средствами доступа ко всем аппаратным компонентам, гибкой файловой системой, удобным для пользователя командным языком. К этому классу относятся ОС фирмы DEC RSX-11 для машин класса PDP-11 и VMS для VAX-11. Наиболее ярким представителем этого класса является - UNIX. • Многие специалисты рассматривают появление UNIX как самое замечательное достижение в области создания ОС. В начале 70-х годов в Bell Telephon Laboratories К.Томсон и Д.Ритчи поставили перед собой цель - разработать продуктивные средства для научно-исследовательских работ. • Авторы UNIX показали, что один человек, если у него есть продуктивные идеи, может внести значительный вклад а развитие вычислительной техники
К.Томсон (PDP-7 DEC) - решил разработать ОС, которая позволила бы координировать усилия программистов для выполнения исследовательских работ при создании ПО. Его усилия были направлены на создание ОС, ассемблера PDP-7 и нескольких программ утилит • В 1973 г. Д.Ритчи переписал UNIX на специально для этого разработанном языке C. Этот язык разработанный Ритчи адаптирован для машин с различными архитектурами. Поскольку большая часть этой операционной системы написана на С, оказалось возможным переносить эту ОС с одного компьютера на другой с минимальными затратами • Традиционно ОС привязывались к определенной машине или семейству машин. Впервые перенос на другой компьютер был осуществлен Д.Ритчи и С.Джонсоном в 1976 г. при установке UNIX на Interdata 8/32
Язык Си • Появление Си принято связывать с именем Дениса Ритчи, подготовившего в 1972 году первую версию этого языка в ходе работ над операционной системой UNIX для ЭВМ семейства PDP. Однако исторически его возникновение следует связывать с, во многом машиннозависимым, языком B, созданным Кеном Томпсоном на основе языка BCPL • В настоящее время из 13000 строк системного кода UNIXа лишь 800 строк, выполняющих работу наиболее низкого уровня, написаны на языке ассемблера. Остальная же часть этой операционной системы и множество ее программных утилит написаны на Си • Язык Си - это алгоритмический язык "не очень высокого уровня". Он проектировался для того, чтобы получить непосредственный доступ к объектам, которыми оперируют процессоры компьютера: разрядам, байтам, словам, адресам • По этой причине, а также потому, что Си является блочно-структурированным языком, похожим на Алгол или Паскаль, он прекрасно подходит для системного программирования.
В нем удачно сочетаются лучшие свойства ассемблера и языков высокого уровня. От ассемблера были взяты эффективные средства работы с оперативной памятью и регистрами микропроцессора, от языков высокого уровня - широкий набор управляющих конструкций, возможность работы со сложными структурами данных, гибкие средства ввода/вывода информации • Философия языка Си заключается в том, чтобы предоставить программисту максимальную свободу действий при написании программы, но возложить на него всю ответственность за возможные действия приводящие к краху • В языке Си имеется большой набор управляющих конструкций для реализации циклических и разветвленных алгоритмов, средства для блочного и модульного программирования, а также возможность гибкого управления процессом выполнения программы. Он очень удобен для обработки текстов, для технических приложений и моделирования.
Конечно, другие языки имеют свои специфические особенности, которые делают их во многих случаях более удобными. Но тем не менее язык Си стал очень популярным, им широко пользуются программисты и им он очень нравится • Те, кто использует язык Си, приводят обычно следующие причины его популярности: • программы на языке Си легче переносятся с одной ЭВМ на другую • язык обеспечивает богатый набор операций для вычисления выражений и дает возможность обходиться без языка ассемблера даже при работе с битами • программы компактны, н не настолько, чтобы не быть непонятными; • язык Си удобен, его синтаксис достаточно прост
Подготовка к выполнению и выполнение программ • Язык Си относится к числу компилируемых языков программирования. Это означает, что подготовка к выполнению Си-программы включает в себя следующие этапы: • ввод исходного текста программы в файл при помощи какого-либо редактора текстов (имя файла, как правило, имеет стандартное расширение "C " для Си и "CPP" для С++) • компиляция программы, т.е. преобразование ее описания на входном языке в семантический эквивалент на машинном языке, называемый объектным модулем (имя файла, в который помещается результат компиляции, обычно имеет расширение "OBJ") • построение готового к выполнению загрузочного модуля из объектных модулей, включая модули из внешних библиотек (файл, содержащий готовую программу, имеет имя с расширением "EXE")
В процессе компиляции программы создается листинг ее исходного текста, содержащий, возможно, сообщения об обнаруженных ошибках. Наличие листинга существенно упрощает поиск и устранение ошибок, допущенных при подготовке программы, и сокращает время, затрачиваемое на ее отладку. Имя файла, в который записывается листинг исходной программы, снабжается обычно расширением "LST". При наличии ошибок необходимо вернуться на этап редактирования, исправить ошибки и заново откомпилировать программу • На этапе построения загрузочного модуля также возможно создание файла-листинга, включающего в себя информацию о размещении собираемых объектных модулей в памяти компьютера. Однако его анализ и использование требует более глубоких знаний основных принципов работы машины, нежели разбор листинга исходной программы • Для запуска в работу готовой к выполнению программы в операционной среде MS DOS достаточно набрать имя содержащего ее файла на клавиатуре консольного терминала, закончив ввод нажатием клавиши Enter
После этого необходимо проверить правильность работы программы • То, что программа правильно откомпилировалась не гарантирует правильность реализации заложенного алгоритма работы • Основной путь - проверка на тестовых примерах • Однако правильность выполнения тестового примера все равно не гарантирует отсутствие ошибок • При нахождении ошибок в программе необходимо вернуться к начальному редактированию текста, компилированию, сборке и т.д. • Такой процесс называется отладкой (дебаггинг - ловля блох). 9 сентября 1945 г. ученые Гарвардского университета, тестирующие машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле. Извлеченной насекомое было вклеено в технический дневник, с сопроводительной записью: "First actual case of bug being found". Название "баг" прижилось. В настоящее время реликвия хранится в одном из музеев США
Первая программа • Единственный способ научиться языку программирования - писать на нем программы • Чтобы это сделать надо: • создать каким-либо образом текст программы • успешно его оттранслировать • загрузить, выполнить • разобраться что получилось
На каждом из этапов используется своя программа • Текстовый редактор • Транслятор • Сборщик • Отладчик • Существует очень много подобных программ. Для удобства все эти программы объединяются в интегрированные среды. Borland, Microsoft Visual и т.п. • Мы будем использовать свободно распространяемую систему Bloodshed Dev-C++ • Пример системы
Всякая программа на языке Си представляет собой совокупность функций, выполняющих основную работу по реализации некоторого алгоритма • Каждая из этих функций, в свою очередь, есть независимый набор описаний и операторов, заключенных между заголовком функции и ее концом • Та функция, с которой начинается выполнение программы, называется главной функцией. Она должна иметь предопределенное имя main( ) • Самая простая программа напечатать какие-либо слова. Эта первая программа, которую пишут на всех языках
Эта программа выглядит так void main( ){ printf("HELLO", World \n);} Пример программы • Другой вариант void main(){ printf("HELLO,"); printf(" World"); printf("\n");} Пример программы
Следующая программа печатает таблицу температур по Фаренгейту и их эквивалент по Цельсию. Для перевода используется формула c=(5/9)(F-32) /* печать таблицы */ /* для f = 0,20,40,...,300*/ void main() { int lower, upper, step; float fahr, celcius; lower = 0; upper = 300; step =20; fahr = lower; while (fahr <= upper) {celcius = (5.0/9.0)*(fahr -32.0); printf(“%4.0f %6.1f \n”, fahr, celcius); fahr = fahr + step; } } Пример программы
В Си все переменные должны до их использования описываться • В операторе printf( ) спецификация %4.0f указывает, что нужно печатать число с плавающей точкой из 4 позиций без цифр после десятичной точки. %6.1f - число занимает по крайней мере 6 позиций и после точки есть одна цифра. Части спецификаций можно опускать %6f - по крайней мере 6 позиций %.2 - 2 точки после запятой, а общее число цифр не ограничивается %f - печатать число с плавающей запятой • В printf() предусмотрены • %d - для десятичных целых • %o - для восьмеричных • %x - для шестнадцатеричных • %c - для символов • %s - для символьных строк • %% - для самого символа % • Функция printf( ) не входит в сам язык Си (в Си ввод и вывод не определены). Для ввода используется функция scanf()
Изменим программу вычислений градусов по Фаренгейту: void main( ) { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf(“%4d %6.1f \n”, fahr, (5.0/9.0)*(fahr-32)); } Пример программы • Эта программа дает тот же результат
Плохо если в программе встречаются загадочные цифры вроде 300 или 20 • В Си с помощью конструкций #define можно ввести символическую константу. Везде потом транслятор заменит вхождение имени константы на соответствующую строку #define LOWER 0 #define UPPER 300 #define STEP 20 main() { int fahr; for (fahr = LOWER; fahr <= UPPER; fahr=fahr+STEP) printf(“%4d %6.1f \n”,fahr,(5.0/9.0)fahr-32)); } • LOWER, UPPER, STEP - константы, поэтому в описании они не появляются. Символические имена констант обычно записывают заглавными буквами, чтобы отличать их от переменных • В конце описания нет точки с запятой. Так как подставляется вместо имени вся строчка, и оказалось бы в операторе for слишком много запятых