Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Память пользовательского процесса




Физическая память

Распределение памяти.

Ниже представлена карта физической памяти перед тем, как будет выполнен любой процесс. Левый столбец представляет начальный адрес инструкции, отмеченные значения являются приблизительными. Средний столбец включает в себя название инструкции. Крайний правый столбец представляет имя соответствующей процедуры или переменной или комментарий входа.

0x110000 свободна memory_end или high_memory

 

mem_map mem_init()

 

inode_table inode_init()

 

ннформ. устройства device_init()+

 

0x100000 добав. pg_tables paging_init()

 

 

0x0A0000 не используется

 

0x060000 свободна

 

low_memory_start

 

0x006000 код ядра + данные

 

floppy_track_buffer

 

bad_pg_table занято page_fault_handlers для

bad_page уничтожения процесса, если он

находится вне памяти.

 

0x002000 pg0 первая таблица страниц в ядре

 

0x001000 swapper_pg_dir каталог страниц ядра

 

0x000000 нулевая страница

+ устройство, захватывающее память (main.c): profil_buffer, con_init, psaux_init, rd_init, scsi_dev_init. Заметьте, что не вся память помечена как FREE или RESERVRVED (mem_init).

Страницы, помеченные как RESERVED принадлежат ядру и никогда не освобождаются или переставляются.

0xc0000000 невидимое ядро не используется

начальный стек

место для расширения стека 4 страницы

0x60000000 стабильно записанные биьлиотеки

brk не используется

распределенная память

end_data не инициализированные данные

end_code инициализированные данные

0x00000000 текст

Данные управления памятью в таблице процессов

краткое описание некоторых данных, содержащихся в таблице процессов, которые используются для управления памятью:

Ограничения на память процесса: ulong start_code, end_code, end_data, brk, start_stack;

Определение нарушения страницы: ulong min_flt, maj_flt, cmin_flt, cmaj_flt;

Локальная таблица дескриптора: struct desc_struct ltd[32] представляет собой локальную таблицу дескриптора задачи.

rss количество резидентных страниц.

swappable: если - 0, тогда страницы процесса не замещаются.

kernel_stack_page: указатель на страницу, размещенную при распараллеливании.

saved_kernel_stack: V86 режим работы.

struct tss

Сегмент стека esp0 указатель на стек ядра (kernel_stack_page)
ss0 сегмент стека ядра (0х10)
esp1 = ss1 = esp2 = ss2 = 0
неиспользуемые привилегированные уровни.

Секторы сегмента: ds = es = fs = gs = ss = 0x17, cs = 0x0f все указатели на сегменты в текущем ltd[].

cr3: указывает на директорию страниц для данного процесса.

ltd: _LTD(n) селектор для LTD текущей задачи.

6.5 Инициализация памяти

В start_kernel (main.c) имеются 3 переменные, связанные с инициализацией памяти:

memory_start начинается от 1MB. Изменяется посредством инициализации устройства.

memory_end конец физической памяти: 8MB, 16MB и т.д.

low_memory_start конец кода и данных ядра, загружаемых первоначально.

Каждое устройство при инициализации по-своему берет memory_stsrt и возвращает измененное значение, если оно выделяет пространство начиная с memory_stsrt (просто захватывая его). paging_init() инициализирует таблицы страниц в swapper_pg_dir (начинающиеся с 0хс0000000), чтобы накрыть всю физическую память начиная с memory_start и кончая memory_end. В действительности первые 4МВ обрабатываются в startup_32 (head.s). memory_start увеличивается, если добавляется какая-либо новая page_tables. При пребывании по обращению по пустому указателю в ядре первая страница обнуляется.

В shed_init() ltd и tss дескрипторы задачи task[0] устанавливаются в GDT, и загружаются в TR и DTR (единственный случай, когда это делается явно). TRAP GATE (0х80) устанавливается для system_call(). Флаг вложенной задачи сбрасывается при подготовке к переходу в пользовательский режим. Таймер включается. task_struct для task[0] в полном объеме появляется в.

Далее с помощью mem_init() создается mem_map, чтобы отражать текущее использование физических страниц. Это состояние, которое отражается в карте физической памяти, описанной в предыдущем разделе.

Linux переходит в пользовательский режим посредством iret после сохранения в стеке ss, esp и т.п.

 

21. Процесс планирования осуществляется частью ОС - планировщиком. Он может принимать решения о выборе для исполнения нового процесса находящихся в состоянии готовность в следующих 4 случаях:

1. Когда процесс переводится из состояния исполнение в состояние завершил исполнение.

2. Когда процесс переводится из состояния исполнение в состояние ожидание.

3. Когда процесс переводится из состояния исполнение в состояние готовность (например, после прерывания от таймера).

4. Когда процесс переводится из состояния ожидание в состояние готовность (завершилась операция ввода-вывода или произошло другое событие).

В случаях 1 и 2 процесс, находившийся в состоянии исполнение не может дальше исполняться, и для выполнения необходимо выбрать новый процесс. В случаях 3 и 4 планирование может не проводиться, процесс, который исполнялся до прерывания, может продолжать свое выполнение после обработки прерывания. Если планирование осуществляется только в случаях 1 и 2, говорят, что имеет место невытесняющее (nonpreemptive) планирование. В противном случае говорят о вытесняющем (preemptive) планировании.




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 390; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.