Вход/Регистрация
Программирование для Linux. Профессиональный подход
вернуться

Самьюэл Алекс

Шрифт:

 printf("free RAM : %5.1f MB\n",

 si.freeram / megabyte);

 printf("process count : %d\n", si.procs);

 return 0;

}

8.15. Функция uname

Функция

uname
возвращает информацию о системе, в частности сетевое и доменное имена компьютера, а также версию операционной системы. Единственным аргументом функции является указатель на структуру типа
utsname
. Функция заполняет следующие поля этой структуры (все эти поля содержат текстовые строки).

■ 

sysname
. Здесь содержится имя операционной системы (например,
Linux
).

■ 

release
,
version
. В этих полях указываются номера версии и модификации ядра.

■ 

machine
. Здесь приводится информация о платформе, на которой работает система. В случае Intel-совместимых компьютеров это будет либо
i386
, либо
i686
, в зависимости от процессора.

■ 

node
. Это имя компьютера.

■ 

__domain
. Это имя домена.

Функция

uname
объявлена в файле
<sys/utsname.h>
.

В листинге 8.13 показана небольшая программа, которая отображает номера версии и модификации ядра Linux, а также сообщает тип платформы.

Листинг 8.15. (print-uname.c) Вывод информации о ядре и платформе

#include <stdio.h>

#include <sys/utsname.h>

int main {

 struct utsname u;

 uname(&u);

 printf("%s release %s (version %s) on %s\n", u.sysname,

u.release, u.version, u.machine);

 return 0;

}

Глава 9

Встроенный ассемблерный код

Сегодня лишь немногие программисты используют в своей практике язык ассемблера. Языки высокого уровня, такие как С и C++, поддерживаются практически на всех архитектурах и обеспечивают достаточно высокую производительность программ. Для тех редких случаев, когда требуется встроить в программу ассемблерные инструкции, в коллекции GNU-компиляторов (GCC) предусмотрены специальные средства, учитывающие особенности конкретной архитектуры.

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

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

asm
. Например, на платформе x86 команда

asm("fsin" : "=t" (answer) : "0" (angle));

является эквивалентом следующей инструкции языка C: [30]

answer = sin(angle);

Обратите внимание на то, что, в отличие от обычных ассемблерных инструкций, функция

asm
позволяет указывать входные и выходные операнды, используя синтаксис языка С.

Подробнее узнать об инструкциях архитектуры x86, используемых в настоящей главе, можно по следующим адресам:

http://developer.intel.com/design/pentiumii/manuals
и
http://www.x86-64.org/documentation
.

30

Выражение

sin(angle)
обычно преобразуется в вызов функции библиотеки
libm
, но если задать флаг
– O1
(или включить более сильную оптимизацию), компилятор gcc заменит вызов функции простой ассемблерной инструкцией
fsin
.

9.1. Когда необходим ассемблерный код

Инструкции, указываемые в функции

asm
, позволяют программам напрямую обращаться к аппаратным устройствам, поэтому полученные программы выполняются быстрее. Ассемблерные инструкции используются при написании кода операционных систем. Например, файл
/usr/include/asm/io.h
содержит объявления команд, осуществляющих прямой доступ к портам ввода-вывода. Можно также назвать один из исходных файлов ОС Linux —
/usr/src/linux/arch/i386/kernel/process.s
; в нем с помощью инструкции
hlt
реализуется пустой цикл ожидания.

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

  • Читать дальше
  • 1
  • ...
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: