io-lab-1/report.typ
2026-02-20 18:27:25 +03:00

118 lines
3.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#let header = (
subject: "Системы ввода вывода",
lab_number: [1\ "Принципы организации ввода/вывода без
операционной системы"],
teacher: [Быковский Сергей Вячеславович]
)
#set text(16pt, lang: "ru")
#set align(center)
#v(1cm)
*Федеральное государственное автономное образовательное
учреждение высшего образования «Национальный исследовательский
университет ИТМО»*
\
Факультет Программной Инженерии и Компьютерной Техники
#v(2.5cm)
*#header.subject*\
*Отчёт по лабораторной работе №#header.lab_number*
#v(4cm)
#set text(16pt)
#set align(left)
#table(
columns: 2,
stroke: none,
[*Выполнил:*], [Зинченко Иван Николаевич],
[*Группа:*], [P3312],
[*ИСУ:*], [408657],
[*Преподаватель:*], [#header.teacher]
)
#set align(center)
#v(4cm)
Санкт-Петербург\
#datetime.today().year() год
#pagebreak()
#set text(12pt)
#set par(justify: true)
#set align(left)
= Введение
== Цель
Познакомится с принципами организации ввода/выводе без операционной системы на примере компьютерной системы на базе процессора с архитектурой RISC-V и интерфейсом OpenSBI с использованием эмулятора QEMU.
== Задание
+ Реализовать функцию `putchar` вывода данных в консоль;
+ Реализовать функцию `getchar` для получения данных из консоли;
+ На базе реализованных функций `putchar` и `getchar` написать программу,позволяющую вызывать определенные вариантом функции `OpenSBI` посредством взаимодействия пользователя через меню;
+ Запустить программу и выполнить вызов пунктов меню, получив результаты их работы;
+ Оформить отчет по работе в электронном формате.
Вариант: 1
Пункты меню
+ Get SBI implementation version
+ Hart get status (должно быть возможно задавать номер ядра)
+ Hart stop
+ System Shutdown
= Выполнение
Листинг функций вызова интерфейса OpenSBI:
```c
void putchar(char ch) {
sbi_call(ch, 0, 0, 0, 0, 0, 0, 0x1 /* Console Putchar */);
}
int getchar(void) {
return sbi_call(0, 0, 0, 0, 0, 0, 0, 0x2);
}
void sbi_shutdown(void) {
sbi_call(0, 0, 0, 0, 0, 0, 0, 0x8);
}
sbiret sbi_get_impl_id(void) {
return sbi_call(0, 0, 0, 0, 0, 0, 0x1, 0x10);
}
sbiret sbi_get_spec_version(void) {
return sbi_call(0, 0, 0, 0, 0, 0, 0x2, 0x10);
}
sbiret sbi_hart_stop(void) {
return sbi_call(0, 0, 0, 0, 0, 0, 0x1, 0x48534D);
}
sbiret sbi_hart_get_status(unsigned long hartid) {
return sbi_call(hartid, 0, 0, 0, 0, 0, 0x2, 0x48534D);
}
```
Вывод в консоль работы функций:
#figure(
image("Screenshot 2026-02-20 161216.png"),
caption: "результат работы команд 1, 2, 4, 5"
)
#figure(
image("Screenshot 2026-02-20 161228.png"),
caption: "Результат работы команды 3"
)