Sistemski softver/Jul 1 2025

Izvor: SI Wiki
< Системски софтвер
Datum izmene: 20. septembar 2025. u 17:46; autor: Aleksa (razgovor | doprinosi) (→‎Решење)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
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:

  1. tabele simbola
  2. tabele sekcija
  3. 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:
    ld -o izlaz.o -T script.ld levi.o desni.o
    gde linkerska skripta script.ld ima 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

#shdr
Num Address Size Type Flags Name
0: 00000000 004F PROGBITS AX .text
1: 00000000 0004 PROGBITS WA .data
2: 00000000 0022 NOBITS WA .bss
#symtab
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
#.rela.text
Offset Type Symbol Addend
0000000d R_X86_64_32S 4 (a) 8
00000000 R_X86_64_PC32 6 (c) -4

desni.o

#shdr
Num Address Size Type Flags Name
1: 00000000 0012 PROGBITS AX .text
2: 00000000 0008 PROGBITS WA .data
3: 00000000 0010 NOBITS WA .bss
#symtab
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
#.rela.text
Offset Type Symbol Addend
00000003 R_X86_64_PC32 6 (a) -4
#.rela.data
Offset Type Symbol Addend
00000002 R_X86_64_32 3 (.bss) 8

Rešenje

#shdr
Num Address Size Type Flags Name
1: 00000000 00000061 PROGBITS AX .text
3: 00000061 0000000C PROGBITS WA .data
5: 0000006D 00000032 NOBITS WA .bss
#symtab
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
#.rela.text
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
#.rela.data
Offset Type Symbol Addend
00000006 R_X86_64_32 .bss 00000022

2. zadatak

Postavka

Posmatra se JIT emulator i emuliranje sledećeg programa.

  1. 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).
  2. 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) i B<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

  1. Blokovi po redosledu prevođenja:
    1. B1(0x00 - 0x03)
    2. B2(0x13 - 0x16)
    3. B3(0x02 - 0x03)
    4. B4(0x04 - 0x05)
    5. B5(0x06 - 0x0C)
    6. B6(0x0E - 0x12)
    7. B7(0x0D - 0x0D)
  2. Redosled izvršavanja:
    1. GP
    2. B1
    3. BH
    4. GP
    5. B2
    6. BH
    7. GP
    8. B3
    9. BH
    10. GP
    11. B4
    12. BH
    13. GP
    14. B5
    15. BH
    16. GP
    17. B6
    18. B2
    19. BH
    20. B3
    21. BH
    22. B4
    23. BH
    24. B6
    25. B2
    26. B3
    27. B2
    28. B3
    29. B4
    30. BH
    31. B5
    32. BH
    33. GP
    34. B7
    35. BH
    36. 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"