Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.131.62] |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
shm, да никто не спорит с этим, всё нормально
|
Сообщ.
#17
,
|
|
|
В линуксе, где используемый компилятор умеет работать с несколькими разными областями памяти, регистры в области ввода-вывода тоже доступны таким способом.
|
Сообщ.
#18
,
|
|
|
amk, ты вообще понимаешь что такое физическая и виртуальная память? (я без трололо спрашиваю)
|
Сообщ.
#19
,
|
|
|
А при чем тут это? Когда переменная отмаплена в нормальную память, используются всем известный доступ в память, виртуальная память там используется прозрачно. А когда в область регистров ввода/вывода, используются команды in/out и виртуальная память оказывается ни при чем (хотя виртуализация регистров IO может использоваться, если платформа поддерживает)
|
Сообщ.
#20
,
|
|
|
я про этот пост
Цитата amk @ В линуксе, где используемый компилятор умеет работать с несколькими разными областями памяти, регистры в области ввода-вывода тоже доступны таким способом. суть в том память она и в африке память и без разницы какой компилятор используется. если регистры из физической памяти отмаплены на виртуальную, то проблем вообще никаких нет |
Сообщ.
#21
,
|
|
|
Цитата amk @ Когда переменная отмаплена в нормальную память, используются всем известный доступ в память, виртуальная память там используется прозрачно. А когда в область регистров ввода/вывода, используются команды in/out и виртуальная память оказывается ни при чем (хотя виртуализация регистров IO может использоваться, если платформа поддерживает) Порты ввода/вывода на память не отображаются. Есть порты ввода/вывода, с ними работа осуществляется командами in/out, их 65536 и в память они не отображаются. Вообще. Этого архитектура не поддерживает. Это как отдельное адресное пространство, абсолютно независимое. А есть Memory Mapped I/O - регистры устройств, отображённые в память. С ними работа происходит как с обычными переменными, простыми операциями записи/чтения. Какой из механизмов использует конкретное устройство зависит от того, как оно сделано. И разницы между разными ОС и разными компиляторами нет - это архитектурная особенность, под Windows Memory Mapped I/O из драйвера точно так же использовать можна. |
Сообщ.
#22
,
|
|
|
В gcc (для архитектуры ix86 и подобных) есть две отдельные логические области памяти.
Одна - обычная память, про которую ты говоришь, в которой хранятся программа и данные, и отображаются некоторые внешние устройства. Переменные по умолчанию размещаются в ней. Вторая - область устройств ввода вывода, памятью естественно не являющаяся, но позволяющая писать программу так, будто регистры тоже находятся в памяти. Для помещения "переменной" в эту область надо указать специальный атрибут, и обычно адрес. Аналог псевдомассива port[] в паскале или встроенных функций для работы с портами IO. Если в какой-то архитектуре есть отдельный набор команд для работы с еще какой-нибудь областью памяти то для нее будет сконфигурирована еще одна логическая область памяти. |
Сообщ.
#23
,
|
|
|
Цитата amk @ Вторая - область устройств ввода вывода, памятью естественно не являющаяся, но позволяющая писать программу так, будто регистры тоже находятся в памяти. Для помещения "переменной" в эту область надо указать специальный атрибут, и обычно адрес. Аналог псевдомассива port[] в паскале или встроенных функций для работы с портами IO. если область физической памяти отвечающая за регистры устройств, не отображена на виртуалную память, то ты хоть тресни, ты никак не сможешь получить к ней доступ (ну разве что в ring0 вручную подредактировать PDE/PTE и отобразить нужную физическую страницу на требуемую виртуальную) |
Сообщ.
#24
,
|
|
|
В системе команд i86 есть команды in/out, которые и используются для доступа к области ввода/вывода. И никакого отображения на память не нужно. Так что с этим проблем не возникает.
|
Сообщ.
#25
,
|
|
|
Цитата Ahilles @ если область физической памяти отвечающая за регистры устройств, не отображена на виртуалную память, то ты хоть тресни, ты никак не сможешь получить к ней доступ Если под виртуальной памятью подразумевается адресное пространство проца, то не им единым. Пространство ввода/вывода лежит совершенно отдельно и много устройств (в основном более древней архитектуры - типа таймера или контроллера прерываний) отображаются именно туда, и в адресном пространстве процессора их нету. Работа с такими устройствами возможна только через операции in/out (типа запись в порты, но на самом деле эти порты - и есть адрес, смещение по памяти в этом пространстве ввода-вывода), а прямыми операциями записи/чтения из памяти по адресу, как это делается почти со всеми современными девайсами, к таким устройствами не доступишься. Естественно, сейчас я подразумеваю x86 архитектуру. |
Сообщ.
#26
,
|
|
|
Есть ли хотя бы видение зачем разрабатываете эту ОС? Чем она будет выгодно отличаться от существующих? Какая у неё область применения?
А то у вас получится с напарником персональное Сколково, только вместо госбюджета/инвестфондов/etc будете проедать свои кровные... Вот будет ОС, вот будет фирма, вот на ней будем юзать эту ОС... А сейчас-то что у вас есть? Какой экспириенс уже был? Нет-нет, я не отговариваю - просто задаю вопросы из (возможно, неправильного) жизненного опыта. |
Сообщ.
#27
,
|
|
|
Mr.Delphist
Я боюсь, наши герои совсем разочаровались в нас - никто на проект бежать не хочет, никто не понимает, что это будет прорыв.... Так что скорее всего эти вопросы уйдут вникуда 8) |
Сообщ.
#28
,
|
|
|
Цитата amk @ В системе команд i86 есть команды in/out, которые и используются для доступа к области ввода/вывода. И никакого отображения на память не нужно. Так что с этим проблем не возникает. так воти надо говорить in/out, а не пудрить мозг фигнёй типа Цитата amk @ Вторая - область устройств ввода вывода, памятью естественно не являющаяся, но позволяющая писать программу так, будто регистры тоже находятся в памяти. Для помещения "переменной" в эту область надо указать специальный атрибут, и обычно адрес. Аналог псевдомассива port[] в паскале или встроенных функций для работы с портами IO. по сути это просто миникласс-обёртка вокруг команд in/out. и тут нет ничего особенного |
Сообщ.
#29
,
|
|
|
Цитата amk @ Вторая - область устройств ввода вывода, памятью естественно не являющаяся, но позволяющая писать программу так, будто регистры тоже находятся в памяти. Для помещения "переменной" в эту область надо указать специальный атрибут, и обычно адрес. Аналог псевдомассива port[] в паскале или встроенных функций для работы с портами IO. Можна кусок кода, или хотя бы название атрибута? Первый раз про такое слышу и в документации нет. Есть io.h с функциями inb/w/d outb/w/d, но это ведь совсем не то. Добавлено Цитата Ahilles @ по сути это просто миникласс-обёртка вокруг команд in/out. и тут нет ничего особенного Не может быть в чистом С никаких неявных обёрток, и если честно, я вообще сомневаюсь что то о чём говорит amk в |
Сообщ.
#30
,
|
|
|
Цитата Mr.Delphist @ Есть ли хотя бы видение зачем разрабатываете эту ОС? Чем она будет выгодно отличаться от существующих? Какая у неё область применения? это уже никому не интересно. а вот развести срачик на тему создания своей ОС ой как интересно и вкусно, ням, ням... |