Операционная система для занятых людей

задняя часть Операционная система

Основная структура статьи следующая

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

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

Однако программисты не имеют дело непосредственно с этим оборудованием, и каждый программист не может понять все детали компьютерной системы, поэтому нам не нужно писать код, поэтому поверх оборудования компьютер устанавливает слой программного обеспечения, этот уровень программного обеспечения может достигать эффекта управления аппаратным обеспечением, отвечая на инструкции, вводимые пользователем, чтобы удовлетворить потребности пользователя, такое программное обеспечение называется操作系统, его задача — предоставить лучшую, более простую и понятную компьютерную модель для пользовательских программ.

Наши распространенные операционные системы в основномWindows, Linux, FreeBSD или OS X, эта операционная система с графическим интерфейсом называется图形用户界面(Graphical User Interface, GUI), в то время как текстовые, основанные на командной строке, обычно называютсяShell. Вот компоненты операционной системы, которые мы собираемся обсудить

Это упрощенная схема операционной системы.Нижняя часть-это аппаратное обеспечение.К аппаратному обеспечению относятся микросхемы, печатные платы,диски,клавиатуры,мониторы и другие устройства,о которых мы упоминали выше.Над аппаратным обеспечением находится программное обеспечение. Большинство компьютеров имеют два режима работы:内核态и用户态, самая основная часть программного обеспечения操作系统, который работает на内核态, состояние ядра также называется管态и核心态, они являются рабочим состоянием операционной системы, но называются по-разному. Операционная система имеет доступ к аппаратному обеспечению и может выполнять любые инструкции, которые способна выполнять машина. Остальное ПО работает用户态Вниз.

用户接口程序(shell 或者 GUI)Они находятся в пространстве пользователя и находятся на самом низком уровне пространства пользователя, что позволяет пользователям запускать другие программы, такие как веб-браузеры, программы для чтения электронной почты, музыкальные проигрыватели и т. д. Также, чем ближе к userland, тем проще написать приложение, если вам не нравится программа для чтения электронной почты, вы можете ее переписать или заменить, но вы не можете написать операционную систему или обработчик прерываний самостоятельно. Эта программа аппаратно защищена от внешних модификаций.

Введение в компьютерное оборудование

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

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

CPU

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

Каждый ЦП имеет определенный набор инструкций, которые он может выполнять. Следовательно, процессоры x86 не могут выполнять программы ARM, а процессоры ARM не могут выполнять программы x86. Поскольку доступ к памяти для получения выполнения или данных занимает больше времени, чем выполнение инструкций, все процессоры содержат некоторые寄存器для хранения ключевых переменных и временных результатов. Поэтому обычно в наборе инструкций есть инструкции для загрузки ключевых слов из памяти в регистры и сохранения ключевых слов из регистров в память. Существуют и другие инструкции, которые объединяют операнды из регистров и памяти, например, операция сложения добавляет два операнда и сохраняет результат в памяти.

В дополнение к регистрам общего назначения, используемым для хранения переменных и временных результатов, в большинстве компьютеров есть несколько специальных регистров, видимых программисту. Один из них является程序计数器(program counter), счетчик программ укажет адрес следующей инструкции, которую необходимо извлечь из памяти. После того, как команда выбрана, программный счетчик обновляется до следующего адреса, который будет выбран.

Другой регистр堆栈指针(stack pointer), который указывает на вершину текущего стека в памяти. Указатель стека будет содержать соответствующие параметры, локальные переменные и временные переменные, не сохраненные в регистрах во время процесса ввода.

Другой регистрPSW(Program Status Word)Регистр слова состояния программы, представляющий собой 8-байтовый (64-битный) набор данных, поддерживаемый операционной системой. Он отслеживает текущее состояние системы. Мы можем игнорировать PSW, если не произойдет конец системы. Пользовательские программы обычно могут читать весь PSW, но обычно могут записывать только некоторые его поля. PSW играет важную роль в системных вызовах и вводе-выводе.

Операционная система должна знать обо всех регистрах. существует时间多路复用(time multiplexing)В процессорах операционная система часто останавливает выполнение одной программы и запускает другую. Каждый раз, когда операционная система прекращает выполнение программы, операционная система сохраняет значения всех регистров, чтобы программу можно было повторно запустить позже.

Чтобы повысить производительность, разработчики процессоров уже давно отказались от одновременного чтения, декодирования и выполнения простых инструкций. Многие современные процессоры имеют механизмы для одновременного получения нескольких инструкций. Например, ЦП может иметь отдельные блоки доступа, декодирования и выполнения, поэтому, когда ЦП выполняет N-ю инструкцию, он также может декодировать N + 1 инструкцию, а также может читать N + 2 инструкции. Такие организационные формы называются流水线(pipeline),

Более продвинутый дизайн, чем конвейерная обработка超标量(superscalar)ЦП, ниже приведена конструкция суперскалярного ЦП.

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

За исключением очень простых ЦП, используемых во встроенных системах, большинство ЦП имеют两种模式, то есть режим ядра и пользовательский режим, упомянутые ранее. как правило,PSW 寄存器Двоичный бит в элементе управления будет контролировать, является ли текущее состояние режимом ядра или пользовательским режимом. При работе в режиме ядра ЦП может выполнять инструкции в любом наборе инструкций и может использовать функции аппаратного обеспечения. На настольных компьютерах и серверах операционная система обычно работает в режиме ядра, предоставляя доступ ко всему оборудованию. В большинстве встраиваемых систем некоторые из них работают в режиме ядра, а остальные — в пользовательском режиме.

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

Для того, чтобы получить услуги операционной системы, пользовательская программа должна использовать系统调用(system call), системный вызов будет преобразован в режим ядра и вызовет операционную систему.TRAPИнструкции используются для переключения из пользовательского режима в режим ядра и включения операционной системы. Когда соответствующая работа выполнена, инструкции, следующие за системным вызовом, передают управление программе пользователя. Детали вызова операционной системы мы обсудим позже.

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

Многопоточные и многоядерные чипы

Представлен Intel Pentium 4, также известный как процессор Pentium.多线程(multithreading)или超线程(hyperthreading, Intel 公司的命名), что и делают процессоры x86 и некоторые другие процессорные чипы. включаютСерия SSPARC, Power5, Intel Xeon и Intel Core. Грубо говоря, многопоточность позволяет ЦП поддерживать два разных состояния потока и纳秒级(nanosecond)время для завершения переключения. Поток — это легковесный процесс, о котором мы поговорим позже. Например, если процессу требуется прочитать инструкции из памяти (что обычно занимает несколько тактов), многопоточный ЦП может переключиться на другой поток. Многопоточность не обеспечивает истинной параллельной обработки. Одновременно работает только один процесс.

Многопоточность имеет смысл для операционной системы, поскольку каждый поток представляется операционной системе как отдельный ЦП. Например, ОС с двумя ЦП, и каждый ЦП выполняет два потока, тогда для ОС может быть 4 ЦП.

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

Ничто не сравнится с Hyundai, когда речь идет об абсолютном количестве ядер.GPU(Graphics Processing Unit), GPU относится к процессору, состоящему из тысяч крошечных ядер. Они хорошо справляются с массовыми параллельными простыми вычислениями.

ОЗУ

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

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

регистр

Верхний слой памяти находится в ЦП寄存器, они сделаны из того же материала, что и ЦП, поэтому работают так же быстро, как ЦП. Программы должны сами управлять этими регистрами в программном обеспечении (т.е. решать, как их использовать).

тайник

Под регистром находится高速缓存, которые в основном контролируются аппаратным обеспечением. Основная память делится на高速缓存行(cache lines)Для 64 байт адреса памяти 0–63 соответствуют строке кэша 0, адреса 64–127 соответствуют строке кэша 1 и так далее. Наиболее часто используемые строки кэша хранятся в кэшах, расположенных внутри ЦП или очень близко к нему. Когда приложению необходимо прочитать ключевое слово из памяти, кэширующее оборудование проверяет, находится ли в кеше нужная строка кэша. Если это так, то это高速缓存命中(cache hit). Кэш выполнил запрос, и запрос памяти не был отправлен по шине в основную память. Попадание в кэш обычно занимает два такта. Кэш-промахи необходимо извлекать из памяти, что занимает много времени. Строки кэша ограничивают размер емкости, потому что это очень дорого. Некоторые машины имеют два или три уровня кэша, каждый из которых медленнее и больше, чем предыдущий уровень.

Кэши играют очень важную роль во многих областях компьютера, а не только в строках кэша оперативной памяти.

Оперативная память (ОЗУ): самый важный тип памяти, что означает, что данные могут быть как считаны, так и записаны. Когда машина выключена, информация в памяти будет丢失.

Большое количество доступных ресурсов разделено на небольшие части, и некоторые из этих доступных ресурсов используются чаще, чем другие, а для повышения производительности часто используется кэширование. Операционная система не использует кэш все время. Например, большинство операционных систем хранят часто используемые файлы (часть) в памяти хоста, чтобы избежать повторной выборки с диска. Например, что-то вроде/home/ast/projects/minix3/src/kernel/clock.cРезультат преобразования такого поля pathname в адрес диска, на котором находится файл, также можно сохранить в кэше, чтобы избежать повторной адресации. Кроме того, когда адрес веб-страницы (URL) преобразуется в сетевой адрес (IP-адрес), результат преобразования также можно кэшировать для использования в будущем.

В любой системе кэширования будут следующие проблемы, которые необходимо решить

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

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

Кэши — хороший способ решения проблем, поэтому современные процессоры имеют два типа кешей. кэш первого уровня илиL1 cacheвсегда внутри процессора,Исполнительный механизм, используемый для вызова декодированных инструкций в ЦП.. Для этих часто используемых ключевых слов большинство чипов имеют второй кэш L1. Типичный размер кэша L1 составляет 16 КБ. Кроме того, часто имеется кэш второго уровня, т.е.L2 cache, используемый для хранения недавно использованных ключевых слов, обычно в мегабайтах. Самая большая разница между кешем L1 и кешем L2 заключается в наличии задержки. Задержки при доступе к кешу L1 нет, а при доступе к кешу L2 есть задержка в 1-2 такта.

Что такое тактовый цикл? Скорость компьютерного процессора или ЦП определяется тактовым циклом, который представляет собой количество времени между двумя импульсами генератора. Как правило, чем выше число импульсов в секунду, тем быстрее компьютерный процессор может обрабатывать информацию. Тактовая частота измеряется в Гц, обычно в мегагерцах (МГц) или гигагерцах (ГГц). Например, процессор с частотой 4 ГГц выполняет 4 000 000 000 тактовых циклов в секунду.

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

основная память

Следующим уровнем в вышеприведенной иерархии является主存, которая является рабочей лошадкой системы памяти, часто называют основной памятьюRAM(Random Access Memory), которую в старые времена иногда называли основной памятью, потому что в компьютерах 1950-х и 1960-х годов в качестве основной памяти использовались крошечные намагничиваемые ферритовые сердечники. Все запросы на доступ к памяти, которые больше не могут быть удовлетворены в кеше, перенаправляются в основную память.

В дополнение к основной памяти многие компьютеры также имеют небольшой объем энергонезависимой оперативной памяти. В отличие от оперативной памяти, энергонезависимая оперативная память не теряет своего содержимого после отключения питания.ROM(Read Only Memory)После того, как содержимое сохранено, оно не будет изменено. Это очень быстро и дешево. (Если кто-нибудь спросит вас, существует ли какое-либо быстрое и дешевое запоминающее устройство, то это ПЗУ.) В компьютере модуль загрузчика (он же загрузчик), который используется для запуска компьютера, хранится в ПЗУ. Кроме того, некоторые карты ввода-вывода также используют ПЗУ для низкоуровневого управления устройствами.

EEPROM(Electrically Erasable PROM,)и闪存(flash memory)Тоже энергонезависимые, но в отличие от ПЗУ их можно стирать и перезаписывать. Однако их перезапись занимает больше времени, чем запись в ОЗУ, поэтому они используются так же, как и ПЗУ, но в отличие от ПЗУ могут исправлять ошибки в программе путем перезаписи полей.

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

Другая категория — CMOS, которая является энергозависимой. Многие компьютеры используют память CMOS для хранения текущего времени и даты.

диск

Следующий уровень磁盘(硬盘), диски на два порядка дешевле в расчете на бит, чем оперативная память, и часто имеют на два порядка большую емкость. Единственная проблема с диском заключается в том, что время произвольного доступа к данным примерно на три порядка меньше. Причина медленного доступа к диску заключается в том, что диски устроены по-разному.

Магнитный диск — это механическое устройство, в котором есть одна или несколько металлических пластин, вращающихся со скоростью 5400, 7200, 10800 об/мин или более. С края пластины свисает механический рычаг, похожий на рычаг звукоснимателя на старом проигрывателе с 33 оборотами, который проигрывал пластиковые пластинки. Информация записывается на диск в виде ряда концентрических кругов. При любом заданном положении руки каждая голова может прочитать круглую область, называемую磁道(track). Объединяет все треки в заданном положении руки, чтобы сформировать柱面(cylinder).

Каждая дорожка разделена на несколько секторов, и значение сектора составляет 512 байт. В современных дисках внешние цилиндры имеют больше секторов, чем внутренние цилиндры. Роботизированной руке требуется около 1 мс, чтобы переместиться с одного цилиндра на соседний цилиндр. Типичное время случайного перемещения к цилиндру составляет от 5 мс до 10 мс, в зависимости от привода. Как только магнитный рычаг окажется на правильной дорожке, диск должен дождаться, пока желаемый сектор прокрутится под головкой, а затем начать чтение и запись.50MB/s, а скорость высокоскоростного диска160MB/s.

требует внимания,固态硬盘(Solid State Disk, SSD)Не диск, SSD не имеет движущихся частей, не похож на пластинку, а данные хранятся в存储器(闪存), единственное сходство с диском заключается в том, что на нем также хранится много данных, которые не будут потеряны даже при отключении питания.

Многие компьютеры поддерживают хорошо известную虚拟内存Механизм, который делает ожидаемое пространство для хранения больше, чем реальное физическое пространство для хранения. Метод заключается в том, чтобы поместить программу на диск и использовать основную память как часть кеша для сохранения наиболее часто используемой части программы.Этот механизм должен быстро отображать адрес памяти, который используется для преобразования адреса сгенерированные программой в соответствующие байты физического адреса в ОЗУ. Это изображение вызывается одним из ЦП存储器管理单元(Memory Management Unit, MMU)компоненты для завершения.

Очень важное влияние на производительность системы оказывает внешний вид кеша и MMU.В многопрограммной системе механизм переключения с одной программы на другую называется上下文切换(context switch), необходимо изменить ресурс из кеша и записать его обратно на диск.

Устройство ввода/вывода

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

Во многих случаях процесс фактического управления устройством очень сложен и имеет множество деталей. Таким образом, задача контроллера — предоставить более простой (но все же очень сложный) интерфейс для операционной системы. То есть экранирование физических деталей.Любую сложную вещь можно решить, добавив слой агентов, что является очень распространенным решением для компьютеров или человеческого общества.

Другая часть устройства ввода-вывода — это само устройство, которое имеет относительно простой интерфейс, потому что интерфейс не выполняет много работы и стандартизирован. Например, любой контроллер диска SATA можно адаптировать к любому диску SATA после стандартизации, поэтому стандартизация необходима.ATAпредставлять高级技术附件(AT Attachment), а SATA означает串行高级技术附件(Serial ATA).

Что такое АТ? Это второе поколение персональных компьютеров IBM.高级Технологическое достижение с использованием процессора 80286 с тактовой частотой 6 МГц, представленного в 1984 году, самого мощного процессора того времени.

Такие слова, как «продвинутый», следует употреблять с осторожностью, иначе, оглядываясь на 20 лет спустя, вас могут нещадно оплевать.

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

Каждый тип контроллера устройства отличается, поэтому для управления требуется различное программное обеспечение. Программное обеспечение, которое специально взаимодействует с контроллером, отправляет инструкции по обработке команд и получает ответ, называется设备驱动程序(device driver). Каждый производитель контроллеров должен предоставлять разные драйверы устройств для разных операционных систем.

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

  • Первый способ — переподключить ядро ​​с лаунчером устройства и перезагрузить систему. ЭтоUNIXКак работает система
  • Второй подход заключается в создании записи в файле операционной системы, которая информирует файл о том, что требуется драйвер устройства, а затем перезагружает систему. Когда система перезагружается, операционная система ищет соответствующую программу запуска устройства и загружает ее, чтоWindowsспособ работы
  • Третий подход заключается в том, что операционная система может получать новые драйверы устройств во время выполнения и устанавливать их немедленно, не перезагружая операционную систему.Этот подход менее распространен, но становится все более распространенным. Устройства с возможностью горячей замены, такие как USB и IEEE 1394, требуют динамически загружаемых драйверов устройств.

Каждый контроллер устройства имеет небольшое количество регистров для связи, например, минимальный контроллер диска также будет иметь регистры для указания дисковых адресов, адресов памяти и количества секторов. Чтобы активировать контроллер, драйвер устройства получает инструкцию от операционной системы, преобразует ее в соответствующее значение и записывает в регистр устройства.Комбинация всех регистров устройства составляетI/O 端口空间.

На некоторых компьютерах регистры устройств сопоставляются с доступным адресным пространством операционной системы, что позволяет считывать и записывать их точно так же, как память. В таком компьютере не требуется никаких специальных инструкций ввода-вывода, а пользовательские программы могут аппаратно блокироваться от доступа к этим адресам памяти (например, с помощью базовых и индексных регистров). На других компьютерах регистры устройств помещаются в выделенное пространство порта ввода-вывода, и каждый регистр имеет адрес порта. Среди этих компьютеров выделяются специальныеINиOUTИнструкции активируются в режиме ядра и позволяют читать и записывать драйверы устройств и регистры. Первый подход ограничивает использование специальных инструкций ввода-вывода, но допускает некоторое адресное пространство; последний не требует адресного пространства, но требует специальных инструкций, которые широко используются.

Есть три способа реализации ввода и вывода.

  • В простейшем случае пользовательская программа делает системный вызов, ядро ​​переводит его в программный вызов для соответствующего драйвера, а драйвер устройства инициирует ввод-вывод и циклически проверяет устройство, чтобы проверить, выполнило ли устройство работу (обычно там). будут биты, чтобы указать, что устройство все еще занято). Когда вызов ввода-вывода завершен, драйвер устройства отправляет данные в указанное место и возвращается. Затем операционная система передает управление вызывающей стороне. Этот способ называется忙等待(busy waiting), недостатком этого метода является то, что ЦП все время занимает ЦП, а ЦП будет продолжать опрашивать устройство ввода-вывода до тех пор, пока операция ввода-вывода не будет завершена.
  • Второй способ заключается в том, чтобы драйвер устройства запускал устройство и прерывал работу устройства по завершении операции. Драйвер устройства возвращается в этот момент. Затем операционная система при необходимости блокирует вызывающего абонента и организует выполнение других действий. Когда драйвер устройства обнаруживает, что операция устройства завершена, он выдает中断Сообщите, что операция завершена.

В операционных системах прерывания очень важны, поэтому об этом нужно поговорить подробнее.

Как показано на рисунке выше, это трехэтапный процесс ввода-вывода.На первом этапе драйвер устройства сообщает контроллеру, что делать, записывая в регистры устройства. Затем контроллер запускает устройство. Когда контроллер завершает чтение или запись байтов, которые, как ему было сказано, необходимо передать, он сигнализирует контроллеру прерываний на шаге 2, используя некоторую шину. Если контроллер прерываний готов принять сигнал прерывания (может и не получиться, если он занят прерыванием с более высоким приоритетом), то он устанавливает сигнал на контакте ЦП. Это шаг 3

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

Как только ЦП решает реализовать прерывание, счетчик программ и PSW помещаются в текущий стек, и ЦП переключается в режим ядра. Номер устройства можно использовать как ссылку на память, чтобы найти адрес обработчика прерывания для этого устройства. Эта часть памяти называется中断向量(interrupt vector). После того, как обработчик прерываний (часть драйвера устройства для устройства прерывания) начинается, он удаляет счетчик программ и регистр PSW из стека, сохраняет их, а затем выбирает устройство для состояния. После того, как обработчик прерваний все это сделано, он вернется к первой инструкции, которая не была выполнена предыдущей пользовательской программой, процесс следующий следующим образом

  • Третий способ реализации ввода-вывода — использование специального оборудования:直接存储器访问(Direct Memory Access, DMA)чип. Он может управлять битовым потоком между памятью и некоторыми контроллерами без вмешательства процессора. ЦП установит чип DMA, указав количество передаваемых байтов, соответствующие адреса устройства и памяти, а также направление операции. Когда чип DMA завершает работу, он вызывает прерывание, и процесс прерывания описан выше. Мы подробно обсудим процесс прерывания позже

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

автобус

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

Система x86 на картинке выше содержит много шин,Кэш, память, PCIe, PCI, USB, SATA и DMI, каждая шина имеет разную скорость передачи и функцию. Операционная система должна понимать всю конфигурацию шины и управление ею. Основной автобус этоPCIe(Peripheral Component Interconnect Express)автобус.

Изобретенная Intel шина PCIe также является преемницей древней шины PCI, и древняя шина PCI также призвана заменить античный уровеньISA(Industry Standard Architecture)устанавливается автобусом. Способность передавать десятки Гбит/с делает PCIe намного быстрее своего предшественника, да и по своей сути они очень разные. До 2004 года, когда был изобретен PCIe, большинство шин были параллельными и общими.共享总线架构(shared bus architeture)Указывает, что несколько устройств используют одни и те же провода для передачи данных. Поэтому, когда несколько устройств отправляют данные одновременно, вам нужно лицо, принимающее решения, чтобы решить, кто может использовать шину. PCIe, с другой стороны, использует выделенный сквозной канал. используется в традиционном PCI并行总线架构(parallel bus architecture)Указывает, что одно и то же слово данных передается по нескольким проводам. Например, на традиционной шине PCI 32-битные данные передаются по 32 параллельным проводам. PCIe отличается, он выбирает串行总线架构(serial bus architecture), и отправлять все биты данных в сообщении по одному соединению (называемому каналом), как сетевой пакет. Это многое упрощает, так как больше не гарантируется, что все 32-битные данные прибудут точно в одно и то же место назначения в одно и то же время. Параллелизм по-прежнему можно эффективно использовать, распараллелив несколько путей данных. Например, 32 сообщения могут быть переданы параллельно с использованием 32 каналов данных.

В структуре, показанной выше, ЦП общается с памятью через шину DDR3, с периферийным графическим устройством (GPU) через шину PCIe и с периферийным графическим устройством (GPU) через шину PCIe.DMI(Direct Media Interface)Шина взаимодействует со всеми остальными устройствами через центр интеграции. А встроенный центр управления взаимодействует с USB-устройствами по последовательной шине, с жесткими дисками и DVD-приводами по шине SATA и кадрами Ethernet по PCIe.

Мало того, каждое ядро

USB(Univversal Serial Bus)это устройство, используемое для подключения к компьютеру всех медленных устройств ввода-вывода (таких как клавиатуры и мыши). USB 1.0 может обрабатывать нагрузки до 12 Мбит/с, в то время как USB 2.0 увеличивает скорость шины до 480 Мбит/с, а USB 3.0 может развивать скорость не менее 5 Гбит/с. Все USB-устройства можно подключить напрямую к компьютеру и сразу же начать работать, не требуя перезагрузки компьютера, как раньше.

SCSI(Small Computer System Interface)Шина — это высокоскоростная шина, используемая в высокоскоростных жестких дисках, сканерах и других устройствах, требующих большой пропускной способности. Сегодня они в основном используются в серверах и рабочих станциях и могут развивать скорость до 640 МБ/с.

процесс запуска компьютера

Затем с указанным выше оборудованием и поддержкой операционной системы наш компьютер может начать работать, так как же происходит процесс запуска компьютера? Ниже приведена лишь краткая версия процесса запуска.

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

На материнской плате есть基本输入输出系统(Basic Input Output System, BIOS)программа о. Внутри BIOS находится низкоуровневое программное обеспечение ввода-вывода, включая чтение с клавиатуры, запись на экран, дисковый ввод-вывод и другие процессы. Сегодня он хранится во флэш-памяти и является энергонезависимым, но может быть обновлен операционной системой при обнаружении ошибки в BIOS.

на компьютере启动(booted)Когда BIOS включен, он сначала проверит объем установленной оперативной памяти, установлены ли клавиатура и другие основные устройства и правильно ли они реагируют. Далее он начинает сканировать шину PCIe и PCI и находит все подключенные к ней устройства. Устройства Plug and Play также записываются. Если существующее устройство отличается от устройства при последней загрузке системы, новое устройство будет перенастроено.

После синего BIOS пытается сохранитьCMOSИнвентаризация устройства в хранилище Попытка запуска устройства

КМОП этоComplementary Metal Oxide Semiconductor(互补金属氧化物半导体)аббревиатура от. Это относится к технологии, используемой при производстве крупномасштабных микросхем интегральных схем, или микросхемы, изготовленной по этой технологии, которая представляет собой читаемую и записываемую часть на материнской плате компьютера.RAMчип. Из-за характеристик чтения и записи он используется на материнской плате компьютера для сохранения данных после того, как BIOS установил параметры аппаратного обеспечения компьютера.Эта микросхема используется только для хранения данных.

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

Пользователь может войти в программу настройки BIOS после загрузки системы, чтобы изменить список устройств. Затем определите, можно ли получить к нему доступ извне.CD-ROMи USB-драйвер для загрузки, если загрузка не удалась (то есть ее нет), система загрузится с жесткого диска, первый сектор в загрузочном устройстве считывается в память и выполняется. Этот сектор содержит программу, которая проверяет таблицу разделов, обычно в конце загрузочного сектора, чтобы определить, какой раздел активен. Затем прочитайте второй загрузчик из этого раздела, который читает ОС из активного раздела и загружает ее.

Затем операционная система запрашивает у BIOS информацию о конфигурации. Для каждого устройства проверяется наличие драйверов устройств. Если нет, пользователя спросят, нужно ли вставитьCD-ROMдрайвер (предоставляется производителем устройства) или загружается из Интернета. Когда драйверы устройств доступны, операционная система загружает их в ядро, инициализирует таблицы, создает необходимые фоновые процессы и запускает программу входа в систему или графический интерфейс.

Музей операционных систем

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

операционная система мейнфрейма

Некоторые операционные системы более высокого уровня представляют собой операционные системы для мейнфреймов, которые можно найти в центрах обработки данных крупных корпораций. Емкость ввода-вывода этих компьютеров отличается от емкости персональных компьютеров. Для большого компьютера нормально иметь 1000 дисков и миллионы гигабайт емкости, и друзья, у которых есть такой персональный компьютер, будут очень завидовать. Мейнфреймы также находятся на высокопроизводительных веб-серверах, крупных сайтах услуг электронной коммерции.

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

Следующим уровнем является серверная операционная система. Они работают на серверах, которые могут быть большими персональными компьютерами, рабочими станциями или даже мейнфреймами. Они обслуживают нескольких пользователей по сети и позволяют пользователям совместно использовать аппаратные и программные ресурсы. Сервер может предоставлять службы печати, файловые службы или веб-службы. Интернет-провайдеры используют несколько серверов, которые обеспечивают поддержку пользователей, позволяя веб-сайтам хранить веб-страницы и обрабатывать входящие запросы. Типичными серверными операционными системами являются Solaris, FreeBSD, Linux и Windows Server 201x.

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

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

С недавним появлением многоядерных чипов в персональных компьютерах обычные операционные системы для настольных компьютеров и ноутбуков также начинают работать с небольшими многопроцессорными системами, а количество ядер увеличивается со временем. Многие основные операционные системы, такие как Windows и Linux, могут работать на многоядерных процессорах.

система персонального компьютера

Следующая категория — операционные системы для персональных компьютеров. Современные операционные системы для персональных компьютеров поддерживают многопроцессорность. При запуске обычно запускаются десятки программ, и их функция заключается в обеспечении хорошей поддержки одного пользователя. Такие системы широко используются в обработке текстов, электронных таблиц, играх и доступе в Интернет. Типичными примерами являются Linux, FreeBSD, Windows 7, Windows 8 и Apple OS X.

операционная система карманного компьютера

По мере того, как аппаратное обеспечение становится все меньше и меньше, мы видим планшеты, смартфоны и другие портативные компьютерные системы. портативный компьютер илиPDA(Personal Digital Assistant),个人数字助理Это небольшой компьютер, который можно держать в руке и управлять им. Эта часть рынка была охвачена GoogleAndroidсистема и яблокоIOSведущий.

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

Встроенная операционная система работает на компьютере, который управляет устройством, не являющимся компьютером в общем смысле, и не позволяет пользователям устанавливать программное обеспечение. Типичными примерами являются такие устройства, как микроволновые печи, автомобили, DVD-рекордеры, мобильные телефоны и MP3-плееры. Все программное обеспечение работает в ПЗУ, что означает отсутствие защиты между приложениями, что приводит к некоторому упрощению. Основными встраиваемыми системами являются Linux, QNX и VxWorks.

Операционная система сенсорного узла

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

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

Операционная система реального времени

Другой тип операционной системы — это операционная система реального времени, и эти системы характеризуются временем как ключевым параметром. Например, в системе управления промышленными процессами компьютер реального времени на фабрике должен собирать данные о производственном процессе и использовать эти данные для управления машинами. Если действие должно произойти в определенный момент, то硬实时系统. Многие такие системы можно увидеть в промышленном управлении, гражданской авиации, военных и подобных приложениях. Другой тип системы软实时系统, в такой системе случайные нарушения конечного срока нежелательны, но допустимы, не вызывая необратимого ущерба. Такими системами являются цифровые аудио- или мультимедийные системы. Смартфоны также являются программными системами реального времени.

Операционная система смарт-карты

Минимальная операционная система работает на смарт-карте. Смарт-карта — это кредитная карта, содержащая чип ЦП. Он имеет очень строгие ограничения по энергопотреблению и пространству для хранения. Некоторые карты имеют одну функцию, например электронные платежи, некоторые смарт-карты ориентированы на Java. Это означает, что в ПЗУ смарт-карты имеется интерпретатор виртуальной машины Java (JVM).

Основные понятия операционной системы

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

процесс

Ключевое понятие операционной системы состоит в том, что进程(Process). Сущность процесса – это программа, выполняемая операционной системой. С каждым процессом связано地址空间(address space), который представляет собой список от места хранения некоторого минимального значения (обычно нуля) до места хранения некоторого максимального значения. В этом адресном пространстве процессы могут выполнять операции чтения и записи. В адресном пространстве хранится исполняемая программа, данные, необходимые программе, и ее стек. Также с каждым процессом связаны наборы ресурсов, которые обычно включают寄存器(registers)(Реестры обычно включают程序计数器(program counter)и堆栈指针(stack pointer)), список открытых файлов, внезапные тревоги, список связанных процессов и другую информацию о программах, которые необходимо выполнить. Вы можете думать о процессе как о контейнере, который содержит всю информацию, выполняющую программу.

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

После временного прерывания процесса таким образом, в следующий раз, когда приложение запустится здесь, оно должно быть восстановлено в то же состояние, в котором оно было прервано, что нам, пользователям, кажется привычным, но внутри операционная система делает огромные вещи.Это как футбольный матч, идеальный матч может игнорировать присутствие судьи.. Это также означает, что вся информация о процессе сохраняется при его приостановке. Например, процесс может иметь несколько файлов, открытых для чтения. С каждым файлом связан указатель, указывающий текущую позицию (т. е. номер следующего байта или записи, которую необходимо прочитать). Когда процесс приостановлен, эти указатели должны быть сохранены для выполнения после перезапуска процесса.readВызов сможет правильно прочитать данные. Во многих операционных системах вся информация, относящаяся к процессу, за исключением содержимого собственного адресного пространства процесса, хранится в таблице операционной системы, называемой进程表(process table), таблица процессов представляет собой массив или структуру связанного списка, и каждый существующий в данный момент процесс должен занимать одну из них.

Итак, приостановленный процесс состоит из: адресного пространства процесса (часто называемого磁芯映像, образ сердечника, память о прошлом магнитном сердечнике) и соответствующую запись в таблице процессов (которая включает в себя регистры и много другой информации, необходимой для запуска процесса позже).

Наиболее важными системными вызовами, связанными с управлением процессами, часто являются те, которые определяют создание и завершение процессов. Рассмотрим типичный пример, есть命令解释器(command interpreter)илиshellПроцесс считывает команды с терминала. В этот момент пользователь только что набрал команду для компиляции программы. Оболочка должна сначала создать новый процесс для выполнения скомпилированной программы, а когда скомпилированная программа завершается, она выполняет системный вызов для завершения своего собственного процесса.

Если процесс может создать один или несколько процессов (называемых子进程), и эти процессы могут создавать дочерние процессы, легко найти количество процессов, как показано ниже

На приведенном выше рисунке показана схема дерева процессов Процесс A создает два подпроцесса B и процесс C, а подпроцесс B создает три подпроцесса D, E и F.

Связанные процессы, которые взаимодействуют друг с другом для выполнения некоторой работы, часто должны взаимодействовать друг с другом для завершения работы.进程间通信(interprocess communication). Мы обсудим взаимодействие между процессами позже.

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

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

По истечении ограниченного времени операционная система отправляет警告信号(alarm signal). Этот сигнал вызывает временную приостановку процесса, независимо от того, что делает процесс, система сохраняет значение своих регистров в стек и запускает перезапуск специального обработчика сигнала, например повторной отправки сообщений, которые могли быть потеряны. Эти сигналы представляют собой аппаратные прерывания, эмулируемые программным обеспечением, которые могут генерироваться по разным причинам, кроме истечения времени таймера. Многие ловушки, обнаруженные аппаратным обеспечением, такие как выполнение недопустимой инструкции или использование недопустимого адреса, также преобразуются в этот сигнал и передаются процессу.

Системный администратор разрешает каждому процессу использоватьUID(User IDentification). Каждый запущенный процесс имеет UID, назначенный операционной системой, а дочерний процесс имеет тот же UID, что и родительский процесс. Пользователь может быть членом группы, каждая группа также имеетGID(Group IDentification).

В операционных системах UNIX существует UID, который超级用户(superuser), или в Windows管理员(administrator), у которого есть особые права на нарушение некоторых правил защиты. В больших системах только системный администратор имеет контроль над теми пользователями, которых можно назвать суперпользователями.

адресное пространство

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

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

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

Однако на многих компьютерах с 32-битными или 64-битными адресами имеется 2^32 или 2^64 байта адресного пространства соответственно. Что, если адресное пространство процесса больше, чем основная память компьютера, и процесс хочет использовать всю память? Это не могло быть обработано в ранних компьютерах. Но теперь есть虚拟内存технологии, как упоминалось ранее, операционная система может загружать часть адресного пространства в оперативную память, часть оставлять на диске и менять их местами по мере необходимости.

документ

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

Чтобы предоставить место для сохранения файлов, большинство операционных систем персональных компьютеров имеют目录(directory)концепция группировки файлов. Например, учащийся может создать один каталог для каждого курса для хранения ресурсов по этому предмету, другой для электронной почты и еще один для домашней страницы World Wide Web. Для этого требуются системные вызовы для создания и удаления каталогов, помещения существующих файлов в каталоги, удаления файлов из каталогов и т. д. Элементы каталога могут быть файлами или каталогами, а каталоги и каталоги также могут быть вложенными, создавая таким образом файловую систему.

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

К каждому файлу в иерархии каталогов можно получить доступ из верхней части каталога, т.е.根目录(Root directory)началось路径名(path name)Чтобы убедиться. Абсолютный путь содержит список всех каталогов от корневого каталога до файла, разделенных косой чертой, в указанной выше файловой системе факультета университета, путь к файлу CS101 равен/Faculty/Prof.Brown/Courses/CS101. Начальный разделитель косой черты представляет根目录 /, который является абсолютным путем к файловой системе.

По историческим причинам файловая система в Windows начинается с\в качестве разделителя, но Linux будет начинаться с/как разделитель.

В приведенной выше системе каждый процесс будет иметь工作目录(working directory), пути, которые не дают абсолютный адрес, начинающийся с косой черты, будут искать в этом рабочем каталоге. если/Faculty/Prof.Brownрабочий каталог, то/Courses/CS101Это тот же файл, что и абсолютный путь, указанный выше. Процесс может изменить свой рабочий каталог, указав новый рабочий каталог с помощью системного вызова.

Прежде чем читать и записывать файл, вам сначала нужно открыть файл и проверить его права доступа. Если разрешение позволяет, система вернет небольшое целое число, называемое文件描述符(file descriptor), для использования в последующих операциях. Если доступ запрещен, система возвращает код ошибки.

В UNIX есть еще одна важная концепция.特殊文件(special file). Предусмотрены специальные файлы, чтобы устройства ввода-вывода выглядели как файлы. Таким образом, как и при использовании системных вызовов для чтения и записи файлов, устройства ввода-вывода также могут быть прочитаны и записаны с помощью тех же системных вызовов. Существует два вида специальных файлов, один из них块儿特殊文件(block special file)и字符特殊文件(character special file). Блочные специальные файлы относятся к устройствам, таким как диски, которые состоят из произвольно доступных блоков. Например, открыв специальный файл блока, а затем прочитав четвертый блок, программа может получить прямой доступ к четвертому блоку устройства без учета структуры файловой системы, хранящейся в файле. Точно так же специальные файлы символов используются для принтеров, модемов и других устройств, которые принимают или выводят потоки символов. По соглашению специальные файлы хранятся в/devв каталоге. Например, /devv/lp — это принтер.

Еще одна функция, связанная с процессами и файлами, — это каналы.管道(pipe)это фиктивный файл, который может соединить два процесса

Если A и B хотят поговорить через трубку, они должны настроить трубу заранее. Когда процесс A отправляет данные процессу B, он записывает данные в конвейер, что эквивалентно выходному файлу. Таким образом, взаимодействие между двумя процессами в UNIX очень похоже на чтение и запись обычных файлов.

Защищать

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

Например, операционная система UNIX защищает файлы в UNIX, назначая каждому файлу 9-битный двоичный код защиты. Код защиты имеет три битовых поля: одно для владельца, одно для других членов той же группы, что и владелец (пользователи разделены на группы системным администратором), и одно для всех остальных. Каждое поле имеет один бит для доступа для чтения, один бит для доступа для записи и один бит для доступа для выполнения. Эти биты известныrwx位. Например, код защитыrwxr-x--xЭто означает, что владелец может читать, записывать или выполнять файл, другие члены группы могут читать или выполнять (но не записывать) файл, а другие могут выполнять (но не читать и записывать) файл.

shell

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

Существует множество видов ракушек, напримерш, кш, кш и баши т. д., все они поддерживают следующие функции, самая ранняя оболочка восходит к sh

Когда пользователь входит в систему, одновременно запускается оболочка с терминалом в качестве стандартного ввода и стандартного вывода. Показать первым提示符(prompt), это может быть美元符号($), подсказывает пользователю, что оболочка ожидает получения команд, если пользователь вводит

date

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

Пользователь может перенаправить стандартный вывод в файл, например.

date > file

Точно так же стандартный ввод также может быть перенаправлен

sort <file1> file2

Это вызывает программу сортировки для получения содержимого файла1 и вывода результата в файл2.

Можно направить вывод одного приложения в качестве ввода другого, поэтому

cat file1 file2 file3 | sort > /dev/lp

Это вызывает приложение cat для слияния трех файлов, передает результаты программе сортировки и сортирует их лексикографически. Приложение sort снова перенаправляется на /dev/lp , что, очевидно, является операцией печати.

системный вызов

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

Большинство современных операционных систем имеют системные вызовы с одной и той же функцией, но с разными деталями.Вызовы операционной системы зависят от собственного механизма компьютера и должны быть выражены в ассемблере.Любой однопроцессорный компьютер выполняет одну инструкцию за раз. Если процесс запускает пользовательскую программу в пользовательском режиме, например, чтение данных из файла. Затем, если вы хотите передать управление операционной системе, вы должны выполнить инструкцию исключения или инструкцию системного вызова. Затем операционной системе требуется проверка параметров, чтобы выяснить, какой вызывающий процесс требуется. Затем операционная система выполняет проверку параметров, чтобы найти требуемый вызывающий процесс. Затем выполняется системный вызов, передавая управление инструкции ниже системного вызова. Грубо говоря, системный вызов подобен вызову специальной процедуры, но толькоСистемные вызовы могут входить в режим ядра, тогда как вызовы процедур не могут входить в режим ядра..

Чтобы понять конкретный процесс вызова, мы будем использовать следующееreadВозьмите метод в качестве примера, чтобы увидеть вызывающий процесс. Как упоминалось выше, будет три параметра, первый параметр — указанный файл, второй — указатель на буфер, а третий параметр — заданное количество байтов для чтения. Как и почти все системные вызовы, он вызывается из программы на C вызовом библиотеки функций с тем же именем, что и у системного вызова: read.

count = read(fd,buffer,nbytes);

Системный вызов возвращает количество фактически прочитанных байтов. Обычно это значение равно nbytes, но может быть меньше. Например, в процессе чтения встречается конец файла.

Если системный вызов не может быть выполнен либо из-за недопустимых параметров, либо из-за ошибки диска, значение count будет установлено в -1, а затем в глобальной переменнойerrnoпоставить сигнал ошибки. Программа должна зайти и проверить результат системного вызова, чтобы увидеть, не пошло ли что-то не так.

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

Компиляторы C и C++ используют обратный порядок (первый аргумент должен быть назначен printf (строка формата) в верхней части стека). И первый, и третий аргументы вызываются по значению, но второй аргумент передается по ссылке, т. е. передается адрес буфера (обозначенный символом &), а не содержимое буфера. Затем C вызывает функцию чтения системной библиотеки, что также является четвертым шагом.

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

Инструкции TRAP отличаются от инструкций вызова процедуры двумя способами.

  • Инструкция TRAP изменит состояние операционной системы, перейдя из пользовательского режима в режим ядра, в то время как вызов процедуры не изменяет режим
  • Во-вторых, инструкция TRAP не может перейти на произвольный адрес. В зависимости от архитектуры машины выполняется либо переход на один фиксированный адрес, либо в инструкции есть 8-битное поле, которое дает индекс таблицы в памяти, содержащей адрес перехода, а затем выполняется переход на указанный адрес.

Код ядра, следующий за инструкцией TRAP, начинает проверку номера системного вызова, а затемdispatchУкажите правильный обработчик системного вызова, обычно через таблицу указателей на обработчик системного вызова, на который ссылается номер системного вызова, чтобы выполнить седьмой шаг. В этот момент обработчик системных вызовов выполняет восьмой шаг.После того как обработчик системных вызовов завершит работу, управление вернется к девятому шагу библиотеки вызовов функций в соответствии с инструкцией, следующей за инструкцией TRAP. Затем процесс возвращается к клиентскому приложению обычным способом, которым возвращается вызов процедуры, что является десятым шагом. Затем, после завершения вызова, ОС также должна очистить пользовательский стек, а затем увеличить堆栈指针(increment stackpointer), который очищает переданные аргументы перед вызовом read. Это завершает весь процесс вызова чтения.

На девятом шаге выше мы сказали, что управление может вернуться к инструкции, следующей за инструкцией TRAP, и в процессе передачи управления вызывающей стороне системный вызов заблокируется, тем самым предотвратив дальнейшее выполнение приложения. Для этого есть причина. Например, если делается попытка прочитать клавиатуру, а ввода нет, вызывающий абонент должен быть заблокирован. В этом случае операционная система проверяет, есть ли другие процессы, которые могут быть запущены. Таким образом, когда пользователь вводит данные, процесс предупредит операционную систему, а затем вернется к шагу 9, чтобы продолжить работу.

Ниже мы перечислим некоторые часто используемыеPOSIXСистемные вызовы, существует около 100 системных вызовов POSIX, некоторые из наиболее важных показаны в следующей таблице.

Управление процессом

перечислить инструкция
pid = fork() Создайте дочерний процесс, идентичный родительскому процессу
pid = waitpid(pid, &statloc,options) дождитесь завершения дочернего процесса
s = execve(name,argv,environp) Замените основной образ процесса
exit(status) Завершить выполнение процесса и вернуть статус

управление файлами

перечислить инструкция
fd = open(file, how,...) Откройте файл, используя чтение и запись
s = close(fd) закрыть открытый файл
n = read(fd,buffer,nbytes) читать данные из файла в буфер
n = write(fd,buffer,nbytes) записать данные из буфера в файл
position = iseek(fd,offset,whence) Переместите указатель файла
s = stat(name,&buf) Получить информацию о состоянии файла

Управление каталогами и файловой системой

перечислить инструкция
s = mkdir(nname,mode) Создать новый каталог
s = rmdir(name) удалить пустой каталог
s = link(name1,name2) Создайте новую запись каталога name2 и укажите на name1
s = unlink(name) удалить запись каталога
s = mount(special,name,flag) смонтировать файловую систему
s = umount(special) размонтировать файловую систему

разное

перечислить инструкция
s = chdir(dirname) изменить рабочий каталог
s = chmod(name,mode) Изменить биты защиты файла
s = kill(pid, signal) послать сигнал процессу
seconds = time(&seconds) Получите время с 1 января 1970 года

В приведенных выше параметрах системного вызова есть некоторые общие части, такие как идентификатор системного процесса pid, fd — дескриптор файла, n — количество байтов, position — смещение в файле, а секунды — прошедшее время.

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

Системные вызовы для управления процессами

В UNIX,forkэто единственный способ создать процесс в POSIX, он создает копию исходного процесса, включая все файловые дескрипторы, регистры и т. д. После форка исходный процесс и реплика (родительский и дочерний) разделяются. Во время процесса fork все переменные имеют одинаковое значение.Хотя данные родительского процесса копируются в дочерний процесс, последующие модификации любого одного процесса не повлияют на другой. Вызов fork возвращает значение, равное 0 в дочернем процессе и равное дочернему значению в родительском процессе.进程标识符(Process IDentified,PID). Используя возвращенный PID, вы можете увидеть, какой процесс является родительским, а какой дочерним.

В большинстве случаев после разветвления дочерний процесс должен выполнять другой код, чем родительский процесс. Прочитайте команды с терминала, создайте подпроцесс, подождите, пока подпроцесс выполнит команду, и прочитайте следующую входную команду, когда подпроцесс завершится. Чтобы дождаться завершения дочернего процесса, родительский процесс должен выполнитьwaitpidСистемный вызов, родительский процесс будет ждать завершения дочернего процесса (если есть несколько дочерних процессов, пока не завершится любой дочерний процесс). waitpid может ожидать определенного дочернего процесса или любого более старого дочернего процесса, установив для первого параметра значение -1. Когда waitpid завершится, вторым параметром будетstatlocУказанный адрес устанавливается в состояние выхода дочернего процесса (нормальное или ненормальное завершение и значение выхода). Доступны различные варианты, которые определяются третьим параметром. Например, если нет дочерних процессов, которые уже завершились, немедленно вернуться.

Так как же оболочка использует fork? После ввода команды оболочка вызывает команду fork для создания нового процесса. Этот дочерний процесс будет выполнять инструкции пользователя. используяexecveСистемное выполнение достигается системным вызовом, который вызывает замену всего основного образа файлом, заданным первым аргументом. Ниже приведен упрощенный пример, иллюстрирующий использование fork, waitpid и execve.

#define TRUE 1

/* 一直循环下去 */
while(TRUE){			

/* 在屏幕上显示提示符 */
	type_prompt(); 			
  
  /* 从终端读取输入 */
	read_command(command,parameters) 		
  
  /* fork 子进程 */
	if(fork() != 0){ 								
  
		/* 父代码 */
		/* 等待子进程执行完毕 */
		waitpid(-1, &status, 0);								
	}else{
	
		/* 执行命令 */
		/* 子代码 */
		execve(command,parameters,0)					
	}
}

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

Первый взгляд на команду оболочки

cp file1 file2

Эта команда копирует файл1 в файл2, и после того, как оболочка выполнит ответвление, дочерний процесс находит и выполняет копию файла, передавая ей имена исходного и целевого файлов.

основная программа cp (и основная программа, в которую входит большинство других программ на C) содержит объявление

main(argc,argv,envp)

где argc — количество аргументов в командной строке, включая имя программы. Для приведенного выше примераargcэто 3. второй параметрargvявляется указателем на массив. Элемент i этого массива является указателем на i-ю строку командной строки. В приведенном выше примере argv[0] указывает на строку cp, argv[1] указывает на строку file1, а argv[2] указывает на строку file2. Третий параметр main — указатель на окружение, представляющее собой массив, содержащийname = valueФорма назначения , используемая для передачи в программу такой информации, как тип терминала и корневой каталог. Эти переменные часто используются для определения того, как пользователь хочет выполнить конкретную задачу (например, используя принтер по умолчанию). В приведенном выше примере в execve не передаются аргументы среды, поэтому переменная среды равна 0, поэтому третий аргумент execve равен 0.

Может быть, вы думаете, что execve слишком сложен, но сейчас я хочу вас подбодрить: execve может быть самым сложным из всех системных вызовов в POSIX, а остальные относительно просты. В качестве простого примера давайте снова посмотрим наexit, который является системным вызовом, который процесс должен выполнить после завершения выполнения. Этот системный вызов имеет один параметр, и его статус выхода находится в диапазоне от 0 до 255, который возвращается родителю через statloc в системном вызове waitpid.

Процесс в UNIX делит память на три части:text segment,文本区например программный код,data segment,数据区, например переменная,stack segment, область стека. Данные растут, а стек растет вниз, как показано на рисунке ниже.

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

Системные вызовы для управления файлами

Многие системные вызовы связаны с файловой системой, и чтобы прочитать или записать файл, его нужно сначала открыть. Этот системный вызов задает имя открываемого файла либо по абсолютному, либо по относительному пути к рабочему каталогу, в то время как кодO_RDONLY,O_WRONLYилиO_RDWRозначает «только для чтения», «только для записи» или и то, и другое.Чтобы создать новый файл, используйтеO_CREATEпараметр. Затем возвращенный файловый дескриптор можно использовать для операций чтения и записи. Затем файл может быть закрыт с помощью close , что приводит к повторному использованию файлового дескриптора при последующих open .

Наиболее часто используется вызовreadиwrite, вызов чтения мы обсуждали ранее, а запись имеет те же параметры, что и чтение.

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

У Ицекции есть три параметра,position = iseek(fd,offset,whence), первое — это дескриптор файла, второе — позиция в файле, а третье — относительно того, находится ли позиция в файле относительно начала файла, текущей позиции или конца файла. После изменения указателя значение, возвращаемое Iseek, является абсолютной позицией в файле.

UNIX сохраняет тип файла (обычный файл, специальный файл, каталог и т. д.), размер, время последней модификации и другую информацию для каждого файла, и программа может передатьstatСистемные вызовы для просмотра этой информации.s = stat(name,&buf), первый параметр указывает проверяемый файл, второй параметр — указатель на структуру, в которой хранится информация. Для открытого файла вызов fstat выполняет ту же работу.

Системные вызовы для управления каталогом

Ниже мы обсуждаем системные вызовы для каталогов и всей файловой системы, а выше обсуждаются системные вызовы, связанные с файлом.mkdirиrmdirиспользуются для созданияs = mkdir(nname,mode)и удалитьs = rmdir(name)пустой каталог, следующий вызовs = link(name1,name2)Его роль состоит в том, чтобы позволить одному и тому же файлу появляться под двумя или более именами, в большинстве случаев с использованием ссылки в разных каталогах, давайте рассмотрим, как работает ссылка.

На картинке два пользователяastиjim, у каждого пользователя своя директория и какие-то файлы, если аст хочет выполнить приложение, содержащее следующие системные вызовы

link("/usr/jim/memo", "/usr/ast/note");

Файлы заметок в jim теперь будут находиться в каталоге ast под именем заметки. После этого/usr/jim/memoи/usr/ast/noteбудет иметь то же имя.

Хранить ли пользовательский каталог в /usr, /user, /home или в каком-либо другом месте, зависит от локального системного администратора.

Чтобы понять, как работает ссылка, необходимо понять, что она делает. Каждый файл в UNIX имеет уникальную версию, также называемуюi - number,i-编号, который определяет версию другого файла. i-числоi-nodes,i-节点Индекс таблицы. В каждом файле будет указано, кому он принадлежит, где находится блок диска и так далее. Каталог — это просто файл, содержащий набор соответствий (i-номер, ASCII-имя). В первой версии UNIX каждая запись каталога имела бы 16 байтов, 2 байта для i-номера и 14 байтов для имени. Теперь для поддержки длинных имен файлов требуется более сложная структура, но концептуально каталог по-прежнему представляет собой набор (i-номера, имена ASCII). На приведенном выше рисункеmaili-число равно 16 и так далее. link просто создает новую запись в каталоге (возможно, с новым именем), используя i-номер существующего файла. В b выше вы обнаружите, что есть два идентичных файла с номером 70 i, поэтому они должны иметь один и тот же файл. если один из них используетunlinkОдин из системных вызовов будет удален, а другой останется. Если оба файла удалены, UNIX обнаруживает, что для файла нет записей каталога (поле в i-узле записывает запись каталога, указывающую на файл) и удаляет файл с диска.

Как мы упоминали выше,mountсистемаs = mount(special,name,flag)Вызов объединит две файловые системы в одну. Распространенным случаем является наличие корневой файловой системы, содержащей двоичные (исполняемые) версии часто используемых команд и других часто используемых документов. Затем пользователь вставляет читаемый жесткий диск USB.

Файловую систему USB можно добавить в корневую файловую систему, выполнив системный вызов mount,

Если выполнить на языке C, это будет

mount("/dev/sdb0","/mnt",0)

Здесь первый параметр — это специальное имя файла блока для USB-накопителя 0, второй параметр — это позиция в дереве, которая должна быть смонтирована, а третий параметр указывает, будет ли монтируемая файловая система доступна для чтения и записи или только для чтения.

Когда файловая система больше не нужна, ее можно удалить с помощью umount.

другие системные вызовы

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

chdir("/usr/ast/test");

После открытия файла xyz он откроется/usr/ast/test/xyzКонцепция файла, рабочего каталога устраняет необходимость всегда вводить длинные имена файлов.

В системах UNIX каждый файл будет иметь защищенный режим, который будет иметь读-写-执行Бит, который используется для различения владельца, группы и других участников.chmodСистемные вызовы обеспечивают операции для изменения режимов файла. Например, чтобы сделать файл доступным для чтения пользователями, отличными от владельца, вы можете выполнить

chmod("file",0644);	

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

POSIX определяет ряд процессов обработки времени. Например,timeВозвращает текущее время в секундах, где 0 соответствует 1 января 1970 года. В 32-битном словном компьютере максимальное значение времени составляет (2^32) - 1 секунда, что соответствует немногим более 136 годам. Так что в 2106 году 32-битные UNIX-системы сойдут с ума. Если у читателя сейчас 32-битная система UNIX, рекомендуется заменить 64-битную операционную систему на 2106 (смеется~).

Win 32 API

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

Конечно, в Windows также есть системные вызовы. В UNIX существует почти однозначная связь между системными вызовами (такими как чтение) и вызывающей библиотекой, используемой системными вызовами (такими как чтение). В Windows ситуация совершенно иная. Во-первых, вызов библиотеки функций и собственно системный вызов почти не совпадают. Microsoft определяет ряд процессов, называемыхWin32应用编程接口(Application Programming Interface), программист реализует системные вызовы через этот набор стандартных интерфейсов. Этот интерфейс поддерживает все версии Windows, начиная с Windows 95.

Количество вызовов Win32 API огромно, исчисляется тысячами. Но не все эти вызовы выполняются в режиме ядра, некоторые выполняются в пользовательском режиме. Win32 API имеет множество вызовов для управления окнами, геометрией, текстом, шрифтами, полосами прокрутки, диалоговыми окнами, меню и другими функциями графического интерфейса. Чтобы графическая подсистема работала в режиме ядра, необходимы системные вызовы, в противном случае есть только библиотечные вызовы.

Давайте сосредоточимся на системных вызовах Win32, мы можем кратко увидеть, чем системные вызовы в Win32 API отличаются от вызовов в UNIX (не все системные вызовы).

UNIX Win32 инструкция
fork CreateProcess создать новый процесс
waitpid WaitForSingleObject дождаться завершения процесса
execve none CraeteProcess = fork + servvice
exit ExitProcess прекратить выполнение
open CreateFile Создайте файл или откройте существующий файл
close CloseHandle закрыть файл
read ReadFile Чтение данных из одного файла
write WriteFile записать данные в один файл
lseek SetFilePointer Переместите указатель файла
stat GetFileAttributesEx получить разные атрибуты файла
mkdir CreateDirectory Создать новый каталог
rmdir RemoveDirectory удалить пустой каталог
link none Win32 не поддерживает ссылку
unlink DeleteFile уничтожить существующий файл
mount none Win32 не поддерживает монтирование
umount none Win32 не поддерживает монтирование, поэтому и не поддерживает монтирование
chdir SetCurrentDirectory Изменить текущий рабочий каталог
chmod none Win32 не поддерживает безопасность
kill none Win32 не поддерживает сигналы
time GetLocalTime получить текущее время

Приведенная выше таблица примерно соответствует системным вызовам Win32 API для вызовов UNIX.Кратко опишите приведенную выше таблицу.CreateProcessОн используется для создания нового процесса, который объединяет две инструкции fork и execve в UNIX в одну и выполняет их вместе. Он имеет ряд параметров для указания характера вновь созданного процесса. В Windows нет иерархии процессов, как в UNIX, поэтому нет концепции родительских и дочерних процессов. После того, как процесс создан, создатель и созданный равны.WaitForSingleObjectИспользуется для ожидания события, событием для ожидания может быть множество возможных событий. Если аргумент указывает процесс, вызывающая сторона будет ждать завершения указанного процесса, что выполняетсяExitProcessЧто нужно сделать.

Далее идут 6 файловых операций, похожих по функциям на вызовы UNIX, но отличающихся параметрами и деталями. Как и в UNIX, файлы можно открывать, читать, записывать и закрывать.SetFilePointerиGetFileAttributesExУстановите расположение файла и получите свойства файла.

В Windows есть каталоги, и каталоги используютCreateDirectoryа такжеRemoveDirectoryВызовы API для создания и удаления. Существует также флаг для текущего каталога, к которому можно получить доступ черезSetCurrentDirectoryустанавливать. использоватьGetLocalTimeПолучить текущее время.

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

Структура операционной системы

Ниже мы обсудим несколько структур операционной системы, в основном включаяМонолиты, многоуровневые системы, микроядра, клиент-серверные системы, виртуальные машины и внешние ядраЖдать. Давайте обсудим это ниже

Монолитная система

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

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

Для монолитных систем часто бывают следующие предложения

  • Должна быть основная программа для вызова программы обслуживания запросов.
  • Для выполнения системных вызовов требуется набор служебных процедур.
  • Необходим набор сервисных программ для помощи в вызове сервисной процедуры.

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

В дополнение к основной операционной системе, загружаемой в начале работы компьютера, многие операционные системы также поддерживают дополнительные расширения. Например, драйвер устройств ввода/вывода и файловые системы. Эти компоненты могут быть загружены по запросу. Позвоните им в Unix共享库(shared library), в винде это называется动态链接库(Dynamic Link Library,DLL). их расширение.dll,существуетC:\Windows\system32В каталоге более 1000 файлов DLL, поэтому не удаляйте файлы диска C легко, иначе он может взорваться.

многоуровневая система

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

Слоистая система состоит изE.W.DijkstarСистема THE была разработана его студентами в Нидерландском технологическом институте.

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

номер слоя Функции
5 оператор
4 Пользовательская программа
3 Управление вводом/выводом
2 связь между оператором и процессом
1 Управление памятью и барабанами
0 Распределение процессоров и мультипрограммирование

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

Уровень 2 обеспечивает связь между процессом и консолью оператора (то есть пользователем). Уровень 3 управляет устройствами ввода-вывода и соответствующими потоковыми буферами. Четвертый уровень — это уровень пользовательской программы, пользовательской программе не нужно учитывать такие детали, как управление процессами, памятью, консолью или устройствами ввода-вывода. Системный оператор находится на уровне 5.

микроядро

В многоуровневом режиме, где дизайнер определяет, где разделить内核-用户Граница. Традиционно все слои в ядре, но это не обязательно. На самом деле, насколько это возможно, уменьшить функцию режима ядра может быть лучшим подходом. Так как ядро ​​​​обработки ошибок трудно, как только ошибка непонимания режима ядра перетащите всю систему.

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

MINIX 3Это репрезентативная работа микроядра, и его конкретная структура выглядит следующим образом.

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

Над водителем в пользовательском режиме находится服务器Слой, который содержит серверы, выполняющие большую часть работы операционной системы. Файловая система управляется одним или несколькими файловыми серверами, а диспетчер процессов создает, уничтожает и управляет процессами. На сервере есть специальный сервер под названием再生服务器(reincarnation server), его задача — проверить правильность работы сервера и драйвера, а при обнаружении ошибки исправить ее без вмешательства пользователя. Такой способ делает систему восстанавливаемой и имеет высокую надежность.

Ядро в микроядре также имеет机制и策略разделение мыслей. Например, системное планирование — относительно простой алгоритм планирования — назначить приоритет каждому процессу и позволить ядру выполнять процесс с наивысшим приоритетом. Здесь механизм ядра заключается в том, чтобы найти процесс с наивысшим приоритетом и запустить его. А политику (предоставление приоритета процессу) можно сделать в процессе в пользовательском режиме. В этом режиме политики и механизмы разделены, что делает ядро ​​меньше.

клиент-серверная модель

Стратегия микроядерного мышления заключается в разделении процессов на две категории:服务器, каждый сервер используется для предоставления услуг;客户端, воспользуйтесь этими услугами. Этот режим называется客户-服务器модель.

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

Клиент взаимодействует с сервером, отправляя сообщения, и клиенту не нужно знать, обрабатываются ли эти сообщения на локальном компьютере или отправляются по сети на удаленный компьютер для обработки. Для клиента оба случая одинаковы: и отправить запрос, и получить ответ.

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

Ссылка на статью:

Современные операционные системы, четвертое издание

Baike.baidu.com/Item/ Операционная система / 1 ...

《Современная операционная система》четвертое издание

факультет.В это время.Niu.Quota/~Hutchins/From…

woohoo.computer Hope.com/jargon/from/кроме…

«Станция B — Операционная система»

вооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо

En. Wikipedia.org/wiki/system…

От . до .net/CPP/HTML/23…

woohoo.dossier-Andreas.net/software_AR…