Sistemski softver/Jul 1 2025
Pređi na navigaciju
Pređi na pretragu
Ispit u roku jul 1 2025. godine održan je 22. avgusta. Trajao je sat i po vremena i radio se na računarima. Rok jul 1 predstavljao je "februarski" rok za školsku 2024/2025. godinu.
1. zadatak
Postavka
Posmatraju se dva objektna programa levi.o i desni.o dobijena pomoću GNU asemblera. Prikazati izlaz linkera izlaz.o, gde je potrebno prikazati sadržaj:
- tabele simbola
- tabele sekcija
- relokacionih zapisa strogo poštujući školski format i obavezno u skladu sa zadatom numeracijom simbola.
Napomene:
- Linker je pokrenut korišćenjem sledeće komande:gde linkerska skripta
ld -o izlaz.o -T script.ld levi.o desni.o
script.ldima sledeći sadržaj:SECTIONS { .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } } - Sve numeričke vrednosti unositi u heksadecimalnom formatu na širini od 4B bez prefiksa 0x u drugom komplementu dvojke.
- Netačan odgovor na stavke prikazane padajućim menijem sa ponuđenim odgovorima se penalizuje sa -33% poena od te stavke. Da se određena stavka sa ponuđenim odgovorima ne bi bodovala, potrebno je odabrati odgovor ???.
levi.o
| Num | Address | Size | Type | Flags | Name |
|---|---|---|---|---|---|
| 0: | 00000000 | 004F | PROGBITS | AX | .text |
| 1: | 00000000 | 0004 | PROGBITS | WA | .data |
| 2: | 00000000 | 0022 | NOBITS | WA | .bss |
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|---|---|---|---|---|---|
| 0: | 00000000 | 0 | NOTYP | LOC | UND | |
| 1: | 00000000 | 0 | SCTN | LOC | 1 | .text |
| 2: | 00000000 | 0 | SCTN | LOC | 2 | .data |
| 3: | 00000000 | 0 | SCTN | LOC | 3 | .bss |
| 4: | 00000013 | c | FUNC | GLOB | 1 | a |
| 5: | 00000015 | 8 | NOTYP | GLOB | 2 | b |
| 6: | 00000000 | 0 | NOTYP | GLOB | UND | c |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 0000000d | R_X86_64_32S | 4 (a) | 8 |
| 00000000 | R_X86_64_PC32 | 6 (c) | -4 |
desni.o
| Num | Address | Size | Type | Flags | Name |
|---|---|---|---|---|---|
| 1: | 00000000 | 0012 | PROGBITS | AX | .text |
| 2: | 00000000 | 0008 | PROGBITS | WA | .data |
| 3: | 00000000 | 0010 | NOBITS | WA | .bss |
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|---|---|---|---|---|---|
| 0: | 00000000 | 0 | NOTYP | LOC | UND | |
| 1: | 00000000 | 0 | SCTN | LOC | 1 | .text |
| 2: | 00000000 | 0 | SCTN | LOC | 2 | .data |
| 3: | 00000000 | 0 | SCTN | LOC | 3 | .bss |
| 4: | 00000004 | 8 | NOTYP | LOC | 2 | b |
| 5: | 00000000 | 0 | OBJECT | GLOB | 5 | c |
| 6: | 00000000 | 0 | NOTYP | GLOB | UND | a |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000003 | R_X86_64_PC32 | 6 (a) | -4 |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000002 | R_X86_64_32 | 3 (.bss) | 8 |
Rešenje
| Num | Address | Size | Type | Flags | Name |
|---|---|---|---|---|---|
| 1: | 00000000 | 00000061 | PROGBITS | AX | .text |
| 3: | 00000061 | 0000000C | PROGBITS | WA | .data |
| 5: | 0000006D | 00000032 | NOBITS | WA | .bss |
| Num | Value | Size | Type | Bind | Ndx | Name |
|---|---|---|---|---|---|---|
| 0: | 00000000 | 0 | NOTYP | LOC | UND | |
| 1: | 00000000 | 0 | SCTN | LOC | 1 | .text |
| 2: | 00000061 | 0 | SCTN | LOC | 3 | .data |
| 3: | 0000006D | 0 | SCTN | LOC | 5 | .bss |
| 4: | 00000069 | 0 | NOTYP | LOC | 3 | b |
| 5: | 00000082 | 0 | NOTYP | GLOB | 5 | b |
| 6: | 00000097 | 0 | NOTYP | GLOB | 5 | c |
| 7: | 00000013 | 0 | FUNC | GLOB | 1 | a |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000004 | R_X86_64_32S | a | 00000000 |
| 0000000B | R_X86_64_PC32 | c | FFFFFFFC |
| 00000052 | R_X86_64_PC32 | a | FFFFFFFC |
| Offset | Type | Symbol | Addend |
|---|---|---|---|
| 00000006 | R_X86_64_32 | .bss | 00000000 |
2. zadatak
Postavka
Posmatra se JIT emulator i emuliranje sledećeg programa.
- Označiti sve blokove koji će u toku rada emulatora biti prevedeni. Za svaki prevedeni blok navesti jedinstvenu identifikaciju u obliku
B<n>(<x>-<y>)(<n>je redni broj bloka u pogledu trenutka njegovog prevođenja pri čemu numeracija počinje od broja jedan, <x> je redni broj prve a <y> redni broj poslednje linije izvornog koda bloka). - Navesti sekvencu izvršavanja. U sekvenci izvršavanja mogu se nađi samo
GP(svaki put kada se emulator vrati u glavnu petlju),BH(svaki put kada se pozove funkcija koja pomaže u razrešavanju skokova) iB<n>(svaki put kada se izvrši dati blok u skladu sa oznakama iz prethodne tačke).
BEG ; 0x00
LDA A ; 0x00
L3 BPO L1 ; 0x02
BZE L2 ; 0x04
LDA B ; 0x06
DEC ; 0x08
STA B ; 0x09
BNZ L2 ; 0x0B
HLT ; 0x0D
L2 LDA A ; 0x0E
INC ; 0x10
STA A ; 0x11
L1 SBI 2 ; 0x13
BRN L3 ; 0x15
A DC 1 ; 0x17
B DC 2 ; 0x18
END
Rešenje
- Blokovi po redosledu prevođenja:
- B1(0x00 - 0x03)
- B2(0x13 - 0x16)
- B3(0x02 - 0x03)
- B4(0x04 - 0x05)
- B5(0x06 - 0x0C)
- B6(0x0E - 0x12)
- B7(0x0D - 0x0D)
- Redosled izvršavanja:
- GP
- B1
- BH
- GP
- B2
- BH
- GP
- B3
- BH
- GP
- B4
- BH
- GP
- B5
- BH
- GP
- B6
- B2
- BH
- B3
- BH
- B4
- BH
- B6
- B2
- B3
- B2
- B3
- B4
- BH
- B5
- BH
- GP
- B7
- BH
- GP
3. zadatak
Postavka
Odrediti indeks klasifikacije i to da li je izraz relokativan za svaki izraz dat u tabeli, ukoliko se smešta na mesto placeholder.
.extern e1, e2
.equ sym, 100
.section .X
x1: .skip 4
x2: .skip 5
.section .Y
y1: .skip 6
y2: .skip 7
y3: .skip 8
.section .here
# placeholder
.end
Rešenje
.X
|
.Y
|
.here
|
.unique(e1)
|
.unique(e2)
|
Izraz relokativan? | |
|---|---|---|---|---|---|---|
.long x1+y1-y2+sym
|
1 | 0 | 0 | 0 | 0 | Da |
.long x1+x2
|
2 | 0 | 0 | 0 | 0 | Ne |
.long sym+3
|
0 | 0 | 0 | 0 | 0 | Ne |
.long e1+e2
|
0 | 0 | 0 | 1 | 1 | Ne |
.long .+e1-e2
|
0 | 0 | 1 | 1 | -1 | Ne |
.long sym+3 je apsolutan, samim tim nije relokativan.
4. zadatak
Postavka
Navesti šta je rezultat ekspanzije sledećeg koda od strane C pretprocesora.
#define A 1, 1
#define B(b), #b
#define C(c1, c2) c1 ## c2
#define D(d) d
#define E(e) B(A) C(e) D(#e)
E(A)
Rešenje
"A" 11 "A"