Данная статья ориентирована на внеклассных студентов для дополнения базовых знаний, необходимых программистам.
-
Для получения базовых знаний о компьютерных сетях нажмите здесь
-
Для получения базовых знаний о принципах компьютерной композиции нажмите здесь
Что ж, откройте операционную систему!
Слабо спросил: зачем тебе операционная система?
я не буду говорить об этом здесь操作系统
Понятие , потому что текст слишком тупой, нам нужно только посмотреть на простой пример:
- В нашем JS-коде просто введите
console.log(1+1)
; вы можете увидеть это в панели браузера2
, что тут происходит? (простой взгляд) - Сначала введите код на клавиатуре
1+1
контролировать вывод2
, нужноCPU
клавиатура управления (устройство ввода), получит1+1
инструкция в память - Затем контроллер ЦП извлекает инструкцию из памяти и анализирует, что инструкция предназначена для компьютера, чтобы выполнить какое-либо действие.
1+1
операция сложения - В это время управление ЦП будет управлять арифметическим блоком ЦП для выполнения
1+1
операция сложения и получить результат2
- Наконец, контроллер ЦП управляет арифметическим блоком для возврата результата в память, и память также находится под управлением контроллера ЦП, и результат возвращается в память.
2
Возврат к экрану (устройство вывода)
Ну, проблема здесь в том, что если нет операционной системы, простой операции 1+1, ваш код js также должен учитывать координацию этих аппаратных средств, например, когда ваш код должен координировать ресурсы ЦП при чтении вашего кода, что Время переключить процесс на другой процесс. . . Эту грязную работу за вас экранирует операционная система, иначе как вы можете писать этот код. . .
Слабо спросите: почему вы изучаете это на фронтенде?
Давным-давно, когда я читал «Введение в NodeJS» Пака Линга Дашена, когда дело доходит до межпроцессного взаимодействия, есть поговорка, что межпроцессное взаимодействие на платформе Windows использует каналы, а на платформе Linux используется домен. сокеты.Когда я это увидел, я был ошарашен., Что такое межпроцессное взаимодействие? Что такое трубопровод? Что такое доменный сокет? 😭 Я не понимаю.... Это все связано со знанием процесса операционной системы).
Ничего не говори, брат, учебная машина была жесткой!
2. Механизм работы и архитектура операционной системы
Предварительные знания: что такое инструкция (подробнее см. мою статью о принципах компоновки компьютера)
Например, как показано ниже (просто проведите пальцем):
a+b — это часть кода программы, a+b не может быть завершена за один шаг в глазах ЦП и может быть переведена следующим образом:
// 意思是将内存的16号单元数据,放到A寄存器,
LOAD A, 16
// 意思是将内存的16号单元数据,放到B寄存器
LOAD B, 17
// 存器里的A,B数据相加,得到C
ADD C, A, B
Здесь видно, что командаCPU
могу识别
а также执行
самая основная команда.
2.1 Две инструкции, два состояния процессора, две программы
Опасно говорить, что пользователь может удалить все файлы на сервере по своему желанию. Поэтому некоторые команды не могут использоваться обычными пользователями, только权限较高
пользователи могут использовать. На данный момент инструкции делятся на два типа, как показано ниже:
Напрашивается вопрос: ЦП如何判断
Возможно ли в настоящее время выполнить特权指令
?
Как показано ниже:Процессор обычно имеет два режима работы:内核态
а также用户态
, а в PSW (не обращайте на это внимания, вы знаете, что в регистре есть флаговый бит 0 для пользовательского режима и 1 для базового режима) есть двоичный бит для управления этими двумя режимами.
Для прикладных программ некоторые программы могут выполнять привилегированные инструкции, а некоторые программы могут выполнять только непривилегированные инструкции. Поэтому программы в операционной системе делятся на два типа:
2.2 Краткое введение в ядро операционной системы
На рисунке ниже давайте посмотрим, что содержит ядро операционной системы.
Части ядра операционной системы, тесно связанные с аппаратным обеспечением:
- управление часами. Управление часами операционной системы зависит от
硬件定时器
(не знаю, как конкретно аппаратно реализовано, вроде реализовано аппаратно, периодически генерирующим импульсный сигнал). Управление часами очень важно, например, наше获取时间信息
,进程切换
И так далее полагаться на управление часами. - Обработка прерываний (подробнее об этом в следующем подразделе).
- Примитивы (будут случаи, упомянутые позже). Теперь это можно просто понять как использование для реализации определенной функции во время процесса выполнения.
不可被中断
набор инструкций. Очень важным свойством примитивов является атомарность (его работа一气呵成,不可中断
).
2.3 Прерывания
- Во время выполнения программы в системе возникла ситуация, которую ЦП должен немедленно обработать.
暂时中止程序的执行
перемена处理这个新的情况
процесс называется中断
.
Вот пример:
После того, как первое приложение было выполнено в пользовательской среде некоторое времяЗатем операционная система переходит в состояние ядра и обрабатывает сигнал прерывания.
- Обнаружение ОС
中断的信号
Это квант времени первой программы (каждая программа не может выполняться все время, ЦП будет давать каждой программе определенное время выполнения, это квант времени) израсходован, он должен выполняться для второй прикладной программы - переключиться на
第2个进程
, операционная система будетCPU
из使用权
переключиться на второе приложение, а затем второе приложение находится в用户态
Под началом. -
进程
2 нужно позвонить打印机资源
, затем выполняет系统调用
(Системный вызов будет обсуждаться позже, который просто понимается как функция, требующая, чтобы операционная система перешла в основное состояние для обработки), позвольте операционной системе войти в основное состояние и вызовите ресурсы принтера. - Принтер начинает работать,
此时进程2
Поскольку вам нужно дождаться запуска принтера, операционная система не ждет (подождите, пока принтер будет готов, а затем вернитесь к выполнению программы 2), переключитесь непосредственно на第三个应用程序
воплощать в жизнь - Подождите, пока принтер не будет готов, после чего принтер отправит сообщение в операционную систему через контроллер ввода-вывода.
个中断信号
, Операционная система и в основное состояние, обнаружили, что прерывание связано с程序2
Дождитесь ресурса принтера, теперь принтер готов, переключитесь на程序2
, переключиться на用户态
, дайте ЦП программе 2 для продолжения выполнения.
Ну а теперь можно сделать вывод, то есть как осуществляется переключение между пользовательским режимом и основным режимом?
- «Режим пользователя ---> режим ядра» реализован через прерывания.
并且中断时唯一途径
. - При переключении из «состояния ядра ---> пользовательского состояния» выполняется привилегированная инструкция, чтобы установить бит флага состояния программы в пользовательское состояние.
2.4 Классификация прерываний
Например, что такое внутренние и внешние прерывания:
Далее он сказал, что бывший одноклассник Фань Тонг не любил учиться, когда был ребенком.Каждый раз, когда он учился, он внезапно становился капризным.Прошло много времени с тех пор, как он пришел в себя.内部中断
. Подумав об этом, учитель подошел и дал Фань пощечину.外部中断
.
Официальное объяснение следующее:
- Внутренние прерывания являются обычными ситуациями, такими как
程序非法操作
(Например, адрес памяти данных, которые вы хотите взять, является не адресом памяти, а адресом, который система не может распознать),地址越界
(Например, система выделяет некоторую память для вашей программы, но когда вы обращаетесь к ней, она превышает диапазон памяти, к которому вы должны получить доступ),浮点溢出
(Например, система может представлять только диапазон от 1,1 до 5,1, а вы вводите 100, что выходит за пределы диапазона, который может обработать компьютер), или异常
,陷入trap
(Это относится к приложению, запрашивающему системный вызов, что такое системный вызов, и в следующих разделах будет приведен пример). - Общие случаи внешних прерываний, таких как
I/O中断
(Генерируется контроллером ввода-вывода, используется для отправки сигнала для уведомления о завершении операции и других сигналов. Например, процессу необходимо запросить ресурсы принтера. В принтере идет процесс подготовки к запуску. готов, он даст ЦП прерывание ввода-вывода, чтобы сообщить ему, что он готов),时钟中断
(Он генерируется таймером внутри процессора, что позволяет операционной системе выполнять функцию с определенными правилами. Операционная система будет планировать поток каждые 15 мс, что достигается с помощью прерывания часов).
2.5 Системные вызовы
Зачем нужны системные вызовы?
-
Например, вашей программе требуется
读取文件信息
, читаемый файл принадлежит读取硬盘里的数
Согласно данным, эту операцию следует выполнять, когда ЦП内核态
Чтобы завершить, как наше приложение позволяет процессору помочь нам переключиться в режим ядра, чтобы завершить эту работу, здесь нам нужно系统调用了
. -
Вот концепция и функция системных вызовов.
-
заявление
通过系统调用请求操作系统的服务
. Все виды общих ресурсов в системе единообразно управляются операционной системой, поэтому в пользовательской программе любой资源有关的操作
(например, выделение памяти, операции ввода-вывода, управление файлами и т. д.), все必须
Запрос на обслуживание отправляется операционной системе посредством системного вызова, и операционная система выполняет его от своего имени.
Просто взгляните на следующее содержание, классификацию системных вызовов:
должны знать о том,库函数
а также系统调用
Легко спутать.
- Библиотеки — это повторно используемые модули.
处于用户态
- Вход в процессы из пользовательского режима через системные вызовы
内核态
, большая часть библиотечных функций — это инкапсуляция системных вызовов
Например: нравитсяwindows
а такжеlinux
, метод системного вызова для создания процесса отличается. Но в узле вам нужно только вызвать тот же метод функции, чтобы создать процесс. Например
// 引入创建子进程的模块
const childProcess = require('child_process')
// 获取cpu的数量
const cpuNum = require('os').cpus().length
// 创建与cpu数量一样的子进程
for (let i = 0; i < cpuNum; ++i) {
childProcess.fork('./worker.js')
}
2.6 Определение, состав, организация, состояния и переходы процессов
2.6.1 Зачем вводить понятие процесса?
- Ранние компьютеры поддерживали только
单道程序
(Это означает, что все процессы ставятся в очередь для выполнения один за другим. Когда процесс A выполняется, ЦП, память и устройства ввода-вывода контролируются процессом A. После выполнения процесса A процесс B заменяется, а затем соответствующие ресурсы, такие как процессор, память и т. д., можно заменить на B).
- современные компьютеры
多道程序
Выполнение означает, что кажется, что несколько программ выполняются вместе одновременно, и каждое выполнение программы требует, чтобы система выделяла ей ресурсы для выполнения, такие какCPU
,内存
. - Возьмем, к примеру, память: операционной системе необходимо знать, какая память выделена для программы А и какая память выделена для программы Б. Эти данные должны быть записаны в небольшой книге, которая является частью процесса и одной из основных задач. Основная обязанность процесса состоит в том, чтобы
记录目前程序运行的状态
. - Система настраивает структуру данных для каждой запущенной программы, которая называется
进程控制块
(PCB), который используется для описания различной информации о процессе (например, где находится сегмент кода).
2.6.2 Определение процесса?
Кратко, процесс - это тот, который имеет独立功能的程序
в наборе данных运行的过程
. (упор на динамику)
2.6.3 Из каких компонентов состоит печатная плата
Как показано на рисунке ниже, объясните
-
进程标识符PID
эквивалент удостоверения личности. При создании процесса операционная система присваивает процессу уникальный неповторяющийся идентификатор.用于区分不同的进程
. - ID пользователя
UID
используется для представления процесса所属的用户
кто это. - Текущее состояние и приоритет процесса будут подробно описаны в следующем подразделе.
- Указатель сегмента программы указывает на программу текущего процесса в
内存的什么地方
. - Указатель сегмента данных ссылается на данные текущего процесса в
内存的什么地方
. - Клавиатура и мышь относятся к процессу, который
分配得到的I/O设备
. - Различные значения регистров относятся, например, к значению счетчика программ, например, результаты некоторых вычислений вычисляются наполовину, и эти значения нужно сохранять при переключении процессов.
2.6.4 Организация процесса
В системе обычно десятки, сотни или даже тысячиPCB
. Для эффективного управления ими эти ПХД должны быть соответствующим образом организованы. Вот метод организации, аналогичный связному списку в структуре данных.
2.6.5 Статус процесса
进程是程序的一次执行。
Во время этого выполнения иногда процесс被CPU处理
, а иногда требуется等待CPU服务
, видно, что будут различные изменения в состоянии процесса. Чтобы облегчить управление каждым процессом, операционной системе необходимо разумно разделить процесс на несколько состояний.
Существует три основных состояния процесса:
Два других состояния процесса:
2.6.6 Переход состояния процесса
Состояние процесса не статично, динамическое преобразование будет при определенных обстоятельствах.
Как реализованы описанные выше переходы состояний процесса?Это приводит к следующей роли, называемой «примитивы».
- Примитив это
不可被中断
атомарная операция. Давайте возьмем пример, чтобы увидеть, как гарантируется непрерываемость примитивов.
Примитивное усыновление关中断指令
а также开中断指令
выполнить.
- Сначала выполните команду закрытия прерывания
- Затем идет внешний сигнал прерывания, который не будет обрабатываться.
- После выполнения команды открытия прерывания другие сигналы прерывания могут быть обработаны.
2.6 Связь между процессами
Зачем нужно межпроцессное взаимодействие?
потому что процесс分配系统资源的单位
(включая адресное пространство памяти), поэтому адресные пространства памяти, принадлежащие каждому процессу, независимы друг от друга.
2.6.1 Способ обмена информацией между процессами --- Общее хранилище
Поскольку пространство для хранения двух процессов不能相互访问
, поэтому операционная система предоставляет пространство памяти, доступное друг другу, что является принципом общего хранилища.
Среди них представлено совместное использование на основе области хранения.
- нарисовать блок в памяти
共享存储区
, форма и место хранения данных контролируются процессом, а не операционной системой.
2.6.2 Метод связи процесса --- конвейер
- Данные конвейера
字符流
(Обратите внимание, что это не поток байтов) для записи в канал. Когда канал заполнен, процесс записиwrite()
Системный вызов заблокируется, ожидая, пока процесс чтения извлечет данные. Когда процесс чтения удаляет все данные, конвейер становится пустым, и процесс чтения завершается.read()
Системный вызов будет заблокирован. - Если он не заполнен, чтение не разрешено. Если места нет, писать нельзя.
- Как только данные прочитаны, они удаляются из канала, что означает
读进程
Максимум один.
2.6.3 Метод процесса связи --- Сообщение прохождение
обмен данными между процессами格式化的消息
для единицы. процесс, предоставляемый операционной системой"发送消息/接收消息"
Два примитива для обмена данными.
Что означает сообщение? Как и при отправке сообщения QQ, источником заголовка сообщения является вы, а тело сообщения — отправленным вами содержимым. Как показано ниже:
Далее мы вводим间接通信
Способ (очень похожий на режим посредника или режим подписки на освобождение), как показано ниже: Посредники — это почтовый ящик, и процесс передает его для отправки и получения сообщений.
2.7 Резьба
Зачем вводить темы?
- Например, когда вы играете в QQ, QQ — это процесс.Если в процессе QQ нет многопоточной параллелизма, то процесс QQ может только
同一时间做一件事情
(например, чат с набором текста QQ) - Но наша реальная ситуация заключается в том, что во время чата QQ вы также можете отправлять файлы и видеочат, что показывает, что если QQ
没有多线程并发能力
, практичность способности QQ значительно снижается. поэтому мы需要线程
, то есть,需要进程拥有能够并发
Возможность проведения нескольких мероприятий.
Изменения, вызванные введением потоков
3 Синхронизация и взаимоисключение процессов
Синхронизировать. Это означает, что существует определенная последовательность событий, происходящих в нескольких процессах. То есть одни процессы должны выполняться раньше других.
Например进程A
нужно читать из буфера进程B
Информация, полученная, когда буфер пуст,进程B
Заблокирован, потому что информация не может быть прочитана. и когда进程A
При генерации информации в буфер,进程B
будет разбужен. Концепция показана на рисунке 1.
взаимоисключающий. Это означает, что несколько процессов не могут использовать один и тот же ресурс одновременно. Когда процесс использует ресурс, другие процессы должны ждать.
Например进程B
Требуется доступ к принтеру, но в это время进程A
владение принтером,进程B
будет заблокирован до进程A
После освобождения ресурсов принтера процесс B может продолжить выполнение. Концепция показана на рисунке 3.
3.1 Семафор (просто понять концепцию)
信号量
В основном для решения процесса同步
а также互斥
Да, нашему переднему интерфейсу нужно понимать, задействована ли взаимосвязь между синхронизацией и взаимным исключением (большинство логических задач, которые мы программируем по поводу процесса, разве суть синхронизации и взаимных исключений не заключается?)
В операционной системе общиеP、V信号量
для достижения межпроцессного同步
а также互斥
, мы кратко понимаем часто используемый семафор,记录型信号量
Кратко разберемся, в чем суть семафора. (Язык C указать, будут замечания)
/*记录型信号量的定义*/
typedef struct {
int value; // 剩余资源
Struct process *L // 等待队列
} semaphore
Это означает, что структура семафора состоит из двух частей,一部分是剩余资源value
Например, если в данный момент простаивают два принтера, оставшийся ресурс равен 2, и кто бы ни использовал принтер, оставшийся ресурс уменьшается на 1.
Struct process *L
Это означает, что, например, два принтера используются, в это время вам нужно использовать принтер, в это время запрос на этот ресурс принтера будет помещен в очередь блокировки, а L - адрес блокировки очередь.
/*P 操作,也就是记录型信号量的请求资源操作*/
void wait (semaphore S) {
S.value--;
if (S.value < 0){
block (S.L);
}
}
Следует отметить, что если количества оставшихся ресурсов недостаточно, используйте блочный примитив, чтобы заставить процесс перейти в состояние блокировки из состояния выполнения, и повесить его в очереди ожидания семафора S.
/*V 操作,也就是记录型信号量的释放资源操作*/
void singal (semaphore S) {
S.value++;
if (S.value <= 0){
wakeup (S.L);
}
}
После освобождения ресурса, если есть другие процессы, ожидающие этого ресурса, такие как ресурсы принтера, примитив пробуждения используется для пробуждения процесса в очереди ожидания, и процесс переходит из состояния блокировки в состояние продолжения.
3.2 Проблема производитель-потребитель (просто понять концепцию)
Почему мы говорим об этом?В основном речь идет о механизме потока узла, который по сути является проблемой производителя-потребителя.Вы можете просто посмотреть, как решить эту проблему.
Как показано выше,生产者
Основная функция – генерировать一定量的数据放到缓冲区中
,Потом重复此过程
. В то же время потребители缓冲区消耗这些数据
. Ключом к решению этой проблемы является обеспечение того, чтобы производитель не добавлял данные, когда буфер заполнен, а потребитель не потреблял данные, когда буфер пуст.
Здесь нам нужны два семафора синхронизации и один семафор мьютекса.
// 互斥信号量,实现对缓冲区的互斥访问
semaphore mutex = 1;
// 同步信号量,表示目前还可以生产几个产品
semaphore empty = n;
// 同步信号量,表示目前可以消耗几个产品
semaphore full = 0;
Код производителя выглядит следующим образом
producer () {
while(1) {
// 生产一个产品
P(empty);
// 对缓冲区加锁
P(mutex);
这里的代码是生产一个产品
// 解锁
V(mutex);
// 产出一个产品
V(full);
}
}
Код потребителя выглядит следующим образом
producer () {
while(1) {
// 消费一个产品
P(full);
// 对缓冲区加锁
P(mutex);
这里的代码是消费一个产品
// 解锁
V(mutex);
// 消费一个产品
V(empty);
}
}
4 Основы и концепции памяти
Почему память
Память это компьютер其它硬件设备
а такжеCPU沟通
мосты и пересадочные станции. Прежде чем программа будет выполнена, ее необходимо поместить в память, прежде чем она сможет быть обработана процессором.
4.1 Как процессор различает, где в памяти находятся данные исполняемой программы
- Давая
内存的存储单元编址
осуществленный. (Единица хранения обычно указывается в байтах) - Как показано на рисунке ниже, ЗУ, как и гостиничный номер, имеет номер, например, данные программы 1 находятся на 1-м этаже, а в программе хранится №1 на 1-м этаже.
let a = 1
этот код.
4.2 Управление памятью — выделение и высвобождение памяти
-
Распределение памяти делится на
连续分配
а также非连续分配
, непрерывное выделение означает, что выделение пользовательского процесса должно быть一个连续的内存空间
. -
Здесь мы говорим только о непрерывном распределении
动态分区分配
. -
Что такое динамическое выделение разделов?
不会预先划分内存分区
, но когда процесс загружается в память, по размеру процесса动态地
Создайте раздел и сделайте размер раздела正好适合
потребности процесса. (Например, размер памяти компьютера 64Мб, системная область 8Мб, а пользовательская 56Мб... Теперь у нас есть несколько процессов для загрузки в память, как показано ниже)
- Вытекающая из этого проблема заключается в том, что если процесс 1 в это время израсходован и соответствующие данные в памяти также удалены, то
空闲的区域
, О том, как за назначением (то есть с процессом выхода, там появится много свободной памяти)
Мы говорим о более простом методе обработки, называемом空闲分区表
метод решения этой проблемы. Как показано на рисунке ниже, таблица справа — это свободная таблица разделов.
Когда многие свободные разделы могут удовлетворить спрос, какой раздел следует выбрать для выделения, как показано на следующем рисунке соответственно.20MB
,10MB
,4MB
Три свободных блока разделов, теперь进程5
нужно4MB
Свободный раздел, изменить способ его размещения?
Нам нужно следовать определенному алгоритму динамического выделения разделов, например首次适应算法
, что означает поиск по младшему адресу каждый раз, чтобы найти первый свободный раздел, который может удовлетворить размер. Также такие как最佳适应算法
, который относится к поиску наименьшего раздела, подходящего для выделения из таблицы свободных разделов для удовлетворения спроса.
连续分配缺点很明显
, в большинстве случаев размер процесса, который необходимо выделить, не может точно совпадать с оставшимся размером свободного раздела, что приведет к большому количеству труднодоступных内存碎片
.
Здесь мы представляем лучший метод бесплатного выделения разделов,基本分页存储
. Как показано ниже
Разделите пространство памяти на一个个大小相等
разделы (например: каждый раздел4KB
).Каждый раздел представляет собой“页框”
. Номера фреймов страниц из0
Начинать.
Адресное пространство пользовательского процесса разделено на регионы, равные размеру страничного фрейма, называемые“页”
. Каждая страница также из0
Начинать.
5 Управление файлами
Что за файл?
Файл представляет собой набор осмысленных信息/数据
собирать.
На компьютере хранятся различные файлы.Какие атрибуты имеет файл? Как должны быть организованы данные в файле? Как должны быть организованы файлы?
5.1 Свойства файла
- имя файла. То есть имя файла.Следует отметить, что в этом же каталоге
不允许
файлы с повторяющимися именами. - идентификатор. Метод, используемый операционной системой для различения отдельных файлов.
内部的名称
. - Типы. Тип файла.
- Место нахождения. документ
存放的路径
, но и расположение на жестком диске (необходимо преобразовать в адрес на физическом жестком диске) - Время создания, время последней модификации, владелец файла указаны буквально.
- Защищайте информацию. Например, для этого файла
执行权限
, есть ли права на удаление файлов, изменение прав доступа к файлам и так далее.
5.2 Как данные внутри файла организованы вместе
Как показано на рисунке ниже, файлы в основном разделены на有结构文件
а также无结构文件
.
5.3 Как организованы файлы
пройти через树状结构
организационный. Напримерwindows
Организационные отношения между файлами следующие:
Далее мы узнаем больше о文件的逻辑结构
5.4 Логическая структура файла
Логическая структура относится к тому, как данные внутри файла организованы с точки зрения пользователя.“物理结构”
С точки зрения операционной системы, как файл сохраняется во внешней памяти, например硬盘
середина.
Например,“线性表”
Это логическая структура.С точки зрения пользователя, линейная таблица представляет собой последовательность элементов с последовательной связью, например:a,b,c,d,e....
-
“线性表”
Эта логическая структура может быть реализована с помощью различных физических структур, таких как:顺序表/链表
.顺序表
Элементы логически смежны и физически смежны: в то время как链表
Отдельные элементы могут быть физически не прилегающими. - Следовательно, последовательная таблица может быть реализована
“随机访问”
,а также“链表”
Произвольный доступ невозможен.
Далее я пойму три логические структуры структурированных файлов.
5.4.1 Файл последовательности
Что такое последовательный файл
Логически ссылается на записи в файле одну за другой顺序排列
, запись может быть定长
или变长
, каждая запись может быть физически顺序存储
или链式存储
- Последовательные файлы разделены по структуре и могут быть разделены на
串结构
а также顺序结构
. - Структура Структура относится к заказу между записями и
关键字无关
Обычно определяется в порядке записи по времени записи. - Последовательная структура должна обеспечивать порядок записей.
关键字排列
.
Знания, на которые следует обратить внимание, — это метод хранения и то, сохраняется ли последовательный файл или нет.按关键字排列
, что влияет на данные是否支持随机存取
а также是否可以快速按关键字找到对应记录
функция.
Вы можете видеть, что порядок файлов для того, чтобы найти магазин, очень полезен, мы также можем отметить, что использование этого документа во время записи.
5.4.2 Индекс файла
для可变长记录文件
, найти第i
сначала нужно искать записи последовательно前i-1
Запись (то есть ее нужно пройти один раз), но записи переменной длины должны использоваться во многих сценариях Как решить эту проблему? Это приводит к тому, о чем я говорю сразу索引文件
-
Индексная таблица используется для записи этих записей переменной длины, а запись индексной таблицы включает
索引号
,长度
а также指针
. -
Среди них ключевое слово может использоваться как содержание индексного номера, а если расположение самих ключевых слов в порядке, то поиск может выполняться и пополам по ключевому слову. Это ключ, потому что мы обычно используем базу данных mysql для индексации поля, что и является причиной.
-
Однако проблема построения индексной таблицы также очевидна.Прежде всего, если вы хотите
删除/增加
рекорд, но и для索引表
операции, а во-вторых, если增加一条记录才1KB
, но индексная таблица增加i一条记录可能有8KB
, так что объем индексной таблицы намного больше записи. Использование дискового пространства относительно низкое.
5.4.3 Индексирование последовательных файлов
Файл порядка индекса索引文件
а также顺序文件
сочетание идей. В файле индексной последовательности также создается индексная таблица для файла, но разница в том, что не каждая запись соответствует одной索引表项
, но набор записей соответствует элементу индекса.
Как показано выше, студенческие записи сгруппированы в соответствии с инициалами имени учащегося. Каждая группа представляет собой последовательный файл, и записи в группе не нужно сортировать по ключевым словам.
5.5 Каталог файлов
Во-первых, нам нужно понять文件控制
что такое блок. Мы предполагаем, что в настоящее времяwindows的D盘
,Как показано ниже
Как видите, сам каталог представляет собой有结构的文件
, записанный в справочнике文件
а также目录
информацию, такую как имя и тип. И эти записи одна за другой“文件控制块”(FCB)
.
Структура файлового каталога обычно树状的
, например в линуксе/
это корневой путь,/home
является дополнительным каталогом по корневому пути
- Следует отметить, что древовидный каталог
不容易实现文件共享
Следовательно, на основе структуры каталогов деревьев существует увеличение направления одного и того же узла, направленного на тот же узел (который можно просто понимать как опорные отношения, как и объект в JS) - То есть, это должно быть
每个共享节点
установить один共享计数器
, который используется для записи того, сколько мест совместно используют узел в данный момент. Только共享计数器减为0
, удалите узел.
Метод размещения файлов (физическое размещение)
Здесь мы вводим способ распределения индекса:
Распределение индексов позволяет дискретно размещать файлы в каждом блоке диска.Система создаст таблицу индексов для каждого файла, а в таблице индексов записываются физические блоки, соответствующие каждому логическому блоку файла. Блоки диска, хранящиеся в индексной таблице, называются индексными блоками. Блоки диска, в которых хранятся данные файла, называются блоками данных.
Как показано на рисунке выше, предположим, что данные вновь созданного файла 'aaa' поочередно хранятся в дисковых блоках 2->5->13>9. Дисковый блок № 7 используется в качестве индексного блока ' aaa', а индексный блок сохраняет содержимое индексной таблицы
Логическое и физическое размещение файлов
Выше мы говорили о логическом размещении файлов, то есть о размещении с точки зрения пользователя, и о физическом размещении с точки зрения операционной системы, которая выделяет место на реальном физическом диске.
Например, файлы, которые видят наши пользователи, расположены в их сознании по порядку.Например, в таблице excel есть 100 строк данных, и пользователь как будто думает, что эти 100 строк данных являются непрерывными.
С точки зрения операционной системы, она может разделить 100 строк данных на блоки данных, например, 1 КБ в качестве дискового блока (при условии, что дисковый блок имеет размер 1 КБ), а разделенные данные могут быть выделены в виде индексная таблица (То есть, как мы упоминали выше, способ размещения индекса разбросан и размещен на реальном физическом диске)
5.6 Управление местом хранения файлов
Во-первых, давайте понять, что диск разделен на目录区
а также文件区
.
Далее рассмотрим два общих文件存储空间的管理算法
, как показано на рисунке ниже, если жесткий диск空闲的数据块
синий,非空闲的数据
Блоки оранжевые.
Для выделения непрерывного пространства для хранения вы можете использовать空闲表法
(рассказываем только об этом более простом методе)分配
а также回收
дисковый блок. Для распределения можно использовать такие алгоритмы, как первое соответствие, наилучшее соответствие и т. д., чтобы решить, какой интервал выделить файлу. (Свободный список представлен следующим образом)
-
首次适应
Это означает, что когда данные должны быть вставлены, свободная таблица по очереди проверит записи в свободной таблице, а затем найдет第一个满足条件
свободное место. -
最佳适应算法
Это означает, что когда данные должны быть вставлены, свободная таблица по очереди проверит записи в свободной таблице, а затем найдет满足条件而且空闲块最小的空闲区间
.
Другой растровый метод
Как показано ниже:
Каждый двоичный бит соответствует блоку диска, например, 0 выше представляет собой свободный блок, а 1 представляет выделенный блок. Кроме того, мы можем вывести фактический адрес физического блока по абсциссе и ординате таблицы представления с помощью определенной формулы, а также мы можем вывести абсциссу и ординату в таблице из фактического адреса физического блока.
5.7 Совместное использование файлов
Существует два типа обмена файлами
-
Обратите внимание, что несколько пользователей
共享同一个文件
означает, что система только“一份”
данные файла. И пока пользователь изменяет данные файла, другие пользователи также могут видеть文件的变化
. -
Мягкое соединение можно понимать как
windows
внутренний快捷方式
. -
Жесткие ссылки можно понимать как в js
引用计数
, упоминается только как0
фактически удалит файл.
5.8 Защита файлов
Операционная система должна обеспечивать безопасность файлов тремя способами:
- Защита паролем. означает установить
“口令”
(например, 123), пользователь должен указать соответствующий пароль при запросе доступа к файлу. Пароль обычно помещается в соответствующий файлFCB或者索引结点
начальство. - Защита от шифрования. использовать
"密码"
Зашифровать файл, который необходимо предоставить при доступе к файлу正确的“密码”
чтобы правильно расшифровать файл. - Контроль доступа. Добавьте один в FCB или inode каждого файла
访问控制列表
, который записывает, какие действия каждый пользователь может выполнять с файлом.
Обобщить содержимое файловой системы
Давайте возьмем реальный случай, чтобы обобщить вышеизложенное.
Предположим, наша текущая операционная система использует следующие методы управления файловой системой:
- Физическая структура файла --- выделение индекса (смешанный индекс)
- Реализация каталога файлов --- узел inode
- Бесплатное управление разделами --- растровый метод
Затем мы предполагаем, что дисковый блок 0 — это дисковый блок битового массива загрузки, который используется для управления тем, какие диски свободны, а какие используются.
Поскольку здесь мы использовали блок 0, первый элемент растрового изображения равен 1.
Затем мы используем второй блок блока диска, чтобы поместить узел inode, который является узлом индекса каталога файлов, что означает, что в каталоге файлов хранятся только имя файла и расположение узла индекса.Чтобы узнать подробную информацию файла, мы должны полагаться на
Предполагая, что блок диска № 2 хранит информацию о нашем корневом каталоге, а его собственный каталог на самом деле является специальным файлом, он также имеет свою собственную информацию в таблице узлов inode, а блок диска № 1 добавляет информацию, подобную следующей:
类型:目录
存放在:2号磁盘块
Дисковый блок 2 содержит你好.txt
файла, то блок диска №2 добавит строку информации, аналогичную
文件名:你好.txt
inode结点:2
Это означает, что узел inode № 2 хранит определенный дисковый блок файла hello.txt, поэтому добавляется узел inode № 2 дискового блока № 1.
类型:txt
存放在:3、4号磁盘块
Зачем нам ставить 3-й и 4-й блоки диска?Поскольку у нас есть растровое изображение, мы знаем, какие блоки диска свободны и назначаем их ему.Как только сканирование обнаружит, что 3 и 4 свободны и соответствуют условиям хранения этого файла, мы выделит их..
Давайте разделим, что здесь означают 3-й и 4-й блоки диска, потому что наш метод выделения блоков физического диска представляет собой смешанный индекс, на самом деле 3-й и 4-й блоки диска представлены следующим образом:
直接索引:3号磁盘块
直接索引:4号磁盘块
Вышеизложенное касается только прямых индексов.На самом деле у нас могут быть индексы уровня 1 и индексы уровня 2. Эти индексы указывают на индексную таблицу, которую мы не будем здесь подробно описывать (индексный блок и индексная таблица были отправлены ранее).
На данный момент мы в основном поняли основной принцип работы файловой системы.
6 устройств ввода/вывода
Что такое устройство ввода/вывода
Ввод/вывод输入输出
(Ввод/вывод) означает, что устройство ввода/вывода является внешним устройством, которое может вводить данные в компьютер или может получать выходные данные с компьютера, и является аппаратным компонентом компьютера.
6.1 Классификация устройств ввода-вывода — характеристики по использованию
- Устройства взаимодействия человека с компьютером, которые медленно передают данные
- Устройства хранения, которые быстрее передают данные
- Сетевое коммуникационное оборудование, скорость передачи такого оборудования находится между оборудованием взаимодействия человека с компьютером и оборудованием для хранения данных.
6.2 Контроллер ввода/вывода
ЦП не может напрямую управлятьI/O设备的机械部件
, поэтому устройство ввода-вывода также имеет электронный компонент, какCPU
а такжеI/O设备
между механическими частями“中介”
, который используется для реализации управления устройством со стороны ЦП. Эта электронная частьI/O控制器
.
- Получение и идентификация инструкций, выданных ЦП, относится, например, к команде, отправленной ЦП для чтения файла, и соответствующая команда будет в контроллере ввода-вывода.
控制寄存器
для хранения команд и параметров - Сообщение о состоянии устройства процессору означает, что контроллер ввода-вывода будет иметь соответствующие
状态寄存器
, используется для записи устройств ввода/вывода是否空闲
или忙碌
- Обмен данными означает, что контроллер ввода-вывода установит соответствующий
数据寄存器
. вывод, регистр данных используется для暂存CPU发来的数据
, а затем отправляется контроллером на устройство. - Распознавание адресов означает, что для того, чтобы различать каждый регистр в каждом регистре в контроллере устройства, также необходимо установить характеристику для каждого регистра.
“地址”
. Контроллер ввода-вывода использует «адрес», предоставленный ЦП, чтобы определить, какой регистр ЦП хочет читать и записывать.
6.3 Режим управления вводом/выводом
-
Здесь мы ссылаемся на более продвинутый метод, метод управления каналом.
-
Канал может быть понят как
“弱鸡版CPU”
. Канал может распознавать и выполнять ряд команд канала.
Самый большой плюс канала это здорово减少了CPU的干预频率
,I/O设备
Когда задача будет выполнена, канал выдаст сообщение ЦП.中断
, нет необходимости опрашивать устройство ввода-вывода, выполнило ли оно задачу, назначенную ЦП.
На этом статья заканчивается.
Примечание: позже будут вводные знания о структурах данных (обычно используемые структуры данных и формы хранения в памяти, а также сравнение временной сложности добавления, удаления, изменения и проверки)
Примечание: Большая часть информации в этой статье взята из следующих обучающих видеоматериалов