Что такое блок управления процессом
Перейти к содержимому

Что такое блок управления процессом

  • автор:

Блок управление процессом

Блок управления процессом (РСВ — process control block) — это объект, который определяет процесс для операционной системы и является структурой данных, сосредотачивающей всю ключевую информацию о процессе:

текущее состояние процесса;

уникальный идентификатор процесса;

указатели памяти процесса;

указатели выделенных процессу ресурсов;

область сохранения регистров (когда ОС переключает ЦП с процесса на процесс, она использует области сохранения регистров, предусмотренные в РСВ, чтобы запомнить информацию, необходимую для повторного запуска каждого процесса, когда он получит в очередной раз в свое распоряжение ЦП).

Концепция процессов является базовой для ОС UNIX. По сути порождение любого процесса — это создание некоторой виртуальной машины. Она имеет свое собственное адресное пространство, куда помещается процедурный сегмент и сегмент данных.

Дескриптор и контекст процесса. Системные данные, используемые для идентификации процесса, которые существуют в течение всего времени его жизни, образуют дескриптор (описатель) процесса. Множество дескрипторов образуют таблицу процессов — в современных версиях UNIX это несколько сотен процессов.

Дескриптор процесса содержит следующие параметры процесса:

расположение (адрес в памяти);

размер выгружаемой части образа процесса;

идентификатор процесса и пользователя.

Другая важная информация о процессе хранится в таблице пользователя (называемой также — контекст процесса), здесь записаны:

идентификационные номера пользователей, для определения привилегий доступа к файлам;

ссылки на системную таблицу файлов для всех открытых процессом файлов;

указатель на индексный дескриптор текущего каталога в таблице индексных дескрипторов;

список реакций на различные сигналы.

Обработка прерываний

Прерывание(interrupt) — это событие, при котором меняется нормальная последовательность команд, выполняемых процессором. Если произошло прерывание, то

управление передается ОС;

ОС запоминает состояние прерванного процесса;

ОС анализирует тип прерывания и передает управление соответствующей программе обработки прерывания.

Рассмотрим основные типы прерываний.

SVС(supervisor call instruction)-прерывания.

Инициатором этих прерываний является работающий процесс, который выполняет команду SVС, т.е. генерируемый программой пользователя запрос на предоставление конкретной системной услуги (например, на выполнение операции ввода-вывода, на увеличение размера выделенной памяти и т.п.). Механизм SVC позволяет защитить ОС от пользователей.

Инициируются аппаратурой ввода-вывода и сигнализируют ЦП о том, что произошло изменение состояния канала или устройства ввода-вывода, например, произошло завершение операции ввода-вывода, возникла ошибка или устройство перешло в состояние готовности.

Причинами таких прерываний могут быть различные внешние события, например, истечение кванта времени, заданного на таймере прерываний.

Прерывания по рестарту.

Эти прерывания происходят по команде рестарта ОС.

Прерывания по контролю программы.

Причинами таких прерываний являются различные виды ошибок, возникающих в выполняющемся процессе, например попытка деления на ноль.

Operating System: Process and Process Management

Akhand Mishra

Process: In simple words, a process is an instance of an executing application. An application is a file containing a list of instructions stored in the disk (often called an executable file), in flash memory, maybe in the cloud but it’s not executing, it’s a static entity. When an application is launched it is loaded into the memory and it becomes a process, so it is an active entity with a program counter specifying the next instruction to execute and a set of associated resources. If the same program is launched more than once than multiple processes will be created executing the same program but will be having a very different state.

A process encapsulates all the data for running application, this includes the text, the code of the program, a data section, which contains global variables and data which are available when the process is first initialized. As text and the data are available when the process is first initialized they are called static states and are available when the process first loads.

The process also encapsulates the process stack which contains temporary data (such as function parameters, return addresses, and local variables), it is a dynamic part of the process state which grows and shrinks during execution in Last-in-First-out order. Suppose we are executing a function “A” and want to call another function “B” from this function, for this, we have to save our current state (state of function “A”) to the stack and jump to execute function “B”, after the execution of function “B”, the state of the previous function (“A”) from which the function “B” was called is restored from the top of the stack and function “A” can continue its execution from that vary instruction it had left (program counter was also saved).

A process may also include a heap, which is the memory that is dynamically allocated during process run time. Text and data, stack and heap are the types of state of the process.

Every single element of the process has to be uniquely identified by its address, so an OS abstraction is used to encapsulate all of the process data in an address space. The address space is defined by a range of address from V0 to some Vmax, and different types of process state will appear in different part of this address space. The address space from V0 to Vmax does not correspond to actual address space in a physical location, instead, they are virtual addresses. The memory management hardware and operating system components responsible for memory management like page tables maps these virtual addresses to actual physical addresses.

All process may not need all the address space, as there are can be many processes running at a time and we may not have enough space in the physical memory (i.e. in the RAM). In order to deal this situation, operating system dynamically decides which portion of address space will be present where in physical memory. Multiple processes may share physical memory by temporarily swapping some portion of their address space into the disk, this portion of address space will be brought back into the memory whenever needed. The page table maintains the mapping from virtual address to the physical address (RAM or Disk), it also validates whether a particular memory access request by a process is allowed to perform or not.

Before the execution of a process, its source code must be compiled, the compilation of the code results in the conversion of the high-level code to binary instructions, a register in CPU is maintained which indicates the address of the next instruction to be executed for this process, we call it Program Counter (PC). There are some other registers in the CPU which stores other information of the process like addresses for data or some status information. There is also a stack pointer which points to the top of the stack used by the process. To maintain all of this process for every single process an operating system maintains a Process Control Block (PCB).

Process Control Block (PCB)

A Process Control Block is the data structure that operating system maintains for every single process. The PCB must contain process states like program counter, stack pointer, all the value of the CPU register, various memory mapping from virtual to physical memory, it may also include a list of open files, information which is necessary for scheduling of the process like how much time this particular process has executed on CPU in the past and how much time it should be allocated to execute in the future.

A PCB is created at the very moment a process is created with some initializations like PC points to the first instruction that needs to be executed. Certain field of the process changes as the state of the process changes for example whenever a process asks for more memory, the OS will allocate more memory to the process and update certain values of the PCB like Page table, virtual memory limits, etc. Some values of the process change too often like the value of program counter which changes on the execution of every single instruction. As updating such changes in PCB can be an expensive task, their values are stored and updated in CPU registers which are very fast. However, OS updates all the values maintained by CPU registers to the PCB whenever that particular process is no longer running on the CPU.

Suppose OS is managing two processes p1 and p2, currently, p1 is running and p2 is idle, their PCBs are stored somewhere in the memory. The process p1 is currently running means that CPU registers hold the values that correspond to the state of p1. After some time suppose OS decides to interrupt p1, so OS will update all the state information fields of the process p1 including the CPU registers to the PCB of p1. After this the OS will restore the PCB of p2 from the memory, i.e. OS will update all the CPU register from the PCB of p2 and will start executing process p2. After some time if process p2 is interrupted the PCB of p1 will be restored and CPU registers will be updated from the value of PCB of p1 and p1 will start executing from the exact same point where it was interrupted earlier by the operating system. Each time this swapping is performed we call it context switch.

Context Switch

It is a mechanism used by operating system to switch execution from the context of one process to the context of another process.

Context switching is an expensive operation because of the number of instructions involved in loading and restoring values of fields of PCB from the memory. Also when a process p1 is executing a lot of its data is stored in the CPU cache as accessing the cache is much much faster as compared to accessing from the memory. When the data we want is present in the cache we say that cache is hot. When CPU will switch the context from process p1 to process p2, the process p2 will replace process p1’s cache with its own cache, so next time when the context will switch from the process p2 back to the process p1, p1 will not find its data in the cache and has to access it from the memory, so it will incur cache misses, so we call it cold cache.

Process Lifecycle

  • New: This is the initial state when a process is first started/created. In this state, OS will perform admission control, and OS will allocate and initiate process control block and some additional resources. After this, the state of the process changes to ready.
  • Ready State: The process is waiting in a queue to be assigned to a processor. Ready processes are waiting to have the processor allocated to them by the operating system so that they can run. A process may come into this state from Start state, from the running state or from the waiting state.
  • Running State: Once the process has been assigned to a processor by the OS scheduler, the process state is set to running and the processor executes its instructions. From this state, a number of things can happen, a running process can be interrupted and the context switch is performed and the running process will move back to the ready state. Another possibility is that the running process needs to perform some long operations like reading data from the disk, or waiting for some events, maybe some timer or taking input from the keyboard, at that time the process enters the waiting state, when the event occurs or the I/O operation completes, the process will become ready again. Finally, when the process completes all the operations in the program or when it encounters some error, it will return corresponding exit code and the process will be terminated.
  • Terminated State: Once the process finishes its execution, or it encounters some error, it is moved to the terminated state where it waits to be removed from main memory.

Process Creation

In the operating system, a process can create a child process. Hence all processes come from a single root in which a creating process is the parent process and the created process is the child of that process. Once the initial boot process is done the and operating system is loaded, it will create some initial process. When user logs into the system a user shell process are created, and when the user types in the command (emacs, nano, etc) then new process get spawned from that shell parent process. So the final relationship looks like a tree.

The mechanism for process creation

Most operating systems support two basic mechanisms for process creation

  • Fork: With this mechanism, the operating system will create a new child process with PCB and then it copies all the values of parent’s PCB to child’s PCB. After that, both the child and the parent continues their execution at instruction just after the fork call because both processes contain exact same values in their PCB which also includes program counter.
  • Exec: This replaces the child’s image and loads the new program. Child’s PCB contains the new initialized value and program executes from the beginning.

The mechanism of creating a new program is like calling the fork which creates a child process with exact same PCB as that of the parent and then calling exec which replaces the child’s image with the new program’s image.

CPU Scheduling

At a time there can be multiple processes waiting in the ready queue. The CPU scheduler determines which of the currently running process should be dispatched to the CPU for execution, and how long it should take.

In order to manage the CPU, the operating system must be able to preempt i.e. to interrupt the current running process and save is current context. This operation is called preemption. Then operating system must run the scheduling algorithm in order to choose the next process to run. And at last, once the process is chosen the operating system must dispatch this process to the CPU and switch to its context. OS must make sure that CPU is spending more time on running processes and not executing scheduling algorithm, dispatching, preempting or doing some other OS operations. Hence it is important to have an efficient design and as well as efficient implementation of the various algorithms involved for example scheduling. Also, efficient data structures that are required to represent waiting processes in the ready queue or any other information (like the priority of the processes, how long the algorithm ran in the past) that are relevant to make scheduling decisions.

Inter-process communication

Many applications are structured as multiple processes, so these multi processes have to able to interact with each other in order to achieve a common goal. As we have already studied that operating system isolates the process from each other in order to protect each other’s memory space, OS controls the amount of CPU each application gets. So some communication mechanism is required to build without sacrificing the protection. These mechanisms are called inter-process communication (IPC). Their task is to transfer data/info between address spaces without sacrificing the protection and isolation that OS provides. As communication can vary from the continuous stream of data sharing, periodic data sharing, a single piece of data sharing, etc so the IPC mechanism has to be flexible with good performance.

  • Message-Passing IPC: In this mechanism, the operating system establishes a communication channel (like shared buffer), and processes interact with each other by writing or sending data to the channel and reading or receiving data from the channel.
  • Advantage: Advantage of this mechanism is that OS manages both writing and reading data from the channel and provides APIs. So both process uses the exact same APIs.
  • Disadvantage: One disadvantage of this mechanism is that data has to first copy from sending process memory space to shared channel and then back to receiving process memory space.
  • Shared Memory IPC: In this mechanism, the OS creates a shared memory channel and then maps it to each process memory space, and then processes are allowed to read and write to the channel as if they would do to any memory space that is part of their memory space.
  • Advantage: The advantage of this process is that OS is not involved in the communication.
  • Disadvantage: As OS is not involved in the communication this mechanism does not support fixed and well-defined APIs for reading and writing data, so this mechanism is error-prone and sometimes the developers have to re-implement the code.

Summary

In this post, we learned how the processes are represented in the OS, we learned about the process abstractions like address space and PCB, we learned some key mechanism that operating system supports to manage processes like process creation and scheduling. We also learned about process lifecycle, context switching, and inter-process communication.

15) Управление процессами в ОС

Процесс – это выполнение программы, которая выполняет действия, указанные в этой программе. Его можно определить как исполнительный модуль, в котором выполняется программа. ОС помогает вам создавать, планировать и завершать процессы, используемые процессором. Процесс, созданный основным процессом, называется дочерним процессом.

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

Из этого руководства по операционной системе вы узнаете:

Что такое управление процессами?

Управление процессами включает в себя различные задачи, такие как создание, планирование, завершение процессов и блокировка. Процесс – это исполняемая программа, которая является важной частью современных операционных систем. ОС должна распределять ресурсы, которые позволяют процессам обмениваться информацией и обмениваться ею. Он также защищает ресурсы каждого процесса от других методов и обеспечивает синхронизацию между процессами.

Задача ОС – управлять всеми запущенными процессами системы. Он обрабатывает операции, выполняя такие задачи, как планирование процессов и, например, распределение ресурсов.

Архитектура процесса

Вот схема архитектуры процесса

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

Блоки управления процессом

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

Он также отвечает за хранение содержимого регистров процессора. Они сохраняются, когда процесс переходит из рабочего состояния, а затем возвращается в него. Информация быстро обновляется в печатной плате операционной системой, как только процесс выполняет изменение состояния.

Состояние процесса

Состояние процесса – это состояние процесса в определенный момент времени. Он также определяет текущую позицию процесса.

Есть в основном семь этапов процесса, которые:

  • Новый: новый процесс создается, когда конкретная программа вызывает из вторичной памяти / жесткого диска в первичную память / ОЗУ
  • Готов: в состоянии готовности процесс должен быть загружен в основную память, которая готова к выполнению.
  • Ожидание: процесс ожидает выделения процессорного времени и других ресурсов для выполнения.
  • Выполнение: процесс находится в состоянии выполнения.
  • Заблокировано: это временной интервал, когда процесс ожидает завершения события, такого как операции ввода-вывода.
  • Приостановлено: состояние приостановки определяет время, когда процесс готов к выполнению, но ОС не помещает его в очередь готовности.
  • Прекращено: Завершенное состояние указывает время, когда процесс завершается

После выполнения каждого шага все ресурсы используются процессом, и память становится свободной.

Блок управления процессом (PCB)

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

Разбираемся, как работают операционные системы

Linux, Windows, Mac OS? Зачем они нужны? Понимание того, как работают операционные системы, поможет создавать качественные приложения.

Есть несколько причин, почему программистам стоит знать, как работают операционные системы. Одна из них – чтобы понимать, как работают программы. Представьте: вы пишете код, который кажется рабочим, но программа тормозит. Что делать? Можно попробовать разобраться с ограничениями операционной системы, но вы ведь не умеете!

Если стремитесь построить карьеру программиста, стоит понять, как работают операционные системы. Например, можно изучить курс «Введение в операционные системы» от Georgia Tech. В нем рассказывается, как работают ОС: механизмы работы, параллельное программирование (потоки и синхронизация), взаимодействие между процессами, распределённые ОС.

Осветим 10 наиболее важных принципов, о которых говорилось в курсе Udacity, и разберемся, как же работают операционные системы.

Что такое операционная система

Это первое, о чем нужно задуматься, если вы решили разобраться, как работают операционные системы. ОС представляют собой набор программного обеспечения. Это ПО управляет компьютерным оборудованием и предоставляет техническую базу для программ. А ещё они управляют вычислительными ресурсами и обеспечивают защиту. Главное, что у них есть, – это доступ к управлению компонентами компьютера.

Файловая система, планировщик и драйверы – всё это основные инструменты работы ОС.

Существует три ключевых элемента операционной системы:

  1. Абстракции (процессы, потоки, файлы, сокеты, память).
  2. Механизмы (создание, управление, открытие, запись, распределение).
  3. Реализации (алгоритмы LRU, EDF).

Кроме того, есть два основных принципа проектирования операционных систем:

  1. Максимальная гибкость: отделение механизмов от конкретных реализаций.
  2. Ориентация на пользователей: на каких устройствах будет работать ОС, что нужно пользователю, каковы требования к производительности.

Теперь подробнее разберём глобальные концепции, которые помогут сформировать понимание того, как работают операционные системы.

Процессы и управление

Процесс – не что иное, как исполнение программы. Так как программа записана в виде последовательности действий в текстовый файл, процессом она становится только при запуске.

Загруженная в память программа может быть условно разделена на четыре части: стек, кучу, контекст и данные.

  • Stack: стек процесса содержит временные данные, такие как параметры метода, адрес возврата и локальные переменные.
  • Heap: это динамически распределяемая память процесса времени его выполнения.
  • Text: хранит состояние регистров, состояние программного счетчика, режим работы процессора, незавершенные операции ввода-вывода, информацию о выполненных системных вызовах.
  • Data: раздел содержит глобальные и статические переменные.

Когда процесс выполняется, он проходит через разные состояния. Эти этапы могут различаться в разных операционных системах.

Общая картина выглядит так:

  • Start: начальное состояние при создании процесса.
  • Ready: процесс ожидает исполнения на процессоре. В течение работы процессор может переключаться между процессами, переводя одни в режим готовности, другие – в режим исполнения.
  • Running: выполнение инструкций.
  • Wait: процесс переходит в состояние ожидания. Например, ждёт ввода данных или получения доступа к файлу.
  • Terminated: как только процесс завершится, он перейдёт в это состояние и будет ожидать удаления.

Немного терпения: мы уже близки к пониманию того, как работают операционные системы 😉

Блок управления процессов (Process Control Block) – это структура данных, поддерживаемая операционной системой для каждого процесса. PCB имеет идентификатор PID. Именно PCB хранит всю информацию, необходимую для отслеживания процесса.

  • Process ID: идентификатор каждого из процессов в ОС.
  • State: текущее состояние процесса.
  • Privileges: разрешения доступа к системным ресурсам.
  • Pointer: указатель на родительский процесс.
  • Priority: приоритет процесса и другая информация, которая требуется для планирования процесса.
  • Program Counter: указатель на адрес следующей команды, которая должна быть выполнена.
  • CPU registers: регистры процессора, необходимые для состояния исполнения.
  • Accounting Information: уровень нагрузки на процессор, статистика и другие данные.
  • I/O Information: список ресурсов, использующих чтение и запись.

Потоки и параллелизм

Поток (нить, thread) – это ход исполнения программы. Он также имеет свой program counter, переменные, стек.

Потоки одной программы могут работать с одними данными, а взаимодействовать между собой через код.

Поток – это легковесный процесс. Вместе они обеспечивают производительность приложений и ОС за счет параллелизма на уровне программы.

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

Чем хороши потоки:

  • Они минимизируют время переключения контекста (процессора).
  • Их использование обеспечивает параллелизм процесса.
  • Они эффективно общаются между собой.
  • Потоки позволяют использовать многопроцессорные архитектуры в большем масштабе.

Потоки имеют два уровня реализации:

  • Пользовательский уровень, то есть потоки, управляемые приложениями;
  • Уровень ядра, то есть потоки, управляемые ядром операционной системы.

В первом случае ядро ​​управления потоками ничего не знает о существовании потоков вообще. А библиотека потоков просто содержит код для создания и уничтожения потоков, а также передачи сообщений и данных между ними для планирования выполнения потоков и сохранения (восстановления) контекстов потоков.

Во втором случае ядро выполняет создание потоков, а ещё планирование и управление в пространстве ядра. Заметим, что потоки ядра обычно медленнее, чем потоки пользователей.

Планирование

Планировщик – это часть менеджера процессов, которая ответственна за переключение между процессами и выбор очереди по какой-либо стратегии.

ОС поддерживает все блоки управления процессом (PCB) в очередях планирования процесса:

  • Очередь задач (job queue) поддерживает все процессы в системе.
  • Очередь ожидания (ready queue) хранит информацию обо всех процессах, находящихся в основной памяти в состоянии ожидания. В эту очередь попадают и новые процессы.
  • Очереди из устройств (device queue) – это процессы, заблокированные из-за недоступности устройств ввода-вывода.

ОС может использовать разные методы реализации для управления очередями (FIFO, Round Robin, Priority). Планировщик ОС определяет, когда и как перемещать процессы между готовыми и запущенными очередями (могут иметь только одну запись на ядро ​​процессора в системе). На приведенной выше диаграмме он был объединен с процессором.

Модели состояния делятся на активные и неактивные:

  • Активные: при создании нового процесса он переходит в класс активных.
  • Неактивные: процессы, которые не выполняются, а ждут завершения других процессов. Каждая запись в очереди является указателем на конкретный процесс. Очередь реализуется с использованием связанного списка. Использование диспетчера заключается в следующем: когда процесс прерывается, то переносится в очередь ожидания. Если процесс завершен или отменен – он отменяется вовсе.

Переключение контекста – это механизм сохранения (в PCB) и восстановления контекста процессора с ранее запущенного промежутка времени. При использовании этого метода, коммутатор контекста позволяет использовать один процессор для нескольких действий одновременно. Кстати, контекстное переключение является неотъемлемой частью многозадачной операционной системы.

Когда планировщик переключает процессор с одного процесса на другой, состояние из текущего запущенного процесса сохраняется в блоке управления. Затем состояние для следующего процесса загружается из своего PCB в регистры процессора. Только потом второй процесс может быть запущен.

При переключении следующая информация сохраняется для последующего использования: счетчик программы, информация планировщика, значение регистра базы и лимита, используемый в настоящее время регистр, измененное состояние, информация о состоянии ввода и вывода, учетная информация.

Управление памятью

Ещё одна важная часть – та, что отвечает за все операции по управлению первичной памятью. Существует менеджер памяти, который обрабатывает все запросы на получение памяти и высвобождение. Он же следит за каждым участком памяти, независимо от того, занят он или свободен. И он же решает, какой процесс и когда получит этот ресурс.

Адресное пространство процесса – набор логических адресов, к которым программа обращается в коде. Например, если используется 32-битная адресация, то допустимые значения варьируются от 0 до 0x7fffffff, то есть 2 Гб виртуальной памяти.

Операционная система заботится о том, чтобы сопоставить логические адреса с физическими во время выделения памяти программе. Нужно также знать, что существует три типа адресов, используемых в программе до и после выделения памяти:

  • Символьные адреса: или по-другому адреса, используемые в исходном коде. Имена переменных, константы и метки инструкций являются основными элементами символического адресного пространства.
  • Относительные адреса: компилятор преобразует символические адреса в относительные адреса.
  • Физические адреса: загрузчик генерирует эти адреса в момент загрузки программы в основную память.

Виртуальные и физические адреса одинаковы как в процессе загрузки, так и во время компиляции. Но они начинают различаться во время исполнения.

Набор всех логических адресов, которые создала программа, называется логическим адресным пространством. Набор всех физических адресов, соответствующих этим логическим адресам, называется физическим адресным пространством.

Хотите разобраться подробнее в том, как работают операционные системы? Посмотрите соответствующие книги в нашем Телеграм-канале.

Межпроцессорное взаимодействие

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

Можно подумать, что процессы, которые работают независимо, выполняются эффективнее, но зачастую это не так. Использование кооперации может повысить скорость вычислений, удобство и модульность программ.

Межпроцессная коммуникация (IPC) – это механизм, который позволяет процессам взаимодействовать друг с другом и синхронизировать действия. Связь между этими процессами может рассматриваться как сотрудничество.

Процессы могут взаимодействовать двумя способами: через общую память или через передачу сообщений.

Метод использования общей памяти

Допустим, есть два процесса: исполнитель (производитель) и потребитель. Один производит некоторый товар, а второй его потребляет. Эти два процесса имеют общее пространство или ячейку памяти, известную как «буфер». Там хранится элемент, созданный исполнителем, оттуда же потребитель получает этот элемент.

Однако у этих версий есть как минимум две значимые проблемы: первая известна как проблема безграничного буфера: исполнитель может продолжать создавать элементы без ограничений на размер буфера. Вторая заключается в том, что исполнитель, заполнив буфер, переходит в режим ожидания.

В задаче с ограниченным буфером у исполнителя и потребителя будет общая память. Если общее количество произведенных товаров равно размеру буфера, то исполнитель будет ждать их потребления.

Аналогично потребитель сначала проверит наличие товара, и если ни один элемент не будет доступен, придётся ждать его освобождения.

Метод анализа сообщений

С помощью этого метода процессы взаимодействуют друг с другом без использования общей памяти. Допустим, есть два процесса, p1 и p2, которые хотят взаимодействовать друг с другом. Они работают следующим образом:

  • Устанавливается связь (если её ещё не существует).
  • Начинается обмен сообщениями с помощью базовых примитивов. Нам нужно как минимум два примитива – отправить (сообщение, пункт назначения) или получить (сообщение).

Размер сообщения может быть фиксированным или переменным. Проектировщикам ОС проще работать с сообщениями фиксированного размера, а программистам – переменного. Стандартное сообщение состоит из двух частей – заголовка и тела.

Управление вводом и выводом

Одной из важнейших задач операционной системы является управление различными устройствами ввода и вывода вроде мыши, клавиатуры, дисководов, etc.

Система ввода и вывода принимает запрос приложения на ввод или вывод данных, а затем отправляет его на соответствующее физическое устройство. После возвращает приложению полученный ответ. Устройства ввода и вывода можно разделить на две категории:

  • Блочные: то есть устройства, с которыми драйверы связываются, отправляя целые блоки данных. Например, жесткие диски, USB-камеры, Disk-On-Key.
  • Символьные: те устройства, с которыми драйвер связывается, отправляя и получая одиночные символы (байты или октеты). Например, последовательные порты, параллельные порты, звуковые карты и так далее.

ЦПУ должен иметь способ передачи информации на устройство ввода-вывода и обратно. И есть три способа сделать это:

  1. Специальные инструкции

Особые, неуниверсальные инструкции процессора, внедренные специально для контроля устройств ввода-вывода. Они позволяют отправлять данные на устройство и считывать их оттуда.

  1. Входы и выходы с отображением памяти

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

  1. Прямой доступ к памяти (DMA)

Медленные устройства, такие как клавиатуры, генерируют прерывания ЦПУ после передачи каждого байта. Если бы быстрые устройства работали похожим образом, то ОС бы тратила большую часть времени впустую, на обработку этих прерываний. Поэтому для снижения нагрузки обычно используется прямой доступ к памяти (DMA).

Это означает, что ЦПУ предоставляет модулю ввода и вывода полномочия для чтения или записи в память. Сам модуль управляет обменом данными между основной памятью и устройством ввода-вывода. ЦПУ участвует в начале и конце передачи, а прерывается только после полной передачи блока.

Организация прямого доступа к памяти требует специального оборудования, называемого контроллером DMA (DMAC). Он управляет передачей данных и доступом к системной шине. Контроллеры запрограммированы с указателями источника и места назначения, счетчиками для отслеживания количества переданных байтов и прочими настройками.

Виртуализация

Технология, которая позволяет создавать несколько сред или выделенных ресурсов из единой физической аппаратной системы называется виртуализация

Программное обеспечение, гипервизор, напрямую подключается к этой аппаратной системе и позволяет разбить ее на отдельные, безопасные среды – виртуальные машины. По идее, гипервизор должен аппаратные ресурсы между виртуальными машинами так, чтобы процессы выполнялись быстрее.

Физическая машина с гипервизором называется хостом, а виртуальные машины, которые используют ресурсы данного хоста – гостями. Для них ангаром ресурсов являются процессор, память, хранилище. Для получения доступа к этим ресурсам операторы управляют виртуальными экземплярами.

В идеале, все связанные виртуальные машины управляются с помощью единой веб-консоли управления виртуализацией. Она нужна, чтобы ускорять работу. Виртуализация позволяет определить, сколько вычислительной мощности и памяти выделять виртуальным машинам. Кроме того, так как виртуальные машины технически не связаны между собой, это повышает безопасность сред.

Проще говоря, виртуализация создает дополнительные мощности для выполнения процессов.

Типы виртуализации

  1. Данные: позволяет компаниям обеспечивать вычислительные мощности для объединения данных из нескольких источников, размещения новых источников и преобразования данных в соответствии с потребностями пользователя.
  2. Рабочий стол: легко спутать с виртуализацией операционной системы. Виртуализация рабочего стола позволяет центральному администратору одновременно развёртывать смоделированные среды на сотнях физических машин. Виртуальные системы позволяют администраторам выполнять массовые конфигурации, обновления и проверки безопасности на всех устройствах сразу.
  3. Серверы: программная имитация с помощью специального ПО аппаратного обеспечения компьютера: процессор, память, жесткий диск, и т. д. На такой виртуальный компьютер можно установить операционную систему, и она будет на нем работать точно так же, как и на простом, «железном» компьютере. Самое интересное достоинство этой технологии – это возможность запуска нескольких виртуальных компьютеров внутри одного физического. При этом, все виртуальные компьютеры могут работать независимо друг от друга.
    Сервер – компьютер, спроектированный под выполнение большого объема специфических задач. Виртуализация сервера позволит ему выполнять больше этих специальных задач, а также разделить функционал на разные компоненты.
  4. ОС: это способ одновременного запуска Linux и Windows-сред. Преимущество в том, что это уменьшает затраты на оборудование, повышает безопасность и экономит время на обслуживании.
  5. Сетевые функции: разделяет ключевые функции сети (например, службы каталогов, общий доступ к файлам и IP-конфигурацию) для распределения между средами. Виртуальные сети сокращают количество физических компонентов: коммутаторов, маршрутизаторов, серверов, кабелей.

Система файловой дистрибуции

Распределенная файловая система – это клиентское или клиент-серверное приложение, которое позволяет получать и обрабатывать данные. Они хранятся на сервере, как если бы они находились на персональном компьютере. Когда пользователь запрашивает файл, сервер отправляет ему копию запрашиваемого файла, который кэшируется на компьютере пользователя во время обработки данных, а затем возвращается на сервер.

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

Сетевая файловая система Sun Microsystems (NFS), Novell NetWare, распределенная файловая система Microsoft и DFS от IBM являются примерами распределенных файловых систем.

Распределенная общая память

Распределенная общая память (DSM) – это компонент управления ресурсами распределенной операционной системы. В DSM доступ к данным осуществляется из общего пространства, аналогично способу доступа к виртуальной памяти. Данные перемещаются между дополнительной и основной памятью, а также между разными узлами. Изменения прав собственности происходят, когда данные перемещаются с одного узла на другой.

Преимущества распределенной общей памяти:

  • Программистам можно не беспокоиться о передаче памяти между машинами, потому что перемещение данных можно скрыть;
  • Можно передавать сложные структуры по ссылке, упрощая разработку алгоритмов для распределенных приложений;
  • Это дешевле, чем многопроцессорные системы и может быть реализовано с использованием обычного оборудования;
  • Можно использовать неограниченное количество узлов;
  • Программы, написанные для мультипроцессоров с общей памятью, могут быть запущены в системах DSM.

Облачные вычисления

Всё больше процессов переходит в облако. По сути, облачные вычисления – это своего рода аутсорсинг компьютерных программ. Используя облачные вычисления, пользователи могут получать доступ к программному обеспечению и приложениям из любого места. Это означает, что им не нужно беспокоиться о таких вещах, как хранение данных и питание компьютера.

Традиционные бизнес-приложения всегда были очень сложными, дорогими в обслуживании – нужна команда экспертов для установки, настройки, тестирования, запуска, защиты и обновления. Это одна из причин, почему стартапы проигрывают корпорациям.

Используя облачные вычисления, вы передаёте ответственность за аппаратное и программное обеспечение опытным специалистам, таким как Salesforce и AWS. Вы платите только за то, что вам нужно, апгрейд платежного плана производится автоматически по мере ваших потребностей, а масштабирование системы протекает без особых сложностей.

Приложения на базе облачных вычислений могут работать эффективнее, дольше и стоить дешевле. Уже сейчас компании используют облачные приложения для множества приложений, таких как управление отношениями с клиентами (CRM), HR, учет и так далее.

Итоги

В заключение хочется ещё раз вернуться к тому, зачем вообще разбираться в том как работают операционные системы. Операционная система – это «мозг», который управляет входными, обрабатываемыми и выходными данными. Все остальные компоненты также взаимодействуют с операционной системой. Понимание того, как работают операционные системы, прояснит некоторые детали и в других компьютерных науках, ведь взаимодействие с ними организуется именно средствами ОС.

Разобрались, как работают операционные системы? Вот ещё несколько интересных статей на тему:

Источник: Как работают операционные системы: 10 концептов, которые нужно знать разработчикам on Medium.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *