From 1a5a0b903d51248c7a64127ff723dc2984b10f95 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Fri, 12 Jul 2024 09:00:03 +0100 Subject: [PATCH] Autosave: 2024-07-12 09:00:03 --- .zk/notebook.db | Bin 4153344 -> 4153344 bytes zk/DRAM_and_SRAM_memory.md | 32 ++++- zk/Memory.md | 216 ---------------------------- zk/Register_and_cache_memory.md | 40 ++++++ zk/Role_of_memory_in_computation.md | 32 +++++ zk/The_memory_hierarchy.md | 12 ++ zk/VirtualMemory.md | 8 +- zk/What_is_memory.md | 17 +-- 8 files changed, 123 insertions(+), 234 deletions(-) delete mode 100644 zk/Memory.md create mode 100644 zk/Register_and_cache_memory.md create mode 100644 zk/Role_of_memory_in_computation.md create mode 100644 zk/The_memory_hierarchy.md diff --git a/.zk/notebook.db b/.zk/notebook.db index dc05620eb4a19221878853f9b949fc81130c2426..0a7da94b60ab37baf1c558df98866a4666f152aa 100644 GIT binary patch delta 49001 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 L+!;SR^NapB*D(PY delta 47358 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 SP5kc3{ClO=w66V}<9`9fn(j~l diff --git a/zk/DRAM_and_SRAM_memory.md b/zk/DRAM_and_SRAM_memory.md index 30d076e..e47950a 100644 --- a/zk/DRAM_and_SRAM_memory.md +++ b/zk/DRAM_and_SRAM_memory.md @@ -1,9 +1,37 @@ --- title: DRAM_and_SRAM_memory -tags: [memory] +tags: [memory, hardware] created: Friday, July 12, 2024 --- # DRAM_and_SRAM_memory -## Related notes +There are two types of RAM memory: [SRAM and DRAM](./DRAM_and_SRAM_memory.md). + +### DRAM + +DRAM uses capacitors to create the memory cell: + +> a **capacitor** is an electronic component that stores electrical energy in an +> electrical field. A device which can accumulate and release electrical charge. + +In a DRAM cell, each bit of data is stored as a charge in a capacitor. The +presence of charge represents a '1' bit and the absence of charge represents a +'0' bit. Each of these cells is paired with a [transistor](Transistors.md) that +controls the reading and writing of data. + +However capacitors lose [charge](Current.md) over time due to leaks. As a result +DRAM is memory that needs to be refreshed (recharged) frequently. For this +reason and because it only uses one transistor and capacitor per bit, DRAM is +the less expensive form of volatile memory. + +### SRAM + +SRAM (Static Random Access Memory) is also volatile memory but its electronical +implementation is different. Unlike DRAM it doesn't use capacitors. Consequently +the transistors do not leak or need to be refreshed, hence why SRAM is _static_ +and DRAM is _dynamic_. + +SRAM uses [flip flops](Flip_flops.md) to store the bits. It also uses multiple +transistors per bit. This makes it faster than DRAM but more expensive. DRAM is +at least ten times slower than SRAM. diff --git a/zk/Memory.md b/zk/Memory.md deleted file mode 100644 index b1ab9b0..0000000 --- a/zk/Memory.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -tags: - - memory - - computer-architecture ---- - -# Memory - -## Why do we need memory? - -> A CPU is just an operator on memory. It reads its instructions and data from -> the memory and writes back out to the memory. (Ward 2021) - -When a [CPU](CPU_architecture.md) executes a program, -it needs a place to store the program's **instructions** and **related data**. -This is the role of memory. - -## What is memory? - -The data that comprises a program is a series of bits. The basic unit of memory -storage is a **memory cell**: a circuit that can store a single bit. - -## Memory types - -There are two types of memory: SRAM and DRAM. Both types of RAM memory are -_volatile_ : the memory is only retained whilst the computer has a power supply -and is wiped when the computer is rebooted. This contrasts with the memory of -the harddisk which is non-volatile and is retained after a reboot. - -Programs that are executing are loaded into memory because the chips that -comprise memory can read and store data much faster than the harddisk. It would -be possible to run a program from the harddisk but it would be 500 - 1000 times -slower than memory. - -#### DRAM - -DRAM uses capacitors to create the memory cell: - -> a **capacitor** is an electronic component that stores electrical energy in an -> electrical field. A device which can accumulate and release electrical charge. - -In a DRAM cell, each bit of data is stored as a charge in a capacitor. The -presence of charge represents a '1' bit and the absence of charge represents a -'0' bit. Each of these cells is paired with a -[transistor](Transistors.md) that -controls the reading and writing of data. - -However capacitors lose -[charge](Current.md) over time due -to leaks. As a result DRAM is memory that needs to be refreshed (recharged) -frequently. For this reason and because it only uses one transistor and -capacitor per bit, DRAM is the less expensive form of volatile memory. - -#### SRAM - -SRAM (Static Random Access Memory) is also volatile memory but its electronical -implementation is different. Unlike DRAM it doesn't use capacitors. Consequently -the transistors do not leak or need to be refreshed, hence why SRAM is _static_ -and DRAM is _dynamic_. - -SRAM uses [flip flops](Flip_flops.md) -to store the bits. It also uses multiple transistors per bit. This makes it -faster than DRAM but more expensive. DRAM is at least ten times slower than -SRAM. - -## The role of memory in computation - -The following steps outline the way in which memory interacts with the processor -during computational cycles, once the -[bootstrapping](Boot_process.md) process has completed and -the OS kernel is itself loaded into memory. - -1. A file is loaded from the harddisk into memory. -2. The instruction at the first address is sent to the CPU, travelling accross - the data bus part of the [system bus](Bus.md). -3. The CPU processes this instruction and then sends a request accross the - address bus part of the system bus for the next instruction to the memory - controller within the - [chipset](Chipset_and_controllers.md). -4. The chipset finds where this instruction is stored within the - [DRAM](Memory.md#dram) and issues a request to - have it read out and send to the CPU over the data bus. - -> This is a simplified account; it is not the case that only single requests are -> passed back and forth. This would be inefficient and time-wasting. The kernel -> sends to the CPU not just the first instruction in the requested file but also -> a number of instructions that immediately follow it. - -![](/img/memory-flow.svg) - -Every part of the above process - the journey accross the bus, the lookup in the -controller, the operations on the DRAM, the journey back accross the bus - takes -multiple CPU clock cycles. - -## CPU register and cache memory - -As partly indicated in the diagram above, the CPU has its own memory in the form -of registers and cache memory. - -Registers are a form of memory that are positioned on the same chip as the CPU. -They are very fast but can only store a small amount of data. They are used to -store the results of calculations and the addresses of the next instructions to -be processed. - -The cache is SRAM memory that is separate from the DRAM memory which comprises -the main memory. It exists in order to boost perfomance when executing the -read/request cycles of the steps detailed above. - -There are two types of cache memory: - -- L1 cache - - Situated on the CPU chip itself - - Fastest to access but stores less -- L2 cache - - Situated outside of the CPU on its own chip - - Slower to access than L1 but can store more data - -The L1 cache is the fastest since the data has less distance to travel when -moving to and from the CPU. This said, the L2 cache is still very fast when -compared to the main memory, both because it is SRAM rather than DRAM and -because it is closer to the processor than the main memory. - -Cache controllers use complex algorithms to determine what should go into the -cache to facilitate the best performance, but generally they work on the -principle that what has been previously used by the CPU will be requested again -soon. If the CPU has just asked for an instruction at memory location 555 it's -very likely that it will next ask for the one at 556, and after that the one at -557 and so on. The cache's controller circuits therefore go ahead and fetch -these from slow DRAM to fast SRAM. - -## The memory hierarchy - -The diagram below compares the different forms of memory within a computing -device in terms of speed, monetary cost and capacity: - -![](/img/Memory-Hierarchy.jpg) - -## Memory addresses - -> Computers assign numeric addresses to bytes of memory and the CPU can read or -> write to those addresses - -We can think of the internals of RAM as grids of memory cells. - -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. - -Handling one bit at a time isn't very efficient so RAM accesses **multiple -grids** of 1-bit memory cells in parallel. This allows for reads or writes of -multiple bits at once, such as a whole byte. - -The location of a set of bits in memory is known as a **memory address**. - -### Demonstration - -Let's imagine we have a computer system that can address up to 64KB of memory -and our system is byte addressable. This means there are -$64 \cdot 1024 = 65,536$ bytes of memory because 1KB = 1024 bytes. - -We therefore have 65,536 addresses and each address can store one byte. So our -addresses go from 0 to 65, 535. - -We now need to consider how many bits we need to uniquely represent an address -on this system. - -What does this mean? Although there are approximately 64 thousand bytes of -memory, to refer to each byte we can't 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? - -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 = $2^n$ where $n$ -is the number of bits. - -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 -[logarithm](Logarithms.md). - -We can reverse the formula as follows: number of bits = $\log_2$(number of -addresses). - -In our case we have 65,536 addresses so we need $\log_2(65,536)$ bits to -represent each address. This is approximately 16 bits. Thus a 16 bit memory -address is needed to address 65, 546 bytes. - -Using memory addresses we end up with tables like the following: - -| Memory address | Data | -| ---------------- | ---------------- | -| 0000000000000000 | 1010101010101010 | -| 0000000000000001 | 0010001001001011 | -| 0000000000000010 | 0010001001001010 | - -This is hard to parse so we can instead use -[hexadecimal numbers](Hexadecimal_number_system.md) -to represent the addresses: - -| Memory address (as hex) | Data (as binary) | -| ----------------------- | ---------------- | -| 0x0000 | 1010101010101010 | -| 0x0001 | 0010001001001011 | -| 0x0002 | 0010001001001010 | - -By itself, the the data is meaningless but we know from -[binary encoding](Binary_encoding.md) that the -binary data will correspond to some meaningful data, such as a character or a -colour, depending on the encoding scheme used. The above table could correspond -to the characters for 'A', 'B' and 'C' in the ASCII encoding scheme: - -| Memory address (as hex) | Data (as binary) | Data (as ASCII) | -| ----------------------- | ---------------- | --------------- | -| 0x0000 | 1010101010101010 | A | -| 0x0001 | 0010001001001011 | B | -| 0x0002 | 0010001001001010 | C | diff --git a/zk/Register_and_cache_memory.md b/zk/Register_and_cache_memory.md new file mode 100644 index 0000000..67ce351 --- /dev/null +++ b/zk/Register_and_cache_memory.md @@ -0,0 +1,40 @@ +--- +title: Register_and_cache_memory +tags: [memory, CPU] +created: Friday, July 12, 2024 +--- + +# Register and cache memory + +The CPU has its own memory devices in the form of registers and cache memory. + +[Registers](./CPU_architecture.md#Registers) are a form of memory that are +positioned on the same chip as the CPU. They are very fast but can only store a +small amount of data. They are used to store the results of calculations and the +addresses of the next instructions to be processed. + +The cache is SRAM memory that is separate from the DRAM memory which comprises +the main memory. It exists in order to boost perfomance when executing the +read/request cycles of the steps detailed above. + +There are two types of cache memory: + +- L1 cache + - Situated on the CPU chip itself + - Fastest to access but stores less +- L2 cache + - Situated outside of the CPU on its own chip + - Slower to access than L1 but can store more data + +The L1 cache is the fastest since the data has less distance to travel when +moving to and from the CPU. This said, the L2 cache is still very fast when +compared to the main memory, both because it is SRAM rather than DRAM and +because it is closer to the processor than the main memory. + +Cache controllers use complex algorithms to determine what should go into the +cache to facilitate the best performance, but generally they work on the +principle that what has been previously used by the CPU will be requested again +soon. If the CPU has just asked for an instruction at memory location 555 it's +very likely that it will next ask for the one at 556, and after that the one at +557 and so on. The cache's controller circuits therefore go ahead and fetch +these from slow [DRAM to fast SRAM](./DRAM_and_SRAM_memory.md). diff --git a/zk/Role_of_memory_in_computation.md b/zk/Role_of_memory_in_computation.md new file mode 100644 index 0000000..b694ccc --- /dev/null +++ b/zk/Role_of_memory_in_computation.md @@ -0,0 +1,32 @@ +--- +title: Role_of_memory_in_computation +tags: [memory] +created: Friday, July 12, 2024 +--- + +# The role of memory in computation + +The following steps outline the way in which memory interacts with the processor +during computational cycles, once the [bootstrapping](Boot_process.md) process +has completed and the OS kernel is itself loaded into memory. + +1. A file is loaded from the harddisk into memory. +2. The instruction at the first address is sent to the CPU, travelling accross + the data bus part of the [system bus](Bus.md). +3. The CPU processes this instruction and then sends a request accross the + address bus part of the system bus for the next instruction to the memory + controller within the [chipset](Chipset_and_controllers.md). +4. The chipset finds where this instruction is stored within the + [DRAM](Memory.md#dram) and issues a request to have it read out and send to + the CPU over the data bus. + +> This is a simplified account; it is not the case that only single requests are +> passed back and forth. This would be inefficient and time-wasting. The kernel +> sends to the CPU not just the first instruction in the requested file but also +> a number of instructions that immediately follow it. + +![Memory flow diagram](/img/memory-flow.svg) + +Every part of the above process - the journey accross the bus, the lookup in the +controller, the operations on the DRAM, the journey back accross the bus - takes +multiple CPU clock cycles. diff --git a/zk/The_memory_hierarchy.md b/zk/The_memory_hierarchy.md new file mode 100644 index 0000000..93975f3 --- /dev/null +++ b/zk/The_memory_hierarchy.md @@ -0,0 +1,12 @@ +--- +title: The_memory_hierarchy +tags: [memory] +created: Friday, July 12, 2024 +--- + +# The memory hierarchy + +The diagram below compares the different forms of memory within a computing +device in terms of speed, monetary cost and capacity: + +![Memory hierarchy diagram](/img/Memory-Hierarchy.jpg) diff --git a/zk/VirtualMemory.md b/zk/VirtualMemory.md index 704ccd4..2c33809 100644 --- a/zk/VirtualMemory.md +++ b/zk/VirtualMemory.md @@ -14,7 +14,8 @@ operations. When an OS implements virtual memory, [processes](./Processes.md) in [user space](./User_Space.md) cannot directly read or write to the actual memory. Instead they execute memory operations against virtual memory and the -kernel translates these into the actual operations against the memory hardware. +[kernel](./The_kernel.md) translates these into the actual operations against +the memory hardware. The main benefits: @@ -25,7 +26,8 @@ The main benefits: Because the physical memory is abstracted, it can be the case that the physical [memory addresses](./Memory_addresses.md) are non-contiguous or even distributed -accross different hardware components (such as the cache and swap). Despite +accross different hardware components (such as the +[cache](./Register_and_cache_memory.md) and [swap](./Swap_space.md)). Despite this, the memory addresses will appear contiguous in virtual memory. Each user space process is presented with the same range of available memory addresses and the same total capacity. @@ -52,4 +54,4 @@ other with separate address spaces that cannot interact. // Next: the kernel also uses virtual memory however isn't also responsible for the appportioning of virtual memory. Confused. -![Virtual memory diagram](/img/virtual-memory-diagram.jpg) +// See Claude convo ![Virtual memory diagram](/img/virtual-memory-diagram.jpg) diff --git a/zk/What_is_memory.md b/zk/What_is_memory.md index f5ad72d..aa99713 100644 --- a/zk/What_is_memory.md +++ b/zk/What_is_memory.md @@ -6,30 +6,21 @@ created: Friday, July 12, 2024 # What is memory ? -## Why do we need memory? - > A CPU is just an operator on memory. It reads its instructions and data from > the memory and writes back out to the memory. (Ward 2021) When a [CPU](CPU_architecture.md) executes a program, it needs a place to store the program's **instructions** and **related data**. This is the role of memory. -## What is memory? - The data that comprises a program is a series of bits. The basic unit of memory storage is a **memory cell**: a circuit that can store a single bit. -## Memory types - -There are two types of memory: [SRAM and DRAM](./DRAM_and_SRAM_memory.md). Both -types of RAM memory are _volatile_ : the memory is only retained whilst the -computer has a power supply and is wiped when the computer is rebooted. This -contrasts with the memory of the harddisk which is non-volatile and is retained -after a reboot. +[RAM](./DRAM_and_SRAM_memory.md) memory is _volatile_ : the memory is only +retained whilst the computer has a power supply and is wiped when the computer +is rebooted. This contrasts with the memory of the harddisk which is +non-volatile and is retained after a reboot. Programs that are executing are loaded into memory because the chips that comprise memory can read and store data much faster than the harddisk. It would be possible to run a program from the harddisk but it would be 500 - 1000 times slower than memory. - -## Related notes