select requiere soporte del controlador, el controlador implementa la función de sondeo en fops. Select determina si hay recursos disponibles (por ejemplo, legibles o de escritura) a través de la información proporcionada por la función de sondeo correspondiente a cada archivo de dispositivo, y si es así, devuelve la cantidad de descriptores de archivos de los recursos disponibles. Cuando está disponible, se activa y continúa ejecutándose.
El siguiente es un análisis de selección de dos procesos:
1. El proceso de suspensión de seleccionar
< Un controlador de dispositivo que admite operaciones de bloqueo normalmente implementa un conjunto de sus propias colas de espera, tales como colas de espera de lectura /escritura, para admitir las operaciones BLOQUEO o NON BLOQUEO requeridas por la capa superior (capa de usuario). Cuando la aplicación accede al dispositivo a través del controlador del dispositivo (el valor predeterminado es la operación BLOQUEAR), si el dispositivo actualmente no tiene datos para leer o escribir, el proceso del usuario se inserta en la cola de espera de lectura /escritura correspondiente al controlador del dispositivo para dejarlo dormir por un período de tiempo. Espere hasta que los datos se puedan leer /escribir y, a continuación, active el proceso.
select es un uso inteligente del mecanismo de cola de espera para permitir que el proceso de usuario se duerma correctamente cuando no hay recursos para leer /escribir, y para despertarse cuando el recurso es legible /escribible. Echemos un vistazo al proceso detallado de seleccionar el sueño.
selecciona bucles a través de la función de sondeo del controlador correspondiente a todos los descriptores de archivos en el fd_set que supervisa. La función de sondeo provista por el controlador primero inserta el proceso de usuario que llama a seleccionar en la cola de espera del recurso correspondiente del controlador del dispositivo (como la cola de lectura /escritura en espera), y luego devuelve una máscara de bits para indicar qué selección de los recursos actuales están disponibles. Cuando el bucle de selección atraviesa la función de sondeo correspondiente al descriptor de archivo especificado en todos los fd_sets, si no hay un recurso disponible (es decir, no hay ningún archivo disponible para la operación), la selección hace que el proceso se duerma, hasta que el recurso esté disponible, el proceso es El despertar (o tiempo de espera) continúa ejecutándose.
Después de analizar cómo se implementa el código.
La ruta de llamada de select es la siguiente: sys_select -> core_sys_select -> do_select
La función más importante es do_select, el trabajo principal está aquí, las dos primeras funciones principalmente hacen algunas Prepararse para el trabajo Do_select se define de la siguiente manera:
int do_select (int n, fd_set_bits * fds, s64 * timeout)
{
struct poll_wqueues table;
poll_table * wait;
int retval, i;
rcu_read_lock ();
retval = max_select_fd (n, fds);
rcu_read_unlock ();
if (retval < 0)
return retval;
n = retval;
poll_initwait (&table);
wait = &table.pt;
if (! * timeout)
wait = NULL;
retval = 0; //retval se usa para guardar el número de descriptores preparados, inicialmente 0
para (;;) {
long sin signo * rinp, * routp, * Rexp, * inp, * outp, * exp;
__timeout largo;
set_current_state (TASK_INTERRUPTIBLE); //Cambia el estado del proceso actual a TASK_INTERRUPTIBLE
inp = fds- > in; outp = fds- > out; exp = fds- > ex;
rinp = fds- > res_in; routp = fds- > res_out; rexp = fds- > res_ex;
para (i = 0; i < n; ++ rinp, ++ routp, ++ rexp) {//Recorra cada descriptor
sin signo largo dentro, fuera, ex, all_b Its, bit = 1, mask, j;
unsigned long res_in = 0, res_out = 0, res_ex = 0;
const struct file_operations * f_op = NULL;
Struct file * file = NULL;
in = * inp ++; out = * outp ++; ex = * exp ++;
all_bits = in
I. Descripción general: Agregar un programa al kernel de Linux requiere las siguientes tres tareas
Creo que muchos usuarios que usan sistemas Linux sentirán que las operaciones de línea de comandos s
Azure es uno de los representantes de más y más compañías que están considerando cambiar su negocio
Hace diez años, se lanzó Red Hat Enterprise Linux, lo que marca la entrada oficial de Linux en las a
Características de Fedora - Smolt resuelve problemas de compatibilidad de hardware
Analizar el comando de apagado normal en el sistema Linux
Introducción a varios comandos comunes en la instalación y depuración de Linux Squid
Espacio de disco de Linux vista de ocupación
Microsoft preinstalará Skype para computadoras con Windows 7
Diseño e implementación de un sistema de gestión de clústeres basado en Linux
Tutorial de inicio para múltiples instancias de Oracle bajo la plataforma Linux
¡Linux nginx admite el archivo .htaccess para implementar el método pseudoestático!
Acceso a los recursos compartidos de Windows desde la línea de comandos de Linux
Win 7 System Device Manager Usage
Win10 doble clic en el programa aparecerá cómo hacer la tarjeta
Vista previa de win10 10151 simplificado Descargar imagen iso Chino (64)
El equipo de VLC reveló la aplicación WP8.1 en abril más tarde
¿Qué hay de la interfaz Win10?
¿Cómo resolver el fallo del sistema Win7 Steam update?
Índice de experiencia de Win8.1 donde encontrar el método de índice de experiencia de Win8.1
Win8.1 es el primero en experimentar la nueva página de resultados de búsqueda de Bing