Войти
ПрограммированиеФорумОбщее

[C]Расчитать размер битовой карты

#0
16:23, 11 окт. 2015

В общем, пишу лабораторную по операционным системам. Надо с помощью битовой карты отслеживать какие байты заняты, а какие - свободны.
По условию есть массив размера N, который условно говоря мы считаем оперативной памятью. Сколько байт нужно выделить под битовую карту и сколько памяти останется?

Сначала я наивно делал: <MEMORY_SIZE>*<BITS_PER_BYTE>/8.0, но тогда всё равно выделятся лишние байты... Тобишь есть, допустим, 256 байт оперативы, а в вычислениях считается размер битовой карты ДЛЯ 256 БАЙТ....

Кое-где вычитывал следующее: "ОС выделяет соответствующий массив данных размера (<размер-памяти> / <размер-блока> + 7) / 8 байт, где каждый бит
соответствует одному блоку.", но смысла не понял


#1
16:25, 11 окт. 2015

Laynos
> <BITS_PER_BYTE>
(я хочу на байт давать два бита, чтобы можно было отследить начало и конец выделения каких-то блоков (01 и 10 соответственно))

#2
16:25, 11 окт. 2015

Laynos
> но смысла не понял
Что непонятного в этой фразе?

#3
16:32, 11 окт. 2015

-Eugene-
> Что непонятного в этой фразе?
(256/1 + 7)/8 = 32.875 байт.
32.875 * 8 = 263 бита. Тобишь эта карта будет хранить в себе биты под "саму себя", а этого не нужно

#4
16:40, 11 окт. 2015

Laynos
> 32.875 байт
Как ты себе представляешь хранение дробных байтов? Это целочисленное деление.

#5
16:42, 11 окт. 2015

-Eugene-
Само собой. Просто я объяснил суть проблемы.

#6
16:48, 11 окт. 2015

Laynos
Я не понимаю. Где она хранит биты под саму себя?
(256/1 + 7)/8 = 32 байта = 256 бит. По биту на каждый байт памяти.

#7
17:21, 11 окт. 2015

MEMORY_SIZE=x+y
y = x/(8*BITS_PER_BYTE)

x = доступно памяти для использование
y = размер под карту
реши систему и все

#8
18:31, 11 окт. 2015

Сделал так:

#define RAM_SIZE 256
#define BITS_PER_BYTE 2
#define AVAILABLE_MEMORY int(ceil((RAM_SIZE*8*BITS_PER_BYTE)/(9*BITS_PER_BYTE)))
#define BITMAP_SIZE RAM_SIZE - AVAILABLE_MEMORY
#define OFFSET BITMAP_SIZE

Всем спасибо за помощь

#9
18:33, 11 окт. 2015

А нет. С BITS_PER_BYTE наверное что-то не так. Оно сокращается

#10
18:34, 11 окт. 2015

MEMORY_SIZE=x+y
    y = x/(8*BITS_PER_BYTE)
    MEMORY_SIZE - x = x/(8*BITS_PER_BYTE)
    -x = x/(8*BITS_PER_BYTE) - MEMORY_SIZE
    (-x*9*BITS_PER_BYTE)/(8*BITS_PER_BYTE) = -MEMORY_SIZE
    -x = -MEMORY_SIZE/((9*BITS_PER_BYTE)/(8*BITS_PER_BYTE))
    x = (MEMORY_SIZE*8*BITS_PER_BYTE)/(9*BITS_PER_BYTE)

#11
19:14, 11 окт. 2015

Laynos
> -x = x/(8*BITS_PER_BYTE) - MEMORY_SIZE
>  (-x*9*BITS_PER_BYTE)/(8*BITS_PER_BYTE) = -MEMORY_SIZE
wtf

MEMORY_SIZE=x+y
y = x/(8*BITS_PER_BYTE)
MEMORY_SIZE=x+x/(8*BITS_PER_BYTE)
MEMORY_SIZE=x*(1+1/(8*BITS_PER_BYTE))
x=MEMORY_SIZE/(1+1/(8*BITS_PER_BYTE))

#12
19:26, 11 окт. 2015

ashujon
спасибо!
ashujon
> BITS_PER_BYTE
Получилось, вроде как, наоборот: BYTES_PER_BIT

#13
12:45, 12 окт. 2015

Laynos
> Сколько байт нужно выделить под битовую карту и сколько памяти останется?
или я ничего не понял или MEMORY_SIZE/BITS_PER_BYTE (будет небольшой оверхед без него никак)

Laynos
> Получилось, вроде как, наоборот: BYTES_PER_BIT
и сколько нонче байт в одном бите?

ПрограммированиеФорумОбщее

Тема в архиве.