DISEÑO Y ADMINISTRACIÓN DE SISTEMAS OPERATIVOS Mitop.sh Explicaci Expli cación ón general del funcionamiento del programa: El programa se divi de en 3 partes: -La primera prime ra parte parte recopila la información inf ormación de carácter carácter general del ordenador y que se muestra inmediatamente inme diatamente en la cabecera (memoria (memori a usada, libre y total), porcentaje de uso de la l a CPU y otra información info rmación que se usara usara más adelante, adel ante, como el tamaño de página. -La segunda segund a parte parte es un bucle que recorre todas las carpetas numéricas de /proc y en el cual se recopila información inf ormación respectiva respectiva al tiempo de ejecución e jecución de los procesos y se espera e spera 1 segundo (Esto es necesario ne cesario para un cálculo correcto del porcentaje de uso de la CPU) -La tercera y última últi ma parte parte consta de un bucle bucl e que recorre una vez más todas las l as carpetas carpetas numéricas de /proc y en el e l que se recopilan recopil an o calculan todos los datos datos necesarios ne cesarios de cada proceso para mostrar por pantalla la información inf ormación necesaria para la práctica.
Explicaci Expli cación ón detallada detalla da del funcionamiento del programa: programa: Parte 1: Cabecera:
Obtenemos los l os datos del número de procesos de la l a cantidad cantidad de carpetas numéricas que se encuentra encuentra en ./proc y lo imprimimos numProcs=" numProcs="$( $( ls -l | awk aw k '{print '{print $9} $9}'' |grep -e '9\>' '9\>' -e '8\>' '8\>' -e '9\>' '9\>' -e '7\>' -e '6\>' -e '5\>' -e '4\>' '4\>' -e '3\>' -e '2\>' -e '1\>' -e '0\>'| w c -l)" echo -e '\e[1;33mNum '\e[1;33mNumero ero de proces pro cesos: os: \e[0m' $numPro $numProcs cs Obtenemos la memoria disponible del archivo stat de de la carpeta carpeta ./proc y calculamos la memoria usada y la mostramos memtotal=${MAPFILE[0]#*:} memtotal="${memtotal::-3}" memtotal=${memtotal//[[:blank:]]/} memfree=${MAPFILE[1]#*:} memfree="${memfree::-3}"
Además, guardamos los datos del tamaño de página y de los ticks ttime=$(getconf CLK_TCK) mapped=$(cat /proc/meminfo | grep ^M apped | awk '{print $2}') nrM apped=$(awk '/nr_mapped/ {print $2}' < /proc/vmstat) pageSize=$(($mapped/$nrMapped))
Parte 2: Pri mer Bucle:
Iniciamos el contador a 1 Obtenemos la lista de procesos y el número de procesos procs="$( ls -l | awk '{print $9}' |grep -e '9\>' -e '8\>' -e '9\>' -e '7\>' -e '6\>' -e '5\>' -e '4\>' -e '3\>' -e '2\>' -e '1\>' -e '0\>' | paste -sd "," -)" IFS=',' total=`ls -la /proc | awk '{print $9}' | grep "[0-9]" | w c -l`
Recorremos la lista de procesos y obtenemos el tiempo de ejecución en modo usuario y modo núcleo del archivo stat y los sumamos para calcular el tiempo total de ejecución modoNucleo[$contador]=$(cat "/proc/$pid/stat" 2> /dev/null | awk '{ print $14 }') modoU suario[$contador]=$(cat "/proc/$pid/stat" 2> /dev/null | aw k '{ print $15 }') enUsuario=${modoUsuario[$contador]} enNucleo=${modoNucleo[$contador]} if [ -z $enUsuario ] || [ -z $enNucleo ]; then echo > /dev/null else
Realizamos un bucle para obtener todos los datos de todos los procesos w hile [ $contador -le $total ]; do
Obtenemos el identificador del usuario que invoco al proceso de su archivo stat y l o almacenamos en variable id=`awk '/Uid/ {print $2}' 2> /dev /null < /proc/$pid/status`
A continuación, para obtener su nombre lo comparamos con el archivo /etc/passwd y lo guardamos en una variable user=`awk -F : -v v ar="$id" '{ if ($3 == v ar) print $1}' /etc/passwd` prior=$(awk '{print $18}' 2> /dev/null < /proc/$pid/stat)
Obtenemos su prioridad de su archivo stat y la almacenamos en una variable prior=$(awk '{print $18}' 2> /dev/null < /proc/$pid/stat)
Obtenemos la cantidad de memoria virtual del proceso de su archivo stat y la almacenamos en variable mVirt=$(awk '{print $23}' 2> /dev/null < /proc/$pid/stat)
Obtenemos el estado del proceso de su archivo stat y lo almacenamos en variable est=$(awk '{print $3}' 2> /dev/null < /proc/$pid/stat)
Obtenemos el nombre del programa que invoca al proceso de su archivo stat y lo almacenamos en variable comm=$(awk '{print $2}' 2> /dev /null < /proc/$pid/stat | sed 's/^.\|.$//g')
Thank you for interesting in our services. We are a non-profit group that run this website to share documents. We need your help to maintenance this website.