Preguntas frecuentes sobre entrevistas integradas
Comparta algunas preguntas comunes en entrevistas integradas. Espero que estos consejos sean útiles para todos en su entrevista. Sin más preámbulos, veamos la pregunta:
1. ¿Pueden las variables locales tener el mismo nombre que las variables globales?
Respuesta: Sí, el área local bloqueará el área global.
Las variables locales pueden tener el mismo nombre que las variables globales. Cuando se hace referencia a esta variable dentro de una función, se utilizará la variable local con el mismo nombre en lugar de la variable global.
Para algunos compiladores, se pueden definir múltiples variables locales con el mismo nombre en la misma función. Por ejemplo, una variable local con el mismo nombre se define en dos cuerpos de bucle y el alcance de esa variable local. está dentro de ese cuerpo cíclico.
2. Los bucles infinitos se utilizan a menudo en sistemas integrados. Cómo escribir bucles infinitos en C
Respuesta: while(1){} o for(;;)
.3. ¿Cuál es la función de la palabra clave estática?
Respuesta: En lenguaje C, la palabra clave static tiene tres funciones obvias:
1) En el cuerpo de la función, se utilizará una variable declarada como estática cuando se llame a la función Keep. su valor sin cambios.
2) Dentro del módulo (pero fuera del cuerpo de la función), las funciones dentro del módulo pueden acceder a una variable declarada como estática, pero otras funciones fuera del módulo no pueden acceder a ella. Es una variable global local.
3) Dentro de un módulo, una función declarada como estática solo puede ser llamada por otras funciones en este módulo. Es decir, la función está restringida al ámbito local del módulo en el que se declara.
4. ¿Cuál es la diferencia entre variables globales estáticas y variables globales ordinarias? ¿Cuál es la diferencia entre funciones estáticas y funciones ordinarias?
Respuesta: Si la descripción de una variable global (variable externa) está precedida por estática, constituye una variable global estática.
Las variables globales en sí mismas son métodos de almacenamiento estático y, por supuesto, las variables globales estáticas también son métodos de almacenamiento estático. No hay diferencia entre los dos en la forma en que se almacenan.
Aunque la diferencia entre los dos es que el alcance de las variables globales no estáticas es todo el programa fuente, cuando un programa fuente consta de varios archivos fuente, las variables globales no estáticas están en cada archivo fuente. . Eficaz. Las variables globales estáticas limitan su alcance, es decir, solo son válidas dentro del archivo fuente en el que está definida la variable y no se pueden usar en otros archivos fuente del mismo programa fuente.
Dado que el alcance de las variables globales estáticas está limitado a un archivo fuente y solo puede ser compartido por funciones en el archivo fuente, se pueden evitar errores en otros archivos fuente.
Se puede ver en el análisis anterior que cambiar una variable local a una variable estática cambia su método de almacenamiento y cambia su vida útil. Cambiar una variable global a una variable estática cambia su alcance y limita su alcance de uso.
El alcance de las funciones estáticas es diferente al de las funciones ordinarias. sólo en este documento. Las funciones utilizadas sólo en el archivo fuente actual deben declararse como funciones internas (estáticas), y las funciones internas deben describirse y definirse en el archivo fuente actual.
Para las funciones que se pueden usar fuera del archivo fuente actual, deben indicarse en un archivo de encabezado, y los archivos fuente que usan estas funciones deben incluir este archivo de encabezado.
5. ¿Cuáles son las formas de comunicación entre procesos?
Respuesta: La comunicación entre procesos se realiza principalmente a través de canalizaciones, mensajes, señales, etc.
1. Tubería sin nombre (tubería): la tubería es un método de comunicación semidúplex que los datos solo pueden fluir en una dirección y solo se pueden usar entre procesos relacionados. La afinidad del proceso generalmente se refiere a la relación del proceso padre-hijo.
2. Canalización avanzada (popen): si se inicia otro programa como un nuevo proceso en el proceso del programa actual, se considera un proceso secundario del programa actual. Este método se denomina método de canalización avanzada. .
3. Canalización con nombre: La canalización con nombre también es un método de comunicación semidúplex, pero permite la comunicación entre procesos no relacionados.
4. Cola de mensajes (cola de mensajes): la cola de mensajes es una lista vinculada de mensajes, que se almacena en el kernel y se identifica mediante el identificador de la cola de mensajes. Las colas de mensajes superan las deficiencias de una menor transmisión de información de señales, las canalizaciones solo pueden transportar flujos de bytes sin formato y tamaños de búfer limitados.
5. Semáforo (semóforo): El semáforo es un contador que se puede utilizar para controlar el acceso de múltiples procesos a recursos compartidos. A menudo se utiliza como mecanismo de bloqueo para evitar que otros procesos accedan a un recurso compartido cuando un proceso accede a él. Por tanto, se utiliza principalmente como medio de sincronización entre procesos y entre diferentes subprocesos dentro de un mismo proceso.
6. Señal (sinal): La señal es un método de comunicación relativamente complejo que se utiliza para notificar al proceso de recepción que se ha producido un evento.
7. Memoria compartida: la memoria compartida consiste en asignar una sección de la memoria a la que pueden acceder otros procesos. Esta memoria compartida es creada por un proceso, pero muchos todos los procesos pueden acceder a ella. La memoria compartida es el método IPC más rápido y está especialmente diseñada para abordar la ineficiencia de otros métodos de comunicación entre procesos. A menudo se utiliza junto con otros mecanismos de comunicación, como señales, para lograr la sincronización y comunicación entre procesos.
8. Socket: Socket también es un mecanismo de comunicación entre procesos. A diferencia de otros mecanismos de comunicación, se puede utilizar para la comunicación de procesos entre diferentes máquinas.
6. Cuatro condiciones necesarias para el punto muerto
Respuesta:
1. Exclusión mutua: solo se permite el acceso a un determinado recurso a un proceso a la vez. , es decir, el recurso Una vez asignado a un proceso, otros procesos ya no pueden acceder a él hasta que finalice el acceso de ese proceso.
2. Ocupar y esperar: Un proceso en sí ocupa uno o más recursos, y al mismo tiempo hay recursos insatisfechos y está esperando que otros procesos liberen el recurso.
3. No preferencia: Otros ya han ocupado un determinado recurso. No puedes apoderarte de los recursos de otras personas sólo porque tú también lo necesitas.
4. Espera circular: Existe una cadena de procesos de manera que cada proceso ocupe al menos un recurso requerido por el siguiente proceso.
Cuando se cumplen las cuatro condiciones anteriores, inevitablemente se producirá un punto muerto. Los procesos bloqueados no pueden continuar y los recursos que contienen no se pueden liberar. Esto hará que el rendimiento de la CPU disminuya. Por lo tanto, las situaciones de punto muerto desperdiciarán recursos del sistema y afectarán el rendimiento de la computadora. Entonces, es muy necesario resolver el problema del punto muerto.
7. ¿Cuáles son las formas de lidiar con el punto muerto?
Respuesta: Los interbloqueos se tratan principalmente desde cuatro aspectos: prevenirlos, evitarlos y detectar y liberarlos.
Prevención del punto muerto:
1. Asignación única de recursos: (destruyendo las condiciones de solicitud y retención)
2. un proceso es nuevo Cuando los recursos no están satisfechos, libera los recursos ocupados (destruyendo la condición de inalienable)
3. Método de asignación ordenada de recursos: el sistema asigna un número a cada tipo de recurso y a cada proceso. solicitudes en orden creciente. La liberación de recursos es lo opuesto (destruyendo la condición de espera del bucle)
Evitar el punto muerto:
Varias estrategias para evitar el punto muerto dañarán seriamente el rendimiento del sistema. Por lo tanto, para evitar un punto muerto, se deben imponer restricciones más débiles para obtener un rendimiento del sistema más satisfactorio. Porque en la estrategia para evitar un punto muerto, se permite que el proceso solicite recursos de forma dinámica. Por lo tanto, el sistema calcula previamente la seguridad de la asignación de recursos antes de realizar la asignación de recursos. Si esta asignación no hace que el sistema entre en un estado inseguro, el recurso se asignará al proceso; de lo contrario, el proceso esperará; Uno de los algoritmos para evitar interbloqueos más representativos es el algoritmo del banquero.
Detectar punto muerto:
Primero asigne un número único a cada proceso y cada recurso;
Luego establezca una tabla de asignación de recursos y una mesa de espera de procesos
Liberar punto muerto:
Cuando se descubre que un proceso está en punto muerto, debe liberarse del estado de punto muerto inmediatamente. Los métodos más utilizados son:
1. Privar recursos. una cantidad suficiente de recursos de otros procesos al proceso de punto muerto para aliviar el estado de punto muerto;
2. Deshacer el proceso: puede deshacer el proceso de punto muerto directamente o deshacer el proceso con el menor costo hasta que haya suficientes recursos. están disponibles y se elimina el estado de punto muerto; el llamado costo se refiere a la prioridad, el costo de funcionamiento, la importancia y el valor del proceso, etc.
8. ¿Cuál es la diferencia entre proceso e hilo?
Respuesta: Un proceso es la unidad básica para asignar y gestionar recursos durante la ejecución de programas ejecutados simultáneamente. Un subproceso es una unidad de ejecución de un proceso y es una unidad básica que es más pequeña que un proceso y se ejecuta de forma independiente. Un programa tiene al menos un proceso y un proceso tiene al menos un subproceso. Las principales diferencias entre los dos son las siguientes:
1.
2. El subproceso es la unidad más pequeña de ejecución de un programa y la unidad básica de programación del procesador, pero ambos procesos no se pueden ejecutar al mismo tiempo.
3. El proceso tiene su propio espacio de direcciones independiente. Cada vez que se inicia un proceso, el sistema le asignará un espacio de direcciones y establecerá una tabla de datos para mantener el segmento de código, el segmento de pila y el segmento de datos. Esta operación es muy cara. Los subprocesos comparten los datos en el proceso y utilizan el mismo espacio de direcciones. Por lo tanto, el costo de cambiar un subproceso por parte de la CPU es mucho menor que el de un proceso, y el costo de crear un subproceso también es mucho menor que el de un proceso. .
4. La comunicación entre subprocesos es más conveniente. Los subprocesos del mismo proceso comparten datos como variables globales y variables estáticas, pero la comunicación entre procesos debe realizarse a través de comunicación (IPC). Sin embargo, cómo manejar la sincronización y la exclusión mutua es la dificultad al escribir programas multiproceso. Sin embargo, los programas multiproceso son más robustos mientras un subproceso de un programa multiproceso muera, todo el proceso también morirá. La muerte de un proceso no afectará al otro proceso porque el proceso tiene su propio espacio de direcciones independiente. .
5. Al cambiar de proceso se consume una gran cantidad de recursos y la eficiencia es baja. Entonces, cuando se trata de cambios frecuentes, es mejor usar subprocesos que procesos. De manera similar, si necesita realizar operaciones concurrentes al mismo tiempo y compartir ciertas variables, solo puede usar subprocesos y no procesos.
6. Proceso de ejecución: Cada proceso independiente tiene un punto de entrada para la ejecución del programa, una secuencia de ejecución secuencial y un punto de entrada del programa. Sin embargo, los subprocesos no se pueden ejecutar de forma independiente y deben existir en el programa de aplicación, y el programa de aplicación proporciona control de ejecución de múltiples subprocesos.
Ventajas y desventajas:
La sobrecarga de ejecución de subprocesos es pequeña, pero no favorece la gestión y protección de recursos. Los subprocesos son adecuados para ejecutarse en máquinas SMP (sistemas de CPU dual).
La ejecución del proceso es costosa, pero puede administrar y proteger bien los recursos y puede migrarse entre máquinas.
¿Cuándo usar multiprocesamiento y cuándo usar multihilo?
Utilice múltiples procesos cuando existan altos requisitos de gestión y protección de recursos, y no haya restricciones en cuanto a gastos generales y eficiencia.
Utilice subprocesos múltiples cuando se requiera alta eficiencia, se requieran cambios frecuentes y los requisitos de administración y protección de recursos no sean muy altos.
9. ¿Los subprocesos tienen la misma pila?
Respuesta: La ejecución real del programa se completa mediante subprocesos. Cuando se inicia el programa, el sistema operativo crea un subproceso principal para usted.
Cada hilo tiene su propia pila.