Опубликован: 19.01.2025 | Доступ: свободный | Студентов: 0 / 0 | Длительность: 05:57:00
Лекция 2:

Лабораторная работа №1. Знакомство с рабочей средой SYNTACORE KIT

< Лекция 1 || Лекция 2: 123 || Лекция 3 >

1.2.3. Получение сведений об аппаратном обеспечении в Linux

Для выполнения данной лабораторной работы вам потребуется программно получать информацию о текущей аппаратной платформе. Для того чтобы узнать архитектуру, на которой работает Linux-система можно использовать команду arch:

$ arch # Гостевая ОС
x86_64

$ arch # RISC-V ОС
riscv64

Расширенная информация о процессоре и ОЗУ содержится в procfs, в частности в /proc/cpuinfo и /proc/meminfo. С точки зрения ОС это текстовые файлы, содержимое которых можно вывести стандартными средствами (пример для гостевой ОС):

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 142
model name	: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping	: 9
cpu MHz		: 2712.008
……

~$ cat /proc/meminfo 
MemTotal:        2022664 kB
MemFree:          177740 kB
MemAvailable:     278060 kB
Buffers:            6136 kB
…..

1.3. Задание к лабораторной работе

Напишите программу на языке С, которая последовательно выводит информацию о процессоре (каждый пункт списка выводится в новой строке):

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

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

Программу необходимо скомпилировать и запустить последовательно в гостевой ОС и в RISC-V ОС (либо через qemu-riscv64).

1.3.1. Описание последовательности выполнения работы

Для выполнения поставленной задачи необходимо в первую очередь понять, с какими источниками данных о аппаратном обеспечении предстоит работать. В данном случае предлагается использовать чтение из служебного файла файл /proc/cpuinfo и захват вывода команды arch.

Далее необходимо составить универсальную программу, которая будет решать поставленную задачу вне зависимости от архитектуры процессора, под которую она скомпилирована. Авторы предлагают вынести в отдельные функции работу с /proc/cpuinfo и работу с командой arch. Обратите внимание на формат файла cpuinfo - каждое ядро процессора выводится отдельным блоком. Примеры кода можно посмотреть в разделе 1.2.

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

1.3.2. Пример выполнения задания на защиту

Напишите программу, которая считывает общий объем оперативной памяти компьютера.

#include <stdio.h>

int main(void)
{
    FILE *meminfo = fopen("/proc/meminfo", "r");

    char line[256];
    while(fgets(line, sizeof(line), meminfo))
    {
        int ram;
        if(sscanf(line, "MemTotal: %d kB", &ram) == 1)
        {
            fclose(meminfo);
            printf("%d", ram);
        }
    }

    fclose(meminfo);
    return 0;
}

1.4. Вопросы для контроля

  1. Как в Syntacore Kit реализуется возможность запуска программ для архитектуры RISC-V?
  2. В чем состоит назначение qemu-riscv64?
  3. Как узнать размер кэш-памяти для одного ядра процессора в Linux?
< Лекция 1 || Лекция 2: 123 || Лекция 3 >