eolas/neuron/d0ed26d0-cdc8-4643-8c09-445408195f9b/.neuron/output/Memory_addresses.html

50 lines
14 KiB
HTML
Raw Normal View History

2024-10-20 19:00:04 +01:00
<!DOCTYPE html><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type" /><meta content="width=device-width, initial-scale=1" name="viewport" /><!--replace-start-0--><!--replace-start-5--><!--replace-start-8--><title>Memory addresses - My Zettelkasten</title><!--replace-end-8--><!--replace-end-5--><!--replace-end-0--><link href="https://cdn.jsdelivr.net/npm/fomantic-ui@2.8.7/dist/semantic.min.css" rel="stylesheet" /><link href="https://fonts.googleapis.com/css?family=Merriweather|Libre+Franklin|Roboto+Mono&amp;display=swap" rel="stylesheet" /><!--replace-start-1--><!--replace-start-4--><!--replace-start-7--><link href="https://raw.githubusercontent.com/srid/neuron/master/assets/neuron.svg" rel="icon" /><meta content="Computers assign numeric addresses to bytes of memory and the CPU can read or write to those addresses" name="description" /><meta content="Memory addresses" property="og:title" /><meta content="My Zettelkasten" property="og:site_name" /><meta content="article" property="og:type" /><meta content="Memory_addresses" property="neuron:zettel-id" /><meta content="Memory_addresses" property="neuron:zettel-slug" /><meta content="memory" property="neuron:zettel-tag" /><script type="application/ld+json">[]</script><style type="text/css">body{background-color:#eeeeee !important;font-family:"Libre Franklin", serif !important}body .ui.container{font-family:"Libre Franklin", serif !important}body h1, h2, h3, h4, h5, h6, .ui.header, .headerFont{font-family:"Merriweather", sans-serif !important}body code, pre, tt, .monoFont{font-family:"Roboto Mono","SFMono-Regular","Menlo","Monaco","Consolas","Liberation Mono","Courier New", monospace !important}body div.z-index p.info{color:#808080}body div.z-index ul{list-style-type:square;padding-left:1.5em}body div.z-index .uplinks{margin-left:0.29999em}body .zettel-content h1#title-h1{background-color:rgba(33,133,208,0.1)}body nav.bottomPane{background-color:rgba(33,133,208,2.0e-2)}body div#footnotes{border-top-color:#2185d0}body p{line-height:150%}body img{max-width:100%}body .deemphasized{font-size:0.94999em}body .deemphasized:hover{opacity:1}body .deemphasized:not(:hover){opacity:0.69999}body .deemphasized:not(:hover) a{color:#808080 !important}body div.container.universe{padding-top:1em}body div.zettel-view ul{padding-left:1.5em;list-style-type:square}body div.zettel-view .pandoc .highlight{background-color:#ffff00}body div.zettel-view .pandoc .ui.disabled.fitted.checkbox{margin-right:0.29999em;vertical-align:middle}body div.zettel-view .zettel-content .metadata{margin-top:1em}body div.zettel-view .zettel-content .metadata div.date{text-align:center;color:#808080}body div.zettel-view .zettel-content h1{padding-top:0.2em;padding-bottom:0.2em;text-align:center}body div.zettel-view .zettel-content h2{border-bottom:solid 1px #4682b4;margin-bottom:0.5em}body div.zettel-view .zettel-content h3{margin:0px 0px 0.4em 0px}body div.zettel-view .zettel-content h4{opacity:0.8}body div.zettel-view .zettel-content div#footnotes{margin-top:4em;border-top-style:groove;border-top-width:2px;font-size:0.9em}body div.zettel-view .zettel-content div#footnotes ol > li > p:only-of-type{display:inline;margin-right:0.5em}body div.zettel-view .zettel-content aside.footnote-inline{width:30%;padding-left:15px;margin-left:15px;float:right;background-color:#d3d3d3}body div.zettel-view .zettel-content .overflows{overflow:auto}body div.zettel-view .zettel-content code{margin:auto auto auto auto;font-size:100%}body div.zettel-view .zettel-content p code, li code, ol code{padding:0.2em 0.2em 0.2em 0.2em;background-color:#f5f2f0}body div.zettel-view .zettel-content pre{overflow:auto}body div.zettel-view .zettel-content dl dt{font-weight:bold}body div.zettel-view .zettel-content blockquote{background-color:#f9f9f9;border-left:solid 10px #cccccc;margin:1.5em 0px 1.5em 0px;padding:0.5em 10px 0.5em 10px}body div.zettel-view .zettel-content.raw{background-color:#dddddd}body .ui.label.zettel-tag{color:#000000}body .ui.label.zettel-tag a{color:#000000}body nav.bottomPane ul.backlinks > li{padding-bo
async=""
id="MathJax-script"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"
></script>
<link
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/themes/prism.min.css"
rel="stylesheet"
/><link rel="preconnect" href="https://fonts.googleapis.com" /><link
rel="preconnect"
href="https://fonts.gstatic.com"
crossorigin
/><link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=IBM+Plex+Sans+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=IBM+Plex+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=IBM+Plex+Serif:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet"
/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/components/prism-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/plugins/autoloader/prism-autoloader.min.js"></script>
<style>
body .ui.container,
body ul {
font-family: "IBM Plex Sans" !important;
}
body blockquote {
border-left-width: 3px !important;
font-style: italic;
}
.headerFont,
.ui.header,
body h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "IBM Plex Sans Condensed" !important;
}
body p {
line-height: 1.4;
}
.monoFont,
body code,
pre,
tt {
font-family: "IBM Plex Mono" !important;
font-size: 12px !important;
line-height: 1.4 !important;
}
</style>
<!--replace-end-7--><!--replace-end-4--><!--replace-end-1--></head><body><div class="ui fluid container universe"><!--replace-start-2--><!--replace-start-3--><!--replace-start-6--><div class="ui text container" id="zettel-container" style="position: relative"><div class="zettel-view"><article class="ui raised attached segment zettel-content"><div class="pandoc"><h1 id="title-h1">Memory addresses</h1><blockquote><p>Computers assign numeric addresses to bytes of memory and the CPU can read or write to those addresses</p></blockquote><p>We can think of the internals of RAM as grids of memory cells.</p><p>Each single-bit cell in the grid can be identified using two dimensional coordinates, like in a graph. The coordinates are the location of that cell in the grid.</p><p>Handling one bit at a time isnt very efficient so RAM accesses <strong>multiple grids</strong> of 1-bit memory cells in parallel. This allows for reads or writes of multiple bits at once, such as a whole byte.</p><p>The location of a set of bits in memory is known as a <strong>memory address</strong>.</p><h3 id="demonstration">Demonstration</h3><p>Lets imagine we have a computer system that can address up to 64KB of memory and our system is byte addressable. This means there are <span class="math inline">\(64 \cdot 1024 = 65,536\)</span> bytes of memory because 1KB = 1024 bytes.</p><p>We therefore have 65,536 addresses and each address can store one byte. So our addresses go from 0 to 65, 535.</p><p>We now need to consider how many bits we need to uniquely represent an address on this system.</p><p>What does this mean? Although there are approximately 64 thousand bytes of memory, to refer to each byte we cant just use 1, 2, 3… because computers use binary numbers. We need a binary number to refer to a given byte in the the 64KB of memory. The question we are asking is: how long does this binary number need to be to be able to represent each of the 64 thousand bytes?</p><p>1 bit can represent two addresses: 0 and 1. 2 bits can represent four addresses: 00, 01, 10, 11. The formula is as follows: number of addresses = <span class="math inline">\(2^n\)</span> where <span class="math inline">\(n\)</span> is the number of bits.</p><p>We need to reverse this formula to find out how many bits we need to represent a given number of addresses. We can do this with a <span class="zettel-link-container cf"><span class="zettel-link" title="Zettel: Logarithms"><a href="Logarithms.html">logarithm</a></span></span>.</p><p>We can reverse the formula as follows: number of bits = <span class="math inline">\(\log_2\)</span> (number of addresses).</p><p>In our case we have 65,536 addresses so we need <span class="math inline">\(\log_2(65,536)\)</span> bits to represent each address. This is approximately 16 bits. Thus a 16 bit memory iaddress is needed to address 65, 546 bytes.</p><p>Using memory addresses we end up with tables like the following:</p><table class="ui table"><thead><tr><th>Memory address</th><th>Data</th></tr></thead><tbody><tr><td>0000000000000000</td><td>1010101010101010</td></tr><tr><td>0000000000000001</td><td>0010001001001011</td></tr><tr><td>0000000000000010</td><td>0010001001001010</td></tr></tbody></table><p>This is hard to parse so we can instead use <span class="zettel-link-container cf"><span class="zettel-link" title="Zettel: Hexadecimal number system"><a href="Hexadecimal_number_system.html">hexadecimal numbers</a></span></span> to represent the addresses:</p><table class="ui table"><thead><tr><th>Memory address (as hex)</th><th>Data (as binary)</th></tr></thead><tbody><tr><td>0x0000</td><td>1010101010101010</td></tr><tr><td>0x0001</td><td>0010001001001011</td></tr><tr><td>0x0002</td><td>0010001001001010</td></tr></tbody></table><p>By itself, the the data is meaningless but we know from <span class="zettel-link-container cf"><span class="zettel-link" title="Zettel: Binary encoding"><a href="Binary_encoding.html">binary encoding</a></span></span> that the binary data will correspond to some meaningful data, such as a character or a colour, d