Как работает компьютер при запуске программы

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

Я также знаю, что компьютерная программа использует два типа памяти: стек и кучу, которые также являются частью первичной памяти компьютера. Стек используется для нединамической памяти, а куча — для динамической памяти (например, все, что связано с new оператор в C ++) Я не могу понять, как эти две вещи связаны. В какой момент стек используется для выполнения инструкций? Инструкции идут из ОЗУ, в стек, в регистры?

задан 01 марта ’11, 22:03
+1 за фундаментальный вопрос! — mkelley33

хм . знаете, об этом пишут книги. Вы действительно хотите изучить эту часть архитектуры ОС с помощью SO? — Andrey

Я добавил пару тегов на основе характера вопроса, связанного с памятью, и ссылки на C ++, хотя я думаю, что хороший ответ также может прийти от кого-то, кто разбирается в Java или C #!) — mkelley33

ПК работает но нет изображения на мониторе #shorts

Проголосовали и добавили в избранное. Я всегда боялся спросить . — Maxpm

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

4 ответы

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

+———+ | stack | function-local variables, return addresses, return values, etc. | | often grows downward, commonly accessed via «push» and «pop» (but can be | | accessed randomly, as well; disassemble a program to see) +———+ | shared | mapped shared libraries (C libraries, math libs, etc.) | libs | +———+ | hole | unused memory allocated between the heap and stack «chunks», spans the | | difference between your max and min memory, minus the other totals +———+ | heap | dynamic, random-access storage, allocated with ‘malloc’ and the like. +———+ | bss | Uninitialized global variables; must be in read-write memory area +———+ | data | data segment, for globals and static variables that are initialized | | (can further be split up into read-only and read-write areas, with | | read-only areas being stored elsewhere in ROM on some systems) +———+ | text | program code, this is the actual executable code that is running. +———+

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

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

Компьютер запущен некорректно Windows 11 что делать


+————+ top of memory | extended | above the high memory area, and up to your total memory; needed drivers to | | be able to access it. +————+ 0x110000 | high | just over 1MB->1MB+64KB, used by 286s and above. +————+ 0x100000 | upper | upper memory area, from 640kb->1MB, had mapped memory for video devices, the | | DOS «transient» area, etc. some was often free, and could be used for drivers +————+ 0xA0000 | USER PROC | user process address space, from the end of DOS up to 640KB +————+ |command.com| DOS command interpreter +————+ | DOS | DOS permanent area, kept as small as possible, provided routines for display, | kernel | *basic* hardware access, etc. +————+ 0x600 | BIOS data | BIOS data area, contained simple hardware descriptions, etc. +————+ 0x400 | interrupt | the interrupt vector table, starting from 0 and going to 1k, contained | vector | the addresses of routines called when interrupts occurred. e.g. | table | interrupt 0x21 checked the address at 0x21*4 and far-jumped to that | | location to service the interrupt. +————+ 0x0

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

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

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

«Стек» и «куча» — это просто абстрактные понятия, а не (обязательно) физически различные «виды» памяти. A стек это просто структура данных «последний вошел — первым ушел». В архитектуре x86 к нему можно обращаться случайным образом, используя смещение от конца, но наиболее распространенными функциями являются PUSH и POP для добавления и удаления элементов, соответственно.

Читайте также:
Как в 8 винде найти все программы

Он обычно используется для локальных переменных функции (так называемое «автоматическое хранение»), аргументов функций, адресов возврата и т. Д. (Подробнее ниже) A «куча» это просто псевдоним для фрагмента памяти, который может быть выделен по запросу и адресован случайным образом (то есть вы можете получить доступ к любому месту в нем напрямую). Обычно он используется для структур данных, которые вы выделяете во время выполнения (в C ++, используя new и delete , и malloc и друзья в C и т. д.).

Стек и куча на архитектуре x86 физически находятся в вашей системной памяти (RAM) и отображаются посредством выделения виртуальной памяти в адресное пространство процесса, как описано выше. Наблюдения и советы этой статьи мы подготовили на основании опыта команды регистры (все еще на x86), физически находятся внутри процессора (в отличие от ОЗУ) и загружаются процессором из области ТЕКСТ (а также могут быть загружены из другого места в памяти или других местах в зависимости от инструкций ЦП, которые на самом деле выполнено). По сути, это очень маленькие и очень быстрые ячейки памяти на кристалле, которые используются для различных целей. Макет регистров сильно зависит от архитектуры (фактически, регистры, набор команд и макет / дизайн памяти — это именно то, что подразумевается под «архитектурой»), поэтому я не буду вдаваться в подробности, но рекомендую вам воспользоваться курс ассемблера, чтобы лучше их понять. Ваш вопрос:

В какой момент стек используется для выполнения инструкций? Инструкции идут из ОЗУ, в стек, в регистры?

Стек (в системах / языках, которые их имеют и используют) чаще всего используется следующим образом:

int mul( int x, int y ) < return x * y; // this stores the result of MULtiplying the two variables // from the stack into the return value address previously // allocated, then issues a RET, which resets the stack frame // based on the arg list, and returns to the address set by // the CALLer. >int main() < int x = 2, y = 3; // these variables are stored on the stack mul( x, y ); // this pushes y onto the stack, then x, then a return address, // allocates space on the stack for a return value, // then issues an assembly CALL instruction. >

Напишите такую ​​простую программу, а затем скомпилируйте ее в сборку ( gcc -S foo.c если у вас есть доступ к GCC) и посмотрите. Сборка довольно проста. Вы можете видеть, что стек используется для локальных переменных функции и для вызова функций, хранения их аргументов и возвращаемых значений. Вот почему, когда вы делаете что-то вроде:

f( g( h( i ) ) );

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

Однако, как упоминалось выше, стек (на x86) фактически находится в пространстве памяти вашего процесса (в виртуальной памяти), поэтому им можно управлять напрямую; это не отдельный шаг во время выполнения (или, по крайней мере, ортогонален процессу). К вашему сведению, это Соглашение о вызовах C, также используется C ++.

Другие языки / системы могут помещать аргументы в стек в другом порядке, а некоторые языки / платформы даже не используют стеки и делают это по-разному. Также обратите внимание, что это не фактические строки выполнения кода C. Компилятор преобразовал их в инструкции на машинном языке в вашем исполняемом файле. Затем они (как правило) копируются из области ТЕКСТ в конвейер ЦП, затем в регистры ЦП и выполняются оттуда. [Это было неверно. Видеть Исправление Бена Фойгта ниже.]

Источник: stackovergo.com

Ассемблер для Linux. Как работает компьютер (книга)

Приветствую всех на моем канале Old Programmer . Продолжаем публиковать материалы из книги об ассемблере GAS .

Все разделы моего канала здесь .

  • Книга «Ассемблер для Linux»
  • Список разделов канала Old Programmer, канала о программировании и программистах

Параграф 1.1.

Как работает компьютер

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

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

Читайте также:
Сервис 1с обновления программ позволяет

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

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

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

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

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

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

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

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

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

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

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

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

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

Подписываемся на мой канал Old Programmer , пишем свои комментарии и ждем новых статей об ассемблере .

Читайте также:
Российская лунная программа этапы

Источник: dzen.ru

Как работает компьютер

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

Основные компоненты компьютеров

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

• Блок питания, главным параметром которого является мощность и умение противостоять краткосрочным перепадам напряжения в сети. Это единственный компонент, не участвующий в обработке информации, его единственная задача — преобразовать переменное напряжение в постоянное, которое требуется в качестве питания всем компонентам компьютера.
• Очень важный компонент с «говорящим» названием материнская плата является основой для размещения оперативной памяти, процессора и других компонентов, а также для связи их между собой посредством специальных шин-проводников. Еще одна важная задача материнской платы — временное хранение данных, для этого на плате имеется постоянное запоминающее устройство
• Насколько быстро ваш компьютер будет «думать» и выполнять поставленные задачи зависит от его процессора. Данный компонент не зря называют «мозгом», потому что именно он совершает все вычислительные действия, являясь лишь не очень большой микросхемой, для которой требуется система охлаждения. Ведь при меньших температурах процессор работает лучше.
• Во время своей работы процессор находится в тесной связке с оперативной памятью, в которой хранится актуальная информация, требующаяся для вычислений. Именно благодаря оперативной памяти процессор направляется в своей работе в правильном направлении.

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

Принцип действия компьютера

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

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

Причем компьютеры видят эти описания исключительно на языке чисел, а также логических и математических операций. Все данные, которые хранятся на жестком диске, представлены там в виде числовых описаний. Причем аппаратные элементы понимают лишь информацию в виде двоичных чисел, в то время как в повседневности мы используем десятичную систему измерений. Чтобы было понятно, приведем пример: 0 и 1 самодостаточны и в преобразовании не нуждаются, число 2 компьютер видит, как комбинацию цифр 10, 3 для него — 11, число 4=100 и так далее. Для букв этот принцип тоже действует, надо лишь обозначить порядковый номер в алфавите и записать его двоичным числом.

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

Заключение

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

Источник: useron.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru