Основные принципы работы компьютера




Скачать 205.11 Kb.
НазваниеОсновные принципы работы компьютера
Дата публикации10.09.2013
Размер205.11 Kb.
ТипДокументы
uchebilka.ru > Информатика > Документы

 





глава 1


Основные принципы
работы компьютера


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

1.1. Двоичная система работы процессора


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

В конце 1990-х годов я работал на большом предприятии, на котором сохранились компьютеры 1970-х годов. Это были шкафы (в прямом смысле этого слова), произведенные в Советском Союзе. Вы помните, что была такая страна ? Так вот, в то время у меня дома стоял Pentium 100, который был в сто раз меньше и в тысячу раз быстрее.

Однако основные принципы работы компьютера, заложенные во времена их рождения, действуют до сих пор. Суть их заключается в следующем. Данные передаются с помощью какого-то сигнала (для нас не имеет значения какого, потому что мы не электронщики) методом "есть сигнал или нет" или, по-другому, "включен или выключен". Так появился "бит" (bit). Бит — это единица информации, которая может принимать значение 0 или 1, т. е. "включен или выключен". Восемь бит объединяются в байт, один байт равен 8 битам. Почему именно 8? Да потому что первые компьютеры были восьмиразрядными и могли работать одновременно только с 8 разрядами (битами), например, 010000111.

Все первые нули можно удалять, поэтому число 010000111 можно записать как  10000111. Это то же самое, что и в привычной для нас десятичной системе исчисления, где каждый разряд может принимать значения от 0 до 9. Здесь также никто не будет писать число 5743 как 0005743, потому что первые нули не имеют никакого значения

В один байт можно записать любое число от 0 до 255. Почему? Об этом немного позже. Указанный диапазон чисел довольно мал. Поэтому чаще используют более крупные градации:

  • два байта = слово;

  • два слова = двойное слово.

Итак, компьютер стал работать в двоичной системе исчисления. Но как же тогда записать число 135, если у нас единица информации может принимать значения 0 или 1? Это можно сделать в двоичной системе. Давайте разберемся, как это работает.

Для начала вспомним, как действует десятичная система исчисления, к которой мы привыкли. Для этого рассмотрим число 19 578 246. Я специально выбрал такое число, чтобы оно состояло из восьми разрядов (цифр). Теперь запишем его, как показано на рис. 1.1.



Рис. 1.1. Число 19 578 246 в десятичной системе исчисления

Как видите, я пронумеровал разряды начиная с нуля до семи и справа налево. Теперь представьте себе, что это не целое число, а просто набор разрядов. 1, 9, 5, 7, 8, 2, 4 и 6. Как из этих разрядов получить целое число в десятичной системе? Наверное, некоторые скажут, что надо просто записать их подряд.
А если я спрошу, почему? Вот тут появляется математика. Нужно каждый разряд умножить на 10 (степень исчисления) возведенную в степень номера разряда. Непонятно? Попробую оформить сказанное в виде формулы, показанной на рис. 1.2.



Рис. 1.2. Работа с десятичными числами

Давайте посчитаем значение числа по этой формуле начиная с нулевого разряда. Получается, что 6 нужно умножить на 10 в нулевой степени 6  100 = 6. Потом прибавить 4  10 в 1-й степени, или 4  101 = 40 (итого уже 46). Потом 2  10 во 2-й степени, 2  102 = 200 (итого 246). Потом 8  10 в 3-й степени, 8  103 = 8000 (итого 8246) и т. д. В итоге получится число 19 578 246. Магия чисел? Нет, это просто математика, и в школе далеко не всегда нам показывают, что означает десятичная система исчисления, а ведь она достаточно проста.

А теперь рассмотрим двоичную систему исчисления. Здесь каждый разряд может принимать значение 0 или 1 (два состояния). Кстати, в десятичной системе у нас каждый разряд мог принимать значения от 0 до 9, т. е. имел десять состояний. Давайте рассмотрим следующий байт — 10000111. Запишем его на листке бумаги так, как показано на рис. 1.3.



Рис. 1.3. Двоичное число

Здесь действует та же самая формула, только нужно возводить в степень не 10, а число 2, потому что это число в двоичной системе. Опять же произведем расчет начиная с нулевого разряда, т. е. справа налево. Получается, что первую 1 мы должны умножить на 2 в нулевой степени (1  20 = 1). Следующую единицу нужно умножить на 21, получается 2 (итого 2 + 1 = 3) и т. д. Вот как это будет выглядеть полностью:

(1  20) + (1  21) + (1  22) + (0  23) + (0  24) + (0  25) + (0  26) + (1  27) = 135

Вот так, оказывается, выглядит в двоичной системе исчисления число 135. Давайте теперь научимся пересчитывать числа из десятичной системы в
двоичную. Для этого нужно число 135 разделить на 2. Получается 67 и остаток 1 (запомним 1, т. к. она определяет первый двоичный разряд искомого числа). Теперь 67 снова делим на 2, получается 33 и остаток 1 (таким образом получено уже две двоичные единицы, т. е. 11). 33 делим на 2, получаем 16 и остаток 1 (в результате получаем три двоичные единицы, 111). 16 делим на 2, получаем 8 и остаток 0 (результат 0111). И наконец, 8 делим на 2 = 4, остаток от деления при этом будет 0 (получаем 00111); 4 делим на 2 = 2, остаток 0 (получаем 000111); 2 делим на 2 = 1, остаток 0 (итого 0000111). Оставшаяся единица частного на два не делится, значит, это последний, самый старший разряд искомого числа. Просто дописываем ее к ранее сформированным разрядам и получаем окончательный ответ  10000111. Получилось первоначальное число.

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

Таблица 1.1. Таблица соответствия десятичных и двоичных чисел

Десятичное

Двоичное

Десятичное

Двоичное

0

0

6

110

1

1

7

111

2

10

8

1000

3

11

9

1001

4

100

10

1010

5

101







Например, попробуйте перевести число, состоящее из 8 бит (1 байт), у которого все биты состоят из единиц, в десятичную систему. Вы должны получить 255. Это максимальное число, которое можно записать в одном байте, потому что все его биты равны 1. Вот так и получается, что в 8 бит можно записать числа от 0 до 255. В 16 битах (2 байта или слово) можно записать число от 0 до 65 535. В 32 битах (двойное слово) можно уже записать число от 0 до 4 294 967 295.

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

Шестнадцатеричная система выглядит немного по-другому. Каждый разряд содержит уже не 2 состояния (как в двоичной системе) или десять (как в десятичной системе), а шестнадцать. Поэтому один разряд может принимать значения: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Буква "A" соответствует цифре 10 в десятичной системе, "В" соответствует 11 и т. д. Например, число 1A в шестнадцатеричной системе равно 26 в десятичной. Почему? Да в соответствии все с той же формулой. Только здесь нужно возводить уже 16 в степень номера разряда. "A"  десять, нужно умножить на 160. В результате получится 10. 1  первый разряд нужно умножить на 161, получится значение 16. Затем полученные результаты складываются и определяется искомое число  10 + 16 = 26. В результате, как показано в табл. 1.2, можно установить соответствие между числами, записанными в различных системах исчис-
ления.

Таблица 1.2.  Таблица соответствия десятичных, двоичных
и шестнадцатеричных чисел


Десятичное

Двоичное

Шестнадцатеричное

0

0

0

1

1

1

2

10

2

3

11

3

4

100

4

5

101

5

6

110

6

7

111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

16

10 000

10

17

10 001

11

18

10 010

12

19

10 011

13

20

10 100

14

На протяжении всей книги мы будем иногда встречаться с шестнадцатеричной системой исчисления (без этого никуда не денешься). В этом случае, когда нужно будет показать, что число шестнадцатеричное, перед ним будет ставиться знак решетки #, например, #13. В других языках, например Assembler или C++, принято ставить в конце числа букву h (13h). Но эта книга о Delphi, поэтому здесь будем писать так, как принято в этой среде разработки, чтобы потом не возникало никаких вопросов.

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

Теперь разберемся со знаком у чисел. Если заранее предусмотрено, что число может быть отрицательным, то его длина сокращается ровно на один бит (этот бит отводится под знак числа). Так, неотрицательное целое число может быть 8-битным, тогда как число со знаком будет 7-битным. Первый бит будет означать знак. Если первый бит равен 1, то число отрицательное, иначе положительное.

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

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

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

Запустите встроенный в Windows калькулятор (^ Пуск | Программы | Стандартные | Калькулятор). Теперь выберите из меню Вид пункт Инженерный. На рис. 1.4 показано окно, которое вы должны увидеть.

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

  • Hex  шестнадцатеричная;

  • Dec  десятичная;

  • Oct  восьмеричная;

  • Bin  двоичная.



Рис. 1.4. Внешний вид калькулятора

Возникает вопрос  зачем здесь так долго рассказывалось о преобразованиях чисел, когда так легко можно воспользоваться калькулятором? Ответ прост  это нужно знать. Поверьте мне. Если вы будете понимать, как происходит преобразование, то вам потом легче будет работать с этими числами. Уметь использовать компьютер и язык программирования — это хорошо, но понимать, как и что происходит — намного лучше.
^

1.2. Машинный язык


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

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

Реальная программа, которую выполняет компьютер, представляет собой последовательность единиц и нулей. Такую последовательность называют машинным языком. Человек не способен эффективно думать единицами и нулями. Для нас легче воспринимается осмысленный текст, а не сумасшедшие числа в двоичной системе исчисления, с которой мы не привыкли работать. Например, команда сложения двух регистров в шестнадцатеричной системе выглядит так: $03C3. Это мало о чем говорит, и запомнить такую команду очень тяжело. На много проще написать "сложить число 1 и число 2".

Первое время программисты писали программы в машинных кодах, пока кому-то не пришла в голову идея: "Почему бы не писать текст программы на понятном языке, а потом заставлять компьютер переводить этот текст в машинный код?" Идея действительно заслуживала внимания. Так появился первый компилятор  программа, которая переводила текст программ в машинный код. Таким образом, пользователи стали писать программы более осмысленно, а всю рутинную работу по переводу текста программы в машинный код возложили на сам компьютер.

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

1.3. История языков программирования


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

Мы также выяснили, что первые программисты писали программы в машинных кодах. Тогда еще не было компиляторов и приходилось все писать числами. Вы даже представить себе не можете, какой это адский труд. Постоянно держать в памяти таблицу машинных кодов (это не таблица умножения). Например, вам понятно шестнадцатеричное число 8BC3? Нет? А это обычная команда копирования между двумя ячейками регистров. Регистр, это память в процессоре определенного объема, которая может использоваться для хранения значений, с которыми будет работать процессор. С ними работа происходит быстрее, чем с оперативной памятью, а размер зависит от архитектуры процессора.

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

Программист  это человек, а не железка и ему очень тяжело создавать логику работы программы в числах. Намного легче работать с привычными словами. Например, все ту же команду пересылки удобней записать словами типа "скопировать ebx в eax" (eax и ebx это регистры процессора). Но что делать, если компьютер не понимает слов, а только числа? Выход есть  написать такую программу, которая будет превращать написанный понятным человеку текст в машинные коды. Пусть компьютер сам создает байт-код. Программу, выполняющую эти действия, назвали компилятором, а язык,
на котором писался исходный текст программы, — языком программиро-
вания.



Рис. 1.5. Программа в машинных кодах и Assembler

И вот был разработан первый компилятор. Эту программу назвали Assembler, что переводится как "сборщик". Писать на нем практически так же сложно, как и в машинных кодах, однако теперь уже использовались не числа, а понятные, как показано на рис. 1.5, человеку слова. Текст на рисунке можно разделить на три колонки:

  • адрес инструкции;

  • машинный код инструкции;

  • код на языке Ассемблера.

Теперь все та же команда копирования регистров выглядела так: mov eax, ebx. В данном случае mov — это команда языка программирования, которая происходит от английского слова move, двигать. eax и ebx — имена регистров. Получается, что приведенная выше команда может читаться как двигать в регистр eax значение из ebx. Да, код на ассемблере не совсем нагляден, но зато намного удобнее, чем то же самое, но в машинных кодах.

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

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

Тогда никто не мог себе представить, чем же все может закончиться. Но время показало свое. С помощью Assembler программы писались быстрее, а это один из основных факторов успеха любой программы на рынке. Люди начинают пользоваться тем продуктом, который выходит на рынок первым. Даже если более поздний вариант лучше, человека трудно переубедить перейти на другую версию. Здесь начинает играть большую роль фактор привычки.
К тому же, когда программист напишет свою первую версию программы в машинных кодах, программист на языке Assembler выпустит уже пару новых версий.

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

С этого момента начался бум. Языки программирования стали появляться один за другим. Так появились ^ С, ADA, FoxPro, Fortran, Basic, Pascal и др. Некоторые из них были предназначены только для школьников или обучения, другие были ориентированы на профессиональных программистов.
И тут споры перенеслись в другую плоскость  какой язык лучше. Некоторые говорили, что это Pascal, другие утверждали, что С, ну а кое-кто утверждал, что это Basic. Этот спор длится уже около 30 лет и конца ему не видно. При этом все спорные вопросы разделились на две части.

  1. Какой язык самый лучший?

  2. Что лучше  язык высокого уровня или низкого?

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

Так все же, какой язык лучше? На этот вопрос можно дать ответ, но немного позже.

Наиболее интересным был спор: "Что лучше  язык высокого уровня или низкого?" Язык низкого уровня это тот, который ориентирован на команды процессора, т. е. Assembler. К языкам высокого уровня относят С, Pascal, Basic и другие (на то время это были структурные языки программирования, они имели более высокий уровень по сравнению с ассемблером). Они ориентированы на людей и создают им максимум удобства при написании программ. Этот спор проходил в той же манере, как и спор между любителями Assembler и любителями программирования в машинных кодах. Только теперь приверженцы языка Assembler утверждали, что их код самый быстрый, а любители языков высокого уровня утверждали, что они напишут программу быстрей, чем самый лучший программист на языке Assembler.

Спор продолжался достаточно долгое время. И опять победила скорость разработки и "удобство" языка программирования. Любителям Assembler пришлось отступить, потому что теперь они превратились в " догоняющих".

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

Следующей ступенью стало объектно-ориентированное программирование. Язык С превратился в ^ С++, Pascal превратился в Object Pascal и т. д. И снова борьба. И снова скорость разработки против скорости выполнения программного кода. Опять споры, драки и оскорбления.

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

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

Лидером в разработке визуальных языков программирования является Borland, а приверженцем ООП остается Microsoft. Конечно же, Билл Гейтс пытается встроить в свои языки визуальность, но она примитивна по сравнению с такими гигантами, как Delphi, Kylix или C++ Builder. Это связано с изначально неправильной разработкой MFC (Microsoft Foundation Classes  Основные Классы Microsoft), которые не могут работать визуально. Нужна глобальная переработка кода, которую почему-то не хотят делать. Вот народ и стоит на двух атомных бомбах, ожидая взрыва одной из них. Как вы думаете, какая бомба рванет? Что победит  скорость разработки или скорость кода? Я не буду отвечать на этот вопрос. История говорит сама за себя, а мы подождем подтверждения этому.

К моменту написания этих строк, победитель уже начинает вырисовываться. Классический С++ уходит в сторону, а вместо него появляется С# и мощные визуальные средства, идеология которых была позаимствована у Java и Delphi. Но Delphi уже давно визуальный и ориентирован на объекты и в нашей стране получил большую популярность, а С# только пытается захватить рынок.

Считается, что прогресс не будет стоять на одном месте и переход на новые технологии программирования рано или поздно состоится. Поэтому я уже перешел на Delphi. Если вы хотите успеть за прогрессом, то тоже обязаны вступить в партию любителей Borland и его подразделения по средствам разработки CodeGear. Выбирайте любой из его компиляторов, и вы не ошибетесь. Для вас есть все, что угодно, — Delphi, JBuilder, Kylix или C++ Builder. Как видите, у корпорации Borland есть визуальные варианты всех языков, и они действительно лучшие.

Осталось только ответить на вопрос: "Какой язык программирования лучше?" Я уже несколько лет пытаюсь ответить на этот вопрос, но окончательного решения вынести не могу. Даже у того же Visual C++ от Microsoft есть свои плюсы, хотя я его не очень люблю за корявость объектной модели. Как это ни странно, но положительные стороны есть у всех. Вопрос остается только за тем, какие программы будут создаваться? Здесь можно дать примерно такую градацию.

  1. Если вы будете писать базы данных, программы общего значения или утилиты, то ваш язык Delphi или C++ Builder.

  2. Если это игры, то желательно Visual C++ плюс знание Assembler. Но это не значит, что нельзя использовать Delphi или C++ Builder. В этих средах вы потеряете не намного больше в скорости работы, поэтому в большинстве игр можно не обращать внимания на эту потерю. Если правильно использовать свои знания, то и на самом медленном и слабом языке программирования можно создать шедевр.

  3. Если это будут драйверы и работа с "железом", где критичен размер файла, ваш язык чистый С или Assembler.

И все же большую массу программ занимают утилиты и базы данных. А тут визуальность необходима, если вы хотите оказаться впереди. Визуальные языки будут жить и за ними будущее. На протяжении всей этой книги будет рассматриваться самый лучший (это на мой взгляд, и он может отличаться от других) язык программирования  Delphi.

Корпорация Microsoft тоже движется в сторону визуальности и простоты разработки программных продуктов. Об этом говорит их новая платформа .NET и язык разработки С#.
^

1.4. Исполнение машинных команд


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

Мы уже разобрались с байтом и его размером. Теперь рассмотрим другие существующие размерности:

  • 1 килобайт = 1024 байт;

  • 1 мегабайт = 1024 килобайт;

  • 1 гигабайт = 1024 мегабайт.

Почему именно 1024? Это число 2 в 10-й степени. В компьютере большинство значений являются степенью числа 2, потому что компьютер оперирует двоичной системой, и таким образом можно максимально эффективно использовать его возможности.

Сегмент  это область внутренней (оперативной) памяти компьютера (внешняя память представлена накопителями на магнитных дисках и лентах). Раньше, когда операционные системы были 16-битными, процессор не мог работать с памятью размером более 64 килобайт, потому что это максимальный размер области памяти, который можно адресовать, используя в этих целях адрес длиной в два байта. Поэтому память делилась на сегменты по размеру и по назначению. На данный момент мы используем 32-разрядную ОС, которая может адресовать до 4 Гбайт оперативной памяти (длина адреса  32 бита или 4 байта). Поэтому можно сказать, что память стала сплошной. Однако деление ее по назначению все-таки осталось.

Существуют следующие сегменты памяти:

  • сегмент кода  в эту область памяти загружается машинный код, который будет потом выполнятся процессором;

  • cегмент данных  это область памяти для хранения данных;

  • cегмент стека  область памяти для хранения временных (локальных) данных и адресов возврата из процедур.

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

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

На рис. 1.6 показан регистр EAX. Полная его длина 32 бита, но младшая половина  это регистр АХ (16-битный вариант регистра). То есть если мы "попросим" процессор показать нам содержимое регистра АХ, то мы увидим половину регистра ЕАХ. Иногда это очень удобно, особенно когда требуется прочитать только половину числа из регистра.



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

Я думаю, что этого будет достаточно для понимания основ работы компьютера и программ. Если вы хотите узнать больше, то советую почитать спецификации Intel, которых можно найти великое множество на сайте www.intel.com.



Рис. 1.6. Регистры


Добавить документ в свой блог или на сайт

Похожие:

Основные принципы работы компьютера iconЛабораторная работа №1 Тема: Операционная система Windows. Главное...
Ель: изучить основные правила поведения в компьютерном классе; изучить основные устройства компьютера; изучить клавиатуру ibm-совместимых...

Основные принципы работы компьютера iconГеннадий Верников Стандарт mrpii. Концепция и основные принципы работы...
Стандарт mrpii. Концепция и основные принципы работы систем, поддерживающих этот стандарт

Основные принципы работы компьютера iconЦели и основные принципы аудита
Правила (стандарт) аудиторской деятельности «Цели и основные принципы, связанные с аудитом бухгалтерской отчетности» 17

Основные принципы работы компьютера iconДля чего необходимо заземление и стабилизация питания компьютера?
Технология работы на персональном компьютере, определение конфигурации компьютера

Основные принципы работы компьютера iconЛекция 1-03 Тема 3
Несмотря на то, что компьютеры разного класса и разного назначения, основные компоненты и принципы компоновки в этих компьютерах...

Основные принципы работы компьютера iconЛекция: msf it решение. Основные принципы msf. Модель команды: основные...
Стремясь достичь максимальной отдачи от реализации заказных it-решений и в целях улучшения работы с субподрядчиками обобщила свой...

Основные принципы работы компьютера iconПодгайная Марина Эдуардовна Основные принципы анализа художественного текста (из опыта работы)
...

Основные принципы работы компьютера iconУстройство компьютера
Такое определение подразумевает, что для: работы компьютера нужны как минимум две составляющие: аппаратные средства (hardware) и...

Основные принципы работы компьютера iconЛекция 2 Тема: Устройство и структура персонального компьютера. План:...
Компьютер (англ computer — вычислитель) представляет собой программируемое электронное устройство, способное обрабатывать данные...

Основные принципы работы компьютера iconПлан Основные принципы учета 1 Особенности организация учета 3 Список...
«Особенности организации бухгалтерского дела в государственных унитарных организациях»

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<