Skip to content

Commit 1e1fe96

Browse files
committed
finish chapter1
1 parent 16d9ce4 commit 1e1fe96

File tree

9 files changed

+241
-0
lines changed

9 files changed

+241
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
/.history
2+
CSAPP_ch.pdf
3+
CSAPP_en.pdf

CSAPP_Book/authors.md

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
3+
<!--
4+
* @version:
5+
* @Author: StevenJokes https://github.com/StevenJokes
6+
* @Date: 2020-08-18 15:57:13
7+
* @LastEditors: StevenJokes https://github.com/StevenJokes
8+
* @LastEditTime: 2020-08-18 16:04:55
9+
* @Description:
10+
* @TODO::
11+
* @Reference:
12+
-->
13+
14+
Randal E.Bryant
15+
16+
David R. O'Hallaron
17+

CSAPP_Book/intro.md

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
3+
<!--
4+
* @version:
5+
* @Author: StevenJokes https://github.com/StevenJokes
6+
* @Date: 2020-08-18 16:13:32
7+
* @LastEditors: StevenJokes https://github.com/StevenJokes
8+
* @LastEditTime: 2020-08-18 16:24:49
9+
* @Description:
10+
* @TODO::
11+
* @Reference:
12+
-->
13+
14+
梅宏
15+
16+
* 实践串联理论
17+
* 9个配套的实验,在这些实验中,学生需要攻破计算机系统、设计CPU、实现命令行解释器、根据缓存优化程序等,在新鲜有趣的实验中理解系统原理,培养动手能力
18+
* x86-64、IntelCorei7的虚拟地址结构、SSD磁盘、IPv6等新技术内容
19+
20+
---
21+
22+
臧斌宇
23+
24+
实验:
25+
26+
* 硬件位操作完成复杂运算
27+
* 仿tracker和hacker
28+
* Shell和Proxy
29+
30+
---
31+
32+
龚奕利 贺 莲
33+
34+
完全x86_64
35+
36+
---
37+
38+
前言
39+
40+
对于希望继续学习系统软硬件实现的人来说,本书也是一本很有价值的介绍性读物。大多数系统书籍还倾向于重点关注系统的某一个方面,比如:硬件架构、操作系统、编译器或者网络。本书则以程序员的视角统一覆盖了上述所有方面的内容
41+
42+
43+
它们x86从处理16位字,发展到引人IA32处理器处理32位字,再到最近的X86-64处理64位字。
44+
45+
46+
解释性语言 如Python、Ruby或Perl
47+
48+
一个实验作业,需要将近10个小时。
49+
50+
Web aside(网络旁注)
51+

CSAPP_en_read.pdf

5.71 MB
Binary file not shown.

code/intro/hello.c

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
3+
/*
4+
* @version:
5+
* @Author: StevenJokes https://github.com/StevenJokes
6+
* @Date: 2020-08-18 23:22:54
7+
* @LastEditors: StevenJokes https://github.com/StevenJokes
8+
* @LastEditTime: 2020-08-18 23:23:55
9+
* @Description:
10+
* @TODO::
11+
* @Reference:
12+
*/
13+
#include <stdio.h>
14+
15+
int main()
16+
{
17+
printf("hello, world\n");
18+
return 0;
19+
}

code/intro/hello.exe

54.5 KB
Binary file not shown.

websites/Web_Asides.md

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
3+
<!--
4+
* @version:
5+
* @Author: StevenJokes https://github.com/StevenJokes
6+
* @Date: 2020-08-18 16:05:33
7+
* @LastEditors: StevenJokes https://github.com/StevenJokes
8+
* @LastEditTime: 2020-08-18 16:08:12
9+
* @Description:
10+
* @TODO::
11+
* @Reference:http://csapp.cs.cmu.edu/3e/waside.html
12+
-->
13+
14+
# CS:APP3e Web Asides
15+
16+
This page points to a number of Web asides that provide supplementary material for the textbook Computer Systems: A Programmer's Perspective, Third Edition (CS:APP3e), by Randal E. Bryant and David R O'Hallaron.
17+
These documents are copyrighted by the authors and are being posted on this web page with the following understanding: "These documents are being made available to the public, subject to copyright provisions. You are free to copy and distribute it, but you should not use any of this material without attribution."
18+
19+
Chapter 2: Representing and Manipulating Information
20+
DATA:BOOL — Boolean algebra and Boolean rings
21+
22+
TODO:? DATA:TMIN — Writing TMin in C
23+
24+
TODO:? DATA:TNEG — Bit-level representation of two's complement negation
25+
26+
Chapter 3: Machine-Level Representation of Programs
27+
28+
ASM:IA32 — IA32 programming
29+
ASM:EASM — Combining assembly code with C code
30+
31+
Chapter 4: Processor Architecture
32+
33+
ARCH:VLOG — Verilog implementation of a pipelined Y86-64 processor
34+
ARCH:HCL — HCL descriptions of Y86-64 processors
35+
36+
Chapter 5: Optimizing Program Performance
37+
38+
OPT:SIMD — Achieving greater
39+
parallelism with vector instructions
40+
41+
Chapter 6: The Memory Hierarchy
42+
43+
MEM:BLOCKING — Using blocking to increase temporal locality

websites/overview.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
3+
<!--
4+
* @version:
5+
* @Author: StevenJokes https://github.com/StevenJokes
6+
* @Date: 2020-08-18 16:00:46
7+
* @LastEditors: StevenJokes https://github.com/StevenJokes
8+
* @LastEditTime: 2020-08-18 16:03:05
9+
* @Description:
10+
* @TODO::
11+
* @Reference:http://csapp.cs.cmu.edu/
12+
-->
13+
14+
# Overview.
15+
16+
This book (CS:APP3e) is the third edition of a book that stems from the introductory computer systems course we developed at Carnegie Mellon University, starting in the Fall of 1998, called "Introduction to Computer Systems" (ICS). The presentation is based on the following principles, which aim to help the students become better programmers and to help prepare them for upper-level systems courses:
17+
18+
* Students should be introduced to computer systems from the perspective of a programmer, rather from the more traditional perspective of a system implementer. What does this mean?
19+
* Students should get a view of the complete system, comprising the hardware, operating system, compiler, and network.
20+
* Students learn best by developing and evaluating real programs that run on real machines.
21+
22+
We cover data representations, machine level representations of C programs, processor architecture, program optimizations, the memory hierarchy, linking, exceptional control flow (exceptions, interrupts, processes, and Unix signals), virtual memory and memory management, system-level I/O, basic network programming, and concurrent programming. These concepts are supported by series of fun and hands-on lab assignments. See the manuscript Preface for more details.
23+
Web asides. We had so much material for this book that we couldn't fit it all in! Instead, we have created electronic documents containing useful additional material, which we call Web asides. Check it out. You'll find interesting theoretical and practical information that goes beyond the scope of the book.
24+
25+
**Course Materials for Instructors and Students.** The Student Site contains additional material for the students. The Instructor Site contains a complete turnkey solution for teaching the course.

websites/student_site.md

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
2+
3+
<!--
4+
* @version:
5+
* @Author: StevenJokes https://github.com/StevenJokes
6+
* @Date: 2020-08-18 16:08:50
7+
* @LastEditors: StevenJokes https://github.com/StevenJokes
8+
* @LastEditTime: 2020-08-18 16:11:20
9+
* @Description:
10+
* @TODO::
11+
* @Reference:http://csapp.cs.cmu.edu/3e/students.html
12+
-->
13+
14+
# CS:APP3e Student Site
15+
16+
This page contains additional resources for students using the CS:APP3e text.
17+
18+
Material from the CS:APP Textbook
19+
Labs for self-study students (without solutions)
20+
Original PowerPoint line drawings and Excel graphs
21+
Code examples
22+
23+
Linux Reference Books
24+
25+
Michael Kerrisk, The Linux Programming Interface, No Starch Press, 2010.
26+
The essential Linux system programming guide by the maintainer of the Linux man pages. Clear, authoritative, and encyclopedic. Includes file I/O, processes, signals, time, threads, shared libraries, IPC, synchronization, and sockets. A great book.
27+
Online GDB Materials
28+
Beej's Quick Guide to GDB (based on the very handy gdb -tui mode)
29+
Two-page x86-64 GDB cheat sheet (pdf, txt)
30+
Online C and Linux Materials
31+
CS:APP3e Unix FAQ
32+
Prof. Norm Matloff's Unix/C Tutorial Center
33+
The GNU project provides online manuals for all GNU tools, including Emacs, GCC, GDB, and Make.
34+
IA32 and x86-64 Documentation
35+
The definitive Intel 64 and IA-32 Architectures Software Developer's Manuals are available online. These include:
36+
37+
Volume 1: Basic Architecture
38+
Volume 2a: Instruction Set Reference, A-M
39+
Volume 2b: Instruction Set Reference, N-Z
40+
Volume 3a: System Programming Guide, Part 1
41+
Volume 3b: System Programming Guide, Part 2
42+
43+
Chapter 1: A Tour of Computer Systems
44+
45+
1993 article by Dennis Ritchie on the Development of the C Language.
46+
47+
Chapter 2: Representing and Manipulating Information
48+
49+
Practice Problem 2.9: This problem uses the RGB color system as an illustration of a Boolean algebra. Here's a full color depiction of this color system.
50+
The CS:APP book presents several examples where the interplay between signed and unsigned arithmetic leads to bugs and security vulnerabilities. A book by Robert Seacord (from the Computer Emergency Response Team) describes a more complete collection of vulnerabilities and provides secure coding guidelines. Note in particular the advice to use unsigned data types for loop indices.
51+
Official report on the Ariane 5 failure.
52+
53+
Chapter 3: Machine-Level Representation of Programs
54+
55+
Chapter 4: Processor Architecture
56+
57+
Y86-64 tools and documentation
58+
Source distribution (README)
59+
Simulator guide (pdf)
60+
Technical report describing a successful effort at formally verifying an earlier version of the pipelined Y86 implementations. (pdf)
61+
62+
Chapter 5: Optimizing Program Performance
63+
64+
Complete code used as demonstration of program profiling
65+
Source distribution (README).
66+
Text files to benchmark word frequency analysis program
67+
Full text of the collected works of Shakespeare.
68+
Full text of Moby Dick.
69+
70+
Chapter 6: The Memory Hierarchy
71+
72+
Generate your own memory using the ECT memperf tool developed by Tom Stricker (the inventor of the memory mountain) and Christian Kurmann at ETH.
73+
A less sophisticated program from the CS:APP3e text for generating the memory mountain (tar)
74+
75+
Chapter 10: Virtual Memory
76+
77+
P. Wilson, M. Johnstone, M. Neely, and D. Boles, Dynamic Storage Allocation: A Survey and Critical Review, International Workshop on Memory Management, Kinross, Scotland, Sept, 1995. (pdf).
78+
Comprehensive reference on storage allocators.
79+
80+
Chapter 12: Network Programming
81+
82+
The Tiny Web server (tiny.tar).
83+
Expands with tar xvf tiny.tar into a directory called ./tiny that contains everything you need to test the Tiny web server, including sample HTML files, GIFS, CGI scripts, and the csapp.c and csapp.h files. Compiled and tested on Linux boxes.
84+
The authoritative list of MIME types.

0 commit comments

Comments
 (0)