Sei sulla pagina 1di 16

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

PRCTICA 3
Nuevas llamadas al sistema Gestin de memoria

1 de Octubre !1!

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

"N#IC$
1 OB E!I"OS...........................................................................................................................................................# $ U%& P'IME'& ((&M&)& &( SIS!EM&* proceso+vivo...............................................................................# $.1 (,amada a, sistema en e, espacio de usuario...................................................................................................$.$ (,amada a, sistema en e, espacio de, .estor de Procesos.............................................................................../ # O!'& %UE"& ((&M&)& &( SIS!EM&* memoria+proceso..........................................................................0 - %UES!'& 1(!IM& ((&M&)& &( SIS!EM&* 2et+mapa............................................................................1$ 3 PU%!U&CI4%....................................................................................................................................................1/

P2ina - $

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

OBJETIVOS

(os principa,es o56etivos de esta prctica son* 2 Entender e, mecanismo a trav7s de, cua, puede a8adirse una ,,amada a, sistema MI%I9 Compro5ar c:mo una ,,amada nueva ;ueda incorporada a ,a 5i5,ioteca posix &simi,ar c:mo estn u5icados en ,a memoria ,os se2mentos de ,os procesos )iscernir entre ,os distintos identificadores asociados a un mismo proceso se2<n se est7 en e, nive, de usuario o de, kernel Comprender = usar e, mecanismo a trav7s de, cua,> informaci:n residente en e, espacio de, kernel> ,,e2a a ?acerse visi5,e en e, espacio de, proceso ;ue invoca una ,,amada a, sistema Conso,idar ,a destre@a en a8adir ,,amadas a, sistema incorporando tres nuevas ,,amadas UNA PRIMERA LLAMADA AL SISTEMA: proceso_vivo

Se trata de introducir una nueva ,,amada a, sistema MI%I9 ;ue nos permita conocer ;u7 procesos estn creados en un momento dado. Para e,,o> esta nueva ,,amada tendr e, perfi, si2uiente* int proceso_vivo (int n_proc)

E, parmetro n_proc indicar un n<mero de proceso ;ue podr variar en e, ran2o A0..00B =a ;ue> como vimos en ,a prctica $> en ,a versi:n de MI%I9 uti,i@ada> e, n<mero de procesos C%'+P'OCSD es i2ua, a 100. Si e, proceso referenciado por n_proc se corresponde con un proceso vi2ente E=a veremos ms ade,ante c:mo sa5er,o- ,a funci:n devo,ver un va,or de cierto Fpor e6emp,o 1G> en caso contrario devo,ver fa,so F0G. Para compro5ar e, correcto funcionamiento de este apartado> se uti,i@ar e, pro2rama de prue5a Cprueba%&cD cu=o c:di2o es e, si2uiente*
#include <stdio.h> #include <unistd.h> #define proceso_vivo _proceso_vivo int main(void) { int i,j; printf ("Procesos vivos "); j ! "; for( i ! "; i < #""; i$$) if(proceso_vivo(i)) { printf ("%&d", i); j$$; if ((j%#") !! ") printf ("'n ( printf ("'n");

");

P2ina - #

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

&8adir una nueva ,,amada a, sistema re;uiere dos partes* c:di2o re,acionado con e, espacio de usuario para efectuar ,a ,,amada a, sistema = c:di2o en e, servidor ;ue atender dic?a ,,amada Fen esta prctica uti,i@aremos siempre e, .estor de ProcesosG. &1 'lamada al sistema en el espacio de usuario

Para ?acer visi5,e una nueva ,,amada a, sistema en e, espacio de usuario> 5sicamente ?a= ;ue ?acer ,o si2uiente* 1. &d6udicar,e un n<mero de ,,amada. En e, fic?ero (usr(src(include(mini)(callnr&* Frep,icado en (usr(include(mini)G> se fi6a e, n<mero de ,,amadas a, sistema C NCALLSD en 03 = se ,es da un nom5re = un n<mero a a;ue,,as ;ue estn imp,ementadas. Esta nueva ,,amada ,a identificaremos como* +de,ine PROC$SO-.I.O /0 $. )efinir su prototipo para poder ser invocada por e, pro2rama de usuario . (os prototipos estn en e, fic?ero (usr(src(include(unistd&* Frep,icado en (usr(includeG. En nuestro caso> e, prototipo ser* _P)*+*+,P-( int _proceso_vivo, (int n_proc) ); #. Imp,ementar ,a funci:n de interfa@ de ,a nueva ,,amada . E, c:di2o de cada una de estas funciones de interfa@ reside en e, directorio (usr(src(lib(posi) como un fic?ero independiente> por e6emp,o -1ill&c para e, interfa@ de ,a ,,amada a, sistema 1ill ;ue mata a un proceso. En nuestro caso denominaremos -proceso-vivo&c a, fic?ero ;ue imp,ementar e, interfa@ de ,a nueva ,,amada a, sistema. Ms ade,ante veremos ;u7 de5e ?acer esta funci:n de interfa@. -. Incorporar ,a nueva ,,amada a, proceso de compi,aci:n . Para e,,o ?a5r ;ue inc,uir una nueva ,Hnea en e, fic?ero (usr(src(lib(posi)(2a1e,ile&in ;ue ?a2a referencia a, fic?ero -proceso-vivo&c para ;ue se compi,e e inc,u=a en ,a 5i5,ioteca correspondiente. 3. .enerar una nueva versi:n de ,a 5i5,ioteca con ,a nueva ,,amada . (o veremos ms ade,ante. (a imp,ementaci:n de ,a funci:n de interfa@ Epaso #- se encar2a 5sicamente de introducir ,os parmetros rea,es de ,a funci:n en un mensa6e = envirse,o a, servidor ;ue atender ,a ,,amada* e, .estor de Procesos en nuestro caso. Como e6emp,o podemos ver c:mo est imp,ementado este interfa@ para e, caso de -1ill&c* Iinc,ude J,i5.?K Idefine Li,, +Li,, Iinc,ude Jsi2na,.?K PUB(IC int Li,,Fproc> si2G int procM /N O?ic? process is to 5e sent t?e si2na, N/ int si2M /N si2na, num5er N/ P messa2e mM m.m1+i1 Q procM P2ina - -

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

m.m1+i$ Q si2M returnF+s=sca,,FMM> RI((> SmGGM T En este c:di2o puede apreciarse c:mo se introducen ,os parmetros C procD = CsigD en un mensa6e CmD ;ue aca5a envindose a trav7s de ,a ,,amada _syscall a, .estor de Procesos E identificado por MM- indicndo,e ;ue se trata de ,a ,,amada KILL. (os distintos tipos de mensa6es pueden consu,tarse en e, fic?ero (usr(include(mini)(ipc&*. &?ora =a ,o tenemos todo para ?acer esta primera parte* En esta prctica ?a= ;ue partir de ,a ima2en ori2ina, de MI%I9. Entrar en MI%I9 con e, fic?ero prueba%&c en ,a ima2en de dis;uete. Crear un directorio para e, desarro,,o de ,a prctica tec,eando* m1dir practica3. Cam5iarse a dic?o directorio = copiarse e, fic?ero de prue5as. Editar e, fic?ero (usr(src(include(mini)(callnr&* e inc,uir ,a definici:n de ,a nueva ,,amada a, sistema* +de,ine PROC$SO-.I.O /0. Copiar e, fic?ero (usr(src(include(mini)(callnr&* en (usr(include(mini)(callnr&* Editar e, fic?ero (usr(src(include(unistd&* e inc,uir e, prototipo de ,a nueva ,,amada a, sistema* -PROTOT3P$ 4int -proceso-vivo5 4int n-proc6 67 Copiar e, fic?ero (usr(src(include(unistd&* en (usr(include(unistd&* Crear e, fic?ero (usr(src(lib(posi)(-proceso-vivo&c e inc,uir e, c:di2o ;ue imp,ementa ,a funci:n de interfa@ de ,a nueva ,,amada a, sistema tomando como mode,o -1ill&c. Editar e, fic?ero (usr(src(lib(posi)(2a1e,ile&in e inc,uir una ,Hnea ;ue fuerce ,a compi,aci:n de, nuevo fic?ero* -proceso-vivo&c 8 Situados en e, directorio (usr(src(lib(posi)> e6ecutar* ma1e 2a1e,ile. )e esta forma se 2enerar un fic?ero Makefile nuevo con ,as nuevas re2,as ;ue =a inc,uirn e, fic?ero -proceso-vivo&c. Situarse en e, directorio (usr(src = tec,ear* ma1e libraries. Si todo fue 5ien> se ?a de5ido crear una nueva versi:n de ,a 5i5,ioteca libc&a> ;ue reside en (usr(lib(i39:> conteniendo ,a nueva ,,amada a, sistema. Para compro5ar,o> situarse en (usr(lib(i39: = tec,ear* ar t libc&a ; more . Por ,a panta,,a aparecen ,as funciones contenidas en esta 5i5,ioteca> entre ,as ;ue de5e encontrarse -proceso-vivo.

P2ina - 3

E.U. de Informtica-U.P.M. &

Sistemas Operativos II

Curso 10/11

'lamada al sistema en el espacio del Gestor de Procesos

Cuando e, .estor de Procesos reci5e un mensa6e para procesar una ,,amada a, sistema> se dar contro, a ,a funci:n indicada a trav7s de una ta5,a denominada C call-vec<NCA''S=D. En nuestro caso> a dic?a funci:n ,a denominaremos do-proceso-vivo. .rficamente> ,o ;ue sucede desde ;ue e, usuario invoca Cproceso-vivoD ?asta ;ue toma contro, ,a funci:n Cdo-proceso-vivoD para e6ecutar dic?a ,,amada> es ,o si2uiente*

>i?ura 1* Es;uema de transferencia de contro, para ,a ,,amada* P'OCESO+"I"O 3U Con este es;uema en mente> para imp,ementar esta nueva ,,amada a, sistema en e, espacio de, .estor de Procesos> 5sicamente ?a= ;ue ?acer ,o si2uiente* 1. Inc,uir ,a nueva ,,amada en call-vec<=. En e, fic?ero (usr(src(servers(pm(table&c se define este vector. Bastar con inc,uir e, nom5re de ,a nueva funci:n Cdo-proceso-vivoD en ,a posici:n ;ue ,e corresponde F/0G. $. )efinir su prototipo para ;ue pueda ser invocada . (os prototipos estn en e, fic?ero (usr(src(servers(pm(proto&*. (os prototipos> dentro de este fic?ero> se encuentran

P2ina - /

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

a2rupados en funci:n de, fic?ero C.cD en e, ;ue se encuentra su c:di2o. %osotros ,o inc,uiremos en Cmisc&cD escri5endo* -PROTOT3P$4 int do-proceso-vivo5 4void6 67 #. Imp,ementar e, c:di2o de ,a nueva ,,amada. Como aca5amos de comentar en e, punto anterior> e, c:di2o se escri5ir en e, fic?ero (usr(src(servers(pm(misc&c dentro de una funci:n nueva Cdo-proceso-vivoD con e, mismo perfi, ;ue su prototipo. -. Compi,ar e insta,ar ,os cam5ios en e, .estor de Procesos. 3. .enerar una nueva ima2en de, n<c,eo de MI%I9. (a imp,ementaci:n de, c:di2o de ,a nueva ,,amada Epaso #- se encar2ar 5sicamente de sacar e, identificador de, proceso por e, ;ue se pre2unta de, campo correspondiente de, mensa6e ;ue envi: -s@scall = devo,ver si dic?o proceso est o no en uso. Como e6emp,o podemos ver c:mo est imp,ementada ,a funci:n do-1ill Fu5icada en e, fic?ero (usr(src(servers(pm(si?nal&cG* P./012 int do_3ill(){ 45 Perform the 3ill(pid, si6no) s7stem call. 54 return chec3_si6(m_in.pid, m_in.si6_nr); ( E, mensa6e reci5ido se encuentra en ,a varia5,e Cm-inD dec,arada en e, fic?ero /usr(src(servers(pm(?lo&*. Cuando se indica m_in.pid se est ?aciendo referencia a m_in.m1_i1 Fver e, fic?ero (usr(src(servers(pm(param&*G. Para sa5er si e, proceso por e, ;ue nos pre2untan est o no vivo> tendremos ;ue consu,tar ,a ta5,a de descriptores de procesos ;ue mantiene e, .estor de Procesos = ;ue est dec,arada en (usr(src(servers(pm(mproc&* como* E9!E'% struct mproc P V.. T mproc A%'+P'OCSBM Como puede apreciarse> a diferencia de ,a ta5,a de procesos C procD vista en ,a prctica $ = ;ue mantiene e, Lerne, de MI%I9> mproc no re2istra ,as tareas. Wina,mente> para sa5er si e, proceso en cuesti:n est o no vivo> 5asta con consu,tar e, campo Cmp-,la?sD de, descriptor =a ;ue su <,timo 5it indica si e, descriptor est o no en uso Fta, = como se define en mproc&** Idefine I%+USE 0X001 /N set O?en YmprocY s,ot in use N/G. En definitiva> si se desea sa5er si est en uso e, proceso 3> 5astar con escri5ir* if F mprocA3B.mp+f,a2s S I%+USE G /N E, proceso 3 esta en uso N/ &?ora =a ,o tenemos todo para ?acer esta se2unda parte* Entrar en MI%I9. Editar e, fic?ero (usr(src(servers(pm(table&c = sustituir ,a ,Hnea* no+s=s> por* do+proceso+vivo> /N 3U Q unused N/ /N 3U Q P'OCESO+"I"O N/

P2ina - U

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

Editar e, fic?ero (usr(src(servers(pm(proto&* para inc,uir e, prototipo de ,a funci:n do-proceso-vivo en ,a parte correspondiente a misc.c. Editar e, fic?ero (usr(src(servers(pm(misc&c para inc,uir e, c:di2o de ,a funci:n do-proceso-vivo. Cam5iarse a, directorio (usr(src(servers = tec,ear* maLe ima2e maLe insta,, Cam5iarse a, directorio (usr(src(tools = tec,ear* maLe insta,, &rrancar con ,a nueva ima2en* ?a,t Z menu Situarse en e, directorio practica3> compi,ar e, pro2rama prueba%&c = e6ecutar,o. &notar ,os n<meros de ,os procesos ;ue estn en uso*

Pu,sar ,a tec,a >1 Fdos veces para ver todos ,os procesosG. E, sistema MI%I9 informar de ,os procesos ;ue estn en uso. [O5servas a,2una diferencia\ &notar,a.

"o,ver a e6ecutar ,a prueba%. [En ;u7 se diferencia con ,a e6ecuci:n anterior\

EXp,icar ,a diferencia entre ,a e6ecuci:n de ,a prueba% = ,a tec,a >1.

P2ina - ]

E.U. de Informtica-U.P.M. 3

Sistemas Operativos II

Curso 10/11

OTRA NUEVA LLAMADA AL SISTEMA: memori _proceso

Se trata a?ora de introducir otra ,,amada a, sistema MI%I9 ;ue nos permita conocer ;u7 cantidad de memoria -en Kbytes- est ocupando un proceso en e, ran2o A0..00B. Para e,,o> esta nueva ,,amada tendr e, perfi, si2uiente* int memoria_proceso (int n_proc)

Si e, proceso indicado por e, parmetro n_proc no estuviese vivo> se devo,ver un -1. Para compro5ar e, correcto funcionamiento de este apartado> se uti,i@ar e, pro2rama de prue5a Cprueba/&cD cu=o c:di2o es e, si2uiente*

Iinc,ude Jstdio.?K Iinc,ude Junistd.?K Idefine memoria+proceso +memoria+proceso int mainFvoidGP int i> tamanioM for FiQ0M iJ100M iZZG P tamanio Q memoria-procesoFiGM if Ftamanio K 0G printf F^E, proceso _$d ocupa _3dR`n^> i> tamanioGM T T Para ?acer visi5,e esta ,,amada en e, espacio de usuario> ta, = como ?icimos en e, apartado anterior> tendremos en cuenta ,o si2uiente* E, nom5re = n<mero de ,a nueva ,,amada sern* 2$2ORIA-PROC$SO = /9 E, nom5re de ,a funci:n en e, prototipo ser -memoria-proceso E, fic?ero ;ue inc,u=a ,a imp,ementaci:n se denominar -memoria-proceso&c

(a imp,ementaci:n de ,a ,,amada tam5i7n se rea,i@ar por e, .estor de Procesos = se tendr en cuenta ,o si2uiente* E, nom5re de ,a funci:n ser do-memoria-proceso = tam5i7n se inc,uir en e, fic?ero misc&c

En MI%I9> ,a memoria de un proceso se re2istra como tres se2mentos F!eXto> )atos = Pi,aG. (a informaci:n asociada a cada se2mento Fdirecci:n virtua, = fHsica donde se encuentra = su

P2ina - 0

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

tama8oG se 2uarda en una estructura de, tipo mem-map cu=a definici:n se encuentra en e, fic?ero (usr(src(include(mini)(t@pe&* = resu,ta ser ,a si2uiente* struct mem_map { vir_clicks vir_clicks }; En e, descriptor de cada proceso 2uardado en ,a ta5,a mproc vista en e, apartado anterior> ?a= un campo denominado mp-se? con toda esta informaci:n definido como* struct mem_map mp_seg[NR_LOC L_!"#!$ En e, fic?ero (usr(src(include(mini)(const&* podemos consu,tar e, tama8o de un click de memoria> e, va,or de NR_L CAL_S!"S = ,os nom5res sim5:,icos para referirnos a cada uno de ,os se2mentos. E, tro@o de c:di2o con estas definiciones se muestra a continuaci:n* Idefine %'+(OC&(+SE.S Idefine ! Idefine ) Idefine S 0 1 $ # /N I ,oca, se2ments per process FfiXedG N/ mem_vir; mem_len; /* virtual address */ /* physical address */ /* length */ phys_clicks mem_phys;

/N procAiB.mem+mapA!B is for teXt N/ /N procAiB.mem+mapA)B is for data N/ /N procAiB.mem+mapASB is for stacL N/ -00/ /N unit in O?ic? memor= is a,,ocated N/ /N ,o2$ of bC(ICR+SIaE N/

/N Memor= is a,,ocated in c,icLs. N/ Idefine C(ICR+SIaE Idefine bC(ICR+SbIW! /N C,icL to 5=te conversions Fand vice versaG. N/

Como puede apreciarse> ,a memoria se asi2na mediante clicks de -00/ 5=tes. En cua,;uier caso> ca,cu,ar e, tama8o de un proceso no es tan simp,e como sumar ,as ,on2itudes de cada se2mento. Para apreciar,o> si pu,samos ,a tec,a de funci:n > > podremos ver una panta,,a como ,a si2uiente*

P2ina - 10

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

>i?ura * Mapas de memoria de ,os procesos o5tenidos con > Para cada se2mento Ftext> data = stackG aparece su direcci:n virtua,> fHsica = ,on2itud de se2mento. ba= ;ue tener en cuenta ;ue> en esta versi:n de MI%I9> e, se2mento de datos = e, de pi,a crecen en direcciones distintas para aprovec?ar e, ?ueco entre am5os tanto para e, crecimiento de ,a pi,a como para e, crecimiento por datos dinmicos C *eapD. Por esta ra@:n> e, se2mento de datos = e, de pi,a siempre estn conti2uos en memoria. Sin em5ar2o> e, se2mento de teXto puede o no estar conti2uo a ,os otros dos se2mentos. Para ver,o con un e6emp,o> ,a representaci:n 2rfica de ,a memoria ocupada por ,os procesos pm> cron = syslogd es ,a ;ue se aprecia en ,a fi2ura si2uiente*

P2ina - 11

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

>i?ura 3* 'epresentaci:n 2rfica de unos mapas de memoria si2nificativos. Se indican ,as direcciones tanto en decima, como en ?eXadecima,. (a direcci:n de, se2mento S apunta a, <,timo click ocupado Fcomparar e, caso de pm con ,os otros dos mapas de memoriaG. &ntes de se2uir ade,ante> es conveniente pensar c:mo puede o5tenerse e, tama8o de un proceso en Kbytes a partir de, campo mp-se? de, descriptor de un proceso. &?ora =a ,o tenemos todo para ?acer este apartado* Entrar en MI%I9 con e, fic?ero prueba/&c en ,a ima2en de dis;uete. Imp,ementar ,a parte de esta ,,amada en e, espacio de usuario = compro5ar ;ue ;ueda incorporada a ,a 5i5,ioteca libc&a& Imp,ementar ,a parte de esta ,,amada en e, espacio de, .estor de Procesos compi,ando e insta,ando ,os cam5ios. .enerar una nueva ima2en de, n<c,eo = arrancar con dic?a ima2en. Situarse en e, directorio practica3 = compi,ar ,a prueba/&c. E6ecutar ,a prue5a tec,eando* &(a&out ; more &notar ,os tama8os de cada proceso = contrastar,os con ,a informaci:n ;ue nos suministra ,a tec,a > .

NUESTRA "LTIMA LLAMADA AL SISTEMA: #e$_m p

Se trata a?ora de introducir otra ,,amada a, sistema MI%I9 ;ue nos d7 e, mapa de memoria de un proceso o de una tarea. Para e,,o> esta nueva ,,amada tendr e, perfi, si2uiente* int get_mapa (int n_proc, struct mem_map *mi_mapa)

Si e, proceso indicado por e, parmetro n_proc no estuviese vivo o ?u5iese a,2<n tipo de error se devo,ver un -1 Fva,or ne2ativoG> si todo va 5ien se devo,ver 0. Para compro5ar e, correcto funcionamiento de este <,timo apartado> se uti,i@ar e, pro2rama de prue5a Cprueba:&cD cu=o c:di2o es e, si2uiente*
#include <mini84s7s_confi6.h> #include <mini84confi6.h> #include <mini84const.h>

P2ina - 1$

E.U. de Informtica-U.P.M.
#include <stdio.h> #include <unistd.h> #define 6et_mapa _6et_mapa void main (void) { int n, i;

Sistemas Operativos II

Curso 10/11

struct mem_map mapa9:)_0*2;0_<-=<>; i!#; for (n!?@;n<#"";n$$) { if (A6et_mapa(n, mapa)) { if ((n!!?@) BB ((i%C")!!")) {
printf ("'nPulse D1ntroE printf (":proc printf ("????? ( "); 6etchar(); F.Gir F.His 0on6 ???????????????????? F.Gir F.His 0on6'n"); ?????????????????????'n"); F.Gir F.His 0on6 ????????????????????

printf ("n!%Cd printf (" printf (" i$$; ( ( (

+e8t!%@I %@I %@I ",

n, mapa9+>.mem_vir, mapa9+>.mem_ph7s, mapa9+>.mem_len); Fata!%@I %@I %@I ", <tac3!%@I %@I %@I'n", mapa9F>.mem_vir, mapa9F>.mem_ph7s, mapa9F>.mem_len); mapa9<>.mem_vir, mapa9<>.mem_ph7s, mapa9<>.mem_len);

Como puede o5servarse> esta nueva ,,amada tam5i7n de5e funcionar para ,as tareas> en definitiva> ;ue e, parmetro n-proc puede variar en e, ran2o A--..00B. En este apartado tenemos 5sicamente dos cuestiones nuevas* 1. [C:mo acceder a, mapa de memoria de ,as tareas si no estn en e, vector mproc\ $. [C:mo ?acer ;ue e, mapa de memoria aca5e en e, espacio de, usuario\ Para reso,ver ,a primera cuesti:n> en ve@ de uti,i@ar e, campo mproc<i=&mp-se? EineXistente para e, caso de ,as tareas-> ,o ;ue ?aremos es usar ,a funci:n C?et-mem-map4 6D de, propio .estor de Procesos Fpuede verse su c:di2o en (usr(src(servers(pm(utilit@&cG. Esta funci:n permite o5tener e, mapa de memoria de un proceso o de una tarea enviando e, mensa6e correspondiente a, kernel ;ue es ;uien tiene toda esta informaci:n. E, prototipo de esta funci:n> definido en (usr(src(servers(pm(proto&*> es e, si2uiente* +P'O!O!cPEF int 2et+mem+map> Fint proc+nr> struct mem+map Nmem+mapG GM

P2ina - 1#

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

E, <nico pro5,ema es ;ue> si nos fi6amos en ,a Wi2ura $ e invocamos get_mem_map con e, n<mero de proceso /0 para o5tener e, mapa de memoria de, proceso syslogd> nos devo,ver un error =a ;ue e, proc_nr ;ue espera get_mem_map es un n<mero como #3300 en ve@ de, /0. !odo esto tiene ;ue ver con ;ue ,os procesos no tienen un <nico identificador por e, ;ue referirse a ,os mismos sino tres ;ue denominaremos* p-nr endpoint pid Para acceso rpido dentro de, kernel Para acceso Cse2uroD dentro de, kernel Para referirse a un proceso en e, espacio de usuario

Para visua,i@ar estos tres identificadores> entrar a, sistema = -uti,i@ando ,a tec,a de funci:n >1 Fpara ver e, CendpointDG = e, comando Cps Ae ; moreD Fpara ver e, CpidDG-> comp,etar ,a ta5,a si2uiente* p-nr --# -$ -1 0 1 $ # 3 / U 10 1$ 13 endpoint pid nombre id,e c,ocL s=stem Lerne, pm fs rs mem ,o2 tt= ds init pci f,opp= at+Oini

Tabla1* )istintos identificadores de ,os procesos

Como puede apreciarse> s:,o ,as tareas A--..-1B = e, proceso pm tienen e, mismo va,or para ,os tres tipos de identificadores de proceso. &?ora> si ac,aramos ;ue ,a funci:n ?et-mem-map espera un identificador de proceso de tipo endpoint> entenderemos e, por ;u7 de, error a, invocar,a con un va,or de /0 para o5tener e, mapa de memoria de, proceso syslogd. E, va,or de, identificador p-nr =a vimos en ,a prctica $ ;ue varia5a en e, ran2o A--..00B para acceso rpido a ,a ta5,a proc de, kernel => adems> era un campo de, descriptor de cada proceso u5icado en esta ta5,a. (os otros dos identificadores de procesos Fendpoint = pidG se 2uardan en ,a ta5,a de descriptores mproc 2estionada por e, .estor de Procesos en sendos campos denominados mp-endpoint = mp-pid respectivamente. !odo esto puede apreciarse 2rficamente en ,a fi2ura si2uiente*

P2ina - 1-

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

>i?ura %* Identificadores de procesos = su u5icaci:n en proc = mproc &na,i@ando esta fi2ura podemos ver ;ue e, endpoint de un proceso identificado por Cp-nrD es 7, mismo si se trata de una tarea o e, mproc<p-nr=&mp-endpoint correspondiente si se trata de un proceso. En cuanto a ,a cuesti:n de c:mo pasar e, mapa de memoria Fconse2uido a trav7s de ?et-mem-mapG a, espacio de usuario> de nuevo tendremos ;ue uti,i@ar ,os servicios de, kernel =a ;ue e, .estor de Procesos no tiene privi,e2ios para copiar estos datos en e, espacio de usuario. (a funci:n de, .estor de Procesos ;ue nos va a permitir copiar datos a, espacio de usuario se denomina s@s-datacop@ cu=o perfi,> definido en (usr(src(include(mini)(s@slib&*> es* s=s+datacop=Fsrc+proc> src+vir> dst+proc> dst+vir> 5=tesG (os parmetros src_proc = src_#ir indican d:nde est ,a informaci:n a copiar Fidentificador endpoint de, proceso ori2en = direcci:n virtua, de ,os datos a copiarG. (os parmetros dst_proc = dst_#ir indican ,o mismo pero para e, destino> es decir d:nde ?a= ;ue copiar ,os datos. E, <,timo parmetro bytes indica e, tama8o en 5=tes de ,os datos a copiar. Si todo va 5ien devue,ve un 0 => en caso contrario> devue,ve un va,or ne2ativo. Se puede ver un e6emp,o de, uso de s@s-datacop@ en ,a funci:n do-si?action ;ue reside en e, fic?ero (usr(src(servers(pm(si?nal&c. (as dos ,Hneas de ma=or inter7s son ,as si2uientes* r Q s=s+datacop=FPM+P'OC+%'>Fvir+5=tesG svp> O?o+e> Fvir+5=tesG m+in.si2+osa> Fp?=s+5=tesG si@eofFsvecGGM E, identificador endpoint de, proceso .estor de Procesos C$M_$R C_NRD est definido en e, fic?ero (usr(src(include(mini)(com&*. E, proceso destinatario de ,a copia de5e ser e, proceso de usuario ;ue invoc: ,a ,,amada a, sistema ;ue estamos imp,ementando C?et-mapaD. En e, caso de do-si?action> a, i2ua, ;ue en e, nuestro> se identifica a, proceso ;ue ori2in: ,a ,,amada con ,a varia5,e C B*o-eD definida en e, fic?ero (usr(src(servers(pm(?lo&*. I2ua, ;ue en e, apartado anterior> para ?acer visi5,e esta ,,amada en e, espacio de usuario> tendremos en cuenta ,o si2uiente*

P2ina - 13

E.U. de Informtica-U.P.M.

Sistemas Operativos II

Curso 10/11

E, nom5re = n<mero de ,a nueva ,,amada sern* G$T-2APA = :% E, nom5re de ,a funci:n en e, prototipo ser -?et-mapa E, fic?ero ;ue inc,u=a ,a imp,ementaci:n se denominar -?et-mapa&c

(a imp,ementaci:n de ,a ,,amada tam5i7n se rea,i@ar por e, .estor de Procesos = se tendr en cuenta ,o si2uiente* E, nom5re de ,a funci:n ser do-?et-mapa = tam5i7n se inc,uir en e, fic?ero misc&c

&?ora =a ,o tenemos todo para ?acer este <,timo apartado* Entrar en MI%I9 con e, fic?ero prueba:&c en ,a ima2en de dis;uete. Imp,ementar ,a parte de esta ,,amada en e, espacio de usuario = compro5ar ;ue ;ueda incorporada a ,a 5i5,ioteca libc&a& CODoEF cuando se inc,u=a e, prototipo en e, fic?ero (usr(src(include(unistd&*> poner antes +include Gmini)(t@pe&*H para ;ue recono@ca e, tipo struct mem-map. Imp,ementar ,a parte de esta ,,amada en e, espacio de, .estor de Procesos compi,ando e insta,ando ,os cam5ios. .enerar una nueva ima2en de, n<c,eo = arrancar con dic?a ima2en. Situarse en e, directorio practica3 = compi,ar ,a prueba:&c. E6ecutar ,a prue5a tec,eando* &(a&out &notar ,os mapas de cada proceso = contrastar,os con ,a informaci:n ;ue nos suministra ,a tec,a > .

PUNTUA&I'N

E, apartado $ CUna primera ,,amada a, sistema* proceso+vivoD supone 0>- puntos> e, apartado # COtra nueva ,,amada a, sistema* memoria+procesoD aporta otros 0>/ puntos = e, <,timo apartado C%uestra <,tima ,,amada a, sistema* 2et+mapaD aporta ,os 0>3 puntos restantes. (os apartados de5en irse comp,etando de forma secuencia,. (a puntuaci:n tota, de esta prctica> por ,o tanto> es de 1>3 puntos.

P2ina - 1/