Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Linux Kernel 2.6...2340 
 Trees...1470 
 William Gropp...1422 
 Ethreal 3...1402 
 Ethreal 4...1384 
 C++ Patterns 3...1383 
 Httpd-> История Ap...1372 
 Максвелл 3...1371 
 Rodriguez 6...1369 
 Go Web ...1365 
 Robert Love 5...1365 
 Максвелл 5...1364 
 OS ->Intel Manual 1...1363 
 Ext4 FS...1362 
 K&R 1...1361 
 Kamran Husain...1360 
 Rubni-Corbet -> Глав...1359 
 Perl OOP...1357 
 Стивенс 9...1355 
 Erlang...1355 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org
Исходники Kernel 0.01 взяты мной с oldlinux.org .
Пожалуй , это первая публичная версия Linux , когда-либо выложенная Торвальдсом в интернет . Прародителем этой версии послужила другая операционная система - Minix . Особенность v. 0.01 в том , что она компактна и ее образ умещается на дискету. Архив исходников ядра версии 0.01 можно получить например тут (100 кб) .
В архитектуре ядра 0.01 имеется 2 типа таблицы дескрипторов :
1. LDT - локальная 2. GDT - глобальная
Если 2-й бит сегментного регистра равен нулю , то мы обращаемся к GDT , если нулю , то к LDT . Существуют специальные инструкции - LGDT and LLDT - для определения местоположения этих таблиц в памяти . Они должны быть выполнены перед началом любой программы , для того чтобы процессор знал местоположение обоих дескрипторных таблиц . У процессора есть 2 регистра для хранения базового адреса таблицы и ее размера .
Дескрипторные таблицы состоят из сегментных адресов . Размер одного сегментного адреса равен 8 байтам . В нем помимо самого адреса хранится информация о том , на чтение или на запись данный сегмент , хранится ли в этом сегменте код или данные . Размер одного сегмента равен 4 кб . LDT и GDT может быть создано произвольное количество , но в конкретный момент времени активной может быть только одна пара таких таблиц . Переключение между ними осуществляется с помощью все тех же LGDT/LLDT-инструкций .
Полностью адресация не исчерпывается этими 2-мя таблицами . Еще имеется paging-адресация ,которая дает возможность выделить 2^{32} = 4Gb памяти . Это осуществляется с помощью еще 2-х таблиц - paging directory и paging table.
Внешние устройства подсоединены к контоллеру прерываний - PIC или APIC . Когда внешнее устройство генерирует прерывание , контролер посылает сигнал , который вызывает вызов системной процедуры . Сигнал этот представляет из себя 1 байт . Существует еще одна таблица IDT - Interrupt Descriptor Table , которая содержит адреса этих самых стандартных прерывающих процедур . Она всегда заканчивается командой IRET .
Концепция многозадачности - одна из краеугольных в архитектуре 386 . Существует специальная таблица , в которой сохраняются значения всех регистров , а также доступных портов , в каждый момент времени . Но код для хранения этой информации должен написать программист . Эта таблица называется Task State Structure(TSS) . Каждый процесс должен иметь свою TSS , у которой должен быть уникальный идентификатор , включающий адрес и размер . Используется регистр (TR).
386 архитектура имеет 4 уровня привилегий : 0 , 1 , 2 , 3 . Еще это называется urrent Privilege Level - CPL. Нулевой имеет максимальные привилегии на выполнение , т.е. можем выполнять любые инструкции и обращаться к любым адресам памяти .
Ядро 0.01 использует только 2 уровня привилегий - 0 и 3 . Все селекторы и дескрипторы ядра имеют 2 бита 00 , а все пользовательские процессы имеют 2 бита 11 . К данным из нулевого уровня можно иметь доступ только с соответствующими привилегиями.
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье