Другие языки программирования и технологии

помогите пожалуйста решить задачу по работе компьютера!

подскажите пожалуйста решение задачи (желательно подробное), т.к. не могу найти формулы которые помогли бы её решить....заранее спасибо!! задача: !16разрядный компьютер имеет 24разрядную шину адреса и 16разрядную данных. в него установлено максимальное количество оперативной памяти. в начале работы, чтобы проверить исправность всей памяти, происходит тестирование: сначала в каждую ячейку памяти записывается число, состоящее из одних единиц, затем оно считывается и проверяется, что считанное число равно записанному. затем такие действия происходят с числом составленным из одних нулей. сколько времени займёт проверка всей памяти, если запись числа в память и чтение числа из памяти требуют по 2 такта работы, сравнение двух чисел требует одного такта, дополнительные команды, связанные с организацией цикла требуют 14 тактов. тактовая частота составляет 20 МГц
Это характеристики компьютера на процессоре IBM PC AT 286. Никаких астрономических чисел там нет.
24-разрядная шина адреса означает, что всего возможно обращение к 2^24 = 16777216 ячейкам памяти, в каждой ячейке хранится 1 байт, поэтому максимальный объем ОЗУ составляет 16 Мб. Такой объем у нас и установлен.
Теперь разберемся с тестом. Тест состоит из трех частей: запись данных в ячейку (2 такта) , чтение данных (2 такта) , сравнение (1 такт) . Всего 5 тактов, и дополнительные команды требуют еще 14 тактов. Всего 19 тактов. И так 2 раза, потому что сначала пишут единицы, а потом нули. Получается, что требуется 38 тактов на проверку 1 ячейки.
Тактовая частота составляет 20 МГц, значит за 1 с происходит 20 миллионов тактов.
В итоге: мы должны проверить 16777216 ячеек, на каждую тратится 38 тактов, значит для проверки всей памяти нужно 16777216*38 тактов, причем на каждые 20*10^6 тактов требуется 1 с времени.
Очевидно, что это займет Т = 16777216*38/(20*10^6) = 31876710,4 * 10^(-6) ~ 32 c
Николай Попов
Николай Попов
63 128
Лучший ответ
Ардак Макамбетов спасибо!!!)) теперь точно всё понятно))
Николай Попов Может быть, я объяснил более понятно, чем Поляков, но неизвестно, у кого цифры более правильные. Все зависит от организации цикла проверки - если в одном цикле происходит 2 проверки, на 1 и на 0, то прав он. Проверка 1 ячейки занимает 5*2 + 14 = 24 такта
А если эти проверки происходят отдельно, то прав я. Проверка 1 ячейки занимает (5 + 14)*2 = 38 тактов.
Алексей Стародубцев Не совсем так. Что бы проверить память информация там должна некоторое время полежать, хотя бы несколько секунд.
Поэтому если сразу записать и сразу считать, то мало что проверишь.
Поэтому получается, что нужно вначале записать единицы во все ячейки (это первый цикл 2+14=16 тактов), затем считать и проверить данные из всех ячеек (это второй цикл 2+1+14=17 тактов), затем нужно записать во все ячейки нули (это третий цикл 2+14=16 тактов), затем нужно считать и проверить (это 4-й цикл 2+1+14=17).
Итого получается на полную проверку одной ячейки нужно 16+17+16+17=66 тактов.
Настоящая проверка должна проходить именно так, а не сразу записал и сразу же через мгновение считал, так не проверишь память.
Николай Попов Да, и про 16-разрядную шину я забыл. Возможно, что данные действительно записываются по 2 байта сразу. Тогда вся проверка займет не 32, а 16 с.
Ардак Макамбетов ну тем не менее, хоть какое то представление о решении этой задачи у меня появилось)) так что спасибо вам!!))
не компьютер же, процессор!
Daniyar Bokshinov
Daniyar Bokshinov
1 884
Ардак Макамбетов компьютер. в условии написано так. ну подразумевается само собой процессор
(2+2+1)*2+14=24 такта на полную проверку одной ячейки
24-х разрядная шина адреса позволяет адресовать 2 в 24-й степени адреса или 16777216 байт (16 Мбайт) памяти.
Один адрес адресует один байт информации.
Так как шина данных 16-ти разрядная, то за один раз может считываться сразу два байта расположенные по соседним адресам, соответственно 24-х разрядную шину делим на 2 и получаем: 8388608 двухбайтных слов.
24 такта х 8388608 = 201326592 тактов потребуется для проверки всей памяти.
Тактовая частота 20 МГц или 20 000 000 Гц, это за 1 секунду.
Теперь делим: 201326592 тактов / 20 000 000 Гц = 10,0663296 секунд.
То есть потребуется почти 10 секунд на проверку всей памяти, при этом предполагается, что при проверке запись происходит сразу в две ячейки памяти, то есть в два соседних байта, так как шина адреса 16-ти разрядная.
Если запись и чтение будут идти однобайтным способом и будет использоваться не все 16 разрядов шины данных, а только 8, то потребует времени в 2 раза больше. Просто у преподователя не корректно написано: "сначала в каждую ячейку памяти записывается число.... ". Ячейка памяти это 1 байт, а шина 16-ти разрядная, поэтому можно сразу записывать или 1 или 2 байт. Но программа тестирования записывала бы скорее всего сразу по два байта в целях экономии времени.

А формулы для решения этой задачи вы нигде не найдёте, так как для решения берутся разные формулы, многие вычисления проводятся интуитивно.
Vadim Ulanov
Vadim Ulanov
540
Daniyar Bokshinov Аплодисменты Вашему энтузиазму
Ардак Макамбетов спасибо большое! а можно вопрос....(2+2+1)*2+14=24 это значит (2 такта на чтение + 2 на запись + 1 на сравнение)*2 (т.к. число сначала из 1, потом из 0) +14(доп. такты) я правильно поняла?? вот только смущыет почему 14 прибавляем один раз?? ведь у нас 2 цикла, для проверки числа из 1 и из 0....или я ошибаюсь...?
Ардак Макамбетов ещё не понятна вот эта строчка: "соответственно 24-х разрядную шину делим на 2 и получаем: 8388608 двухбайтных слов. " почему так получилось??
Vadim Ulanov Если быть ещё более точным, и принять во внимание саму методику проверку памяти, то количество тактов необходимых на проверку одной ячейки рассчитывается следующим образом:
1) Записали в одну или две ячейку число состоящее из одних ЕДИНИЦ - это 2 такта + команды на организацию цикла - 14 тактов = 16 тактов
Так записываются все ячейки.
2) Считывание информации 2 такта + сравнение 1 такт + команды на организацию цикла 14 тактов = 17 тактов.
Так проверяются все ячейки на единицы.
И потом пункты 1 и 2 для проверки при записи нулей.
Тогда получается: (16+17)*2=66 тактов на полную проверку одной ячейки.
То есть во все ячейки вначале записываются единицы, потом из всех ячеек считывается информация и проверяется на равенство единицам, потом во все ячейки записываются нули, потом из всех ячеек считывается информация и проверяется на равенство нулю.
Настоящая проверка должна быть именно таким спосом и соответственно на полную проверку одной ячейки требуется 66 тактов.