WikiDer > Блок управления памятью
А блок управления памятью (MMU), иногда называемый блок управления выгружаемой памятью (PMMU), это компьютерное железо единица, имеющая все объем памяти ссылки прошли через себя, в первую очередь выполняя перевод адреса виртуальной памяти к физические адреса.
MMU эффективно выполняет виртуальная память управление, обработка одновременно защита памяти, тайник контроль автобус арбитраж и в более простых компьютерных архитектурах (особенно 8 бит системы), переключение банка.
Обзор
Современные MMU обычно разделяют виртуальные адресное пространство (диапазон адресов, используемых процессором) в страницы, каждый из которых имеет размер, равный степени двойки, обычно несколько килобайты, но они могут быть намного больше. Нижние биты адреса (смещение внутри страницы) остаются неизменными. Старшие биты адреса - это номера виртуальных страниц.[2]
Записи в таблице страниц
Большинство MMU используют таблицу элементов в памяти, которая называется "таблица страниц", содержащий один"запись в таблице страниц"(PTE) на страницу, чтобы сопоставить виртуальные номера страниц с номерами физических страниц в основной памяти. Ассоциативный кеш PTE называется резервный буфер перевода (TLB) и используется, чтобы избежать необходимости обращаться к основной памяти каждый раз, когда отображается виртуальный адрес. Другие MMU могут иметь частный массив памяти[3] или регистры, содержащие набор записей таблицы страниц. Номер физической страницы в сочетании со смещением страницы дает полный физический адрес.[2]
PTE также может включать информацию о том, была ли страница записана в ("грязный немного"), когда он использовался последний раз (" доступный бит "для наименее недавно использованный (LRU) алгоритм замены страницы), какие процессы (пользовательский режим или режим супервизора) может читать и писать, и должен ли он быть кешированный.
Иногда PTE запрещает доступ к виртуальной странице, возможно, из-за отсутствия физического оперативная память был размещен на этой виртуальной странице. В этом случае MMU сигнализирует ошибка страницы к процессору. В Операционная система (ОС) затем обрабатывает ситуацию, возможно, пытаясь найти запасной кадр баран и настроить новый PTE, чтобы сопоставить его с запрошенным виртуальным адресом. Если нет свободной оперативной памяти, может потребоваться выбрать существующую страницу (известную как «жертва»), используя некоторую замену. алгоритм, и сохраните его на диск (процесс под названием "пейджинг"). Для некоторых MMU также может быть нехватка PTE, и в этом случае ОС должна будет освободить один для нового сопоставления.[2]
MMU также может создавать условия ошибки незаконного доступа или неверные ошибки страницы при незаконном или несуществующем доступе к памяти, соответственно, что приводит к ошибка сегментации или ошибка шины условия при обработке операционной системой.
Преимущества
В некоторых случаях ошибка страницы может указывать на программная ошибка, что можно предотвратить, используя защита памяти как одно из ключевых преимуществ MMU: операционная система может использовать его для защиты от ошибочных программ, запрещая доступ к памяти, к которой конкретная программа не должна иметь доступа. Обычно операционная система назначает каждой программе собственное виртуальное адресное пространство.[2]
MMU также решает проблему фрагментация памяти. После того, как блоки памяти выделены и освобождены, свободная память может стать фрагментированной (прерывистой), так что самый большой непрерывный блок свободной памяти может быть намного меньше, чем общий объем. С помощью виртуальной памяти непрерывный диапазон виртуальных адресов может быть сопоставлен с несколькими несмежными блоками физической памяти; это несмежное распределение - одно из преимуществ пейджинг.[2]
В некоторые ранние микропроцессор дизайнов, управление памятью осуществлялось отдельным Интегральная схема такой как Технология СБИС VI475 (1986), Motorola 68851 (1984) используется с Motorola 68020 ЦП в Macintosh II, или Z8015 (1985)[4] используется с Зилог Z8000 семейство процессоров. Более поздние микропроцессоры (такие как Motorola 68030 и Зилог Z280) разместил MMU вместе с CPU на той же интегральной схеме, что и Intel 80286 и позже x86 микропроцессоры.
Хотя в этой статье основное внимание уделяется современным MMU, обычно основанным на страницах, ранние системы использовали аналогичную концепцию для базовая адресация что в дальнейшем превратилось в сегментация. Иногда они также присутствуют на современных архитектурах. В архитектура x86 обеспечил сегментацию, а не разбиение на страницы, в 80286, и обеспечивает как разбиение на страницы, так и сегментацию в 80386 и более поздние версии процессоров (хотя использование сегментации недоступно в 64-битных операциях).
Примеры
Большинство современных систем делят память на страницы, которые 4-64 КБ по размеру, часто с возможностью использования так называемых огромных страниц 2 МБ или 1 ГБ по размеру (часто возможны оба варианта). Переводы страниц кешируются в резервный буфер перевода (TLB). Некоторые системы, в основном старые RISC конструкции ловушка в ОС, когда перевод страницы не найден в TLB. В большинстве систем используется аппаратный обходчик деревьев. Большинство систем позволяют отключать MMU, но некоторые отключают MMU при захвате кода ОС.
VAX
VAX страницы имеют размер 512 байт, что очень мало. ОС может обрабатывать несколько страниц, как если бы они были одной большой страницей. Например, Linux на VAX группирует восемь страниц вместе. Таким образом, система рассматривается как имеющая 4 КБ страниц. VAX делит память на четыре области фиксированного назначения, каждая 1 ГБ по размеру. Они есть:
- P0 пространство
- Используется для универсальной памяти для каждого процесса, такой как кучи.
- Пространство P1
- (Или контрольное пространство), которое также относится к каждому процессу и обычно используется для руководителя, руководителя, ядро, Пользователь стеки и другие структуры управления процессами, управляемые операционной системой.
- S0 пространство
- (Или системное пространство), которое является глобальным для всех процессов и хранит код и данные операционной системы, независимо от того, выгружены они или нет, включая таблицы.
- S1 пространство
- Который не используется и "Зарезервирован для Цифровой".
Таблицы страниц представляют собой большие линейные массивы. Обычно это было бы очень расточительно, если адреса используются на обоих концах возможного диапазона, но таблица страниц для приложений сама хранится в выгружаемой памяти ядра. Таким образом, получается двухуровневая дерево, позволяя приложениям иметь разреженную структуру памяти, не тратя много места на неиспользуемые записи таблицы страниц. VAX MMU отличается отсутствием доступный бит. Операционные системы, реализующие разбиение по страницам, должны найти способ имитировать доступный бит, если они хотят работать эффективно. Обычно ОС будет периодически отключать отображение страниц, чтобы можно было использовать ошибки отсутствия страницы, чтобы позволить ОС установить доступный бит.
РУКА
ARM архитектурапроцессоры приложений на основе реализуют MMU, определенный архитектурой системы виртуальной памяти ARM. Текущая архитектура определяет PTE для описания 4 КБ и 64 КБ страницы, 1 МБ разделы и 16 МБ супер-разделы; устаревшие версии также определили 1 КБ крошечная страница. ARM использует двухуровневую таблицу страниц при использовании 4 КБ и 64 КБ страниц, или просто одноуровневой таблицы страниц для 1 МБ разделы и 16 МБ разделы.
Обновления TLB выполняются автоматически аппаратными средствами перемещения таблицы страниц. PTE включают разрешение на чтение / запись на основе привилегий, информацию о кэшируемости, Бит NX, и незащищенный бит.[5]
IBM System / 360 Model 67, IBM System / 370 и последующие
В IBM System / 360 Модель 67, который был представлен в августе 1965 года, включал MMU, называемый блоком динамической трансляции адресов (DAT).[6][7] Он имеет необычную функцию хранения используемых и грязных битов вне таблицы страниц (вместе с четырьмя битами ключ защиты для всех процессоров S / 360). Они относятся к физической памяти, а не к виртуальной памяти, и доступ к ним осуществляется с помощью специальных инструкций.[7] Это сокращает накладные расходы для ОС, которой в противном случае потребовалось бы распространять используемые и грязные биты из таблиц страниц в более физически ориентированную структуру данных. Это делает Виртуализация на уровне ОС, позже названный паравиртуализация, Полегче.
Начиная с августа 1972 г. IBM System / 370 имеет аналогичный MMU, хотя изначально он поддерживал только 24-битное виртуальное адресное пространство, а не 32-битное виртуальное адресное пространство System / 360 Model 67. Он также хранит используемые и грязные биты вне таблицы страниц. В начале 1983 г. архитектура System / 370-XA расширила виртуальное адресное пространство до 31 бита, а в 2000 г. 64-битный z / Архитектура был представлен, с расширением адресного пространства до 64 бит; те продолжают хранить использованные и грязные биты вне таблицы страниц.
DEC Alpha
В DEC Alpha процессор делит память на 8 КБ страниц. После промаха TLB низкоуровневый прошивка машинный код (здесь называется PALcode) просматривает трехуровневую таблицу страниц с древовидной структурой. Адреса разбиты следующим образом: 21 бит не используется, 10 бит для индексации корневого уровня дерева, 10 бит для индексации среднего уровня дерева, 10 бит для индексации конечного уровня дерева и 13 бит, которые проходят через на физический адрес без изменений. Поддерживаются полные биты разрешений на чтение / запись / выполнение.
MIPS
В Архитектура MIPS поддерживает от одной до 64 записей в TLB. Количество записей TLB настраивается при конфигурации ЦП перед синтезом. Записи TLB двойные. Каждая запись TLB сопоставляет номер виртуальной страницы (VPN2) с одним из двух номеров кадров страницы (PFN0 или PFN1) в зависимости от младшего бита виртуального адреса, который не является частью страницы. маска. Этот бит и биты маски страницы не хранятся в VPN2. Каждая запись TLB имеет собственный размер страницы, который может быть любым значением от 1 КБ к 256 МБ кратно четырем. Каждый PFN в записи TLB имеет атрибут кэширования, грязный и действительный бит состояния. VPN2 имеет глобальный бит состояния и идентификатор, назначенный ОС, который участвует в сопоставлении записи TLB виртуального адреса, если глобальный бит состояния установлен в ноль. PFN хранит физический адрес без битов маски страницы.
Исключение пополнения TLB генерируется, когда в TLB нет записей, соответствующих отображенному виртуальному адресу. Исключение недопустимого TLB генерируется, когда есть совпадение, но запись помечена как недопустимая. Измененное исключение TLB генерируется, когда инструкция сохранения ссылается на отображаемый адрес, а грязный статус соответствующей записи не установлен. Если при обработке исключения TLB возникает исключение TLB, исключение TLB с двойной ошибкой, оно отправляется на собственный обработчик исключений.
MIPS32 и MIPS32r2 поддерживают 32 бита виртуального адресного пространства и до 36 бит физического адресного пространства. MIPS64 поддерживает до 64 бит виртуального адресного пространства и до 59 бит физического адресного пространства.
Вс 1
Оригинал Вс 1 это одноплатный компьютер построенный вокруг Motorola 68000 микропроцессор и представленный в 1982 году. Он включает в себя оригинальный блок управления памятью Sun 1, который обеспечивает преобразование адресов, защиту памяти, совместное использование памяти и распределение памяти для нескольких процессов, запущенных на ЦП. Полный доступ ЦП к частной встроенной ОЗУ, внешней Multibus память, бортовая Ввод / вывод а ввод / вывод Multibus работает через MMU, где трансляция адресов и защита выполняются единообразно. MMU аппаратно реализован на плате ЦП.
MMU состоит из регистра контекста, сегмент карта и карта страницы. Виртуальные адреса ЦП преобразуются в промежуточные адреса картой сегментов, которые, в свою очередь, преобразуются в физические адреса картой страниц. Размер страницы 2 КБ а размер сегмента 32 КБ что дает 16 страниц на сегмент. Одновременно можно отображать до 16 контекстов. Максимальное логическое адресное пространство для контекста составляет 1024 страницы или 2 МБ. Максимальный физический адрес, который может отображаться одновременно, также 2 МБ.
Регистр контекста важен в многозадачной операционной системе, поскольку он позволяет процессору переключаться между процессами без перезагрузки всей информации о состоянии преобразования. 4-битный регистр контекста может переключаться между 16 разделами карты сегментов под управлением супервизора, что позволяет отображать 16 контекстов одновременно. Каждый контекст имеет собственное виртуальное адресное пространство. Совместное использование виртуального адресного пространства и межконтекстные коммуникации могут быть обеспечены записью одних и тех же значений в карты сегментов или страниц разных контекстов. Дополнительные контексты можно обрабатывать, рассматривая карту сегментов как кеш контекста и заменяя устаревшие контексты на наименее недавно использованные.
Регистр контекста не делает различий между состояниями пользователя и супервизора. Прерывания и прерывания не переключают контексты, что требует, чтобы все допустимые векторы прерываний всегда отображались на странице 0 контекста, а также в допустимый стек супервизора.[8]
PowerPC
В PowerPC Страницы G1, G2, G3 и G4 обычно 4 КБ. После промаха TLB стандартный MMU PowerPC начинает два одновременных поиска. Один поиск пытается сопоставить адрес с одним из четырех или восьми регистров трансляции адреса блока данных (DBAT) или четырех или восьми регистров трансляции адреса блока инструкций (IBAT), в зависимости от ситуации. Регистры BAT могут отображать линейные блоки памяти размером до 256 МБ, и обычно используются ОС для отображения больших частей адресного пространства для собственного использования ядром ОС. Если поиск BAT завершается успешно, другой поиск останавливается и игнорируется.
Другой поиск, не поддерживаемый напрямую всеми процессорами в этом семействе, осуществляется через так называемый "перевернутая таблица страниц, "который действует как хешированное расширение TLB вне кристалла. Сначала верхние четыре бита адреса используются для выбора одного из 16 сегмент регистры. Затем 24 бита из сегментного регистра заменяют эти четыре бита, создавая 52-битный адрес. Использование сегментных регистров позволяет нескольким процессам совместно использовать один и тот же хеш-таблица.
52-битный адрес хешируется, а затем используется в качестве индекса во внешней таблице. Там группа записей таблицы на восьми страницах просматривается на предмет соответствия. Если совпадений нет из-за чрезмерного хеш-коллизии, процессор пытается еще раз с немного другим хеш-функция. Если это тоже не удается, ЦП переходит в ОС (с отключенным MMU), чтобы проблема могла быть решена. ОС необходимо удалить запись из хеш-таблицы, чтобы освободить место для новой записи. ОС может сгенерировать новую запись из более нормальной древовидной таблицы страниц или из структур данных для каждого отображения, которые, вероятно, будут медленнее и эффективнее по пространству. Поддержка для не исполнять управление находится в сегментных регистрах, что приводит к 256 МБ детализация.
Основная проблема с этим дизайном - плохой местонахождение тайника вызвано хеш-функцией. В древовидном дизайне этого избегают, размещая записи таблицы страниц для соседних страниц в соседних местах. Операционная система, работающая на PowerPC, может уменьшить размер хеш-таблицы, чтобы уменьшить эту проблему.
Также несколько медленно удаляются записи таблицы страниц процесса. ОС может избежать повторного использования значений сегментов, чтобы отложить решение этой проблемы, или она может решить потерять память, связанную с хэш-таблицами для каждого процесса. Микросхемы G1 не ищут записи в таблице страниц, но они генерируют хэш, ожидая, что ОС будет искать стандартную хеш-таблицу с помощью программного обеспечения. ОС может писать в TLB. Чипы G2, G3 и ранние G4 используют оборудование для поиска в хэш-таблице. Последние чипы позволяют ОС выбирать любой метод. На чипах, которые делают это необязательным или не поддерживают его вообще, ОС может выбрать использование исключительно древовидной таблицы страниц.
IA-32 / x86
В x86 архитектура развивалась в течение очень долгого времени при сохранении полной совместимости программного обеспечения, даже для кода ОС. Таким образом, MMU чрезвычайно сложен с множеством различных возможных режимов работы. Нормальная работа традиционного 80386 CPU и его преемники (IA-32) описывается здесь.
ЦП в первую очередь делит память на 4 КБ страниц. Сегментные регистры, фундаментальные для старых 8088 и 80286 Конструкции MMU не используются в современных операционных системах, за одним важным исключением: доступ к нить-специфические данные для приложений или специфичные для ЦП данные для ядер ОС, что делается с явным использованием сегментных регистров FS и GS. Весь доступ к памяти включает в себя сегментный регистр, выбираемый в соответствии с выполняемым кодом. Сегментный регистр действует как индекс в таблице, который обеспечивает смещение, добавляемое к виртуальному адресу. За исключением случаев использования FS или GS, ОС гарантирует, что смещение будет нулевым.
После добавления смещения адрес маскируется, чтобы его длина не превышала 32 бита. Результат можно найти с помощью древовидной таблицы страниц, при этом биты адреса разделяются следующим образом: 10 бит для ветви дерева, 10 бит для листьев ветви и 12 младших битов непосредственно скопировал в результат. Некоторые операционные системы, например OpenBSD с этими W ^ X функция и Linux с Exec Shield или PaX патчи также могут ограничивать длину сегмента кода, как указано в регистре CS, чтобы запретить выполнение кода в изменяемых областях адресного пространства.
Незначительные изменения MMU, представленные в Pentium позволили очень большие 4 МБ страниц, пропуская нижний уровень дерева (остается 10 бит для индексации первого уровня иерархии страниц, а оставшиеся 10 + 12 бит напрямую копируются в результат). Незначительные изменения MMU, представленные в Pentium Pro представил расширение физического адреса (PAE), позволяющая напрямую копировать в результат 36-битные физические адреса с 2 + 9 + 9 битами для трехуровневых таблиц страниц и 12 младшими битами. Большие страницы (2 МБ) также доступны при пропуске нижнего уровня дерева (что приводит к 2 + 9 битам для двухуровневой иерархии таблиц, а оставшиеся 9 + 12 младших битов копируются напрямую). В дополнение таблица атрибутов страницы позволил указать кэшируемость путем поиска нескольких старших битов в небольшой таблице на процессоре.
Не выполнять Первоначально поддержка предоставлялась только для отдельных сегментов, что делало ее очень неудобной в использовании. Более поздние чипы x86 предоставляют бит неисполнения для каждой страницы в режиме PAE. В W ^ X, Exec Shield, и PaX описанные выше механизмы эмулируют постраничную поддержку неисполнения на машинах с процессорами x86, в которых отсутствует бит NX, путем установки длины сегмента кода с потерей производительности и уменьшением доступного адресного пространства.
x86-64
x86-64 это 64-битное расширение x86, которое почти полностью устраняет сегментацию в пользу плоская модель памяти используется почти всеми операционными системами для процессоров 386 или новее. В длинном режиме игнорируются все смещения сегментов, кроме сегментов FS и GS. При использовании с 4 КБ страниц, дерево таблицы страниц имеет четыре уровня вместо трех.
Виртуальные адреса делятся следующим образом: 16 битов не используются, по девять бит для четырех уровней дерева (всего 36 бит), а 12 младших битов напрямую копируются в результат. С участием 2 МБ страниц, есть только три уровня таблицы страниц, всего 27 бит, используемых при подкачке страниц, и 21 бит смещения. Некоторые новые процессоры также поддерживают 1 ГБ страница с двумя уровнями подкачки и 30 бит офсета.[9]
CPUID может использоваться, чтобы определить, 1 ГБ страницы поддерживаются. Во всех трех случаях 16 высших биты должны быть равны 48-му биту, или, другими словами, младшему 48 бит находятся знак расширен к старшим битам. Это сделано для обеспечения возможности расширения адресуемого диапазона в будущем без ущерба для обратной совместимости. На всех уровнях таблицы страниц запись в таблице страниц включает не исполнять немного.
Системы Unisys MCP (Burroughs B5000)
Эта секция может быть сбивает с толку или неясно читателям. (Сентябрь 2020) (Узнайте, как и когда удалить этот шаблон сообщения) |
В Берроуз B5000 с 1961 г. была первой коммерческой системой, поддерживающей виртуальную память (после Атлас), хотя у него нет MMU [10] Он обеспечивает две функции MMU - адреса виртуальной памяти и защиту памяти - с другим архитектурным подходом.
Во-первых, при отображении адресов виртуальной памяти вместо MMU MCP системы дескриптор-на основании. Каждому выделенному блоку памяти дается главный дескриптор со свойствами блока (т. Е. Размером, адресом и наличием в памяти). Когда делается запрос на доступ к блоку для чтения или записи, оборудование проверяет его присутствие через бит присутствия (pbit) в дескрипторе.
Бит 1 указывает на наличие блока. В этом случае доступ к блоку можно получить через физический адрес в дескрипторе. Если pbit равен нулю, для MCP (операционной системы) генерируется прерывание, чтобы обеспечить наличие блока. Если поле адреса равно нулю, это первый доступ к этому блоку, и он выделяется (бит инициализации). Если адресное поле не равно нулю, это дисковый адрес блока, который ранее был развернут, поэтому блок извлекается с диска, бит устанавливается в единицу, а адрес физической памяти обновляется, чтобы указывать на блок. в памяти (еще pbit). Это делает дескрипторы эквивалентными записи в таблице страниц в системе MMU. Производительность системы можно отслеживать по количеству битов. Начальные биты указывают на начальные распределения, но высокий уровень других битов указывает на то, что система может перегружаться.
Таким образом, все распределение памяти полностью автоматическое (одна из особенностей современных систем.[11]), и нет другого способа выделить блоки, кроме этого механизма. Нет таких звонков как маллок или dealloc, поскольку блоки памяти также автоматически удаляются. Схема также ленивый, поскольку блок не будет выделен, пока на него не будет ссылаться. Когда память почти заполнена, MCP проверяет рабочий набор, пробуя уплотнение (поскольку система сегментирована, а не выгружена на страницы), освобождая сегменты только для чтения (например, сегменты кода, которые могут быть восстановлены из их исходной копии) и, как в крайнем случае, выкатывание сегментов грязных данных на диск.
Другой способ, которым B5000 обеспечивает функцию MMU, - это защита. Поскольку все обращения осуществляются через дескриптор, аппаратное обеспечение может проверить, что все обращения находятся в установленных пределах, а в случае записи - что процесс имеет разрешение на запись. Система MCP по своей природе безопасна и, следовательно, не требует MMU для обеспечения такого уровня защиты памяти. Дескрипторы доступны только для чтения пользовательским процессам и могут обновляться только системой (аппаратным обеспечением или MCP). (Слова с тегом нечетного числа доступны только для чтения; дескрипторы имеют тег 5, а кодовые слова имеют тег 3.)
Блоки могут совместно использоваться процессами с помощью дескрипторов копирования в стеке процессов. Таким образом, некоторые процессы могут иметь разрешение на запись, а другие - нет. Сегмент кода доступен только для чтения, поэтому повторно используется и используется процессами. Дескрипторы копирования содержат 20-битное адресное поле, дающее индекс главного дескриптора в массиве главного дескриптора. Это также реализует очень эффективный и безопасный механизм IPC. Блоки можно легко перемещать, поскольку при изменении статуса блока обновляется только главный дескриптор.
Единственный другой аспект - это производительность: обеспечивают ли системы на основе MMU или без них более высокую производительность? Системы MCP могут быть реализованы поверх стандартного оборудования, у которого есть MMU (например, стандартный ПК). Даже если реализация системы каким-то образом использует MMU, это вообще не будет видно на уровне MCP.
Смотрите также
Рекомендации
- ^ Таненбаум, Эндрю С. (2009). Современные операционные системы. Река Аппер Сэдл (Нью-Джерси): Прентис-Холл. ISBN 978-0-13-600663-3.
- ^ а б c d е Фрэнк Уеда (2009). «Лекция 7: Управление памятью» (PDF). CSE 120: Принципы операционных систем. Калифорнийский университет в Сан-Диего. Получено 2013-12-04.
- ^ Spectra 70 70-46 Руководство по процессору (PDF). RCA. Март 1968 г. с. 4. Получено 15 августа, 2013.
- ^ "Сайт для поиска и загрузки электронных таблиц" (PDF). Ic-on-line.cn. Получено 2017-05-03.[постоянная мертвая ссылка]
- ^ «Справочное техническое руководство по Cortex-A8» (PDF). Infoventer.arm.com. Получено 2017-05-03.
- ^ "Архивы IBM: System / 360 Даты и характеристики". 03.ibm.com. Получено 2017-05-03.
- ^ а б «Функциональные характеристики IBM System / 360 Model 67, третье издание» (PDF). Февраль 1972 г. GA27-2719-2. Архивировано из оригинал (PDF) на 2012-03-14. Получено 2016-11-08.
- ^ Руководство пользователя платы Sun 68000, Sun Microsystems, Inc, февраль 1983 г., редакция B
- ^ "Руководство программиста по архитектуре AMD64, том 2: Системное программирование" (PDF). Март 2017 г.. Получено 2017-12-05.
- ^ Таненбаум, Эндрю С .; Гердер, Йоррит Н .; Бос, Герберт (май 2006 г.). «Можем ли мы сделать операционные системы надежными и безопасными?». Компьютер. 39 (5): 44–51. CiteSeerX 10.1.1.112.3028. Дои:10.1109 / MC.2006.156.
- ^ Дэниел Х. Х. Ингаллс (Август 1981 г.). «Принципы проектирования Smalltalk». Журнал Byte. Архивировано из оригинал на 2007-09-27.
Статья основана на материалах, взятых из Бесплатный онлайн-словарь по вычислительной технике до 1 ноября 2008 г. и зарегистрированы в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.