Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Architettura degli Elaboratori, 9 CFU => Topic started by: R3m on 14-04-2011, 11:53:06



Title: AA 2010-2011: Quesiti a risposta aperta
Post by: R3m on 14-04-2011, 11:53:06
Secondo me sarebbe corretto postare le risposte date per i quesiti a risposta aperta, in modo da ottenere eventuali correzioni/migliorie e anche per avere un topic dove è possibile conoscere eventuali risposte..
Comincio io  :-OK

Code:
Si indichino le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione dell'hardware moderno, e se ne descrivano brevemente i contributi più rilevanti (max 10 righe)

Pascal/Babbage Pascal perchè inventò una rudimentale macchina meccanica capace di eseguire somme e sottrazioni. 150 anni dopo però si passò da una macchina capace di eseguire un preciso algoritmo ad una capace di eseguirne diversi non precalcolati, la difference engine, realizzata da Babbage.
Von Neumann, dopo mezzo secolo di distanza, la base dei moderni elaboratori è la sua invenzione, L'EDSAC, una macchina a valvole dotata di CPU e capace di memorizzare un programma in memoria.
Bardeen,Brattain, Shockley, inventori del transistor (invenzione talmente rivoluzionaria da essere considerata "aliena") e della successiva prima macchina a transistor PDP-1.

Code:
Si indichino le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione del software moderno, e se ne descrivano brevemente i contributi più rilevanti (max 10 righe).
I tecnici dell'esercito inglese, inventori del software di ENigma, gli inventori di Unix, Windows con la GUI (Bill Gates quindi) dovrebbero essere le 3 invenzioni software più importanti.

Code:
In che senso l'hardware e il software sono equivalenti? E in che senso non lo sono? (max 5 righe)
???


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 14-04-2011, 13:37:03
Secondo me sarebbe corretto postare le risposte date per i quesiti a risposta aperta, in modo da ottenere eventuali correzioni/migliorie e anche per avere un topic dove è possibile conoscere eventuali risposte..
Comincio io  :-OK

Code:
In che senso l'hardware e il software sono equivalenti? E in che senso non lo sono? (max 5 righe)

Logicamente hardware e software sono equivalenti in termini di computabilità. Cioè qualsiasi operazione eseguita dal software può essere implementata dall' hardware, e allo stesso modo ogni istruzione eseguita dall' hardware può essere simulata via software.
Code:
E in che senso non lo sono?
  .whistling


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 14-04-2011, 14:00:02
Mi limito a correggere le inesattezze storiche:
I tecnici dell'esercito inglese, inventori del software di ENigma,
Enigma era la macchina tedesca di codifica crittografica, Alan M. Turing collaborò alla costruzione di Colossus per decifrare i codici prodotti da Enigma.
Quote
gli inventori di Unix,
cioè Thomson e Ritchie.
Quote
Windows con la GUI (Bill Gates quindi)
la questione è controversa, ma è storicamente accertato che l'idea della GUI per Windows fu rubacchiata alla Apple, che l'aveva acquistata dalla Rand e realizzata con modifiche nel PC Lisa (che però non fu un gran successo commerciale).



Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 14-04-2011, 14:09:16
Quote
E in che senso non lo sono?
  .whistling
Se lo fossero, si potrebbe realizzare una macchina a livelli tutti software, incluso il più basso... da qualche parte occorrerà pur fare i conti con la realtà fisica dell'esecuzione di algoritmi, no?


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 14-04-2011, 14:18:09
Quote
E in che senso non lo sono?
  .whistling
Se lo fossero, si potrebbe realizzare una macchina a livelli tutti software, incluso il più basso... da qualche parte occorrerà pur fare i conti con la realtà fisica dell'esecuzione di algoritmi, no?

 :-OK


Title: Re:Quesiti a risposta aperta
Post by: R3m on 17-04-2011, 09:25:25
Ma quindi le risposte che ho dato sono valide? E' abbastanza difficile trovare 3 persone di maggiore influenza nel campo software e hardware...dato che tutte le scoperte realizzate sembrano essere determinanti per lo sviluppo futuro...

Ho risposto ad altri quesiti...

Code:
Fornire una ragione per la quale è lecito supporre improbabile che la legge di Moore resti valida ancora a lungo (max 5 righe).
La legge di Moore è una semplice osservazione realizzata sull'incremento di transistor e la frequenza dei processori via via realizzati...tale legge però potrebbe non valere più dato che le continue risorse che vengono investite nella ricerca sono sempre crescenti e già adesso lo sviluppo di una nuova tecnologia richiede pochissimo tempo (es. la ATi che ogni 6 mesi propone una nuova scheda video). Tale legge inoltre non è più valida in caso di tecnologie doppio/triplo/quadruplo ecc...processore.

Code:
Elencare brevemente le principali tipologie di computer di cui si è a conoscenza (max 10 righe).
Francamente non mi è molto chiaro...si intende desktop pc/mainframe/tablet/notebook ecc o cosa?

Code:
Descrivere brevemente un paio di vantaggi dell'identificazione RFID di prodotti commerciali, rispetto a quella con codici a barre (max 10 righe)
Su wikipedia ho trovato che i chip RFID resistono ad agenti chimici e ambientali oltre che fluidi, possono essere utilizzati anche in ambienti contaminati e sporchi, possibilità di leggere decine di etichette in pochi secondi, e infine, possibilità di eliminare l'etichetta oltre che possibilità di far leggere a più dispositivi in contemporanea la stessa etichetta.

Code:
Citare tre elettrodomestici che potrebbero funzionare con microcontrollore integrato, e spiegare la funzione di quest'ultimo (max 10 righe).
Francamente non saprei  :boh

Code:
Indicare per quali tipologie di computer sono adoperate le seguenti CPU: Pentium 4, UltraSPARC, Intel 8051 (max 5 righe).
Vale come sopra..si intende sempre desktop/mainframe ecc?


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 17-04-2011, 12:55:41

Code:
Si indichino le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione dell'hardware moderno, e se ne descrivano brevemente i contributi più rilevanti (max 10 righe)
Ma Howard Aiken non sarebbe anche da considerare anche?

Howard Aiken: costruì per mezzo di relè il computer (Mark I) di uso generale che Babbage a suo tempo non riuscì a realizzare.


QUESITO 18: Elencare brevemente le principali tipologie di computer di cui si è a conoscenza (max 10 righe)
  • Computer usa e getta: collocati al gradino più basso troviamo i chip inseriti ad esempio nelle cartoline d'auguri e che fanno parte del nostro mondo. Questo tipo di tipologia non è però da sottovalutare in quanto potrebbe portare ad un avanzamento tecnologico, si veda ad esempio i chip RFID.
  • Microcontrollori: computer integrati in apparecchiature che non vengono vendute come elaboratori
  • Server: versioni potenziate dei personal computer come server di rete (locale, o internet)
  • Mainframe: collocati al gradino più alto vengono principalmente usati da grandi società

QUESITO 21 : Citare tre elettrodomestici che potrebbero funzionare con microcontrollore integrato, e spiegare la funzione di quest'ultimo (max 10 righe):
I microcontrollori sono dei computer integrati in un dispositivo. Essi lo comandano e ne gestiscono l'interfaccia utente. Essi sono presenti ad esempio in radiosveglie, lavatrici, forni a microonde)


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 17-04-2011, 21:02:19
Ma quindi le risposte che ho dato sono valide? E' abbastanza difficile trovare 3 persone di maggiore influenza nel campo software e hardware...dato che tutte le scoperte realizzate sembrano essere determinanti per lo sviluppo futuro...
Sulla scelta delle due terne si può discutere, certamente ci sono altri candidati (ad es. Maurice Wilkes per l'hardware, Ward Cunningham per il software). La correttezza però non dipende dalla scelta, ma dall'esattezza storica delle motivazioni.
Quote
La legge di Moore è una semplice osservazione realizzata sull'incremento di transistor e la frequenza dei processori via via realizzati...tale legge però potrebbe non valere più dato che le continue risorse che vengono investite nella ricerca sono sempre crescenti e già adesso lo sviluppo di una nuova tecnologia richiede pochissimo tempo (es. la ATi che ogni 6 mesi propone una nuova scheda video). Tale legge inoltre non è più valida in caso di tecnologie doppio/triplo/quadruplo ecc...processore.
Lei addirittura ritiene che possa non essere più valida per accelerazione del tasso di crescita della tecnologia. Mi sembra francamente troppo ottimista. Consideri i limiti che la fisica pone ad un tasso di crescita esponenziale di durata indefinita...
Quote
Code:
Elencare brevemente le principali tipologie di computer di cui si è a conoscenza (max 10 righe).
Francamente non mi è molto chiaro...si intende desktop pc/mainframe/tablet/notebook ecc o cosa?
Ovvio, nel testo c'è una tabella in cui la colonna a sinistra elenca il "tipo" dei computer.
Quote
Su wikipedia ho trovato che i chip RFID resistono ad agenti chimici e ambientali oltre che fluidi, possono essere utilizzati anche in ambienti contaminati e sporchi, possibilità di leggere decine di etichette in pochi secondi, e infine, possibilità di eliminare l'etichetta oltre che possibilità di far leggere a più dispositivi in contemporanea la stessa etichetta.
OK.
Quote
Francamente non saprei  :boh
Faccia uno sforzo... Ha mai usato una lavatrice?


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 17-04-2011, 21:12:00
Le mie possono andar bene?  :boh


Title: Re:Quesiti a risposta aperta
Post by: R3m on 17-04-2011, 22:18:06
Lei addirittura ritiene che possa non essere più valida per accelerazione del tasso di crescita della tecnologia. Mi sembra francamente troppo ottimista. Consideri i limiti che la fisica pone ad un tasso di crescita esponenziale di durata indefinita...

Non capisco..io ho scritto che anche in caso di limite fisico si può ricorrere ad altre tecnologie (addirittura si parlava di utilizzare l'alluminio in futuro per eliminare i colli di bottiglia dei transistor in silicio)...ma anche arrivando a un livello in cui non si può fare di meglio è comunque possibile inserire 2/3/4/n processori in contemporanea...
Non mi vengono in mente altre idee...


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 17-04-2011, 22:45:49
Le mie possono andar bene?  :boh
Sì, commento solo quando c'è qualcosa da correggere.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 17-04-2011, 22:56:06
Non capisco..io ho scritto che anche in caso di limite fisico si può ricorrere ad altre tecnologie (addirittura si parlava di utilizzare l'alluminio in futuro per eliminare i colli di bottiglia dei transistor in silicio)...
silicio, alluminio, o altro che sia, una crescita esponenziale indefinita della densità dei dispositivi di commutazione implica che prima o poi la loro larghezza di linea debba scendere a una scala subatomica...
Quote
ma anche arrivando a un livello in cui non si può fare di meglio è comunque possibile inserire 2/3/4/n processori in contemporanea...
anche centinaia, o migliaia, con le tecnologie correnti, ma questo non influisce sulla densità dei dispositivi di commutazione: più processori mette in parallelo, più spazio occupano...
Quote
Non mi vengono in mente altre idee...
semplicemente che la legge di Moore verrà invalidata, prima o poi, dal raggiungimento dei limiti posti dalla fisica alla densità dell'integrazione. A meno che non si riescano a realizzare calcolatori quantistici, che in linea di principio potrebbero superarli (ma finora i calcolatori quantistici esistono solo sulla carta).


Title: Re:Quesiti a risposta aperta
Post by: R3m on 18-04-2011, 10:41:54
Ok, capito.


Per un algoritmo sequenziale in cui ogni passo dipende dall'esito dei precedenti, è più efficiente impiegare un array di processori o un processore a pipeline?

Sicuramente un array di processori, dato che è possibile eseguire più operazioni sui dati in contemporanea senza intaccare le successive istruzioni. Una pipeline sarebbe fortemente inefficiente dato che se ogni istruzione dipende dalla precedente il processore dovrebbe eseguirle in sequenza (come un qualunque altro processore) per non intaccare le dipendenze successive.


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 18-04-2011, 16:06:14
Quesito 17 : Indicare i più importanti principi di progetto RISC di architetture di CPU.
Secondi i principi di progettazione RISC:
   ⁃   Tutte le comuni istruzioni sono eseguite direttamente dall'hardware, e non sono interpretate mediante microistruzioni.
   ⁃   Si deve massimizzare la frequenza di emissione delle istruzioni. A questo scopo il parallelismo può giocare un ruolo molto importante nelle prestazioni.
   ⁃   Le istruzioni devono essere facilmente decodificabili. Infatti meno formati d'istruzioni ci sono, meglio è.
   ⁃   Soltanto le istruzioni LOAD e STORE dovrebbero far riferimento alla memoria dato che l'accesso ad essa può richiedere un tempo di accesso considerevole, a differenza della altre che dovrebbero operare esclusivamente sui registri.
   ⁃   Per il motivo sopra citato occorre prevedere molti registri, di modo che, una volta prelevata la parola, possa essere mantenuta nel registro fintanto sia necessario. Sarebbe sconveniente infatti non avere registri liberi, in quanto ciò richiederebbe scaricare in memoria tutti i valori dei registri per poi ricaricarli.

Quesito 19: Descrivere la principale differenza fra un array processor e un processore vettoriale.

Un array processor (un array di processori) consiste di un gran numero di processori identici che eseguono la stessa sequenza di istruzioni su insieme di diversi dati. Talvolta si utilizza il termine processore SIMD per indicare questo tipo di architettura. Un processore vettoriale è simile ad un array processor. Infatti esegue anch'esso sequenze di operazioni su coppie di dati, anche se, a differenza dagli array processor, tutte le operazioni di addizione sono eseguite da un unico sommatore strutturato a pipeline.


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 18-04-2011, 17:06:56
Descrivere brevemente il principio di località, che è alla base di tutti i sistemi di memoria cache.
località spaziale: quando in un intervallo di tempo il processore utilizza dati o istruzioni che probabilmente si trovano in zone di memoria che sono spazialmente vicine.

località temporale: tale principio afferma che se un programma utilizza una certa istruzione o dato è molto probabile che tale dato o istruzione venga riutilizzata di nuovo nel tempo.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 18-04-2011, 21:34:12

Per un algoritmo sequenziale in cui ogni passo dipende dall'esito dei precedenti, è più efficiente impiegare un array di processori o un processore a pipeline?

Sicuramente un array di processori, dato che è possibile eseguire più operazioni sui dati in contemporanea senza intaccare le successive istruzioni. Una pipeline sarebbe fortemente inefficiente dato che se ogni istruzione dipende dalla precedente il processore dovrebbe eseguirle in sequenza (come un qualunque altro processore) per non intaccare le dipendenze successive.
Vale esattamente il contrario: poiché, per ipotesi, ogni passo dell'algoritmo dipende dall'esito dei precedenti, il parallelismo di un array di processori non può essere sfruttato, perché richiederebbe l'esecuzione simultanea di più istruzioni, ciascuna delle quali deve invece attendere la fine dell'esecuzione della precedente. Il vantaggio della pipeline sta invece nel fatto che parallelizza l'esecuzione di istruzioni in fasi diverse del ciclo esecutivo: sebbene il completamento dell'esecuzione di ciascuna istruzione avvenga, anche in questo caso, dopo il completamento della precedente, le fasi di prelievo e decodifica possono aver luogo in parallelo con l'esecuzione di istruzioni precedenti in fasi diverse.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 18-04-2011, 21:39:51
Descrivere brevemente il principio di località, che è alla base di tutti i sistemi di memoria cache.
località spaziale: quando in un intervallo di tempo il processore utilizza dati o istruzioni che probabilmente si trovano in zone di memoria che sono spazialmente vicine.

località temporale: tale principio afferma che se un programma utilizza una certa istruzione o dato è molto probabile che tale dato o istruzione venga riutilizzata di nuovo nel tempo.
Il principio di località per le memorie cache pone in relazione i due aspetti di località, spaziale e temporale: asserisce che i riferimenti a memoria effettuati in un breve intervallo di tempo sono molto probabilmente relativi a locazioni di memoria vicine fra loro.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 19-04-2011, 10:12:23
La capacità dei dischi Blu-Ray supera di un fattore 4 quella dei DVD più capaci, ma potrebbero passare anni prima che i dischi Blu-Ray li sostituiscano sul mercato. Perché
Sicuramente per i costi, un disco Bluray costa molto di più anche rispetto a un DVD-Dual Layer, il gap aumenta se si considerano i dischi riscrivibili. Inoltre il costo relativo al lettore e masterizzatore e la ridotta velocità di scrittura (si parla di 10x nei migliori masterizzatori) non agevolano. Il discorso vale anche nel caso dei film prodotti su bluray, il costo si aggira sui 20 euro (dopo qualche mese dall'uscita), ma anche questi devo essere dotati di un ottimo lettore bluray (pena artefatti su schermo) e un pannello di buonissima qualità.

Spiegare perché nei RAID di livello 1 si può ottenere fino al doppio del throughput di lettura, rispetto ai RAID di livello 0, mentre il throughput di scrittura non è migliore.
Il RAID di livello 1 si basa sul mirroring, ovvero la copia esatta dei file su due o più dischi. In questo modo è possibile leggere da un disco mentre gli altri sono occupati. La scrittura è più lenta perchè bisogna scrivere su tutti i dischi in modo da mantenere le copie sempre uguali. Nel RAID 0 invece i dati vengono suddivisi equamente tra i dischi, in questo modo la scrittura deve essere fatta su un solo hard disk, mentre la lettura, in caso di disco occupato, risulterà più lenta.

Il RAID di livello 3 corregge errori singoli usando un disco di parità, il RAID di livello 2 ne impiega di più. Quale vantaggio ha questo rispetto all'altro, per la correzione di errori
Non sono sicuro di questa domanda, su wikipedia non si parla di più dischi nel raid 2. Riporto le parole

Il RAID-2 infatti, frammenta i dati in bit al posto di blocchi e sfruttando un codice di Hamming per la correzione d’errore che facilita la correzione di errori su singoli bit e di individuare doppi errori.
Un sistema RAID-3 dedica un disco alla parità del volume ed utilizza una frammentazione al livello di byte su tutti i drive.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 19-04-2011, 23:46:32
Sicuramente per i costi, un disco Bluray costa molto di più anche rispetto a un DVD-Dual Layer, [...], il costo si aggira sui 20 euro (dopo qualche mese dall'uscita), [...]
Attenzione a non confondere costi e prezzi.  I costi sono costi di produzione, il prezzo è il costo per l'utente; sul prezzo influiscono altri fattori (ad es. commerciali) oltre ai costi di produzione. Tuttavia, anche se i costi di produzione dei Blu-Ray si abbassassero, fino a rendeli competitivi con i DVD, ci vuole tempo per rinnovare sia il mercato dei dispositivi di lettura/scrittura (che si fa con quelli per i DVD, li si butta via?), sia i prodotti stessi già realizzati su DVD.
Quote
Il RAID di livello 1 si basa sul mirroring, ovvero la copia esatta dei file su due o più dischi. In questo modo è possibile leggere da un disco mentre gli altri sono occupati. La scrittura è più lenta perchè bisogna scrivere su tutti i dischi in modo da mantenere le copie sempre uguali.
Vero che il RAID 1 realizza il mirroring, ma l'argomento è decisamente diverso: proprio perché ogni stripe esiste in due copie su due dischi diversi, è possibile parallelizzarne la lettura su due dischi, dunque il througput in lettura raddoppia (nel caso migliore: se il dato da leggere è corto, non si può frammentarne la lettura in due operazioni parallele). La scrittura non è più lenta che nel caso del RAID 0, poiché la scrittura delle due copie avviene con due operazioni eseguite in parallelo, su due dischi diversi. Però non è neanche più veloce, mentre la lettura, come detto, può essere fino a due volte più veloce.
Quote
Il RAID-2 infatti, frammenta i dati in bit al posto di blocchi e sfruttando un codice di Hamming per la correzione d’errore che facilita la correzione di errori su singoli bit e di individuare doppi errori.
Più che "facilita" direi "permette". Il punto è proprio questo: il codice di Hamming impiegato nel RAID 2 corregge gli errori su singolo bit comunque, mentre il codice di parità impiegato nel RAID 3 permette la correzione solo quando è noto quale sia il bit affetto da errore, ad es. quando un disco va fuori servizio.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 28-04-2011, 11:12:30
La velocità di trasferimento dati fra CPU e memoria supera di ordini di grandezza quella delle componenti meccaniche di I/O. Come si evitano le inefficienze causabili da tale sbilancio

Dapprima, dato che il bus era univoco per tutte le periferiche, si utilizzò una tecnica definita furto di cicli..ovvero se nessun dispositivo IO richiede il bus, la CPU utilizza tutti i cicli del bus per accedere alla memoria. Invece, quando un dispositivo IO richiede il bus questo gli viene subito concesso, rallentando di fatto il calcolatore. Successivamente si pensò a rendere più veloce il bus, e infine, si realizzarono più bus . Per rendere il tutto retrocompatibile, il vecchio bus (ISA) aveva un ponte con il nuovo (PCI)...in questo modo la CPU potè utilizzare un bus ad alta velocità e i vecchi dispositivi poterono utilizzare il vecchio bus (con un ponte tra PCI e ISA)

Stimare quanta memoria occorrerebbe in una stampante laser a colori per una bitmap da 520 cm² a 600 dpi, con stampa a mezzitoni da 32 zone per pixel e per colore (1 inch = 2,54 cm, max 5 righe)

Stimare quanto tempo impiega il trasferimento del contenuto di un testo di 300 pagine in codice ASCII, dove ogni pagina abbia circa 4000 caratteri, su un modem da 56 Kbps (max 5 righe).

Stimare quanto tempo impiega il trasferimento del contenuto di un CD stereo, con 700 MB di registrazioni audio, senza compressione, su un modem da 56 Kbps (max 5 righe).

Si abbia un archivio di immagini fotografiche digitali da 16 milioni di pixel ca., a 3 byte/pixel. Quante se ne possono memorizzare in una memoria da 1 GB con fattore di compressione 5 (max 5 righe)?


La codifica ASCII pone 7 bit per carattere...quindi 7 bit * 4000 caratteri a pagina * 300 pagine di codice equivalgono a 8.400.000 bit...il modem trasferisce a 56 kb/s (che dovrebbero essere kilobit per sec) quindi dividendo per 56 si ottiene 150.000 sec, che diviso per 60 sarebbero 2500 minuti.

Un CD audio standard (usato in modo 1) ha 681.984.000 byte di spazio che "tradotti" in bit (quindi moltiplicando per 8) e dividendo per 56 (ovvero basta dividere per 7) dovrebbe risultare 97426000, qualcosa (avrò sbagliato sicuramente  |-O)


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 28-04-2011, 17:49:11
Dapprima, dato che il bus era univoco per tutte le periferiche, si utilizzò una tecnica definita furto di cicli..ovvero se nessun dispositivo IO richiede il bus, la CPU utilizza tutti i cicli del bus per accedere alla memoria. Invece, quando un dispositivo IO richiede il bus questo gli viene subito concesso, rallentando di fatto il calcolatore. [....]
La risposta è corretta, ma per completezza occorrerebbe aggiungere che questa tecnica è efficace quando la CPU ha più programmi concorrentemente in esecuzione, così che mentre il programma in attesa del completamento dell'I/O viene messo in stato di attesa, la CPU può essere utilizzata per l'esecuzione di altri programmi.
Quote
La codifica ASCII pone 7 bit per carattere...quindi 7 bit * 4000 caratteri a pagina * 300 pagine di codice equivalgono a 8.400.000 bit...il modem trasferisce a 56 kb/s (che dovrebbero essere kilobit per sec) quindi dividendo per 56 si ottiene 150.000 sec,
veramente no, deve dividere per 56000. Inoltre può assumere che si trasferiscano 8 bit per carattere: il codice ASCII ne definisce 7 come standard universale, ma dedica un altro bit ad estensioni locali.
Quote
Un CD audio standard (usato in modo 1) ha 681.984.000 byte di spazio che "tradotti" in bit (quindi moltiplicando per 8) e dividendo per 56 (ovvero basta dividere per 7) dovrebbe risultare 97426000, qualcosa (avrò sbagliato sicuramente
Stesso errore di prima, deve dividere per 56k: tolga tre zeri...


Title: Re:Quesiti a risposta aperta
Post by: R3m on 02-05-2011, 11:33:14
Scrivere due differenti traduzioni IJVM dell'istruzione Java: i = k+n+5 (max 15 righe).
Code:
BIPUSH 5
IADD
IADD
ISTORE i

Code:
IADD
BIPUSH 5
IADD
ISTORE i

Scrivere un'istruzione Java traducibile nella sequenza di istruzioni IJVM (separate da "," per motivi tipografici): ILOAD j , ILOAD n , ISUB , BIPUSH 2 , ISUB , DUP , IADD , ISTORE i (max 1 riga).
Code:
i = (j-n-2)+(j-n-2);


Scrivere una traduzione IJVM del codice Java: if (i == 0) n = 1; else n = n+i; (max 10 righe).

Code:
        ILOAD i
        IFEQ goto n1; ELSE goto N2;
n1    BIPUSH 1
        ISTORE n
n2    ILOAD n
        IADD
        ISTORE n


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 04-05-2011, 07:25:39
Scrivere due differenti traduzioni IJVM dell'istruzione Java: i = k+n+5 (max 15 righe).
Code:
BIPUSH 5
IADD
IADD
ISTORE i

Code:
IADD
BIPUSH 5
IADD
ISTORE i
Le altre risposte vanno bene, ma in queste manca, in entrambi i casi, una coppia di istruzioni all'inizio, per copiare le variabili locali k e n in cima allo stack.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 16-05-2011, 10:57:15
Scrivere due differenti traduzioni IJVM dell'istruzione Java: i = k+n+5 (max 15 righe).
Code:
BIPUSH 5
IADD
IADD
ISTORE i

Code:
IADD
BIPUSH 5
IADD
ISTORE i
Le altre risposte vanno bene, ma in queste manca, in entrambi i casi, una coppia di istruzioni all'inizio, per copiare le variabili locali k e n in cima allo stack.

Basta inserire in entrambi i codici
ILOAD k
ILOAD n



L'interpretazione dell'istruzione IJVM invokevirtual deve conoscere il numero dei parametri del metodo invocato. Perché (max 5 righe)?
Una volta effettuato correttamente l'invokevirtual, lo stack dovrà contenere appena sopra LV tutti i parametri che sono stati passati a invokevirtual...
La memoria necessaria a contenere questi parametri si conosce a priori leggendo il numero dei parametri del metodo (includendo anche objref)

Nel testo, la microistruzione invokevirtual16 "MDR = SP+H+1; wr", per la sovrascrittura di OBJREF, è erronea. Perché? Come va modificata (max 10 righe)?

Credo che il problema sia MDR = ....., è proprio il valore di MDR ad essere errato.
L'istruzione corretta dovrebbe essere SP = SP + H + 1;

Scrivere una sequenza di microistruzioni MAL che interpreti in Mic-1 l'istruzione JVM POPTWO, che rimuove due parole dalla cima dello stack (max 5 righe).
Code:
SP = SP - 1;
MAR = SP = SP - 1; rd;

TOS = MDR; goto Main1;


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 17-05-2011, 08:18:56
Una volta effettuato correttamente l'invokevirtual, lo stack dovrà contenere appena sopra LV tutti i parametri che sono stati passati a invokevirtual...
Sì, ma i parametri sono posti nello stack prima dell'esecuzione di invokevirtual. Perché, invece, proprio nella interpretazione di invokevirtual è necessario conoscerne il numero?
Quote
Credo che il problema sia MDR = ....., è proprio il valore di MDR ad essere errato.
L'istruzione corretta dovrebbe essere SP = SP + H + 1;
No, l'istruzione corretta è MDR = TOS + H + 1. Il problema è causato dal fatto che H (caricato con un valore da 16 bit nelle due istruzioni precedenti quella erronea) contiene non il numero di variabili locali bensì la dimensione (in parole) del blocco delle variabili locali.



Title: Re:Quesiti a risposta aperta
Post by: R3m on 17-05-2011, 10:03:35
Descrivere due criteri di progetto ISA utili ad ottenere un buon ISA (max 10 righe).
Innanzitutto, dato che L'ISA è l'interfaccia tra hardware e software, dovrebbe garantire un'esecuzione del codice "pulita", ovvero facile da implementare efficientemente per i progettisti hardware, e favorevole alla scrittura di codice di qualità per i progettisti software.
In secondo luogo, dovrebbe definire un insieme di istruzioni utilizzabili da tecnologie presenti e future, e quindi ricade nell'ambito della "buona progettazione".

Qual è la differenza fra disporre di cache di primo livello separate per istruzioni e dati, e avere spazi di indirizzi separati per essi (max 10 righe)?
Cache di primo livello separate permette di avere 2^32 byte di programma e 2^32 byte di dati usando indirizzi a 32 bit. Chiaramente, essendo dati e programma separati tra di loro, risulta impossibile sovrascrivere un programma accidentalmente.  Nel secondo caso, invece, c'è solo uno spazio per gli indirizzi, ma cache differenti contengono porzioni differenti di indirizzi.

In quale/i modalità operative del Pentium 4 (reale, virtuale 8086, protetta) si può ulteriormente distinguere tra modalità kernel e utente? In che consiste la differenza tra le due (max 15 righe)?
La modalità protetta. In realtà i livelli di privilegi sono 4, ma le modalità kernel/utente sono le più utilizzate. In particolare, il livello 0, o kernel, ha accesso completo alla machina. Invece, il livello 3, o utente, ha un accesso limitato, sono bloccate tutte le istruzioni critiche e i registri sono controllati in modo da garantire sempre il funzionamento del sistema.

Minimizzare la lunghezza delle istruzioni può avere effetti opposti sulla velocità del processore; indicare un motivo per cui questa può aumentare ed uno per cui può diminuire (max 10 righe).

Sicuramente, istruzioni più corte portano il processore ad eseguirle più rapidamente rispetto a delle istruzioni lunghe. Tale beneficio si sente anche a livello di bus e di cache, infatti in questi anni di sviluppo dell'informatica i processori si sono evoluti molto più velocemente di bus e cache, e diminuire il numero di dati trasferiti e di dati letti dalla cache gioverebbe non poco. Ovviamente, bisogna valutare bene i problemi che si vengono a creare in fase di decodifica ed esecuzione delle istruzioni. Tali fasi potrebbero risultare più lente a causa della dimensione delle istruzioni.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 18-05-2011, 07:20:55
Cache di primo livello separate permette di avere 2^32 byte di programma e 2^32 byte di dati usando indirizzi a 32 bit.
Questo è il caso degli spazi di indirizzi separati...
Quote
 Nel secondo caso, invece, c'è solo uno spazio per gli indirizzi, ma cache differenti contengono porzioni differenti di indirizzi.
...infatti.
Quote
La modalità protetta. [...]
OK, ma anche nella modalità virtuale 8086 è possibile distinguere fra il modo utente, in cui viene eseguito il programma che opera in tale modalità, e il modo kernel, in cui viene eseguito il codice del sistema operativo: se, ad es., il programma genera una condizione di errore, che nella modalità reale porterebbe all'arresto del sistema, in quella virtuale ciò non porta all'arresto del sistema, bensì alla terminazione (con segnalazione di errore) del programma detto e al trasferimento del controllo al sistema operativo.
Quote
Sicuramente, istruzioni più corte portano il processore ad eseguirle più rapidamente rispetto a delle istruzioni lunghe.
La domanda qui richiede di indicare il motivo. La successiva spiegazione è un po' troppo generica...
Quote
Tale beneficio si sente anche a livello di bus e di cache, infatti in questi anni di sviluppo dell'informatica i processori si sono evoluti molto più velocemente di bus e cache, e diminuire il numero di dati trasferiti e di dati letti dalla cache gioverebbe non poco.
... occorrerebbe spiegare quale aspetto della differenza di evoluzione costituisce il motivo richiesto. Forse qui lei sottintende che tale aspetto sia la velocità dei dispositivi in questione, ovvero la durata dei rispettivi cicli.
Quote
Ovviamente, bisogna valutare bene i problemi che si vengono a creare in fase di decodifica ed esecuzione delle istruzioni. Tali fasi potrebbero risultare più lente a causa della dimensione delle istruzioni.
Intende di una maggiore o di una minore dimensione delle istruzioni? E perché questa rende più lente le fasi in questione? (Ovvero: specificare il motivo).


Title: Re:Quesiti a risposta aperta
Post by: R3m on 19-05-2011, 11:24:33
Quote
Cache di primo livello separate permette di avere 2^32 byte di programma e 2^32 byte di dati usando indirizzi a 32 bit.
Quote
Questo è il caso degli spazi di indirizzi separati...

Nel secondo caso, invece, c'è solo uno spazio per gli indirizzi, ma cache differenti contengono porzioni differenti di indirizzi.
Quote
...infatti.

La risposta va bene quindi?

Quote
Quote
La modalità protetta. [...]
OK, ma anche nella modalità virtuale 8086 è possibile distinguere fra il modo utente, in cui viene eseguito il programma che opera in tale modalità, e il modo kernel, in cui viene eseguito il codice del sistema operativo: se, ad es., il programma genera una condizione di errore, che nella modalità reale porterebbe all'arresto del sistema, in quella virtuale ciò non porta all'arresto del sistema, bensì alla terminazione (con segnalazione di errore) del programma detto e al trasferimento del controllo al sistema operativo.

Andavano bene sia protetta che virtuale?

Quote
Quote
Ovviamente, bisogna valutare bene i problemi che si vengono a creare in fase di decodifica ed esecuzione delle istruzioni. Tali fasi potrebbero risultare più lente a causa della dimensione delle istruzioni.
Intende di una maggiore o di una minore dimensione delle istruzioni? E perché questa rende più lente le fasi in questione? (Ovvero: specificare il motivo).

Una maggiore dimensione rallenterebbe la fase di decodifica. Per fare un esempio, se abbiamo 32 istruzioni in totale nell'architettura, basterebbe utilizzare un registro a 32 bit settando a 1 il bit n-esimo per decodificare la n-esima istruzione. Per risparmiare memoria, invece, utilizzando un registro più piccolo (es. 16 bit o anche meno) bisogna avere delle particolari configurazioni, che comportano un maggiore dispendio di tempo in fase di decodifica.

Quote
Quote
Tale beneficio si sente anche a livello di bus e di cache, infatti in questi anni di sviluppo dell'informatica i processori si sono evoluti molto più velocemente di bus e cache, e diminuire il numero di dati trasferiti e di dati letti dalla cache gioverebbe non poco.
... occorrerebbe spiegare quale aspetto della differenza di evoluzione costituisce il motivo richiesto. Forse qui lei sottintende che tale aspetto sia la velocità dei dispositivi in questione, ovvero la durata dei rispettivi cicli.

Si intendevo proprio la velocità dei dispositivi.



Quesito 18 : Contrariamente all'esempio (erroneo) nel testo, qui riprodotto, con l'estensione a tre bus di Mic-1 non si riduce il numero di cicli per l'esecuzione di ILOAD. Perché (max 6 righe)?
iload1  MAR = MBRU + LV; rd
iload2  MAR = SP = SP + 1
iload3  PC = PC + 1; fetch; wr
iload4  TOS = MDR
iload5  PC = PC + 1; fetch; goto (MBR)


Le prime righe di codice originale di iload sono

H = LV
MAR = MBRU + H; rd

L'errata corrige del testo però dice "Copia LV in H; alla fine del ciclo MBR contiene l'indice"

Ciò significa che MBR conterrà il valore corretto solo alla fine del primo ciclo. Chiaramente nella versione a tre bus si elimina il Main1 (che comunque viene eseguito nell'iload5), però non può essere eliminato iload1 perchè il valora di MBR non è ancora quello che ci si aspetta (bisognerebbe aggiungere un iload1 senza nessuno istruzione e un iload2 con MAR = MBRU + LV; rd)


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 20-05-2011, 20:06:25
La risposta va bene quindi?
No (quando va bene non reagisco): per essere corretta deve iniziare con "Spazi di indirizzi separati permettono..."
Quote
Andavano bene sia protetta che virtuale?
Sì, specificando in ciascun caso la differenza. In questo caso la risposta era corretta ma non del tutto completa.
Quote
Una maggiore dimensione rallenterebbe la fase di decodifica. Per fare un esempio, se abbiamo 32 istruzioni in totale nell'architettura, basterebbe utilizzare un registro a 32 bit settando a 1 il bit n-esimo per decodificare la n-esima istruzione. Per risparmiare memoria, invece, utilizzando un registro più piccolo (es. 16 bit o anche meno) bisogna avere delle particolari configurazioni, che comportano un maggiore dispendio di tempo in fase di decodifica.
Non mi è chiaro. Se ben capisco, lei prima considera l'uso di un decodificatore (con 5 bit in input, suppongo, codificanti il codice operativo) per attivare il circuito (o il microcodice) dei 32 corrispondenti alle 32 istruzioni (ovvero, codici operativi distinti). Il "risparmio di memoria" che considera nel secondo caso non riflette però una riduzione della dimensione dell'istruzione, perché lì il codice operativo sempre 5 bit richiede, no? Ora, una minore dimensione dell'istruzione certamente ne rende più veloce il prelievo, ma può invece rallentarne l'esecuzione. L'esempio argomentato nel testo riguarda l'uso di un decodificatore per l'abilitazione del registro da connettere al bus B. Poiché non più di un registro è da connettere al bus, tale uso è lecito, e si ottiene una dimensione minore dell'istruzione codificando la selezione del registro nel campo B dell'istruzione: questo richiede dunque ⌈log2n⌉ bit, dove n è il numero di registri collegabili al bus B. Tale risparmio di spazio nella dimensione dell'istruzione si paga con una esecuzione più lenta, per il ritardo introdotto dal decodificatore del campo B. Se invece si dedicano n bit al campo B, la selezione del registro da abilitare può effettuarsi per mappatura diretta, senza circuito decodificatore, dunque in un tempo minore, ma al prezzo di una maggiore dimensione dell'istruzione.


Title: Re:Quesiti a risposta aperta
Post by: immatricola on 21-05-2011, 12:59:11
non riesco a rispondere a queste domande:
.il rapporto tra le prestazioni dell'ibm 360 model 30 era di 50 volte,mentre il ciclo di clock era 5 volte..perche?

il model 75 era piu grande è piu veloce,abbiamo piu memoria..........

-un calcolarore ha un bus a 220 mhz,32 bit per un ciclo e un disco ultra4-SCSI che lo usa a 160 mb/s.la cpu ha un ciclo esecutivo di 1 ns in che misura percentulae lo rallenta?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 21-05-2011, 15:47:46
il model 75 era piu grande è piu veloce,abbiamo piu memoria..........
Infatti le prestazioni sono migliori nel model 75 rispetto al model 30, ma non di un fattore 5 bensì 50. Cos'altro contribuisce a migliorare le prestazioni, oltre a un ciclo più breve?
Quote
-un calcolarore ha un bus a 220 mhz,32 bit per un ciclo e un disco ultra4-SCSI che lo usa a 160 mb/s.la cpu ha un ciclo esecutivo di 1 ns in che misura percentulae lo rallenta?
Premesso che, secondo il testo dell'esercizio, il bus è a 200 MHz e il disco lo usa a 160 MB/s (qui la differenza fra maiuscole e minuscole è significativa), faccia due conti, cominciando con lo stabilire quanti cicli di bus al secondo può usare la CPU alla massima velocità e quanti (in un secondo) gliene ruba il disco per trasferire 160 MB.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 24-05-2011, 11:23:25
Spiegare brevemente perché l'architettura Harvard sia soprattutto vantaggiosa nelle CPU con pipeline (max 10 righe)

Credo sia un problema relativo alla memoria cache, e alla memoria in generale.
Nell'architettura Harvard dati e programma giacciono su due memorie differenti, a livello di cache, mentre a livello di memoria principale, si adotta l'architettura di Von Neumann. Utilizzando una pipeline è possibile accedere in parallelo a memoria dati e programma a livello di cache (volendo anche a livello di memoria principale).


Title: Re:Quesiti a risposta aperta
Post by: immatricola on 24-05-2011, 17:44:24
.Il RAID livello 3 corregge errori singoli usando un disco di parità,il raid di livello 2 ne impiega di piu.Quale vantaggio ha questo rispetto all’altro,per la correzione di errori?


Il bit singolo di parità nel livello 3,trova l’errore,ma non lo corregge nel caso in cui abbiamo un errore casuale,cio non succede al livello 2 dove l’errore viene corretto comunque.
basta come risposta...


Title: Re:Quesiti a risposta aperta
Post by: immatricola on 24-05-2011, 19:08:26
come si calcola il fattore di compressione per memorizzare 133 minuti di video............


Title: Re:Quesiti a risposta aperta
Post by: fabio_bm on 25-05-2011, 09:31:31
Ha significato che un compilatore generi output per il livello di microarchitettura invece che per il livello ISA? Si analizzino pro e contro di tale ipotesi (max 10 righe).

In teoria potremmo generare output direttamente per il livello di microarchitettura, però avremmo bisogno di un hardware dedicato ad uno specifico linguaggio (C, Java, ecc), e quindi perderemmo in flessibilità del calcolatore, e inoltre le istruzioni andrebbero interpretate, perdendo il vantaggio dovuto alla compilazione.


Title: Re:Quesiti a risposta aperta
Post by: fabio_bm on 25-05-2011, 10:39:26
Il rapporto tra le prestazioni dell'IBM 360 model 75 e model 30 era di 50 volte, mentre il ciclo di clock era solo 5 volte più veloce. Come si spiega questa differenza? (max 5 righe)

I due modelli di calcolatori non differivano solamente dal ciclo di clock, ma anche dalla quantità di memoria, numero di byte prelevati per ciclo di clock e dal massimo numero di canali per i dati. Queste differenze, messe assieme, permisero al model 75 di aumentare le prestazioni di 50x rispetto al modello di base, il model 30.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-05-2011, 14:43:47
Il bit singolo di parità nel livello 3,trova l’errore,
OK, ma è più appropriato dire che "Il bit di parità nel livello 3 trova l’errore singolo".


Title: Re:Quesiti a risposta aperta
Post by: R3m on 28-05-2011, 15:57:36
Qual è la differenza fra istruzioni e pseudoistruzioni di un assemblatore (max 5 righe)?

Con il termine istruzionesi intende il comando impartito ad un esecutore utilizzando un linguaggio ad esso comprensibile. Mentre il termine microistruzione impartisce ordini all'assemblatore, ad esempio chiedendo di allocare una certa quantità di memoria, oppure andare a una certa pagina del listato.

Individuare qualche proprietà sintattica di un linguaggio assemblativo che permetta di usare come etichette anche simboli identici a codici operativi simbolici (max 5 righe)

L'utilizzo di un carattere testuale conosciuto a propri che indentifichi la fine di un'etichetta, nel P4 ad esempio viene utilizzato il ':', così è possibile chiamare un'etichetta  MOV: MOV identificando il nome dell'etichetta poichè contiene i :, e il codice operativo che non li contiene.

È possibile usare un registro come parametro attuale in una chiamata di macro? E una costante? Motivare le risposte (max 5 righe)
L'assemblatore, ogni volta che trova una chiamata di macro, salva, se non presente, il nome e la sua espansione in una tabella della definizioni di macro, che non ha nulla in comune con la memoria che contiene i registri o l'area dedicata alle costanti. La difficoltà stà però nel capire se una certa linea di codice viene interpretata correttamente come voluto dal programmatore (distinguendo macro, registro e costante). Tecnicamente, se una stringa di codice contiene alla sua destra alcuni parametri, possiamo essere sicuri che sia una chiamata ad una macro (es. "SWAP A B"), mentre se la stringa di codice è preceduta da un'istruzione potrebbe essere utilizzata una costante (es. "MOV MACRO, B").

Definire una macro con 3 parametri A, B, C, da attualizzarsi con nomi di locazioni di memoria, che ne permuti circolarmente i contenuti usando una macro interna SWAP per scambiarne due (max 15 righe).
CPERM   MACRO
              SWAP A,B
              SWAP B,C
              ENDM

Confrontare almeno tre diverse modalità d'indirizzamento in termini dei loro effetti sulla lunghezza dell'istruzione e sul suo tempo di esecuzione (max 15 righe).
Immediato, diretto e a registro.
A livello di lunghezza, quello immediato vince poichè viene utilizzato nel campo relativo all'indirizzo, l'operando stesso (una costante) che è chiaramente più piccolo rispetto ad un intero indirizzo di una locazione di memoria o di un registro stesso.
A livello di velocità, l'indirizzamente immediato recupera l'operando in fase di fetch, ed è subito disponibile.

Perché i controllori di I/O inviano il vettore di interrupt sul bus? Non potrebbero invece memorizzare questa informazione in una tabella di memoria (max 5 righe)?
Credo che sia un discorso legato a CPU->Bus->Dispositivo. La Cpu invia l'acknowledgment sul bus, che arriva al dispositivo, dopodichè sempre su quel bus viene inviato dal dispositivo un vettore di interrupt, che viene prelevato dalla CPU. Credo sia una questione di velocità (il dispositivo lo salva in una tabella...ma poi deve dire alla CPU dove si trova questa tabella, e deve sempre usare il bus...e se la memoria fosse tutta occupata?)

Perché le routine di servizio degli interrupt sono associate a priorità, mentre le procedure normali non hanno priorità (max 5 righe)?
Non ho capito cosa si intende per procedure normali...è forse un qualunque programma, o una trap?

Perché si salva anche il registro PSW sullo stack prima di trasferire il controllo a una routine di servizio di interrupt (max 5 righe)?
Indica il livello di priorità, il gestore degli interrupt poi deciderà se interrompere l'interrupt in corso a favore di quello "nuovo", oppure se la proprità è minore porlo in uno stato di attesa.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 28-05-2011, 19:20:52
Mentre il termine microistruzione
pseudoistruzione
Quote
andare a una certa pagina del listato.
non mi risulta che esistano pseudoistruzioni del genere, semmai "generare un'interruzione di pagina nel listato". Il listato è prodotto dal macroassemblatore.
Quote
a propri
a priori
Quote
L'assemblatore, ogni volta che trova una chiamata di macro, salva, se non presente, il nome e la sua espansione in una tabella della definizioni di macro,
No, l'assemblatore salva nome e corpo della macro, rispettivamente nelle tabelle dei simboli e delle definizioni di macro, quando incontra una pseudoistruzione MACRO, mentre quando trova una chiamata di macro la rimpiazza (nell'output della prima passata) con la sua espansione, utilizzando la definizione precedentemente salvata.
Quote
Tecnicamente, se una stringa di codice contiene alla sua destra alcuni parametri, possiamo essere sicuri che sia una chiamata ad una macro.
Le istruzioni seguono lo stesso formato, cioè operandi di una istruzione e parametri di una chiamata di macro hanno un aspetto sintatticamente simile. La distinzione è possibile semplicemente in base al fatto che sia i codici operativi simbolici sia i nomi delle macro sono simboli memorizzati nella tabella dei simboli, i cui contenuti (codici binari per i codici operativi simbolici, puntatori alla tabella delle definizioni di macro per i nomi di macro) ne distinguono il tipo. La risposta alla domanda è comunque molto semplice: sì, qualsiasi argomento è accettabile come parametro di una macro, perché l'assemblatore ne effettua l'espansione  mediante una mera sostituzione testuale in prima passata, senza generare codice oggetto.
Quote
[...] usando una macro interna SWAP [...]
CPERM   MACRO
              SWAP A,B
              SWAP B,C
              ENDM
manca la definizione della macro interna
Quote
A livello di lunghezza, quello immediato vince poichè viene utilizzato nel campo relativo all'indirizzo, l'operando stesso (una costante) che è chiaramente più piccolo rispetto ad un intero indirizzo di una locazione di memoria o di un registro stesso.
No: una costante può benissimo occupare tanti bit quanti ne occupa un indirizzo (ad es. 32), e quasi sempre più di quanti ne occorrano per specificare un registro (ad es., 3 bit se i registri sono otto). Perché il confronto a tre sia completo, non basta indicare quale dei tre vince rispetto a ciascuno dei due criteri, ma occorre indicare l'ordine relativo delle tre modalità, rispetto a ciascuno di essi.
Quote
(il dispositivo lo salva in una tabella...ma poi deve dire alla CPU dove si trova questa tabella, e deve sempre usare il bus...e se la memoria fosse tutta occupata?)
più che di velocità è una questione di comunicazione: la CPU deve sapere quale dispositivo ha generato l'interrupt per potergli associare la routine di servizio appropriata; una comunicazione di questa informazione mediata dalla memoria sarebbe una complicazione inutile, poiché il dispositivo dovrebbe sapere in quale locazione di memoria andare a scrivere il vettore di interrupt, e non è detto che questa possa essere una locazione prefissata: è più semplice comunicare il vetttore di interrupt direttamente sul bus.
Quote
Non ho capito cosa si intende per procedure normali...è forse un qualunque programma, o una trap?
Una definizione di procedura ha nome, parametri (formali) e corpo; è eseguibile mediante invocazione, con parametri attuali in luogo di quelli formali; la sua esecuzione può restituire un valore (ad es. in cima allo stack) e fa riprendere il flusso di esecuzione all'istruzione successiva a quella di invocazione. Nella programmazione OO, le procedure sono note come "metodi".
Quote
Indica il livello di priorità
Questo è un buon motivo, ma non l'unico. Nella gestione dell'interrupt il contenuto della PSW può cambiare anche in altri aspetti, ad es. la modalità operativa (kernel o utente); dopo che l'interrupt è stato servito, è in ogni caso necessario ripristinare il contenuto della PSW al valore che essa aveva al momento dell'interruzione. In breve, la PSW va salvata (sullo stack) perché la gestione dell'interrupt possa essere trasparente.


Title: Re:Quesiti a risposta aperta
Post by: AleX on 30-05-2011, 15:13:52
Il rapporto tra le prestazioni dell'IBM 360 model 75 e model 30 era di 50 volte, mentre il ciclo di clock era solo 5 volte più veloce. Come si spiega questa differenza? (max 5 righe)

perché oltre ad avere 5 volte il ciclo di clock più veloce, ha anche più byte prelevati per ciclo oltre ad avere più canali per i dati.In più ha ance molta più memoria e permette di memorizzare più programmi oltre alla multiprogrammazione.


Title: Re:Quesiti a risposta aperta
Post by: AleX on 30-05-2011, 15:38:03
Anche se questa domanda è già stata fatta volevo porvi le mie tre risposte...

–Si indichino le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione del software moderno, e se ne descrivano brevemente i contributi più rilevanti (max 10 righe).

Gary Kildall: che ha scritto il primo sistema operativo (CP/M) su floppy disk, con file system e istruzioni da scrivere tramite tastiera per la shell;
Steve Jobs che con l’evoluzione di Apple Lisa cioè Macintosh adottò per primo le GUI( interfaccia grafica);
Microsoft prima con progettando MS-DOS(in collaborazione con l’IBM) e poi successivamente da sola Windows;


Title: Re:Quesiti a risposta aperta
Post by: R3m on 31-05-2011, 09:42:51
Definire una macro con 3 parametri A, B, C, da attualizzarsi con nomi di locazioni di memoria, che ne permuti circolarmente i contenuti usando una macro interna SWAP per scambiarne due (max 15 righe).

CPERM   MACRO
              SWAP A,B
              SWAP B,C
              ENDM


SWAP MACRO
             MOV EAX,P
             MOV EBX,Q
             MOV Q,EAX
             MOV P,EBX
ENDM

Quote
Quote
andare a una certa pagina del listato.
non mi risulta che esistano pseudoistruzioni del genere, semmai "generare un'interruzione di pagina nel listato". Il listato è prodotto dal macroassemblatore.
Pagina 498, Capitolo 7.1.4
Un linguaggio assemblativo, oltre a specificare quali istruzioni macchina ...... , per richiedere, per esempio, di allocare una certa quantità di memoria oppure per passare a una nuova pagina del listato.

Potrebbe essere un errore tecnico del testo, magari valevole di bonus?

Qual è la differenza (se c'è) tra il contatore di locazioni delle istruzioni (ILC) e il contatore d'istruzioni (PC)? Entrambi tengono traccia della successiva istruzione in un programma (max 5 righe).
La variabile ILC è contenuta come campo nella tabella dei simboli durante la prima passata e contiene l'indirizzo che l'istruzione che sta assemblando avrà a tempo di esecuzione. Esiste quindi una ILC per ogni istruzione. Il PC invece è un registro che contiene, di volta in volta, la successiva istruzione da eseguire (si usa quindi in runtime).

Confrontare gli algoritmi di ricerca dicotomica e mediante codifica hash rispetto alla velocità delle operazioni di ricerca e di modifica della tabella (inserimenti e rimozioni) (max 10 righe).
L'operazione di inserimento, utilizzando la ricerca dicotomica prevede l'inserimento in un array ponendo attenzione al fatto che deve essere rispettato l'ordine (crescente o decrescente) delle informazioni ottenute (altrimenti poi non è possibile cercare gli elementi). Con l'hashing, invece, basta allocare nel bucket corrispondente la nuova informazione, stando attenti a settare per bene la lista concatenata (quindi il puntatore next).
La rimozione è pressochè la stessa. La dicotomica deve "tappare" il buco che si viene a creare quando si rimuove l'elemento (se il valore viene reso nullo, deve traslare tutti gli elementi di indice maggiore verso sinistra). Con l'hashing, invece, basta cercare l'elemento da eliminare e togliere tutti i riferimenti a esso nella tabella concatenata. Dopodichè si può eliminare l'elemento dalla memoria.

I programmi spesso si collegano a più librerie dinamiche. Non sarebbe più efficiente inserirne tutte le procedure in un'unica libreria e collegarla al programma (max 10 righe)?
Per una questione di semplicità, no. Solitamente le librerie sono suddivise per file mediante le loro funzionalità (directx, suddivise in 9,10 e 11, opengl, ecc...). A livello di efficienza si avrebbe una sola (ed enorme) libreria che in fase di runtime del programma deve essere allocata in memoria, e questo richiederebbe del tempo (anche maggiore di quello che si risparmia)


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 31-05-2011, 15:49:52
Quesito 20: Il linker risolve il problema della rilocazione e quello dei riferimenti esterni. Spiegare in cosa consistono e in che senso la soluzione del secondo dipende da quella del primo (max 10 righe).

Compito del linker è quello di risolvere il problema della rilevazione e quello dei riferimenti esterni.
I moduli oggetto creati dall'assemblatore hanno spazi degli indirizzi separati. Questo problema è noto come problema della rilevazione. Per risolverlo il linker permette di collegare più moduli oggetto, assemblati separatamente, in modo da costruire un unico modulo eseguibile finale.
Per far ciò il linker deve:
- Costruisce una tabella contenente la lunghezza dei moduli oggetto
- In base alla tabella, assegna un indirizzo di caricamento ad ogni modulo oggetto
- Aggiorna tutti gli indirizzi rilevabili
- Aggiorna i riferimenti a procedure esterne


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 31-05-2011, 18:31:14
Code:
Si indichino le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione del software moderno, e se ne descrivano brevemente i contributi più rilevanti (max 10 righe).
.
Io penso che siano Steve Jobs, perchè nel primo macintosh aveva utilizzato la gui(graphical user interface);Ward Cunningham, creatore del concetto wiki, che è un sito web (o comunque una collezione di documenti ipertestuali) che viene aggiornato dai suoi utilizzatori e i cui contenuti sono sviluppati in collaborazione da tutti coloro che vi hanno accesso;infine Ken Thompson e Dennis Ritchie creatori del sistema operativo unix con innovazioni quali il multitasking, multiutente e scritto in linguaggio c rendendolo un sistema operativo portabile.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 31-05-2011, 23:10:42
Microsoft
non è una persona.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 31-05-2011, 23:14:14
permette di memorizzare più programmi oltre alla multiprogrammazione.
"oltre" o "grazie"? In ogni caso, quest'ultima osservazione mi sembra irrilevante a spiegare l'aumento di prestazione in velocità.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 31-05-2011, 23:53:31
CPERM   MACRO
              SWAP A,B
              SWAP B,C
              ENDM


SWAP MACRO
             MOV EAX,P
             MOV EBX,Q
             MOV Q,EAX
             MOV P,EBX
ENDM
Posta così, la macro SWAP non solo non è interna alla CPERM ma non è nemmeno espandibile in prima passata, perché ha delle chiamate che ne precedono la definizione. Occorre nidificare le definizioni:

CPERM   MACRO
    SWAP    MACRO
            ...
            ENDM
        SWAP A, B
        ...
        ENDM

Quote
Pagina 498, Capitolo 7.1.4
Un linguaggio assemblativo, oltre a specificare quali istruzioni macchina ...... , per richiedere, per esempio, di allocare una certa quantità di memoria oppure per passare a una nuova pagina del listato.

Potrebbe essere un errore tecnico del testo, magari valevole di bonus?
No, nessun errore, se tiene in conto che il testo specifica che il listato è prodotto dall'assemblatore (in seconda passata). Dunque "passare a una nuova pagina del listato" implica che si tratta di una nuova pagina nella generazione del listato, ovvero della generazione di un'interruzione di pagina nel listato prodotto fino a quel punto. Riconoscerà che
Quote
andare a una certa pagina del listato.
ha un significato diverso, generalmente estraneo alle funzionalità dell'assemblatore.
Quote
Confrontare gli algoritmi di ricerca dicotomica e mediante codifica hash rispetto alla velocità delle operazioni di ricerca e di modifica della tabella (inserimenti e rimozioni) (max 10 righe).
Manca il confronto rispetto alla velocità dell'operazione di ricerca. Riguardo alle operazioni di modifica, manca l'esito del confronto (anche se sembra intuibile):
Quote
Con l'hashing, invece, basta allocare nel bucket corrispondente [...]
Dunque l'inserimento con l'hashing è più veloce? La conclusione va esplicitata, altrimenti la domanda resta senza risposta.
Quote
basta cercare l'elemento da eliminare e togliere tutti i riferimenti a esso
Vale anche qui l'osservazione precedente; inoltre, detta così, non è una sintesi corretta, perché i riferimenti ad esso non sono da "togliere" bensì da "modificare" opportunamente.


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 31-05-2011, 23:58:07
Microsoft
non è una persona.
LOL  :[Emoticon] Asd:


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 01-06-2011, 00:04:57
il problema della rilevazione
--> "rilocazione". Questa correzione va apportata consistentemente a tutta la risposta (dunque "rilocabili" invece di "rilevabili"). Va inoltre resa esplicita la risposta alla seconda parte della domanda: il passo
Quote
- Aggiorna i riferimenti a procedure esterne
non a caso è l'ultimo...


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 01-06-2011, 00:08:56
il problema della rilevazione
--> "rilocazione". Questa correzione va apportata consistentemente a tutta la risposta (dunque "rilocabili" invece di "rilevabili"). Va inoltre resa esplicita la risposta alla seconda parte della domanda: il passo
Quote
- Aggiorna i riferimenti a procedure esterne
non a caso è l'ultimo...

Si, nel mio editor di testo era attivo il controllo ortografia e ha sostituito "rilevabili" a "rilocabili".

Riguardo a "in che senso la soluzione del secondo dipende da quella del primo?" ci sto pensando  :boh


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 01-06-2011, 00:17:14
Ken Thompson e Dennis Ritchie creatori del sistema operativo unix con innovazioni quali il multitasking, multiutente e scritto in linguaggio c rendendolo un sistema operativo portabile.
Per la verità, multitasking e multiutenza non sono state inventate da Thompson e Ritchie (c'erano già nei sistemi operativi delle macchine IBM 360 e 370, dove la virtualizzazione della memoria viene generalizzata a quella dell'intera macchina). Thompson e Ritchie hanno però altri meriti: hanno inventato lo stesso linguaggio C, quale evoluzione del precedente linguaggio B, a sua volta evoluzione del BCPL (http://it.wikipedia.org/wiki/BCPL) di Martin Richards (http://it.wikipedia.org/wiki/Martin_Richards) (1966) - si chiesero se il successore di C si sarebbe chiamato "D" o "P" - e lo hanno implementato in larga misura nello stesso linguaggio C (tranne un nucleo minimo, naturalmente), rendendone quindi altamente portabile il compilatore. Inoltre, hanno inventato la shell di Unix, con una struttura da linguaggio di programmazione che costituì un'autentica rivoluzione rispetto ai precedenti linguaggi di controllo dei job, usati per la mera gestione dei programmi batch.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 01-06-2011, 16:48:27
Code:
Un calcolatore ha un bus a 200 MHz, 32 bit per ciclo, e un disco Ultra4-SCSI che lo usa a 160 MB/s. La CPU ha un ciclo esecutivo di 1 ns. In che misura percentuale il disco la rallenta (max 5 righe)

 Io ho pensato che siccome lo scsi utilizza un bus di 160 MHz/s e il bus del calcolatore è di 200 il disco scsi rallenta la cpu di 40 MHz/s pari al 33% della sua velocità disponibile.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 01-06-2011, 17:35:12
Code:
La capacità dei dischi Blu-Ray supera di un fattore 4 quella dei DVD più capaci, ma potrebbero passare anni prima che i dischi Blu-Ray li sostituiscano sul mercato. Perché (max 5 righe)?
Perché il costo dei supporti e dei masterizzatori blu ray è maggiore di quelli dei dvd.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 02-06-2011, 08:32:45
Code:
Un calcolatore ha un bus a 200 MHz, 32 bit per ciclo, e un disco Ultra4-SCSI che lo usa a 160 MB/s. La CPU ha un ciclo esecutivo di 1 ns. In che misura percentuale il disco la rallenta (max 5 righe)

 Io ho pensato che siccome lo scsi utilizza un bus di 160 MHz/s e il bus del calcolatore è di 200 il disco scsi rallenta la cpu di 40 MHz/s pari al 33% della sua velocità disponibile.
Qui c'è un conto giusto ma non esplicitato (40 = 160/4, dove 4 è il n. di byte per ciclo, 4 = 32/8), e un conto sbagliato: 40 è il 20% di 200, non il 33%.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 02-06-2011, 08:38:52
Perché il costo dei supporti e dei masterizzatori blu ray è maggiore di quelli dei dvd.
non solo per questo, v. precedente commento a un'altra risposta allo stesso quesito:
http://forum.sdai.unict.it/index.php?topic=12253.msg75827#msg75827


Title: Re:Quesiti a risposta aperta
Post by: immatricola on 02-06-2011, 18:38:05
32. È possibile implementare le funzioni NOT, AND, OR rispettivamente mediante una, due e tre porte NAND. Quali leggi dell'algebra di Boole giustificano ciascuna delle tre costruzioni (max 5 righe)?

Molte volte si implementano le funzioni not,and,or tramite le porte sia nand e nor.Queste porte vengono chiamate funzionalmente complete,proprio perchè le funzioni booleane si possono calcolare tramite esse.

è questa la risposta..???


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 03-06-2011, 12:28:06
32. È possibile implementare le funzioni NOT, AND, OR rispettivamente mediante una, due e tre porte NAND. Quali leggi dell'algebra di Boole giustificano ciascuna delle tre costruzioni (max 5 righe)?

Molte volte si implementano le funzioni not,and,or tramite le porte sia nand e nor.Queste porte vengono chiamate funzionalmente complete,proprio perchè le funzioni booleane si possono calcolare tramite esse.

è questa la risposta..???

No. Premesso che l'implementazione con le porte NOR è irrilevante alla domanda posta, la completezza funzionale di NAND è implicita nella stessa domanda (se NAND basta ad implementare tutti gli operatori booleani, è ovvio che basti ad implementare tutte le funzioni booleane). Per trovare la risposta giusta, occorre considerare come, cioè con quale circuito, si implementa ciascuno dei tre operatori booleani mediante porte NAND, e determinare le corrispondenti leggi dell'algebra di Boole che giustificano l'equivalenza del circuito in questione con l'operatore implementato. Ad es., "NOT x" si implementa con una sola porta NAND in cui l'input x è duplicato ai suoi due ingressi. Questa implementazione è corretta se e solo se la seguente equivalenza logica consegue dall'algebra di Boole: NOT x = x NAND x = NOT(x AND x). Quest'ultimo termine è equivalente al primo perché l'idempotenza di AND è una legge dell'algebra di Boole: x AND x = x.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 03-06-2011, 15:49:43
Code:
Che problema con l'indirizzamento si avrebbe nel funzionamento di un Pentium 4 se si usasse un bus PCI a 32 bit anche per gli accessi alla memoria (max 10 righe)?
Il problema sta nel fatto che il software che gira è a 32 bit mentre il pentium 4 è una macchina interamente a 64 bit e quindi darebbe problemi nell'indirizzamenento dei programmi utente anche perchè 2^32 = 4 gb di memoria ram e ormai è usuale avere programmi utente di 4 gb.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 03-06-2011, 16:37:50
Il problema sta nel fatto che il software che gira è a 32 bit
L'ipotesi è che si usi il bus PCI a 32 bit, ma non è questo il punto principale:
Quote
mentre il pentium 4 è una macchina interamente a 64 bit
non proprio, l'architettura "IA 64" è interamente a 64 bit. Il Pentium 4 ha un bus dati da 64 bit, ma un bus indirizzi largo 33 bit, e gli indirizzi sono allineati a parole di 8 byte, dunque c'è posto per 2^36 byte, ovvero 64 GB.
Quote
e quindi darebbe problemi nell'indirizzamenento dei programmi utente
Certo, ma la domanda è: quali problemi? Per rispondere correttamente occorre tener conto dei dati qui riportati.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 03-06-2011, 17:55:10
E allora quali sono questi problemi infatti a questa domanda so rispondere!!


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 03-06-2011, 20:07:26
E allora quali sono questi problemi infatti a questa domanda so rispondere!!
Nell'ipotesi che le sia scivolato un "non", ecco una possibile risposta dettagliata.

Il Pentium 4 ha 33 linee di indirizzo, ma sul PCI considerato in ipotesi ce ne sono solo 32. Inoltre, per effettuare un trasferimento di dati in un ciclo di bus occorrerebbe indirizzare parole da 32 bit, dunque occorrerebbero 34 linee di indirizzo per poter indirizzare una memoria da 2^36 byte, cioè 2^34 parole da 4 byte, in un solo ciclo. In alternativa, si può pensare di trasferire parole da 64 bit in due cicli (32 bit nel primo, 32 bit nel secondo), ma perché i 32 bit di indirizzo siano sufficienti occorrerebbe utilizzare la memoria da 64 GB in un modo molto preciso, ad es. suddividere ciascuna "parola" da 8 byte in due semiparole da 4 byte ciascuna, collocate a 32 GB (cioè 2^32 semiparole) di distanza l'una dall'altra, in modo che lo stesso indirizzo da 32 bit sia usato nella metà bassa nel primo ciclo e nella metà alta nel secondo ciclo (in altro parole, il bit mancante nello spazio del bus viene trasferito nel tempo: primo ciclo, secondo ciclo). Per realizzare un meccanismo simile occorrerebbe modificare la microarchitettura del Pentium 4 stesso, inclusa quella del controllore della memoria: in altre parole, riprogettare il processore.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 04-06-2011, 14:13:43
Quesito 17 : Perché molti sistemi operativi richiedono l'apertura preventiva di un file con una chiamata di sistema open, prima di qualsiasi altra operazione di I/O sul file (max 5 righe)?

Probabilmente è un metodo per prevenire (ed eventualmente gestire) eventuali eccezioni (file occupato, ad esempio).

Quesito 18 : In un sistema operativo dove i programmi possano aprire un numero qualsiasi di file, la cui dimensione può crescere nell'esecuzione, i file sono memorizzati in settori contigui? Perché (max 5 righe)?

Non è sempre così, ma può accadere. Tutto stà nel sapere che sistema di allocazione viene usato. E' possibile utilizzare una lista concatenata, e avere quindi file salvati in settori non consecutivi oppure mediante la tabella degli indici, memorizzare file in settori consecutivi (conoscendone l'indirizzo di partenza e l'offset).

Quesito 19 : Se oltre il 90% dei file occupano al più 8 KB ca., mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco (max 10 righe)?

Non capisco...

Quesito 20 : Si può tener traccia delle unità di allocazione libere in un disco con una lista delle locazioni libere o con una bitmap dello stato di allocazione. Che pro e contro hanno tali opzioni (max 10 righe)?

La bitmap utilizza una struttura dati di lunghezza fissa, inoltre richiede la sola modifica di un bit per cambiare lo stato di allocazione di un'unità (libera o occupata). Risulta però difficile la ricerca di un blocco di una data lunghezza. La lista invece deve essere implementata utilizzando una struttura di lunghezza variabile, però semplifica la ricerca di uno spazio libero di una data dimensione. Entrambe le implementazioni devono essere aggiornate quando si rimuove/crea un file dal disco.

Quesito 21 : Qual è la causa del problema della corsa critica nella condivisione di un buffer circolare, fra un processo produttore e uno consumatore, basata sui rispettivi indici in e out (max 15 righe)?

Il problema si genera quando, nel lasso di tempo tra la lettura di in e out da parte del consumatore e il suo suspend, il produttore interviene leggendo in = out + 1. Pensando che il consumatore stesse dormendo, gli manda un segnale di resume, che viene perso poichè il consumatore era ancora sveglio.
Questo problema, noto come corsa critica, fà dipendere il successo del metodo dal vincitore della corsa al test in, out dopo l'incremento di out.

Quesito 22 : Descrivere le operazioni sui semafori e i requisiti che la loro definizione impone alla loro implementazione in un sistema operativo (max 15 righe).

Le operazioni sono essenzialmente due, up e down. La funzione up incrementa di 1 il valore del semaforo, e se tale valore era 0 (prima dell'incremento), verifica se un altro processo stava completando una down. Se esiste, la completa e prosegue la propria esecuzione. Se il valore del semaforo è > 0, incrementa semplicemente di 1. La funzione down, se il valore semaforo è 0, fà rimanere in sospeso il processo associato al semaforo finchè non si esegue una up nel semaforo corrispondente. Altrimenti se semaforo è > 0, decrementa di 1 tale valore.

Il sistema operativo deve proibire l'uso di un semaforo da più di un processo per volta, o almeno limitarsi ad interrompere l'esecuzione di tutti i processi affinchè il processo associato a tale chiamata di sistema non porti a compimento l'operazione.


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 04-06-2011, 17:14:59
In questa domanda:

La sintassi di MAL definita nel testo permette l'istruzione D=H, con D una variabile, mentre quella proposta nelle note integrative non la permette. Chi ha ragione, e perché (max 5 righe)?

non ho capito qual'è il vantaggio di fare DEST=H  .penso


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 05-06-2011, 10:58:26
Probabilmente è un metodo per prevenire (ed eventualmente gestire) eventuali eccezioni (file occupato, ad esempio).
No, le eccezioni possono aversi a seguito di qualsiasi istruzione di I/O virtuale sul file. Il punto è che, per poter accedere al file, al sistema operativo occorrono, innanzitutto, un'indicazione di quale file si tratta, ed altre informazioni (locazione del file sul disco o eventuale tabella indice del file, diritti di accesso) che sono presenti nel file su disco, se il file esiste, o che vengono create dal sistema operativo stesso in caso contrario. Tali informazioni saranno utilizzate, ed eventualmente aggiornate, per eseguire le successive istruzioni virtuali di I/O sul file, e mantenute in memoria dal sistema operativo fino alla chiusura del file.
Quote
Non è sempre così, ma può accadere.
davvero?
Quote
Tutto stà nel sapere che sistema di allocazione viene usato. E' possibile utilizzare una lista concatenata, e avere quindi file salvati in settori non consecutivi
questo è il caso negativo, direi ovvio
Quote
oppure mediante la tabella degli indici,
"tabella indice del file" (la traduzione fornita nel testo va corretta, v. la versione più recente delle correzioni al testo (http://www.dmi.unict.it/~scollo/slidy/ae-2011/note/Tanenbaum5EitErrata.txt), p. 442)
Quote
memorizzare file in settori consecutivi
no, la tabella indice del file serve quando la memorizzazione di un file non è contigua, altrimenti basta la sua locazione iniziale per potere calcolare la locazione del disco di qualsiasi suo byte, blocco o record logico. Il problema è che, se la memorizzazione è contigua, occorrerebbe conoscere in anticipo il numero massimo di settori che il file potrà occupare (e avere spazio libero contiguo sul disco in quantità sufficiente ad allocarli al file già alla sua prima apertura).
Quote
Quesito 19 : Se oltre il 90% dei file occupano al più 8 KB ca., mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco (max 10 righe)?

Non capisco...
Che cosa? Il numero di file che occupano al più 8 KB ciascuno supera il 90% del numero totale di file presenti sul disco. Gli altri, ciascuno dunque di dimensione maggiore di 8 KB, pur essendo evidentemente meno del 10% del numero totale di file, siccome sono "grossi" occupano complessivamente più del 90% dello spazio disco occupato in totale. È più chiaro adesso?
Quote
Entrambe le implementazioni devono essere aggiornate quando si rimuove/crea un file dal disco.
non solo in tali occasioni, ma ad ogni allocazione/deallocazione di settori al/dal file.
Quote
Il sistema operativo deve proibire l'uso di un semaforo da più di un processo per volta, o almeno limitarsi ad interrompere l'esecuzione di tutti i processi affinchè il processo associato a tale chiamata di sistema non porti a compimento l'operazione.
Direi "finché", altrimenti parrebbe che obiettivo del sistema sia quello di impedire al processo di portare a compimento l'operazione... Inoltre non direi "almeno", ma "ad esempio", perché l'interruzione dell'esecuzione di tutti gli altri processi è un modo, un po' drastico, di impedire l'uso concorrente di uno stesso semaforo. Esistono anche modi meno drastici (ma anche meno semplici) di conseguire lo stesso risultato.



Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 05-06-2011, 11:36:04
non ho capito qual'è il vantaggio di fare DEST=H  .penso
Che ragione ci sarebbe per escluderlo? Ad esempio, DEST potrebbe essere H stesso: tale assegnamento "banale" permette di settare i bit Z e/o N prodotti dalla  ALU in base al contenuto di H; spesso l'istruzione MAL
R = R ; if (Z) goto L1 else goto L2
viene espressa mediante la sintassi
Z = R; if (Z) goto L1 else goto L2
e analogamente per il test su N, dove R può essere qualsiasi registro tranne MAR, MBR, MBRU; ciò perché R deve essere un registro lecito sia a sinistra che a destra di un assegnamento, secondo la sintassi MAL, dunque non può essere MAR (vietato a destra), né MBR o MBRU (vietato a sinistra). Però può essere utile specificare una diramazione ad es. in base al segno di MBR. Come fare? Semplice:
H = MBR
N = H ; if (N) goto L1 else goto L2

che è la sintassi alternativa per:
H = MBR
H = H ; if (N) goto L1 else goto L2

In questo caso, se non ci sono altre istruzioni fra le due mostrate, c'è una soluzione più semplice :
H = MBR ; if (N) goto L1 else goto L2
ma in caso contrario serve l'assegnamento H = H.


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 05-06-2011, 16:37:38
L'interpretazione dell'istruzione IJVM invokevirtual deve conoscere il numero dei parametri del metodo invocato. Perché (max 5 righe)?
Una volta effettuato correttamente l'invokevirtual, lo stack dovrà contenere appena sopra LV tutti i parametri che sono stati passati a invokevirtual...
La memoria necessaria a contenere questi parametri si conosce a priori leggendo il numero dei parametri del metodo (includendo anche objref)


Può essere che è necessario conoscere il numero dei parametri passati al metodo per non eccedere nella zona di memoria della costant pool??


Title: Re:Quesiti a risposta aperta
Post by: immatricola on 05-06-2011, 19:22:26
Il testo, in sez. 3.2.2 "Reti combinatorie", spiega l'uso di un multiplexer per la conversione di dati da parallelo a seriale. Tale uso non è appropriato al titolo della sezione. Perché (max 5 righe)?

Il titolo appropriato sarebbe “Circuiti combinatori” perché il multiplexer è un circuito con 2^n dati di entrata,un dato di uscita e n input di controllo che seleziona uno dei dati di entrata.


Che cos'è lo stato di riposo degli input S e R di un latch SR implementato mediante due porte NAND?

In questo tipo di circuito gli ingressi S e R sono attivi sul livello basso,vi è uno stato di riposo per S=R=1,quando vi è un immagazzinamento,gli input in questa fase vengono tenuti a livello logico alto in modo tale gli output q e not q si mantengono in uno stato costante.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-06-2011, 04:57:37
Può essere che è necessario conoscere il numero dei parametri passati al metodo per non eccedere nella zona di memoria della costant pool??
Direi di no, in quella zona ci trova solo l'indirizzo di inizio del metodo nell'area dei metodi. Alla risposta fornita dal suo collega, da lei citata, avevo obiettato:
Sì, ma i parametri sono posti nello stack prima dell'esecuzione di invokevirtual. Perché, invece, proprio nella interpretazione di invokevirtual è necessario conoscerne il numero?
Dunque i parametri si trovano già sullo stack quando inizia l'interpretazione di invokevirtual, si sa dove cominciano, e occorre sapere dove finiscono... la domanda è: perché occorre sapere anche questo? Sospetterei che nell'interpretazione di invokevirtual si debba effettuare qualche altra scrittura sullo stack, senza correre il rischio di modificare i parametri che già vi si trovano.




Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-06-2011, 05:14:11
Il titolo appropriato sarebbe “Circuiti combinatori” perché il multiplexer è un circuito con 2^n dati di entrata,un dato di uscita e n input di controllo che seleziona uno dei dati di entrata.
No, "circuiti combinatori" e "reti combinatorie" sono sinonimi. Il multiplexer in quanto tale lo è, finché il suo output dipende solo dagli input in un dato istante e non da stati precedenti o dal tempo. È l'uso del multiplexer quale serializzatore a non essere conforme a questa caratteristica dei circuiti/reti combinatori/e, e a renderlo invece un circuito sequenziale, perché in tale uso l'output dipende dal tempo (il circuito serializza l'input sull'unico output nel tempo).
Quote
In questo tipo di circuito gli ingressi S e R sono attivi
direi meglio "asseriti"
Quote
sul livello basso,vi è uno stato di riposo per S=R=1,quando vi è un immagazzinamento,gli input in questa fase vengono tenuti a livello logico alto in modo tale gli output q e not q si mantengono in uno stato costante.
dovrebbe usare altri segni di interpunzione oltre alle virgole, altrimenti è difficile capire cosa intenda.


Title: Re:Quesiti a risposta aperta
Post by: pippo on 06-06-2011, 15:15:36
Quote
Il bit A, o di riporto ausiliario, nel registro di flag del Pentium 4 indica un riporto oltre il bit 3 nella somma. Perché ciò è utile nella somma BCD (max 10 righe)?
  e
Quote
Il testo originale specifica il bit di flag A del Pentium 4 come "carry out of bit 3"; se questo fosse il "riporto oltre il terzo bit", sarebbe poco utile alla somma BCD. Perché (max 10 righe)?

Queste due domande non sarebbero contraddittorie? :-)|


Title: Re:Quesiti a risposta aperta
Post by: Aerith on 06-06-2011, 15:24:38
Indicare e motivare i vantaggi dell'arbitraggio decentralizzato, rispetto a quello centralizzato, nei bus con collegamento a festone

L'arbitraggio centralizzato con il collegamento a festone si basa sul fatto che ai dispositivi vengono assegnate delle priorità, in base a quanto sono vicini all'arbitro. L'arbitraggio decentralizzato, si basa sul maggior numero di linee di bus con il quale tutti dispositivi monitorano tutte le linee di richiesta dove alla fine di ciascun ciclo del bus, tali dispositivi potranno sapere chi è il richiedente con priorità più elevata e quindi avere il diritto di usare il bus durante il ciclo successivo. I due tipi di arbitraggio sono simili, la differenza sta che nel'l'arbitraggio decentralizzato non ha l'arbitro e ciò lo rende più economico, più veloce e non soggetto ai potenziali guasti dell'arbitro.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-06-2011, 15:47:49
Queste due domande non sarebbero contraddittorie? :-)|
No, perché il "terzo bit" non è il bit 3, bensì il bit 2 (si numerano le posizioni dei bit da destra verso sinistra, cioè per significatività crescente, a partire da 0).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-06-2011, 16:14:16
L'arbitraggio decentralizzato, si basa sul maggior numero di linee di bus con il quale tutti dispositivi monitorano tutte le linee di richiesta [...]
No, c'è un equivoco: l'ipotesi "nei bus con collegamento a festone" si riferisce a entrambi i tipi di arbitraggio, dunque va considerato l'arbitraggio decentralizzato con solo tre linee, indipendentemente dal numero dei dispositivi.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 07-06-2011, 11:29:55
Le istruzioni del Pentium possono raggiungere i 17 byte di lunghezza. Il Pentium è un processore VLIW? Motivare la risposta (max 5 righe).
Se si riferisce al Pentium I, anche se le istruzioni sono lunghe, non credo che questo processore abbia più unità funzionale, e immagino neanche più core sullo stesso chip. Quindi non credo potrebbe essere considerato un proc. VLIW, ma solo un processore che utilizza istruzioni lunghe...


Title: Re:Quesiti a risposta aperta
Post by: immatricola on 07-06-2011, 12:22:32
molte CPU hanno uno speciale ciclo di bus per la conferma degli interrupt.Perchè?

Un interrupt è un segnale o un messaggio generalmente di natura asincrona che arriva alla CPU per avvisarla del verificarsi di un certo evento.Ciò è importante perchè se non ci fosse potrebbe accadere che dei processori tentano di assegnare delle istruzioni non valide e generare parecchi errori;rovinano i registri della CPU e I/O e il sistema stesso.Quindi la conferma dell'interrupt è essenziale per informare il sistema operativo per la gestione del problema.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 07-06-2011, 17:18:46
Code:
Stimare quanta memoria occorrerebbe in una stampante laser a colori per una bitmap da 520 cm² a 600 dpi, con stampa a mezzitoni da 32 zone per pixel e per colore (1 inch = 2,54 cm, max 5 righe).
Innanzi tutto bisogna vedere quanti pollici ci sn in questa immagine e io ho fatto 520/2,54 =circa 205.
Dopo bisogna calcolare quanti pixel ci sono in questa immagine e ho fatto 600*600*205=73800000 pixel.
Adesso come faccio a capire quanti bit ci sn per pixel e calcolarmi la dimensione della memoria della stampante??
Voi come la pensate????


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-06-2011, 18:12:38
Se si riferisce al Pentium I, anche se le istruzioni sono lunghe, non credo che questo processore abbia più unità funzionale, e immagino neanche più core sullo stesso chip. Quindi non credo potrebbe essere considerato un proc. VLIW, ma solo un processore che utilizza istruzioni lunghe...
La domanda vale anche per il Pentium 4, che ha più unità funzionali, è superscalare, e ha una CPU con multithreading. Anche se alcune delle sue istruzioni sono parecchio lunghe, il formato dell'istruzione può specificare l'esecuzione simultanea di più operazioni da parte di unità funzionali distinte? È questa la caratteristica dei processori VLIW.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-06-2011, 18:39:52
Ciò è importante perchè se non ci fosse potrebbe accadere che dei processori tentano di assegnare delle istruzioni non valide e generare parecchi errori;rovinano i registri della CPU e I/O e il sistema stesso.Quindi la conferma dell'interrupt è essenziale per informare il sistema operativo per la gestione del problema.
No, la domanda è un'altra. Qui lei fornisce una spiegazione del perché sia necessario il segnale di interrupt, non quello di conferma dell'interrupt (con un ciclo speciale di bus). La spiegazione è discutibile, perché la necessità del segnale di interrupt deriva semplicemente dal fatto che in molti casi una richiesta di comunicazione da una periferica va servita entro un tempo limitato, pena la perdita dell'informazione associata alla richiesta. I casi di errore segnalabili nel registro di stato di un controllore di I/O vanno anch'essi gestiti dalla routine di servizio dell'interrupt, ma non sono la motivazione principale per l'esistenza del segnale di interrupt, né di quello di conferma. Riguardo a quest'ultimo, occorre chiedersi: quando un controllore di I/O genera il segnale di interrupt, può sapere quando la CPU sarà disponibile per servire la richiesta? Quando ciò avverrà, il controllore dovrà inviare sul bus una propria identificazione, cioè il vettore di interrupt, che la CPU usa come indice in una tabella che fornisce l'indirizzo della corrispondente routine di servizio dell'interrupt per quel controllore. Se il controllore inviasse il vettore di interrupt sul bus assieme all'interrupt stesso, questa informazione potrebbe andare persa perché la CPU potrebbe non essere subito disponibile a recepirla (ad es. poiché impegnata nel servizio di un interrupt di priorità più alta). Occorre dunque un ciclo di bus a parte, successivo a quello di segnalazione dell'interrupt, perché la conferma dell'interrupt informi il controllore che è il momento di fornire il vettore di interrupt sul bus.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-06-2011, 18:51:29
io ho fatto 520/2,54 =circa 205.
I 520 sono cm2, non cm, dunque occorre dividere 520 per (2,54)2
Quote
Dopo bisogna calcolare quanti pixel ci sono in questa immagine e ho fatto 600*600*205=73800000 pixel.
dovrà rimpiazzare 205 con il valore corretto, in base all'osservazione precedente.
Quote
Adesso come faccio a capire quanti bit ci sn per pixel e calcolarmi la dimensione della memoria della stampante??
Ha 3 colori per pixel, e per ciascun colore del pixel deve discriminare fra 32 = 25 zone distinte. Questo dovrebbe bastarle a trovare la risposta alla prima domanda. La risposta alla seconda sarà poi molto semplice, perché avrà già calcolato il numero totale di pixel.


Title: Re:Quesiti a risposta aperta
Post by: pippo on 07-06-2011, 21:15:32
Quote
Ha 3 colori per pixel, e per ciascun colore del pixel deve discriminare fra 32 = 25 zone distinte. Questo dovrebbe bastarle a trovare la risposta alla prima domanda. La risposta alla seconda sarà poi molto semplice, perché avrà già calcolato il numero totale di pixel.
Prof in che senso bisogna "discriminare"? Non mi è chiaro..


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 07-06-2011, 21:59:47
Code:
Scrivere un programma MAL per la divisione di interi senza segno, con il dividendo in LV, il divisore non nullo in H, il quoziente intero in SP e il resto in OPC (max 10 righe).
questa è la mia soluzione professore penso sia giusta!


Ciclo:     Z=LV; if(Z) goto fine2
Ciclo1:    LV=LV -H
           SP=SP+1
           Z=LV; if(Z) goto Somma
           N=LV if(N) goto Somma2
           goto Ciclo1
Somma:     OPC=0
           goto Fine
Somma2:    LV=LV+H
           SP=SP-1
           OPC=LV
           goto Fine
Fine:
Fine2:     SP=0
           OPC=0
           goto Fine


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 15:25:22
Prof in che senso bisogna "discriminare"? Non mi è chiaro..
"distinguere", fra le 32 zone in questione: per ciascuno dei tre colori fondamentali di ogni pixel va memorizzata una delle 32 zone, quella che meglio ne rappresenta il contributo al colore risultante del pixel. Occorre dunque avere memoria sufficiente per un (qualsiasi) numero dell'intervallo [0,31].


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 15:38:30
Code:
(max 10 righe).
questa è la mia soluzione professore penso sia giusta!
Nella migliore delle ipotesi c'è qualche istruzione di troppo: se avete 10 righe a disposizione per un programma, direi che 10 istruzioni dovrebbero bastare. Ora, esaminando qualche dettaglio, emergono subito alcune domande e osservazioni:
  • Perché l'istruzione vuota di etichetta Fine? Non essendo in gioco alcun accesso a memoria, non dovrebbe esserci alcuna necessità di cicli di attesa;
  • l'istruzione "goto Fine" subito seguita dall'istruzione di etichetta "Fine" è chiaramente superflua;
  • in realtà tutte le istruzioni dalla suddetta "goto Fine" in poi sono superflue:
Quote
           goto Fine
Fine:
Fine2:     SP=0
           OPC=0
           goto Fine
La invito a utilizzare questa prima valutazione, pur se incompleta, per escogitare una diversa soluzione al problema che non impieghi più di 10 istruzioni.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 08-06-2011, 16:47:41
Tracciare la rete combinatoria di un sommatore a 4 bit a propagazione di riporto (all'interno dello spazio appresso).

Mi è capitata una domanda del genere su studium
Ma cosa si intende per tracciare??


Title: Re:Quesiti a risposta aperta
Post by: R3m on 08-06-2011, 17:12:09
io ho fatto 520/2,54 =circa 205.
I 520 sono cm2, non cm, dunque occorre dividere 520 per (2,54)2
Quote
Dopo bisogna calcolare quanti pixel ci sono in questa immagine e ho fatto 600*600*205=73800000 pixel.
dovrà rimpiazzare 205 con il valore corretto, in base all'osservazione precedente.
Quote
Adesso come faccio a capire quanti bit ci sn per pixel e calcolarmi la dimensione della memoria della stampante??
Ha 3 colori per pixel, e per ciascun colore del pixel deve discriminare fra 32 = 25 zone distinte. Questo dovrebbe bastarle a trovare la risposta alla prima domanda. La risposta alla seconda sarà poi molto semplice, perché avrà già calcolato il numero totale di pixel.

Se i calcoli sono corretti, sarebbe 81. Da questo ricaviamo 600*600*81, ovvero 29160000 pixel. Dato che dobbiamo considerare 32 bit per il colore, abbiamo 933120000, diviso 1024000 (ovvero in megabyte) otteniamo 911 Megabyte di memoria da utilizzare.

Se si riferisce al Pentium I, anche se le istruzioni sono lunghe, non credo che questo processore abbia più unità funzionale, e immagino neanche più core sullo stesso chip. Quindi non credo potrebbe essere considerato un proc. VLIW, ma solo un processore che utilizza istruzioni lunghe...
La domanda vale anche per il Pentium 4, che ha più unità funzionali, è superscalare, e ha una CPU con multithreading. Anche se alcune delle sue istruzioni sono parecchio lunghe, il formato dell'istruzione può specificare l'esecuzione simultanea di più operazioni da parte di unità funzionali distinte? È questa la caratteristica dei processori VLIW.
Non ho capito, intende dire che il grazie al formato è possibile eseguire istruzioni in parallelo? I pacchetti non sono proprio delle istruzioni particolarmente lunghe?


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 08-06-2011, 17:13:20
Code:
(max 10 righe).
questa è la mia soluzione professore penso sia giusta!
Nella migliore delle ipotesi c'è qualche istruzione di troppo: se avete 10 righe a disposizione per un programma, direi che 10 istruzioni dovrebbero bastare. Ora, esaminando qualche dettaglio, emergono subito alcune domande e osservazioni:
  • Perché l'istruzione vuota di etichetta Fine? Non essendo in gioco alcun accesso a memoria, non dovrebbe esserci alcuna necessità di cicli di attesa;
  • l'istruzione "goto Fine" subito seguita dall'istruzione di etichetta "Fine" è chiaramente superflua;
  • in realtà tutte le istruzioni dalla suddetta "goto Fine" in poi sono superflue:
Quote
           goto Fine
Fine:
Fine2:     SP=0
           OPC=0
           goto Fine
La invito a utilizzare questa prima valutazione, pur se incompleta, per escogitare una diversa soluzione al problema che non impieghi più di 10 istruzioni.

Ho fatte le adeguate modifiche un giudizio?

Ciclo:       LV=LV-H;
                SP=SP+1;
                Z=LV; if(Z) goto noResto;
                N=LV if(n) goto Resto;
                goto Ciclo;
noResto: OPC=0;
                RETURN
Resto:      LV=LV+H;
                SP=SP-1;
                OPC=LV;
                RETURN


Title: Re:Quesiti a risposta aperta
Post by: pippo on 08-06-2011, 17:31:53
Prof in che senso bisogna "discriminare"? Non mi è chiaro..
"distinguere", fra le 32 zone in questione: per ciascuno dei tre colori fondamentali di ogni pixel va memorizzata una delle 32 zone, quella che meglio ne rappresenta il contributo al colore risultante del pixel. Occorre dunque avere memoria sufficiente per un (qualsiasi) numero dell'intervallo [0,31].
se non sbaglio con i calcoli verrebbe: 520/(2,54^2)=80,60*(600*600)=29016000 pixel
Ora faccio 29016000*15bit(che sono 5bit per colore)= 435240000,e facendo /8/1024/1024= 51MB di memoria,giusto?


Title: Re:Quesiti a risposta aperta
Post by: SalvoCia on 08-06-2011, 18:34:27
Sapreste rispondere a questa domanda??
Un calcolatore con un bus dati largo 32 bit usa una DRAM implementata con chip di 1 Mbit x 1. Qual è la più piccola memoria (in byte) che il calcolatore può avere (max 5 righe)?


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 08-06-2011, 18:51:33
Code:
Le cache set-associative con poche vie sono preferibili a quelle con molte vie. Perché (max 10 righe)?
Algoritmo per rimpiazzare una linea di cache è LRU algoritmo mediante il quale aumentando le vie di cache aumenta la sua inefficienza.
quindi per questo le cache associative con poche vie sono più efficienti di quelle con tante vie.
Molte macchine montano cache che vanno da una a 4 vie.


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 08-06-2011, 18:54:38
Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perché sia meglio che lo sia (max 5 righe)?


Secondo me non ha significato avere un numero di vie che sia potenza di due in quanto le attuali macchine fanno uso di cache a 3 vie per motivi di efficienza


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 19:11:54
cosa si intende per tracciare??
disegnare.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 19:50:52
Se i calcoli sono corretti, sarebbe 81.
80,6, con un po' più di precisione.
Quote
Da questo ricaviamo 600*600*81, ovvero 29160000 pixel.
29x106, con la piccola correzione di cui sopra.
Quote
Dato che dobbiamo considerare 32 bit per il colore, abbiamo 933120000,
No, qui la correzione è più sostanziosa (e concettuale): un fattore 3 per il  numero di colori per pixel, e un fattore 5 per la zona di ciascuno di essi (servono 5 bit per discriminare 25 zone), dunque complessivamente 15: con la correzione di cui sopra si ottiene 435x106.
Quote
diviso 1024000 (ovvero in megabyte) otteniamo 911 Megabyte di memoria da utilizzare.
1 M non è 1024 x 1000, bensì 1 KK, ovvero 10242 = 1048576. Aggiungendo questa correzione alle precedenti si ottiene circa 415 Mbit, ovvero circa 52 MB.
Quote
Non ho capito, intende dire che il grazie al formato è possibile eseguire istruzioni in parallelo? I pacchetti non sono proprio delle istruzioni particolarmente lunghe?
Sì, ma la differenza essenziale è un'altra. Nel Pentium superscalare la parallelizzazione dell'esecuzione di più istruzioni è determinata dalla (molto complessa) microarchitettura, grazie a molteplici accorgimenti, quali ad es.: pipeline profonda, esecuzione fuori sequenza con rinomina dei registri e, come abbiamo visto da ultimo, hyperthreading. Il formato della singola istruzione Pentium specifica una sola istruzione, e il compilatore non ha decisioni da prendere in merito a quante e quali istruzioni saranno parallelizzate dalla microarchitettura. In un processore VLIW, invece, il formato dell'istruzione (o, più precisamente, della Instruction Word, cioè del pacchetto di istruzioni) prevede più di una istruzione, da emettere tutte in parallelo su unità funzionali distinte. Il pacchetto lo costruisce il compilatore, che determina (e sperabilmente ottimizza) la scelta delle istruzioni da mettere assieme in uno stesso pacchetto, dunque da eseguire in parallelo. La microarchitettura si semplifica parecchio, a spese della complessità del compilatore.


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 08-06-2011, 20:03:27
Non mi è molto chiaro questo quesito:

Il testo, in sez. 3.2.2 “Reti combinatorie”, spiega l’uso di un multiplexer per la conversione di dati da parallelo a seriale. Tale uso non è appropriato al titolo della sezione. Perché?

Il paragrafo in questione parla dell'utilizzo del multiplexer come convertitore da parallelo a seriale per esempio per l'utilizzo di una tastiera, i cui tasti, una volta premuti, generano dei numeri a 7 o 8 bit che possono essere spediti serialmente lungo una linea telefonica. Questo è possibile grazie alle linee di controllo dell'ipotetico multiplexer, i cui segnali variano sequenzialmente per permettere al flusso di dati di essere spedito serialmente.

Dove trovo l'uso inappropriato al titolo della sezione (reti combinatorie)?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 20:45:10
Ho fatte le adeguate modifiche un giudizio?
Sufficienti, ma si può migliorare ancora, come segue.
  • Nella nuova versione le sue istruzioni sono 11, dunque ancora troppe. Poiché l'esercizio chiede la stesura di un programma, non di un sottoprogramma, l'istruzione RETURN è di troppo (la seconda: per la prima v. appresso).
  • Problema un po' più serio (di sostanza): assumiamo pure (come lei implicitamente fa) che il contenuto iniziale di SP sia 0 (dunque che non occorra inizializzarlo a 0); non c'è ragione di considerare il resto 0 come un'assenza di resto: 0 è un numero (anche se questo è un argomento molto dibattuto in passato, e in parte anche tuttora). A conti fatti, le seguenti istruzioni sono superflue:
                   Z=LV; if(Z) goto noResto;
    ...
    noResto: OPC=0;
                    RETURN
  • La sintassi di MAL (grazie alle caratteristiche della microarchitettura) le permette di  compattare in una sola istruzione la sequenza di due istruzioni (dove, a proposito, l'uso del separatore ";" non è corretto: manca dove occorre, cioè dopo l'assegnamento, e c'è dove non dovrebbe, cioè alla fine delle istruzioni):
                    N=LV if(n) goto Resto;
                    goto Ciclo;
    ovvero:
                    N=LV; if(N) goto Resto; else goto Ciclo

Dopo questi sconti, le 11 istruzioni diventano 6. Direi che c'è ampio spazio per l'inizializzazione di SP, no?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 20:47:53
giusto?
Sì, visto che me lo chiede: quando non rispondo, il default è che la soluzione è corretta e sufficientemente completa.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 21:09:42
aumentando le vie di cache aumenta la sua inefficienza.
Vero fino a un certo punto, altrimenti l'ottimo sarebbe sempre di avere cache a una via. Occorre precisare cosa si valuta per misurare la maggiore o minore "efficienza" nella determinazione del numero di vie. Contano due fattori contrapposti:
  • il tempo medio di reperimento di una linea di cache presente in un elemento della cache, che aumenta al crescere del numero di vie, penalizzando le prestazioni;
  • il tempo medio di scelta della linea di cache da rimpiazzare, da parte dell'algoritmo LRU, che aumenta al crescere del numero di vie, penalizzando le prestazioni;
  • la probabilità di cache miss, che diminuisce al crescere del numero di vie, migliorando le prestazioni.
I primi due fattori sono dunque "costi" dell'incremento del numero di vie, il terzo ne è un "beneficio". Una scelta ottimale dovrebbe rendere minimo il rapporto costo/beneficio, almeno in media statistica, opportunamente misurato.


Title: Re:Quesiti a risposta aperta
Post by: pippo on 08-06-2011, 21:10:56
giusto?
Sì, visto che me lo chiede: quando non rispondo, il default è che la soluzione è corretta e sufficientemente completa.
:-OK


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 08-06-2011, 21:15:41
Dato che c'è il rischio che questa domanda passi un pochino inosservata, la ripropongo sperando che qualcuno sappia darmi una mano :)

Non mi è molto chiaro questo quesito:

Il testo, in sez. 3.2.2 “Reti combinatorie”, spiega l’uso di un multiplexer per la conversione di dati da parallelo a seriale. Tale uso non è appropriato al titolo della sezione. Perché?

Il paragrafo in questione parla dell'utilizzo del multiplexer come convertitore da parallelo a seriale per esempio per l'utilizzo di una tastiera, i cui tasti, una volta premuti, generano dei numeri a 7 o 8 bit che possono essere spediti serialmente lungo una linea telefonica. Questo è possibile grazie alle linee di controllo dell'ipotetico multiplexer, i cui segnali variano sequenzialmente per permettere al flusso di dati di essere spedito serialmente.

Dove trovo l'uso inappropriato al titolo della sezione (reti combinatorie)?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 21:21:01
Secondo me non ha significato avere un numero di vie che sia potenza di due in quanto le attuali macchine fanno uso di cache a 3 vie per motivi di efficienza
Mi sembra un giudizio eccessivo, cache a 2 o 4 vie hanno tanto senso quanto cache a 3 o 5 vie, in linea di principio. Dunque, mentre non c'è ragione di preferire le potenze di 2, non ce n'è nemmeno per escluderle a priori.


Title: Re:Quesiti a risposta aperta
Post by: pippo on 08-06-2011, 21:26:17
Ho fatte le adeguate modifiche un giudizio?
Sufficienti, ma si può migliorare ancora, come segue.
  • Nella nuova versione le sue istruzioni sono 11, dunque ancora troppe. Poiché l'esercizio chiede la stesura di un programma, non di un sottoprogramma, l'istruzione RETURN è di troppo (la seconda: per la prima v. appresso).
  • Problema un po' più serio (di sostanza): assumiamo pure (come lei implicitamente fa) che il contenuto iniziale di SP sia 0 (dunque che non occorra inizializzarlo a 0); non c'è ragione di considerare il resto 0 come un'assenza di resto: 0 è un numero (anche se questo è un argomento molto dibattuto in passato, e in parte anche tuttora). A conti fatti, le seguenti istruzioni sono superflue:
                   Z=LV; if(Z) goto noResto;
    ...
    noResto: OPC=0;
                    RETURN
  • La sintassi di MAL (grazie alle caratteristiche della microarchitettura) le permette di  compattare in una sola istruzione la sequenza di due istruzioni (dove, a proposito, l'uso del separatore ";" non è corretto: manca dove occorre, cioè dopo l'assegnamento, e c'è dove non dovrebbe, cioè alla fine delle istruzioni):
                    N=LV if(n) goto Resto;
                    goto Ciclo;
    ovvero:
                    N=LV; if(N) goto Resto; else goto Ciclo

Dopo questi sconti, le 11 istruzioni diventano 6. Direi che c'è ampio spazio per l'inizializzazione di SP, no?
Prof,io la soluzione proposta dal collega l'avrei corretta in questo modo:
Ciclo:       LV=LV-H;
                SP=SP+1;
                Z=LV; if(Z) goto memR;
                N=LV if(N) goto Resto;else goto Ciclo;
Resto:      LV=LV+H;
                SP=SP-1;
memR     OPC=LV;


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 21:27:15
Dove trovo l'uso inappropriato al titolo della sezione (reti combinatorie)?
Nella precedente risposta a immatricola (http://forum.sdai.unict.it/index.php?topic=12253.msg79135#msg79135).


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 08-06-2011, 21:31:53
Dove trovo l'uso inappropriato al titolo della sezione (reti combinatorie)?
Nella precedente risposta a immatricola (http://forum.sdai.unict.it/index.php?topic=12253.msg79135#msg79135).

mi era sfuggita, chiedo scusa :boh e grazie  .smile


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 21:34:30
Dato che c'è il rischio che questa domanda passi un pochino inosservata,
Non vedo il rischio, i miei commenti seguono una disciplina FIFO, escludendo i vostri post che non richiedono commenti, ad es. quelli di una delle due categorie che seguono:
  • risposte corrette e sufficientemente complete;
  • domande rivolte agli studenti (ad es., quella recente di SalvoCia (http://forum.sdai.unict.it/index.php?topic=12253.msg79294#msg79294)).


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 08-06-2011, 21:40:36
Chiedo doppiamente scusa. Sono entrato nel topic da poco e non mi ero accorto dell'ordine accurato con cui ad ogni quesito viene data risposta..


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-06-2011, 21:44:40
io la soluzione proposta dal collega l'avrei corretta in questo modo:
Riguardo alla forma, anche lei dovrebbe rivedere l'uso (o il mancato uso, quando necessario) del separatore ";". Forse non era chiaro quanto segue: non è un separatore di istruzioni MAL, ma solo dei diversi campi di una stessa istruzione.
Riguardo alla sostanza, inizializzazione di SP a parte, la sua proposta costa un'istruzione in più rispetto a quella proposta da me, ma forse presenta qualche vantaggio? In ogni caso, forma a parte, mi sembra corretta.


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 08-06-2011, 22:42:56
Nel microprogramma Mic-1 il codice in T, eseguito quando Z=1 con JAMZ=1, è uguale a quello in goto1. Si potrebbe andare direttamente a goto1? Se sì, si risparmierebbe un ciclo (max 10 righe)?


# codice T#
OPC=PC-1; goto goto2


# codice goto #

goto1  OPC=PC-1
goto2  PC=PC+1; fetch
.......

Si potrebbe eseguire direttamente il codice di goto, in quanto non credo che si risparmierebbe un ciclo


Title: Re:Quesiti a risposta aperta
Post by: Giovi89 on 09-06-2011, 10:32:33
Buongiorno ho un dubbio sulla seguente domanda:

Code:
Quesito 21 : Si abbia un archivio di immagini fotografiche digitali da 16 milioni di pixel ca., a 3 byte/pixel. Quante se ne possono memorizzare in una memoria da 1 GB con fattore di compressione 5 (max 5 righe)?

per la risoluzione procedo nel seguente modo:
ho calcolato lo spazio che occupa una singola immagine facendo 16 milioni * 3 = 48 milioni, dopo di che divido 1 GB (portato a byte) per la grandezza dell'immagine trovando come risultato che si potrebbero archiviare circa 22 immagini. Non ho capito come applicare il fattore di compressione 5?
Rimango in attesa di una vostra risposta.


Title: Re:Quesiti a risposta aperta
Post by: SalvoCia on 09-06-2011, 11:13:34
L'arbitraggio decentralizzato, si basa sul maggior numero di linee di bus con il quale tutti dispositivi monitorano tutte le linee di richiesta [...]
No, c'è un equivoco: l'ipotesi "nei bus con collegamento a festone" si riferisce a entrambi i tipi di arbitraggio, dunque va considerato l'arbitraggio decentralizzato con solo tre linee, indipendentemente dal numero dei dispositivi.
E quindi quale dovrebbe essere la risposta corretta?


Title: Re:Quesiti a risposta aperta
Post by: Flyer on 09-06-2011, 14:09:27
Quote
Calcolare il fattore di compressione richiesto per memorizzare 133 minuti di video in un DVD con 3,5 GB per la traccia video, risoluzione di 720x480 pixel, colori a 24 bit, 30 frame/s

Io ho ragionato in questo modo, ma ho qualche dubbio  :boh

Ogni frame è composto da 720*480 pixel, cioè 345600 pixel. Ogni pixel ha 3 colori a 24 bit (8 bit a colore), quindi per ogni pixel sono necessari appunto 24 bit. Ciò significa per ogni frame sono necessari 8294400 bit. Per ogni secondo ci sono 30 frame; quindi per ogni secondo sono necessari 248832000 di bit. Avendo una durata totale del video di 133 minuti, abbiamo 7980 secondi....[]
Ma moltiplicando il numero di bit necessari ogni secondo per il numero di secondi viene un numero troppo grande (230 GB). Quindi appunto ho qualche dubbio sui calcoli che ho effettuato..


Title: Re:Quesiti a risposta aperta
Post by: SalvoCia on 09-06-2011, 15:07:46
Dato che c'è il rischio che questa domanda passi un pochino inosservata,
Non vedo il rischio, i miei commenti seguono una disciplina FIFO, escludendo i vostri post che non richiedono commenti, ad es. quelli di una delle due categorie che seguono:
  • risposte corrette e sufficientemente complete;
  • domande rivolte agli studenti (ad es., quella recente di SalvoCia (http://forum.sdai.unict.it/index.php?topic=12253.msg79294#msg79294)).
Prof la mia domanda non era esclusivamente rivolta ai soli studenti ma anche a lei una sua risposta sarebbe una cosa gradita :)


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 09-06-2011, 15:53:18
Code:
Può essere utile impiegare una IFU più costosa in Mic-2, ad es. con registro di scorrimento da 12 byte invece che 6? Quale sarebbe l'eventuale vantaggio (max 10 righe)?

Assolutamente. Nel mic -2 si è assunto un cache hit rate del 100% finora. Questo è
irrealistico. A volte un recupero della memoria sarà un cache miss e potrebbe durare un lungo lasso
di tempo. Avere una grande coda di byte precedentemente recuperati consentirà alla
macchina di continuare a funzionare anche ad un riferimento della memoria che richiede molto tempo.
Così, quando la fetch è costosa in termini di tempo la CPU può essere ancora in esecuzione.
Con un registro a scorrimento piccolo l' IFU potrebbe andare in stallo molto prima.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 09-06-2011, 15:58:40
Quesito 22 : Codificare in Mic-2 l'istruzione JVM DLOAD varnum, con indice di 1 byte, che inserisce nello stack la sequenza di 2 variabili locali che inizia a tale posizione (max 10 righe).

PopTwo1  MAR = LV + MBR1U; rd
PopTwo2  MAR = SP = SP + 1
PopTwo3  TOS = MDR; wr
PopTwo4
PopTwo5  MAR = LV + MBR1U; rd
PopTwo6  MAR = SP = SP + 1
PopTwo7  TOS = MDR; wr; goto(MBR1)

Fà un pò pena questo codice....è possibile ottimizzarlo?  :pray 


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 09-06-2011, 16:11:54
questa domanda mi ha messo un pochino in difficoltà:

La ALU a 8 bit, con input INC al riporto in ingresso a destra, può eseguire somme e sottrazioni a 8 bit in complemento a 2. Spiegare come (max 10 righe).

per cercare di rispondere alla domanda ho immaginato una ALU con 1 half adder (per il bit meno significativi) e 7 full adder (per quelli più significativi). in questo modo, almeno in teoria, la ALU sarebbe in grado di sommare gli input a0...a8 agli input b0...b8 senza problemi. l'input INC dovrebbe forzare  un carry bit nel bit meno significativo aggiungendo 1 al risultato. A questo punto ho immaginato non più un half adder al bit a destra, ma un full adder in grado di ricevere il carry a 1. per la somma a complemento a 2 basta relegare il bit più significativo al segno del valore.

professore, il ragionamento che ho fatto le sembra corretto?


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 09-06-2011, 16:18:23
Code:
Secondo il testo, sez. 4.5.1, la write allocation è vantaggiosa solo se seguita da scritture nella stessa linea di cache. Lo è altrettanto se seguita da letture nella linea allocata (max 10 righe)?

Si è vantaggiosa perchè in presenza di una cache miss il la cpu passa da uno stao invalido ad uno valido con la write allocation sia per le scritture consecutive che per le letture in quanto si risparmierebbe il tempo di andare in memoria.


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 09-06-2011, 16:22:47
Il testo originale specifica il bit di flag A del Pentium 4 come "carry out of bit 3"; se questo fosse il "riporto oltre il terzo bit", sarebbe poco utile alla somma BCD. Perché (max 10 righe)?


Se per esempio voglio sommare 8 + 8 = 16, ottengo come risultato della somma BCD il valore 10 e quindi devo aggiungere il numero 6 per correggere il risultato

0000 1000+
0000 1000
-----------------
0001 0000+ (10 in BCD)
0000 0110
-----------------
0001 0110 (16 in BCD)

Non ho capito cosa si intende con "riporto oltre il terzo bit" relativo alle somme BCD


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 09-06-2011, 16:48:36
Altra difficoltà:

ragazzi se sapete darmi una mano anche voi oltre al professore ve ne sarei grato. La domanda in questione è

Descrivere due modi diversi per avere in output da una ALU a 8 bit il valore costante -1 (in complemento a due), specificando in ciascun caso i valori dei sei segnali di controllo (max 10 righe).

Io avrei risposto in questo modo, facendo riferimento ad una tabella che compare al capitolo 4. Un primo modo potrebbe essere di assegnare 0 all'input di controllo F0, 1 ad F1, 0 ad entrambi ENA e ENB (quindi input A e B disabilitati entrambi), 0 all’input INC, e 1 all’input INVA. Un modo alternativo potrebbe essere assegnare 1 ad A, 1 ad entrambi F0 e F1, uno al solo abilitatore ENA (ENB resta a 0),  1 ad INVA e 1 ad INC.

In questo modo l'ALU, almeno in teoria, dovrebbe restituire proprio -1. Ho commesso qualche errore?


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 09-06-2011, 17:20:04
Io avrei risposto in questo modo, facendo riferimento ad una tabella che compare al capitolo 4. Un primo modo potrebbe essere di assegnare 0 all'input di controllo F0, 1 ad F1, 0 ad entrambi ENA e ENB (quindi input A e B disabilitati entrambi), 0 all’input INC, e 1 all’input INVA. Un modo alternativo potrebbe essere assegnare 1 ad A, 1 ad entrambi F0 e F1, uno al solo abilitatore ENA (ENB resta a 0),  1 ad INVA e 1 ad INC.

Penso sia giusto, quindi ricapitolando le funzioni sono:

   F0  F1  ENA  ENB  INVA INC  Function
     0    1     0      0       1     0       -1
     1    1     1      0       1     1       -A


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 09-06-2011, 17:30:17
Io avrei risposto in questo modo, facendo riferimento ad una tabella che compare al capitolo 4. Un primo modo potrebbe essere di assegnare 0 all'input di controllo F0, 1 ad F1, 0 ad entrambi ENA e ENB (quindi input A e B disabilitati entrambi), 0 all’input INC, e 1 all’input INVA. Un modo alternativo potrebbe essere assegnare 1 ad A, 1 ad entrambi F0 e F1, uno al solo abilitatore ENA (ENB resta a 0),  1 ad INVA e 1 ad INC.

Penso sia giusto, quindi ricapitolando le funzioni sono:

   F0  F1  ENA  ENB  INVA INC  Function
     0    1     0      0       1     0       -1
     1    1     1      0       1     1       -A

esattamente, pensavo proprio così


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 09-06-2011, 17:40:47
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Prof ma si intende in IJVM?


Title: Re:Quesiti a risposta aperta
Post by: pippo on 09-06-2011, 19:27:32
Quote
Può essere utile impiegare una IFU più costosa in Mic-2, ad es. con registro di scorrimento da 12 byte invece che 6? Quale sarebbe l'eventuale vantaggio (max 10 righe)?

Penso che la risposta potrebbe essere questa: Si,può essere utile in quanto avere una più ampia coda di byte precedentemente prelevati dalla memoria,consentirà alla macchina di restare in esecuzione anche quando un riferimento alla memoria richiede molto tempo.Così per la maggior parte del tempo di fetch dalla memoria,la CPU può restare ancora in esecuzione,contrariamente a quanto potrebbe avvenire invece con un registro di scorrimento più piccolo.


Title: Re:Quesiti a risposta aperta
Post by: pippo on 09-06-2011, 21:30:41
Quote
La paginazione e l'uso di un registro di rilocazione sono due meccanismi di realizzazione del collegamento dinamico. Confrontarne i rispettivi meriti ed eventuali inconvenienti (max 15 righe).

In una memoria virtuale costituita dalla memoria centrale e da una parte di memoria del disco vengono utlizzate varie tecniche di allocazione.Una è la paginzaione in cui un programma in esecuzione viene diviso in pagine grandi quanto i frame della memoria.Così si evita la frammentazione esterna e un allocazione contigua della memoria.L'unico svantaggio della paginazione è la frammentazione interna dell'ultima pagina e la sostituzione di una pagina allocata per fare spazio ad un altra.La rilocazione dinamica invece è un'altra tecnica che viene effettuata senza la memoria virtuale ma l'allocazione avviene direttamente nella memoria fisica.Si utilizza un registro base e un registro limite.Il primo contiene l'indirizzo in cui dovrà incominciare ad allocarsi il rpogramma nella memoria e il secondo contiene la lunghezza del programma.Questa tecnica però fa sorgere problemi di frammentazione interna ed esterna.

Quote
Confrontare almeno tre diverse modalità d'indirizzamento in termini dei loro effetti sulla lunghezza dell'istruzione e sul suo tempo di esecuzione (max 15 righe).

Il modo con cui un istruzione può specificare un operando è di contenere, nel campo riservato al suo indirizzo,l'operando stesso invece che un indirizzo o qualunque altra informazione che ne descriva la posizione.In questo modo(indirizzamento immediato) l'operando viene recuperato automaticamente dalla memoria.
Presenta lo svantaggio di poter formìnire un operando per volta. Un metodo per specificare un operando in memoria è darne l'indirizzo completo.
In questo indirizzamento(diretto) al pari di quello immediato presenta
alcune limitazioni: l'istruzione accederà sempre alla stessa locazione
di memoria, quindi il valore può cambiare ma nella locazione di memoria no.
L'indirizzamento a registro invece memorizza(al posto di quello diretto)l'operando
in un registro.I registri sono molto più veloci in accesso e hanno indirizzi brevi.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 09-06-2011, 21:40:01
Io invece ho un dubbio riguardo agli errori più comuni della programmazione assembly...quali potrebbero essere?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 05:52:20
Si potrebbe eseguire direttamente il codice di goto, in quanto non credo che si risparmierebbe un ciclo
È vero che non si risparmierebbe un ciclo, ma solo una parola della memoria di controllo, se si potesse sostituire "; goto T" con "; goto goto1" nelle istruzioni in cui occorre, ma non si può. La ragione è che l'indirizzo (nella memoria di controllo) della microistruzione da usare in alternativa a "F" deve risiedere nella metà alta della memoria (più precisamente, all'indirizzo di "F" incrementato di 0x100), mentre l'indirizzo associato all'etichetta goto1, essendo quello della prima microistruzione della sequenza che interpreta l'istruzione IJVM GOTO, deve coincidere con il codice operativo di quest'ultima, dunque deve occupare solo un byte, non 9 bit; in altre parole, deve trovarsi nella metà bassa della memoria di controllo.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 05:59:48
Non ho capito come applicare il fattore di compressione 5?
Può dividere per 5 lo spazio occupato da ciascuna immagine (48x106 B) oppure, equivalentemente, moltiplicare per 5 il n. di immagini archiviabili (22) che ha ottenuto.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 06:06:33
E quindi quale dovrebbe essere la risposta corretta?
L'ultima frase è sostanzialmente corretta:
I due tipi di arbitraggio sono simili, la differenza sta che nel'l'arbitraggio decentralizzato non ha l'arbitro e ciò lo rende più economico, più veloce e non soggetto ai potenziali guasti dell'arbitro.
La motivazione per i vantaggi indicati, seppur minimale, è sufficiente. A dire troppo si rischia...


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 06:14:20
Ma moltiplicando il numero di bit necessari ogni secondo per il numero di secondi viene un numero troppo grande (230 GB). Quindi appunto ho qualche dubbio sui calcoli che ho effettuato..
Tenga conto che il problema proposto è: "Calcolare il fattore di compressione ... con 3,5 GB per la traccia video". Non vedo perciò perché si debba considerare 230 GB un numero troppo grande.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 06:37:48
Sapreste rispondere a questa domanda??
Un calcolatore con un bus dati largo 32 bit usa una DRAM implementata con chip di 1 Mbit x 1. Qual è la più piccola memoria (in byte) che il calcolatore può avere (max 5 righe)?
Provi lei a rispondere, sfruttando la seguente dritta: poiché i chip di memoria impiegati sono "... x 1", ovvero accettano indirizzi di singoli bit in ciascun ciclo, per costruire un dato da 32 bit in un solo ciclo occorre selezionare 32 chip diversi in parallelo (ricevono tutti lo stesso indirizzo, e ciascuno fornisce uno dei 32 bit che costituiscono il dato).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 06:42:12
la mia domanda non era esclusivamente rivolta ai soli studenti ma anche a lei una sua risposta sarebbe una cosa gradita :)
OK, le ho riproposto il problema, equipaggiato di una dritta (http://forum.sdai.unict.it/index.php?topic=12253.msg79420#msg79420).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 07:00:26
Fà un pò pena questo codice....è possibile ottimizzarlo?  :pray 
Direi che conviene innanzitutto renderlo corretto, per pensare poi ad un'eventuale ottimizzazione. Premesso che le etichette appropriate dovrebbero essere Dload1, Dload2, etc., ecco le mie osservazioni (rimpiazzando l'etichetta PopTwo"n" con Dload"n"):
  • Perché il ciclo di attesa di Dload4?
  • La lettura lanciata in Dload5 legge esattamente ciò che è stato letto con quella lanciata in Dload1, mentre la variabile locale da caricare in cima allo stack è la successiva a quella già caricata nelle precedenti microistruzioni... Forse conviene salvare il MAR calcolato in Dload1 (assegnandolo anche a un altro registro nella stessa microistruzione).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 07:16:22
A questo punto ho immaginato non più un half adder al bit a destra, ma un full adder in grado di ricevere il carry a 1. per la somma a complemento a 2 basta relegare il bit più significativo al segno del valore.

professore, il ragionamento che ho fatto le sembra corretto?
No. A parte che il ragionamento (corretto) di avere il full adder anche a destra poteva farlo subito (altrimenti a chi va l'input INC?), la parte scorretta del ragionamento è quella finale, perché la rappresentazione degli interi in complemento a 2 non è la stessa cosa della rappresentazione in valore assoluto e segno (e inoltre, quale deus ex machina ci dice il "segno del valore" (risultante, suppongo)? Per determinare la risposta corretta occorre rammentare che, in complemento a 2:
  • la rappresentazione di -n si ottiene da quella di n prendendone il complemento a 1 (cioè, complementandone tutti i bit), sommandovi poi 1, e trascurando l'eventuale riporto oltre il bit di segno (noti che così la rappresentazione di -0 coincide con quella di 0);
  • per sottrarre m da n basta sommare -m a n.
Le propongo anche un supplemento di domanda, per raffinare la sua comprensione dell'aritmetica in complemento a 2: come si fa a stabilire se la somma (in complemento a 2) m+n eccede i limiti della rappresentazione (cioè, va in overflow)?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 07:19:49
Si è vantaggiosa perchè in presenza di una cache miss il la cpu passa da uno stao invalido ad uno valido con la write allocation sia per le scritture consecutive che per le letture in quanto si risparmierebbe il tempo di andare in memoria.
Spiacente, ma il presunto vantaggio è assolutamente trascurabile se la write allocation è seguita da una sequenza di letture: in assenza della write allocation, infatti, la prima delle successive letture caricherebbe la linea di memoria mancante nella cache, e riguardo alle successive letture non ci sarebbe alcuna differenza.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 07:35:22
Se per esempio voglio sommare 8 + 8 = 16, ottengo come risultato della somma BCD il valore 10 e quindi devo aggiungere il numero 6 per correggere il risultato

0000 1000+
0000 1000
-----------------
0001 0000+ (10 in BCD)
0000 0110
-----------------
0001 0110 (16 in BCD)
Corretto, ma cosa si usa per determinare il valore "1" del bit 4 del risultato? Il riporto dal bit 3 (che non è il terzo bit da destra, bensì il quarto).
Quote
Non ho capito cosa si intende con "riporto oltre il terzo bit" relativo alle somme BCD
Supponga che, per la somma BCD, si usi il riporto dal bit 2 (cioè il terzo da destra) invece che dal bit 3. Allora la somma 7+7 genera un tale riporto (e se ne deve tener conto nella conversione binario naturale --> BCD, perché il risultato 0xE non è una cifra decimale, dunque va convertita), ma anche la somma 4+4 genera un riporto dal bit 2, solo che in tal caso il risultato 0x8 è una  cifra decimale, dunque non va generato il riporto sulla cifra BCD successiva. In breve, non è il riporto dal bit 2 che determina se, nella somma BCD di due cifre decimali, vada generato un riporto (decimale) o no.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 07:48:08
Un modo alternativo potrebbe essere assegnare 1 ad A, 1 ad entrambi F0 e F1, uno al solo abilitatore ENA (ENB resta a 0),  1 ad INVA e 1 ad INC.
INC andrebbe posto a 0 anche in questo caso: "-1" è infatti rappresentato (in complemento a 2) dalla sequenza binaria di soli 1. Suppongo che qui, quando lei dice "assegnare 1 ad A" intenda che si assegni 1 a tutti i bit che costituiscono la sequenza binaria di A. Se invece intende che si assegni 1 al bit meno significativo di A, e 0 a tutti gli altri bit di A, allora sarebbe corretto porre INC a 1. Però, in entrambi i casi, non si ottiene il valore costante -1, bensì un valore che dipende dall'input A. Occorre invece escogitare un'altra combinazione dei sei segnali di controllo tale che, come nella prima soluzione, si ottiene -1 in output qualsiasi siano gli input A e B. Il commento continua nella risposta al messaggio appresso, dal suo collega.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 07:59:47
   F0  F1  ENA  ENB  INVA INC  Function
     0    1     0      0       1     0       -1
     1    1     1      0       1     1       -A
Come osservato nella risposta precedente, la seconda funzione qui non è la funzione costante -1, perché, al contrario, dà un output che dipende dall'input A. C'è un modo semplice per ottenere la seconda soluzione: seguire lo stesso approccio della prima, ma con una diversa selezione dell'operazione mediante F0,F1.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 08:02:16
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Prof ma si intende in IJVM?
Non necessariamente: IJVM, se lo preferisce, o anche MASM, o l'assembly dell'8088... qualsiasi linguaggio assemblativo va bene.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 08:19:13
La rilocazione dinamica invece è un'altra tecnica che viene effettuata senza la memoria virtuale [...] Questa tecnica però fa sorgere problemi di frammentazione interna ed esterna.
Non vedo come possano manifestarsi tali problemi, dal momento che non c'è memoria virtuale, dunque né paginazione né segmentazione. Vedo invece un altro problema: proprio perché non c'è né l'una né l'altra, il trasferimento da disco a memoria o viceversa va sempre fatto dell'intero programma.
Quote
In questo modo(indirizzamento immediato) l'operando viene recuperato automaticamente dalla memoria.
Coretto, ma perché il confronto con l'indirizzamento diretto sia chiaro, va aggiunto che in quello immediato l'operando è ottenuto dalla memoria nello stesso ciclo in cui si è prelevata l'istruzione, mentre in quello diretto occorre (almeno) un ciclo aggiuntivo.
Quote
In questo indirizzamento(diretto) al pari di quello immediato presenta
alcune limitazioni: l'istruzione accederà sempre alla stessa locazione
di memoria, quindi il valore può cambiare ma nella locazione di memoria no.
Corretto, in parte (in quello immediato il valore non può cambiare), ma irrilevante alla domanda: interessa il confronto in termini di lunghezza dell'istruzione e tempo di esecuzione (come, ad es., correttamente svolto nel resto della risposta).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-06-2011, 08:21:08
Io invece ho un dubbio riguardo agli errori più comuni della programmazione assembly...quali potrebbero essere?
V. Tanenbaum, 5a Ed., sez. 7.3.3.


Title: Re:Quesiti a risposta aperta
Post by: Flyer on 10-06-2011, 15:07:13
Quote
Definire una macro con 4 parametri A, B, C, D, da attualizzarsi con nomi di registri, che permuti circolarmente i contenuti dei primi tre, usando il quarto come registro di lavoro (max 10 righe).
E' una cosa del genere?
SCAMBIO MACRO A,B,C,D
                MOV D,A
                MOV A,C
                MOV B,C
                MOV C,D
                ENDM

        


Title: Re:Quesiti a risposta aperta
Post by: R3m on 10-06-2011, 15:26:18
Quote
Calcolare il fattore di compressione richiesto per memorizzare 133 minuti di video in un DVD con 3,5 GB per la traccia video, risoluzione di 720x480 pixel, colori a 24 bit, 30 frame/s

Io ho ragionato in questo modo, ma ho qualche dubbio  :boh

Ogni frame è composto da 720*480 pixel, cioè 345600 pixel. Ogni pixel ha 3 colori a 24 bit (8 bit a colore), quindi per ogni pixel sono necessari appunto 24 bit. Ciò significa per ogni frame sono necessari 8294400 bit. Per ogni secondo ci sono 30 frame; quindi per ogni secondo sono necessari 248832000 di bit. Avendo una durata totale del video di 133 minuti, abbiamo 7980 secondi....[]
Ma moltiplicando il numero di bit necessari ogni secondo per il numero di secondi viene un numero troppo grande (230 GB). Quindi appunto ho qualche dubbio sui calcoli che ho effettuato..


230 GB / 65 (fattore di compressione) sarebbe 3,5 circa....ma è fattibile un fattore di compressione 65?


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 10-06-2011, 15:43:58
A questo punto ho immaginato non più un half adder al bit a destra, ma un full adder in grado di ricevere il carry a 1. per la somma a complemento a 2 basta relegare il bit più significativo al segno del valore.

professore, il ragionamento che ho fatto le sembra corretto?
No. A parte che il ragionamento (corretto) di avere il full adder anche a destra poteva farlo subito (altrimenti a chi va l'input INC?), la parte scorretta del ragionamento è quella finale, perché la rappresentazione degli interi in complemento a 2 non è la stessa cosa della rappresentazione in valore assoluto e segno (e inoltre, quale deus ex machina ci dice il "segno del valore" (risultante, suppongo)? Per determinare la risposta corretta occorre rammentare che, in complemento a 2:
  • la rappresentazione di -n si ottiene da quella di n prendendone il complemento a 1 (cioè, complementandone tutti i bit), sommandovi poi 1, e trascurando l'eventuale riporto oltre il bit di segno (noti che così la rappresentazione di -0 coincide con quella di 0);
  • per sottrarre m da n basta sommare -m a n.

Sarebbe corretto allora rispondere rispondere come segue? La ALU a 8 bit, con input INC al riporto in ingresso a destra, può eseguire somme e sottrazioni a 8 bit in complemento a 2. Come?  Si immagini una ALU con 8 full adder. L'input INC fornisce in ingresso all'adder del bit meno significativo un 1. In questo modo si può procedere con somme e sottrazioni a complemento a due. per sottrarre m da n basta sommare -m a n. Per ricavare -m basta invertire ogni singolo bit di m e aggiungere 1 al risultato (grazie ad INC), ignorando poi un eventuale riporto di 1 finale che causerebbe un overflow.

Quote
Le propongo anche un supplemento di domanda, per raffinare la sua comprensione dell'aritmetica in complemento a 2: come si fa a stabilire se la somma (in complemento a 2) m+n eccede i limiti della rappresentazione (cioè, va in overflow)?

Dopo qualche ricerca ho studiato che la validità dell'operazione e l'appartenenza del risultato all'intervallo dei numeri rappresentabili è verificabile attraverso gli ultimi due bit di riporto ottenuti: bisogna verificare se il riporto è stato eseguito sul bit del segno (il bit più a sinistra, 0 per i positivi e 1 per i negativi) ma non è stato portato fuori, o viceversa; più semplicemente, se i due bit più a sinistra sulla riga dei riporti non sono entrambi 0 o 1.

Mi dica se sbaglio in qualcosa per favore  .wink mille grazie


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 10-06-2011, 16:26:42
Code:
Un disco da 64 settori di 512B per traccia compie una rotazione in 16 ms, con I/O in DMA su bus da 16 bit a 2 MHz. In che misura percentuale il DMA rallenta la CPU (max 5 righe)?

Il disco è dotato di 32 KB per traccia, che è 16K parole. Il trasferimento dei dati viene eseguito a 16K in 16 msec, che richiede 8,192 millisecondi di tempo di ciclo del bus. Questo lascia 7,808 msec per 16 msec per la CPU, riducendo così
7.808/16 o 48,8 per cento della sua velocità (cioè, è rallentato da 51,2per cento). Il numero di cicli di bus per istruzione è irrilevante.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 10-06-2011, 16:26:54
Fà un pò pena questo codice....è possibile ottimizzarlo?  :pray  
Direi che conviene innanzitutto renderlo corretto, per pensare poi ad un'eventuale ottimizzazione. Premesso che le etichette appropriate dovrebbero essere Dload1, Dload2, etc., ecco le mie osservazioni (rimpiazzando l'etichetta PopTwo"n" con Dload"n"):
  • Perché il ciclo di attesa di Dload4?
  • La lettura lanciata in Dload5 legge esattamente ciò che è stato letto con quella lanciata in Dload1, mentre la variabile locale da caricare in cima allo stack è la successiva a quella già caricata nelle precedenti microistruzioni... Forse conviene salvare il MAR calcolato in Dload1 (assegnandolo anche a un altro registro nella stessa microistruzione).

Ah si mi ero confuso con un altro esercizio che stavo svolgendo e ho copiato le etichette di quello  :-)|

Comunque, Dload4 è vuoto perchè deve aspettare nel ciclo precedente la scrittura del valore di MDR nell'indirizzo di MAR. Forse per sistemare il Dload5 è possibile usare MAR = LV + MBR1U + 1; rd ma non sono sicuro della correttezza. Salvando il valore di MAR in Dload1, avrei sempre lo stesso problema...


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 10-06-2011, 16:31:57
   F0  F1  ENA  ENB  INVA INC  Function
     0    1     0      0       1     0       -1
     1    1     1      0       1     1       -A
Come osservato nella risposta precedente, la seconda funzione qui non è la funzione costante -1, perché, al contrario, dà un output che dipende dall'input A. C'è un modo semplice per ottenere la seconda soluzione: seguire lo stesso approccio della prima, ma con una diversa selezione dell'operazione mediante F0,F1.

 F0  F1  ENA  ENB  INVA INC  Function
   0    1     0      0       1     0       -1
   1    1     0      0       1     1       -1

Prof altro non mi viene in mente


Title: Re:Quesiti a risposta aperta
Post by: Nyconator on 10-06-2011, 16:41:59
  F0  F1  ENA  ENB  INVA INC  Function
     0    1     0      0       1     0       -1
     1    1     1      0       1     1       -A
Come osservato nella risposta precedente, la seconda funzione qui non è la funzione costante -1, perché, al contrario, dà un output che dipende dall'input A. C'è un modo semplice per ottenere la seconda soluzione: seguire lo stesso approccio della prima, ma con una diversa selezione dell'operazione mediante F0,F1.

 F0  F1  ENA  ENB  INVA INC  Function
   0    1     0      0       1     0       -1
   1    1     0      0       1     1       -1

Prof altro non mi viene in mente

credo che in un caso f0->0, f1->1 (01:si indica l'operazione OR), nell'altro caso f0->1, f1->0 (10:si indica l'operazione NOT). in entrambi i casi, facendo qualche conto, il segnale uscente dovrebbe essere -1, senza input esterni, ovviamente supponendo che gli altri parametri siano in successione 0      0       1     0       -1. almeno ho immaginato fosse così, lascerò la parola al prof  .wink



Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 10-06-2011, 17:23:35
Perché conviene memorizzare sequenzialmente, nella memoria di controllo di Mic-4, le micro-operazioni di ciascuna istruzione IJVM, invece di uno schema simile a quello di Mic-1 (max 15 righe)?


Nel Mic-4, l'unità di decodifica è dotata di una propria ROM indicizzata per mezzo di codice IJVM. L'unità di decodifica invia all'unità di accodamento l'indice nella ROM delle microoperazioni che ha trovato nella sua tabella. Quindi penso che sia una questione di efficienza  .penso


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 10-06-2011, 17:39:59
Code:
Perché solo alcune delle istruzioni del livello macchina del sistema operativo sono interpretate da quest'ultimo, mentre un microprogramma interpreta tutte le istruzioni del livello ISA (max 5 righe)?


Affidare il compito di interpretare tutte le istruzioni al sistema operativo provoca una inefficienza di prestazioni nella macchina.Per esempio l'istruzione ADD può essere gestita dal microprogramma che può gestirla perfettamente


Title: Re:Quesiti a risposta aperta
Post by: SalvoCia on 11-06-2011, 10:22:44
Sapreste rispondere a questa domanda??
Un calcolatore con un bus dati largo 32 bit usa una DRAM implementata con chip di 1 Mbit x 1. Qual è la più piccola memoria (in byte) che il calcolatore può avere (max 5 righe)?
Provi lei a rispondere, sfruttando la seguente dritta: poiché i chip di memoria impiegati sono "... x 1", ovvero accettano indirizzi di singoli bit in ciascun ciclo, per costruire un dato da 32 bit in un solo ciclo occorre selezionare 32 chip diversi in parallelo (ricevono tutti lo stesso indirizzo, e ciascuno fornisce uno dei 32 bit che costituiscono il dato).

4 byte?


Title: Re:Quesiti a risposta aperta
Post by: R3m on 12-06-2011, 11:34:11
Quesito 17 : In un multiprocessore con bus condiviso, che succede se due processori cercano di accedere alla memoria globale nello stesso istante? È possibile che vi accedano simultaneamente (max 5 righe)?

Non ho capito, nel libro si parla di tali processori, ma di condiviso c'è solo la memoria. Il bus è tra le CPU e la memoria, credo si intenda quello (non si parla di bus tra CPU e CPU). Comunque, se si riferisce alla memoria, è possibile che si acceda a parti della memoria che stà leggendo un'altra CPU, ma non viene spiegato cosa succede (li si parla di un algoritmo che cerca gli oggetti in un'immagine, le 16 CPU trovano gli oggetti ma si deve "correggere" il valore via software, dato che tutte e 16 trovano oggetti già trovati).

Calcolare quanti nanosecondi impiega Mic-1 a 2 GHz per eseguire l'istruzione Java "i = j + k;" (max 5 righe).

Tale codice in Mic-1 ha bisogno di 2 ILOAD (j e k), un ISTORE (i) e un IADD (j+k), ovvero 5+5 (iload)+ 6 (istore) + 3 (iadd) = 19 istruzioni da eseguire. Dato che 2 Ghz consentono 2 miliardi di operazioni al secondo, con una proporzione (2 miliardi : 1 = 19 : x) otteniamo 0,0000000095 sec, il nanosecondo è un miliardesimo di secondo, quindi 9,5 ns.


Title: Re:Quesiti a risposta aperta
Post by: ZlatanCld on 12-06-2011, 16:02:23
In un multiprocessore con bus condiviso, che succede se due processori cercano di accedere alla memoria globale nello stesso istante? È possibile che vi accedano simultaneamente (max 5 righe)?

Dato che le cpu devono usare lo stesso bus per accedere alla memoria, in caso di accesso simultaneo si verifica il cosiddetto collo di bottiglia; la cpu manda la richiesta al modulo di memoria e libera il bus. Non appena la memoria sarà libera (ha finito di comunicare con altre cpu), risponderà a quella particolare cpu utilizzando il bus. Non potrà quindi utlizzare lo stesso bus per comunicare simultaneamente con più cpu.

Un modello di consistenza della memoria in un multiprocessore è una sorta di contratto tra il software e la memoria. In che senso (max 10 righe)?

Rappresenta una sorta di contratto tra software e hardware perché se il software rispetta certe regole, allora la memoria fornirà un certo tipo di risultati.
Se ad esempio viene scelta una consistenza stretta, la memoria farà in modo che ad ogni lettura di una certa locazione, si ritorni l’ultimo valore scritto in quella locazione.
Quindi, la scelta di un particolare modello di consistenza deciderà in maniera univoca come si comporterà la memoria nel caso in cui la cpu tenti di leggere una locazione scritta in precedenza da altre cpu.

La tolleranza alle cadute di un grafo connesso è il massimo numero di archi rimovibili pur lasciandolo connesso. Essa vale m-n+1 per un grafo connesso di n nodi e m archi: perché (max 5 righe)?

Un grafo con n nodi per essere connesso deve avere minimo n-1 archi (in modo che ogni arco congiunga due nodi differenti); quindi, se il numero di archi (m) fosse maggiore di n-1, posso rimuovere al massimo m-n+1 archi affinchè m non risulti minore di n-1.
 
Come è definita la larghezza di banda di bisezione di una rete di interconnessione (max 10 righe)?

La larghezza di banda di bisezione ci permette di conoscere la quantità di dati che la rete di interconnessione può trasferire al secondo. Per calcolarla, si bipartisce il grafo di rappresentazione della rete, in modo che ogni parte abbia un ugual numero di nodi, eliminando inoltre gli archi che collegano nodi appartenenti a parti diverse; di questa particolare partizione, si calcola la larghezza di banda degli archi rimossi. Dato che per ogni rete è comunque possibile realizzare più partizioni differenti ( raggruppando in modo diverso i nodi), per ogni partizione si calcolerà una certa larghezza di banda relativa agli archi rimossi; la minima tra tutte rappresenterà la larghezza di banda di bisezione della rete.

Perché i calcolatori paralleli con rete di interconnessione ad albero o ad anello non sono scalabili, mentre lo sono quelli con rete di interconnessione a griglia o ad ipercubo (max 10 righe)?

Le reti di interconnessione ad albero o ad anello non sono scalabili perché la capacità della rete non aumenta all’aumentare delle richieste. Prendendo come esempio la rete rappresentata da un albero, dato che la larghezza di banda di bisezione è uguale alla capacità dei collegamenti, aggiungendo un nodo (un richiedente) si aggiunge sempre un solo arco (collegamento); inoltre la richiesta di collegamenti è maggiore in prossimità della radice dell’albero, e ciò rappresenta un collo di bottiglia per la rete stessa. Queste caratteristiche non solo tipiche di un calcolatore scalabile. Per una rete come quella di un ipercubo invece, la scalabilità è rispettata dato che al crescere del numero di nodi si ha un più alto numero di collegamenti, e che la latenza cresce all’aumentare delle dimensioni della rete.

Perché le funzionalità relative alla sicurezza sono particolarmente importanti nei sistemi di grid computing (max 10 righe)?

Lo scopo delle grid computing è quello di creare una sorta di infrastruttura per la condivisione di risorse tra organizzazioni differenti, accumunate da un obiettivo comune. Com’è normale che sia, ogni organizzazione che permette la condivisione delle proprie risorse con le altre componenti della grid computing, vuole garantita un alto livello di sicurezza che consiste nel conoscere con precisione chi accede alle proprie risorse, con quale frequenza e con quale intensità. Senza queste misure di sicurezza, nessuna organizzazione condividerebbe le proprie risorse.


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 12-06-2011, 16:23:24
Le due frasi seguenti, riprodotte dai due paragrafi del testo citati, appaiono in contraddizione. Lo sono? Se sì, quale delle due è corretta? Se no, perché (max 5 righe)?
    * 4.4.2, ultimo paragrafo in "Unione del ciclo d'interpretazione con il microcodice":
      "Il prezzo da pagare è solamente un piccolo incremento della memoria
      di controllo."
    * 4.4.4, primo paragrafo:
      "il costo della IFU è senza dubbio maggiore del guadagno ottenuto
      riducendo la memoria di controllo."



Si sono in contraddizone ed è giusta quella del paragrafo 4.4.2 perchè  il prezzo da pagare è solamente un piccolo incremento della memoria di controllo.


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 12-06-2011, 19:50:59
20. Istruzioni virtuali di I/O e per il calcolo parallelo
Quesito 22 : Descrivere le operazioni sui semafori e i requisiti che la loro definizione impone alla loro implementazione in un sistema operativo (max 15 righe).

I semafori presentano 2 operazioni: Up, Down. La prima per incrementare un semaforo di 1, la seconda per decrementarlo di 1.
Ad esempio se si effettua un'operazione down di un semaforo che ha un valore positivo, questo viene decremento di 1 e il processo corrispondente continua. Altrimenti la down non può andare a buon fine e il processo corrispondente "viene messo a dormire" finchè un altro processo esegue una up su quel semaforo. Vicersa se si effettua un'operazione up.
Affinchè questo accada correttamente, il sistema operativo deve proibire che un semaforo venga usato da più di un processo per volta, o può almeno a limitarsi a interrompere l'esecuzione di ogni altro processo finchè quello impiegato nella chiamata di sistema non la porti a compimento.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-06-2011, 22:42:41
4 byte?
Cominciamo con il fatto che, se la capacità di un chip è di 1 Mbit, meno di tanta capacità la memoria minima non può avere.
Aggiungiamo il fatto che, in base al ragionamento di cui alla nota precedente, la memoria deve avere almeno 32 chip. Qual è la conclusione?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-06-2011, 22:54:33
SCAMBIO MACRO A,B,C,D
                MOV D,A
                MOV A,C
                MOV B,C
                MOV C,D
                ENDM
Poiché salva A nel registro di lavoro (quarto parametro formale), per poi caricare A con il contenuto di C, se ne deduce che la permutazione circolare intesa sia A ← C ← B ← A. Allora le due ultime istruzioni devono essere:
                MOV C,B
                MOV B,D
Quote
               MACRO  A,C,B,D
           MACRO  B,A,C,D
                MACRO C,B,A,D
                MACRO B,C,A,D
                MACRO C,A,B,D
Che roba è, un residuo di editing che ha dimenticato di cancellare? Non sono né definizioni di macro né invocazioni della macro sopra definita.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-06-2011, 23:00:52
....ma è fattibile un fattore di compressione 65?
Per un video, direi di sì: le tecniche differenziali memorizzano solo le differenze tra una immagine e la precedente, e queste sono molto piccole se non c'è cambio di scena ma solo movimento (in 1/30 di secondo).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-06-2011, 23:29:25
ignorando poi un eventuale riporto di 1 finale che causerebbe un overflow.
non esattamente: "ignorando l'eventuale riporto oltre il bit di segno". La condizione di overflow è definita in altro modo, v. domanda successiva.
Quote
bisogna verificare se il riporto è stato eseguito sul bit del segno (il bit più a sinistra, 0 per i positivi e 1 per i negativi) ma non è stato portato fuori, o viceversa;
che vuol dire "viceversa"? Consideri l'analisi dei casi articolata nelle seguenti domande:
  • Se non c'è riporto sul bit di segno ma c'è oltre il bit di segno, si ha overflow?
  • Se c'è riporto sul bit di segno ma non oltre il bit di segno, si ha overflow?
  • Se c'è riporto sia sul bit di segno sia oltre il bit di segno, si ha overflow?
  • Se non c'è riporto sul bit di segno né oltre il bit di segno, si ha overflow?
In 2 dei 4 casi si ha overflow, negli altri 2 no. L'individuazione dei casi di overflow in questo modo dovrebbe chiarire il senso del suo "viceversa".
Quote
più semplicemente, se i due bit più a sinistra sulla riga dei riporti non sono entrambi 0 o 1.
è vero che questa caratterizzazione è più semplice, ma manca la conclusione (forse sottintesa, ma va esplicitata), cioè, "se i due bit ... non sono entrambi 0 o 1" si ha overflow? O non si ha?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-06-2011, 23:48:46
richiede 8,192 millisecondi di tempo di ciclo del bus. Questo lascia 7,808 msec per 16 msec per la CPU, riducendo così
7.808/16 o 48,8 per cento della sua velocità (cioè, è rallentato da 51,2per cento). Il numero di cicli di bus per istruzione è irrilevante.
Infatti non è un dato del problema... Se la risposta è ottenuta per traduzione da una risposta in inglese, la traduzione è un po' affrettata: che  vuol dire "richiede 8,192 millisecondi di tempo di ciclo del bus."? Il tempo di ciclo del bus è il reciproco della frequenza, ovvero 500 ns, cioè 0.5 msec. La traduzione corretta del frammento citato è "8,192 msec di tempo di ciclo del bus ogni 16 msec di tempo reale", e nella frase successiva è meglio sostituire "per" con "ogni".


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 00:02:40
Comunque, Dload4 è vuoto perchè deve aspettare nel ciclo precedente la scrittura del valore di MDR nell'indirizzo di MAR.
No, è questo il punto: non occorre. La scrittura lanciata nel ciclo precedente impiega MAR durante il ciclo successivo, nella parte che precede il fronte di salita; se una microistruzione in tale ciclo sovrascrive MAR, la sovrascrittura avrà luogo dopo il fronte di salita, dunque non occorre attendere.
Quote
Forse per sistemare il Dload5 è possibile usare MAR = LV + MBR1U + 1; rd ma non sono sicuro della correttezza. Salvando il valore di MAR in Dload1, avrei sempre lo stesso problema...
Io direi che, a causa del modo in cui funziona la IFU in Mic-2, se usa "MAR = LV + MBR1U + 1; rd" legge in realtà il byte successivo a quello (precedentemente letto) che contiene l'operando dell'istruzione, dunque chissà che succede... Se invece salva il valore di MAR calcolato in Dload1, basta incrementarlo di 1 per avere l'indirizzo della seconda variabile locale su cui l'istruzione deve operare.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 00:06:48
F0  F1  ENA  ENB  INVA INC  Function
   0    1     0      0       1     0       -1
   1    1     0      0       1     1       -1
INC dev'essere 0 anche nel secondo caso, no? Specifica la somma aritmetica di 0 e -1.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 00:16:44
F0  F1  ENA  ENB  INVA INC  Function
   0    1     0      0       1     0       -1
   1    1     0      0       1     1       -1

credo che in un caso f0->0, f1->1 (01:si indica l'operazione OR), nell'altro caso f0->1, f1->0 (10:si indica l'operazione NOT). in entrambi i casi, facendo qualche conto, il segnale uscente dovrebbe essere -1, senza input esterni, ovviamente supponendo che gli altri parametri siano in successione 0      0       1     0       -1.
Premesso, che il "-1"  finale non è un parametro (segnale di controllo, in input), questa configurazione degli altri segnali di controllo va bene per la selezione di funzione OR (come anche lei nota) come pure per la selezione di funzione "+" (dunque la seconda soluzione proposta dal suo collega va emendata); per la selezione di funzione NOT va aggiunto che il valore di INVA è irrilevante (vanno bene sia 0 che 1).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 00:26:02
Perché conviene memorizzare sequenzialmente, nella memoria di controllo di Mic-4, le micro-operazioni di ciascuna istruzione IJVM, invece di uno schema simile a quello di Mic-1 (max 15 righe)?


Nel Mic-4, l'unità di decodifica è dotata di una propria ROM indicizzata per mezzo di codice IJVM. L'unità di decodifica invia all'unità di accodamento l'indice nella ROM delle microoperazioni che ha trovato nella sua tabella. Quindi penso che sia una questione di efficienza  .penso
Non solo. Un aspetto architetturale rilevante è come viene trattata la sequenza delle microoperazioni estratta dalla memoria di controllo: va accodata, perché le microoperazioni vengano eseguite in pipeline. Dunque non c'è ragione di collocarle nella memoria di controllo in altro ordine se non quello della sequenza in cui vanno poi accodate per la successiva pipeline.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 00:47:01
può essere gestita dal microprogramma che può gestirla perfettamente
corretto, ma un po' ripetitivo.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 01:12:51
Non ho capito, nel libro si parla di tali processori, ma di condiviso c'è solo la memoria. Il bus è tra le CPU e la memoria, credo si intenda quello (non si parla di bus tra CPU e CPU).
Il testo specifica vari livelli ai quali può essere realizzata la condivisione della memoria. Dire che il multiprocessore è a bus condiviso equivale a dire che i processori condividono la memoria al livello dell'hardware, ovvero condividono lo spazio degli indirizzi fisici di memoria: sia le CPU che la memoria accedono allo stesso bus, non essendovi altre vie di comunicazione. Le CPU non comunicano direttamente fra loro bensì attraverso la condivisione della memoria.
Quote
Comunque, se si riferisce alla memoria, è possibile che si acceda a parti della memoria che stà leggendo un'altra CPU, ma non viene spiegato cosa succede (li si parla di un algoritmo che cerca gli oggetti in un'immagine, le 16 CPU trovano gli oggetti ma si deve "correggere" il valore via software, dato che tutte e 16 trovano oggetti già trovati).
Premetto che nella figura che vedo io nel testo (5a Edizione italiana) ci sono 3 oggetti riconosciuti da una sola CPU ciascuno e altri 3 riconosciuti da più CPU, ma non tutte. Poi, per rispondere al "cosa succede" basta chiedersi se esiste uno schema di arbitraggio del bus che permetta il controllo simultaneo del bus da più processori. Non mi risulta, e sarebbe comunque uno schema dagli esiti difficilmente prevedibili.
Quote
Tale codice in Mic-1 ha bisogno di 2 ILOAD (j e k), un ISTORE (i) e un IADD (j+k), ovvero 5+5 (iload)+ 6 (istore) + 3 (iadd) = 19 istruzioni da eseguire.
19 microistruzioni, alle quali va aggiunta la Main1 per ciascuna delle 4 istruzioni IJVM da lei correttamente individuate, dunque un totale di 23 cicli. Il resto del calcolo va corretto sostituendo 23 a 19.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 01:38:06
in caso di accesso simultaneo si verifica il cosiddetto collo di bottiglia;
La risposta è sostanzialmente corretta, ma il termine "collo di bottiglia" caratterizza il degrado delle  prestazioni che si verifica quando un componente, ad es. bus, o memoria, rallenta la velocità di funzionamento degli altri rispetto alle loro possibilità.
Quote
un ipercubo invece, la scalabilità è rispettata dato che al crescere del numero di nodi si ha un più alto numero di collegamenti,
questo è vero anche per l'albero, tuttavia la larghezza di banda di bisezione non aumenta nel caso dell'albero. Come aumenta nel caso della griglia o dell'ipercubo?
Quote
e che la latenza cresce all’aumentare delle dimensioni della rete.
Questo è vero, e sarebbe un ostacolo alla scalabilità, se la velocità di crescita della latenza fosse lineare o peggio. Quanto velocemente cresce la latenza nella griglia o nell'ipercubo, al crescere della dimensione n del rispettivo lato?
Quote
ogni organizzazione che permette la condivisione delle proprie risorse con le altre componenti della grid computing,
più precisamente, alcune, di solito non tutte, le organizzazioni che accedono alla grid: quelle che costituiscono una stessa organizzazione virtuale, le cui regole stabiliscono quali organizzazioni hanno accesso alle risorse condivise dalle organizzazioni afferenti all'organizzazione virtuale stessa.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 01:43:15
Si sono in contraddizone
giusto (solo) fin qui
Quote
ed è giusta quella del paragrafo 4.4.2 perchè  il prezzo da pagare è solamente un piccolo incremento della memoria di controllo.
No: questa non è una spiegazione ma una riproduzione del testo citato dal par. 4.4.2. È invece corretta l'altra, e le chiedo: perché la presenza di una IFU permette di ridurre la quantità di memoria di controllo usata dal microprogramma?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 01:48:00
Vicersa se si effettua un'operazione up.
"Viceversa", suppongo: ma che vuol dire? Può accadere che un processo debba essere messo in attesa perché una Up non può essere completata?


Title: Re:Quesiti a risposta aperta
Post by: Flyer on 13-06-2011, 10:10:59
Che roba è, un residuo di editing che ha dimenticato di cancellare? Non sono né definizioni di macro né invocazioni della macro sopra definita.
Sisi ho dimenticato di cancellarla  :-OK
Grazie della risposta.


Title: Re:Quesiti a risposta aperta
Post by: R3m on 13-06-2011, 10:11:59
Comunque, Dload4 è vuoto perchè deve aspettare nel ciclo precedente la scrittura del valore di MDR nell'indirizzo di MAR.
No, è questo il punto: non occorre. La scrittura lanciata nel ciclo precedente impiega MAR durante il ciclo successivo, nella parte che precede il fronte di salita; se una microistruzione in tale ciclo sovrascrive MAR, la sovrascrittura avrà luogo dopo il fronte di salita, dunque non occorre attendere.
Quote
Forse per sistemare il Dload5 è possibile usare MAR = LV + MBR1U + 1; rd ma non sono sicuro della correttezza. Salvando il valore di MAR in Dload1, avrei sempre lo stesso problema...
Io direi che, a causa del modo in cui funziona la IFU in Mic-2, se usa "MAR = LV + MBR1U + 1; rd" legge in realtà il byte successivo a quello (precedentemente letto) che contiene l'operando dell'istruzione, dunque chissà che succede... Se invece salva il valore di MAR calcolato in Dload1, basta incrementarlo di 1 per avere l'indirizzo della seconda variabile locale su cui l'istruzione deve operare.

OPC = MAR = LV + MBR1U; rd
MAR = SP = SP + 1
TOS = MDR; wr
MAR = OPC + 1; rd
MAR = SP = SP + 1
TOS = MDR; wr; goto(MBR1)


(Non ho messo Dload1,2 ecc... volutamente)


Title: Re:Quesiti a risposta aperta
Post by: AleX on 13-06-2011, 15:12:12
17 : Le istruzioni del Pentium possono raggiungere i 17 byte di lunghezza. Il Pentium è un processore VLIW? Motivare la risposta (max 5 righe).
NO.perché il pentium4 utilizza il multithreading a cui la Intel ha dato il nome di Hyperthreading.
Prof. volevo sapere se,oltre ad essere quella giusta,poteva bastare come risposta.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 15:34:32
NO.perché il pentium4 utilizza il multithreading a cui la Intel ha dato il nome di Hyperthreading.
Prof. volevo sapere se,oltre ad essere quella giusta,poteva bastare come risposta.
No. Quello che lei ha scritto è vero, ma non coglie la ragione per la quale il Pentium 4 non è un processore VLIW. Per questa, veda il commento alla risposta proposta da R3m (http://forum.sdai.unict.it/index.php?topic=12253.msg79299#msg79299) (ultimo paragrafo nel post).


Title: Re:Quesiti a risposta aperta
Post by: AleX on 13-06-2011, 16:39:42
Indicare i principali componenti core tipicamente presenti in un processore di rete ad alte prestazioni (max 15 righe).
 :-)|  :-)|  :-)| qualche suggerimento o aiuto! pls! :pray


Title: Re:Quesiti a risposta aperta
Post by: Jack&Daxter on 13-06-2011, 17:30:56
Ragazzi potreste darmi le risposte a queste domande se le avete fatte?

Code:
Indicare per quali tipologie di computer sono adoperate le seguenti CPU: Pentium 4, UltraSPARC, Intel 8051 (max 5 righe).

Descrivere concisamente tre possibili applicazioni dei chip RFID (max 15 righe)

Dimostrare che ciascuno degli assiomi di idempotenza delle operazioni di reticolo è deducibile dagli altri sei assiomi equazionali di reticolo (max 5 righe).

Dimostrare che da ciascuna delle due definizioni di ordinamento in un reticolo come abbreviazione equazionale seguono riflessività, antisimmetria e transitività della relazione definita (max 5 righe).



Title: Re:Quesiti a risposta aperta
Post by: soad on 13-06-2011, 17:48:36
Code:
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Avrei un piccolo problema su questa domanda.
Dato che non ricordo istruzioni per la moltiplicazione diretta avevo pensato di implentarlo tramite dei cicli.
In pratica pensavo di salvare n in due registri (SP ed H), e sommare il valore del di SP tante volte quanto H (usando un apposito registroche si decrementa ad ogni passaggio fino ad egualiare H), salvare (alla fine del ciclo) il risultato su SP mentre H viene decrementato fino ad uno che sarà la fine del programma.

spero di essere stato chiaro ;)


Title: Re:Quesiti a risposta aperta
Post by: peppe89ct on 13-06-2011, 18:25:41
Code:
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Avrei un piccolo problema su questa domanda.
Dato che non ricordo istruzioni per la moltiplicazione diretta avevo pensato di implentarlo tramite dei cicli.
In pratica pensavo di salvare n in due registri (SP ed H), e sommare il valore del di SP tante volte quanto H (usando un apposito registroche si decrementa ad ogni passaggio fino ad egualiare H), salvare (alla fine del ciclo) il risultato su SP mentre H viene decrementato fino ad uno che sarà la fine del programma.

spero di essere stato chiaro ;)
Leggi bene la domanda.......La domanda chiede in un linguaggio assemblativo!!!!


Title: Re:Quesiti a risposta aperta
Post by: pippo on 13-06-2011, 18:59:14
Quote
Può essere utile impiegare una IFU più costosa in Mic-2, ad es. con registro di scorrimento da 12 byte invece che 6? Quale sarebbe l'eventuale vantaggio (max 10 righe)?

io penso che potrebbe essere utile utilizzare una IFU con registro di scorrimento da 12 byte(pur avendo come contro il costo maggiore),in quanto in questo modo possono essere prelevati dalla memoria più byte e quindi sarebbe una sorta di vantaggio proprio perchè si eviterebbero successivi accesi alla memoria che richiederebbero più tempo e risulterebbero quindi un "contro".


Title: Re:Quesiti a risposta aperta
Post by: m3l0 on 13-06-2011, 19:09:01
Secondo me è corretta la parte 4.4.4, perchè aumentando l'IFU il costo sarebbe maggiore rispetto al guadagno ottenuto riducendo la memoria di controllo, perchè un IFU più grande permette di eliminare un ciclo del microprogramma


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 20:36:44
Indicare i principali componenti core tipicamente presenti in un processore di rete ad alte prestazioni (max 15 righe).
 :-)|  :-)|  :-)| qualche suggerimento o aiuto! pls! :pray
Tanenbaum 5a Ed. italiana, sez. 8.2.1, Figura 8.15.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 20:47:29
Dato che non ricordo istruzioni per la moltiplicazione diretta avevo pensato di implentarlo tramite dei cicli.
Così però svolge un altro esercizio, e non è detto che 10 righe siano sufficienti. Se vuole usare un'estensione di IJVM come linguaggio assemblativo, può assumere che sintassi e semantica dell'istruzione per la moltiplicazione in tale estensione siano consistenti con quella di altre operazioni aritmetiche sugli interi, ad es. IMUL (similmente a IADD o ISUB) ha i due operandi nelle due posizioni più alte occupate nello stack degli operandi, e li rimuove dallo stack per poi aggiungervi in cima il risultato della moltiplicazione.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 20:58:12
Quote
Può essere utile impiegare una IFU più costosa in Mic-2, ad es. con registro di scorrimento da 12 byte invece che 6? Quale sarebbe l'eventuale vantaggio (max 10 righe)?

io penso che potrebbe essere utile utilizzare una IFU con registro di scorrimento da 12 byte(pur avendo come contro il costo maggiore),in quanto in questo modo possono essere prelevati dalla memoria più byte e quindi sarebbe una sorta di vantaggio proprio perchè si eviterebbero successivi accesi alla memoria che richiederebbero più tempo e risulterebbero quindi un "contro".
La risposta è molto oscura: perché mai successivi prelievi di byte di codice dalla memoria dovrebbero richiedere più tempo di quello che richiedono per il prefetch da parte della IFU? veda piuttosto la risposta valida data da peppe89ct (http://forum.sdai.unict.it/index.php?topic=12253.msg79379#msg79379).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2011, 21:05:17
un IFU più grande permette di eliminare un ciclo del microprogramma
Non conta quanto sia grande la IFU, purché il registro di scorrimento non sia troppo piccolo, conta il fatto che esegue il prefetch in parallelo con le micro-operazioni del percorso dati principale. Questo permette di eliminare (almeno) un ciclo del microprogramma per ciascuna istruzione IJVM interpretata.


Title: Re:Quesiti a risposta aperta
Post by: fabio_bm on 16-06-2011, 17:22:12
Il testo originale specifica il bit di flag A del Pentium 4 come "carry out of bit 3"; se questo fosse il "riporto oltre il terzo bit", sarebbe poco utile alla somma BCD. Perché (max 10 righe)?


Nella somma BCD sono considerati validi i valori numerici compresi tra 0 e 9, e se  il bit di flag A del Pentium 4 fosse il riporto oltre il terzo bit, potremmo già uscire dal range di valori permessi con 3 bit, senza avere un riporto.


Title: Re:Quesiti a risposta aperta
Post by: fabio_bm on 16-06-2011, 17:26:47
Il bit A, o di riporto ausiliario, nel registro di flag del Pentium 4 indica un riporto oltre il bit 3 nella somma. Perché ciò è utile nella somma BCD (max 10 righe)?

Perchè nella somma BCD sono ammessi valori compresi tra 0 e 9, e quando otteniamo un valore maggiore di 9, abbiamo bisogno di usare il bit di riporto per non ottenere valori non validi.


Title: Re:Quesiti a risposta aperta
Post by: fabio_bm on 17-06-2011, 10:14:30
Confrontare almeno tre diverse modalità d'indirizzamento in termini dei loro effetti sulla lunghezza dell'istruzione e sul suo tempo di esecuzione (max 15 righe).

Indirizzamento immediato : Ha un tempo di esecuzione molto veloce, in quanto non deve essere effettuato il fetch dell'operando, perchè è già contenuto nell'istruzione; Tuttavia, la dimensione massima dell'operando è dipendente dalla grandezza del registro. La lunghezza dell'istruzione dipende dalla costante specificata.
Indirizzamento diretto : Il suo tempo di esecuzione è leggermente rallentato dall'accesso in memoria dell'indirizzo specificato, ed ha una lunghezza dell'istruzione maggiore (in media), in quanto si specifica l'indirizzo della memoria.
Indirizzamento a registro : Ha un tempo di esecuzione veloce, dovuto alla buona velocità di accesso ai registri, e lunghezza dell'istruzione breve, dovuto agli indirizzi brevi dei registri.


Title: Re:Quesiti a risposta aperta
Post by: AlaskanMalamute on 21-06-2011, 00:36:03
Code:
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Avrei un piccolo problema su questa domanda.
Dato che non ricordo istruzioni per la moltiplicazione diretta avevo pensato di implentarlo tramite dei cicli.
In pratica pensavo di salvare n in due registri (SP ed H), e sommare il valore del di SP tante volte quanto H (usando un apposito registroche si decrementa ad ogni passaggio fino ad egualiare H), salvare (alla fine del ciclo) il risultato su SP mentre H viene decrementato fino ad uno che sarà la fine del programma.

spero di essere stato chiaro ;)
Leggi bene la domanda.......La domanda chiede in un linguaggio assemblativo!!!!


IMPLEMENTATO CON ISTRUZIONI IJVM:

         BIPUSH n
           ISTORE n
           BIPUSH 1
           IF_ICMPEQ L1
           GOTO L2
L1:      GOTO  fine
L2:      POP
    ISTORE b
L3:    BIPUSH 1
    ILOAD b
    ISUB
         ISTORE n
         GOTO cond
cond:    BIPUSH 1
    ILOAD n
    IF_ICMPEQ fine
    GOTO MUL
MUL:     ILOAD r
         ILOAD b
    IADD
    ISTORE r
    ILOAD n
    BIPUSH 1
     ISUB
    ISTORE n
    BIPUSH 1
    ILOAD n
    IF_ICMPEQ fine
    GOTO MUL
FINE:    ISTORE r


Le variabili n,b,r sono locali...il risultato si troverà in r..

che ne pensa prof?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-06-2011, 01:01:52
Nella somma BCD sono considerati validi i valori numerici compresi tra 0 e 9, e se  il bit di flag A del Pentium 4 fosse il riporto oltre il terzo bit, potremmo già uscire dal range di valori permessi con 3 bit, senza avere un riporto.
Questa è una metà della spiegazione, se capisco bene, esemplificabile con la somma 8+8 (che non ha riporto dal terzo bit, bensì dal quarto). L'altra metà sta nel fatto che potremmo non uscire dal range dei valori di cifra decimale, pur avendo un riporto dal terzo bit, esemplificabile con la somma 4+4. Il riporto dal terzo bit dunque non serve.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-06-2011, 01:18:27
Perchè nella somma BCD sono ammessi valori compresi tra 0 e 9, e quando otteniamo un valore maggiore di 9, abbiamo bisogno di usare il bit di riporto per non ottenere valori non validi.
L'argomento non è sufficiente, come esemplificato dalla somma 5+5: dà un valore maggiore di 9, ma non c'è riporto dal bit 3. Occorre tener conto di due condizioni, per la somma BCD:
  • se la somma mod 16 è maggiore o minore di 9: se è maggiore, va apportata una correzione che genera un riporto sul nibble a sinistra;
  • se c'è un riporto dal bit 3, ovvero la somma è maggiore o uguale a 16; anche in questo caso si ha un riporto sul nibble a sinistra, ma la correzione da apportare al nibble di destra è diversa che nel caso precedente (dunque, in ogni caso, per determinare la correzione giusta del nibble di destra occorre tener conto del valore del riporto dal bit 3).
Nel primo caso, si sottrae 10 (decimale) al nibble di destra, nel  secondo caso gli si aggiunge 6 (poiché il riporto dal bit 3 equivale a sottrargli 16, mentre gli va sottratto solo 10 decimale).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-06-2011, 01:28:39
Indirizzamento immediato : [...] la dimensione massima dell'operando è dipendente dalla grandezza del registro.
Quale registro?
Quote
Indirizzamento a registro : Ha un tempo di esecuzione veloce, dovuto alla buona velocità di accesso ai registri,
Vero. È però utile tenere in conto che se il dato non è già presente nel registro, occorre un'istruzione in più per caricarvelo. Il vantaggio in termini di velocità complessiva di esecuzione dei programmi dipende dunque dall'ottimizzazione dell'uso dei registri effettuata dal compilatore: tanto migliore quanto più frequente è il riuso come operandi di dati già presenti nei registri, senza necessità di accessi alla memoria.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-06-2011, 01:43:29
IMPLEMENTATO CON ISTRUZIONI IJVM:
IJVM non ha istruzioni per la moltiplicazione, il che spiega perché il suo programma richieda ben più di 10 istruzioni. In linea di principio, non è una buona idea risolvere un problema diverso da quello proposto, perlomeno in sede di esame (si rischia di conseguire la valutazione 0 perché il problema proposto non è stato affrontato; in altra sede, naturalmente, è un esercizio legittimo e utile quanto qualsiasi altro).

Se vuole usare la sintassi IJVM potenziata con una istruzione per la moltiplicazione, la cosa più ovvia da fare è dare a quest'ultima una sintassi simile a quella delle altre operazioni aritmetiche, quali IADD e ISUB. Dunque, ad es., la nuova istruzione IMUL (senza operandi) estrae i suoi due argomenti dalla cima dello stack, e al posto del secondo vi pone il risultato della loro moltiplicazione (che si troverà dunque in cima allo stack dopo l'esecuzione di IMUL).

Un suggerimento per affrontare meglio il problema, disponendo dell'istruzione IMUL: definire il calcolo del fattoriale mediante un metodo ricorsivo (attenzione dunque al passaggio del parametro: deve avvenire per il tramite dello stack, prima dell'invocazione ricorsiva del metodo nel suo stesso corpo).


Title: Re:Quesiti a risposta aperta
Post by: Jack&Daxter on 23-06-2011, 12:22:48
Ragazzi mi aiutate a dire se la spiegazione che ho dato io alla domanda è corretta? Se è sbagliata potreste dirmi cosa aggiungere alla domanda?

DOMANDA+RISPOSTA NON MOTIVATA
Code:
Le chiamate di sistema sono :le istruzioni del livello OSM escluse quelle del livello ISA

RISPOSTA MOTIVATA
Code:
Premesso che il livello ISA può essere considerato l'interfaccia fra l'HW e il SW
 e che le istruzioni del livello OSM si occupano di implementare il S.O e di aggiungere
 nuove istruzioni e caratteristiche di più alto livello rispetto a quelle fornite dal livello ISA.
L'insieme d'istruzioni del livello OSM contengono pressochè tutte le istruzioni
del livello ISA,così come l'insieme delle nuove istruzioni aggiunte dal S.O dette
 chiamate di sistema o system call.Una chiamata di sistema invoca un predeterminato
 servizio del S.O, a tutti gli effetti una sua istruzione.


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 24-06-2011, 13:22:27
Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perchè sia meglio che lo sia?

Se un programma che utilizza la cache usa intensamente le parole comprese tra l'indirizzo 0 e x, si verificheranno costantemente dei conflitti e ogni riferimento alla memoria potrebbe potenzialmente espellere un elemento dalla cache. Una soluzione a questo problema problema è quello di consentire che in ciascun elemento della cache ci possano essere due o più linee.

Può andar bene?

Qualcuno saprebbe rispondere a questa domanda?
Code:
Nella microarchitettura Mic-1, il registro del bus  B è codificato in 4 bit della microistruzione, mentre i 9 bit del bus C sono mappati individualmente nel relativo campo. Perché?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-06-2011, 00:32:38
Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perchè sia meglio che lo sia?

Se un programma che utilizza la cache usa intensamente le parole comprese tra l'indirizzo 0 e x, si verificheranno costantemente dei conflitti e ogni riferimento alla memoria potrebbe potenzialmente espellere un elemento dalla cache. Una soluzione a questo problema problema è quello di consentire che in ciascun elemento della cache ci possano essere due o più linee.

Può andar bene?
No. Non risponde alla domanda posta (se per qualche motivo è meglio che il n. di vie k sia una potenza di 2). Inoltre, quanto asserito nella prima frase non ha molto senso: quanto vale x? Se x è un indirizzo nella prima linea di cache, non ci sarà alcun conflitto. Infine, non viene chiesto di spiegare perché sia utile avere cache a più vie. Per trovare la risposta corretta alla domanda, può chiedersi se ci sia qualche vantaggio nello scegliere una potenza di 2, anziché un numero che non lo è, quale numero di vie della cache.
Quote
Qualcuno saprebbe rispondere a questa domanda?
Lei no? Le suggerisco  di consultare la sez. 4.1.2 del testo, in particolare il paragrafo che inizia alla fine di p. 231 e finisce a p. 232, subito dopo la Figura 4.5.


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 25-06-2011, 12:47:12
Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perchè sia meglio che lo sia?

Se un programma che utilizza la cache usa intensamente le parole comprese tra l'indirizzo 0 e x, si verificheranno costantemente dei conflitti e ogni riferimento alla memoria potrebbe potenzialmente espellere un elemento dalla cache. Una soluzione a questo problema problema è quello di consentire che in ciascun elemento della cache ci possano essere due o più linee.

Può andar bene?
No. Non risponde alla domanda posta (se per qualche motivo è meglio che il n. di vie k sia una potenza di 2). Inoltre, quanto asserito nella prima frase non ha molto senso: quanto vale x? Se x è un indirizzo nella prima linea di cache, non ci sarà alcun conflitto. Infine, non viene chiesto di spiegare perché sia utile avere cache a più vie. Per trovare la risposta corretta alla domanda, può chiedersi se ci sia qualche vantaggio nello scegliere una potenza di 2, anziché un numero che non lo è, quale numero di vie della cache.

Essendo il numero degli insiemi nella cache una potenza di 2, l’operazione di modulo può essere
effettuata considerando i log2(# insiemi nella cache) bit meno significativi, che sono utilizzati
come indice della cache. Il blocco può poi essere messo in un qualsiasi elemento dell’insieme: la
ricerca deve quindi essere effettuata su tutti gli elementi dell’insieme.
Si consideri ad esempio una cache set-associativa a 2 vie composta da 8 parole, e si supponga
ancora che lo spazio di indirizzamento della memoria sia compreso tra 0 e 29: un indirizzo di
memoria X corrisponde ad un elemento dell’insieme dato da X modulo 4 della cache. I log2(4) =
2 bit meno significativi dell’indirizzo di memoria sono utilizzati come indice della cache.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-06-2011, 14:01:46
Essendo il numero degli insiemi nella cache una potenza di 2, l’operazione di modulo può essere
effettuata considerando i log2(# insiemi nella cache) bit meno significativi, che sono utilizzati
come indice della cache. Il blocco può poi essere messo in un qualsiasi elemento dell’insieme: la
ricerca deve quindi essere effettuata su tutti gli elementi dell’insieme.
Dunque un "insieme nella cache", nella sua terminologia, consta delle linee di cache ospitate in una stessa riga della cache. Il numero di vie della cache specifica perciò la massima cardinalità di ciascuno di tali insiemi (ovvero il n. di "colonne" della cache, in una sua rappresentazione a matrice), non il n. di insiemi nella cache (che ne sarebbe il n. di "righe", nella rappresentazione suddetta). Come lei indica, una volta selezionato un insieme, cioè una riga, nella cache sulla base (di una porzione) dell'indirizzo di memoria, la ricerca va effettuata su tutti gli elementi dell'insieme: che la cardinalità massima di tale insieme sia o no una potenza di 2 non fa alcuna differenza.
Quote
Si consideri ad esempio una cache set-associativa a 2 vie composta da 8 parole, e si supponga
ancora che lo spazio di indirizzamento della memoria sia compreso tra 0 e 29: un indirizzo di
memoria X corrisponde ad un elemento dell’insieme dato da X modulo 4 della cache. I log2(4) =
2 bit meno significativi dell’indirizzo di memoria sono utilizzati come indice della cache.
L'esempio è irrilevante, e per mostrare come un numero di vie che non è una potenza di 2 possa andare altrettanto bene, consideri l'esempio simile ma con una cache set-associativa composta da 12 parole: l'indicizzazione da lei proposta va ancora bene se la cache è a 3 vie, in questo caso.


Title: Re:Quesiti a risposta aperta
Post by: mozart on 25-06-2011, 16:59:37
Per quali istruzioni del linguaggio della IJVM l'interprete su MIC-1 esegue una microistruzione con il bit JAMZ=1?

Il bit di JAMZ viene utilizzato assieme al bit Z della ALU per determinare se si deve effettuare un salto condizionato, dal sistema di esercitazione risulta che le istruzioni della IJVM che che usano il bit JAMZ=1 sono 2, tuttavia, le istruzioni per il salto condizionato sono 3:
IFEQ, IFLT e IF_ICMPEQ.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-06-2011, 19:21:24
dal sistema di esercitazione risulta che le istruzioni della IJVM che che usano il bit JAMZ=1 sono 2, tuttavia, le istruzioni per il salto condizionato sono 3:
IFEQ, IFLT e IF_ICMPEQ.
Non solo dal sistema di esercitazione, ma anche dalla traduzione delle istruzioni IJVM in MAL per Mic-1 (v. la tabella in Figura 4.17 del testo), risulta che 2 delle istruzioni di salto condizionato usano JAMZ=1, mentre una (IFLT) usa JAMN=1.


Title: Re:Quesiti a risposta aperta
Post by: zElOtO on 26-06-2011, 13:31:52
Quote
Qualcuno saprebbe rispondere a questa domanda?
Nella microarchitettura Mic-1, il registro del bus  B è codificato in 4 bit della microistruzione, mentre i 9 bit del bus C sono mappati individualmente nel relativo campo. Perché?
Lei no? Le suggerisco  di consultare la sez. 4.1.2 del testo, in particolare il paragrafo che inizia alla fine di p. 231 e finisce a p. 232, subito dopo la Figura 4.5.
In alcuni casi può essere utile scrivere l'output presente nel bus C in più di un registro, mentre in nessun caso ha senso abilitare nello stesso momento più di un registro sul bus B. Con pochi circuiti aggiuntivi è possibile ridurre il numero di bit necessari per la selezione delle sorgenti che alimentino il bus B. Ci sono soltanto nove possibili registri di input che possono guidare il bus B. Possiamo quindi codificare in 4 bit l'informazione del bus B e utilizzare un decodificatore per generare 16 segnali di controllo, 7 dei quali non vengono utilizzati.

.....  :boh


Title: Re:Quesiti a risposta aperta
Post by: gunlok on 06-07-2011, 11:26:53
Stimare quanto tempo impiega il trasferimento del contenuto di un CD stereo, con 700 MB di registrazioni audio, senza compressione, su un modem da 56 Kbps (max 5 righe).

Io ho fatto seguente calcolo:

700 MB= 700*1024*8 = 5734400 bit
5734400/ 1000 = 5734,4 Kb
5734,4/ 56=  102 secondi

è corretto il mio calcolo??


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-07-2011, 12:37:13
700 MB= 700*1024*8 = 5734400 bit
(...)
è corretto il mio calcolo??
No, 1 M = 220 = 210x210 = 1024 x 1024 = 1048576.


Title: Re:Quesiti a risposta aperta
Post by: gunlok on 06-07-2011, 21:47:12
Code:
No, 1 M = 220 = 210x210 = 1024 x 1024 = 1048576.
 

quindi allora sarebbe 700*1024*1024*8=  5872025600
dividendo per 1000 mi trovo i Kb cioè  5872025,6
e dividendo per 56 trovo il tempo cioè 104857,6 secondi

questi secondi corrispondono a poco più di 29 ore...
 .penso può essere che ci vogliano 29 ore????


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-07-2011, 23:47:51
dividendo per 1000 mi trovo i Kb cioè  5872025,6
Non esattamente, 1 M = 1024 K, dunque deve dividere per 1024. La sua prima moltiplicazione (quella con un solo 1024) sarebbe stata corretta se avesse specificato che il risultato dava Kbit invece che bit.
Quote
questi secondi corrispondono a poco più di 29 ore...
 .penso può essere che ci vogliano 29 ore????
Un po' meno (per via della piccola correzione di cui sopra), ma non molto meno. Un conto più rapido è il seguente: 56 Kbps sono 7K B/s, dunque per trasferire 700M B a 7K B/s occorrono 700M/7K = 100K secondi, ovvero 102400 secondi, un po' più di 28 ore.


Title: Re:Quesiti a risposta aperta
Post by: gunlok on 06-07-2011, 23:58:54
È possibile implementare le funzioni NOT, AND, OR rispettivamente mediante una, due e tre porte NAND. Quali leggi dell'algebra di Boole giustificano ciascuna delle tre costruzioni (max 5 righe)?


“NOT  x” si implementa con una sola porta NAND in cui l’input x è duplicato ai suoi  due ingressi. Questa implementazione è corretta se e solo se la seguente equivalenza logica consegue dall’algebra di Boole:   NOT x = x NAND x = NOT (x AND x). Quest’ultimo termine è equivalente al primo perhcè l’idempotenza di AND è una delle leggi dell’algebra di Boole: x AND x = x

“ x AND y” si implementa con due porte NAND in cui la prima prende come inpute x e y e la seconda l’output della prima. Questa implementazione è corretta se e solo se la seguente logica consegue dall’algebra di Boole:  x  AND y =( (x NAND y) NAND ((x NAND y)) = NOT(NOT( x AND y) AND (NOT (x AND y)).  Per la legge di De Morgan l’ultimo termine si può scrivere: (x AND y) AND (x AND y) che per l’idempotenza di AND è uguale a x AND y.

“x OR y” si implementa con tre porte NAND in cui una prende in input in entrambi I suoi due ingressi x e l’altra invece y.
Questa implementazione è vera se e solo se: x OR y = (x NAND x) NAND (y NAND y)=( NOT(x AND x) NAND  NOT(y AND y)) = NOT x NAND  NOT y= NOT(NOT x AND NOT y) …
 Per la legge di De Morgan l’ultimo termine è equivalente a : x OR y



Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-07-2011, 00:31:56
“ x AND y” si implementa con due porte NAND in cui la prima prende come inpute x e y e la seconda l’output della prima.
Una porta NAND ha due input e un output, dunque dire che la seconda ha in input l'output della prima non può bastare.
Quote
la seguente logica consegue
Una logica non consegue, un'asserzione consegue (da un insieme di asserzioni, in questo caso un insieme di assiomi dell'algebra di Boole).
Quote
x  AND y =( (x NAND y) NAND ((x NAND y))
Il termine a destra rappresenta un circuito con tre porte NAND, non due, dunque non corrobora la tesi che si possa implementare AND con due porte NAND. Questa tesi, tuttavia, è vera. Qual è un termine che la corrobora? Le offro un aiutino: non le serve la legge di De Morgan, bensì l'involutorietà di NOT: NOT NOT x = x.
Quote
“x OR y” si implementa con tre porte NAND in cui una prende in input in entrambi I suoi due ingressi x e l’altra invece y.
Se le porte sono tre, "l'altra" non è unica...
Quote
Questa implementazione è vera
Direi "corretta" o "valida". Le asserzioni sono vere, non le implementazioni. È vero che l'implementazione da lei indicata è corretta per la legge di Morgan, nonché per la già richiamata idempotenza di AND.


Title: Re:Quesiti a risposta aperta
Post by: gunlok on 07-07-2011, 11:07:16
Mi correggo:
... la seconda prende come input il duplicato dell'output della prima.
Questa implementazione è corretta se e solo se la seguente equivalenza logica consegue dall’algebra di Boole:
 x  AND y = NOT(x AND y) NAND NOT(x AND y) = NOT NOT  (x AND y)
L'ultimo termine è equivalente al primo perché l'involuntarietà di NOT è una delle leggi dell'algebra di Boole: NOT NOT x=x  e quindi NOT NOT (x AND y)= x AND y

la correzione e giusta?

Code:
Se le porte sono tre, "l'altra" non è unica...
non ho capito dove ho sbagliato..... scrivo meglio l'implementazione:

"x OR y" si può implementare con 3 porte NAND, in cui la prima prende in input nei suoi due ingressi il duplicato di x;
la seconda prende in input nei suoi due ingressi il duplicato di y;
la terza porta prende in input l'output della prima e l'output della seconda.

Adesso ho scritto giusto? E per quanto riguarda la legge che giustifica la costruzione può andar bene De Morgan?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-07-2011, 16:19:14
la correzione e giusta?
Sì, ma la terminologia è buffa: "involuntarietà" non esiste, "involutorietà" è il sostantivo corrispondente all'aggettivo "involutorio", che ha radice nell'aggettivo "involuto" e significato correlato a quello del sostantivo "involuzione". In matematica, questa è una funzione unaria da un insieme nello stesso, cioè f: A -> A, che soddisfa la proprietà ffx = x su tutti gli elementi x del dominio.
Quote
non ho capito dove ho sbagliato..... scrivo meglio l'implementazione:
A me pare invece che abbia capito, ora specifica tre porte, non due.
Quote
Adesso ho scritto giusto?
Sì.
Quote
E per quanto riguarda la legge che giustifica la costruzione può andar bene De Morgan?
Sì, ma: come le ho già indicato, occorre anche l'idempotenza di AND (esattamente come occorre per l'implementazione di NOT).


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 07-07-2011, 20:06:25
Code:
Un calcolatore ha un bus a 200 MHz, 32 bit per ciclo, e un disco Ultra4-SCSI che lo usa a 160 MB/s. La CPU ha un ciclo esecutivo di 1 ns. In che misura percentuale il disco la rallenta (max 5 righe)

 Io ho pensato che siccome lo scsi utilizza un bus di 160 MHz/s e il bus del calcolatore è di 200 il disco scsi rallenta la cpu di 40 MHz/s pari al 33% della sua velocità disponibile.
Qui c'è un conto giusto ma non esplicitato (40 = 160/4, dove 4 è il n. di byte per ciclo, 4 = 32/8), e un conto sbagliato: 40 è il 20% di 200, non il 33%.

Non ho capito una cosa: come mai divido la frequenza del bus per il numero di byte per ciclo?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-07-2011, 23:01:33
Non ho capito una cosa: come mai divido la frequenza del bus per il numero di byte per ciclo?
Infatti non si divide per 4 (byte/ciclo) la frequenza del bus SCSI, bensì la sua capacità, cioè il suo throughput massimo. Poiché questo  è di 160 MB/s, e in un ciclo del bus di memoria si trasferiscono 4 B, il disco usa 160M/4 cicli del bus di memoria al secondo per trasferimenti DMA al massimo throughput permesso dal bus SCSI, cioè ruba alla CPU 40 dei 200 MHz disponibili sul bus di memoria.


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 08-07-2011, 08:28:15
Ora mi è tutto chiaro.

Grazie professore.


Title: Re:Quesiti a risposta aperta
Post by: TheRock88 on 08-07-2011, 15:24:19
Qualcuno di voi sà rispondere alla domanda riguardante l'algebra di Lindenbaum-Tarski?


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 11-07-2011, 10:30:39
Quote
La ALU a 8 bit, con input INC al riporto in ingresso a destra, può eseguire somme e sottrazioni a 8 bit in complemento a 2. Spiegare come.
Non ho capito bene cosa vuole sapere questa domanda: dato che per le proprietà stesse della rappresentazione in complemento alla base (in questo caso a 2) l'algoritmo di somma  algebrica fra due numeri (entrambi positivi o negativi, o uno positivo e uno negativo) è lo stesso di quello per la somma fra due numeri rappresentati nella normale rappresentazione binaria.

Forse nella domanda si suppone che i due numeri dati in input non siano codificati in complemento a due ma nella normale base binaria?

Quest'altro esercizio è corretto? http://img405.imageshack.us/img405/5605/imgdmd.jpg (http://img405.imageshack.us/img405/5605/imgdmd.jpg)
[NdD: collegamento sostituito per rimozione di pubblicità commerciale.]


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-07-2011, 02:22:40
Non ho capito bene cosa vuole sapere questa domanda: dato che per le proprietà stesse della rappresentazione in complemento alla base (in questo caso a 2) l'algoritmo di somma  algebrica fra due numeri (entrambi positivi o negativi, o uno positivo e uno negativo) è lo stesso di quello per la somma fra due numeri rappresentati nella normale rappresentazione binaria.
Vero, ma fra le quattro funzioni della ALU vi è quella della somma (algebrica) degli input A e B, non c'è una funzione di sottrazione di uno dei due input dall'altro. Tuttavia:
Quote
Forse nella domanda si suppone che i due numeri dati in input non siano codificati in complemento a due ma nella normale base binaria?
Proprio no: i due numeri in input, rispettivamente A e B, sono numeri interi con segno, nell'intervallo [-128,127], ciascuno rappresentato in complemento a 2 dal rispettivo input da 8 bit. La funzione ALU definita da F0 = F1 = 1 ne effettua la somma algebrica. Tuttavia, grazie al fatto che la ALU dispone anche di altri 4 input di controllo, oltre a F0 e F1, con opportuni valori di tali altri input si riesce a far eseguire alla ALU anche la sottrazione B - A (ma non la sottrazione A - B). La domanda è: come? Cioè, per quale sestupla di valori binari degli input di controllo della ALU?
Quote
Quest'altro esercizio è corretto? http://img405.imageshack.us/img405/5605/imgdmd.jpg (http://img405.imageshack.us/img405/5605/imgdmd.jpg)
[NdD: collegamento sostituito per rimozione di pubblicità commerciale.]
Ma perché non usate gli allegati ai post (fino a 300K), invece di inserire collegamenti a siti impropri? Riguardo alla rete combinatoria: è sostanzialmente corretta, ma occorrerebbe dare nomi più consistenti a input e output, altrimenti non è esplicito l'ordine dei bit nelle rispettive sequenze che rappresentano i due ingressi e l'uscita (ciascuna da 4 bit), oltre al  bit di riporto in ingresso e a quello di riporto in uscita. Ad es., potrebbe ridenominarli rispettivamente Ai, Bi, Oi, per i=0,...,3, e CIN, COUT per i suddetti riporti. Infine, anche se le costa qualche incrocio in più, sarebbe preferibile che l'ordine della sequenza dei 4 bit di output Oi venisse rispettato nella disposizione grafica delle rispettive linee di uscita.


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 13-07-2011, 09:32:13
Quote
Ma perché non usate gli allegati ai post (fino a 300K), invece di inserire collegamenti a siti impropri?

Ha ragione: una brutta brutta abitudine presa usando altri forum. Cercherò d'ora di usare gli allegati dei post  .sisi

Quote
Infine, anche se le costa qualche incrocio in più, sarebbe preferibile che l'ordine della sequenza dei 4 bit di output Oi venisse rispettato nella disposizione grafica delle rispettive linee di uscita.

Forse mi sono fatto un po' troppo trascinare da quello che dice il libro, dato che afferma che da un punto di vista fisico meno incroci ci sono fra le linee e meglio è  .timido


Title: Re:Quesiti a risposta aperta
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 13-07-2011, 12:15:03
Ma perché non usate gli allegati ai post (fino a 300K), invece di inserire collegamenti a siti impropri?
Professore, forse non lo sa ma a chi è registrato in questo forum in qualità di "studente", gli allegati (di qualsiasi tipo) non sono permessi .nono.
L'unico modo è linkare da siti esterni .sisi.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-07-2011, 19:21:19
forse non lo sa ma a chi è registrato in questo forum in qualità di "studente", gli allegati (di qualsiasi tipo) non sono permessi .nono.
L'unico modo è linkare da siti esterni .sisi.
Oops, infatti non lo sapevo, grazie. C'è una soluzione alternativa: upload in una cartella alla voce "Elaborati" del corso su Studium.UniCT (http://studium.unict.it). Dedicherò un topic apposito all'argomento.


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 14-07-2011, 09:52:34
Quote
Tracciare la rete combinatoria di una ALU a 4 bit, usando ALU a 1 bit come moduli

So come farlo, il mio dubbio è: bisogna disegnare solo le linee d'ingresso e di uscita delle 4 ALU o anche l'interno di ogni ALU?


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 14-07-2011, 10:02:52
Quote
Tracciare la rete combinatoria di una ALU a 4 bit, usando ALU a 1 bit come moduli

So come farlo, il mio dubbio è: bisogna disegnare solo le linee d'ingresso e di uscita delle 4 ALU o anche l'interno di ogni ALU?
Solo ingressi e uscite, i moduli sono tali proprio perché ne è visibile solo l'interfaccia con l'esterno, non la struttura interna.


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 14-07-2011, 10:08:24
Grazie  .smile


Title: Re:Quesiti a risposta aperta
Post by: FReddy on 16-07-2011, 13:10:09
Quote
Si indichino le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione del software moderno, e se ne descrivano brevemente i contributi più rilevanti

So che a questa domanda è già stata data una risposta, però vorrei esporre il mio punto di vista, in quanto la frase "influenza nella creazione del software moderno" mi crea qualche dubbio:

Alan Turing, per i suoi contributi teorici all'informatica, primo fra tutti l'invenzione della macchina astratta che porta il suo nome.
Atanasoff, per aver compreso che l'aritmetica che meglio si presta per rappresentare le informazioni all'interno di una macchina è quella digitale e non altre.
John von Neumann, per aver intuito che i programmi come i dati potevano essere rappresentati in forma numerica nella memoria del computer.

Capisco che queste persone hanno poco a che vedere con il software moderno, però a mio avviso questo è nato proprio grazie al contributo di queste (ed altre) persone.


Title: Re:Quesiti a risposta aperta
Post by: jos90 on 27-07-2011, 08:34:28
Quote
Calcolare il fattore di compressione richiesto per memorizzare 133 minuti di video in un DVD con 3,5 GB per la traccia video, risoluzione di 720x480 pixel, colori a 24 bit, 30 frame/s

Io ho ragionato in questo modo, ma ho qualche dubbio  :boh

Ogni frame è composto da 720*480 pixel, cioè 345600 pixel. Ogni pixel ha 3 colori a 24 bit (8 bit a colore), quindi per ogni pixel sono necessari appunto 24 bit. Ciò significa per ogni frame sono necessari 8294400 bit. Per ogni secondo ci sono 30 frame; quindi per ogni secondo sono necessari 248832000 di bit. Avendo una durata totale del video di 133 minuti, abbiamo 7980 secondi....[]
Ma moltiplicando il numero di bit necessari ogni secondo per il numero di secondi viene un numero troppo grande (230 GB). Quindi appunto ho qualche dubbio sui calcoli che ho effettuato..


230 GB / 65 (fattore di compressione) sarebbe 3,5 circa....ma è fattibile un fattore di compressione 65?

Se facciamo tutta l'operazione in bit abbiamo che in 7980 secondi (133minuti di video) abbiamo un totale di 248832000*7980=1985679360000 che divisi per 30064771072 (3,5gb in bit) viene un fattore di compressione di 66,046, mi chiedo se c'è qualcosa di sbagliato in questo ragionamento in quanto il professore mi ha evidenziato che il fattore di compressione dev'essere maggiore di 200.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 27-07-2011, 12:27:03
Se facciamo tutta l'operazione in bit abbiamo che in 7980 secondi (133minuti di video) abbiamo un totale di 248832000*7980=1985679360000 che divisi per 30064771072 (3,5gb in bit) viene un fattore di compressione di 66,046, mi chiedo se c'è qualcosa di sbagliato in questo ragionamento in quanto il professore mi ha evidenziato che il fattore di compressione dev'essere maggiore di 200.
No, sia il ragionamento che i conti sono giusti, mi ha tradito la memoria (o forse il caldo): un po' più di 200 sono i GB necessari per la memorizzazione senza compressione, come infatti calcola anche lei.


Title: Re:Quesiti a risposta aperta
Post by: jos90 on 27-07-2011, 12:54:30
la ringrazio professore!


Title: quesiti risposta aperta
Post by: Gladior on 12-10-2011, 15:17:18
Mostare che cisacuno degli operatori NAND e NOR da solo costituisce un insieme funzionalmente completo
( si suggerisce di esprimere NOT, AND, OR in termini dell'operatore considerato max 10 righe)


Dalla definizione data nel libro (pag 138) afferma che
Sia le porte NAND sia le prote NOR costituiscono un insieme di connettivi funzionalmente completo, nel senso che una qualsiasi funzione booleana può essere calcolata usando soltanto uno di questi due tipi di porte. Continuando afferma che nessun altra porta gode di questa proprietà.

Procedimento
Per dimostrare che questi due insiemi sono funzionalmente completi  dovrei attraverso la porta logica NAND ricavarmi le alte porte (NOT,AND,OR)... IDEM porta NOR.
ad esempio



{NAND}
Noto il NAND si può ricavare il NOT dalla tabella della verità:

a   b    NAND
0   0       1
0   1       1
1   0       1
1   1       0

Dalla 1a e dalla 4a riga si ottiene il NOT uguagliando i due ingressi
a NAND a = ā


Oppure dalla 2a e dalla 3a riga, con un ingresso a e 1
a NAND 1 = ā


Noti NAND e NOT si può ricavare l’AND e quindi tutto il resto.

Penso sia questo il procedimento, aspetto conferme  dall'aldilà dal supremo .rido


Title: Re:quesiti risposta aperta
Post by: Giuseppe Scollo on 13-10-2011, 07:33:23
attraverso la porta logica NAND ricavarmi le alte porte (NOT,AND,OR)... IDEM porta NOR.
Sì, detto con più proprietà di linguaggio: usando solo la porta logica NAND, costruire circuiti logici per le funzioni NOT, AND, OR.
Quote
Noto il NAND si può ricavare il NOT
Usando NAND, si può costruire un circuito per NOT
Quote
Oppure dalla 2a e dalla 3a riga, con un ingresso a e 1
dalla 2a e 4a riga
Quote
Noti NAND e NOT si può ricavare l’AND e quindi tutto il resto.
Sì, ma occorre specificare come. Una semplice soluzione, senza far ricorso ad altre tabelle di verità, si ottiene seguendo il suggerimento proposto nella formulazione del problema, grazie al risultato precedente e ad un paio di leggi dell'algebra Booleana:
1) involutorietà di NOT: x = NOT NOT x, da cui, istanziando x = a AND b:
a AND b = NOT NOT (a AND b) = NOT (a NAND b) = (a NAND b) NAND (a NAND b)
2) De Morgan: a OR b = (NOT a) NAND (NOT b), da cui si ottiene il circuito di porte NAND per OR usando uno di quelli già trovati per NOT.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 13-10-2011, 18:58:10
Effettivamente andavo di fretta non sono riuscito ad esprimermi con un linguaggio appropriato, chiedo scusa.
Allora
Il solo operatore NOR è un insiem funzionalmente completo, infatti con una NOR si può implementare l'operatore NOT
Involutorietà:
NOT(A)=NOT(A AND A)=A NOR A

Con l'operatore NOR si può implementare la somma OR
A OR B=NOT NOT (A OR B)=(A NOR B) NOR (A NOR B)


Applicando la legge di De Morgan
con  l'operatore NOR si può implementare il prodotto AND
A  AND B=NOT NOT(A AND B)=NOT[(NOT A) NOR (NOT B)]=(A NOR A) NOR (B NOR B)


Mi auguro di essere stato chiaro , in modo particolare nello svolgimento. E' chiaro che aspetto conferme dal supremo

Le relative  implementazioni  circuitali si trovano alla pagina 137


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 14-10-2011, 18:39:32
Esistono 4 funzioni booleane di una variabile e 16 di due variabili. quante sono le funzioni booleane di tre variabili?E di n variabili?

In matematica , una funzione  booleana a n variabili è una funzione 
f(xo,x1,........xn) :B^n ---> B

di variabili booleane xi  che assumono valore nello spazio booleano B=(0,1) cosi come f stessa.Con un insieme di n variabili esistono 2^2^n funzioni.

Mentre per tre variabili 2^2^3 funzioni possibili.

Speriamo sia giusto anche se ho qualche perplessità.


Title: Re:Quesiti a risposta aperta
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 14-10-2011, 20:43:16
Confermo.

Una funzione booleana a \fs{3}n variabili ha, come campo di esistenza, l'insieme delle \fs{3}n-uple (che ha cardinalità \fs{3}|\{{0, 1}\}^n|=|\{{0, 1}\}|^n=2^n), e come codominio un sottoinsieme di \fs{3}\{{0, 1}\}.

Quindi la funzione dovrà dare valori per tutte le \fs{3}2^n possibilità di input, un valore per ciascuna.
Fissando un ordinamento totale fra le \fs{3}n-uple (ad esempio quello lessico grafico), ci sono proprio 2^n posizioni distinte e numerate corrispondenti, da riempire ciascuna con uno 0 oppure con un 1.

Il numero di funzioni, a questo punto, coincide esattamente con il numero di modi in cui possiamo distribuire gli 0 e gli 1 in queste \fs{3}2^n posizioni, e ciò equivale a calcolare il numero di disposizioni con ripetizioni di \fs{3}2 oggetti e di lunghezza (classe) \fs{3}2^n, e sono proprio \fs{3}{D^'}_{2, 2^n}=2^{2^n}.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 16-10-2011, 10:20:52
Involutorietà:
NOT(A)=NOT(A AND A)=A NOR A
No, ne risulta A NAND A. Va invece invocata l'idempotenza di OR:
NOT(A)=NOT(A OR A)=A NOR A
L'involutorietà di NOT serve per giustificare la successiva costruzione (corretta):
Quote
Con l'operatore NOR si può implementare la somma OR
A OR B=NOT NOT (A OR B)=(A NOR B) NOR (A NOR B)
Si può notare che, sebbene nell'espressione ottenuta si abbiano tre occorrenze di NOR, per realizzarla in un circuito bastano solo due porte NOR (duplicando l'output di A NOR B).
 
Infine, è appropriato invocare la legge di De Morgan per la costruzione di un circuito per AND, ma il primo passaggio è una complicazione inutile, il secondo non è corretto, e l'ultimo è incomprensibile (che fine fa il NOT[] più esterno?):
Quote
A  AND B=NOT NOT(A AND B)=NOT[(NOT A) NOR (NOT B)]=(A NOR A) NOR (B NOR B)
L'espressione a destra è però quella giusta, la si può ottenere invocando solo la legge di De Morgan e la precedente costruzione per NOT:
A AND B = (NOT A) NOR (NOT B) = (A NOR A) NOR (B NOR B)


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 18-10-2011, 14:08:22
Esercizio n: 24
Tracciare la rete combinatoria di un sommatore a 4 bit a propagazione di riporto:

Per generare un sommatore a  quattro bit bisogna utilizzare un semisommatore per il bit meno significativo,appunto perchè non ha riporto in entrata, dopo aver disegnato il semisommatore, l'uscita del riporto  di esso va collegato ad un sommatore in particolare nel riporto in ingresso  cosi via ... quindi occorrono un semisommatore e tre sommatori dove il rispettivo riporto in uscita va collegato, all'igresso del successivo sommatore ovviamente nel rispettivo riporto in entrata.

Esercizio n:26
Tracciare la rete combinatoria di una Alu a 4 bit uasando alu a 1 bit come moduli.
 
      A3  B3                   A2   B2                      A1   B2                          A0     B0
      _|__|_                 __|__|_                    __|___|_                       __|____|_       
F0 -| Alu   |             =|           |                =|            |                   = |              |
      | 1 bit |- - - - - - -|           |--------------|            |---------------- |              |--------INC
 F1-|____ |__          _|______|                  |_______|                     |________|               
          |        |         |       |                                |                                    |       
         Q3      |         |      Q2                              Q1                                Q0
               Carry      Carry                                       
                  in            out       

Spero di aver reso l'idea.

EsercizioN:25
Tracciare la rete combinatoria di un sommatore a 8 bit a selezione di riporto usando sommatori a 4 bit come moduli.
su questo esercizio desidererei qualche dritta cmq sono in fase di elaborazione.



Aspetto conferme dall'alto



       


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 18-10-2011, 17:52:34
Esercizio n: 24
[...] quindi occorrono un semisommatore e tre sommatori dove il rispettivo riporto in uscita va collegato, all'igresso del successivo sommatore ovviamente nel rispettivo riporto in entrata.
Corretto. Va solo precisato che il riporto in uscita dell'ultimo sommatore dà il riporto in uscita del sommatore a 4 bit.
Quote
Esercizio n:26
Tracciare la rete combinatoria di una Alu a 4 bit uasando alu a 1 bit come moduli.
 
      A3  B3                   A2   B2                      A1   B2                          A0     B0
      _|__|_                 __|__|_                    __|___|_                       __|____|_       
F0 -| Alu   |             =|           |                =|            |                   = |              |
      | 1 bit |- - - - - - -|           |--------------|            |---------------- |              |--------INC
 F1-|____ |__          _|______|                  |_______|                     |________|               
          |        |         |       |                                |                                    |       
         Q3      |         |      Q2                              Q1                                Q0
               Carry      Carry                                       
                  in            out       

Spero di aver reso l'idea.
Più o meno: suppongo che gli "=" significhino che i due input di controllo F0 e F1 della ALU a 4 bit siano replicati sui corrispondenti ingressi di tutte le ALU a 1 bit. All'idea però manca qualcosa, e qualcos'altro va reso meglio in figura, precisamente: 1) deve tenere in conto che ciascuna ALU a 1 bit ha altri tre input di controllo: ENA, ENB, INVA, e che anche questi sono tre input di controllo della ALU a 4 bit, replicati (come F0 e F1) sui corrispondenti ingressi di tutte le ALU a 1 bit; 2) dei sei input di controllo della ALU a 4 bit, dunque, solo INC non è replicato, ma costituisce il "Carry in" (cioè INC) della ALU a 1 bit più a sinistra. Gli INC delle altre ALU a 1 bit sono connessi ai riporti in uscita delle ALU precedenti nella sequenza da sinistra a destra, proprio come avviene per il sommatore a 4 bit.
Quote
EsercizioN:25
Tracciare la rete combinatoria di un sommatore a 8 bit a selezione di riporto usando sommatori a 4 bit come moduli.
su questo esercizio desidererei qualche dritta cmq sono in fase di elaborazione.
La prima dritta sta nell'identificare con precisione ingressi e uscite del modulo sommatore a 4 bit, giacché solo questi vanno mostrati dei moduli impiegati (cioè: non ne va mostrata la struttura circuitale interna). La soluzione dell'esercizio 24 costituisce un buon punto di partenza, ma va un po' modificata, perché ai suoi moduli occorre il riporto in ingresso, che il sommatore a 4 bit di cui sopra non ha. La seconda dritta sta nel suggerimento di impiegare 3 moduli sommatori a 4 bit.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 19-10-2011, 17:58:02
Esercizio n° 21
La Alu a 8 bit, con input INC a riporto in ingresso a destra, può eseguire somme  e sotrazioni a 8 bit in complemento a 2.
Come sappiamo l'unica sottrazione permessa tra i due valori di ingresso A e B è (B-A) mentre non è possibile il viceversa cioè (A-B).
La configurazione necessaria affinchè venga eseguita la differenza (B-A) è
A
B

Fo=1    
F1=1 Questi due segnali

ENA=1
ANB=1  sono utilizzati per forzare a 0 gli input A e B

INVA=1 é possibile negare A selezionando 1 INVA ed ottenere notA

INC=1  Rappresenta il riporto in ingresso della prima AlU


Mentre per quanto riguarda la somma (A+B) la configurazione è
A
B

F0=1
F1=1

ENA=1
ENB=1

INVA=0
INC=0
Spero sia questa la risposta.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 19-10-2011, 19:34:41
 Per quanto riguarda l'eserciozio 25 posso utilizzare questo come modulo chiaramente di questi ne occorrerebbero tre, nel caso in cui fosse utilizzato per tracciare un sommatore a 8 bit, partendo da dei moduli a 4 bit .Non mi viene in mente   altro.
          
             Carry
               in
           _____|_____
 a0   - |                   |
 b0   - |                   |-S0
 a1   - |                   |        
 b1   - |                   |-S1    
 a2   - |                   |    
 b2   - |                   |-S2        
 a3   - |                   |        
 b3   - |                   |-S3        
          | __________|  
                 |
              Carry
                Out        


        


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 20-10-2011, 10:31:08
Esercizio n° 21
[...]
Spero sia questa la risposta.
Sì, a parte qualche errore tipografico, se si tratta della risposta al quesito n. 19 della lezione 8. Per il futuro, suggerirei di identificare l'esercizio così, indicando il n. di lezione e il n. dell'esercizio, fra quelli della lezione, nel sistema Studium.UniCT (http://studium.unict.it). Ciò serve a non farmi perdere troppo tempo nella ricerca del testo dell'esercizio per il quale si propone una domanda o una risposta.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 20-10-2011, 10:37:16
Per quanto riguarda l'eserciozio 25 posso utilizzare questo come modulo
Fin qui ci siamo, l'interfaccia del modulo è quella giusta.
Quote
chiaramente di questi ne occorrerebbero tre, nel caso in cui fosse utilizzato per tracciare un sommatore a 8 bit, partendo da dei moduli a 4 bit .Non mi viene in mente   altro.
Direi che se la cava un po' troppo sbrigativamente. Occorrono tre moduli, perché? Come sono connessi in un circuito i loro ingressi e uscite? Quali di questi costituiscono gli ingressi e le uscite del sommatore a 8 bit? Cos'altro serve per realizzare la "selezione del riporto" che dà nome a questo tipo di sommatore?


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 20-10-2011, 15:17:33
Allora spieghiamo cosa significa a selezioene di riporto
Inevece di avere  un singolo sommatore  per i bit più significativi ne creiamo due identici in parallelo il circuito consiste in tre sommatori a 4 bit uno per i bit meno significativi  e due per quelli più significativi , nello specifico i moduli per i bit più significativi funzionano in parallelo.






      
           __________
 a0   - |                   |                                    <----------- Modulo bit meno significativi
 b0   - |                   |-S0
 a1   - |                   |        
 b1   - |                   |-S1    
 a2   - |                   |    
 b2   - |                   |-S2        
 a3   - |                   |        
 b3   - |                   |-S3        
          | __________|  
                    |
                    |______________
                                              |
                                              |                                  
                     ______________|_____________        
            F=0  |                                                  |      F=1                                                                      
           _|___|_____                                  ____|____ |_                                
 a4   - |                   |                      a4   - |                   |
 b4   - |                   |-S4                 b4   - |                   |-S4
 a5   - |                   |                      a5   - |                   |
 b5   - |                   |-S5                 b5   - |                   |-S5
 a6   - |                   |                      a6   - |                   |                <-------------modulo bit più significativi
 b6   - |                   |-S6                 b6   - |                   |-S6
 a7   - |                   |                      a7   - |                   |
 b7   - |                   |-S7                 b7   - |                   |-S7
          | __________|                               |__________ |              
                 |                                                       |
              Carry                                                Carry
                Out                                                   out


Dove le due F corrispondo al riporto nel caso sia 1 funziona il modulo corrispondente F=1 altrimenti il viceversa cioè F=0.

Spero sia questa la risposta . Sicuramente qualche blasfemia sarà presente, confido nella bontà di quelli che la osservano.



        


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 20-10-2011, 18:04:43
Lezione 8
Esecizio n°21
Che cos'è lo stato di riposo degli input S e R di un latch SR implemenato mediante due porte NAND.

Ponendo S=1e R=1 si realizza la funzione di memoria per cui l'uscita conserva il precedente valore memorizzato Ad
esempio:
Se si vuole memorizzare 1 si pone: S=0 e R=1. Successivamente si torna nello stato di riposo: S=0 e R=0. In tal caso l’uscita conserva lo stato precedente: Q=Qo=1.
Se si vuole memorizzare 0 si pone: S=1 e R=0. Successivamente si torna nello stato di riposo: S=0 e R=0. In tal caso l’uscita conserva lo stato precedente: Q=Qo=0.

Al solito attendo la conferma.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 20-10-2011, 19:52:01
Lezione 8
Esercizio n°23
Modificare Il circuito seguente per ottenere un generatore di impulsi sul fronte di discesa del clock e tracciarne i diagrammi temporali del segnale.

Allora           B  _____                                                                    ________________
   a -- |-->0--- |        |          D                d__________________/                               \_______
         |            | OR   |--------                                               ____
         |______ |        |                     b or a_____________/        \________________________
                    C|____ |                                                                   ________  
                                                            a___________________/                \_______________
                                                              ___________________                 ________________
                                                            b                                      \_______/
                                                                                                    _________
                                                            c___________________/                \________________
                                                              
Pesno sia questa la risposta


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 21-10-2011, 14:22:31
Quesito n 24 lezione 8
Un calcolatore con un bus dati largo 32 bit usa una DRAM implementata con chip di 1Mbit x 1.Qual' e' la piu' piccola memoria in byte che il calcolatore puo' avere.


1mbit*32= 131072[byte]*32=4194304 [byte].

Spero sia questa la risposta


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-10-2011, 00:20:02
nello specifico i moduli per i bit più significativi funzionano in parallelo.
Tutti e tre i sommatori funzionano in parallelo! Le è sfuggito un aspetto importante, che è poi il punto di partenza per progettare il resto del circuito, oltre ai tre moduli: i due input F (riporto in ingresso) dei moduli per i bit più significativi sono fissi, risp. a 0 e a 1, cioè non sono connessi al riporto in uscita del terzo modulo. Quest'ultimo è invece l'input di un selettore a 1 bit, che ha 2 output, corrispondenti ai 2 possibili valori dell'input. Ciascuno di questi output deve abilitare la rispettiva cinquina di output, di uno dei due moduli per i bit più significativi, ad essere riprodotta sulla cinquina di output (4 bit più significativi e riporto in uscita) del sommatore a 8 bit così realizzato. C'è dunque la parte più interessante del circuito da disegnare...


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-10-2011, 00:32:34
Ponendo S=1e R=1 si realizza la funzione di memoria per cui l'uscita conserva il precedente valore memorizzato
Fin qui OK, ma l'esempio non lo è, perché in entrambi i casi lei asserisce:
Quote
Successivamente si torna nello stato di riposo: S=0 e R=0.
contraddicendo quanto asserito all'inizio. Infatti lo stato di riposo è S=1 e R=1 (trattandosi di latch SR implementato con 2 porte NAND).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-10-2011, 00:46:56
Lezione 8
Esercizio n°23
Modificare Il circuito seguente per ottenere un generatore di impulsi sul fronte di discesa del clock e tracciarne i diagrammi temporali del segnale.
[....]
Pesno sia questa la risposta
Mi scusi, ma non riesco a decifrarla, perché la spaziatura proporzionale confonde tutto. Per riprodurre diagrammi conviene usare la spaziatura fissa, mediante il codice
Code:
[tt]
diagramma
[/tt]
selezionabile dall'icona con la macchina da scrivere, ad es.:

     /\
    /  \
   /    \


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-10-2011, 00:50:51
1mbit*32= 131072[byte]*32=4194304 [byte].

Spero sia questa la risposta
è giusta, ma può ottenerla più semplicemente così: 1M bit * 32 = 32M bit = 4M byte.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 22-10-2011, 17:24:41
Partiamo dal presupposto che i diagrammi riferiti a, b, c, sono identici a quelli del generatore ad impulsi sul fronte di salita come quelli presenti nella figura dell'eserzio quelli che dovrebbero cambiare sono a or b   e d.
 


Allora           B  _____                                                                _________________
   a -- |-->0--- |        |          D                d__________________|                              |_______
         |            | OR   |--------                                         
         |______ |        |                   
                                                         b or a____________          ________________________
                                                                                       |____ |                       

                                                                                       __________ 
                                                            a______________|                |_______________
                                                              ___________________                 ________________
                                                            b                                   |________|
                                                                                        _________
                                                            c______________|                |________________                   


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 22-10-2011, 19:20:25
Allora nel caso specifico dovrei utilizzare un demux



        __________
 a0   - |                   |                                    <----------- Modulo bit meno significativi
 b0   - |                   |-S0
 a1   - |                   |        
 b1   - |                   |-S1    
 a2   - |                   |    
 b2   - |                   |-S2        
 a3   - |                   |        
 b3   - |                   |-S3        
          | __________|  
                    |
                    |______________
                                              |
                                     _____|_______                                                                    
                                    |                       |  
                                    |    DEMUX         |                                                                            
                                    |____________ |
                                           |         |
                     ____________|         |__________        
            F=0  |                                                  |      F=1                                                                      
           _|___|_____                                  ____|____ |_                                
 a4   - |                   |                      a4   - |                   |
 b4   - |                   |-S4                 b4   - |                   |-S4
 a5   - |                   |                      a5   - |                   |
 b5   - |                   |-S5                 b5   - |                   |-S5
 a6   - |                   |                      a6   - |                   |                <-------------modulo bit più significativi
 b6   - |                   |-S6                 b6   - |                   |-S6
 a7   - |                   |                      a7   - |                   |
 b7   - |                   |-S7                 b7   - |                   |-S7
          | __________|                               |__________ |              
                 |                                                       |
              Carry                                                Carry
                Out                                                   out


Il circuito corrispondente  mi auguro sia il seguente
                           _________  
                          |
                          |           ___     AND     _______      
 A                       |           |
--------------------|           |
                          |   ____ |___
                          |  |        |
                          |  |        |        AND      ________
                          |_|____ |___    
                             |_not_|
                             |
                            c


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-10-2011, 20:39:37
Partiamo dal presupposto che i diagrammi riferiti a, b, c, sono identici a quelli del generatore ad impulsi sul fronte di salita come quelli presenti nella figura dell'eserzio quelli che dovrebbero cambiare sono a or b   e d.
Mi scusi, ma resta tuttora incomprensibile, per il pessimo allineamento dei diagrammi: perché non usa il codice
Code:
[tt]
diagramma
[/tt]
come le ho suggerito? Inoltre, le segnalo che:
  • non si capisce dove stia c nel circuito
  • si può solo immaginare che B e D nel circuito abbiano i diagrammi temporali b e d
.
Un po' più di attenzione alla consistenza notazionale non costa poi tanto...


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 22-10-2011, 20:50:40
Allora nel caso specifico dovrei utilizzare un demux
Sì, lo si può chiamare anche così (demultiplexer, per la precisione), ma rimane un errore fondamentale: la selezione effettuata da tale componente non va in ingresso agli altri due moduli (che tale ingresso non ce l'hanno proprio, nella loro interfaccia), ma deve invece abilitare il trasferimento di una delle due cinquine di uscite di tali moduli verso la corrispondente cinquina di uscite del sommatore a 8 bit.

P.S. Naturalmente, vale anche qui la raccomandazione di tracciare i diagrammi usando il codice Teletype per la spaziatura fissa.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 23-10-2011, 20:33:34
Allora nel caso specifico dovrei utilizzare un demux
Sì, lo si può chiamare anche così (demultiplexer, per la precisione), ma rimane un errore fondamentale: la selezione effettuata da tale componente non va in ingresso agli altri due moduli (che tale ingresso non ce l'hanno proprio, nella loro interfaccia), ma deve invece abilitare il trasferimento di una delle due cinquine di uscite di tali moduli verso la corrispondente cinquina di uscite del sommatore a 8 bit.

P.S. Naturalmente, vale anche qui la raccomandazione di tracciare i diagrammi usando il codice Teletype per la spaziatura fissa.

Non ho capito molto bene evidentemente .
Provo a spiegare quello che ho capito. ho un modulo che effettua la somma delle cifre meno significative, come quello che ho  disegnato sopra, dove accanto ho scritto "modulo bit meno significativi" dove in pratica in  questo modulo non è presente input del riporto in entrata.
Dopo aver fatto questo vado a piazzare un demultiplexer , dove l'input del "demux" corrisponde all'output del riporto del primo modulo.
Gli altri due mduli  effettuano la somma delle cifre più significative. L' output del Demux nel caso specifico 2 vanno ad abilitare il corrispondente modulo"ovviamente ciò dipende dal resto". quello che non capisco è come devo abilitarlo. Posso direttamente, come mi consiglia il prof abilitare uno dei due output , facendo partire dai 2 output del demux due linee che vanno a congiungere tutte le rispettive linee di output nel caso specifico s4,s5,s6,s7, ovviamente carry out.
Spero sia queso , non mi viene in mente nulla.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 23-10-2011, 23:32:09
Gli altri due mduli  effettuano la somma delle cifre più significative. L' output del Demux nel caso specifico 2 vanno ad abilitare il corrispondente modulo"ovviamente ciò dipende dal resto". quello che non capisco è come devo abilitarlo. Posso direttamente, come mi consiglia il prof abilitare uno dei due output , facendo partire dai 2 output del demux due linee che vanno a congiungere tutte le rispettive linee di output nel caso specifico s4,s5,s6,s7, ovviamente carry out.
Spero sia queso , non mi viene in mente nulla.
Neanche a me, né vedo cos'altro possa venire in mente, se il punto di partenza è quello stabilito nel testo (alla fine di p. 150): "Tutti e tre i sommatori possono ora cominciare nello stesso momento". L'abilitazione di uno solo dei due sommatori per i 4 bit più significativi non può avvenire sull'input, perché tale abilitazione è determinata dal riporto in uscita del terzo sommatore. Quando questo riporto è disponibile, gli altri due sommatori hanno già fatto anch'essi il loro lavoro e prodotto il risultato sulle rispettive cinquine di uscita. Si tratta dunque di selezionare una delle due cinquine.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 24-10-2011, 13:33:31
Il principio del sommatore  a selezione di riporto sono riuscito a capirlo quello che adesso non riesco a capire è come riuscire ad implementare la connessione tra i tre moduli con il relativo selettore ad un bit. I tre moduli lavorano in parallelo  il primo modulo calcola la somma dei bit meno significativi, mentre gli altri due calcolano la somma dei bit più significaivi, nel caso specifico dei moduli della somma  dei bit più significativi, viene caclolata la somma sia sei il riporto vale 1 sia che il riporto vale 0, ovviamente tutto questo in parallelo.Adesso la selezione spetterà al riporto del sommatore dei bit meno significativi, nel caso valga 0 deve essere selezionato il relativo output del modulo che ha affettuato la somma in cui si era supposto che il riporto in ingresso valeva 0.
Altrimenti
nel caso valga 1 deve essere selezionato il relativo output del modulo che ha affettuato la somma in cui si era supposto che il riporto in ingresso valeva 1. 


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 24-10-2011, 17:22:24
Il principio del sommatore  a selezione di riporto sono riuscito a capirlo quello che adesso non riesco a capire è come riuscire ad implementare la connessione tra i tre moduli con il relativo selettore ad un bit.
Il resto della descrizione è OK. Riguardo al come implementare la connessione, non si tratta di una semplice connessione, ci vuole un po' di logica. Premesso che il selettore a 1 bit si realizza molto semplicemente sdoppiando l'input su due vie, su una delle quali si colloca una porta NOT, si può connettere una di tali vie a un ingresso di una porta AND, avente all'altro ingresso uno dei 5 output di uno dei due sommatori fra cui effettuare la selezione. Occorrono dunque 5 porte AND per ciascuno dei due sommatori, 10 in tutto, da considerare come 5 coppie per le 4 posizioni di output e per il riporto in uscita. Ciascuna coppia di porte AND produce in uscita la coppia di ingressi di una porta OR, la cui uscita è una delle 5 uscite in questione del sommatore a 8 bit (dunque servono altre 5 porte OR). Spero che l'idea sia chiara anche senza diagramma.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 24-10-2011, 17:47:10
Il principio del sommatore  a selezione di riporto sono riuscito a capirlo quello che adesso non riesco a capire è come riuscire ad implementare la connessione tra i tre moduli con il relativo selettore ad un bit.
Il resto della descrizione è OK. Riguardo al come implementare la connessione, non si tratta di una semplice connessione, ci vuole un po' di logica. Premesso che il selettore a 1 bit si realizza molto semplicemente sdoppiando l'input su due vie, su una delle quali si colloca una porta NOT, si può connettere una di tali vie a un ingresso di una porta AND, avente all'altro ingresso uno dei 5 output di uno dei due sommatori fra cui effettuare la selezione. Occorrono dunque 5 porte AND per ciascuno dei due sommatori, 10 in tutto, da considerare come 5 coppie per le 4 posizioni di output e per il riporto in uscita. Ciascuna coppia di porte AND produce in uscita la coppia di ingressi di una porta OR, la cui uscita è una delle 5 uscite in questione del sommatore a 8 bit (dunque servono altre 5 porte OR). Spero che l'idea sia chiara anche senza diagramma.
Senza aver fatto caso alla sua risposta avevo inviato uno schema sulla sua email per vedere se effettivamente avevo carpito il concetto .Solo che ho utilizzato un modulo come selettore.
Adesso mi interesserebbe sapere se per lei lo schema che le ho inviato potrebbe andare bene come risposta al quesito, oppure dovrei effettuare tutti i relativi collegamenti con le porte logiche , come dai lei illustarato nella risposta.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-10-2011, 07:42:45
ho utilizzato un modulo come selettore.
Adesso mi interesserebbe sapere se per lei lo schema che le ho inviato potrebbe andare bene come risposta al quesito, oppure dovrei effettuare tutti i relativi collegamenti con le porte logiche , come dai lei illustarato nella risposta.
Quello schema va bene come parte della risposta. Il testo dell'esercizio permette di usare i sommatori a 4 bit come moduli, dunque non è necessario specificarne la struttura interna. Se si vuole considerare anche il selettore come modulo, è lecito farlo, anzi, è anche meglio, perché così si organizza l'intera descrizione su due livelli di astrazione: quello della rete combinatoria di moduli e quello delle reti combinatorie relative alla struttura interna dei moduli; tuttavia occorre tracciare separatamente la rete combinatoria del selettore.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 25-10-2011, 11:58:35
Sul forum http://studium.unict.it ho postato la soluzione dell' esercio n°23 con il relativo diagramma temporale

Partiamo dal presupposto che i diagrammi riferiti a, b, c, sono identici a quelli del generatore ad impulsi sul fronte di salita come quelli presenti nella figura dell'eserzio quelli che dovrebbero cambiare sono a or b   e d.
 


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 25-10-2011, 14:23:23
ho utilizzato un modulo come selettore.
Adesso mi interesserebbe sapere se per lei lo schema che le ho inviato potrebbe andare bene come risposta al quesito, oppure dovrei effettuare tutti i relativi collegamenti con le porte logiche , come dai lei illustarato nella risposta.
Quello schema va bene come parte della risposta. Il testo dell'esercizio permette di usare i sommatori a 4 bit come moduli, dunque non è necessario specificarne la struttura interna. Se si vuole considerare anche il selettore come modulo, è lecito farlo, anzi, è anche meglio, perché così si organizza l'intera descrizione su due livelli di astrazione: quello della rete combinatoria di moduli e quello delle reti combinatorie relative alla struttura interna dei moduli; tuttavia occorre tracciare separatamente la rete combinatoria del selettore.

La parte interna del modulo selettore è stato inserito nel forum http://studium.unict.it attendo notizie.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 25-10-2011, 18:16:53
Quesito 22 lezione 8
A quali condizioni il seguente circuito sequenziale asincrono si comporta come un flip flop?
Come si comporta quando si fornisce un impulso a un ingresso e un livello 1 all'altro?
Un flip flop è a commutazione sul fronte o di discesa oppure di salita, Quindi occorre mettere un  dispositvo che permetta di generare degli impulsi, nel caso specifico un generatore di impulsi come quello vito nel esercizio 23 dellalezione 8. Cmq questo esercizio è d avvero particolare ovviamente mi aspetto pure qualche consiglio.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-10-2011, 19:28:39
La parte interna del modulo selettore è stato inserito nel forum http://studium.unict.it attendo notizie.
Il circuito va bene, occorre solo distinguere le coppie di ingressi omonimi nel suo diagramma, e le corrispondenti uscite, dando loro nomi diversi. Ad es.: sn0, sn1, sn (per n=4,...,7), e carryout0, carryout1, carryout. Non è invece necessario dare nomi alle porte logiche.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-10-2011, 19:45:54
Sul forum http://studium.unict.it ho postato la soluzione dell' esercio n°23 con il relativo diagramma temporale

Partiamo dal presupposto che i diagrammi riferiti a, b, c, sono identici a quelli del generatore ad impulsi sul fronte di salita come quelli presenti nella figura dell'eserzio quelli che dovrebbero cambiare sono a or b   e d.
Più precisamente, b AND c diventa b OR c, e d cambia di conseguenza (v. appresso). Il circuito è corretto, ma i diagrammi temporali di b OR c e di d non lo sono. Il livello di b OR c dev'essere basso solo quando sono bassi sia b che c... Inoltre, d è come b OR c, ma traslato del ritardo introdotto dalla porta OR.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-10-2011, 20:12:18
Un flip flop è a commutazione sul fronte o di discesa oppure di salita, Quindi occorre mettere un  dispositvo che permetta di generare degli impulsi, nel caso specifico un generatore di impulsi come quello vito nel esercizio 23 dellalezione 8. Cmq questo esercizio è d avvero particolare ovviamente mi aspetto pure qualche consiglio.
Cominci col dare nomi standard agli ingressi del (supposto) flip-flop, ad es. S e R (che stanno per Set e Reset), e ad identificare i valori di tali ingressi che caratterizzano lo stato di riposo, cioè lo stato in cui l'uscita del circuito è stabile, sia che valga 0 sia che valga 1, fin quando non cambiano gli ingressi.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 26-10-2011, 20:37:11
Nuovo diagramma temporale postato su studium sull'esercio 23.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 27-10-2011, 12:33:53
Nuovo diagramma temporale postato su studium sull'esercio 23.
Ancora non ci siamo: il diagramma temporale di b OR c è in realtà quello di b NAND c, e inoltre il diagramma temporale di d non assomiglia affatto a quello di b OR c (ammesso che fosse giusto) traslato del ritardo dovuto alla porta.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 27-10-2011, 14:59:56
Nuovo diagramma temporale postato su studium sull'esercio 23.
Ancora non ci siamo: il diagramma temporale di b OR c è in realtà quello di b NAND c, e inoltre il diagramma temporale di d non assomiglia affatto a quello di b OR c (ammesso che fosse giusto) traslato del ritardo dovuto alla porta.
Postato altro diagramma temporale su studium sull'eserzio 23
Abbiamo detto che a,b,c, rimangono come sono nell esercizio mentre quelli che cambiano sono b or c e d
non riesco a capire come deve partire b or c se già alto cioè 1 oppure 0 cioè basso, quello che ho capito che il segnale sia nella porta not sia nella porta or viene traslato o meglio ritardato per il resto sono identici sia b or c che d. Penso che il primo ritardo cioè quello della porta not  sarà uguale al ritardo della porta or.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 27-10-2011, 17:43:06
Provi a valutare il quarto schema temporale. Credo che si avvici di   più alla soluzione.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 27-10-2011, 20:04:29
Un flip flop è a commutazione sul fronte o di discesa oppure di salita, Quindi occorre mettere un  dispositvo che permetta di generare degli impulsi, nel caso specifico un generatore di impulsi come quello vito nel esercizio 23 dellalezione 8. Cmq questo esercizio è d avvero particolare ovviamente mi aspetto pure qualche consiglio.
Cominci col dare nomi standard agli ingressi del (supposto) flip-flop, ad es. S e R (che stanno per Set e Reset), e ad identificare i valori di tali ingressi che caratterizzano lo stato di riposo, cioè lo stato in cui l'uscita del circuito è stabile, sia che valga 0 sia che valga 1, fin quando non cambiano gli ingressi.
Allora
Ponendo S=0e R=0 si realizza la funzione di memoria per cui l'uscita conserva il precedente valore memorizzato
nel caso specifico:

Se si vuole memorizzare 0 si pone: S=0 e R=1. Successivamente si torna nello stato di riposo: S=0 e R=0. In tal caso l’uscita conserva lo stato precedente: Q=1.
Se si vuole memorizzare 1 si pone: S=1 e R=0. Successivamente si torna nello stato di riposo: S=0 e R=0. In tal caso l’uscita conserva lo stato precedente: Q=0.

Mentre S=1 R=1 questa configurazione va evitata

Quando forniamo un impulso a uno dei due input
nel  caso specifico dove abbiamo un impulso nel primo input S=impulso e R=1 nella porta and restituira sempre 0 come valore, mentre la porta or si alternerà con 0,1 .
MEntre nel secondo caso quando
S=1 R=impulso
La porta and si alterna con 0,1 mentre nella porta or come autput abbiamo un 1 costante.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 28-10-2011, 01:56:16
Provi a valutare il quarto schema temporale. Credo che si avvici di   più alla soluzione.
Ha capito la relazione fra d e b OR c, ma il diagramma di b OR c non è corretto: deve iniziare alto perché b inizia alto, e restare alto finché almeno uno dei due è alto; dunque, deve abbassarsi al fronte di discesa di c (perché anche b lì è basso), ma rialzarsi al successivo fronte di salita di b. Noti che il circuito produrrà un segnale impulsivo in logica negativa: se lo si vuole in logica positiva, occorre sostituire la porta OR con una porta NOR.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 28-10-2011, 02:18:40
Se si vuole memorizzare 0 si pone: S=0 e R=1. Successivamente si torna nello stato di riposo: S=0 e R=0. In tal caso l’uscita conserva lo stato precedente: Q=1.
Q=0 (cioè, si memorizza 0: il valore memorizzato è quello in uscita).
Quote
Se si vuole memorizzare 1 si pone: S=1 e R=0. Successivamente si torna nello stato di riposo: S=0 e R=0. In tal caso l’uscita conserva lo stato precedente: Q=0.
Q=1 (per lo stesso motivo).
Quote
dove abbiamo un impulso nel primo input S=impulso e R=1 nella porta and restituira sempre 0 come valore, mentre la porta or si alternerà con 0,1 .
direi piuttosto che l'uscita riproduce (ritardato) il segnale impulsivo in ingresso a S.
Quote
MEntre nel secondo caso quando
S=1 R=impulso
La porta and si alterna con 0,1
analogamente al caso precedente, l'uscita della porta AND riproduce (ritardato) il segnale impulsivo in ingresso a R, ma in questo caso complementato; cioè riproduce il segnale impulsivo complementato in uscita dalla porta NOT.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 29-10-2011, 16:36:50
Quesito 21 lezione
Per lalettura su bus sincrono specificare appresso, seil cilco di clock è 20 .ns, quanto tempo ha la memoria per produrre i dati in t3 da quando MREQ# è asserito?


Ho delle domande su dei concetti che ho poco chiari,
Allora iniziamo col definire ciclo di clock ogni T1 T2 T3 rappresenta un ciclo di clok oppure sono dei sotto cicli che costituiscono appunto il ciclo di clock, nel senso T1+T2+T3=20 ns.
Nel caso specifico l'esercizio richiede quanto tempo ha la memoria per produrre i dati in t3 da quando MREQ# è asserito, da questo calcolo devo escludere TAD , la CPU deve garanitre  che l'ndirizzo risulti stabile entro 11 ns a partire dal fronte di salita di T1 e allo stesso tempo, TML oltre a  passare 6 ns dalla stabilizzazione dell'indirizzo e l'asserimento di MREQ# questi 17 ns seconodo devono essere esclusi dal calcolo finale ?

Nel caso specifico la frequenza di temporizzazione è di 50 Mhz  cioè 1/(50Mhz)=0,02=20 ns
Se questo passaggio è giusto l'esempio posto nel libro (pag174 a pag 176) considera 100 Mhz ciè 10 ns basta moltiplicare per due i valori riportati nell'esempio per trovare la risposta all'esercizio. Spero sia così .penso


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 30-10-2011, 14:06:24
Allora iniziamo col definire ciclo di clock ogni T1 T2 T3 rappresenta un ciclo di clok oppure sono dei sotto cicli che costituiscono appunto il ciclo di clock, nel senso T1+T2+T3=20 ns.
Il ciclo di clock è, come specificato, 20 ns, ed è la durata di T1 = T2 = T3. Il ciclo di lettura consta di 3 cicli di clock.
Quote
Nel caso specifico l'esercizio richiede quanto tempo ha la memoria per produrre i dati in t3 da quando MREQ# è asserito, da questo calcolo devo escludere TAD
Direi che TAD non è da prendere in considerazione. L'intervallo di tempo disponibile perché la memoria produca il dato inizia da quando MREQ# è asserito, e ciò avviene con ritardo TM rispetto al fronte di discesa del clock in T1.
Quote
la CPU deve garanitre  che l'ndirizzo risulti stabile entro 11 ns a partire dal fronte di salita di T1 e allo stesso tempo, TML oltre a  passare 6 ns dalla stabilizzazione dell'indirizzo e l'asserimento di MREQ# questi 17 ns seconodo devono essere esclusi dal calcolo finale ?
Non capisco perché dedichi tanta attenzione alla "preistoria" dell'intervallo di tempo di interesse. Stabilito che ne conosciamo abbastanza bene l'inizio (TM dopo il fronte di discesa del clock in T1), ne va analizzata la fine per risolvere il problema.
Quote
Nel caso specifico la frequenza di temporizzazione è di 50 Mhz  cioè 1/(50Mhz)=0,02=20 ns
Se questo passaggio è giusto l'esempio posto nel libro (pag174 a pag 176) considera 100 Mhz ciè 10 ns basta moltiplicare per due i valori riportati nell'esempio per trovare la risposta all'esercizio.
Direi proprio di no, questa scorciatoia non è giustificata.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 30-10-2011, 17:48:28
Il ciclo di clock è di 20 ns, ed è la durata di T1 = T2 = T3. Il ciclo di lettura consta di 3 cicli di clock. Quindi abbiamo tre cicli dove ogni ciclo  di clock è composto da 20 ns , quindi in definitiva abbiamo che il ciclo di lettura consta di T1+T2+T3= 60 ns, a questi 60 ns vanno sottratti i pimi 10 ns che rappresenta il primo mezzo ciclo di clock, a questa sottrazione vanno aggiunti i 3 ns secondi per asserire i due segnali MREQ# e RD, a questi l'ultimo mezzo ciclo di T3 cioè 10 ns,L'ultimo mezzo cilco di T3 serve per reimpostare nuovamente i segnali.

60-10-3-10=37 ns ha la memoria per produrre i dati in T3. spero sia cosi :-)|


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 31-10-2011, 14:21:53
(...) MREQ# e RD, a questi l'ultimo mezzo ciclo di T3 cioè 10 ns,L'ultimo mezzo cilco di T3 serve per reimpostare nuovamente i segnali.

60-10-3-10=37 ns ha la memoria per produrre i dati in T3.
Un po' meno: oltre al mezzo ciclo di T3,  deve tener conto di TDS, ovvero il minimo tempo di impostazione dei dati prima del fronte di discesa del clock in T3.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 31-10-2011, 16:15:04
(...) MREQ# e RD, a questi l'ultimo mezzo ciclo di T3 cioè 10 ns,L'ultimo mezzo cilco di T3 serve per reimpostare nuovamente i segnali.

60-10-3-10=37 ns ha la memoria per produrre i dati in T3.
Un po' meno: oltre al mezzo ciclo di T3,  deve tener conto di TDS, ovvero il minimo tempo di impostazione dei dati prima del fronte di discesa del clock in T3.
Perfetto  già i dati sono stati messi a disposizione dalla memoria, ovviamente bisogna aspettare il tempo che si propaghino cioè i 2 ns di TDS quindi abbiamo 60-10-3-10-2=35 ns.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 31-10-2011, 16:41:45
Esercizio:n°22 ,lezione 9
Per la lettura su bus sincrono specificata appresso, con clock a 100 MHz, se si porta TDS a 4 ns, si possono usare chip di memoria da 15 ns ?E da 10ns?

Nel caso specifico abbiamo un clock di 10 ns al solito abbiamo tre cilcili di clock per un totale di T1+T2+T3=30ns quindi abbiamo

30-5-3-5-4=13 ns Nel caso specifico 

Dato che sono sufficienti 13 ns, anche nel caso peggiore una memoria a 10 ns è sempre in grado di fornire la risposta durante il ciclo di T3.
Una meoria di 15 ns potrebbe non farcela in tempo e in tal caso dovrebbe inserire un secondo stato di attesa e rispondere durante T4


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 31-10-2011, 18:14:16
Quesito 23 lezione 9

Indicando con TA1,TA2 le transizoni delle linee indirizzo TMREQ1,TMREQ2 quelle di MREQ# etc scrivere i vincoli di ordine temporale nel bus asincrono.
Posso avere delle delucidazioni non riesco a capire cosa intende l'esercizio per vincoli temporali.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 31-10-2011, 19:38:33
Posso avere delle delucidazioni non riesco a capire cosa intende l'esercizio per vincoli temporali.
Si tratta di specificare una relazione di precedenza temporale fra le transizioni in gioco. Designando tale relazione con "<" (leggi: "precede"), valgono ad es. i seguenti vincoli:
  • TA1 < TMREQ1 < TMSYN1
  • TA1 < TRD1 < TMSYN1
  • etc.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 01-11-2011, 16:13:04
Posso avere delle delucidazioni non riesco a capire cosa intende l'esercizio per vincoli temporali.
Si tratta di specificare una relazione di precedenza temporale fra le transizioni in gioco. Designando tale relazione con "<" (leggi: "precede"), valgono ad es. i seguenti vincoli:
  • TA1 < TMREQ1 < TMSYN1
  • TA1 < TRD1 < TMSYN1
  • etc.
TA1 < TMREQ1 < TMSYN1
TA1 < TRD1 < TMSYN1
TA1<TMSN1<TDATA1
TA1<TDATA1<TSSYN1

TA2>TMREQ2>TDATA2
TA2>TRD2>TDATA2
TA2>TMSYN2>TSSYN2

">"leggi precedente


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 01-11-2011, 18:36:44
TA1 < TMREQ1 < TMSYN1
TA1 < TRD1 < TMSYN1
TA1<TMSN1<TDATA1
TA1<TDATA1<TSSYN1
Qui c'è un po' di ridondanza: la relazione "<" è transitiva (essendo un ordinamento stretto), dunque non è necessario specificare ciò che consegue dalla transitività. Ciò implica che le ultime due righe possono essere sostituite dalla seguente:
TMSYN1 < TDATA1 < TSSYN1
Quote
TA2>TMREQ2>TDATA2
TA2>TRD2>TDATA2
TA2>TMSYN2>TSSYN2

">"leggi precedente
direi "preceduto da", se ">" è (come appare) la conversa di "<". Qui c'è qualcosa da aggiustare, tenendo conto della Fig. 3.39 del testo. In particolare, certamente:
TMSYN2 < TDATA2
TMSYN2 < TSSYN2
Inoltre, come specificato dalle frecce in figura, TSSYN1 precede il fronte di salita (cioè: suffisso "2") di numerosi altri segnali, mentre TDATA2 non ne precede alcuno...


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 21-11-2011, 17:52:33
Quesito 17
Per una microistruzione MIC 1 che ha Read =1, il dato letto in MDR è Disponibile solo due microistruzioni dopo la sua esecuzione.Perchè?
Una lettura che ha inizio al ciclo k fornisce dati alla fine del ciclo k+1 e quindi potranno essere utilizzati solo al ciclo k+2.
Questo come detto a proposito dei bus sincroni e asincroni, le memorie non sono in grado di far fronte istantaneamente a una richiesta di lettura o  scrittura che non  può quindi essere cocnlusa nello stesso ciclo di clock, nel quale è stata inoltrata la richiesta.

Nelle dispense si trova pure il grafico dell clock e gli istanti precisi in cui è disponibile il dato


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 21-11-2011, 18:26:24
Quesito 18 nella microarchitettura Mic-1, il registro del bus b è codificato in 4 bit della microistruzione, mentre i 9 bit del bus c sono mappati individualmente nel relativo campo, perchè?

Per ridurre il numero di bit il controllo da 29 a 24 la nostra microarchitettura utilizza un decoder che con soli 4 bit è in grado di specificare quale dei 9 registri(H;OPC;TOS;CPP;LV;SP;PC;MDR;MAR) abilitare sul bus b 2^4=16>9 


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 21-11-2011, 18:50:08
Quesito 19
JMPC=1 in una microistruzione Mic-1 abilita l'or tra MBR e NEXT_ADRESS[0-7] per aggiornare MPC. Ha senso una microarchitettura con JMPC=1e NEXT_ADDRESS=0X1FF, perchè?

Consideriamo il campo Addr di nove bit, NET_ADDRESS potrebbe essere ox1FF, tuttavia il bit piu significativo del campo Addr non è utilizzato in nessun modo.Infatti non avrebbe senso se realmente il calcolo del bit[8]di MPC avvenisse secondo lo schema:

              (JAM AND N)OR(JAM AND Z)OR NEXT_ADDRESS[8]
poichè NEXT_ADDRESS fosse OX1FF, per esempio, non sarebbe possibile specificare in alcuna maniera una secondo indirirzzo cui il microprogramma dovrebbe saltare nel caso in cui il test sun  N e Z sia positivo.
Infatti (JAMN AND N)OR(JMNZ AND Z) puo solo modificare il bit [8]di MPC da zero a uno, ma se questo venisse preso già come uno da Addr non sarebbe possibile specificare nessun altro indirizzo cui effettuare il salto e cosi sia che il test sia positivo, sia che si verifichi negativo, la prossima micro istruzione eseguita sarà comunque OX1FFe JMPC=1. Concludiamo che non ha senso poichè MPC conterrà sempre  e comunque OXFF nei bit da 0 a 7 , sia che JMPC=1, e quindi OXFF messo in OR conMBR restituendo comunque OXFF, sa che JMPC=0


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 22-11-2011, 19:25:54
Quesito N°20
La traduzionein mic 1 dell'istruzione MAL IF(Z)gotoL1; else goto L2 deve assegnare a L2 un indirizzo nella metà bassa della memoria di controllo. Perchè

Sappiamo invece , che  è L1 che deve essere più in  basso di 256 word, prorpio perchè se il test su Z è positivo il bit i MPC sarà uno , altrimenti zero. quindi le alternative sono
L2 se il test è negativo
L1 se il test è positivo


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 24-11-2011, 12:31:30
Quesito 17
(...)
Nelle dispense si trova pure il grafico dell clock e gli istanti precisi in cui è disponibile il dato
La risposta è OK. Non so però a quali dispense faccia riferimento...


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 24-11-2011, 19:30:52
Quesito 17
(...)
Nelle dispense si trova pure il grafico dell clock e gli istanti precisi in cui è disponibile il dato
La risposta è OK. Non so però a quali dispense faccia riferimento...
questo grafico si trova a pag 10 (http://www.dmi.unict.it/~barba/Architetture.html/MATERIALE-IN-RETE/LUCIDI-MIC1-IJVM/MicroArchitettura.pdf ).

I  quesiti 18, 19, 20, esposti. Sono corretti o necessitano di correzzione.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-11-2011, 10:34:48
I  quesiti 18, 19, 20, esposti. Sono corretti o necessitano di correzzione.
Sì, provvedo alla correzione. Abbia pazienza, stavo rispondendo ieri mattina, ma un black-out al III blocco mi ha interrotto, e dopo il ripristino la mia autenticazione alla rete wireless è andata in tilt.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-11-2011, 10:40:58
Quesito 18 nella microarchitettura Mic-1, il registro del bus b è codificato in 4 bit della microistruzione, mentre i 9 bit del bus c sono mappati individualmente nel relativo campo, perchè?

Per ridurre il numero di bit il controllo da 29 a 24 la nostra microarchitettura utilizza un decoder che con soli 4 bit è in grado di specificare quale dei 9 registri(H;OPC;TOS;CPP;LV;SP;PC;MDR;MAR) abilitare sul bus b 2^4=16>9  
La risposta è corretta (eccetto che non capisco cosa significhi "il controllo da 29 a 24", che peraltro fa danno alla struttura sintattica della frase: suppongo che "il" dovrebbe essere "di") ma non è completa. C'è da aggiungere che la microarchitettura hardware impone che solo uno dei registri possa essere abilitato sul bus B, fornendo così l'input alla ALU, mentre permette che l'output della ALU possa essere distribuito simultaneamente a più registri. La mappa individuale dei registri per l'accesso al bus C permette di sfruttare questa possibilità, mentre ciò non sarebbe possibile se si impiegasse una codifica, che potrebbe specificarne solo uno.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 27-11-2011, 12:53:55
Quesito 19
JMPC=1 in una microistruzione Mic-1 abilita l'or tra MBR e NEXT_ADRESS[0-7] per aggiornare MPC. Ha senso una microarchitettura con JMPC=1e NEXT_ADDRESS=0X1FF, perchè?

Consideriamo il campo Addr di nove bit, NET_ADDRESS potrebbe essere ox1FF, tuttavia il bit piu significativo del campo Addr non è utilizzato in nessun modo.Infatti non avrebbe senso se realmente il calcolo del bit[8]di MPC avvenisse secondo lo schema:

              (JAM AND N)OR(JAM AND Z)OR NEXT_ADDRESS[8]
poichè NEXT_ADDRESS fosse OX1FF, per esempio, non sarebbe possibile specificare in alcuna maniera una secondo indirirzzo cui il microprogramma dovrebbe saltare nel caso in cui il test sun  N e Z sia positivo.
Infatti (JAMN AND N)OR(JMNZ AND Z) puo solo modificare il bit [8]di MPC da zero a uno, ma se questo venisse preso già come uno da Addr non sarebbe possibile specificare nessun altro indirizzo cui effettuare il salto e cosi sia che il test sia positivo, sia che si verifichi negativo, la prossima micro istruzione eseguita sarà comunque OX1FFe JMPC=1. Concludiamo che non ha senso poichè MPC conterrà sempre  e comunque OXFF nei bit da 0 a 7 , sia che JMPC=1, e quindi OXFF messo in OR conMBR restituendo comunque OXFF, sa che JMPC=0
Più che 'microarchitettura' direi 'microistruzione'. L'intuizione è giusta, ma il ragionamento è un po' limitato. Lei si concentra sul bit alto (il più significativo) di NEXT_ADDRESS, nel caso (un po' raro) in cui anche JAMN e/o JAMZ siano non nulli. Premesso che il salto a un indirizzo diverso da quello risultante dall'OR di MPC e NEXT_ADDRESS dovrebbe avvenire in caso di esito negativo del test (N o Z o entrambi nulli), e come lei argomenta non può avvenire perché NEXT_ADDRESS[8]=1 (vanificando così l'eventuale alternativa), è anche e ben più significativo il fatto, da considerare quando solo il bit JMPC dei tre bit di JAM sia 1 (caso ben più frequente), che NEXT_ADDRESS[0-7]=0xFF rende irrilevante il contenuto di MBR, che invece dovrebbe essere significativo per una microistruzione sensata in cui JMPC=1. Sostanzialmente, la microistruzione in considerazione equivale a un salto incondizionato a quella di indirizzo 0x1FF.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 27-11-2011, 12:58:23
Quesito N°20
La traduzionein mic 1 dell'istruzione MAL IF(Z)gotoL1; else goto L2 deve assegnare a L2 un indirizzo nella metà bassa della memoria di controllo. Perchè

Sappiamo invece , che  è L1 che deve essere più in  basso di 256 word, prorpio perchè se il test su Z è positivo il bit i MPC sarà uno , altrimenti zero. quindi le alternative sono
L2 se il test è negativo
L1 se il test è positivo
Ragionamento corretto ma conclusione (dalla quale comincia) erronea. Dev'essere L2 a stare nella metà bassa, proprio per il ragionamento da lei esposto. Avrei pensato a un errore di battitura se non avesse esordito con "invece".


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 25-01-2012, 19:22:28
Quesito 19
JMPC=1 in una microistruzione Mic-1 abilita l'or tra MBR e NEXT_ADRESS[0-7] per aggiornare MPC. Ha senso una microarchitettura con JMPC=1e NEXT_ADDRESS=0X1FF, perchè?

Consideriamo il campo Addr di nove bit, NET_ADDRESS potrebbe essere ox1FF, tuttavia il bit piu significativo del campo Addr non è utilizzato in nessun modo.Infatti non avrebbe senso se realmente il calcolo del bit[8]di MPC avvenisse secondo lo schema:

              (JAM AND N)OR(JAM AND Z)OR NEXT_ADDRESS[8]
poichè NEXT_ADDRESS fosse OX1FF, per esempio, non sarebbe possibile specificare in alcuna maniera una secondo indirirzzo cui il microprogramma dovrebbe saltare nel caso in cui il test sun  N e Z sia positivo.
Infatti (JAMN AND N)OR(JMNZ AND Z) puo solo modificare il bit [8]di MPC da zero a uno, ma se questo venisse preso già come uno da Addr non sarebbe possibile specificare nessun altro indirizzo cui effettuare il salto e cosi sia che il test sia positivo, sia che si verifichi negativo, la prossima micro istruzione eseguita sarà comunque OX1FFe JMPC=1. Concludiamo che non ha senso poichè MPC conterrà sempre  e comunque OXFF nei bit da 0 a 7 , sia che JMPC=1, e quindi OXFF messo in OR conMBR restituendo comunque OXFF, sa che JMPC=0
Più che 'microarchitettura' direi 'microistruzione'. L'intuizione è giusta, ma il ragionamento è un po' limitato. Lei si concentra sul bit alto (il più significativo) di NEXT_ADDRESS, nel caso (un po' raro) in cui anche JAMN e/o JAMZ siano non nulli. Premesso che il salto a un indirizzo diverso da quello risultante dall'OR di MPC e NEXT_ADDRESS dovrebbe avvenire in caso di esito negativo del test (N o Z o entrambi nulli), e come lei argomenta non può avvenire perché NEXT_ADDRESS[8]=1 (vanificando così l'eventuale alternativa), è anche e ben più significativo il fatto, da considerare quando solo il bit JMPC dei tre bit di JAM sia 1 (caso ben più frequente), che NEXT_ADDRESS[0-7]=0xFF rende irrilevante il contenuto di MBR, che invece dovrebbe essere significativo per una microistruzione sensata in cui JMPC=1. Sostanzialmente, la microistruzione in considerazione equivale a un salto incondizionato a quella di indirizzo 0x1FF.
Nel libro c'è scritto che quando JMPC=1 gli 8 bit di MBR sono collegati in OR con gli otto bit meno significativi del campo NEXT_ADDRESS della microistruzione precedente. Poi il libro puntualizza quando JMPC vale=1 gli 8 bit meno significativi di NEXT_ADDRESS valgono 0.Il bit più significativo può essere 0 oppure 1 e quindi il vlore di NEXT_ADDRESS utilizato con JMPC è generalmente 0x000 oppure 0x100. Teoricamente questa istruzione  non avrebbe senso ma nel caso specifico risulta essere un salto incondizionato.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 26-01-2012, 14:15:33
Poi il libro puntualizza quando JMPC vale=1 gli 8 bit meno significativi di NEXT_ADDRESS valgono 0.
Per la precisione, il testo recita (corsivo mio): "In genere quando JMPC vale 1, ...". La sua conclusione, comunque, è corretta.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 26-01-2012, 16:02:28
Lezione 10 quesito 21
L'espressione di destra di un assegnamento nel linguaggio MAL può avere la forma B-H, dove B è una variabile, ma non la forma H-B Perchè?

I registri sono selezionati due linee di controllo, una per abilitare il bus B e l'altra per abilitare il bus C. Il bus B può essere abilitato da un solo registro per volta, in quanto il trasferimento dei dati da parte di due registri contemporaneamente porterebbe a dei dati inconsistenti. Il bus C può essere invece abilitato da più di un registro contemporaneamente, lo stesso valore presente in esso può infatti essere scritto senza problemi su più di un registro.
Guaradndo pure lo schema Il registro H non è collegato al Bus B.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 27-01-2012, 04:25:38
Guaradndo pure lo schema Il registro H non è collegato al Bus B.
Questo è il vero punto di partenza della risposta giusta, ciò che ha scritto prima è irrilevante alla domanda. Oltre al fatto che il registro H è collegato solo all'input A della ALU, deve considerare gli input di controllo della ALU e quali funzioni essi le permettano di calcolare.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 27-01-2012, 18:58:00
Guaradndo pure lo schema Il registro H non è collegato al Bus B.
Questo è il vero punto di partenza della risposta giusta, ciò che ha scritto prima è irrilevante alla domanda. Oltre al fatto che il registro H è collegato solo all'input A della ALU, deve considerare gli input di controllo della ALU e quali funzioni essi le permettano di calcolare.

Ciascuno dei registri è pilotato da uno o due segnali di controllo, nel caso specifico freccia bianca per abilitare l'output del registro verso il bus B.Gli unici due registri ad essere sprovvisti di suddetto segnale sono appunto MAR e H. Infatti H è l'unico possibile input sinistro della ALU ed è quindi sempre abilitato.Infatti osservando i segnali di controllo che gestiscono le funzioni  dell'ALU, è possibile solo effettuare B-A,la configurazione corrispondente è (F0;F1;ENA;ENB;INVA;INC;), tutti impostati a (1).Dove B è uno dei registri collegati con il Bus B. Mentre A risulta essere H  l'unico possibile input sinistro della ALU ed è quindi sempre abilitato.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 27-01-2012, 19:15:22
Guaradndo pure lo schema Il registro H non è collegato al Bus B.
Questo è il vero punto di partenza della risposta giusta, ciò che ha scritto prima è irrilevante alla domanda. Oltre al fatto che il registro H è collegato solo all'input A della ALU, deve considerare gli input di controllo della ALU e quali funzioni essi le permettano di calcolare.

Ciascuno dei registri è pilotato da uno o due segnali di controllo, nel caso specifico freccia bianca per abilitare l'output del registro verso il bus B.Gli unici due registri ad essere sprovvisti di suddetto segnale sono appunto MAR e H. Infatti H è l'unico possibile input sinistro della ALU ed è quindi sempre abilitato.Infatti osservando i segnali di controllo che gestiscono le funzioni  dell'ALU, è possibile solo effettuare B-A,la configurazione corrispondente è (F0;F1;ENA;ENB;INVA;INC;), tutti impostati a (1).Dove B è uno dei registri collegati con il Bus B. Mentre A risulta essere H  l'unico possibile input sinistro della ALU ed è quindi sempre abilitato.
Lezione 11 (Quesito 21)
La sintassi di Mal Per l'espressione a destra di un assegnamento permette la sottrazione  a una variabile di 1 o della Variabile H ma non  di un'altra variabile. Perchè?
 questi due quesiti sono molto simili  tra loro.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 28-01-2012, 21:47:01
questi due quesiti sono molto simili  tra loro.
Vero, ma non identici. La differenza sta nella possibilità di sottrarre 1 a una variabile. Con quali valori dei segnali di controllo si può realizzare questa funzione?


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 29-01-2012, 18:46:25
questi due quesiti sono molto simili  tra loro.
Vero, ma non identici. La differenza sta nella possibilità di sottrarre 1 a una variabile. Con quali valori dei segnali di controllo si può realizzare questa funzione?
Nel caso specifico i valori dei segnali di controllo che permettono di realizzare questa funzione sono:
F0=1
F1=1
ENA=0
ENB=1
INVA=1
INC=0
Questi sono i segnali che permettono la funzione   Dest=Source-1.
Mentre per la funzione che  riguarda Dest=Source-H i segnali di controllo dell'Alu devono essere settati :
F0=1
F1=1
ENA=1
ENB=1
INVA=1
INC=1


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 08-03-2012, 11:46:08
L'argomento è ridenominato, per distinguerlo da quelli delle successive edizioni dell'insegnamento.


Title: Re:Quesiti a risposta aperta
Post by: کtεvЭ on 30-04-2012, 10:21:35
Code:
Un calcolatore ha un bus a 200 MHz, 32 bit per ciclo, e un disco Ultra4-SCSI che lo usa a 160 MB/s. La CPU ha un ciclo esecutivo di 1 ns. In che misura percentuale il disco la rallenta (max 5 righe)

 Io ho pensato che siccome lo scsi utilizza un bus di 160 MHz/s e il bus del calcolatore è di 200 il disco scsi rallenta la cpu di 40 MHz/s pari al 33% della sua velocità disponibile.
Qui c'è un conto giusto ma non esplicitato (40 = 160/4, dove 4 è il n. di byte per ciclo, 4 = 32/8), e un conto sbagliato: 40 è il 20% di 200, non il 33%.

Questa è la mia soluzione, che porta ad un risultato equivalente a quello del professore.

200MHz con 32 bit per ciclo equivale a dire:

Accessi al bus: 200M/sec per 32 bit ogni accesso.

32bit = 4B (1B = 8bit, 32/8 = 4).

200M * 4B = 800MB/sec

Lo SCSI trasferisce 160MB/sec

Secondo la proporzione:

800 : 100 = 160 : x

(100 * 160) / 800 = 20.

Questo 20% indica a che percentuale lavora lo SCSI rispetto al Bus, quindi la risposta corretta non dovrebbe essere 80%? (100% del bus meno il 20% dello SCSI).


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 30-04-2012, 22:09:17
Questo 20% indica a che percentuale lavora lo SCSI rispetto al Bus, quindi la risposta corretta non dovrebbe essere 80%? (100% del bus meno il 20% dello SCSI).
Basta intendersi sulla terminologia. Si chiede in che misura percentuale il disco rallenti la CPU. Se questa lavora al 80% invece che al 100% di quanto le permetterebbe il bus in assenza del disco, si intende che questo la rallenti del 20%. In breve, sembra controintuitivo dire che il rallentamento sia tanto maggiore quanto minore è l'effetto: in tale terminologia, un rallentamento del 100% sarebbe un rallentamento nullo.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: کtεvЭ on 11-05-2012, 12:29:21
Quesito 23 Lezione 8:
Modificare il circuito seguente (Fig. 3.25 del testo) per ottenere un generatore di impulsi sul fronte di discesa del clock, e tracciarne i diagrammi temporali dei segnali.

Ho usato lo stesso circuito del libro sostituendo la porta AND con una porta NOR. L'impulso si trova infatti quando i segnale di clock e NOT clock valgono 0,ovvero sul fronte di discesa.

(http://desmond.imageshack.us/Himg225/scaled.php?server=225&filename=quesito23.jpg&res=landing)


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: کtεvЭ on 14-05-2012, 10:14:01
Quesito 22 Lezione 8:

(http://desmond.imageshack.us/Himg821/scaled.php?server=821&filename=circuito22.jpg&res=landing)

Ho nominato: Input in alto = A, Input in basso = B.
Quando B è 1, allora il secondo ingresso della porta OR è sempre 0. Mentre quando B è 0, il secondo ingresso della porta OR è uguale al valore dell'output precedente.
Se A=0 e B=0  il valore di output del circuito resta invariato (memoria di 1 bit). Se A=1 per qualsiasi valore di B l'output è 1.
Se A=1 e B=impulso allora l’output è sempre 1.
Se A=impulso e B=1, l’output è semplicemente un impulso ritardato dalla porta OR, poiché la porta AND ha come output sempre 0 (ha un ingresso sempre a 0 ed un altro che varia in base al valore di output precedente).

Non riesco però a capire come può funzionare da flip-flop.


Title: Re:Quesiti a risposta aperta
Post by: کtεvЭ on 22-05-2012, 09:31:27
Quote
Calcolare quanti nanosecondi impiega Mic-1 a 2 GHz per eseguire l'istruzione Java "i = j + k;" (max 5 righe).

Tale codice in Mic-1 ha bisogno di 2 ILOAD (j e k), un ISTORE (i) e un IADD (j+k), ovvero 5+5 (iload)+ 6 (istore) + 3 (iadd) = 19 istruzioni da eseguire. Dato che 2 Ghz consentono 2 miliardi di operazioni al secondo, con una proporzione (2 miliardi : 1 = 19 : x) otteniamo 0,0000000095 sec, il nanosecondo è un miliardesimo di secondo, quindi 9,5 ns.

Ho un dubbio su questa soluzione. Ogni volta che viene eseguita un'operazione, l'ultima istruzione è un salto verso Main, che contiene a sua volta un'istruzione, quest'ultima non va contata?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 24-05-2012, 06:24:59
Quesito 22 Lezione 8:
Non riesco però a capire come può funzionare da flip-flop.
Funziona da flip-flop S/R dando un impulso a una delle due porte, con l'altra a 0. L'impulso S (cioè alla porta A, con B=0) dà l'output 1, che permane fino a nuovo impulso poiché, come lei nota:
Quote
Se A=0 e B=0  il valore di output del circuito resta invariato (memoria di 1 bit).
Analogamente, l'impulso R (cioè alla porta B) dà l'output 0, che permane fino a nuovo impulso per la stessa ragione.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 24-05-2012, 06:32:15
Quote
Calcolare quanti nanosecondi impiega Mic-1 a 2 GHz per eseguire l'istruzione Java "i = j + k;" (max 5 righe).

Tale codice in Mic-1 ha bisogno di 2 ILOAD (j e k), un ISTORE (i) e un IADD (j+k), ovvero 5+5 (iload)+ 6 (istore) + 3 (iadd) = 19 istruzioni da eseguire. [...]

Ho un dubbio su questa soluzione. Ogni volta che viene eseguita un'operazione, l'ultima istruzione è un salto verso Main, che contiene a sua volta un'istruzione, quest'ultima non va contata?
Sì, dunque le microistruzioni da eseguire sono 23, non 19.


Title: INFO DOMANDE PROVA SCRITTA
Post by: vertigo86 on 24-05-2012, 14:51:56
Salve, due domande non mi sono chiare...

Domanda 1)

Sarebbe possibile usare una IFU più economica in Mic-2, con registro di scorrimento da 5 byte invece che 6?
Ed una con registro di scorrimento da 4 byte? Motivare le risposte

Domanda 2)

Se oltre il 90% dei file occupano al più 8KB ca. mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco? Formulare la risposta

GRAZIE






Title: Re:INFO DOMANDE PROVA SCRITTA
Post by: Giuseppe Scollo on 24-05-2012, 21:53:09
Salve, due domande non mi sono chiare...

Domanda 1)

Sarebbe possibile usare una IFU più economica in Mic-2, con registro di scorrimento da 5 byte invece che 6?
Ed una con registro di scorrimento da 4 byte? Motivare le risposte

Domanda 2)

Se oltre il 90% dei file occupano al più 8KB ca. mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco? Formulare la risposta

GRAZIE
C'è un topic apposito per le domande a risposta aperta dell'anno scorso: AA 2010-2011: Quesiti a risposta aperta (http://http:/ /forum.sdai.unict.it/index.php?topic=12253.0)

Ricollocherò lì questa comunicazione domani (venerdì 25), e le risponderò la prossima settimana, se nel frattempo non lo avrà già fatto qualcun altro.


Title: Re:Quesiti a risposta aperta
Post by: کtεvЭ on 25-05-2012, 20:19:19
Le due frasi seguenti, riprodotte dai due paragrafi del testo citati, appaiono in contraddizione. Lo sono? Se sì, quale delle due è corretta? Se no, perché (max 5 righe)?
    * 4.4.2, ultimo paragrafo in "Unione del ciclo d'interpretazione con il microcodice":
      "Il prezzo da pagare è solamente un piccolo incremento della memoria
      di controllo."
    * 4.4.4, primo paragrafo:
      "il costo della IFU è senza dubbio maggiore del guadagno ottenuto
      riducendo la memoria di controllo."



Si sono in contraddizone ed è giusta quella del paragrafo 4.4.2 perchè  il prezzo da pagare è solamente un piccolo incremento della memoria di controllo.


Non riesco a trovare la contraddizione, per me sembrano corrette entrambe.

Unire il ciclo di interpretazione con il microcodice, vuol dire eliminare l'operazione Main1 e replicare l'istruzione contenuta in esso in ogni altra operazione.
Se si trova un ciclo morto in queste operazioni, cioè un'istruzione vuota (nope) , non si causa nessun incremento nella memoria di controllo, mentre se cosi non fosse bisogna aggiungere una nuova istruzione e quindi come dice il testo: "Il prezzo da pagare è solamente un piccolo incremento della memoria di controllo".

E' vera anche la seconda: per realizzare una IFU ci sono dei costi aggiuntivi e in più la dimensione del chip aumenta (come dice il testo, più è grande un chip, più è costoso).
Inoltre la IFU serve ad effettuare il fetching. Mediante un registro a scorrimento tiene sempre aggiornato i valori di MBR1/U e MBR2/U in modo da essere sempre pronti qualora il microcodice lo richiedesse. Grazie a ciò si riduce la dimensione della memoria di controllo (nel microcodice le istruzioni di fetch vengono omesse).


Title: Re:INFO DOMANDE PROVA SCRITTA
Post by: Giuseppe Scollo on 28-05-2012, 12:51:57
due domande non mi sono chiare...

Domanda 1)

Sarebbe possibile usare una IFU più economica in Mic-2, con registro di scorrimento da 5 byte invece che 6?
Ed una con registro di scorrimento da 4 byte? Motivare le risposte
È ovvio che il costo della IFU decresce al decrescere della capacità del registro di scorrimento. La struttura della IFU è schematizzata in Figura 4.27, dove il pre-prelievo nel registro di scorrimento avviene mediante lettura di una parola dalla memoria, ovvero 4 byte alla volta, com'è peraltro evidente dalle relative transizioni dell'automa in Figura 4.28. Perché una lettura da memoria possa aver luogo occorre dunque che almeno 4 byte siano liberi nel registro di scorrimento. Naturalmente, maggiore è la capacità di quest'ultimo, minore è la probabilità che una cache miss provochi uno stallo nel tentativo di lettura dal registro di scorrimento verso il percorso dati (registro MBR). A lei il resto del ragionamento...

Quote
Domanda 2)

Se oltre il 90% dei file occupano al più 8KB ca. mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco? Formulare la risposta
Le operazioni di I/O sul disco trasferiscono un blocco alla volta, e per ognuna di queste il tempo di esecuzione ha varie componenti: posizionamento, latenza, trasferimento del blocco. L'ottimalità della dimensione dei blocchi va valutata rispetto a due fattori: tempo di esecuzione dell'I/O (a parità di quantità di dati trasferiti) e spazio effettivamente utilizzato in rapporto allo spazio occupato (che è sempre un multiplo della dimensione del blocco). Credo che ora abbia tutti gli elementi per ragionare sul quesito proposto.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 28-05-2012, 16:49:12
Le due frasi seguenti, riprodotte dai due paragrafi del testo citati, appaiono in contraddizione. Lo sono? Se sì, quale delle due è corretta? Se no, perché (max 5 righe)?
    * 4.4.2, ultimo paragrafo in "Unione del ciclo d'interpretazione con il microcodice":
      "Il prezzo da pagare è solamente un piccolo incremento della memoria
      di controllo."
    * 4.4.4, primo paragrafo:
      "il costo della IFU è senza dubbio maggiore del guadagno ottenuto
      riducendo la memoria di controllo."



Si sono in contraddizone ed è giusta quella del paragrafo 4.4.2 perchè  il prezzo da pagare è solamente un piccolo incremento della memoria di controllo.


Non riesco a trovare la contraddizione, per me sembrano corrette entrambe.

Unire il ciclo di interpretazione con il microcodice, vuol dire eliminare l'operazione Main1 e replicare l'istruzione contenuta in esso in ogni altra operazione.
Se si trova un ciclo morto in queste operazioni, cioè un'istruzione vuota (nope) , non si causa nessun incremento nella memoria di controllo, mentre se cosi non fosse bisogna aggiungere una nuova istruzione e quindi come dice il testo: "Il prezzo da pagare è solamente un piccolo incremento della memoria di controllo".

E' vera anche la seconda: per realizzare una IFU ci sono dei costi aggiuntivi e in più la dimensione del chip aumenta (come dice il testo, più è grande un chip, più è costoso).
Inoltre la IFU serve ad effettuare il fetching. Mediante un registro a scorrimento tiene sempre aggiornato i valori di MBR1/U e MBR2/U in modo da essere sempre pronti qualora il microcodice lo richiedesse. Grazie a ciò si riduce la dimensione della memoria di controllo (nel microcodice le istruzioni di fetch vengono omesse).
Ha perfettamente ragione, è stata una mia svista credere che la prima asserzione (quella del par. 4.4.2) fosse erronea: circoscritta al contesto in cui è posta, è un'asserzione valida. Ho aggiornato la lista delle correzioni (http://www.dmi.unict.it/~scollo/slidy/ae-2011/note/Tanenbaum5EitErrata.txt) di conseguenza. Naturalmente, questa segnalazione le vale un punto di bonus, se non ha ancora registrato l'esame (in tal caso può comunicarmi il suo n. di matricola per e-mail o PM).


Title: Re:Quesiti a risposta aperta
Post by: کtεvЭ on 31-05-2012, 11:14:04
Secondo me non ha significato avere un numero di vie che sia potenza di due in quanto le attuali macchine fanno uso di cache a 3 vie per motivi di efficienza
Mi sembra un giudizio eccessivo, cache a 2 o 4 vie hanno tanto senso quanto cache a 3 o 5 vie, in linea di principio. Dunque, mentre non c'è ragione di preferire le potenze di 2, non ce n'è nemmeno per escluderle a priori.

Di solito si sfruttano le potenze di 2 per non sprecare bit in eventuali indirizzamenti.
Secondo me non c'è nessun vantaggio usare k vie con k potenza di 2, poichè l'indirizzo di memoria, generato da una CPU, non contiene bit che specificano una particolare linea su un elemento di cache set-associative.
In poche parole, il campo LINE indica l'elemento della cache contenente i dati (in questo caso l'elemento è un insieme di k linee), ed una volta trovato, verrà fatta un ricerca sequenziale controllando per ogni linea dell'insieme il bit VALID e il campo TAG.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: کtεvЭ on 12-06-2012, 10:16:31
lezione 17 - Quesito 22 : Definire una macro con 3 parametri A, N, M, risp. da attualizzarsi con nomi di un array, di una costante e di una locazione di memoria, che calcoli in M la media degli N elementi di A (max 15 righe).

MACRO ARRAY_MEDIA A,N,M
   MOV INIZIO, #A            ; inizio = indirizzo dell'array A
   MOV FINE, #A+N            ; fine = ind. dell'array A + N (numero totale di elementi, se ogni elemento = 1 byte)
   MOV CONTA, #0             ; contatore per le somme successive nel ciclo

 CICLO: ADD CONTA,(INIZIO)    ; visto che inizio è un registro che contiene un indirizzo, si usa ind. a reg indiretto
                                                  ;  per estrarre il valore ed effettuare la somma
        ADD INIZIO,#1             ; incremento di inizio di 1 byte
        CMP INIZIO,FINE           ; confronto fra inizio e fine
        BLT CICLO                 ; se inizio < fine, si ritorna all'etichetta ciclo

   DIV CONTA,N               ; conta = conta / n
   MOV M,CONTA               ; assegna ad m il valore della media
ENDM

L'operazione di divisione deve essere anch'essa definita come macro?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-06-2012, 12:26:08
lezione 17 - Quesito 22 : Definire una macro con 3 parametri A, N, M, risp. da attualizzarsi con nomi di un array, di una costante e di una locazione di memoria, che calcoli in M la media degli N elementi di A (max 15 righe).

MACRO ARRAY_MEDIA A,N,M
   MOV INIZIO, #A            ; inizio = indirizzo dell'array A
   MOV FINE, #A+N            ; fine = ind. dell'array A + N (numero totale di elementi, se ogni elemento = 1 byte)
   MOV CONTA, #0             ; contatore per le somme successive nel ciclo

 CICLO: ADD CONTA,(INIZIO)    ; visto che inizio è un registro che contiene un indirizzo, si usa ind. a reg indiretto
                                                  ;  per estrarre il valore ed effettuare la somma
        ADD INIZIO,#1             ; incremento di inizio di 1 byte
        CMP INIZIO,FINE           ; confronto fra inizio e fine
        BLT CICLO                 ; se inizio < fine, si ritorna all'etichetta ciclo

   DIV CONTA,N               ; conta = conta / n
   MOV M,CONTA               ; assegna ad m il valore della media
ENDM

L'operazione di divisione deve essere anch'essa definita come macro?
No, si può supporre che sia eseguibile da un'istruzione macchina. L'esercizio è sostanzialmente corretto, però ho un paio di osservazioni.
  • Quello che lei chiama "contatore" è in realtà un accumulatore. Un contatore tipicamente varia per incrementi (o decrementi) costanti, mentre qui si si accumula una somma iterata.
  • Che INIZIO sia un registro lo dicono solo i commenti, dal codice appare come un simbolo, ovvero nome di una locazione di memoria, e non è conveniente usare la memoria per la funzione a cui è adibito. Oltre a questo, dovrebbero essere registri anche CONTA e FINE, e il valore da porre in FINE andrebbe calcolato con un'istruzione ADD.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: کtεvЭ on 13-06-2012, 09:53:57
  • Quello che lei chiama "contatore" è in realtà un accumulatore. Un contatore tipicamente varia per incrementi (o decrementi) costanti, mentre qui si si accumula una somma iterata.
  • Che INIZIO sia un registro lo dicono solo i commenti, dal codice appare come un simbolo, ovvero nome di una locazione di memoria, e non è conveniente usare la memoria per la funzione a cui è adibito. Oltre a questo, dovrebbero essere registri anche CONTA e FINE, e il valore da porre in FINE andrebbe calcolato con un'istruzione ADD.

Ho modificato il codice usando questa volta registri a 32bit (EAX, EBX...).

MACRO ARRAY_MEDIA A,N,M

   MOV EAX,#A      ; EAX = indirizzo dell'array A in un registro a 4 byte
   MOV EBX,N        ; se ogni elemento dell'array è di 32bit (4 byte), allora  
   MUL EBX,4         ; esso terminerà nella locazione
   ADD EBX, EAX    ; dell'indirizzo A + Nx4
   MOV ECX,#0      ; registro che accumula le somme successive

 CICLO: ADD ECX,(EAX)      ; visto che EAX è un registro che contiene un indirizzo, si usa ind. a reg indiretto
                                           ; per estrarre il valore ed effettuare le somme successive con ECX
        ADD EAX,#4                  ; incremento di 4 byte
        CMP EAX,EBX                ; controllo se si è arrivati a fine array
        BLT CICLO                    ; in caso negativo, si ritorna all'etichetta CICLO

   DIV ECX,N               ; calcolo della media (somme successive diviso il num. elem.)
   MOV M,ECX              ; assegna ad M il valore della media

ENDM


MUL e DIV sono operazioni di moltiplicazione e divisione.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-06-2012, 13:31:32
Ho modificato il codice usando questa volta registri a 32bit (EAX, EBX...).

MACRO ARRAY_MEDIA A,N,M

   MOV EAX,#A      ; EAX = indirizzo dell'array A in un registro a 4 byte
   MOV EBX,N        ; se ogni elemento dell'array è di 32bit (4 byte), allora  
   MUL EBX,4         ; esso terminerà nella locazione
   ADD EBX, EAX    ; dell'indirizzo A + Nx4
   MOV ECX,#0      ; registro che accumula le somme successive

 CICLO: ADD ECX,(EAX)      ; visto che EAX è un registro che contiene un indirizzo, si usa ind. a reg indiretto
                                           ; per estrarre il valore ed effettuare le somme successive con ECX
        ADD EAX,#4                  ; incremento di 4 byte
        CMP EAX,EBX                ; controllo se si è arrivati a fine array
        BLT CICLO                    ; in caso negativo, si ritorna all'etichetta CICLO

   DIV ECX,N               ; calcolo della media (somme successive diviso il num. elem.)
   MOV M,ECX              ; assegna ad M il valore della media

ENDM


MUL e DIV sono operazioni di moltiplicazione e divisione.
Così va meglio, ed è corretto, ma si può fare un po' meglio. È consuetudine usare EAX come registro accumulatore e ECX come contatore. In quest'ultimo caso, impostando inizialmente ECX a N (dunque usando EBX come puntatore agli elementi del vettore), può sostituire le due ultime istruzioni del ciclo con la sola LOOP CICLO (che decrementa automaticamente ECX ed effettua il salto a CICLO se il nuovo valore in ECX è non nullo).


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: کtεvЭ on 19-06-2012, 09:57:01
lezione 19 - Quesito 18 : È necessario che le dimensioni delle pagine siano potenze intere di 2? Sarebbe teoricamente possibile avere pagine di dimensione 4000 B? Se sì, sarebbe una soluzione pratica (max 5 righe)?

No, non c'è nessun obbligo nel definire come potenze di 2 le dimensione delle pagine, purchè sia le pagine negli indirizzi virtuali che quelle negli indirizzi fisici siano di uguali grandezza.
Quindi è possibile avere 4000B di dimensione pagina.

Non sarebbe  però una soluzione pratica.
La MMU (il dispositivo che relaziona indirizzi di mem. virtuale e mem. fisica) ha dei registri di ingresso e dei registri di uscita. Il numero dei bit meno significativi di quest'ultimo (offset) è l'esponente che si da una base 2 per raggiungere la dimensione di pagina prestabilita. Se questa dimensione non fosse una potenza di 2, verrebbero a crearsi degli sprechi di bit.
Nel nostro caso di pagine di 4000B, il registro di uscita userebbe 12bit per l'offset. Ma con 12bit è possibile indirizzare 4KB (4096B) e verrebbero cosi sprecati 96B per ogni pagina.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 19-06-2012, 20:14:12
La MMU (il dispositivo che relaziona indirizzi di mem. virtuale e mem. fisica) ha dei registri di ingresso e dei registri di uscita. Il numero dei bit meno significativi di quest'ultimo (offset) è l'esponente che si da una base 2 per raggiungere la dimensione di pagina prestabilita. Se questa dimensione non fosse una potenza di 2, verrebbero a crearsi degli sprechi di bit.
Nel nostro caso di pagine di 4000B, il registro di uscita userebbe 12bit per l'offset. Ma con 12bit è possibile indirizzare 4KB (4096B) e verrebbero cosi sprecati 96B per ogni pagina.
Giusto, ma non è detto che l'unico inconveniente sarebbe lo spreco di memoria. Va considerata anche la conseguente complicazione nella memoria fisica: tipicamente i dischi hanno il settore come unità di trasferimento minima, e la capacità di un settore è sempre una potenza di 2. Occorrerebbe dunque frammentare informazioni più lunghe inserendo del riempimento fra una pagina e l'altra. Inoltre, dedurre il n. di pagina dall'indirizzo virtuale non sarebbe più effettuabile da una MMU convenzionale, come quella da lei indicata, che ignora i bit meno significativi mediante un semplice scorrimento: occorrerebbe effettuare una divisione per un divisore che non è una potenza di 2, e questa è un'operazione ben più complicata. Il registro di uscita da lei considerato dà l'indirizzo locale di un byte nella pagina, ovvero il resto della divisione in questione, ma ne serve anche il quoziente intero, ovvero il n. di pagina virtuale, per gestire la tabella di corrispondenza fra pagine virtuali e pagine fisicamente in memoria.


Title: Re:INFO DOMANDE PROVA SCRITTA
Post by: کtεvЭ on 21-06-2012, 10:15:27
Quote
Domanda 2)
Se oltre il 90% dei file occupano al più 8KB ca. mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco? Formulare la risposta
Le operazioni di I/O sul disco trasferiscono un blocco alla volta, e per ognuna di queste il tempo di esecuzione ha varie componenti: posizionamento, latenza, trasferimento del blocco. L'ottimalità della dimensione dei blocchi va valutata rispetto a due fattori: tempo di esecuzione dell'I/O (a parità di quantità di dati trasferiti) e spazio effettivamente utilizzato in rapporto allo spazio occupato (che è sempre un multiplo della dimensione del blocco). Credo che ora abbia tutti gli elementi per ragionare sul quesito proposto.

La dimensione ottimale dei blocchi del disco è di 8KB.
Avere dimensioni minori richiederebbe per tutti i file (il 90% è di 8KB mentre il 10% è > 8KB) più accessi e ricerche nel disco, causando un rallentamento dovuto ai tempi appunto di latenza e di posizionamento (in generale occorrono 10ms per raggiungere il blocco e 1ms circa per leggere 8KB. Riferimento 6.2.2 del testo).
Con la dimensione dei blocchi di 8KB, per il 90% dei file non ci sarebbe nessuno spreco in memoria (dato che sono 8KB cad.), mentre per il restante 10% che sono molto più grandi, in media lo spreco è metà di un blocco per ogni file (uno spreco più che accettabile dato che sono pochi i file di grandi dimensioni).


Title: Re:INFO DOMANDE PROVA SCRITTA
Post by: Giuseppe Scollo on 22-06-2012, 11:49:25
Quote
Domanda 2)
Se oltre il 90% dei file occupano al più 8KB ca. mentre gli altri usano oltre il 90% dello spazio disco occupato, che si può dire della dimensione ottimale dei blocchi del disco? Formulare la risposta
La dimensione ottimale dei blocchi del disco è di 8KB.
Avere dimensioni minori richiederebbe per tutti i file (il 90% è di 8KB mentre il 10% è > 8KB) più accessi e ricerche nel disco, causando un rallentamento dovuto ai tempi appunto di latenza e di posizionamento (in generale occorrono 10ms per raggiungere il blocco e 1ms circa per leggere 8KB. Riferimento 6.2.2 del testo).
Con la dimensione dei blocchi di 8KB, per il 90% dei file non ci sarebbe nessuno spreco in memoria (dato che sono 8KB cad.), mentre per il restante 10% che sono molto più grandi, in media lo spreco è metà di un blocco per ogni file (uno spreco più che accettabile dato che sono pochi i file di grandi dimensioni).
Il ragionamento è sostanzialmente giusto, ma è affetto da una inesattezza che va corretta, con conseguente modifica di qualcuna delle argomentazioni proposte. Il testo del problema recita "Oltre  il 90% dei file occupano al più 8KB ca." (sottolineatura mia). Questo significa che ciascuno di questi file occupa 8KB o meno di 8KB. Non è perciò corretto sostenere che per questi "non ci sarebbe nessuno spreco in memoria (dato che sono 8KB cad.)".


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 06-07-2012, 18:17:16
Può essere che è necessario conoscere il numero dei parametri passati al metodo per non eccedere nella zona di memoria della costant pool??
Direi di no, in quella zona ci trova solo l'indirizzo di inizio del metodo nell'area dei metodi. Alla risposta fornita dal suo collega, da lei citata, avevo obiettato:
Sì, ma i parametri sono posti nello stack prima dell'esecuzione di invokevirtual. Perché, invece, proprio nella interpretazione di invokevirtual è necessario conoscerne il numero?
Dunque i parametri si trovano già sullo stack quando inizia l'interpretazione di invokevirtual, si sa dove cominciano, e occorre sapere dove finiscono... la domanda è: perché occorre sapere anche questo? Sospetterei che nell'interpretazione di invokevirtual si debba effettuare qualche altra scrittura sullo stack, senza correre il rischio di modificare i parametri che già vi si trovano.



Conoscere il numero dei parametri durante l'esecuzione di invokevirtual è importante perchè, per costruire l'indice relativo alla porzione costante di memoria,l'indirizzo base del nuovo blocco delle variabili locali si ottiene sottraendo il numero di parametri dal puntatore allo stack e impostando LV in modo che punti OBJREF.OBJREF viene sovrascritto con l'indirizzo della locazione in cui si trovava il vecchio PC.L'indirizzo di Pc è calcolato sommando la dimensione del blocco delle variabili locali(Parametri+variabili locali),all'indirizzo contenuto in LV.


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-07-2012, 14:33:00
Conoscere il numero dei parametri durante l'esecuzione di invokevirtual è importante perchè, per costruire l'indice relativo alla porzione costante di memoria,
No, direi piuttosto "dopo aver costruito l'indice relativo alla porzione costante di memoria che dà accesso a OBJREF e numero dei parametri nell'area dei metodi,". Il resto va bene:
Quote
l'indirizzo base del nuovo blocco delle variabili locali si ottiene sottraendo il numero di parametri dal puntatore allo stack e impostando LV in modo che punti OBJREF.OBJREF viene sovrascritto con l'indirizzo della locazione in cui si trovava il vecchio PC.L'indirizzo di Pc è calcolato sommando la dimensione del blocco delle variabili locali(Parametri+variabili locali),all'indirizzo contenuto in LV.
purché sia chiaro che qui OBJREF è il contenuto di una locazione nello stack, non quella nella porzione costante di memoria (che, appunto, è costante, dunque non può essere sovrascritta).


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 08-07-2012, 19:46:33
Lezione 13.
Quesito n°19
Il maggior risparmio di ciclci dell' interprete IJVM in Mic-2 rispetto a Mic-1 è dovuto all IFU. Perchè

La IFU permette di ridurre in modo considerevole la lunghezza media del percorso di un'istruzione. In primo luogo elimina interamente il ciclo principale, dato che alla fine di ogni istruzione si effettua un semplice salto all' istruzione successiva. Inoltre risparmia l'ultilizzo della ALU per incremento di PC,e riduce la lungheza  del percorso ogni volta che viene calcolato un indice o uno spiazzamento a 16 bit (dato che assembla  il valore a 16 bit  e lo fornisce direttamente alla ALU come un valore a 32 bit evitando di doverlo assemblare all'interno di H.
Consideriamo IADD la macchina preleva la seconda parola dallo stack ed esegue l'istruzione come prima, tranne il fatto che ,una volta terminata l'operazione ,non è più necessario tornare a MAIN1 per incrementare PC e passare alla microistruzione successiva.Quando la IFU vede che durante IADD3 è stato effettuato un riferimanto a MBR1, il suo registro a scorrimento trasla tutto il proprio contenuto a destra e ricarica sia MBR1 che MBR2. TUtto ciò viene effettuato dall'hardware ,senza l'intervento del microcodice.
Prendiamo ad esempio alcune istruzioni come LDC_W passa da 9 istruzioni a 3 ;ILOAD da 6 a 3; etc..


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 08-07-2012, 22:22:32
lezione 13
Quesito 22

Codificare in MIC-2 l'istruzione  JVM DLOAD Varnum, con indice di 1 byte, che inserisce nello stack la sequenza di 2 variabili locali che inizia a tale posizione.


DLOAD1         OPC = MAR = LV + MBR1U; rd
DLOAD2         MAR = SP = SP + 1
DLOAD3         TOS = MDR; wr
DLOAD4         MAR = OPC + 1; rd
DLOAD5         MAR = SP = SP + 1
DLOAD6         TOS = MDR; wr; goto(MBR)


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 16-07-2012, 15:32:29
Quesito n°16
Un disco da 64 settori di 512 B  per traccia compie una rotazione in 16 ms, con I/O in DMA su bus da 16 bit a 2 MHz
. In che misura percentuale il DMA rallenta la CPU?

 64(settori)*512 Byte=32768 Byte(Traccia)=32kB per traccia

32768 Byte*8 bit=262144 bit/ 16 bit(dimensione Bus)=16384 bit /1024 bit=16k  il trasferimento dei dati viene eseguito a 16k in 16ms.


2MHz reciproco per trovarci il periodo------> 1/2000000=0.0000005 S------>500ns


16384 bit(16k)*500ns=8192000ns=8,192 msec  (tempo di cilco del bus ogni 16msec di tempo reale)
16msec-8,192msec=7,808mec/16msec=0,488*100=48,8% (tempo percentuale utilizzato dalla CPU)
100%-48,8%=51,2%(percentuale di rallentamento della CPU)







Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 16-07-2012, 23:45:05
I conti e il ragionamento sono corretti. Avrei espresso un po' meglio le dimensioni delle grandezze in gioco, e fatto qualche conto in modo più semplice, per esempio:
32768 Byte*8 bit=262144 bit/ 16 bit(dimensione Bus)=16384 bit /1024 bit=16k  il trasferimento dei dati viene eseguito a 16k in 16ms.
Il bus trasferisce 2 byte in un ciclo, dunque per trasferire 32K byte occorrono 16K cicli del bus. Per questi la velocità di rotazione del disco richiede 16 ms di tempo, dunque il trasferimento in DMA usa 1 kK = 1024000 cicli di bus al secondo (va notata la differenza fra k = 1000 e K = 1024).
Quote
2MHz reciproco per trovarci il periodo------> 1/2000000=0.0000005 S------>500ns
OK, perché convenzionalmente la "M" nell'espressione di una frequenza di clock designa 106 (= 1 kk), non 220 (= 1 KK). Tuttavia non sono necessari molti altri conti a questo punto: se il bus compie 2kk cicli al secondo, e di questi il DMA ne usa 1kK, la percentuale di utilizzazione del bus (ovvero il rallentamento della CPU) da parte del DMA è (1kK / 2kk)*100 = (1024/2000)*100 = 51,2%, come da lei calcolato.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 17-07-2012, 13:41:53
Quesito 22
lezione16
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Posso utilizzare l'assemblatare presente nel cd-rom dato in dotazione nel libro cioè as88 ? ho provato ad installare as88 con scarsi risultati qualcuno di voi è riuscito ad utilizzarlo, conoscete qualche guida? oppure il prof ha dato qualche altro simulatore in cui è possibile provare gli esercizi?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 18-07-2012, 16:03:14
Posso utilizzare l'assemblatare presente nel cd-rom dato in dotazione nel libro cioè as88 ? ho provato ad installare as88 con scarsi risultati qualcuno di voi è riuscito ad utilizzarlo, conoscete qualche guida? oppure il prof ha dato qualche altro simulatore in cui è possibile provare gli esercizi?
Non ho provato a installare as88. Se lavora su un sistema open source dovrebbe avere già pre-installato l'assemblatore GNU, detto GAS (GNU ASsembler: eseguibile 'as'), che riconosce la sintassi di quasi tutti i processori in commercio. Il manuale di GAS è on-line (oltre che incluso nella distribuzione): http://sourceware.org/binutils/docs/


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 22-07-2012, 15:50:11
Quesito 20: Il linker risolve il problema della rilocazione e quello dei riferimenti esterni. Spiegare in cosa consistono e in che senso la soluzione del secondo dipende da quella del primo (max 10 righe).

I problmei risolti dal linker  sono la rilocazione e quello dei riferimenti esterni.
Il primo si verifica perchè i moduli hanno sapzi degli indirizzi separati ,mentre il secondo detto "problema della rilocazione esterna"  è dovuto al fatto che l'assemblatore non conosce l'indirizzo da inserire nell'istruzione CALL del modulo oggetto chiamante, dato che ciascuna procedura è stata tradotta in modo indipendente, l'indirizzo del modulo oggetto chiamato non sarà disponibile fino al momento del collegamento.
Questi problemi vengono risolti dal linker attraverso dei passi.

- Costruisce una tabella contenente la lunghezza dei moduli oggetto
- In base alla tabella, assegna un indirizzo di caricamento ad ogni modulo oggetto
- Aggiorna tutti gli indirizzi rilevabili
- Aggiorna i riferimenti a procedure esterne

la seconda parte della domanda? Può darmi una dritta?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 23-07-2012, 16:05:42
[...]
Questi problemi vengono risolti dal linker attraverso dei passi.

- Costruisce una tabella contenente la lunghezza dei moduli oggetto
- In base alla tabella, assegna un indirizzo di caricamento ad ogni modulo oggetto
- Aggiorna tutti gli indirizzi rilevabili
rilocabili, suppongo.
Quote
- Aggiorna i riferimenti a procedure esterne

la seconda parte della domanda? Può darmi una dritta?
Lei ha indicato l'aggiornamento dei riferimenti a procedure esterne quale ultimo dei 4 passi indicati. Sarebbe possibile effettuarlo prima di qualcuno degli altri?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 23-07-2012, 17:58:09
[...]
Questi problemi vengono risolti dal linker attraverso dei passi.

- Costruisce una tabella contenente la lunghezza dei moduli oggetto
- In base alla tabella, assegna un indirizzo di caricamento ad ogni modulo oggetto
- Aggiorna tutti gli indirizzi rilevabili
rilocabili, suppongo.
Quote
- Aggiorna i riferimenti a procedure esterne

la seconda parte della domanda? Può darmi una dritta?
Lei ha indicato l'aggiornamento dei riferimenti a procedure esterne quale ultimo dei 4 passi indicati. Sarebbe possibile effettuarlo prima di qualcuno degli altri?
Del  primo passo credo non sia possibile perchè costruisce la tabella con la relativa lunghezza dei moduli oggetto,il secondo passo permette ai moduli oggetto di acquisire un insieme di indirizzi lineari,continui che inizialmente erano frammentati.Questi passi sicuramente non godono della proprietà commutativa.Io penso che sia possibile invece invertire il terzo passo cioè aggiornare tutti gli indirizzi rilocabili con aggiorna i riferimenti a procedure esterne.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 25-07-2012, 08:41:30
Del  primo passo credo non sia possibile perchè costruisce la tabella con la relativa lunghezza dei moduli oggetto,il secondo passo permette ai moduli oggetto di acquisire un insieme di indirizzi lineari,continui che inizialmente erano frammentati.Questi passi sicuramente non godono della proprietà commutativa.Io penso che sia possibile invece invertire il terzo passo cioè aggiornare tutti gli indirizzi rilocabili con aggiorna i riferimenti a procedure esterne.
E in base a che cosa lo crede? Risolvere i riferimenti a procedure esterne significa sostituire a dei simboli di valore ignoto (i riferimenti in questione) il loro valore, cioè i rispettivi indirizzi. Questi indirizzi sono rilocabili nei moduli in cui tali procedure sono definite, e diventano indirizzi assoluti solo dopo che il linker abbia collegato i moduli, ovvero dopo il terzo passo. O pensa a un  meccanismo diverso?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 05-08-2012, 14:00:30
Programma che calcola il prodotto tra due vettori, il risultato viene posto in un terzo vettore
ovviamente impostiamo i relativi indici
allora
sp lo facciamo puntare all'indirizzo della primo cella del vettore A 0x000
lv lo facciamo puntare all'indirizzo  della prima cella del vettore B 0x005
cpp lo facciamo puntare all'indirizzo della cella del vettore risultante 0x00A
PC=4  lunghezza dei vettiri A e B risultante vettore C di lunghezza 4

INIZIO:    Z=PC; if(Z) goto FINE; else goto PVETT1
PVETT1:  MAR=LV; rd; goto PVETT2
PVETT2:  LV=LV+1; goto PVETT3
PVETT3:  H=MDR; goto PVETT4
PVETT4:  MAR=SP; rd; goto PVETT5
PVETT5: SP=SP+1; goto PVETT6
PVETT6:  TOS=MDR; goto PASSO1
PASSO1:  OPC=TOS; goto PASSO2
PASSO2: TOS=0; goto PASSO3
PASSO3:  Z=OPC; if(Z) goto PASSO6; else goto PASSO4
PASSO4: TOS=H+TOS; goto PASSO5
PASSO5:  OPC=OPC-1;goto PASSO3
PASSO6: MDR=TOS;  goto PVETT7
PVETT7:  MAR=CPP; wr; goto PVETT8
PVETT8: CPP=CPP+1; goto PVETT9
PVETT9: PC=PC-1; goto INIZIO
FINE:

Vorrei capire se ho utilizzato qualche registro in modo improprio.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 05-08-2012, 18:09:04
Programma che calcola il prodotto tra due vettori, il risultato viene posto in un terzo vettore
ovviamente impostiamo i relativi indici
allora
sp lo facciamo puntare all'indirizzo della primo cella del vettore A 0x000
lv lo facciamo puntare all'indirizzo  della prima cella del vettore B 0x005
cpp lo facciamo puntare all'indirizzo della cella del vettore risultante 0x00A
PC=4  lunghezza dei vettiri A e B risultante vettore C di lunghezza 4
(...)
Vorrei capire se ho utilizzato qualche registro in modo improprio.
Prima di avventurarmi a risponderle, le pongo due domande:
  • Qual è la fonte del problema proposto? Si tratta di uno dei quesiti a risposta aperta proposti su Studium.UniCT (se sì, quale), di un problema proposto nel testo (Tanenbaum: se sì, quale), o altra fonte?
  • Visti gli indirizzi iniziali dei tre vettori in gioco, mi aspetterei che la lunghezza di ciascuno di essi sia 5. Come mai 4 (valore iniziale in PC)?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 06-08-2012, 18:06:17
Programma che calcola il prodotto tra due vettori, il risultato viene posto in un terzo vettore
ovviamente impostiamo i relativi indici
allora
sp lo facciamo puntare all'indirizzo della primo cella del vettore A 0x000
lv lo facciamo puntare all'indirizzo  della prima cella del vettore B 0x005
cpp lo facciamo puntare all'indirizzo della cella del vettore risultante 0x00A
PC=4  lunghezza dei vettiri A e B risultante vettore C di lunghezza 4
(...)
Vorrei capire se ho utilizzato qualche registro in modo improprio.
Prima di avventurarmi a risponderle, le pongo due domande:
  • Qual è la fonte del problema proposto? Si tratta di uno dei quesiti a risposta aperta proposti su Studium.UniCT (se sì, quale), di un problema proposto nel testo (Tanenbaum: se sì, quale), o altra fonte?
  • Visti gli indirizzi iniziali dei tre vettori in gioco, mi aspetterei che la lunghezza di ciascuno di essi sia 5. Come mai 4 (valore iniziale in PC)?
Ha perfettamente ragione ho confuso la posizione dell'indice che è n-1 con la lunghezza effettiva del vettore cioè 5
cmq non so se è presente da qualche parte questo quesito nei rispettivi link dai lei indicati, se devo essere sincero mi sono inventato un quesito , esclusivamente per esercitarmi tutto qui.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 07-08-2012, 10:45:31
non so se è presente da qualche parte questo quesito nei rispettivi link dai lei indicati, se devo essere sincero mi sono inventato un quesito , esclusivamente per esercitarmi tutto qui.
Ha fatto benissimo. Sospettavo che l'origine fosse qualcosa del genere perché il fatto che il programma debba essere in linguaggio MAL si evince dalla soluzione, non dall'enunciato del problema... Si sarebbe potuto porre lo stesso quesito chiedendo un programma IJVM, magari per poi elaborarne la traduzione in MAL che ne fa l'interprete IJVM per la Mic-1 o la Mic-2. Naturalmente, il risultato della traduzione sarebbe un programma MAL ben diverso da quello da lei proposto, perché l'interprete usa i registri PC, SP ecc. in tutt'altro modo. Questo però non vuol dire che lei faccia uso improprio dei registri, semmai insolito (il PC per esempio è tutto fuorché un Program Counter). Se però l'obiettivo è quello di realizzare un programma MAL a sé stante, allora si possono usare i registri come si vuole, purché la sintassi MAL sia rispettata e il calcolo dia il risultato previsto. Non ho fatto questo controllo (né mi pare che lei me lo abbia chiesto), ma credo di avere risposto alla sua domanda. Il suo esercizio può essere utile per un test sul simulatore EmuMIC-1 (http://www.dmi.unict.it/~scollo/slidy/share/simulators/emuMICv1.3), per esempio.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 11-08-2012, 18:22:54
Ho un dubbio riguardante il simulatore dell'istruzione INVOKEVIRTUAL
Quando eseguiamo l'istruzione LDC_W OBJREF  abbiamo i seguenti valori 0x13 e 0x15 dove quest'ultimo rappresenta il riferimento della constant pool che contiene objref il mio dubbio è questo objref contiene un valore 0xb22 che non riesco a capire come si calcola.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 12-08-2012, 18:50:26
Ho un dubbio riguardante il simulatore dell'istruzione INVOKEVIRTUAL
Quando eseguiamo l'istruzione LDC_W OBJREF  abbiamo i seguenti valori 0x13 e 0x15 dove quest'ultimo rappresenta il riferimento della constant pool che contiene objref il mio dubbio è questo objref contiene un valore 0xb22 che non riesco a capire come si calcola.
L'operando di INVOKEVIRTUAL, come pure quello di LDC_W, è uno spiazzamento (o indice, o offset, la terminologia è un po' varia al riguardo) rispetto all'indirizzo iniziale dell'area delle costanti. Quest'ultimo è il contenuto del registro CPP.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 13-08-2012, 01:47:21
Ho un dubbio riguardante il simulatore dell'istruzione INVOKEVIRTUAL
Quando eseguiamo l'istruzione LDC_W OBJREF  abbiamo i seguenti valori 0x13 e 0x15 dove quest'ultimo rappresenta il riferimento della constant pool che contiene objref il mio dubbio è questo objref contiene un valore 0xb22 che non riesco a capire come si calcola.
L'operando di INVOKEVIRTUAL, come pure quello di LDC_W, è uno spiazzamento (o indice, o offset, la terminologia è un po' varia al riguardo) rispetto all'indirizzo iniziale dell'area delle costanti. Quest'ultimo è il contenuto del registro CPP.
Non riesco a capire come calcolare lo spiazzamento o meglio l'operando di LDC_W Objref nella constant pool è indicato l'offeset 0xb22 come viene calcolato questo spiazzamento?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 13-08-2012, 18:07:06
L'operando di INVOKEVIRTUAL, come pure quello di LDC_W, è uno spiazzamento (o indice, o offset, la terminologia è un po' varia al riguardo) rispetto all'indirizzo iniziale dell'area delle costanti. Quest'ultimo è il contenuto del registro CPP.
Non riesco a capire come calcolare lo spiazzamento o meglio l'operando di LDC_W Objref nella constant pool è indicato l'offeset 0xb22 come viene calcolato questo spiazzamento?
Come si calcola dovrebbe essere chiaro dalla mia risposta precedente: l'indirizzo assoluto dell'oggetto nell'area delle costanti deve risultare quale somma del contenuto di CPP e dello spiazzamento. Noto l'indirizzo assoluto e il contenuto di CPP, lo spiazzamento si calcola dunque per differenza. Forse il suo dubbio deriva dalla questione del "chi" calcola questo indirizzo. Verosimilmente, non il programmatore IJVM, che userà un simbolo quale operando, bensì l'interprete o simulatore che sia. Quale simulatore usa?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 13-08-2012, 18:43:46
http://www.dmi.unict.it/~barba/Architetture.html/SIMULATORS/invoke/IJVM_Invokevirtual.swf
Mi scusi professore sono stato poco chiaro nel chiedere chiarimenti magari inviandole questo link riesce a capire a cosa mi riferisco.


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 14-08-2012, 07:06:17
http://www.dmi.unict.it/~barba/Architetture.html/SIMULATORS/invoke/IJVM_Invokevirtual.swf
Mi scusi professore sono stato poco chiaro nel chiedere chiarimenti magari inviandole questo link riesce a capire a cosa mi riferisco.
Ora capisco la fonte del suo dubbio, grazie. Premessa: l'autore della simulazione segnala un errore in questa, nella pagina di presentazione della simulazione (http://www.dmi.unict.it/~barba/Architetture.html/SIMULATORS/invoke/Invoke_Ireturn.html), riguardante gli indirizzi di memoria. Per la precisione, l'errore riguarda solo gli indirizzi delle istruzioni, ovvero relativi all'area dei Metodi, usati per l'aggiornamento del PC (dovrebbero essere indirizzi di byte, non di parole da 4 byte).

Con riferimento al suo dubbio, non ha ragione di sussistere: nella JVM, il valore di OBJREF è un riferimento (puntatore) all'oggetto contenente il metodo invocato e serve a determinare dinamicamente l'indirizzo del metodo. Nella IJVM non si fa uso di tale valore, poiché si impone (per semplicità) che tale oggetto sia lo stesso oggetto che contiene il metodo chiamante. Tuttavia, il passaggio di OBJREF quale primo parametro (parametro 0) nella pila viene mantenuto per compatibilità con la JVM. Dunque, nell'esempio in questione, il valore di OBJREF è una costante scelta un po' a casaccio, e non gioca alcun ruolo nell'effettiva esecuzione dell'istruzione di chiamata (come può constatare dalla simulazione stessa).

L'analisi della simulazione sollecitata dal suo dubbio rivela però un altro erroruccio nella simulazione stessa: come può notare, durante l'esecuzione dell'istruzione di chiamata, precisamente al passo in cui si memorizza in pila il PC del chiamante, il valore di OBJREF nel pool delle costanti muta (diventando l'indirizzo di una delle istruzioni nel corpo del metodo chiamato); la strana mutazione dura fino al caricamento del primo parametro nel metodo chiamato (ILOAD J); al successivo caricamento (ILOAD K), OBJREF torna al suo valore precedente. Questo è chiaramente un errore, per il semplice fatto che una costante non muta (per definizione di costante), ma anche questo non ha alcuna influenza sul resto della simulazione.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 14-08-2012, 16:15:34
Quesito N°20
La traduzionein mic 1 dell'istruzione MAL IF(Z)gotoL1; else goto L2 deve assegnare a L2 un indirizzo nella metà bassa della memoria di controllo. Perchè

Sappiamo invece , che  è L2 che deve essere più in  basso di 256 word, prorpio perchè se il test su Z è positivo il bit i MPC sarà uno , altrimenti zero. quindi le alternative sono
L2 se il test è negativo
L1 se il test è positivo


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 14-08-2012, 21:55:30
Quesito N°20
La traduzionein mic 1 dell'istruzione MAL IF(Z)gotoL1; else goto L2 deve assegnare a L2 un indirizzo nella metà bassa della memoria di controllo. Perchè

Sappiamo invece , che  è L2 che deve essere più in  basso di 256 word, prorpio perchè se il test su Z è positivo il bit i MPC sarà uno , altrimenti zero. quindi le alternative sono
L2 se il test è negativo
L1 se il test è positivo
La correzione è ok. Continuo a trovare inappropriato l'"invece ,", perché nel quesito non è enunciato il contrario, dunque "invece" di che?


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 18-08-2012, 12:43:23

imul1    Z=TOS;if(Z) goto imul7 ; else goto imul2 //TEST DELL'INDICE , SE NULLO IL PRODOTTO VALE ZERO ALTRIMENTI...
imul2    MAR=SP=SP-1;rd   //LEGGE SECONDO OPERANDO DALLO STACK E DECREMENTA SP , ORA IL 2° OPERANDO E' IN MDR
imul3      H=0   //AZZERA SOMMA PARZIALE
imul4      H=H+MDR   //INCREMENTA PRODOTTO PARZIALE
imul5      TOS=TOS-1;if(Z) goto imul6 ; else goto imul4 //SE INDICE NON NULLO RIPETE SOMMA , ALTRIMENTI PRODOTTO FINITO   
imul6      MDR=TOS=H;wr;goto Main1   //PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA MICROROUTINE DI FETCH
imul7      MDR=0;wr;goto Main1  //SE TOS = 0 ALLORA PRODOTTO = 0 E SALTO ALA MICROROUTINE DI FETCH

L'istruzione IJVM (IMUL) è Interpretata nel seguente modo da mic-1


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 18-08-2012, 12:47:05
IMPLEMENTATO CON ISTRUZIONI IJVM:
IJVM non ha istruzioni per la moltiplicazione, il che spiega perché il suo programma richieda ben più di 10 istruzioni. In linea di principio, non è una buona idea risolvere un problema diverso da quello proposto, perlomeno in sede di esame (si rischia di conseguire la valutazione 0 perché il problema proposto non è stato affrontato; in altra sede, naturalmente, è un esercizio legittimo e utile quanto qualsiasi altro).

Se vuole usare la sintassi IJVM potenziata con una istruzione per la moltiplicazione, la cosa più ovvia da fare è dare a quest'ultima una sintassi simile a quella delle altre operazioni aritmetiche, quali IADD e ISUB. Dunque, ad es., la nuova istruzione IMUL (senza operandi) estrae i suoi due argomenti dalla cima dello stack, e al posto del secondo vi pone il risultato della loro moltiplicazione (che si troverà dunque in cima allo stack dopo l'esecuzione di IMUL).

Un suggerimento per affrontare meglio il problema, disponendo dell'istruzione IMUL: definire il calcolo del fattoriale mediante un metodo ricorsivo (attenzione dunque al passaggio del parametro: deve avvenire per il tramite dello stack, prima dell'invocazione ricorsiva del metodo nel suo stesso corpo).

imul1    Z=TOS;if(Z) goto imul7 ; else goto imul2 //TEST DELL'INDICE , SE NULLO IL PRODOTTO VALE ZERO ALTRIMENTI...
imul2    MAR=SP=SP-1;rd   //LEGGE SECONDO OPERANDO DALLO STACK E DECREMENTA SP , ORA IL 2° OPERANDO E' IN MDR
imul3      H=0   //AZZERA SOMMA PARZIALE
imul4      H=H+MDR   //INCREMENTA PRODOTTO PARZIALE
imul5      TOS=TOS-1;if(Z) goto imul6 ; else goto imul4 //SE INDICE NON NULLO RIPETE SOMMA , ALTRIMENTI PRODOTTO FINITO   
imul6      MDR=TOS=H;wr;goto Main1   //PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA MICROROUTINE DI FETCH
imul7      MDR=0;wr;goto Main1  //SE TOS = 0 ALLORA PRODOTTO = 0 E SALTO ALA MICROROUTINE DI FETCH


L'istruzione IJVM (IMUL) è Interpretata nel seguente modo da mic-1


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 18-08-2012, 16:06:33
Questo è un esercizio simile a quello che richiede di scrivere un metodo ricorsivo per il fattoriale.
Ho svolto l'esercizio nel caso in cui non è richiesto un metodo ma un semplice codice IJVM che calcoli il fattoriale,nel caso specifico il programma risulta essere eccessivamente lungo?
Ho fatto in modo che  il valore del primo BIPUSH  corrisponde al fattoriale da calcolare.
Il programma funziona il mio dubbio è nel caso in cui mi dovrebbe capitare un esercizio del genere nel compito sarebbe valutato eccesivamente lungo?
Potrebbe darmi qualche dritta per ridurre il numero di istruzioni ovviamente nel caso specifico ? Magari prossimamente postero il metodo ricorsivo utilizzando l'istruzione IMUL.

.main
.var
fatt
somma
cont
FATTCONT
.end-var
BIPUSH 4
ISTORE fatt
ILOAD fatt
IFEQ zero
ILOAD fatt
BIPUSH 1
ISUB
ISTORE FATTCONT
ILOAD fatt
ISTORE cont
ILOAD cont
BIPUSH 2
ISUB
ISTORE cont
ILOAD fatt
ISTORE somma
fattoriale:  ILOAD cont
                 IFEQ CONTA
                 ILOAD fatt
                 ILOAD somma
                 IADD
                 ISTORE fatt
                 ILOAD cont
                 BIPUSH 1
                 ISUB
                 ISTORE cont
                 GOTO fattoriale
CONTA: ILOAD FATTCONT
            BIPUSH 1
            ISUB
            ISTORE FATTCONT
            ILOAD FATTCONT
            ISTORE cont
            ILOAD fatt
            ISTORE somma
            BIPUSH 0
            ISTORE fatt
            ILOAD FATTCONT
            IFEQ RISUL
            GOTO fattoriale
zero: BIPUSH 1
        ISTORE fatt
        GOTO FINE
RISUL: ILOAD somma
           ISTORE fatt
FINE:   NOP
.end-main


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 20-08-2012, 20:58:27
metodo che cacola il fattoriale é corretto?
.constant
OBJREF 0x10
.end-constant
.main
.var
fatt
risul
.end-var
LDCW OBJREF
IN
ISTORE fatt
ILOAD fatt
INVOKEVIRTUAL fattoriale
ISTORE risul
ILOAD risul
OUT
HALT
.end-main


.method fattoriale(fatt1)
.var
cont
somp
somma
cont1
.end-var
ILOAD fatt1
ISTORE cont1
ILOAD fatt1
BIPUSH 1
ISUB
ISTORE cont
ILOAD cont1
BIPUSH 2
ISUB
ISTORE cont1
ciclo:  ILOAD cont
        IFEQ ciclo2
        ILOAD fatt1
        ILOAD somp
        IADD
        ISTORE somp
        ILOAD cont
        BIPUSH 1
        ISUB
        ISTORE cont
        GOTO ciclo
ciclo2: ILOAD cont1
        ISTORE cont
        ILOAD cont1
        BIPUSH 1
        ISUB
        ISTORE cont1
        ILOAD somp
        ISTORE fatt1
        BIPUSH 0
        ISTORE somp
        ILOAD cont1
        IFEQ risul
        GOTO ciclo
risul: ILOAD fatt1
       IRETURN
.end-method


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 29-08-2012, 09:45:32
Esercizio : metodo ricorsivo fattoriale

.main
.var
fatt
risul
.end-var
BIPUSH 5
ISTORE fatt
LDCW OBJREF
ILOAD fatt
INVOKEVIRTUAL fatt
ISTORE risul
ILOAD risul
OUT
.end-main

.method fatt(a)
.var
fatt
.end-var
LDCW OBJREF
ILOAD a
BIPUSH 1
IFICMPEQ base
ILOAD a
BIPUSH 1
ISUB
INVOKEVIRTUAL fatt
ISTORE fatt
ILOAD a
ILOAD fatt
IMUL
ireturn
base:
          BIPUSH 1
          IRETURN
.end-method


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 04-09-2012, 23:11:01
imul1    Z=TOS;if(Z) goto imul7 ; else goto imul2 //TEST DELL'INDICE , SE NULLO IL PRODOTTO VALE ZERO ALTRIMENTI...
(...)
Quote
imul7      MDR=0;wr;goto Main1  //SE TOS = 0 ALLORA PRODOTTO = 0 E SALTO ALA MICROROUTINE DI FETCH
La prima istruzione è erronea, perché se l'operando in cima allo stack è nullo, il prodotto, anch'esso nullo, dovrebbe essere scritto quale valore di ritorno nello stack, sovrascrivendo il secondo parametro. Invece, con il salto a imul7 si lancia un'operazione di scrittura in memoria caricando con 0 il registro MDR, ma senza aver previamente caricato il registro MAR: dove va a finire lo 0 in questione? Chissà...


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 04-09-2012, 23:24:31
Questo è un esercizio simile a quello che richiede di scrivere un metodo ricorsivo per il fattoriale.
Ho svolto l'esercizio nel caso in cui non è richiesto un metodo ma un semplice codice IJVM che calcoli il fattoriale,nel caso specifico il programma risulta essere eccessivamente lungo?
È evidente che il programma è molto più lungo del necessario.
Quote
Ho fatto in modo che  il valore del primo BIPUSH  corrisponde al fattoriale da calcolare.
Il programma funziona il mio dubbio è nel caso in cui mi dovrebbe capitare un esercizio del genere nel compito sarebbe valutato eccesivamente lungo?
Potrebbe darmi qualche dritta per ridurre il numero di istruzioni ovviamente nel caso specifico ? Magari prossimamente postero il metodo ricorsivo utilizzando l'istruzione IMUL.
Ho visto che ne ha prodotto due versioni, suppongo che la seconda rimpiazzi la prima, guarderò pertanto solo quest'ultima. Quanto alla presente soluzione, non ricorsiva, ho la netta sensazione che la fonte di prolissità del programma stia nell'idea che l'uso dell'istruzione IMUL sia lecito solo nella soluzione ricorsiva. Non è così: si può produrre un calcolo non ricorsivo del fattoriale mediante un ciclo di moltiplicazioni, in una macchina che disponga della moltiplicazione, più o meno come si calcola il prodotto mediante un ciclo di addizioni in una macchina che non disponga dell'istruzione di moltiplicazione. Va bene come dritta?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 04-09-2012, 23:43:48
Esercizio : metodo ricorsivo fattoriale

.main
.var
fatt
risul
.end-var
BIPUSH 5
ISTORE fatt
LDCW OBJREF
ILOAD fatt
INVOKEVIRTUAL fatt
ISTORE risul
ILOAD risul
OUT
.end-main

.method fatt(a)
.var
fatt
.end-var
LDCW OBJREF
ILOAD a
BIPUSH 1
IFICMPEQ base
ILOAD a
BIPUSH 1
ISUB
INVOKEVIRTUAL fatt
ISTORE fatt
ILOAD a
ILOAD fatt
IMUL
ireturn
base:
          BIPUSH 1
          IRETURN
.end-method
Mi sembra sostanzialmente corretto, a meno di due correzioni, una di forma, l'altra di sostanza.
Forma: la sintassi IJVM prevede il codice operativo simbolico LDC_W, non LDCW.
Sostanza: l'istruzione LDC_W OBJREF nel metodo fatt(a) dovrebbe essere spostata tre righe più avanti: va infatti eseguita solo se subito dopo si carica lo stack con i parametri e quindi si invoca un metodo; ora, nel caso in cui il test IFICMPEQ abbia esito positivo, si salta a base senza invocare alcun metodo, e dunque aver caricato anche in questo caso OBJREF nello stack produce un'alterazione erronea del contenuto di SP.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 05-09-2012, 17:44:26
imul1    Z=TOS;if(Z) goto imul7 ; else goto imul2 //TEST DELL'INDICE , SE NULLO IL PRODOTTO VALE ZERO ALTRIMENTI...
(...)
Quote
imul7      MDR=0;wr;goto Main1  //SE TOS = 0 ALLORA PRODOTTO = 0 E SALTO ALA MICROROUTINE DI FETCH
La prima istruzione è erronea, perché se l'operando in cima allo stack è nullo, il prodotto, anch'esso nullo, dovrebbe essere scritto quale valore di ritorno nello stack, sovrascrivendo il secondo parametro. Invece, con il salto a imul7 si lancia un'operazione di scrittura in memoria caricando con 0 il registro MDR, ma senza aver previamente caricato il registro MAR: dove va a finire lo 0 in questione? Chissà...
imul1  MAR=SP=SP-1;rd
imul2  H=0//AZZERA SOMMA PARZIALE
imul3  H=H+MDR//INCREMENTA PRODOTTO PARZIALE
imul4  TOS=TOS-1;if(Z) goto imul5 ; else goto imul3       
imul5  MDR=TOS=H;wr;goto Main1//PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA MICROROUTINE DI FETCH


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 05-09-2012, 18:05:19
Esercizio : metodo ricorsivo fattoriale

.main
.var
fatt
risul
.end-var
BIPUSH 5
ISTORE fatt
LDCW OBJREF
ILOAD fatt
INVOKEVIRTUAL fatt
ISTORE risul
ILOAD risul
OUT
.end-main

.method fatt(a)
.var
fatt
.end-var
LDCW OBJREF
ILOAD a
BIPUSH 1
IFICMPEQ base
ILOAD a
BIPUSH 1
ISUB
INVOKEVIRTUAL fatt
ISTORE fatt
ILOAD a
ILOAD fatt
IMUL
ireturn
base:
          BIPUSH 1
          IRETURN
.end-method
Mi sembra sostanzialmente corretto, a meno di due correzioni, una di forma, l'altra di sostanza.
Forma: la sintassi IJVM prevede il codice operativo simbolico LDC_W, non LDCW.
Sostanza: l'istruzione LDC_W OBJREF nel metodo fatt(a) dovrebbe essere spostata tre righe più avanti: va infatti eseguita solo se subito dopo si carica lo stack con i parametri e quindi si invoca un metodo; ora, nel caso in cui il test IFICMPEQ abbia esito positivo, si salta a base senza invocare alcun metodo, e dunque aver caricato anche in questo caso OBJREF nello stack produce un'alterazione erronea del contenuto di SP.
Per quanto riguarda la sintassi il simulatore riconosce LDCW e non LDC_W (errore)
Per quanto riguarda la sostanza non avevo considerato il fatto che il metodo non si richiamase nemmeno una volta nel caso in cui il fattoriale sia uguale a 1! quindi risulta inutile caricare objref sullo stack è alterare inutilmente il contenuto di SP
quindi abbiamo
.main
.var
fatt
risul
.end-var
BIPUSH 5
ISTORE fatt
LDCW OBJREF
ILOAD fatt
INVOKEVIRTUAL fatt
ISTORE risul
ILOAD risul
OUT
.end-main

.method fatt(a)
.var
fatt
.end-var
ILOAD a
BIPUSH 1
IFICMPEQ base
LDCW OBJREF
ILOAD a
BIPUSH 1
ISUB
INVOKEVIRTUAL fatt
ISTORE fatt
ILOAD a
ILOAD fatt
IMUL
ireturn
base:
          BIPUSH 1
          IRETURN
.end-method


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Gladior on 05-09-2012, 18:26:30
Questo è un esercizio simile a quello che richiede di scrivere un metodo ricorsivo per il fattoriale.
Ho svolto l'esercizio nel caso in cui non è richiesto un metodo ma un semplice codice IJVM che calcoli il fattoriale,nel caso specifico il programma risulta essere eccessivamente lungo?
È evidente che il programma è molto più lungo del necessario.
Quote
Ho fatto in modo che  il valore del primo BIPUSH  corrisponde al fattoriale da calcolare.
Il programma funziona il mio dubbio è nel caso in cui mi dovrebbe capitare un esercizio del genere nel compito sarebbe valutato eccesivamente lungo?
Potrebbe darmi qualche dritta per ridurre il numero di istruzioni ovviamente nel caso specifico ? Magari prossimamente postero il metodo ricorsivo utilizzando l'istruzione IMUL.
Ho visto che ne ha prodotto due versioni, suppongo che la seconda rimpiazzi la prima, guarderò pertanto solo quest'ultima. Quanto alla presente soluzione, non ricorsiva, ho la netta sensazione che la fonte di prolissità del programma stia nell'idea che l'uso dell'istruzione IMUL sia lecito solo nella soluzione ricorsiva. Non è così: si può produrre un calcolo non ricorsivo del fattoriale mediante un ciclo di moltiplicazioni, in una macchina che disponga della moltiplicazione, più o meno come si calcola il prodotto mediante un ciclo di addizioni in una macchina che non disponga dell'istruzione di moltiplicazione. Va bene come dritta?

.constant
OBJREF 0x10
.end-constant
.main
.var
fatt
risul
.end-var
LDCW OBJREF
IN
ISTORE fatt
ILOAD fatt
INVOKEVIRTUAL fattoriale
ISTORE risul
ILOAD risul
OUT
HALT
.end-main

.method fattoriale(fatt1)
.var
cont
.end-var
ILOAD FATT1
ISTORE CONT
CICLO: ILOAD CONT
            BIPUSH1
            ISUB
            ISTORE CONT
            ILOAD CONT
            ILOAD FATT1
            IMUL
            ISTORE FATT1
            ILOAD CONT
            IFEQ FINE
            GOTO CICLO
FINE: ILOAD FATT1
         IRETURN
.end-method

Quando ho scritto il codice non ho considerato volutamente l'istruzione IMUL era un modo per esercitarmi.



Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-09-2012, 17:03:37
imul1  MAR=SP=SP-1;rd
imul2  H=0//AZZERA SOMMA PARZIALE
imul3  H=H+MDR//INCREMENTA PRODOTTO PARZIALE
imul4  TOS=TOS-1;if(Z) goto imul5 ; else goto imul3       
imul5  MDR=TOS=H;wr;goto Main1//PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA MICROROUTINE DI FETCH
Che succede se il parametro in cima allo stack, ovvero anche il contenuto iniziale di TOS, vale 0?


Title: Re:AA 2010-2011: Quesiti a risposta aperta
Post by: Giuseppe Scollo on 06-09-2012, 17:10:21
Per quanto riguarda la sostanza non avevo considerato il fatto che il metodo non si richiamase nemmeno una volta nel caso in cui il fattoriale sia uguale a 1!
OK, ma noti che questo accade sempre (cioè, per qualsiasi valore iniziale del parametro) esattamente una volta, cioè quando la sequenza di invocazioni ricorsive giunge all'invocazione finale.


Title: Re:Quesiti a risposta aperta
Post by: Gladior on 06-09-2012, 17:56:30
imul1  MAR=SP=SP-1;rd
imul2  H=0//AZZERA SOMMA PARZIALE
imul3  H=H+MDR//INCREMENTA PRODOTTO PARZIALE
imul4  TOS=TOS-1;if(Z) goto imul5 ; else goto imul3      
imul5  MDR=TOS=H;wr;goto Main1//PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA MICROROUTINE DI FETCH
Che succede se il parametro in cima allo stack, ovvero anche il contenuto iniziale di TOS, vale 0?
Nel caso specifico credo che la condizione non sia mai soddisfatta cioè TOS=TOS-1 cioè 0=0-1 cioè TOS=-1, quindi la modifica da opportare è la seguente.
imul1  MAR=SP=SP-1;rd
imul2  H=0//AZZERA SOMMA PARZIALE
imul3  H=H+MDR//INCREMENTA PRODOTTO PARZIALE
imul4  Z=TOS ;if(Z) goto imul6 ; else goto imul5     
imul5 TOS=TOS-1; goto imul3
imul6  MDR=TOS=H;wr;goto Main1//PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA


Title: Re:Quesiti a risposta aperta
Post by: Giuseppe Scollo on 10-09-2012, 14:23:44
la modifica da opportare è la seguente.
imul1  MAR=SP=SP-1;rd
imul2  H=0//AZZERA SOMMA PARZIALE
imul3  H=H+MDR//INCREMENTA PRODOTTO PARZIALE
imul4  Z=TOS ;if(Z) goto imul6 ; else goto imul5     
imul5 TOS=TOS-1; goto imul3
imul6  MDR=TOS=H;wr;goto Main1//PUSH SULLO STACK DEL RISULTATO , AGGIORNO TOS E SALTO ALLA
Non mi pare che il risultato sia sempre corretto. Se il parametro in cima allo stack vale 0, ma l'altro parametro vale n > 0, che risultato dà?