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 
 Интервью 
 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
 Steve Pate 3...206 
 Part 4...192 
 Part 3...188 
 Стивенс 1...173 
 Secure Programming for Li...156 
 Stein-MacEachern-> Час...121 
 Perl + Apache...115 
 Kamran Husain...115 
 Trees...111 
 2.0-> Linux IP Networking...107 
 Go Web ...100 
 Ethreal 4...89 
 Intel 386...74 
 Mod_perl 1...68 
 K&R 2...65 
 Стивенс 4...64 
 Steve Pate 1...63 
 Ethreal 1...59 
 Gary V.Vaughan-> Libtool...58 
 ffmpeg->tutorial...55 
 
  01.04.2021 : 3078306+ посещений 

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

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

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