OSDev

для всех
Текущее время: 09 май 2024, 17:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 29 ноя 2011, 18:49 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Сегментная в реальном, линейная в защищённом особо не спутаешь, способы разные цель одна.
Реакция на прерывания у процессора это остановить задачи и выполнить обработчик прерывания.
Что нельзя было доработать, чтобы без остановки процессов а параллельно как то, тема то необходимая.
Что в защищённом режиме каждый определенный интервал времени все устройства проверять, это я не могу еще понять, в этом случае становится жалко бедный процессор, ему ни как не отдохнуть, мошьность падает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 29 ноя 2011, 19:23 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
В защищённом тоже сегментная адресация, просто её можно перевести в подобие линейной адресации. А поскольку обычно применяется ещё и страничная трансляция, то линейная адресация превращается в совершенно виртуальную.

Для того и нужно прерывание, чтобы не проверять устройства всё время, а только во время прерывания.

Без остановки процессов уже доработали, введением дополнительного ядра процессора, которое выполняется параллельно. Хотя обработка прерываний это в общем-то мизерная нагрузка на процессор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 29 ноя 2011, 22:25 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Станислав писал(а):
Что нельзя было доработать, чтобы без остановки процессов а параллельно как то, тема то необходимая.

Как ты себе это представляешь на одноядерном процессоре?

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 30 ноя 2011, 00:06 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Yoda писал(а):
Станислав писал(а):
Что нельзя было доработать, чтобы без остановки процессов а параллельно как то, тема то необходимая.

Как ты себе это представляешь на одноядерном процессоре?

Надо добавить, что иногда не нужно ни какой обработки устройства, а только прерывание само по-себе, дающее например интервал времени, либо уведомляющее о каком-то событии или происшествии (наподобии исключения).


Последний раз редактировалось Himik 30 ноя 2011, 00:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 30 ноя 2011, 00:12 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Yoda писал(а):
Станислав писал(а):
Что нельзя было доработать, чтобы без остановки процессов а параллельно как то, тема то необходимая.

Как ты себе это представляешь на одноядерном процессоре?


Ну не понимает человек, как процессор работает, а читать не хочет...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 06 дек 2011, 15:55 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Мне понравилась статья про прерывания в защищенном режиме
http://wasm.ru/article.php?article=ia32int
Я так понял, что функции вызываемые прерываниями записываем в idt, ну а процессор в защищенном режиме останавливается? А зацикливание нужно включать, или они итак вызавутся?
IDT:
dd 0,0 ; 0
dw syscall_handler, 08h, 1000111000000000b, 0 ; 1
dd 0,0 ; 2
dd 0,0 ; 3
dd 0,0 ; 4
dd 0,0 ; 5
dd 0,0 ; 6
dd 0,0 ; 7
dd 0,0 ; 8
dd 0,0 ; 9
dd 0,0 ; 10
dd 0,0 ; 11
dd 0,0 ; 12
dw exGP_handler, 08h, 1000111000000000b, 0 ; 13 #GP
dd 0,0 ; 14
dd 0,0 ; 15
dd 0,0 ; 16
dd 0,0 ; 17
dd 0,0 ; 18
dd 0,0 ; 19
dd 0,0 ; 20
dd 0,0 ; 21
dd 0,0 ; 22
dd 0,0 ; 23
dd 0,0 ; 24
dd 0,0 ; 25
dd 0,0 ; 26
dd 0,0 ; 27
dd 0,0 ; 28
dd 0,0 ; 29
dd 0,0 ; 30
dd 0,0 ; 31
dw int8_handler, 08h, 1000111000000000b, 0 ; IRQ 0 - системный таймер
dw int9_handler, 08h, 1000111000000000b, 0 ; IRQ 1 - клавиатура

IDT_size equ $-IDT
IDTR dw IDT_size-1
dd IDT


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 06 дек 2011, 18:55 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Станислав писал(а):
Я так понял, что функции вызываемые прерываниями записываем в idt, ну а процессор в защищенном режиме останавливается? А зацикливание нужно включать, или они итак вызавутся?

Да - обычно, если процессору нечего рассчитывать, то его останавливают командой HLT. В этом состоянии он не потребляет энергии. Но этого делать не обязательно - прерывание вызовется в любом случае. Важно лишь, чтобы был установлен флаг IF.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 07 дек 2011, 00:03 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Если не заморачиваться с оптимизацией и по скорости, и по энергопотреблению, то, когда процессору делать нечего, надо выполнять последовательность из двух команд:

Код:
Idle: hlt
      jmp  Idle


Жрать процессор продолжает, хотя и существенно меньше (это идеальный МОП-транзистор не потребляет энергии, если не переключается; в процессорах, понятное дело, транзисторы до идеала не дотягивают); из такого останова выходит при поступлении прерывания тоже очень быстро (поскольку всё положенное питание на него подаётся, а значит, не надо "раскачиваться").

Вот если важна экономичность, там вариантов уже побольше, причём технически они зависят от конкретной модели процессора и т.д. и т.п. Поэтому там уже пользуются услугами ACPI, поскольку он стандартизирует правила управления энергопотреблением для различного железа, в том числе для процессоров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 07 дек 2011, 12:35 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Мне понравилась статья про прерывания в защищенном режиме
А мне не очень. Шлюз для syscall'а нужно размещать выше входов 0-31. Причем лучше использовать trap-шлюз, а не int-шлюз. Нужно включить в таблицу все 16 входов (для PIC'а) обработчиков прерываний, даже если используются не все. Причем поставить обработчики-заглушки на неиспользуемые входы. Не нужно выполнять манипуляции с Local APIC'ом, если ты не собираешься его использовать. Код для запрета NMI и открытия адресной линии A20 тоже весьма сомнительный.

Теперь по коду:
- перенеси шлюз для syscall'а;
- используй хотя бы repeat/end repeat для описания идентичных шлюзов, раз не строишь таблицу динамически (кстати в fasm'е есть директива dq, т.е. можно писать просто dq 0);
- используй label или = вместо equ;
- если обработчик лежит во flat-сегменте выше отметки 64 кб (минус 1), указывай в шлюзе также и старшее слово адреса (смещения) обработчика;
- выровняй таблицу на 8-байтовую границу.

Для примера моя разметка (для PIC'а):
0-1Fh - исключения и NMI;
20h-2Fh - аппаратные прерывания;
30h-5Fh - резерв для аппаратных прерываний;
60h - syscall;
61h-0FFh - резерв.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 06:56 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Зря ругаете функцию 87h int15 вролне рабочая и код занимает нало места, загрузила мне картинку 640*480*4 и иконки 64*64*4
Я в загрузчике устанавливаю видеорежим, копирую 2мб в верхнюю память, перехожу в защищенный режим, перехожу на код со второго сектора там уже работаю в защищённом режиме с загруженной картинкой.
Использую int15, int10, int13, полезный биос оказался
Вот пример загрузки 2 мб в память с 1048576 (после первого мегобайта) секторов 64*64 начиная со 2
Кстати почему здесь используют буфер 1000h:0 1000h-это же сегмент, смешение 0? Он должен быть равным db 00,00,01h в
movedesc+18 (24битный адрес)? как его переделать на адрес 0:8400
mov bp,64 ; 2 мегабайта
Load_data: mov dl,80h
mov ah,42h ;номер функции
mov si,dap1 ;DS:SI segment:offset pointer to the DAP(Disk Address Packet)
int 13h ;в DS:SI указатель на нашу структуру Пакета Диского Адреса
jc error_bios_ext ;Проверка успешности:
add dword[dap1+8],64 ;Переходим на следующие сетора

mov si,movedesc
mov cx,16384 ;Колличество слов
mov ah,87h ;номер функции
int 15h
jc error_bios_ext

add dword[movedesc+26],32768 ;Переходим на следующий блок
dec bp
jnz Load_data



movedesc: db 16 dup (0)
dw 0FFFFh ;; source segment length in bytes (2*CX-1 or greater)
db 00,00,01h ;; 24-bit linear source address, low byte first
db 93h ;; source segment access rights (93h)
dw 0 ;; zero
dw 0FFFFh ;; destination segment length in bytes (2*CX-1 or greater)
db 00,00,10h ;; 24-bit linear destination address, low byte first
db 93h ;; destination segment access rights (93h)
db 18 dup (0) ;; zeros (used by BIOS)


dap1: db 16
db 0
dw 64
dw 0,1000h
dd 2,0


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB