UTNianos

Versión completa: [CONSULTA] Final Sistemas Operativos 31/07/2012
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola chicos, posteo este final para ver sí alguno me puede dar una mano con el ejercicio número 2 de la práctica.
No entiendo como hace para llegar de una dirección lógica a física utilizando segmentación, por lo tanto, no puedo deducir como obtiene los datos del proceso. No sé como hacer para sacar el límite del segmento cero que será el mismo que el comienzo del segmento uno.
Por otro lado, el límite del segmento 2 será FFFF dado que es la última dirección física, pero todo lo demás no sé como obtenerlo.

Alguien me da una mano?

Abrazo!
Buenas, fijate que traduciendo la primera direccion y sabiendo que es el segmento 1 obtenes el tamaño del offset y la direccion. Despues el resto del ejercicio es restarle el offset a la direccion fisica para obtener la base del segmento.
Adro, gracias por la ayuda pero la verdad es que no estoy entendiendo para nada bien el tema lo cual me da mucha bronca.
1)Se asume que todos los segmentos tienen la misma longitud? Si son fijos, como se cuantos segmentos tengo y cual es la longitud de los mismos?
2)Apunta a que me queda una tabla donde indique la base y el límite del segmento 0 , 1 y 2 mas alla que el 0 y el 1 esten contiguos?
3)La traducción de direccion logica a fisica no entiendo como la hace, porque si tengo la direccion
200Ah en hexadecimal, en binario es 0010 0000 0000 1010 , los primeros 4 bits que son los mas significativos me hacen referencia a que el segmento es el numero 2, no entiendo porque entonces dice que hace referencia al segmento numero 1, eso por empezar.
Y una vez que obtengo el desplazamiento que a mi me da 10 a que direccion fisica se lo tengo que sumar?

con el resto de las direcciones logicas que me dan la direccion fisica y a eso le deberia sumar el offset que es lo que me indica a mi en que segmento estoy parado?

Perdon por hacer tantas preguntas pero por mas que lo lea, nunca hice un ejercicio de esto en el libro no hay y no se de donde obtener mas informacion, en la cursada nunca me dieron un solo ejercicio de esto.

Espero que me puedas ayudar a entenderlo y resolverlo como pueda.

Gracias
Buenas, los segmentos no tienen porque tener el mismo tamaño. Pero si sus direcciones. Esto quiere decir que si identificas cuantos bits usas para el segmento y cuantos para el offset, podes hacer las conversiones. No se porque tomaste que los 4 bits mas significativos son los del numero de segmento...

Pensa que 0010 0000 0000 1010 apunta al segmento 1. Fijate si eso te ayuda a deducir cuantos bits se usan para cada cosa...
Los 4 bits más significativos son los del numero de segmento lo extraje del libro de stallings..
Esta bien decir que sí tengo 0010 0000 0000 1010 los primeros 4 bits o sea "0010" significa 2^1=2º posicion
La primera posición apunta al segmento 0
La segunda posición apunta al segmento 1 ?

A partir de ahi me quedarían 12 bits para el offset.. Es decir que 2^4 x 2^12 = 64 kb . Tendría 16 segmentos de 4096 bytes.
Con esos 12 bits saco el offset de la primer dirección lógica que sería: 0000 0000 1010 en binario , 10 en decimal.
Hasta acá esta bien? Eso significaría que el primer segmento empieza en la posición 10 en decimal?
Esos 10 en decimal, se lo tengo que restar a la direccion fisica en decimal que me dan para hallar la base de los 3 segmentos?
No, no. Tendria que leer ese parrafo en particular, para ver que no sea un ejemplo o una implementacion particular. En principio podrias usar mas o menos bits para el numero de segmento y para el offset.

En este caso si miras el 0010....., la unica forma de que eso sea el segmento 1 es que hagas el corte en 001|0...
Entonces los tres primeros bits son para el segmento y el resto para el offset. Restando los offsets (acordate que en ambas direcciones siempre coinciden) vas a obtener la base de los segmentos ;)
Bueno finalmente lo hice, decime si esta bien por favor y gracias por ayudarme hasta aca.

1º dato: Direccion logica 200A h que referencia al primer segmento. De aca deduzco que los primeros 3 bits son para el numero de segmento, y los 13 bits restantes para el offset.
2º dato: Direccion logica 000E h => numero de segmento 0 y direccion 14 en decimal para el offset
Direccion fisica 0FAF h => 4015 en decimal, siendo el limite del segmento 0. Limite - Offset = Base ; 4015 - 14 = 4001
3º dato: Direccion logica 4077 h => numero de segmento 2 y direccion 119 en decimal para el offset.
Direccion fisica FFF7 h => 65527 en decimal, siendo el limite del segmento 2. Limite - offset = Base ; 65527 - 119 = 65408
4º dato: Direccion logica 201E h => numero de segmento 1 y direccion 30 en decimal para el offset
Dirrecion fisica 0FFF h => 4095 en decimal, siendo el limite del segmento 1. Limite - offset = Base ; 4095 - 30 = 4065
5º dato: La direccion logica 201F h produciria un segmentatation fauly. En decimal me da 31. Significa que estara entre el segmento 0 y 1 y no hay ningun segmento por eso da un fallo. Provocando fragmentacion externa, lo cual me sirve en el punto C.
6º dato: Una escritura sobre la direccion logica 200C h produciria una interrupcion por modo de acceso invalido.
Esta direccion hace referencia al segmento 1, entonces de aca deduzco el punto b que dice cual sea posiblemente el segmento de codigo, y yo responderia el 1, porque es donde esta el codigo, el cual no puedo acceder para escribirlo.

Resumiendo el punto A:
Segmento - Base - Limite
0 - 4001 - 4015
1 - 4065 - 4095
2 - 65408 - 65527

Corregime Adro, ruego a Dios que este bien sino me la corto XD jaja
No se cuando da en decimal, tengo los resultados en hexa en la cabeza. Pero si el 0 y el 1 son contiguos, alguna cuenta te dio mal

Igual la idea era esa
Adro, el enunciado dice "Los segmentos 0 y 1 están cargados en forma adyacente en la memoria". Eso que significa ? Adyacente es lo mismo que contiguo ? Yo lo que entendi por adyacente es que esta uno seguido del otro pero en el medio hay fragmentacion externa. Por eso el limite del segmento 0 es 4015 y la base del segmento 1 es 4065, y entre 4015 y 4065 hay fragmentacion externa.
Si los segmentos estarian contiguos, si el 0 termina en la posicion 4015 en decimal, el 1 no empezaria en la 4016 ?
URLs de referencia