versiones sistema operativo historia caracteristicas windows unix

windows - sistema - versiones de unix



¿Cómo hago que el bloqueo de archivos de Windows sea más parecido al bloqueo de archivos UNIX? (4)

El bloqueo de archivos UNIX es completamente fácil: el sistema operativo asume que usted sabe lo que está haciendo y le permite hacer lo que desea:

Por ejemplo, si intenta eliminar un archivo que se ha abierto otro proceso, el sistema operativo generalmente le permitirá hacerlo. El proceso original aún conserva sus identificadores de archivo hasta que finaliza, momento en el que el sistema de archivos reiniciará silenciosamente los recursos de disco. Sin problemas, así es como me gusta.

Cuán diferentes son las cosas en Windows: si trato de eliminar un archivo que está usando otro proceso, obtengo un error del sistema operativo. El archivo es intocable hasta que el proceso original libera su bloqueo en el archivo. Eso fue genial en los días de un solo usuario de MS-DOS, cuando era probable que cualquier proceso de bloqueo estuviera en la misma computadora que contenía los archivos, sin embargo, en una red es una pesadilla:

Tenga en cuenta lo que sucede cuando un proceso se bloquea al escribir en un archivo compartido en un servidor de archivos de Windows. Antes de que el archivo pueda eliminarse, debemos ubicar la computadora e identificar el proceso en esa computadora que originalmente abrió el archivo. Solo entonces podemos matar el proceso y eliminar nuestro archivo no deseado.

¡Qué molestia!

¿Hay alguna manera de mejorar esto? Lo que quiero es que el bloqueo de archivos en Windows se comporte como un bloqueo de archivos en UNIX. Quiero que el sistema operativo me deje hacer lo que quiero porque estoy a cargo y sé lo que estoy haciendo ...

... entonces, ¿se puede hacer?


Eso realmente no ayuda si el proceso colgado aún tiene el mango abierto. No liberará los recursos hasta que ese proceso bloqueado libere el controlador. Pero de todos modos, en Windows es posible forzar el cierre de un archivo desde un proceso que lo está usando. Process Explorer de sysinternals.com le permitirá ver y cerrar identificadores que un proceso ha abierto.


Tenga en cuenta que Process Explorer permite forzar el cierre de los identificadores de archivo (para procesos locales al cuadro en el que se está ejecutando) a través de Handle -> Close Handle.

Unlocker pretende hacer mucho más, y proporciona una útil lista de otras herramientas.

También eliminar en el reinicio es una opción (aunque esto no suena como lo que quieres)


Según MSDN, puede especificar el indicador de modo compartido CreateFile () 3rd parameter (dwSharedMode) FILE_SHARE_DELETE que:

Permite las operaciones abiertas posteriores en un archivo o dispositivo para solicitar acceso de eliminación.

De lo contrario, otros procesos no pueden abrir el archivo o dispositivo si solicitan acceso de eliminación.

Si no se especifica este indicador, pero el archivo o dispositivo se ha abierto para eliminar el acceso, la función falla.

Nota Eliminar acceso permite eliminar y cambiar el nombre de las operaciones.

http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx

Entonces, si puedes controlar tus aplicaciones puedes usar esta bandera.


No. Windows está diseñado para el "usuario promedio", es decir, las personas que no entienden nada de una computadora. Por lo tanto, el sistema operativo intenta ser inteligente para evitar PEBKAC s. Para citar a Bill Gates: "No hay problemas con Windows que cualquier número de personas quiera reparar". Por supuesto, él sabe que el 99.9999% de todos los usuarios de Windows no pueden decir si el programa simplemente hizo algo extraño debido a ellos o al tipo que lo escribió.

Unix fue diseñado cuando el mundo era más simple y cualquier persona lo suficientemente cerca de una computadora para tocarlo, probablemente sabía cómo armarlo de arena sucia. Por lo tanto, el sistema operativo generalmente le permite hacer lo que desea porque supone que usted conoce mejor (y si no lo hizo, lo hará la próxima vez).

Respuesta técnica: Unix asigna un "i-nodes" si crea un archivo. Los I-nodes se pueden compartir entre procesos. Si dos procesos crean el mismo archivo (es decir, dos procesos llaman a create () con la misma ruta), usted termina con dos i-nodes. Esto es por diseño. Permite una función de seguridad elegante: puede crear archivos que nadie más puede abrir que usted mismo:

  1. Abra un archivo
  2. Eliminarlo (pero mantener el manejador del archivo)
  3. Usa el archivo como quieras
  4. Cierra el archivo

Después del paso 2, el único proceso en el universo que puede acceder al archivo es quien lo creó (a menos que desee leer el disco duro bloque por bloque). El sistema operativo mantendrá los datos vivos hasta que cierre el archivo o su proceso fallezca (en ese momento Unix lo hará después).

Este diseño es la base de todos los sistemas de archivos Unix. El sistema de archivos de Windows NTFS funciona de la misma manera pero la API de alto nivel es diferente. Muchas aplicaciones abren archivos en modo exclusivo (lo que impide que cualquiera, incluso los programas de copia de seguridad) lean el archivo. Esto es cierto incluso para aplicaciones que solo muestran información como lectores de PDF.

Eso significa que tendrá que arreglar todas las aplicaciones de Windows para lograr el efecto deseado. Si tiene acceso a la fuente, puede crear un archivo en un modo compartido. Eso permitiría que otros procesos accedan a él al mismo tiempo, pero luego, deberá verificar antes de cada lectura / escritura si el archivo aún existe, si alguien ha realizado cambios, etc.