• Головные уборы магазины

    Мужские головные уборы в интернет магазине. Головные уборы магазины.

    scandifur.ru





Linux Kernel (Ядро линукса) (часть 2)


Удаление адресного пространства процесса

Когда процесс завершает работу, ядро вызывает функцию exit mm (), чтобы та освободила адресное пространство, принадлежащее процессу:mm_release(tsk, tsk->mm) ;
if (! (mm = tsk->mm) ) / kernel thread ? / return; down_r ea d (&mm- >mmap_s em) ;
Функция mm_release возобновляет выполнение всех процессов, спящих” в completion-структуре tsk->vfork_done В типичном случае соответствующая очередь ожидания непуста, только если завершающий процесс был создан с помощью системного вызова vfork
Если завершающийся процесс не является потоком ядра, функция exit mmo должна освободить дескриптор памяти и все структуры, имеющие отношение к процессу. Во-первых, она проверяет, установлен ли флаг mm->core_waiters.

Если установлен, значит, процесс выполняет дамп содержимого памяти в файле core. Чтобы избежать порчи данных в файле core, функция использует COmpletion-CTpyKTypbl mm->core_done И mm->core_startup_done ДЛЯ Сериализа- ции выполнения облегченных процессов, совместно использующих дескриптор памяти mm.

Затем функция увеличивает главный счетчик обращений дескриптора памяти, сбрасывает поле mm дескриптора процесса и переводит процессор в "ленивый" режим TLB atomic_inc (&mm->mm_count) ; spin_lock(tsk->alloc_lock); tsk->mm = NULL; up_read (&mm->map_sem) ; enter_lazy_tlb(mm, current); spin_unlock(tsk->alloc_lock); mmput (mm) ;
Наконец, вызывается функция mmput (), которая освобождает локальную таблицу дескрипторов, дескрипторы областей памяти и Таблицы Страниц. Однако сам дескриптор памяти не освобождается, потому что функция exit mmo увеличила главный счетчик обращений. Дескриптор будет освобожден функцией finish task switcho, когда локальный процессор фактически прекратит выполнение данного процесса.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть другие прерывания того же типа, и другие процессоры могут приступить к их обработке. Без спин-блокировки к главному дескриптору прерывания могли бы обратиться сразу несколько процессоров. Как мы...

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...