Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Назад Введение в мир программирования
Глава 1. Введение
Вперед

Ваш инструментарий

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

Значительная часть книги посвящена языку ассемблера для процессоров x86, находящихся под управлением операционной системы GNU/Linux. Поэтому все примеры будут расчитаны на использование стандартного для GNU/Linux набора инструментов под названием GCC (GNU Compiler Collection). В случае, если вы мало знакомы с GNU/Linux и набором программ GCC, можете быть уверены, что мы их кратко рассмотрим. Если же вы ничего не слышали про Linux, то рекомендуем обратиться к материалам, размещённым по адресам http://www.gnu.org/home.ru.html и http://rus-linux.net. С технической точки зрения потребуется разобраться в том, как работать в командной строке и использовать текстовые редакторы, такие, например, как Emacs или Vim.

Выбор ``стандартной'' среды для создания программ, значительно упрощает познавательный процесс. Содержащийся в книге код на языках, отличающихся от ассемблера, также предназначен для использования в среде GNU/Linux

Люди, не имеющие опыта работы с Linux, могут обратиться за помощью в их местную группу пользователей GNU/Linux. Участники этих общественных объединений по интересам обычно готовы поддержать новичков в освоении незнакомой операционной системы, помогая во всём, начиная с установки GNU/Linux, до освоения методов её наиболее эффективного применения. Список групп пользователей GNU/Linux из разных стран доступен по адресу http://www.linuxlinks.com/UserGroups/. Группы, находящиеся на территории РФ, наиболее подробно перечислены по адресу http://lug.ru/lugs.

Замечательнейший русскоязычный лист рассылки, где можно найти помощь в решении вопросов практически любой сложности, находится по адресу http://subscribe.ru/catalog/comp.soft.linux.discuss/.

Все примеры программ тестировались в среде Gnewsense 2.3 deltah (ядро 2.6.24-24-generic) и должны работать в окружении любого другого GNU/Linux дистрибутива.

Код на языке ассемблера, приводимый в данной книге, предназначен для процессоров x86. Power Macintosh, DEC Alpha, а также другие процессоры потребуют внесения изменений в текст программ. Ассемблерный код также потребуется менять для запуска в системах, работающих на ядре отличном от Linux, таких, в частности, как BSD (Berkeley Software Distribution).

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

Если в вашем распоряжении нет компьютера с GNU/Linux, вы можете поискать хостинг-провайдера, предлагающего учётные записи на машинах под управлением Linux с доступом по сети через интерпретатор команд. Существует множество провайдеров, регистрирующих дешёвые аккаунты подобного типа. Главное --- быть уверенным в том, что вам предлагают сетевой доступ именно к процессору x86 и ядру Linux. Достаточным условием для использования отмеченного хостинг-аккаунта является наличие соединения с Интернет и программы telnet (она помогает удалённо через терминал использовать сервер, предоставленный провайдером; для этих целей также подходит программа ssh).

Если вы работаете в Windows(R), то telnet-клиент у вас предустановлен. Его можно запустить если открыть меню ``Пуск'', нажать на вкладку ``Выполнить'' и ввести команду ``telnet'' (без кавычек). Однако, из-за того, что реализация telnet в Windows ведёт себя достаточно странно, вместо неё предпочтительнее использовать клиент PuTTY, который можно скачать по адресу chiark.greenend.org.uk/~sgtatham/putty. Для платформы Macintosh также доступны программы подобного рода (например, Nifty Telnet).

Помимо всего прочего, существует вероятность, что кто-то из вашей местной группы пользователей GNU/Linux готов предоставить вам необходимую технику и программное обеспечение.

Если у вас нет GNU/Linux и вы не имеете возможности открыть аккаунт для работы с нужной аппаратно-программной средой через интерпретатор команд, тогда по адресу knoppix.org скачайте GNU/Linux дистрибутив под названием Knoppix (сегодня в Интернет доступны и другие LiveCD дистрибутивы, в том числе gnewsense --- gnewsense.org и trisquel --- trisquel.info/en) Он работает с компакт-диска (при этом все нужные данные хранятся в оперативной памяти, которая всегда очищается при отключении питания ЭВМ) и у вас не будет необходимости устанавливать его на жёсткий диск. Как только вы закончите использование Knoppix, просто перезагрузите компьютер, извлеките компакт-диск из дисковода и у вас станет полностью доступной та операционная система, которая применялась вами раньше.

Что такое GNU/Linux? GNU/Linux --- это операционная система, похожая на UNIX(R). Акроним GNU (GNU is Not Unix) относится к проекту (http://www.gnu.org/home.ru.html), в рамках которого созданы многие из необходимых нам в работе свободно распространяемых программ, в том числе и набор компиляторов GCC, который мы будем использовать, решая учебные задачи. GCC содержит всё для создания исполняемых файлов на разных языках.

Linux --- это название ядра. Ядро представляет из себя центральную часть операционной системы, обслуживающую все остальные программы: одновременно и ``забор'' и ``ворота''. Как ``ворота'' оно предоставляет возможность пользовательским приложениям в унифицированной форме работать с аппаратурой. Без ядра вам пришлось бы самому сочинять код для взаимодействия с каждым устройством, существующим у вас в системе. Ядро также занимается регулированием доступа к файлам и созданием условий для взаимодействия процессов. К примеру, когда вы печатаете, вводимые вами символы обрабатываются несколькими программами ещё до того, как окажутся в окне текстового редактора. Ядро получает от клавиатуры коды опроса (scancodes), а потом по определённым правилам конвертирует их в то, что мы видим как буквы, цифры и другие печатные знаки. Если вы используете систему с многооконным интерфейсом (такую как Microsoft Windows (R) или X Window System), тогда менеджер окон получает от ядра информацию о нажатой кнопке и пересылает её в адрес активного окна на дисплее пользователя.

Пример 1. Как компьютер обрабатывает сигналы, приходящие с клавиатуры

Клавиатура -> Ядро -> Менеджер окон -> Активное приложение пользователя

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

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

Однако, ядро не может существовать самодостаточно. Вы даже не сможете загрузить компьютер, имея в распоряжении только ядро. Ядро удобно представлять себе в виде трубопровода, проложенного в доме. Без труб задвижки и краны не будут работать, при этом трубы без задвижек и кранов --- достаточно бесполезные приспособления. Все вместе, пользовательские приложения (из проекта GNU и других источников) и ядро (Linux) составляют операционную систему под названием GNU/Linux.

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

Машинные языки

Их компьютер воспринимает непосредственно. Каждая команда в таких языках представлена в виде чисел и их последовательностей.

Язык ассемблера

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

Языки высокого уровня

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

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


Предыдущий раздел: Оглавление Следующий раздел:
Добро пожаловать в мир программирования!   Глава 2