Многопроцессорные системы

### Мультипроцессор с общей памятью (shared-memory multiprocessor) Мультипроцессор — компьютерная система, в которой два и более центральных про- цессора имеют полный доступ к общей оперативной памяти. Программа, запущенная на любом из центральных процессоров, видит обычное виртуальное пространство (имеющее, как правило, страничную организацию). Единственное необычное свойство, присущее этот системе, заключается в том, что центральный процессор может записать какое-нибудь значение в слово памяти, а затем считать это слово и получить другое значение (потому что другой центральный процессор его уже изменил). При должной организации это свойство формирует основу для межпроцессорного обмена данными: один центральный процессор записывает какие-нибудь данные в память, а другой их считывает из памяти. Хотя у всех мультипроцессоров имеется свойство, позволяющее каждому центральному процессору обращаться ко всему пространству памяти, у некоторых мультипроцессоров есть еще одно свойство: каждое слово памяти может быть считано так же быстро, как и любое другое слово памяти. Такие машины называются UMA-мультипроцессорами (Uniform Memory Access — однородный доступ к памяти). В противоположность им NUMA-мультипроцессоры (Nonuniform Memory Access — неоднородный доступ к памяти) этим свойством не обладают.

Алгоритмы. Мемоизация

Мемоизацuя - это метод, при котором сохраняются результаты выполненных вычислений, так что, когда они снова понадобятся, их можно найти, вместо того чтобы вычислять во второй (или миллионный) раз. ``` from typing import Dict

Linux. Взаимоблокировка

В компьютерных системах множество ресурсов, которые одновременно могут использоваться только одним процессом. Если два процесса будут использовать один и тот же элемент таблицы файловой системы, то эта система непременно будет повреждена. Поэтому все операционные системы способны временно предоставлять процессу исключительные права доступа к конкретным ресурсам. При работе многих приложений процессу нужен исключительный доступ не к одному, а сразу к нескольким ресурсам. Предположим, к примеру, что каждый из двух процес- сов захотел записать отсканированный документ на Blu-ray-диск. Процесс A запрашивает разрешение на использование сканера и получает его. Процесс B запрограмми- рован по-другому: сначала он запрашивает разрешение на использование пишущего привода Blu-ray-дисков и также получает это разрешение. Теперь A запрашивает разре- шение на использование пишущего привода Blu-ray-дисков, но запрос отклоняется до тех пор, пока это устройство не будет освобождено процессом B. К сожалению, вместо того чтобы освободить привод, B запрашивает разрешение на использование сканера. И в этот момент оба процесса оказываются заблокированными навсегда. Такая ситуа- ция называется тупиковой ситуацией (тупиком), или взаимоблокировкой (deadlock).

Linux. Кэширование

Наиболее распространенным методом сокращения количества обращений к диску является блочное кэширование или буферное кэширование. Для управления кэшем могут применяться различные алгоритмы, но наиболее рас- пространенный из них предусматривает проверку всех запросов для определения того, имеются ли нужные блоки в кэше. Если эти блоки в кэше имеются, то запрос на чтение может быть удовлетворен без обращения к диску. Если блок в кэше отсутствует, то он сначала считывается в кэш, а затем копируется туда, где он нужен. Последующий запрос к тому же самому блоку может быть удовлетворен непосредственно из кэша. ![Структура данных буферного кэша](https://whoisdeveloper.ru/static/img/cache_struct.png) Структура данных буферного кэша

Linux. Файловые системы

Самым важным вопросом при реализации файлового хранилища является отслеживание соответствия файлам блоков на диске. ### Непрерывное размещение Простейшая схема размещения заключается в хранении каждого файла на диске в виде непрерывной последовательности блоков. Таким образом, на диске с блоками, имеющими размер 1 Кбайт, файл размером 50 Кбайт займет 50 последовательных блоков. При блоках, имеющих размер 2 Кбайт, под него будет выделено 25 последовательных блоков.