JEFE DE CATEDRA: Lic. Juan Pablo Moreno
SISTEMAS OPERATIVOS
JTP: Mgtr. Manuel Baquinzay
"Buddy System" es un algoritmo de administración de memoria utilizado en sistemas operativos para asignar y liberar bloques de memoria de tamaño fijo. Este algoritmo funciona dividiendo la memoria disponible en bloques de tamaño potencia de dos, y luego asignando estos bloques de memoria a los procesos que los soliciten. Si un proceso solicita un bloque de memoria, el algoritmo buscará el bloque disponible más cercano al tamaño solicitado. Si el bloque disponible es más grande que el tamaño solicitado, se dividirá en dos bloques del tamaño más cercano a una potencia de dos.
Cuando un proceso ya no necesita un bloque de memoria, el algoritmo verifica si el bloque adyacente es también un bloque libre del mismo tamaño, y si es así, los fusiona o compacta en un solo bloque más grande. Este proceso se conoce como "coalescencia de bloques" ó "compactacion de bloques".
MAR=1
KAVAL
BLOQUE OCUPADO
2
K
PA
PS
MAR=0
KAVAL
BLOQUE LIBRE
Inicialmente se cuenta con una memoria de 512 k, se debe atender los siguientes requerimientos
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 1 | P1 | Requiere 65 k |
| 2 | P2 | Requiere 30 k |
| 3 | P3 | Requiere 250 k |
| 4 | P1 | Se Libera |
| 5 | P5 | Requiere 7 k |
| 6 | P6 | Se Libera |
| 7 | P7 | Se Libera |
1000
1000
1002
1002
1004
1004
1006
1006
1008
1008
1010
1010
1012
1012
1014
1014
1016
1016
0
0
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1018
1018
0
9
0
PA
PS
MAR
KVAL
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 1 | P1 | Requiere 65 k |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
1000
1000
1002
1002
1004
1004
1006
1006
1008
1008
1010
1010
1012
1012
1014
1014
1016
1016
0
0
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1018
1018
0
9
0
PA
PS
MAR
KVAL
1000
1000
1002
1002
1004
1004
1006
1006
1008
1008
1010
1010
1012
1012
128
128
256
256
1018
1018
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1016
1016
0
8
256
PA
PS
MAR
KVAL
1014
1014
0
7
128
PA
PS
MAR
KVAL
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 2 | P2 | Requiere 30 k |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
1000
1000
1002
1002
1004
1004
1006
1006
1008
1008
1010
1010
1012
1012
128
128
256
256
1018
1018
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1016
1016
0
8
256
PA
PS
MAR
KVAL
1014
1014
0
7
128
PA
PS
MAR
KVAL
1000
1000
1002
160
160
192
192
1014
1014
256
256
1018
1018
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1016
1016
0
8
256
PA
PS
MAR
KVAL
1012
1012
0
6
192
PA
PS
MAR
KVAL
1010
1010
0
5
160
PA
PS
MAR
KVAL
1002
1004
1004
1006
1006
1008
1008
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 3 | P3 | Requiere 250k |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
1000
1000
160
160
192
192
256
256
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1016
1016
0
8
256
PA
PS
MAR
KVAL
1012
1012
0
6
192
PA
PS
MAR
KVAL
1010
1010
0
5
160
PA
PS
MAR
KVAL
1002
1002
1004
1004
1006
1006
1008
1008
1014
1014
1018
1018
1000
1000
160
160
192
192
1016
1016
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1012
1012
0
6
192
PA
PS
MAR
KVAL
1010
1010
0
5
160
PA
PS
MAR
KVAL
1002
1002
1004
1004
1006
1006
1008
1008
1014
10141018
1018
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 4 | P1 | Se Libera |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la direccion base del compañero del bloque donde se encuentra el P1 que se LIBERA
L = P + 2
L = 0 + 2
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
128
OR exclusivo
128
2
64
0
2
32
0
2
1
0
2
16
0
2
8
0
2
4
0
2
2
0
L = 0 + 2
2 = 2x2x2x2x2x2x2 = 128
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
1000
160
160
192
192
0
0
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1012
1012
0
6
192
PA
PS
MAR
KVAL
1010
1010
0
5
160
PA
PS
MAR
KVAL
1014
1014
0
7
0
PA
PS
MAR
KVAL
1000
1002
1002
1004
1004
1006
1006
1008
1008
1016
1016
1018
1018
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 5 | P4 | Requiere 7 k |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
1000
160
160
192
192
0
0
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1012
1012
0
6
192
PA
PS
MAR
KVAL
1010
1010
0
5
160
PA
PS
MAR
KVAL
1014
1014
0
7
0
PA
PS
MAR
KVAL
1000
1002
1002
1004
1004
1006
1006
1008
1008
1016
1016
1018
1018
1000
168
168
176
176
1010
1010
192
192
0
0
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1012
1012
0
6
192
PA
PS
MAR
KVAL
1008
1008
0
4
176
PA
PS
MAR
KVAL
1014
1014
0
7
0
PA
PS
MAR
KVAL
1006
1006
0
3
168
PA
PS
MAR
KVAL
1000
1002
1002
1004
1004
1016
1016
1018
1018
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 6 | P2 | Se Libera |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Text
situación actual de la memoria
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la direccion base del compañero del bloque donde se encuentra el P2 que se LIBERA
L = P + 2
L = 128 + 2
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
160
OR exclusivo
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero ocupado
1000
168
168
176
176
128
128
192
192
0
0
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1012
1012
0
6
192
PA
PS
MAR
KVAL
1008
1008
0
4
176
PA
PS
MAR
KVAL
1014
1014
0
7
0
PA
PS
MAR
KVAL
1006
1006
0
3
168
PA
PS
MAR
KVAL
1010
1010
0
5
128
PA
PS
MAR
KVAL
1000
1002
1002
1004
1004
1016
1016
1018
1018
| OPERACION | PROCESOS | INFORMACION |
|---|---|---|
| 7 | P4 | Se Libera |
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
situación actual de la memoria
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la dirección base del compañero del bloque donde se encuentra el P4 que se LIBERA
L = P + 2
L = 160 + 2
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
1
1
0
1
0
1
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
168
OR exclusivo
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero libre
chequear condición del compañero del nuevo bloque o particion formada
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la dirección base del compañero del nuevo bloque
L = P + 2
L = 160 + 2
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
1
0
1
1
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
176
OR exclusivo
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero libre
chequear condición del compañero del nuevo bloque o particion formada
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la dirección base del compañero del nuevo bloque
L = P + 2
L = 160 + 2
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
128
OR exclusivo
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero libre
chequear condición del compañero del nuevo bloque o particion formada
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la dirección base del compañero del nuevo bloque
L = P + 2
L = 128 + 2
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
192
OR exclusivo
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero libre
chequear condición del compañero del nuevo bloque o particion formada
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la dirección base del compañero del nuevo bloque
L = P + 2
L = 128 + 2
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
0
OR exclusivo
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero libre
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
1
2
4
8
16
32
64
128
256
512
2
0
2
10
2
11
2
12
1024
2048
4096
Cuando se libera un proceso se deben seguir los siguientes pasos
1°
calcular la dirección base del compañero del nuevo bloque
L = P + 2
L = 0 + 2
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
| 0+0 | 0 |
|---|---|
| 0+1 | 1 |
| 1+0 | 1 |
| 1+1 | 0 |
Direccion base del compañero
256
OR exclusivo
0
0
1
2°
Se debe analizar la memoria y chequear la situacion del bloque cuya direccion base se obtuvo en el paso 1°
Compañero OCUPADO
1000
0
0
1018
1018
1000
1002
1004
1006
1008
1010
1012
1014
1016
1018
0
1
2
3
4
5
6
7
8
9
1016
1016
0
8
0
PA
PS
MAR
KVAL
1000
1002
1002
1004
1004
1006
1006
1008
1008
1010
1010
1012
1012
1000
1000