Vezbe 01 2022

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 14

Оперативни системи 1

Вeжбе 1
Увод и архитектура RISC-V

Листа предмета:
ir2os1@lists.etf.rs
Оперативни системи 1, ЕТФ 2022.
Увод – системски позиви
• Системски позиви – рутине које обављају операције
са хардверским уређајима рачунара, оне се налазе у
меморији рачунара и могу се користити као услуге.
Други (кориснички) програми могу да их позивају као
системске позиве.
• Примери системских (услуга) позива које се могу
позивати из корисничких програма на језику C/C++:
– exit
– U/I токови (getc, putc, printf…)
– рад са фајловима
Све ове услуге су кориснику (програмеру) доступне кроз
стандардне библиотеке језика C/C++ (stdio.h, stdlib.h, ...) у виду
функција које само позива, а саме функције врше интеракцију
са хардверским уређајима користећи системске позиве.
Оперативни системи 1, ЕТФ 2021. 2
Увод – командна линија (CLI, console)

Оперативни системи 1, ЕТФ 2021. 3


Увод – командна линија (CLI, console)
• Кориснички интерфејс у виду командне линије.
• Тастатура представља улазни уређај, а екран
представља излазни уређај.
• Функционише тако што се задају команде које се
уносе као текст преко тастатуре, команда линија
потом интерпретира команду и на крају је извршава
уколико је унета у исправном облику (назив и
параметри команде су исправни).
• Команда током или непосредно након извршавања
може да пошаље неки испис на излазни уређај
(екран) и након тога је спремна за задавање нове
команде.
4
Увод – командна линија (CLI, console)
• Примери неких команди и механизама командне
линије Command Prompt доступне на Windows
оперативним системима:
– cd
– dir, mkdir и rmdir
– del, copy и rename
– tasklist и taskkill
– echo
– механизам цевовода (pipe |)
– преусмеравање стандардног улаза (<) и излаза (>)
Сличне ствари доступне и на другим оперативним системима,
само се команде другачије називају (Linux командна линија се
обрађује на предмету ПОС).

Оперативни системи 1, ЕТФ 2021. 5


Увод у архитектуру RISC-V
 64-битни 3-адресни микропроцесор са load/store
архитектуром са ознаком RV64IMA
 Адресибилна јединица бајт
 Подаци 1, 2, 4 или 8 бајтова
 Нижи бајт на нижој меморијској локацији
 Кориснички и системски режим рада
 Регистри:
 општенамeнски (доступни у оба режима) (x0..x31)
 системски
 pc указује на текућу инструкцију
• Стек:
• Расте ка нижим адресама
• sp указује на последњу заузету локацију (дељив са 16)
Оперативни системи 1, ЕТФ 2022. 6
Општенаменски регистри
• Сви регистри су равноправни са становишта процесора
• Регистри имају посебну намену са становишта преводиоца
• sp – показивач стека (x2)
• ra – регистар за повратну адресу (x1)
• s0..s11 – регистри опште намене за податке, чувају се
приликом позива функције (s0 je fp – frame pointer, битан за
дохватање локалних променљивих функције и параметара који су
на стеку)
• a0..a7 – регистри за пренос аргумената и повратне вредности
потпрограма (повратна вредност у a0-а1 или у меморију)
• t0..t6 – привремени регистри, не чувају се приликом позива
функције (привремене вредности код израза или локалне променљиве)
• zero – регистар ожичен на нулу (x0)
• gp i tp – регистри посебне намене које преводилац користи у
раду са глобалним подацима и са подацима који су доступни само
одређеној нити (global pointer и thread base pointer)

7
Оперативни системи 1, ЕТФ 2022.
Системски регистри
• Приступа им се помоћу инструкција csr (Control and Status
Registers) типа
• Доступни само у системском режиму (изузетак се генерише у
корисничком)
• sstatus – статусни регистар
• sip и sie – регистри за прекиде (sip-пристигли захтеве и sie
забрана прекида)
• scratch – привремени регистар
• sepc – сачувана вредност регистра pc из корисничког режима
када се деси изузетак
• scause – опис разлога за прелазак у системски режим
• stvec – адреса прекидне рутине поравната на 4 бајта

Оперативни системи 1, ЕТФ 2022. 8


Преглед неких инструкција (1/2)
• Аритметичке и логичке:
• као што је очекивано
• add rd, rs1, rs2
• addi rd, rs1, imm
• Инструкције скока:
• безусловне
• j, jal – скок са померајем (jal rd, offset)
• jr, jalr – скок на адресу записану у регистру
(jalr rd, rs, offset)
• call – скок на фунцкију (у x1 повратна адреса, комбинација
auipc и jalr)
• ecall – прелазак у системски режим
• ret, sret – повратак из функције или прекидне рутине
• условне
• стандардне beq, bne, itd.
• beqz rs, offset
• bgt rs, rt, offset
• Load/Store инструкције:
• l{b|h|w|d} rd, offset(rs)
• s{b|h|w|d} rs1, offset(rs2)
• b, h, w или d дефинише ширину података 1, 2, 4 или 8 бајтова
9
Преглед неких инструкција (2/2)
• csr инструкције:
• csrr rd, srs – читање системског регистра
• csrw srd, rs – упис у системски регистар
• csrrw rd, sr, rs – упис у системски регистар уз читање
претходне вредности

Оперативни системи 1, ЕТФ 2022. 10


Преводилац
• За пројекат користи се GNU gcc преводилац за RISC-V
• Није имплементирана стандардна библиотека
• Не постоје функције типа malloc, new, printf, scanf, итд.
• За лакши почетак дате неке функције
• mem.lib (заглавље mem.h) библиотека садржи:
• void* __mem_alloc(size_t size)
• int __mem_free(void* ptr)
• console.lib (заглавље console.h) библиотека садржи:
• void __putc(char chr)
• int __getc()

Оперативни системи 1, ЕТФ 2022. 11


Асемблер
• Асемблерски код може да се пише у посебан фајл
• екстензија фајла .S
• дозвољене асемблерске директиве
• имена функција могу да се извозе за коришћење у језику C/C++
• Асемблерски код може да се пише и у коду на језику C/C++
uint64 x;
// Upis vrednosti registra u automatsku promenljivu
asm volatile("csrr %0, sstatus" : "=r" (x));
// Upis vrednosti automatske promenljive u registar
asm volatile("csrw sstatus, %0" : : "r" (x));
// Instrukcija koja ne koristi automatske podatke
asm volatile("ld s0, 8(sp)");

12
Позив функције (1/2)
• Преводилац примењује следеће:
• s0..s11 регистре функција чува
• sp функција чува
• остале општенаменске регистре чува позивалац функције
• параметри се преносе преко регистара а0..а7, или кроз
меморију (на стеку или на неком другом месту на које указује
неки од регистара а0..а7)
• повратна вредност се преноси преко а0..а1, или кроз меморију
• Како се преводи позив и тело следеће функције:
int f(int a, int b) {
int c;
c = a + b;
return g(c);
}
Позив:
ld a1, ... // b parametar
ld a0, ... // a parametar
auipc ra, 0x0
jalr -68(ra) call f
mv ..., a0 // povratna vrednost
13
Оперативни системи 1, ЕТФ 2022.
Позив функције (2/2)
više adrese
f:
addi sp, sp, -16 s0
sd ra, 8(sp) Povratna adresa
sd s0, 0(sp)
addi s0, sp, 16 Stari s0
Okvir izvršavanja
addw a0, a0, a1 tekuće procedure
auipc ra, 0x0 Sačuvani registri i (stack frame)
call g
jalr -48(ra) lokalne promenljive

ld ra, 8(sp) Privremeni podaci


ld s0, 0(sp) (međurezultati,
addi sp, sp, 16 privremeni
ret sp pozivi...)

niže adrese

Оперативни системи 1, ЕТФ 2022. 14

You might also like