Trabajo de Sistemas Operativos.

9

Click here to load reader

Transcript of Trabajo de Sistemas Operativos.

Page 1: Trabajo de Sistemas Operativos.

República Bolivariana de Venezuela

Ministerio del Poder Popular para la Educación Superior

Universidad “Valle del Momboy”

Valera, Estado Trujillo

Informe de Sistemas Operativos

Alumno:

Asdrúbal Iván Suárez Rivera

Cédula de Identidad: 20.655.970

Page 2: Trabajo de Sistemas Operativos.

Para el informe se utilizó la distribución OpenSUSE. La cual está basada en

Linux.

Para el primer ejercicio se pide lo siguiente:

Genere un vector aleatorio de n elementos. Sume los elementos del mismo e imprima el resultado de esta suma.

Podemos dividir el programa en 3 etapas:

1. Entrada

2. Proceso

3. Salida

Para la Entrada tenemos:

• N (Siendo “N” el tamaño del vector)

En cuanto al proceso tenemos:

• Generación del vector de acuerdo al tamaño proporcionado

• Suma de los elementos del mismo.

Para finalmente tener en la salida:

• Resultado de la suma

Page 3: Trabajo de Sistemas Operativos.

Para implementar el ejercicio se usó el siguiente código:

Archivo vector.cpp#include <iostream>#include <cstdlib>long int sumar_vector(int *,size_t);void generar_vector(int *,size_t);void impr_vector(int *,size_t);

int main(){    size_t tamano;    int *vectorcito;    long int suma;    std::cout<<"Tamaño del vector: ";    std::cin>>tamano;    vectorcito = new int[tamano];    generar_vector(vectorcito,tamano);    suma = sumar_vector(vectorcito,tamano);    impr_vector(vectorcito,tamano);    std::cout<<"La suma es: "<<suma<<'\n';    delete vectorcito;    return 0;}long int sumar_vector(int *vector,size_t tam){    long int ret_val = 0;    for(int x=0;x<tam;x++)        ret_val += vector[x];    return ret_val;}void generar_vector(int *vector,size_t tam){    for(int x=0;x<tam;x++)        vector[x] = std::rand() % 100;}void impr_vector(int *vector,size_t tam){    std::cout<<"Elementos del vector\n";    for(int x=0;x<tam;x++)        std::cout<<vector[x]<<"\n";}

Page 4: Trabajo de Sistemas Operativos.

Luego, se compiló usando el siguiente comando

g++ vector.cpp -g -o vector.out

Generando un ejecutable llamado “vector.out”.

Éste ejecutable se corre usando el comando

./vector.out

Generando la siguiente salida

[asdrubal@localhost sistemasoperativos]$ ./vector.out

Tamaño del vector: 5

Elementos del vector

83

86

77

15

93

La suma es: 354

Es de hacer notar que ésta salida puede ser distinta al correr otra vez el

programa. Ya que en el mismo se puede observar que hay generación de

números aleatorios.

Page 5: Trabajo de Sistemas Operativos.

Kernel

Actualmente OpenSUSE usa el kernel de Linux versión 3.41. Esto se puede

comprobar usando el comando “uname -r”, dando como resultado:

[asdrubal@localhost sistemasoperativos]$ uname -r

3.4.25

¿Qué pasa al abrir cualquier programa?

En cónsola podemos abrir cualquier programa.

Supongamos que queremos abrir el editor vectorial “Inkscape”. Mediante la

cónsola ejecutamos:

[asdrubal@localhost sistemasoperativos]$ inkscape

Al presionar la tecla ENTER, éste de una vez se aparece, tal y como lo podemos

ver en la siguiente imagen:

1 http://es.opensuse.org/Caracter%C3%ADsticas_m%C3%A1s_destacadas_del_producto   

Page 6: Trabajo de Sistemas Operativos.

En el administrador de tareas se puede observar el proceso abierto:

Se pueden observar entre otras cosas el consumo de CPU, ID de proceso,

memoria virtual.

Al ejecutar en la cónsola

[asdrubal@localhost sistemasoperativos]$ gimp

Sucede algo similar, con la salvedad de que en este caso, no es “Inkscape”, sino

“Gimp” el programa a ejecutar.

Page 7: Trabajo de Sistemas Operativos.

En Linux se pueden usar varias maneras de ejecutar procesos. Una forma es por

cónsola, otra es mediante llamadas al sistema desde cualquier proceso padre2.

Anteriormente vimos como era la carga de procesos por cónsola. Ahora bien, es

posible hacerlo también mediante llamadas desde lenguaje C usando librerías

que pertenecen al estándar POSIX.

Éstas llamadas son3:

• Fork: Para crear un proceso hijo a partir de uno padre.

• Wait: Para esperar hasta el momento en el que un proceso externo le

mande una señal al proceso que ha ejecutado ésta llamada.

• Exit: Para salir del proceso.

• Signal: Para llamar a otro proceso.

• Kill: Para matar un proceso.

Es posible matar un proceso a través de cónsola, supóngase que se abre

“Inkscape” mediante los comandos ya mencionados anteriormente.

Podemos “matar” el proceso “Inkscape” (Suponiendo que el ID del proceso es

999) usando la siguiente llamada:

[asdrubal@localhost sistemasoperativos]$ kill 999

En caso de haber sido otro el ID del proceso, sencillamente se coloca este ID.

2 “Sistemas Operativos Modernos” Andrew Tanenbaum3 http://www.softpanorama.org/Internals/unix_system_calls.shtml   

Page 8: Trabajo de Sistemas Operativos.

Sistema de Archivos

OpenSUSE, al igual que otras distribuciones Linux usa el sistema de archivos

ext4.4

Según Wikipedia5 “Las principales mejoras son:

•Soporte de volúmenes de hasta 1024 PiB.

•Soporte añadido de extent.

•Menor uso del CPU.

•Mejoras en la velocidad de lectura y escritura.”

Intento de borrado del /home/

Al ejecutar:

[asdrubal@localhost sistemasoperativos]$ rm /home/

El sistema devuelve

Error al eliminar el archivo. Permiso denegado.

Esto debido a que /home/ pertenece a “root”.

4 https://ext4.wiki.kernel.org/index.php/Ext4_Howto#For_people_who_are_running_openSuSE   5 http://es.wikipedia.org/wiki/Ext4   

Page 9: Trabajo de Sistemas Operativos.

Cambio de privilegios

Se está usando LXDE como administrador de ventanas. Es posible acceder al

administrador del sistema como root mediante el comando

[asdrubal@localhost sistemasoperativos]$ sudo lxtask

Se puede cambiar la prioridad de los procesos de la forma mostrada en la

imagen: