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 usado recursos. El
programador de aplicaciones necesita un mecanismo de control de acceso seguro y
dinámico para distribuir capacidades a los recursos 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.
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.
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