Computer Systems
文章平均质量分 74
zhangyubingcatherine
这个作者很懒,什么都没留下…
展开
-
Code to print the byte representation of program objects
This code uses casting to circumvent the type system. Firstly, cast pointers to byte_pointer, pointing to an object of type "unsigned char" which represents a single byte. Seondly, printf and cout ar原创 2013-10-28 13:30:15 · 545 阅读 · 0 评论 -
Nonlocal Jumps
C provides a form of user-level exceptional control flow, called anonlocal jump, that transfers control directly from one function to another currently executing function without having to go throug原创 2013-12-12 22:34:11 · 637 阅读 · 0 评论 -
How Linkers Use Static Libraries to Resolve References
While static libraries are useful and essential tools, they are also a source of confusion to programmers because of the way the Unix linker uses them to resolve external references. During the symb原创 2013-12-06 14:15:50 · 588 阅读 · 0 评论 -
Error Handling
Programmers should always check the error codes returned by system-level functions. There are many subtle ways that things can go wrong, and it only makes sense to use the status information that th原创 2013-12-30 22:31:03 · 685 阅读 · 0 评论 -
Using Threads for Parallelism
Thus far in our study of concurrency, we have assumed concurrent threads executing on uniprocessor systems. However, many modern machines have multi-core processors. Concurrent programs often run fa原创 2013-12-30 14:33:47 · 621 阅读 · 0 评论 -
Using mmap to Copy an Arbitrary-sized Disk File to stdout
The low-level system callsmmap and munmap can be used to create and delete areas of virtual memory. We will write a C programmmapcopy.c that uses mmap to copy an arbitrary-sized disk file tostdo原创 2013-12-17 09:37:38 · 1062 阅读 · 0 评论 -
Garbage Collection
A garbage collector is a dynamic storage allocator that automatically frees allocated blocks that are no longer needed by the program. We introduce Mark&Sweep garbage collectors here. A Mark&原创 2013-12-18 16:00:06 · 890 阅读 · 0 评论 -
Common Memory-Related Bugs in C Programs
Managing and using virtual memory can be a difficult and error-prone task for the C programmers. Memory-related bugs are among the most frightening because they often manifest themselves at a distan原创 2013-12-18 18:45:23 · 750 阅读 · 0 评论 -
Building Your Own Allocator
While it is certainly possible to use the low-levelmmap and munmap functions to create and delete areas of virtual memory, C programmers typically find it more convenient and more portable to use a原创 2013-12-18 15:30:32 · 669 阅读 · 0 评论 -
Robust Reading and Writing
In some situations,原创 2013-12-21 10:02:27 · 931 阅读 · 0 评论 -
Sharing Files
Suppose the disk filefoobar.txt consists of the six ASCII characters "foobar". Then what is the output of the following program?int main(){ char c; int fd1 = open("foobar.txt", O_RDONLY,原创 2013-12-21 19:41:55 · 791 阅读 · 0 评论 -
Robust Buffered Reading
a原创 2013-12-21 11:20:10 · 952 阅读 · 0 评论 -
Concurrent Programming with Processes
Applications that use application-level concurrency are known asconcurrent programs. Modern operating systems provide three basic approaches for building concurrent programs: processes, I/O multiple原创 2013-12-25 15:19:15 · 755 阅读 · 0 评论 -
Client and Server Code on Network Programming
The best way to learn the sockets interface is to study example code. The code for an echo client is showed below.#include #include #include int main(int argc, char **argv){ char *hostname, b原创 2013-12-25 10:15:37 · 719 阅读 · 0 评论 -
Concurrent Programming with I/O Multiplexing
Suppose you are asked to write an echo server that can also respond to interactive commands that the user types to standard input. In this case, the server must respond to two independent I/O events原创 2013-12-25 16:21:56 · 853 阅读 · 0 评论 -
Signal Handling on Exceptional Control Flow
A signal is a small message that notifies a process that an event of some type has occurred in the system. Consider the following program.#include #include "csapp.h"using namespace std;pid_t pid原创 2013-12-12 21:46:28 · 616 阅读 · 0 评论 -
Using Blocking to Increase Temporal Locality
In the last essay Rearranging Loops to Increase Spatial Locality we saw how some simple rearrangements of the loops could increase spatial locality. But observe that even with good loop nestings,原创 2013-12-04 10:27:53 · 1116 阅读 · 0 评论 -
Using waitpid to Reap Zombie Children
When a process terminates for any reason, the kernel does not remove it from the system immediately. Instead, the process is kept around in a terminated state until it is reaped by its parent. When原创 2013-12-11 11:32:34 · 1087 阅读 · 0 评论 -
How to Realize the Two's Complement of -128?
We all know that -128 can be represented as [10000000] as a 8-bit two's-complement number. However, it is not in accordance with the convention which bits but the most significant one are inverted and原创 2013-10-29 13:11:05 · 418 阅读 · 0 评论 -
Implementing a Recursive Procedure with IA32 and Y86 Assembly Code
d原创 2013-11-15 20:38:20 · 2439 阅读 · 0 评论 -
Bit-level Difference between Float and Double
Here is a segment of C++ code.#include "stdafx.h"#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ double sum1=0; for (double i=0.01f; i<=1.0f; i+=0.01f) { sum1 += i;原创 2013-11-04 21:03:12 · 616 阅读 · 0 评论 -
Two Optimization Blockers Limiting the Compiler to Generate Optimized Code
Modern compilers employ sophisticated algorithms to determine what values are computed in a program and how they are used[1]. However, compilers apply only safe optimizations to a program, and constra原创 2013-11-20 22:38:17 · 1795 阅读 · 0 评论 -
Transforming an Abstract Program into More Efficient Code Systematically
We will use a running example based on the vector data structure from Ref. 1. The structure is declared as follows:typedef int data_t;#define IDENT 1#define OP *typedef struct { long int le原创 2013-11-22 22:58:42 · 819 阅读 · 0 评论 -
Further Optimizations Exploiting the Microarchitecture of the Processor
In the prior essay Transforming an Abstract Program into More Efficient Code Systematically, we applied optimizations that did not rely on any features of target machine. They simply reduced the ov原创 2013-11-23 22:50:05 · 755 阅读 · 0 评论 -
Writing Code Suitable for Implementation with Conditional Moves
The effect of a mispredicted branch can be very high, but the branch prediction logic found in modern processors is very good at discerning regular patterns and long-term trends for the different b原创 2013-11-25 18:31:37 · 608 阅读 · 0 评论 -
Exhibiting Good Locality in Your Programs
Well written computer programs tend to exhibit good locality. That is, they tend to reference data items that are near other recently referenced data items, or that were recently referenced themselves原创 2013-11-27 21:06:52 · 595 阅读 · 0 评论 -
Assembly-Level Representation of Programs on IA32 and x86-64
Below is the C code for example.long example(long* xp, long y){ long t = *xp + y; *xp = t; return t;}原创 2013-11-14 14:08:11 · 806 阅读 · 0 评论 -
Conflict Misses in Direct-Mapped Caches
Conflict misses are common in real programs and can cause baffling performance problems. Conflict misses in direct-mapped caches typically occur when programs access arrays whose sizes are a power o原创 2013-11-28 18:12:43 · 759 阅读 · 0 评论 -
How Linkers Relocate Symbol References
Once the linker has completed the symbol resolution step, it has associated each symbol reference in the code with exactly one symbol definition. At this point, the linker knows the exact sizes of t原创 2013-12-07 08:42:11 · 831 阅读 · 0 评论 -
An Application Program Dynamically Loading and Linking the Shared Library
Shared libraries are a modern innovation that address the disadvantages of static libraries. A shared library is an object module that, at run time, can be loaded at an arbitrary memory address and li原创 2013-12-08 09:14:54 · 731 阅读 · 0 评论 -
Writing Cache-friendly Code
In the previous essayExhibiting Good Locality in Your Programs, we presented two functions namedsumarrayrows andsumarraycols respectively. And we knew thatsumarrayrows had a stride-1 reference原创 2013-12-02 10:49:40 · 1055 阅读 · 0 评论 -
Rearranging Loops to Increase Spatial Locality
Consider the problem of multiplying a pair ofn×n matrices: C = AB. For example, if n=2, then Matrix multiply is usually implemented using three nested loops, which are identified by their原创 2013-12-04 09:38:59 · 599 阅读 · 0 评论 -
Concurrent Programming with Threads
a原创 2013-12-27 20:36:05 · 730 阅读 · 0 评论