14

¿En realidad son tres conceptos diferentes o me estoy involucrando? (He estado leyendo artículos sobre el enhebrado y la recolección de basura juntos y me he confundido).Diferencia entre "Sección crítica", "Región crítica" y "Región de ejecución limitada"

"Sección crítica" - Creo que este puede ser el término para las secciones de código que no quiere múltiples subprocesos accediendo al mismo tiempo, es decir, dentro de la cerradura y Monitor.Entrada/Salir de las declaraciones?

"Región crítica" - No hay una pista real aquí - MSDN dice algo así como "Esto le dice a un host que las excepciones lanzadas dentro de la sección pueden tener un efecto más amplio". Y que "los hosts del CLR, por ejemplo, el servidor Sql", pueden optar por manejar las excepciones lanzadas dentro de las regiones críticas "de manera diferente". De manera diferente, ¿cómo? ¿Y por qué? Y, lo más importante, ¿en qué escenarios del mundo real podría necesitar marcar el código como una región crítica?

"restringida Ejecución Región" - me encontré con esto cuando leer acerca de la CriticalFinalizerObject en un artículo de la recolección de basura.

Todo lo que puedo entender de MSDN en este caso es que el código dentro de una de estas regiones está garantizado de alguna manera (¿pero cómo?) Y por lo tanto no debe lanzar excepciones "fuera de banda".

¿Qué es un out-of-band exception? (Hice google esto pero me preguntó si quise decir "excepción fuera de límites").

¿Existe alguna excepción no controlada? ¿O solo ciertos tipos de excepción? Y nuevamente, lo más importante, ¿en qué escenarios del mundo real podría necesitar una "región de ejecución restringida"?

Como no entiendo muy bien los conceptos, no estoy seguro de qué etiquetas necesita esta pregunta además de ".NET".

+0

Estoy bastante seguro de que su comprensión de la sección crítica es correcta. – Brian

+0

Eso es un comienzo :). No estoy seguro si he usado los términos correctos. He visto "Sección crítica" en artículos sobre bloqueo. Solo he visto "Región crítica" en la página de MSDN para Thread.BeginCriticalRegion. Sé que "Región de Ejecución Restringida" es porque hay una página MSDN para ello. –

Respuesta

5

Sólo mi comprensión de estos conceptos:

sección crítica - como usted ha dicho.

Región crítica - Esta parece ser la versión general de "no permita que las excepciones escapen de un hilo".

Región de Ejecución Restringida - Esta es una manera de hacer que un fragmento de código sea más o menos atómico evitando la interrupción por excepciones. El example on this page lo usa para asegurarse de que la asignación y el almacenamiento de un identificador se ejecuten. Tenga en cuenta que no hay retroceso, es más un sistema preventivo.

Existen pautas para la "programación normal" que se parecen un poco a esto, es decir, cuando se reemplaza Igual o un operador implícito, no se debe tirar (nada).

+0

Perdón por el retraso en las gracias. +1 y estoy aceptando esto para la descripción y el enlace al combo de ejemplo. Realmente estaba esperando un poco de detalles sobre la "Región crítica" y qué es exactamente una excepción fuera de banda, pero probablemente no debería haber hecho muchas preguntas. –

+2

Una excepción fuera de banda es una excepción que no es lanzada por el código que se está ejecutando directamente en ese momento, sino por parte del marco. Este término abarca las siguientes excepciones: StackOverflowException, OutOfMemoryException y ThreadAbortException. –

2

Según Programación Concurrente en Windows por Joe Duffy las definiciones de la sección/región crítica son los siguientes:

sección crítica: En sección crítica Win32 es un simple estructura de datos (CRITICAL_SECTION) utilizado para construir regiones críticas .

Región crítica: es una región de código que goza de exclusión mutua (esto parece ser a lo que se refiere como una sección crítica en lo anterior).

+0

Gracias por la respuesta. La "sección crítica" provino de http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx. Y "Región crítica" de http://msdn.microsoft.com/en-us/library/system.threading.thread.begincriticalregion.aspx. ¿Tal vez "Región crítica" como lo enumeré no es un concepto real? –

0

En Windows, solo he trabajado con Sección crítica hasta el momento. Según mi experiencia, es un mecanismo de bloqueo de hilos del espacio de usuario Win32. Esto significa que se puede usar dentro de un proceso para bloquear recursos compartidos por múltiples hilos. Esto no abarca todo el sistema, solo abarca todo el proceso. Un ejemplo de lo que no es es un bloqueo de kernel-space (como mutexes).

Por ejemplo, boost :: thread usa secciones críticas en su implementación de Win32, o al menos lo hizo cuando lo usé, y usa mutexes en Linux, a través de pthreads.

+0

Gracias por la respuesta. No lo entiendo completamente, por ej. No he oído hablar de userspace, boost :: thread, kernel-space o pthread. Solo estoy buscando esos. Estoy reuniendo que estos términos deben tener diferentes significados en Win32 para .NET y eso está bien ya que quiero mejorar mi comprensión de ambos. –

0

Cualquier sección de código que debe ser terminada por cada proceso que comienza antes de que otro proceso pueda ingresar se llama región crítica.

0

Sección crítica: es un acotación del código. Cada proceso tiene una sección crítica en la que se intercambian variables de comon, tabla de actualización, archivo de escritura y ... La característica importante es que, cuando un proceso se está ejecutando en su sección crítica, ningún otro proceso puede ingresar a su sección crítica y proporciona manual exclusión. Por supuesto, para lograr eso, una herramienta de sincronización llamada "semáforo" se usa cuando hay procesos 'n'. Un semáforo es un entero vaiverable.

Región crítica: es una construcción de sincronización que protege contra ciertos errores simples asociados con la solución de semáforo al problema de sección crítica que puede hacer el programador.

1

Sección crítica Conjunto de instrucciones, algunas de las cuales tienen acceso a objetos compartidos.

Ignore por el momento que tanto ProcessA como ProcessB se pueden ejecutar al mismo tiempo. No querrá depender del valor de x, si ProcessA o ProcessB se van a ejecutar simultáneamente por muchos hilos diferentes, ya que lo más probable es que conduzca a una condición de carrera.

En este ejemplo, los dos ciclos while son Secciones críticas.

int x = 0; 
Process A() { 
    while(true) { 
     x++; 
     x--; 
    } 
} 
Process B() { 
    while(true) { 
     x++; 
     x--; 
    } 
} 

región crítica Un conjunto de secciones críticas.

Supongamos ahora que puede ejecutar ProcessA y ProcessB al mismo tiempo. Cada proceso tiene una sección crítica. Ambas secciones comparten la misma variable (x). Juntas, las dos secciones críticas forman una región crítica. ¿Porque es esto importante? Si supone que la sección crítica de ProcessA está protegida por exclusión mutua, igualmente obtendrá resultados incorrectos en x ya que ProcessB no respeta la exclusión mutua. Debe implementar la exclusión mutua en la región crítica, implementándola en cada sección crítica que conforma la región.

0

Microsoft podría estar definiendo cosas de manera diferente, pero en general, región crítica y sección crítica son la misma cosa .

Se utilizan para describir regiones en las que dos o más procesos (o hilos) se acceden la misma memoria compartida, y fracaso a coordenada les llevará a las condiciones de carrera que impiden que el deseado comportamiento en ejecución, como el ejemplo clásico que Pétur da para incrementar y disminuir una variable de arriba.

Una agradable discusión se puede encontrar en Tanenbaum, A. S., y Bos, H. (2015). Sistemas operativos modernos (Pearson, Boston, Ma), 4th ed, pp. 1101. Ediciones anteriores, así como los sitios web de cursos de numerosas universidades que ofrecen materiales para sus cursos de sistemas operativos.

Cuestiones relacionadas