---
# System prepended metadata

title: Lista 0
tags: [SO]

---

# Lista 0
###### tags: `SO`

## Zadanie 1

:::info

![](https://i.imgur.com/tI5x4g4.png)


**przerwanie sprzętowe** - sygnał powodujący zmianę przepływu sterowania, niezależnie od aktualnie wykonywanego programu; asynchroniczne
- wyświetlenie tekstu
- odczyt z dysku
- co kilka ms jądro zabiera kontrolę programom

**wyjątek procesora** - przerwanie wykonania bieżącego strumienia instrukcji i przekazanie sterowania do oprogramowania systemowego w celu programowej reakcji na zdarzenie.

- błąd dzielenia
- niewłaściwy dostęp do pamięci
- błędnie użyta instrukcja

**pułapka** - wyjątek w procesie użytkownika, np. wywołany dzieleniem przez zero czy niedozwolonym dostępem do pamięci; synchroniczne
- w debuggerach
- w programach monitorujących
- wyciągnięcie z pustej listy
:::

**W jakim scenariuszu wyjątek procesora nie oznacza błędu czasu wykonania programu?**
Przy użyciu bloku try-catch.

**Kiedy pułapka jest generowana w wyniku prawidłowej pracy programu?**
W przypadku debbugingu.

![](https://i.imgur.com/3eefRJ2.png)



## Zadanie 2

:::info    

**obsługa przerwań** - proces, polegający na pozbyciu się problemu generującego przerwanie

**wektor przerwań** - struktura danych przyporządkowująca każdemu handlerowi żądanie obsługi przerwania

**procedura obsługi przerwania** - specjalna procedura, do której przyporządkowany jest konkretny warunek przerwania

**tryb jądra** - tryb pracy procesora, w którym każdy wykonywany kod ma dostęp do tej samej pamięci wirtualnej, a więc może nadpisywać pamięć innych procesów, a nawet systemu

:::

1. Procesor zapisuje program counter(licznik programu) i rejestry na stosie.
2. Procesor szuka odpowiedniej procedury w wektorze przerwań.
3. Procesor wywołuje procedurę obsługi przerwania.
4. Procesor przywraca rejestry i wraca do miejsca programu, w którym nastąpiło przerwanie.

## Zadanie 3


https://stackoverflow.com/questions/14361248/whats-the-difference-of-section-and-segment-in-elf-file-format

https://stackoverflow.com/questions/44582082/entry-point-of-elf-executable-header

https://www.geeksforgeeks.org/segmentation-in-operating-system/


**sekcja** - najmniejsza jednostka obiektu, którą można przenieść, zawiera dane do konsolidacji

**segment** - zawierają informacje potrzebne do wykonania plik, zawiera 0 lub więcej sekcji

Plik wykonywalny składa się z nagłówka i segmentów zawierających (bądź nie) sekcje.

**nagłówki programu** - opisują segmenty w pliku binarnym i są niezbędne do załadowania programu


ELF program headers are what describe segments within a binary and are necessary for program loading. Segments are understood by the kernel during load time and describe the memory layout of an executable on disk and how it should translate to memory. The program header table can be accessed by referencing the offset found in the initial ELF header member called e_phoff (program header table offset), as shown in the ElfN_Ehdr structure in display

Nagłówki:
- ELF header: rozmiar słowa, typ pliku, typ maszyny
- segment header: rozmiar strony, segmenty adresów wirtualnych, rozmiary segmentów
- Section header: offsety i rozmiary każdej sekcji

Entry-point znajduje się najczęściej w połowie sekcji ```.text```, a wskaźnik na niego w ELF headerze.

![](https://i.imgur.com/oJHugod.png)


![](https://i.imgur.com/U2VvUsP.png)


## Zadanie 5

```volatile``` jest słowem kluczowym, które informuje kompilator, że zmienna może zostać zmieniona w nieznany mu sposób. W standardzie C11 nie służy do wielowątkowości.

```c=
int volatile quit = 0;
while (!quit) {
    printf("running!");
}
```

Scenariusze:
- modyfikacja przez przerwanie
- zmiana wartości przez sprzęt
