Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[OSZUR] 4. laboratorijska vježba - 2021/2022

Darla

Hvala 🙂. Kad rjesavam 4. lab jel mijenjam kod u chapter 05/03 arm ili i386 dijelu?


Bucc

Darla i386. još da za 5. dodam što mi je uzelo sat vremena života. u fs.c za include treba dodat uz par ostalih (sve sam ih kopirao iz [Chapter_05_Devices/03_Serial_port/kernel/startup.c] )

#include "../../kernel/device.h"
#include "../../kernel/fs.h"

nnn

tamo kod primjera za rješenje u drugom koraku:

  1. Dodati/proširiti podatkovnu strukturu
    Primjerice dodati:
    int prio; //dodati element u struct ihndlr
    
    //definirati jedan zahtjev za prekid:
    struct zahtjev {elementi: handler (struct ihndlr), obrada_u_tijeku };
    //te dodati listu za takve zahtjeve:
    static list_t zahtjevi;

Dodao sam ovaj int u ./arch/i386/interrupt.c, ali ne kužim šta se misli sa ovim:

//definirati jedan zahtjev za prekid:
struct zahtjev {elementi: handler (struct ihndlr), obrada_u_tijeku };
//te dodati listu za takve zahtjeve:
static list_t zahtjevi;

može netko objasnit?


Bucc

dinoo ta nova struktura zahtjev je poput strukture ihndlr samo što ima dodatne stvari u sebi. moja struct zahtjev izgleda ovako

struct zahtjev {
	void *device; //struct ihndlr
	int irq_number;
	int prio; //struct ihndlr (možeš, a i ne moraš stavit u struct ihndlr već samo ovdje)
	uint8 done;
	int (*ihandler) (unsigned int, void *device); //struct ihndlr
};

i onda listu za the zahtjeve

static list_t zahtjevi;

// kasnije u func void arch_init_interrupts() iniciraš tu listu zahtjeva
list_init(&zahtjevi)

// u func void arch_interrupt_handler(int irq_num)
// dodaješ interupte u tu listu sortirane u onoj while(ih)
// i izvan te petlje vadiš prekide po najvećem prioritetu i hendlaš ih

nnn

Olive Oil hvala puno, samo nešto mi još nije jasno pa ako ti nije problem objasnit:

  • što ako se trenutno obrađuje prekid sa prioritetom 3, a dođu novi prekidi sa prioritetim 2 i 4:
    (1) čeka se kraj obrade ovog prekida 3, onda se zove 4 i kad on završi 2 ili
    (2) zaustavlja se obrada prekida 3, pokrene se obrada prekida 4, po završetku se vraća nazad u obradu prekida 3, kad završi prekid 3, zove prekid 2

  • prekide generiram slično kao u onom timer.c programu sa sigev_notify?, samo zovem prekid sa vecim prioritetom u handleru prekida sa manjim

  • šta je ovaj 3. parametar:
    void list_sort_add(list_t *list, void *object, list_h *hdr, int(*cmp)(void *, void *)) ,
    koliko ja razumijem
    list_sort_add(lista_gdje_dodajem, objekt_struct_zahtjev_kojeg_dodajem, ?, funkcija za usporedbu)
    al opet ne razumijem taj 3. parametar


Kasperinac

Kak raisati prekide (asinkrono nekak pretpostavljam) dok se vrsi obrada prekida?


Unity

Kasperinac tako da ga pozoves u toj obradi prekida


Bucc

dinoo u onoj petlji while(ih) dodaješ prekide, a izvan nje u nekoj drugoj petlji hendlaš prekide sve dok ih ima i sve dok postoji prekid koji nije hendlan.
npr u to drugoj petlji staviš redom (meni je tak):

pi = list_get(&pr_reqs, FIRST);
while (pi && !pi->done)
{
p->done = 1
enable_interrupts(); // funkcija već postoji
pi->ihandler(pi->irq_number, pi->device);
disable_interrupts(); // postoji
list_remove(&pr_reqs, FIRST, NULL);
kfree(pi);
pi = list_get(&pr_reqs, FIRST);
}

ovaj treći parametar je ne znam ni ja točno što.

imam nešto tipa

list_h *p_lh; // nisam ni ja siguran za list_h što je, samo sam vidio da se koristio

// u list_sort_add za treći parametar stavim p_lh, ovo je u onoj petlji while(ih)
p_lh = kmalloc(sizeof(list_h));

nisam ni ja baš siguran u sve to, al na neku foru mi je radilo


Ardura

Je li netko imao lab danas? Kakav je zadatak?


Unity

Maddy

  1. bio simulacija prekida, samo izazvat par prekida slicno primjeru koji smo trebali imati
  2. implementirati rename funkciju za datoteke

Dlaid

Kad dodamo argument prioritet u funkciju za registraciju koje da prioritete dodamo ovim prekidima koji vec postoje


nnn

Peter Jordanson Mislim da nije bitno, ja sam svima dodijelio 1, osim ovima koje koristim za demonstraciju


Valentino

Danas je jos bio zadatak napisati funkciju delete(filename)