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:
- 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.
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:
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.
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.
No hay comentarios.:
Publicar un comentario