Template:

int driver_init() {}

int driver_open() {}

int driver_close() {}

int driver_read(char *buffer, size_t size) {}

int driver_write(char *buffer, size_t size) {}

int driver_remove() {}

Ejercicio 1

  1. V. Es una pieza de Software, un componente del kernel, que permite la interacción con los dispositivos físicos.
  2. F. Es de software.
  3. V, aunque en Linux, por la arquitectura de microkernel, estos son módulos del sistema operativo. Corren en modo kernel.
  4. F. Los usuarios pueden interactuar con el a través de syscalls al ser parte del kernel.
  5. F. Puede configurarse para atender interrupciones, pero no es su única función.
  6. F. El driver depende tanto del sistema operativo como del dispositivo físico.
  7. V. No depende del modelo de computadora, mientras que respete arquitectura y sistema operativo va a poder funcionar sin problemas.

Ejercicio 3 → CONSULTAR Busy Waiting

Al hacer Busy Waiting, solo debemos hacer un while hasta que el dispositivo responda.

int driver_init() {
	mutex = sem(1);
}

int driver_open() {}

int driver_close() {}

int driver_read(char *buffer, size_t size) {
	mutex.wait();
	OUT(BTN_STATUS1, 0);
	while(IN(BTN_STATUS0) != 0) {}
	mutex.signal();
	return BTN_PRESSED;
}

int driver_write(char *buffer, size_t size) {}

int driver_remove() {}

Ejercicio 4

void handler() {
	mutex_handler.signal();
}

int driver_init() {
	mutex = sem(1);
	mutex_handler = sem(0);
	request_irq(7, handler);
}

int driver_open() {}

int driver_close() {}

int driver_read(char *buffer, size_t size) {
	mutex.wait();
	OUT(BTN_STATUS, BTN_INT);
	mutex_handler.wait();
	mutex.signal();
	return BTN_PRESSED;
}

int driver_write(char *buffer, size_t size) {}

int driver_remove() {}

Ejercicio 5

Cuando se efectúa un open, se debe preparar el dispositivo para realizar alguna acción. Cuando se realiza un write, se debe realizar alguna interacción de escritura en el dispositivo, que puede propagar en una acción.

Ejercicio 6

Debería ser de privilegio Kernel ya que implica la interacción con Hardware, y no queremos que cualquier programa pueda manipularlo. Por ejemplo, no tiene sentido que cualquier programa acceda a la cámara de la computadora directamente, o a la. pantalla.

Ejercicio 7