Почему любая программа должна быть загружена в оперативную память перед выполнением

Обновлено: 27.06.2024

Загрузка операционной системы

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

Этот процесс загрузки отлично подходит для прикладных программ, но как загружается сама ОС? При первом включении компьютера основная память не содержит допустимых битов. Сама операционная система должна быть загружена с жесткого диска в основную память. Это похоже на уловку-22! Решение — последовательная последовательность все больших и больших программ загрузки, которые загружают ОС.

Программа запуска

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

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

Загрузочная программа

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

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

Я изучал концепции операционных систем из книги Зильбершатца, Галвина и Ганье (шестое издание) и у меня есть несколько вопросов о потоке выполнения программы. Рисунок поясняет обработку пользовательской программы:

схема выполнения программы

Мы получаем исполняемый двоичный файл, когда доходим до точки редактирования компоновки. Как говорится в книге,

Для выполнения программа должна быть помещена в память и помещена в процесс.

У меня есть несколько вопросов об этом потоке:

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

Если предыдущий ответ положительный, то почему ЦП должен генерировать логический адрес? Я имею в виду, что исполняемый файл хранится где-то на жестком диске, который относится к адресу, почему процессор должен делать это отдельно? В конце концов, основная цель процессора — это обработка!

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

1 Ответ 1

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

  1. Компьютер создает исполняемый файл и сохраняет его на жестком диске. Сейчас это просто пассивная программа.
  2. Другой процесс (уже находящийся в памяти и работающий в данный момент) вызывает программу, которую вы только что создали, используя путь доступа (полный psth + имя) в файловой системе.Это системный вызов; выдается прерывание и управление передается ОС.
  3. ОС декодирует путь, чтобы получить фактические места на жестком диске, где хранятся блоки данных программы. Жесткий диск рассматривается как любое другое устройство ввода-вывода; он ручается за процессорное время, как и любое другое устройство ввода-вывода. Здесь у ОС есть два варианта:
    • либо он должен получать данные с жесткого диска каждый раз, когда на жестком диске есть что дать (жесткий диск объявляет об этом, выдавая прерывания), и сохранять их в ОЗУ. Но с постоянно увеличивающейся скоростью жесткого диска в наши дни частота прерываний может быть достаточно высокой, чтобы неэффективно использовать ЦП.
    • Второй вариант заключается в том, что ЦП при выдаче команды чтения для блоков данных программы также указывает адреса оперативной памяти, на которые жесткий диск должен напрямую копировать свои данные (прямой доступ к памяти). Поскольку ЦП, устройства ввода-вывода (включая жесткий диск) и память используют общую шину, данные могут передаваться по одному. Кроме того, ЦП тем временем также имеет другие процессы (в ОЗУ) для запуска, пока данные копируются с жесткого диска в ОЗУ. Таким образом, и ЦП, и жесткий диск по очереди копируют данные в ОЗУ. Здесь DMA будет работать быстрее, если ЦП простаивает или требует меньшего количества обращений к памяти. Когда жесткий диск завершает запись данных в ОЗУ, как указано ЦП, он выдает прерывание ЦП, чтобы сообщить ему, что он завершил свою задачу.
  4. Обратите внимание, что ЦП никогда не обращался к данным жесткого диска напрямую. Жесткий диск работает так же, как и любое другое устройство, такое как клавиатура или модем (через прерывания и т. д.). Теперь, после того как жесткий диск скопировал данные и сгенерировалось прерывание, ОС выделяет память стека и другие ресурсы для этого вновь созданного процесса и вставляет его в очередь активных процессов.

Вот почему при создании небольших программ для начинающих мы никогда не можем сохранять состояние программ. Мы создаем некоторые переменные во время работы процесса и изменяем их, но никогда явно не сохраняем их на жестком диске (если только не задействован аспект обработки файлов). Когда мы уничтожаем программу, вся память теряется. и все операции чтения и записи языка являются просто обертками для системных вызовов, предоставляемых ОС, чтобы сделать код переносимым между несколькими операционными системами (поскольку системные вызовы каждой из них различны). Эти системные вызовы чтения/записи/открытия/закрытия являются запросами к ОС, чтобы разрешить нам доступ к файлу на жестком диске, отличном от ОЗУ.

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

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

Когда ЦП выполняет программу, эта программа сохраняется в основной памяти компьютера (также называемой ОЗУ или оперативной памятью). В дополнение к программе в памяти также могут храниться данные, которые используются или обрабатываются программой. Основная память состоит из последовательности ячеек. Эти местоположения пронумерованы, а порядковый номер местоположения называется его адресом. Адрес обеспечивает способ выбора одной конкретной части информации из миллионов, хранящихся в памяти. Когда ЦП необходимо получить доступ к программной инструкции или данным в определенном месте, он отправляет адрес этой информации в качестве сигнала в память; память отвечает, отправляя обратно данные, содержащиеся в указанном месте. ЦП также может хранить информацию в памяти, указав информацию, которая должна быть сохранена, и адрес места, где она должна быть сохранена.

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

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

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

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

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

Tего страница содержит образцы ответов на тест по главе 1 книги Введение в программирование с использованием Java. Обратите внимание, что обычно существует множество правильных ответов на заданный вопрос.

Одним из компонентов компьютера является его ЦП. Что такое ЦП и какую роль он играет в компьютере?

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

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

Асинхронное событие — это событие, которое происходит в непредсказуемое время вне контроля программы, запущенной ЦП. Он не "синхронизируется" с программой. Например, когда пользователь нажимает клавишу на клавиатуре или щелкает кнопку мыши. (Эти события генерируют «прерывания», которые заставляют ЦП прерывать свою работу и предпринимать некоторые действия для обработки асинхронного события. После обработки события ЦП возвращается к тому, что он делал до того, как оно было прервано.)

В чем разница между "компилятором" и "интерпретатором"?

Компиляторы и интерпретаторы имеют схожие функции: они берут программу, написанную на некотором языке программирования, и переводят ее на машинный язык. Компилятор выполняет перевод сразу. Он создает полную программу на машинном языке, которую затем можно выполнить. Интерпретатор, с другой стороны, просто переводит одну инструкцию за раз, а затем немедленно выполняет эту инструкцию. (Java использует компилятор для перевода программ Java в байт-код Java, который является машинным языком для воображаемой виртуальной машины Java. Затем программы байт-кода Java выполняются интерпретатором.)

Объясните разницу между языками высокого уровня и машинным языком.

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

Если у вас есть исходный код программы Java и вы хотите запустить эту программу, вам потребуются как компилятор, так и интерпретатор. Что делает Java компилятор и что делает интерпретатор Java?

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

Что такое подпрограмма?

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

Java – это объектно-ориентированный язык программирования. Что такое объект?

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

Что такое переменная? (Есть четыре различных понятия, связанных с переменными в Java. Постарайтесь упомянуть все четыре аспекта в своем ответе. Подсказка: один из аспектов — это имя переменной.)< /p>

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

Java — это "платформенно-независимый язык". Что это значит?

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

Что такое "Интернет"? Приведите несколько примеров его использования. (Какие услуги он предоставляет?)

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

Читайте также: