Висновки
Ми розглянули пам'ять з асоціативним доступом, і дізналися, що даний вид пам’яті поділяється на чотири типи:
Пам'ять з повним паралельним асоціативним доступом
Пам'ять з неповним паралельним асоціативним доступом
Пам'ять з послідовним асоціативним доступом
Пам'ять з частково асоціативним доступом
Асоціативна пам’ять має ряд переваг і недоліків. Головна перевага пам'яті з асоціативним доступом визначається тим, що час пошуку інформації залежить тільки від числа розрядів в ознаці пошуку і швидкості опиту розрядів, і не залежить від числа регістрів пам'яті. А недоліками її є: необхідність двократного звернення до однієї комірки пам'яті та досить складна організація.
Базуючись на концепції асоціативного пошуку можна побудувати цілу низку структур пам'яті з асоціативним доступом . Конкретна структура визначається тим, як поєднані наступні чотири основні елементи її організації:
• вид пошуку інформації;
• спосіб зчитування інформації при множинних збігах;
• спосіб запису інформації;
• варіант порівняння ознак.
А також ми створили програму «Віртуальна клавіатура» за допомогою мови програмування JavaScript, та дослідили на її прикладі використання короткострокової пам’яті комп’ютера.
Література
Мельник А. «Архітектура комп’ютерів» 2008 – 469 с.
Мельник А. О. Принципи організації управління для одного классу багатоступінчастих комутуючих мереж. Матеріали НТК "Досвід розробки та застосування приладо-технологічних САПР мікроелектроніки". - Львів, 1995. - Ч. 1 . - с. 28-29.
Мельник А. А., Илькив В. С. Реализация алгоритмов сортировки. Систолические вычислительные структуры. Препринт N3-87. ИППММ АН УССР. - Львов, 1988. - с. 25-26.
Мельник А. А. О подходе к реализации многоступенчатых коммутирующих сетей. Высокопроизводительные вычислительные системы. Препринт N6-89. - Львов, 1989. - с. 46-47.
Воеводин В. В., Воєводин В. В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002 - 608 с.
Головки Б. А. Параллельные вычислительные системы. - M . : Наука, 1980. - 520 с.
Мультипроцессорные системы и параллельные вычисления / Под ред. Ф. Г. Энслоу. - Мир, 1976. - 384 с.
Тербер К. Дж. Архитектура высокопроизводительных вычислительных систем / Пер. с англ. - М.: Наука. Главная редакция физико-математической литературы, 1985. - 272 с.
Abraham, S. and Padmanabhan, К. Performance of the direct binary n-cube network for multiprocessors. IEEE Transactions on Computers, 38, 1000-1011 (1989).
Agrawal, P., Janakiram, V. and Pathak, G. Evaluating the performance of multicomputer configurations. IEEE Transaction on Computers, 19, 23-27 (1986).
Al-Tawil, K. , Abd-El-Barr, M. and Ashraf, F. A survey and comparison of wormhole routing techniques in mesh networks. IEEE Network, March/April 1997, 38-45 (1997).
Bhuyan, L. N. (ed.) Interconnection networks for parallel and distributed processing. Computer (Special issue), 20, 9-75 (1987).
Bhuyan, L. N. , Yang, Q. and Agrawal, D. P. Performance of multiprocessor interconnection networks. Computer, 22, 25-37 (1989).
Chen, W.-T. and Sheu, J.-P. Performance analysis of multiple bus interconnection networks with hierarchical requesting model. IEEE Transactions on Computers, 40, 834-842 (1991).
ДОДАТОК №1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Virtual Keyboard: Martiuk Olexander</title> <style> html{ width:100%; height: 100%; } body { min-width: 100%; min-height: 100%; margin: 0; } </style> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content="Geany 1.23.1" /> <link rel="stylesheet" type="text/css" href="assets/keyboard.css" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="assets/keyboard.js"></script> </head> <body> <div class="jsKeyBoard" style="padding: 10px; border:thin solid #000; min-height:20px; background:#aaa"> </div> </body> </html>
ДОДАТОК №2
.keyboardBtn{ background: url("images/ui-bg_glass_20_555555_1x400.png") repeat-x scroll 50% 50% #555555; border: 1px solid #666666; color: #EEEEEE; font-weight: bold; font-size: 1em; -moz-user-focus: ignore; cursor: pointer; height: 2em; line-height: 2em; margin: 0.1em; min-width: 1em; overflow: hidden; width: 2em; border-radius: 6px; cursor: pointer; -webkit-user-select: none; /* Chrome/Safari */ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE10+ */ /* Rules below not implemented in browsers yet */ -o-user-select: none; user-select: none; } .keyboardBtn:hover, .activated{ background:url("images/ui-bg_glass_40_0078a3_1x400.png") repeat-x scroll 50% 50% #0078A3; border:1px solid #59B4D4; } .btnbksp, .btntab{ width:9%; } .btnenter{ background: url("images/ui-bg_inset-soft_30_f58400_1x100.png") repeat-x scroll 50% 50% #F58400; border: 1px solid #FFAF0F; color: #FFFFFF; font-weight: bold; min-width: 4em; width: auto; } .btnshift{ min-width: 4em; width: auto;} #keyboardContainer{ display: block; position: absolute; padding: 0.3em; border-radius: 6px; background: url("images/ui-bg_inset-soft_25_000000_1x100.png") repeat-x scroll 50% bottom #000000; border: 1px solid #666666; } .default_container, .shift_container{ font-size: 1.1em; text-align: center; white-space: nowrap; } #keyboardPreview{ background: url("images/ui-bg_inset-soft_25_000000_1x100.png") repeat-x scroll 50% bottom #000000; border: 1px solid #666666; color: #FFFFFF; border-radius: 6px; margin: 0 0 3px; text-align: left; width: 99%; padding: 5px 0; height: 20px; } .btnspace{ width:50%; } .btnaccept, .btncancel{ background: url("images/ui-bg_inset-soft_30_f58400_1x100.png") repeat-x scroll 50% 50% #F58400; border: 1px solid #FFAF0F; color: #FFFFFF; font-weight: bold; min-width: 4em; width: auto; } .key_holder{ border:thin solid #000; width: 100%; padding:15px 0; }
ДОДАТОК №3
$(document).ready(function(){ (function($) { $.fn.nodoubletapzoom = function() { $(this).bind('touchstart', function preventZoom(e) { var t2 = e.timeStamp , t1 = $(this).data('lastTouch') || t2 , dt = t2 - t1 , fingers = e.originalEvent.touches.length; $(this).data('lastTouch', t2); if (!dt || dt > 500 || fingers > 1) return;
// not double-tap e.preventDefault(); // double tap - prevent the zoom // also synthesize click events we just swallowed up $(this).trigger('click').trigger('click'); }); }; })(jQuery); //$("body").nodoubletapzoom(); create_keyboard("jsKeyBoard"); }); var keyboardPreview; var keyboard_layout = {
'alpha' : {
'default': [ '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}', '{tab} q w e r t y u i o p [ ] \\', 'a s d f g h j k l ; \' {enter}', '{shift} z x c v b n m , . / {shift}', '{accept} {space} {cancel}'
],
'shift': [
'~ ! @ # $ % ^ & * ( ) _ + {bksp}', '{tab} Q W E R T Y U I O P { } |', 'A S D F G H J K L : " {enter}', '{shift} Z X C V B N M < > ? {shift}', '{accept} {space} {cancel}' ]
} } function create_keyboard(class_name){ $("."+class_name).click(function(){ if(typeof keyboardContainer == 'undefined'){ //create a div to hold the keyboard keyboardContainer = $('<div/>', { id: 'keyboardContainer', css: {'display' : 'block'}, }).appendTo('body'); keyboardPreview = $('<div />', { id: 'keyboardPreview' }).appendTo(keyboardContainer); kb_load_keyboard_container("alpha"); handle_onclick_events(class_name); } else { keyboardContainer.toggle(); } }) } function append_message(btn_message){ $(keyboardPreview).append(btn_message); } function handle_onclick_events(class_name){ $(".keyboardBtn").click(function(){ selected_button = $(this).text(); if(selected_button.length > 1) special_button_click(selected_button, class_name); else append_message(selected_button); }); } function special_button_click(button, class_name){ switch (button){ case 'enter': return append_message("<br />"); break; case 'tab': return append_message("\t"); break; case 'space': return append_message(" "); break; case 'bksp': current_message = $(keyboardPreview).html(); $(keyboardPreview).html(current_message.substring(0, current_message.length-1));; break; case 'shift': default_container.toggle(); $(".btnshift").toggleClass("activated"); shift_container.toggle(); break; case 'accept': keyboardContainer.hide(); $("."+class_name).html(keyboardPreview.html()); keyboardPreview.html(""); break; case 'cancel': keyboardContainer.hide(); keyboardPreview.html(""); break; } } function kb_load_keyboard_container(choosen_layout){ //get the current keyboard layout current_layout = keyboard_layout[choosen_layout]; //create the container of the default keyboard default_container = $('<div/>', {'class': 'default_container'}).appendTo(keyboardContainer); kb_loop_to_get_keys(current_layout['default'], default_container); //create container for the shift keyboard shift_container = $('<div/>', { 'class': 'shift_container', css : {'display': 'none'} }).appendTo(keyboardContainer); kb_loop_to_get_keys(current_layout['shift'], shift_container); set_keyboard_position(); } function set_keyboard_position(){ keyboardContainer.css("top",(parseInt($(window).height()) - parseInt(keyboardContainer.css("height")))/2); keyboardContainer.css("left",(parseInt($(window).width()) - parseInt(keyboardContainer.css("width")))/2); } function kb_loop_to_get_keys(data_to_get, div_to_append){ //get the default keyboard data for(x in data_to_get){ //split the rows into key row_keys = data_to_get[x].toString().split(" "); //create the container of the row keyboard_row = $('<div/>', { 'class': 'keyboard_row', }).appendTo(div_to_append); for(key in row_keys){ //prepare the keys to be inserted on the container kb_build_button(row_keys[key], kb_check_special_button(row_keys[key])); } } } function kb_build_button(button_name, is_special_button){ //if itis a special button remove the {} and add it to the class name
if(is_special_button){
button_name = button_name.substring(1,button_name.length-1) button_class_name = "keyboardBtn btn"+button_name; } else { button_class_name = "keyboardBtn"; } key_container = $('<button/>', { "role":"button", "aria-disabled":"false" , "tabindex":"-1" , "class":"ui-keyboard-button ui-keyboard-96 ui-state-default ui-corner-all "+button_class_name , "data-value":button_name , "name":"96", "data-pos":"0,0", "title":"" }).appendTo(keyboard_row); $('<span/>', { text: button_name }).appendTo(key_container); } function kb_check_special_button(button_name){ //return true if its a special button special_char_pattern = /{[a-zA-Z]+}/ return button_name.search(special_char_pattern) != -1; }
