La
protección se logra con la ayuda del núcleo del SO que valida los
intentos de acceso a recursos. El gasto de inspeccionar y validar todos
los intentos de acceso a todos los recursos es muy grande, por lo tanto
debe ser apoyada por hardware. Al aumentar la complejidad del SO, se
deben refinar los mecanismos de protección. Los sistemas de protección,
no solo se preocupan de si puedo acceder a un recurso, sino también de
cómo lo accedo, por lo tanto los diseñadores de aplicaciones deben
protegerlos, y no solo el SO. Los diseñadores de aplicaciones mediante
herramientas de los lenguajes de programación pueden declarar la
protección junto con la tipificación de los datos.
Ventajas:
Ventajas:
- Las necesidades de protección se declaran sencillamente y no llamando procedimientos del SO.
- Las necesidades de protección pueden expresarse independientemente de los recursos que ofrece el SO.
- El diseñador no debe proporcionar mecanismos para hacer cumplir la protección.
- Los privilegios de acceso están íntimamente relacionados con el tipo de datos que se declara.
Diferencias entre las distintas formas de protección:
- Seguridad: La obligación de cumplimiento por núcleo ofrece un grado de seguridad que el código de seguridad ofrecido por el compilador.
- Flexibilidad: La flexibilidad de la implementación por núcleo es limitada. Si un lenguaje no ofrece suficiente flexibilidad, se puede extender o sustituir, perturbando menos cambios en el sistema que si tuviera que modificarse el núcleo.
- Eficiencia: Se logra mayor eficiencia cuando el hardware apoya la protección. La especificación de protección en un lenguaje de programación permite describir en alto nivel las políticas de asignación y uso de recursos.
La especificación de protección en un lenguaje de programación permite describir en alto nivel las políticas de asignación y usode recursos.El programador de aplicaciones necesita un mecanismo de control de acceso seguro y dinámico para distribuir capacidades a losrecursos del sistema entre los procesos de usuario.
Las construcciones que permiten al programador declarar las restricciones tienen tres operaciones básicas
- Distribuir capacidades de manera segura y eficiente entre procesos clientes.
- Especificar el tipo de operaciones que un proceso podría invocar en un recurso asignado.
- Especificar el orden en que un proceso dado puede invocar las operaciones de un recurso.
- La especificación de protección en un lenguaje de programación permite la descripción de alto nivel de políticas para la asignación y uso de recursos.
- La implementación del lenguaje puede proveer software para hacer cumplir la protección cuando no se pueda validar si el hardware está soportado.
- Interpretar las especificaciones de protección para generar llamadas en cualquier sistema de protección provisto por el hardware y el SO.
Protección en java 2
- La protección la maneja la máquina virtual (JVM)
- La JVM asigna un dominio de protección a una clase cuando la carga.
- El dominio de protección indica qué operaciones puede (y no puede) realizar la clase.
- Si se invoca un método de biblioteca y éste realiza una operación privilegiada, se examina el stack para asegurar que la biblioteca pueda realizar la operación.
La
protección que se ofrece en los sistemas de computación existentes casi
siempre se ha logrado con la ayuda del núcleo de un sistema operativo,
que actúa como agente de seguridad que inspecciona y valida cada intento
por acceder a un recurso protegido. Puesto que la validación de todos
los accesos puede dar pie a un gasto extra considerable, debemos
apoyarla con hardware para reducir el costo de cada validación o bien
debemos aceptar que el diseñador del sistema podría inclinarse por
sacrificar los objetivos de la protección. Es difícil satisfacer todos
estos objetivos si los mecanismos de soporte con que se cuenta
restringen la flexibilidad para implementar diversas políticas de
protección.
A medida que ha aumentado la complejidad de los sistemas operativos, sobre todo al trata de ofrecer interfaces de más alto nivel con el usuario, lo objetivos de la protección se han vuelto mucho más refinados. En esta refinación observamos que los diseñadores de los diseñadores de los sistemas de protección se han apoyado mucho en ideas que se originaron en los lenguajes de programación y especialmente en los conceptos de tipos de datos abstractos y objetos. Los sistemas de protección ahora se ocupan no sólo de la identidad de un recurso al cual se intenta acceder, sino también de la naturaleza funcional de ese acceso. En los sistemas de protección más nuevos, el interés en la función que se invocará se extiende más allá de un conjunto de funciones definidas por el sistema, como los métodos de acceso a archivos estándar, para incluir funciones que también podrían ser definidas por el usuario.
Las políticas para el uso de recursos también podrían variar, dependiendo de la aplicación, y podrían cambiar con el tiempo. Por estas razones, la protección ya no puede considerarse como un asunto que sólo concierne al diseñador de un sistema operativo; también debe estar disponible como herramienta que el diseñador de aplicaciones pueda usar para proteger los recursos de un subsistema de aplicación contra intervenciones o errores.
Flexibilidad:
Hay
límites a la flexibilidad de un núcleo de protección para implementar
una política definida por el usuario, aunque podría proporcionar
recursos suficientes para que el sistema haga cumplir sus propias
políticas. Con un lenguaje de programación, se puede declarar la
política de protección y hacerse cumplir según sea necesario en una
implementación.A medida que ha aumentado la complejidad de los sistemas operativos, sobre todo al trata de ofrecer interfaces de más alto nivel con el usuario, lo objetivos de la protección se han vuelto mucho más refinados. En esta refinación observamos que los diseñadores de los diseñadores de los sistemas de protección se han apoyado mucho en ideas que se originaron en los lenguajes de programación y especialmente en los conceptos de tipos de datos abstractos y objetos. Los sistemas de protección ahora se ocupan no sólo de la identidad de un recurso al cual se intenta acceder, sino también de la naturaleza funcional de ese acceso. En los sistemas de protección más nuevos, el interés en la función que se invocará se extiende más allá de un conjunto de funciones definidas por el sistema, como los métodos de acceso a archivos estándar, para incluir funciones que también podrían ser definidas por el usuario.
Las políticas para el uso de recursos también podrían variar, dependiendo de la aplicación, y podrían cambiar con el tiempo. Por estas razones, la protección ya no puede considerarse como un asunto que sólo concierne al diseñador de un sistema operativo; también debe estar disponible como herramienta que el diseñador de aplicaciones pueda usar para proteger los recursos de un subsistema de aplicación contra intervenciones o errores.
Aquí es donde los lenguajes de programación entran en escena.
Especificar el control de acceso deseado a un recurso compartido en un
sistema es hacer una declaración acerca del recurso. Este tipo de
declaración se puede integrar en un lenguaje mediante una extensión de
su mecanismo de tipificación. Si se declara la protección junto con la
tipificación de los datos, el diseñado de cada subsistema puede
especificar sus necesidades de protección así debería darse directamente
durante la redacción del programa, y en el lenguaje en el que el
programa mismo se expresa. Este enfoque tiene varias ventajas
importantes:
Las necesidades de protección se declaran de forma sencilla en vez de
programarse como una secuencia de llamadas a procedimientos de un
sistema operativo.
Las necesidades de protección pueden expresarse independientemente de
los recursos que ofrezca un sistema operativo en particular.
El diseñador de un subsistema no tiene que proporcionar los mecanismos para hacer cumplir la protección.
Una notación declarativa es natural porque los privilegios de acceso
están íntimamente relacionados con el concepto lingüístico de tipo de
datos.
Hay diversas técnicas que una implementación de lenguaje de programación
puede utilizar para hacer cumplir la protección, pero cualquiera de
ellas deberá depender hasta cierto punto del grado de soporte de una
máquina subyacente y su sistema operativo.
¿Qué ventajas relativas tiene entonces el cumplimiento basado
exclusivamente en un núcleo, en comparación con el cumplimiento forzado
en gran medida por un compilador?
Seguridad: La obligación del cumplimiento por un núcleo ofrece un
mayor grado de seguridad del sistema de protección mismo, que el que
ofrece la generación de código de verificación de protección por un
compilador. En un esquema apoyado por compilador, la seguridad depende
de lo correcto que sea el traductor, de algún mecanismo subyacente de
gestión de almacenamiento que proteja los segmentos desde los cuales se
ejecuta el código compilador y, en última instancia, de la seguridad de
los archivos desde los que se carga el programa.
Flexibilidad:
Eficiencia:
Se logra la
eficiencia máxima cuando hardware apoya directamente el cumplimiento de
la protección. En la medida en que se requiera soporte de software, el
cumplimiento basado en el lenguaje tiene la ventaja de que es posible
verificar el cumplimiento del acceso estático fuera de línea en el
momento de la compilación.
En síntesis, la especificación de la protección en un lenguaje de programación permite describir un alto nivel de políticas de asignación y uso de recursos.
En síntesis, la especificación de la protección en un lenguaje de programación permite describir un alto nivel de políticas de asignación y uso de recursos.
No hay comentarios:
Publicar un comentario