Чтобы помочь вам понять, что такое процесс, рассмотрим пример шеф-повара, готовящего торт. Для изготовления торта повару во-первых нужен повар (ЦП), во-вторых рецепт (программа) и сырье (входные данные), а сумма ряда действий по приготовлению торта с сырьем и есть процесс. Однажды шеф-повар готовил пирожные на задней кухне, когда услышал, как его сын плачет и бежит на заднюю кухню, говоря, что его ужалила пчела, шеф-повар положил инструменты в руке и записал текущий шаг (сохранить контекстную информацию), а затем достаньте буклет по оказанию первой помощи и следуйте инструкциям в нем, чтобы справиться с сыном (начать другой процесс).
Обзор процесса
Мы знаем, что файл — это абстракция устройства ввода-вывода, виртуальная память — это абстракция файла и основной памяти, набор инструкций — это абстракция ЦП,Процесс — это абстракция набора инструкций и виртуальной памяти.. Как показано ниже .
Логическое расположение процесса в памяти
Как видно из вышеизложенного, процесс включает в себя набор инструкций и виртуальную память. Мы фокусируемся на логическом расположении процесса в виртуальной памяти, которое включает в себя пользовательский стек, кучу, данные программы и программный код.Пользовательский стек растет сверху вниз, куча растет снизу вверх, а данные программы и код программы растут из исполняемого файла Файл загружается, и переписывание программного кода в ассемблерные инструкции аналогичноmovl、imul、addl等指令
. Как показано ниже
В это время ЦП выполняет инструкцию с адресом 304. Предполагая, что квант времени ЦП только что израсходован, необходимо выполнить переключение процесса.Перед переключением процесса необходимо защитить сайт, т. е. необходимо сохранить информацию о регистре, ПК, открытые файлы и адреса сегментов кода. , адрес данных, информацию о стеке и т. д., которые называютсяконтекст процесса. Когда операционная система переключится на процесс, сначала загрузите контекстную информацию процесса 2 в операционную систему, найдите ПК, а затем выполните его.
Блок управления технологическим процессом (PCB)
Контекстная информация процесса хранится в памяти в виде структуры данных, и эта структура данных является печатной платой. Структура данных, соответствующая плате в операционной системе Linux, — это task_struct, в которой хранится важная информация о процессе.
struct task_struct{
pid_t pid://进程号
long state;//状态
cputime_t utime,stime;//cpu在用户态和 核心态下执行的时间
struct files_struct *files;//打开的文件
struct mm_struct *mm;//进程使用的内存
...
}
состояние процесса
- Состояние процесса включает в себя новое состояние, состояние готовности, состояние ожидания, состояние выполнения, состояние выхода.
- Процесс: сначала процесс создается заново, а затем переходит в состояние готовности. В это время процесс не переходит в состояние выполнения, а ожидает планирования ЦП. Если он запланирован ЦП, он входит в состояние выполнения и когда квант времени заканчивается, процесс начинает работать, возвращается в состояние готовности, а при ожидании операции ввода-вывода переходит в состояние блокировки из состояния выполнения. Следует отметить, что только процесс в состоянии выполнения имеет ЦП, а процессы в состоянии готовности и состоянии ожидания находятся только в памяти, ожидая планирования ЦП, поэтомуПланирование ЦПочень ответственный процесс.
Планирование ЦП
Как описано выше,Планирование ЦП — это процесс, занимающий ЦП., которые можно разделить нанеупреждающийипревентивный. Невытесняющий означает, что после того, как планировщик назначает ЦП процессу, он продолжает работать до тех пор, пока процесс не завершится или не произойдет событие, и не может работать, пока ЦП не будет назначен другим процессам. Он подходит для систем пакетной обработки, прост и не требует дополнительных ресурсов системы. Упреждающий означает, что когда процесс выполняется, система может лишить ЦП других процессов на основе определенной политики. Принципы лишения включают в себя принцип приоритета, принцип приоритета конечного процесса и принцип кванта времени, которые применимы к интерактивным системам.
- стандарт оценки
- Справедливость: разумное распределение ЦП
- Время отклика: время от ввода пользователем до ответа
- Производительность: количество задач, выполненных в единицу времени.
- Но эти целипротиворечиеНапример: мы хотим, чтобы внешний процесс получил быстрый ответ, поэтому внутренний процесс не может получить быстрый ответ.
- Планирование в пакетных системах
- Первый пришел первый обслужен(справедливая, очередь FIFO, без вытеснения)
- сначала самая короткая работа(Среднее время ожидания системы самое короткое, но время выполнения каждой задачи нужно знать заранее)
- Политика интерактивного планирования
- Повернуть, каждому процессу назначается фиксированный квант времени, но определить длину кванта времени проблематично.Предполагая, что накладные расходы на переключение процесса составляют 1 мс, если квант времени слишком короткий, то много времени тратится впустую при переключении, например, квант времени 4мс, то 20% времени тратится на переключение, если квант времени слишком большой, то потери времени уменьшатся, но последнее часто ждет долго. например, если квант времени составляет 100 мс, потерянное время составляет 1%.Предполагая, что процессов 50, последний должен ждать 5 с.
- статический приоритет, назначьте приоритет каждому процессу, высокий приоритет будет выполняться первым, а низкий приоритет будет выполняться позже, но у этого метода есть определенные проблемы: процесс с низким приоритетом может умереть от голода, например, приоритет нового процесса Это выше, чем оригинал, что мне делать? Мы корректируем размер приоритета в соответствии с увеличением времени ожидания --- многоуровневая очередь обратной связи
- динамический приоритет---Многоуровневая очередь обратной связи, то есть приоритет процесса будет расти по мере роста времени ожидания.
межпроцессная синхронизация
Мы знаем, что принтер имеет кэш, называемый очередью печати.Как показано на рисунке ниже, очередь печати имеет 5 пробелов, что означает, что очередь печати может содержать до 5 файлов для печати.Процесс принтера является потребителем, а другие процессы для печати: Производитель, производитель постоянно помещает данные в очередь, например: A.java, B.doc и т. д.
-
Критическая секция: требуется для нескольких процессоввзаимоисключающийОбщие ресурсы могут быть переменными, таблицами, файлами и т. д., например, очередь печати является общим ресурсом.
-
Когда производитель заполняет очередь, ему нужно дождаться потребителя; если потребитель распечатал все файлы, ему нужно дождаться производителя, который является межпроцесснымпроблема с синхронизацией.
- Природа межпроцессной синхронизации
- Планирование процесса не поддается контролю
- На машинном уровне count++, count-- неатомОперация, то есть фрагмент кода, соответствует нескольким инструкциям на уровне сборки. И то, и другое необходимо.Если планирование процесса управляемо, то даже если count++ соответствует нескольким инструкциям, при выполнении первой инструкции происходит переключение ЦП, и планирование процесса управляет следующим процессом или исходный процесс управляет ЦП.
- решение
-
Отключить прерывания Недостатки: Крайне опасно открывать операцию прерывания (после того, как ЦП получит прерывание от часов, он проверит, не израсходован ли квант времени текущего процесса, и переключится, если он израсходован) к приложению, например: когда программа закрывает прерывание, после выполнения забывают открыть прерывание, что приводит к завершению работы всей системы.
-
Внедрение замков с аппаратными инструкциями
boolean TestAndSet(boolean *lock){
boolean rv = *lock;
*lock = TRUE;
return rv;
}
// 使用TestAndSet
boolean lock = false;
do{
while(TestAndSet(&lock)){
...//什么也不做
}
临界区
lock = false;
剩余区
}while(true);
- Примечание. Операционная система блокирует системную шину, предотвращая доступ других ЦП к переменным памяти.
- Обратите внимание, что три инструкции в функции TestAndSet выполняются атомарно.
- сигнал
- Семафор S — это целочисленная переменная, кроме инициализации, есть еще две операции: ожидание() и сигнал().
- Чтобы обеспечить работу семафора, его нужно реализовать атомарно, а операционная система реализует атомарность.
wait(S){
while(S<=0){
...//啥也不做
}
S--;
}
signal(S){
S++;
}
//
semaphore mutext = 1;
wait(mutex);
进入临界区
signal(mutex);
剩余区
- Не могу дождаться проблемы
И схема блокировки, и схема семафора с использованием аппаратных инструкций имеют такие проблемы, как занятость, то есть процесс получает квант времени процессора, но не может ничего сделать.while(S < = 0){...}
- Добавить новую очередь процесса. При обнаружении значения
typedef struct{
int value;
struct process *list;
} semaphore;
wait(semaphore *s){
s -> value--;
if(s->value<0){
//把当前进程加入到s->list中
block();
}
signal(semaphore *s){
s -> value++;
if(s -> value <=0){
//从s->list取出一个进程p
wakeup(p);
}
}
нить
Поскольку процессы независимы друг от друга, совместное использование данных между процессами может быть достигнуто только через ядро., накладные расходы обременительны, поэтому мы предлагаемнитьэто понятие. Данные между потоками являются общими; процесс может иметь только один поток или несколько потоков (процесс имеет по крайней мере один поток); когда процесс имеет несколько потоков, каждый поток имеет набор независимых регистров и информацию о стеке, в то время как код, данные и файлы являются общими, как показано на рисунке ниже.
реализация потока
-
Он полностью реализован на пользовательском уровне (когда пользователь хочет запустить аппаратное устройство, оно должно перейти из пользовательского пространства в пространство ядра, что является защитной мерой для защиты операционной системы от повреждения вредоносными программами),Одним из преимуществ реализации потоков на прикладном уровне является то, что переключение потоков не требует вмешательства ядра, и переключение потоков происходит очень быстро.. Другими словами, стратегия планирования потока реализуется сама по себе. Но здесь также есть огромный недостаток: поскольку ядро знает только процесс, а не поток, любой поток в процессе 1 блокируется, что приводит к блокировке других потоков в процессе 1.
-
В ядре реализовано взаимно однозначное соответствие между потоками и пользовательским пространством, что может эффективно устранить недостатки первого решения, но поскольку в ядре реализовано такое же количество потоков в пользовательском пространстве, накладные расходы относительно велики.
-
Несколько потоков в пространстве пользователя сопоставляются с одним потоком в ядре., так что потоков в ядре не нужно создавать столько, а также снижается вероятность блокировки, что является балансом и компромиссом.JVM реализует этот способ. JVM сама по себе является процессом, JVM может создавать множество потоков, а затем соответствовать потокам в ядре, а потоки в ядре планируют работу ЦП.
Добро пожаловать в общедоступную учетную запись WeChat: Mu Keda, все статьи будут синхронизированы в общедоступной учетной записи.