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 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 Go Web ...603 
 2.0-> Linux IP Networking...353 
 Secure Programming for Li...294 
 2.6-> Kernel 2.6.17...226 
 William Gropp...222 
 Kamran Husain...221 
 Robbins 4...218 
 Advanced Bash Scripting G...211 
 Rodriguez 9...197 
 Rodriguez 6...195 
 Ethreal 1...193 
 UML 3...192 
 Стивенс 8...189 
 Daniel Bovet 2...188 
 Steve Pate 1...187 
 Steve Pate 3...186 
 Kamran Husain...184 
 Advanced Bash Scripting G...182 
 Rodriguez 8...179 
 Kernel Notes...176 
 
  01.03.2019 : 2682145 посещений 

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 . К данным из нулевого уровня можно иметь доступ только с соответствующими привилегиями.
Оставьте свой комментарий !

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

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