UkrReferat.com
найбільша колекція україномовних рефератів

Всього в базі: 75855
останнє поновлення: 2016-12-09
за 7 днів додано 17

Реферати на українській
Реферати на російській
Українські підручники

$ Робота на замовлення
Реклама на сайті
Зворотній зв'язок

 

ПОШУК:   

реферати, курсові, дипломні:

Українські рефератиРусские рефератыКниги
НазваЯк Unix працює з пам'яттю(реферат)
Автор
РозділІнформатика, компютерні науки
ФорматWord Doc
Тип документуРеферат
Продивилось2264
Скачало334
Опис
ЗАКАЧКА
Замовити оригінальну роботу

Як Uniux працює з пам'яттю

 

Як же ядро працює з найдорожчим що в нього є, з пам'яттю. Перші спроби

розібратися з нальоту що і як ні до чого не привели. Не всі так просто

як хотілося б. Отовсюду стирчать кінці, начебто всі ясно, але як

зв'язати їх воєдино...

 

Виникла думка звернутися до минулого , щоб принаймні розібратися як усе

це розвивалося (версія 0.1). Це допомогло зрозуміти і сучасне ядро.

Надалі мова йтиме про ядра серії 2.2 про зміни в 2.4 буде повідомлено

особливо.

 

Не буду поглиблюватися в тонкості функціонування захищеного режиму

процесора про це написано цілі фоліанти. Подивимося тільки саму суть.

 

Отже, в овнове усього лежать сторінки пам'яті. У ядрі вони описуються

структурою mem_map_t.

 

typedef struct page {

 

/* these must be first (free area handling) */

 

struct page *next;

 

struct page *prev;

 

struct inode *inode;

 

unsigned long offset;

 

struct page *next_hash;

 

atomic_t count;

 

unsigned long flags; /* atomic flags, some possibly updated

asynchronously */

 

struct wait_queue *wait;

 

struct pa???????????????????????????????

 

Вже отут спостерігається наворороченность. Безліч усяких посилань. Усі

вони використовуються . Одна сторінка може знаходитися в різних списках

, наприклад і всписке сторінок у сторінковому кеше й у списку сторінок

стосовних до відображеного в пам'ять файлу (inode).У структурі

описывающей останній можна знайти і зворотне посилання,що дуже зручно.

 

Усі сторінки адресуються глобальним покажчиком mem_map

 

mem_map_t * mem_map

 

Адресація сторінок порисходит дуже хитро. Якщо раніш у структурі page

було окреме поле указывающее на фізичну адресу (map_nr), то тепер він

обчислюється

 

static inline unsigned long page_address(struct page * page)

 

{

 

return PAGE_OFFSET + PAGE_SIZE * (page - mem_map);

 

}

 

Вільні сторінки зберігаються в особливій структурі free_area

 

static struct free_area_struct free_area[NR_MEM_TYPES][NR_MEM_LISTS];

 

, де перше поле відповідає за тип області : Ядра, Користувача, DMA

і.т.д. И обробляються по дуже хитрому алгоритмі.

 

Сторінки поділяються на вільні безупинні обростити розміру 2 у ступені x

помноженої на розмір сторінки ( (2^x)*PAGE_SIZE ). Області одного

розміру лежать в одній області масиву.

 

....

 

|------

 

|Свободные Сторінки розміру PAGE_SIZE*4 ---> список вільних областей

 

|------

 

|Свободные Сторінки розміру PAGE_SIZE*2 ---> список вільних областей

 

|------

 

|Свободные Сторінки розміру PAGE_SIZE ---> список вільних областей

 

|------

 

Виділяє сторінку функція get_free_pages(order). Вона виділяє сторінки

складові область розміру PAGE_SIZE*(2^order). Шукається область

відповідного чи розміру більше. Якщо є тільки область більшого розміру

то вона поділяється на трохи маленьких і береться потрібний шматок. Якщо

вільних сторінок недостатньо, то деякі будуть скинуті в область

підкачування і процес выделенения почнеться знову.

 

Повертає сторінку функція free_pages(struct page, order). Вивільняє

сторінки починаються з page розміру PAGE_SIZE*(2^order). Область

повертається в масив вільних обрастей у відповідну позицію і після цього

-----> Page:

0 [1] [2] [3]

ЗАМОВИТИ ОРИГІНАЛЬНУ РОБОТУ