Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Организация оперативной памяти в операционных системах  (Прочитано 33127 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« : 11-08-2005 14:56 » 

Уважаемые коллеги!
Прошу не прибивать тему и не бить ногами.Начинаю  осваивать С++ по книге Джеса Либерти "Освой самаостоятельно С++ за 21 день". Дошел до половины, в принципе все понятно. Вкратце в книге говрится о стеках, регистрах процессора, динамической памяти. Но хотелось бы иметь более полное представление об организации оперативной памяти для дальнейшего осмысления работы ссылок и указателей - классы сразу у меня ассоциируются с тензорами и нормально воспринимаются. Не дадите ли ссылки по данной теме на литературу (лучше в электронном виде), но написанную нормальным человеческим языком. Ибо в отличии от бестселера всех времен и народов по теоретической физике Ландау- Лившица (говорю это без сарказма а с уважением, так как с 8 томами из 10 пришлось познакомится в институте) русские учебники (пособия) по информатике весьма кривоваты для начинающего (мое ИМХО)   
Записан

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

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 11-08-2005 15:24 » 

классы сразу у меня ассоциируются с тензорами
Это как?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 11-08-2005 15:40 » 

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

Кстати, а какое отношение твоего вопроса к unix? Почему бы не переместить темку в ANSI C/C++?
« Последнее редактирование: 11-08-2005 15:41 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 11-08-2005 19:37 » 

Просто сижу и осваиваю С++ в виде Сан Студио под Солярис. А вопрос заключаестя в стеках, регистрах и динамической памяти - так как в книжке все дано в общих чертах, а я привык основательно подходить к терминам и определниям, дабы иметь полную картину. Пока таких глобальных непоняток по ссылкам и указателям нет, но просто интересно знатьсабж вопроса, потму что как я понял это имеет некое отношение и к ассемблеру
Я не против перемещения в ANSI C++
« Последнее редактирование: 11-08-2005 19:44 от NL » Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 11-08-2005 19:43 » 

классы сразу у меня ассоциируются с тензорами
Это как?
========================================================
В теоретической физике для построения матмодели использовались такие обьекты как тензоры различных рангов
Вводилась операции свертки, и допустим сворачиваем определенные индексы - получаем ускорение, сворачиваем другие - энергию или моммент импульса - так и класс - создаем обьект (тензор), описываем его члены (аналог индексов) и вводим методы доступа (функции, конструкторы). Блин, правда после института прошло уже 10 лет, стал забывать, надо пойти справочник корна купить
« Последнее редактирование: 11-08-2005 19:46 от NL » Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 11-08-2005 19:45 » 

NL, Давай начнем с самого начала, что ты вообше знаеш, о работе компа. Или для тебя это черный яшик. Для чего нужен процессор, ОЗУ, ПЗУ, Дисковое ЗУ? Принципы работы процессора? Принципы обрашения к оперативной памяти. Чем отличаются регистры процессора? Если на все эти и многие другие вопросы ты сможеш давать утвердительные ответы. Дальше все пойдет уже по накатанной колее.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 11-08-2005 19:47 » 

Finch - по части компов я продвнутый юзер - в состоянии устнавить и сконфигурить для домашнего пользвоания  Винду, FreeBSD, или Solaris, ставил и Линукс, но мои моральные принципы запрщают мне юзать контрафактное Свободное ПО типа Suse или Mandrakeи как человек консервативный я более тяготею какому либо порядку и упоярдочности. Что такое железячки внутри компа я знаю, о прцессоре знаю что есть архитекртуры различные - CISC -x86, просемжуточник - наверное это АМД64 (сейчас Sun активно с ними работает) и пошли RISC - осталось их только очень мало - PowerPC от IBM, Sparc от SUN, и Itanium II от интела (туда HP Отдала свой PA-RISC)
все мои познания о камне состявляют следующие дефиниции
1. Физические характеристики - частота, архитектура, кэш - это думаю не имеет отношения к теме.
2. Есть шина данных и есть шина адресов - соттвественно 32 бита для х86 и несколько болше дя АМД64
Остальное для меня черный пока ящик- регистры, стеки и прочее
« Последнее редактирование: 11-08-2005 19:58 от NL » Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 11-08-2005 19:54 » 

Статические переменные - переменные которые как правило создаются на стадии компиляции. Заботу о выделении и удалении памяти для переменных берет на себя компилятор.
Динамические переменные - переменные создаются во время работы программы, заботу о выделении памяти и удалении берет на себя программист.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 11-08-2005 20:04 » 

Статические переменные - переменные которые как правило создаются на стадии компиляции. Заботу о выделении и удалении памяти для переменных берет на себя компилятор.
Это понятно - обявил я там что нибудь типа int a, float внутри main  - в какой области пямяти они создаются? Функция в какой области памяти - стек, регистры созается?

Динамические переменные - переменные создаются во время работы программы, заботу о выделении памяти и удалении берет на себя программист.
Это я насколько понял operator new -можно создавать как внутри main, так в какой либо функции и возвращать либо знаечение (но только одно) лиюо ссылку или указатель
это память динамическая, соотвественно удаляем delete - в случае указателя - обнуляем указатель, в случае ссылки удалить нельсзя так как ссылка ссылается на существующий обьект
« Последнее редактирование: 11-08-2005 20:06 от NL » Записан

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

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #9 : 11-08-2005 20:04 » 

Я не против перемещения в ANSI C++
Ок, я перенёс.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 11-08-2005 20:11 » 

Я не против перемещения в ANSI C++
Ок, я перенёс.
Спасибо
Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Mayk
Гость
« Ответ #11 : 11-08-2005 20:28 » 

Это понятно - обявил я там что нибудь типа int a, float внутри main - в какой области пямяти они создаются? Функция в какой области памяти - стек, регистры созается?
Они создаются в стеке и уничтожаются автоматически при выходе из функции. Выделение и освобождение памяти при этом происходит в лёт. Хотя теоретически float переменные могут загрузится в отдельный стек x87(стек для работы с дробными числами).
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 11-08-2005 20:32 » 

В теории информации минимальное количество информации это 1 бит. Для простоты работы в компьютерах применяют двоичную систему счисления. Один разряд памяти может принимать значения 0 или 1. В истории были случаи применения деситичной системы. Это первый комп ЭНИАК. Но это не слишком надежно.
Такая запись например 00100010110110b не очень удобна для прочтения и повторения человеком. Поэтому начали объединять и переводить в более высокую систему счисления. Так в истории развития были восьмиричная и шестнадтиричная системы счисления. На данный момент более прижилась шестнадтиричная система счисления. Обазначения числа 0 .... 9, A, B, C, D, E, F. Сделали также объединение числа по восемь знаков. 1 байт - это 8 бит. И получается что байт может менять значение от 0 и до 255.
1 байт это очень маленький пул информации. Тогда сделали несколько байт. И чтобы как-то различать их присвоили 1 байту индекс 0, второму 1, и.т.д. Байт может нести информацию, например что это буква А. Также может нести в себе команду для процессора. Например Обнулить ячейку памяти по такому то индексу. Процессор выполняет команды строго последовательно. Команды могут изменять состояние как и процессора так и окружаюшей среды. Исключение составляют "прерывания". Они могут быть двух видов. Внешние и внутрение. Прерывание сообшает процессору, что проихошло какое либо событие и срочно требуется отработать программу-реакцию на данное событие. После отработки данной программы, основная программа должна дальше работать, как бы не замечая что произошло прерывание. Поэтому для этого нужно сохранить состояние процессора. Один из путей это Стэк. Это область памяти, которая отводит система или программа для сохранения состояний регистров процессора. Как правило Стэк действует по методу LIFO (Last in First Out) Работа со стеком производится процессором на аппаратном уровне. Задача системы только выделить под стэк память. В одной и той же ячейке памяти не могут находится две абсалютно разные переменные, так чтобы изменение состояния одной не приводило к изменению другой. Поэтому очень важно распределение памяти между программным кодом, переменными и стэком. Также кодом Операционной системы.
« Последнее редактирование: 11-08-2005 20:37 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 11-08-2005 21:12 » 

Это понятно, а регистры что жто такое
Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #14 : 11-08-2005 21:25 » 

Регистры процессора являют собой состояние процессора.  Это такие же ячейки памяти, только в самом процессоре. Для примера из серии x86.
Есть обшие регистры:
AX, BX, CX, DX это обшие регистры в них програмист может хранить любую информацию для оперативного доступа. Как правило все операции по преобразованию данных (прибавление, отнимание ...) в основном производятся над обшими регистрами, а не над ячейками памяти вне процессора .
Есть специальные регистры.
SP, BP, SI, DI, DS, ES, SS, SC, IP, Flag - эти регистры характеризуют состояние процессора. Т.е. в каком месте программы он сейчас находится, счетчики стэка, состояние последней операции (переполнение, нуль и.т.д) и.т.д.
« Последнее редактирование: 11-08-2005 21:47 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Pu
Большой босс

ru
Offline Offline
78


« Ответ #15 : 12-08-2005 05:39 » 

NL, если хочешь больше знать о использовании памяти , регистров и тд - С++ чуток не то что нужно. В полной мере это проявляется в использовании ASM. Здесь использование регистров, системы команд проца, распределение памяти(как стека так и динамической) лежит на твоих плечах.
Как ресурсик с обучающими статьями програмирования под Win на ASMе http://learnasm.narod.ru/. Хотя в программировании на WIn работа с ресурсами компа сводится к вызову процедур из системных библиотек, может как-то поможет пролить свет, если желаешь закопаться так глыбоко Ага.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 12-08-2005 11:46 » 

Хочу немного поправить, да бы не было разночтения терминов.
В С и С++ типы хранения:
1) статический: память выделяется компилятором и переменная существует весь срок работы программы - она не удаляется.
2) автоматический: автоматическое выделение места в неком хранилище при входе в блок, в котором эта переменная определена, и автоматическое уничтожение при выходе из блока. Подобное хранилище удобно реализуется стеком. Если архитектура процессора позволяет, то для хранения может использоваться стек процессора.
3)  динамический: выделение и освобождение памяти по желанию программиста. Конструкциями языка не поддерживается и реализуется через стандартные библиотеки C (malloc/free) и С++ (new/delete). Память выделяется в так называемой "куче" - блоке памяти.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Pu
Большой босс

ru
Offline Offline
78


« Ответ #17 : 12-08-2005 12:30 » 

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

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 12-08-2005 13:24 » 

RXL, это в принципе и необходимо знать для программирования в С и С++. И еще некоторые нюансы, например такие, как-то что память выделяется в стеке под автоматические переменные во много раз быстрее чем в куче (помогает существенно ускорить работу программы с помощью написания своих распределителей памяти (так называемых аллокаторов)). В принципе эти вещи очн неплохо описаны у Джеффа Элджера в книжке С++ для настоящих програмистов Ага. Всем рекомендую почитать сие издание . Здесь на сайте есть в литературе.
========================================
Спасибо, будем читать
Часть III, глава 13
« Последнее редактирование: 12-08-2005 13:26 от NL » Записан

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

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 12-08-2005 14:40 » 

NL, если хочешь больше знать о использовании памяти , регистров и тд - С++ чуток не то что нужно. В полной мере это проявляется в использовании ASM. Здесь использование регистров, системы команд проца, распределение памяти(как стека так и динамической) лежит на твоих плечах.
Я бы даже перефразировал немножко... NL, если хочешь больше знать о С++, то использование памяти , регистров и тд чуток не то что нужно... Улыбаюсь Улыбаюсь

Согласен полностью с RXL. Это необходимо и достаточно знать для С++...
А методы организации памяти в разных операционных системах (в том числе динамическое выделение и возврат памяти) ИМХО нипричем. Иначе язык С++ (именно ЯЗЫК, а не КОМПИЛЯТОР) был бы свой для каждой операционки. Честно говоря, я сам, не смотря на достаточно долгий опыт работы с С++ и с разными системами и компиляторами  никогда особенно не озадачивался подобными вопросами Улыбаюсь

А вааще, народ, немного не в тему.... Но чего-то не захотелось писать в тему "Общение", мне тут вы  уже многие по общению знакомы, хотя и заочно....
Пропадал я довольно долго из форума и еще долго видимо писать не буду... Еду во вторник в областной онкологический центр на консультацию - устанавливать окончательный диагноз. Прогнозы - дрянь, боюсь по страшному. Но пытаюсь хвост пистолетом держать.
Такие дела Жаль
« Последнее редактирование: 12-08-2005 14:44 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Alf
Гость
« Ответ #20 : 12-08-2005 21:48 » 

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

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 13-08-2005 12:10 » 

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

ещё один вопрос ...
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 13-08-2005 23:02 » 

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

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

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 14-08-2005 03:12 » 

Спасибо всем за поддержку!!!!! Улыбаюсь
Во вторник - врядли будет результат. Придется "прилечь" на недельку, как минимум. Анализы, образцы ткани и прочая дрянь... Результат - дней через 10.
Хвост - это да! Хвост я стараюсь держать пистолетом! Я еще лет 40 проживу, минимум Улыбаюсь
Пусть никому не покажется мой заказ маловатым Улыбаюсь Мне и так уже за 40 Улыбаюсь
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 14-08-2005 13:17 » 

А мне в этом году стукнуло 40 - будем переквалифициорватся в управдомы (программисты)Улыбаюсь
Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #25 : 14-08-2005 14:29 » 

У "некоторых народов" желают жить до 120. Так что все впереди. Даже половину пути еше не прошли. Выше нос и хвост трубой.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 14-08-2005 16:51 » 

Как я сразу не допер до того, что сказал Михалыч - был же на сайте GCC и не оставил в памяти зарубку что сей язык под всем платофрмы и камни, что автоматом должно навести на мысль которую озвучил михалыч
"А методы организации памяти в разных операционных системах (в том числе динамическое выделение и возврат памяти) ИМХО нипричем. Иначе язык С++ (именно ЯЗЫК, а не КОМПИЛЯТОР) был бы свой для каждой операционки. Честно говоря, я сам, не смотря на достаточно долгий опыт работы с С++ и с"
Маленький вопрос не потеме упражнение 9.13 из книги выше приведенной мною как компилится в Визуал СИ - просто автор жалуется на то взуал Си на момент написания спокойно компилировал исходник где было  возвращение ссылок на несуществющий обьект ссылка на обьект в локальной фенкции - компиляторы от Борланда, гнушный, и Сановский сразу руганулись
Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #27 : 14-08-2005 16:59 » new

Это зависит от реализации языка той или иной компанией. Да и от уровня контроля ошибок. В Вижуале можно поставить уровень "Параноик". Тогда почти на каждую букву он будет ругаться. И зависит как построена логика оптимизации компилятора. На моем примере. Делал я прогу в Билдере. Все прекрасно работало. Перевел ее в Вижуал. В дебаг моде работает нормально. В Релиз моде прога не работает. Так до сих пор и не понял почему.
« Последнее редактирование: 14-08-2005 17:02 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 14-08-2005 18:07 » 

Я пока тренируюсь на командной строке в  Solaris 10, идем от простого к сложному
Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines