2015-08-24 4 views
0

Итак, я делаю проект, который требует, чтобы я создал RAM-диск в MINIX. Вопрос заключается в следующем:Создайте пользовательский RAM-диск в MINIX

Your task is to implement your own RAM disk which can be used as a location to store data where fast access is required. It should have read and write permissions for everybody and must be 10MB in size.

Я изо всех сил, чтобы найти информацию по этой теме для MINIX, поэтому я пытался отрабатывать многочисленные другие учебные пособия, которые для дистрибутивах Linux.

Использование this учебника я сделал следующий MINIX:

mknod /dev/ram0 c 0 1 
chmod 777 /dev/ram0 

Тогда mkfs -b 10240 -i 2000 -B 1024 /dev/ram0 дает ошибку:

mkfs: /dev/ram0: number of blocks too large for device.

Это происходит даже тогда, когда я делаю параметр -b 1. Когда я печатаю mkfs /dev/ram0 с сообщением об ошибке:

mkfs: this device can't hold a filesystem.

В учебнике я вижу, как автор увеличивает размер ramdisk до 16 ГБ в файле grub.conf, но этот файл не находится в/etc.

ЛЮБАЯ помощь будет оценена, поскольку я изо всех сил пытаюсь найти информацию о MINIX в целом с такими задачами.

+0

Должны ли вы «реализовать свой собственный виртуальный диск» с вашим собственным кодом, или использовать то, что уже есть? Если вы не пишете свой собственный код, этот вопрос выходит за рамки стека переполнения. – Brad

+0

@Brad Они не указали. Было бы возможно реализовать это с помощью моего собственного кода, учитывая, что я занимаюсь модулем операционных систем (в университете) всего лишь месяц и начал использовать MINIX 2 недели назад. –

+0

Нет, это было бы невозможно, извините. Вы должны знать, как писать свои собственные модули ядра. – Brad

ответ

0

Я понял это:

В строке 43

/usr/src/include/minix/dmap.h

добавить #define FAST_DEV 6. Теперь у нас есть символ для представления несовершеннолетнего нашего нового устройства. Это просто помогает нам избежать магических чисел.

m_ioctl() в

/usr/src/drivers/memory/memory.c

жестко закодировано, чтобы получить сообщение и создать устройство RAM. Чтобы сделать это общее изменение RAM_DEV (просмотрите функцию, она находится там как параметр для некоторой функции) до m_ptr->DEVICE. RAM_DEV - младший номер устройства ОЗУ, а m_ptr->DEVICE - это номер второстепенного устройства, которое запрос хочет создать (это будет иметь смысл в то время). Кроме того, в строке 28 этого файла вам нужно увеличить значение NR_DEVS, чтобы программа могла создавать новое устройство, которое мы сейчас укажем. Затем вокруг линии 143 в функции m_transfer() имеется переключатель на m_device для футляра RAM_DEV, KMEM_DEV и BOOT_DEV, добавить case FAST_DEV под BOOT_DEV. Это позволит ОС передавать файлы на/из нашего нового устройства так же, как и для RAM_DEV.

В

/usr/src/servers/fs/main.c

вы увидите, что main() вызовы fs_init(), которые по очереди называют load_ram(). В load_ram() - это сообщение, которое получено и отправлено в m_ioctl().Чтобы создать сообщение для нашего нового устройства добавьте следующие строки в начале fucntion:

m_out.m_type = DEV_IOCTL; 
m_out.PROC_NR = FS_PROC_NR; 
m_out.DEVICE = FAST_DEV; /* minor of fast device, this is why we had to make m_ioctl() generic */ 
m_out.REQUEST = MIOCRAMSIZE; 
m_out.POSITION = 10485760 /* size of 10MB in bytes */ 
s = sendrec(MEM_PROCNR, &m_out); /* this sends the message */ 

Теперь перекомпилировать:

cd /usr/src 
make world 
make install 
and make all the directories that you worked in (just to be safe) 
then shutdown 

Создать быстрое устройство:

mknod /dev/fast b 1 6 

EDIT:

Уточнение для load_ram():

PRIVATE void load_ram(void) 
{ 
    register struct buf *bp, *bp1; 
    ... 
    ... 
    int s; 

    /* add the code here */ 
    m_out.m_type = DEV_IOCTL; 
    etc 
} 

Разъяснение для утверждения переключателя:

case RAM_DEV: 
case KMEM_DEV: 
case BOOT_DEV: 
case FAST_DEV: /* add this line */ 

 Смежные вопросы

  • Нет связанных вопросов^_^