Posts

Showing posts from March, 2015

Memory organization and cache management

Image
In computer systems, caches are used to diminish the slowness of main memory which is larger and cheaper than cache memory. Caches are faster because not far from CPU and not as large as main memory. In modern computers, there may be more than one cache memory. The layers composed a memory hierarchy. The memory hierarchy is sometimes called an illusion to processors because a processor can have as large and fast a memory as it needs at the level of reasonable cost. In short, from a broader perspective it is easy to understand why memory hierarchies are needed; however, to understand how it works you need to narrow the perspective, e.g. taking account only two memory layers at one time. Key concepts are: cache miss and hit ratios. memory and cache and average access speed memory size, cache size block or cache line size set size direct mapping, fully associative mapping, set associative mapping address partitioning (tag bits, index/set bits, block bits) replacement algor

Memory design and virtual memory

Image
In the class of SWE 514 Computer Systems , I am studying low-level concepts about cpu and memory design. Although I am totally abstracted from them in daily programming life, I think If you are a software developer it is good to catch at least a glimpse of how memory management works, regardless you write low-level or high-level programs. In many respect, management burdens are being carried out by operation systems; however, sometimes having knowledge about these may help you in terms of performance or security issues. I am not going to explain what the memory management is here; instead, I will share some useful resources. The article titled " Principles of virtual memory " by Carl Burch and Hendrix College seems to me that it covers most of sides of virtual memory concept very concisely. After reading it, you will understand why virtual memory exists and which parts of it are actually crucial. In the following youtube playlist, virtual memory concept is discussed as why w

Injection libraries for Java, Android: Butterknife & Roboguice

Image
In this article, I will show you how to inject Android views using Roboguice and Butterknife, and how to use dependency injection using Roboguice. You can infer that Butterknife is not a dependency injection library. Why do we need them? If you start to develop programs beyond “hello world” with java or all other languages, you probably want to get rid of some repetitive, cumbersome boilerplate coding parts. Indeed, we should focus on logic, not on metaprogramming. For example, in Android development, you get view references as follows: In this code, we only want to change a textView’s text and show the labels of the two buttons. What we want is called our program’s logic. As it is obvious we have to write a lot of statements to achieve such a simple task. Now try to guess what happens if you have a lot of views, more than just two… Butterknife helps us to focus on logic With this library, it is easier for us to create view references. So you can write a shorter version