Memòria
-
Analitza detingudament el codi de la figura (programa
mem) i respon les preguntes justificadament. Considereu que s’executa en un sistema Linux, amb Copy on Write i mida de pàgina de 4096 bytes. La mida de l’executablemiprogés la mateixa que la demem.1/************** mem.c ****************/ 2#define MIDAPAGINA 4096 3int matrix[MIDAPAGINA*16]; 4void fgolafre(int j) { 5 int i; 6 for (i=j;i<MIDAPAGINA*16;i++) matrix[i]=23; 7} 8int main() { 9 int *vector; 10 vector=(int*)malloc(MIDAPAGINA*8); 11 if (fork()==0) { 12 execlp("miprog","miprog",NULL); 13 } 14 else if (fork()==0) { 15 vector[4]=73; 16 exit(0); 17 } 18 fgolafre(MIDAPAGINA*4); 19 waitpid(-1,NULL,0); 20 waitpid(-1,NULL,0); 21 free(vector); 22 return 0; 23}-
A quina regió de memòria està el contingut de la variable
matrix? I el contingut devector?Resposta
-
Quines regions de memòria es modificaran en executar-se la crida a la funció
fgolafre?Resposta
-
Just després del
malloc, part del contingut del fitxermapsdel procés pare és el següent:/proc/29390$ cat maps 55a6e75e9000-55a6e75ea000 r-xp 00000000 08:01 1074816 /home/alumne/final/mem 55a6e77e9000-55a6e77ea000 r--p 00000000 08:01 1074816 /home/alumne/final/mem 55a6e77ea000-55a6e77eb000 rw-p 00001000 08:01 1074816 /home/alumne/final/mem 55a6e9248000-55a6e9269000 rw-p 00000000 00:00 0 [heap] 7fff35c97000-7fff35cb8000 rw-p 00000000 00:00 0 [stack]
- Quantes pàgines mesura la regió del heap? Quant feia abans del
malloc? -
Resposta
- Quantes pàgines mesura la regió del heap? Quant feia abans del
-
Quin procés provoca més fallades de pàgina a causa de l’ús de COW? Si no hi hagués COW, quin procés seria el més perjudicat?
Resposta
-
-
En un sistema amb gestió de memòria basada en paginació, amb una mida de pàgina de 4KB, que no disposa de memòria virtual, executem el codi següent sense que hi hagi altres processos en execució.
1 int miarray[256]: 2 main(){ 3 int ret,i; 4 5 for (i=0;i<255;i++) 6 miarray[i]=0; 7 ret=fork(); 8 /*Hem arribat al primer punt*/ 9 for (i=0;i<255;i++) 10 miarray[i]=ret; 11 /*Hem arribat al segon punt*/ 12 13}La regió de codi ocupa 1KB, la regió de pila ocupa 256Bytes, i la regió de dades ocupa 1KB. La figura següent mostra l’estat de les taules de pàgines dels dos processos, suposant que ambdós processos arriben alhora a la línia 8 i que tots dos arriben alhora a la línia 11 (per a cada entrada es mostra només el camp corresponent al frame) .
cas A: línia 8.
cas B: línia 11-
Suposant que ambdós processos són a la línia 8 (cas A), calcula la quantitat de memòria física expressada en Bytes reservada entre els dos processos. Justifica el càlcul.
Resposta
-
Tenint en compte el codi i els estats de les taules de pàgines. Podem deduïr si aquest sistema ofereix COW? Per què?
Resposta
-
Tenint en compte el codi i els estats de les taules de pàgines, és possible deduir en quin frame o frames tenim el contingut de cada regió de cada procés?
Resposta
-
Suposant que ambdós processos són a la línia 8 (cas A), tenim fragmentació interna? Si és així calcula la quantitat de memòria que es malgasta entre els dos processos en aquest punt.
Resposta
-
Sistema de fitxers
-
A un sistema de fitxers Linux, tenim aquesta sortida a la pantalla del terminal. El directori actual és
/homeA/j/jfornes/examenjfornes@sert-entry-2:~/examen$ ls -liaR .: total 28 22289205 drwxr-xr-x 3 jfornes ac 4096 Nov 28 09:20 . 22282340 drwx--x--x 82 jfornes ac 12288 Nov 28 10:27 .. 22289207 -rw-r--r-- 3 jfornes ac 5 Nov 24 13:52 idem.txt 22289207 -rw-r--r-- 3 jfornes ac 5 Nov 24 13:52 one_file.txt 22289214 lrwxrwxrwx 1 jfornes ac 1 Nov 24 12:27 quiz -> . 22289249 drwxr-xr-x 2 jfornes ac 4096 Nov 28 10:27 subdir 22289215 prw-r--r-- 1 jfornes ac 0 Nov 24 12:29 talk_to_me.ch ./subdir: total 24 22289249 drwxr-xr-x 2 jfornes ac 4096 Nov 28 10:27 . 22289205 drwxr-xr-x 3 jfornes ac 4096 Nov 28 09:20 .. 22289283 -rwxr-xr-x 1 jfornes ac 8568 Nov 28 10:27 e.out 22289251 lrwxrwxrwx 1 jfornes ac 32 Nov 28 10:14 quatre_file.txt -> /homeA/j/jfornes/examen/idem.txt 22289207 -rw-r--r-- 3 jfornes ac 5 Nov 24 13:52 tres_file.txt
Respon raonadament a les següents preguntes:
-
Completa la taula d’inodes, omplint les cel·les amb interrogant.
Inode
22289205
22282340
22289207
22289214
22289249
22289215
22289251
22289283
#links
3
82
?
1
?
1
1
1
Type
d
d
-
?
d
?
l
-
Resposta
-
Llista tots els noms de fitxer (path names), per a accedir a l’inode 22289207
Resposta
Donat el següent codi que correspon al binari
e.outi assumint que cap crida al sistema retorna error, respon raonadament a les següents preguntes:1int main() { 2 char buf[128]; 3 int fd,s; 4 fd=open(“/homeA/j/jfornes/examen/subdir/quatre_file.txt”, O_RDONLY); 5 s=lseek(fd,0,SEEK_END); 6 sprintf(buf,"%d\n",s); 7 write(1,buf,strlen(buf)); 8 close(fd); 9 return(0); 10} -
Llançant el programa
e.outdes del shell-
Quins inodes es llegeixen en executar la línia 4? Anota els nombres quan siguin coneguts.
Resposta
-
Quins blocs de dades es llegeixen en executar la línia 4?
Resposta
-
Quin és el valor de la variable
fddesprés d’executar la línia 4?Resposta
-
Quin és el valor de la variable
sdesprés d’executar la línia 5?Resposta
-
-
Preguntes curtes
-
Explica l’impacte de l’execució de
forkiexita les tables de gestió d’entrada/sortida.Resposta
-
Llista les crides al sistema d’E/S que poden crear noves entrades a la taula de canals.
Resposta
-
El següent codi l’executen dos processos no relacionats per parentiu que volen intercanviar els seus PIDs fent servir sengles named pipes: una per a cada sentit de la comunicació. Cada procés obre correctament les pipes i tots dos primer executen una syscall
readi després una syscallwrite. Digueu si és correcte o no i justifiqueu la resposta.1int su_pid,mi_pid; 2mi_pid=getpid(); 3read(fd_lect,&su_pid,sizeof(int)); 4close(fd_lect); 5write(fd_esc,&mi_pid,sizeof(int)); 6close(fd_esc);Resposta
-
En un sistema de fitxers basat en inodes, quins són els dos tipus d’enllaços disponibles? Expliqueu breument la seva implementació (tipus de fitxer especial (sí/no), informació, etc.).
Resposta
