Ejercicio 1 - Problema de Programación

Ejercicio 8 de la guía 5.

Registros

Registros de la impresora con interfaz para comunicarme.

Si no hay tinta, escribe en LOC_CTRL el valor LOW_INK

Justificar si usar polling o interrupciones. No race conditions. Impresiones bloqueantes.

Interrupciones disponibles

ACLARACION: HP_LOW_INK_INT solo responde cuando no hay tinta. Además, la interrupción puede ser una falsa alarma.

ACLARACIÓN 2: Se suele devolver en el write por convención la cantidad de bytes leidos.

int contador = 5;
bool hayTinta;
char* tinta;

void terminar_impresion() {
	imprimir.signal();
}

void aviso_no_tintal() {
	char* status;
	IN(LOC_CTRL, status);
	contador--;
	if (contador == 0) {
		tinta_sem.signal();
	} else if (status == PRINTING) {
		tinta_sem.signal();
		contador = 5;
		hayTinta = true;
	} else {
	OUT(LOC_CTRL, START);
}

int driver_init() {
	request_irq(HP_FINISH_INT, terminar_impresion);
	request_irq(HP_LOW_INK_INT, termino_chequeo);
	// FALTA COMPLETAR: Lo sube en la solución del campus.
}

int driver_write(void* buffer, size_t size) {
	char* texto;
	copy_from_user(texto, data, size);
	OUT(LOC_TEXT_POINTER, texto);
	OUT(LOC_TEXT_SIZE, len(text));
	OUT(LOC_CTRL, START);
	IN(LOC_CTRL, TINTA);
	if (tinta == LOW_INK) {
		tinta_sem.wait();
	}
	if (hayTinta) {
		imprimir.wait();	
	}
	// FALTA INCLUIR SEMAFOROS PARA EVITAR CONCURRENCIA
}

int driver_remove() {
	// FALTA TERMINAR
}

Ejercicio 2 - Problema de Diseño

Ejercicio de parcial en el campus.

Primero, planteamos el sensor de temperatura, que se puede pensar con tres secciones: operaciones, registros, interrupciones.

Sensor de Temperatura