Experimento 1: familiarizarse con los comandos básicos de Linux y la gestión de procesos

Experimento 1: familiarizarse con los comandos básicos de Linux y la gestión de procesos

1. El propósito del experimento

(1) Profundizar la comprensión del concepto de proceso y aclarar la diferencia entre proceso y programa.
(2) Mayor comprensión de la esencia de la ejecución concurrente.
(3) Analizar el fenómeno de la contención de procesos por recursos y aprender métodos para resolver la exclusión mutua de procesos.

2. Contenido experimental

Operaciones de archivos y directorios de Linux

mostrar comando de directorio de archivos ls
cambiar comando de directorio actual cd
crear subdirectorio mkdir
comando de eliminar subdirectorio rmdir comando de
eliminar archivo rm comando
de cambio de nombre de archivo mv comando
de copia de archivo cp
mostrar contenido de archivo más o menos
encontrar archivo encontrar
redirección y canalización |
gestión de procesos
ejecutar los siguientes programas dados en la sección del apéndice, vea los resultados de sus propias ejecuciones y analícelos.

1. Escriba los resultados de ejecución del programa y analice por qué obtiene tales resultados.

2. Dibuje el árbol de procesos de ejecución del programa y marque el número de proceso en el nodo de proceso correspondiente

Escribir un programa, consulte el apéndice para conocer los requisitos
3. Análisis de código y ejecución de resultados
3.1 ls
inserte la descripción de la imagen aquí

3.2 discos compactos
inserte la descripción de la imagen aquí

3.3 mkdir
inserte la descripción de la imagen aquí

3.4 rmdir
inserte la descripción de la imagen aquí

3,5 rm
inserte la descripción de la imagen aquí

3,6 mv
inserte la descripción de la imagen aquí

3.7 pc
inserte la descripción de la imagen aquí

3.8 encontrar
inserte la descripción de la imagen aquí

3.9 Redirección y el carácter de canalización
inserte la descripción de la imagen aquí

Gestión de procesos
(1) programa uno
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

(2) Procedimiento 2
inserte la descripción de la imagen aquí

(3) Procedimiento 3

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

(4) Procedimiento 4
inserte la descripción de la imagen aquí

(5) Escriba un programa usted mismo, use la llamada al sistema fork() para crear un proceso secundario y reconozca la ejecución simultánea del proceso.

#include<stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
 
int main(){
    
    
        pid_t pid;
        pid=fork();
        if(pid<0)       /* 如果出错 */
                printf("error occurred!\n");
        else if(pid==0) /* 如果是子进程 */
                {
    
    
                        printf("我是子进程1,进程号是%d\n",getpid());
                        pid_t pid1;
                        pid1 = fork();
                        if(pid1==0){
    
    
                                printf("我是子进程1的子进程,进程号是%d\n",getpid());
                        }
                }
        else{
    
    
                printf("我是父进程,进程号是%d\n",getpid());
                pid=fork();
                if(pid==0)
                        printf("我是子进程2,进程号是%d\n",getpid());
                else{
    
    
                        pid=fork();
                if(pid==0)
                        printf("我是子进程3,进程号是%d\n",getpid());
                }
        }
        return 0;
 
}

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

(6) Modifique el programa 4 para bloquear

#include<stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
    
    
        int p1,p2,i;
        while((p1=fork())==-1);
        if(p1==0){
    
    
                lockf(1,1,0);
                for(i=0;i<50000; i++)
                        printf("son%d\n",i);
                lockf(1,0,0);
        }
        else
        {
    
    
                while((p2=fork())==-1);
                if(p2==0){
    
    
                        lockf(1,1,0);
                        for(i=0;i<50000;i++)
                                printf("daughter%d\n",i);
                        lockf(1,0,0);
                }else{
    
    
                        lockf(1,1,0);
                        for(i=0;i<50000;i++)
                                printf("parent%d\n",i);
                        lockf(1,0,0);
                }
        }
 
        return 0;
}

En cuarto lugar, la experiencia experimental
(1) para profundizar la comprensión del concepto del proceso, aclarar la diferencia entre el proceso y el programa.

(2) Mayor comprensión de la esencia de la ejecución concurrente.

(3) Analizar el fenómeno de la contención de procesos por recursos y aprender métodos para resolver la exclusión mutua de procesos.

(4) Revisar el contenido del libro de texto sobre control de procesos y sincronización de procesos, y profundizar la comprensión del concepto de gestión de procesos.

(5) Lea atentamente la parte de gestión de procesos de los materiales experimentales y analice la operación de múltiples procesos.

(6) Tener más experiencia práctica en el manejo de la comunicación entre procesos y las contradicciones de concurrencia, y tener una comprensión más profunda del bloqueo de concurrencia.

(7) Al hacer la programación concurrente, la posición de la cerradura al principio no es correcta, por lo que aunque el resultado de la modificación al principio no se muestra inmediatamente, el error del programa se encuentra después de ejecutarlo muchas veces, y el La experiencia obtenida de esto es que, para la programación concurrente, los casos de prueba deben realizarse en grandes cantidades y varias veces, de lo contrario, es posible que no se encuentre un pequeño error de lógica del programa. Una vez que dicho programa se implementa en el entorno de producción, sin duda es muy peligroso, por lo que debe estar diseñado para programación concurrente Casos de prueba muy bien desarrollados y uso de entornos de prueba de alto estrés.

Supongo que te gusta

Origin blog.csdn.net/david2000999/article/details/121839102
Recomendado
Clasificación