Java es un lenguaje administrado que ofrece seguridad de memoria.
En Java, los punteros no existen, por lo que no podemos hacer aritmética de punteros en un puntero de función. Una aplicación puede invocar un método definido en una clase a través del objeto de clase. En Java, no podemos hacer un encasillado inseguro de un objeto para sobrescribir el puntero del método con otra cosa. Un acceso a la array fuera de límite arroja una excepción de tiempo de ejecución en Java, por lo que la corrupción de la dirección de retorno no es posible.
Ahora, veamos algunos aspectos importantes de un Sistema Operativo implementado a través de Java.
- Aislamiento de memoria:
en Java, solo se puede acceder a la memoria a través de objetos. Una aplicación Java no puede acceder a la memoria fuera de un objeto. La memoria virtual no se abstrae a la aplicación. Por estas razones, no necesitamos soporte de hardware adicional (segmentación/tablas de páginas) para la asignación de procesos. No hay necesidad de tablas de páginas o anillos de privilegios. El núcleo es en sí mismo un proceso de Java, por lo que tanto el núcleo como las aplicaciones que no son de confianza se ejecutan en anillo-0. - Llamadas al sistema:
para ejecutar llamadas al sistema, debemos cambiar al proceso del kernel. Cambiar a un proceso diferente no requiere un cambio de tabla de páginas. Por lo tanto, el controlador de llamadas del sistema es solo una rutina de cambio de contexto que copia los argumentos de las llamadas del sistema en el espacio de direcciones del kernel y salta directamente al controlador de llamadas del sistema. - Comunicación entre procesos (IPC):
IPC es similar al controlador de llamadas del sistema. El método de cambio de contexto necesita invocar la rutina de recepción en el proceso de destino después de copiar los mensajes. Entonces, esto es mejor en comparación con Linux y Windows, donde tenemos que hacer dos transiciones de timbre y un cambio de contexto para programar la rutina de destino. - Controladores de dispositivos:
cada controlador de dispositivo se puede asignar a un proceso Java independiente. Los controladores de dispositivos pueden comunicarse con el núcleo a través de llamadas al sistema.Pero, los sistemas operativos existentes no están escritos en Java. Esto se debe a que Java no es un lenguaje eficiente, particularmente debido a la recolección de basura que puede causar latencias arbitrarias.
Por lo tanto, todos los sistemas operativos utilizan ampliamente el lenguaje C en lugar de Java.