jekyll-theme-gaeblogx 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +9 -0
  4. data/_includes/algolia.html +75 -0
  5. data/_includes/backToTop.html +5 -0
  6. data/_includes/category.html +19 -0
  7. data/_includes/comments.html +46 -0
  8. data/_includes/footer.html +33 -0
  9. data/_includes/head.html +58 -0
  10. data/_includes/header.html +34 -0
  11. data/_includes/previousAndNext.html +13 -0
  12. data/_includes/sidebar-search.html +25 -0
  13. data/_includes/tag.html +16 -0
  14. data/_layouts/default.html +26 -0
  15. data/_layouts/demo.html +10 -0
  16. data/_layouts/page.html +31 -0
  17. data/_layouts/post.html +107 -0
  18. data/_sass/_backToTop.scss +49 -0
  19. data/_sass/_demo.scss +65 -0
  20. data/_sass/_footer.scss +63 -0
  21. data/_sass/_header.scss +174 -0
  22. data/_sass/_index.scss +174 -0
  23. data/_sass/_layout.scss +242 -0
  24. data/_sass/_page.scss +238 -0
  25. data/_sass/_post-old.scss +109 -0
  26. data/_sass/_post.scss +83 -0
  27. data/_sass/_reset.scss +119 -0
  28. data/_sass/_scrollbar.scss +35 -0
  29. data/_sass/_syntax-highlighting.scss +99 -0
  30. data/assets/10.jpg +0 -0
  31. data/assets/AWS-Introduction-ec2.png +0 -0
  32. data/assets/Cache-Oblivious-Algorithms-FunnelSort.jpg +0 -0
  33. data/assets/Condition-Variables-fig1.png +0 -0
  34. data/assets/Dynamic-Compilation-adaptJVM.pdf +0 -0
  35. data/assets/Dynamic-Compilation-dyncomp.pdf +0 -0
  36. data/assets/Fibonacci-Heap-Fig3.png +0 -0
  37. data/assets/Fibonacci-Heap-Fig5.png +0 -0
  38. data/assets/Fibonacci-Heap-Fig6.png +0 -0
  39. data/assets/Fibonacci-Heap-Fig7.png +0 -0
  40. data/assets/File-System-bc.jpg +0 -0
  41. data/assets/File-System-filetable.rich.jpg +0 -0
  42. data/assets/GIL-Battle.png +0 -0
  43. data/assets/GIL-CPU.png +0 -0
  44. data/assets/GIL-Check.png +0 -0
  45. data/assets/GIL-IO.png +0 -0
  46. data/assets/GIL-Measure-1.png +0 -0
  47. data/assets/GIL-Measure-2.png +0 -0
  48. data/assets/GIL-Signal.png +0 -0
  49. data/assets/GIL-Tick.png +0 -0
  50. data/assets/Garbage-Collection-Slides-gc.pdf +0 -0
  51. data/assets/Garbage-Collection-copying-1.png +0 -0
  52. data/assets/Garbage-Collection-copying-2.png +0 -0
  53. data/assets/Garbage-Collection-free-list.png +0 -0
  54. data/assets/Garbage-Collection-generation-1.png +0 -0
  55. data/assets/Garbage-Collection-mark-sweep.png +0 -0
  56. data/assets/Garbage-Collection-nursery-1.png +0 -0
  57. data/assets/Garbage-Collection-nursery-2.png +0 -0
  58. data/assets/Garbage-Collection-nursery-3.png +0 -0
  59. data/assets/Garbage-Collection-nursery-4.png +0 -0
  60. data/assets/Garbage-Collection-nursery-5.png +0 -0
  61. data/assets/Garbage-Collection-process.png +0 -0
  62. data/assets/Garbage-Collection-ref-counting.png +0 -0
  63. data/assets/Interpreter-Optimization-interp.pdf +0 -0
  64. data/assets/Memory-Management-fig1.png +0 -0
  65. data/assets/Memory-Management-fig2.png +0 -0
  66. data/assets/Memory-Management-fig3.png +0 -0
  67. data/assets/Memory-Management-fig4.png +0 -0
  68. data/assets/Memory-Management-fig5.png +0 -0
  69. data/assets/Memory-Management-fig6.png +0 -0
  70. data/assets/Memory-Management-fig7.png +0 -0
  71. data/assets/Memory-Management-fig8.png +0 -0
  72. data/assets/Multicore-GIL-1.png +0 -0
  73. data/assets/Multicore-GIL-2.png +0 -0
  74. data/assets/My-Photo.JPG +0 -0
  75. data/assets/Operating-System-Virtualization-ept.png +0 -0
  76. data/assets/Operating-System-Virtualization-guest-page.png +0 -0
  77. data/assets/Operating-System-Virtualization-kvm-arch.png +0 -0
  78. data/assets/Operating-System-Virtualization-kvm-process.png +0 -0
  79. data/assets/Operating-System-Virtualization-kvm-qemu.png +0 -0
  80. data/assets/Operating-System-Virtualization-kvm-state.png +0 -0
  81. data/assets/Operating-System-Virtualization-vtx.png +0 -0
  82. data/assets/Operating-System-Virtualization-xen-arch.png +0 -0
  83. data/assets/Program-Profiling-profiling.pdf +0 -0
  84. data/assets/Programming-Language-Virtual-Machine-vm.pdf +0 -0
  85. data/assets/Remote-Shell-Session-Setup-1.png +0 -0
  86. data/assets/Signals-1.png +0 -0
  87. data/assets/Signals-2.png +0 -0
  88. data/assets/Signals-3.png +0 -0
  89. data/assets/Some-Slides-about-Containers-Kubernetes.pdf +0 -0
  90. data/assets/Some-Slides-about-Containers-UCSB-nurmi.pdf +0 -0
  91. data/assets/Some-Slides-about-PaaS-CS293B_CloudPlatforms.pdf +0 -0
  92. data/assets/avg-1thread.c +172 -0
  93. data/assets/avg-manythread.c +284 -0
  94. data/assets/avg-nothread.c +71 -0
  95. data/assets/file-create1.c +75 -0
  96. data/assets/file-create2.c +120 -0
  97. data/assets/file-fd1.c +56 -0
  98. data/assets/file-fd2.c +25 -0
  99. data/assets/file-fd3.c +23 -0
  100. data/assets/file-read1.c +62 -0
  101. data/assets/file-read2.c +66 -0
  102. data/assets/file-seek1.c +87 -0
  103. data/assets/fork-1.c +35 -0
  104. data/assets/fork-2.c +44 -0
  105. data/assets/fork-3.c +60 -0
  106. data/assets/fork-4.c +64 -0
  107. data/assets/joinall-1.c +163 -0
  108. data/assets/joinall-2.c +162 -0
  109. data/assets/market-kthreads.c +465 -0
  110. data/assets/market-semaphore.c +504 -0
  111. data/assets/market1.c +478 -0
  112. data/assets/market2.c +490 -0
  113. data/assets/market3.c +503 -0
  114. data/assets/market4.c +509 -0
  115. data/assets/my-cat.c +35 -0
  116. data/assets/pipe-1.c +45 -0
  117. data/assets/pipe-2.c +80 -0
  118. data/assets/pipe-3.c +83 -0
  119. data/assets/pipe-4.c +116 -0
  120. data/assets/race1.c +75 -0
  121. data/assets/race2.c +77 -0
  122. data/assets/race3.c +87 -0
  123. data/assets/race_ABC.c +144 -0
  124. data/assets/search-by-algolia.svg +1 -0
  125. data/assets/semaphore.book.ps +8827 -0
  126. data/assets/sys-call1.c +20 -0
  127. data/assets/sys-call2.c +16 -0
  128. data/assets//350/265/253/347/202/2161.PNG +0 -0
  129. data/feed.xml +30 -0
  130. data/index.html +164 -0
  131. data/js/jekyll-search.min.js +1 -0
  132. data/js/lunr.min.js +2977 -0
  133. data/js/main.js +57 -0
  134. data/js/masonry.pkgd.min.js +9 -0
  135. data/js/pageContent.js +166 -0
  136. data/js/search.js +17 -0
  137. data/js/smooth-scroll.min.js +2 -0
  138. data/js/waterfall.js +214 -0
  139. data/page/0archives.html +83 -0
  140. data/page/1category.html +62 -0
  141. data/page/2tags.html +64 -0
  142. data/page/3search.html +112 -0
  143. data/page/4about.md +34 -0
  144. metadata +270 -0
data/assets/my-cat.c ADDED
@@ -0,0 +1,35 @@
1
+ #include <unistd.h>
2
+ #include <stdlib.h>
3
+ #include <stdio.h>
4
+ #include <string.h>
5
+ #include <fcntl.h>
6
+ #include <string.h>
7
+
8
+ /*
9
+ * simple program implementing cat
10
+ */
11
+ int main(int argc, char **argv)
12
+ {
13
+ pid_t my_id;
14
+ char buffer[4096];
15
+
16
+ my_id = getpid();
17
+ fprintf(stderr,"pid: %d -- I am my-cat and I have started\n",my_id);
18
+
19
+ memset(buffer,0,sizeof(buffer));
20
+
21
+ while(read(0,buffer,sizeof(buffer)) > 0) {
22
+ fprintf(stderr,"pid: %d read some data\n",getpid());
23
+ buffer[4095] = 0; /* safety first */
24
+ write(1,buffer,strlen(buffer));
25
+ fprintf(stderr,"pid: %d wrote some data\n",getpid());
26
+ memset(buffer,0,sizeof(buffer));
27
+ }
28
+
29
+ fprintf(stderr,"pid: %d -- I am my-cat and I am exiting\n",my_id);
30
+
31
+ exit(0);
32
+
33
+ }
34
+
35
+
data/assets/pipe-1.c ADDED
@@ -0,0 +1,45 @@
1
+ #include <unistd.h>
2
+ #include <stdlib.h>
3
+ #include <stdio.h>
4
+ #include <string.h>
5
+ #include <fcntl.h>
6
+
7
+ /*
8
+ * simple program to create and use a pipe
9
+ */
10
+ int main(int argc, char **argv)
11
+ {
12
+ int pipe_desc[2];
13
+ int err;
14
+ char *string;
15
+ char read_buffer[4096];
16
+
17
+ err = pipe(pipe_desc);
18
+ if(err < 0) {
19
+ printf("error creating pipe\n");
20
+ exit(1);
21
+ }
22
+
23
+ string = "a string";
24
+
25
+ printf("writing %s to pipe_desc[1] which is %d\n",
26
+ string,pipe_desc[1]);
27
+
28
+ write(pipe_desc[1],string,strlen(string));
29
+
30
+ memset(read_buffer,0,sizeof(read_buffer));
31
+ printf("attempting to read pipe_desc[0] which is %d\n",pipe_desc[0]);
32
+ read(pipe_desc[0], read_buffer, sizeof(read_buffer));
33
+
34
+ printf("read %s from pipe_desc[0]\n",read_buffer);
35
+
36
+ close(pipe_desc[0]);
37
+ close(pipe_desc[1]);
38
+
39
+ return(0);
40
+
41
+ }
42
+
43
+
44
+
45
+
data/assets/pipe-2.c ADDED
@@ -0,0 +1,80 @@
1
+ #include <unistd.h>
2
+ #include <stdlib.h>
3
+ #include <stdio.h>
4
+ #include <string.h>
5
+ #include <fcntl.h>
6
+ #include <sys/wait.h>
7
+
8
+ /*
9
+ * simple program creating a pipe between two processes
10
+ */
11
+ int main(int argc, char **argv)
12
+ {
13
+ pid_t child_id;
14
+ pid_t my_id;
15
+ int pipe_desc[2];
16
+ char *string;
17
+ char read_buffer[4096];
18
+ int child_status;
19
+ int err;
20
+
21
+ /*
22
+ * create the pipe
23
+ */
24
+ err = pipe(pipe_desc);
25
+ if(err < 0) {
26
+ printf("error creating pipe\n");
27
+ exit(1);
28
+ }
29
+
30
+ /*
31
+ * then fork
32
+ */
33
+ child_id = fork();
34
+ if(child_id != 0) {
35
+ /*
36
+ * parent will be the writer
37
+ * doesn't need the read end
38
+ */
39
+ my_id = getpid();
40
+ close(pipe_desc[0]);
41
+ /*
42
+ * send the child a string
43
+ */
44
+ string = "a string made by the parent\n";
45
+ printf("pid: %d -- writing %s to pipe_desc[1]\n",
46
+ (int)my_id,
47
+ string);
48
+ write(pipe_desc[1],string,strlen(string));
49
+ /*
50
+ * close the pipe to let the read end know we are
51
+ * done
52
+ */
53
+ close(pipe_desc[1]);
54
+ /*
55
+ * wait for the child to exit
56
+ */
57
+ wait(&child_status);
58
+ } else {
59
+ /*
60
+ * child reads the read end
61
+ */
62
+ my_id = getpid();
63
+ /*
64
+ * doesn't need the write end
65
+ */
66
+ close(pipe_desc[1]);
67
+ memset(read_buffer,0,sizeof(read_buffer));
68
+ read(pipe_desc[0],read_buffer,sizeof(read_buffer));
69
+ printf("pid: %d -- received %s from parent\n",
70
+ (int)my_id,
71
+ read_buffer);
72
+ close(pipe_desc[0]);
73
+ }
74
+
75
+ printf("pid: %d -- I am exiting\n",my_id);
76
+ exit(0);
77
+
78
+ }
79
+
80
+
data/assets/pipe-3.c ADDED
@@ -0,0 +1,83 @@
1
+ #include <unistd.h>
2
+ #include <stdlib.h>
3
+ #include <stdio.h>
4
+ #include <string.h>
5
+ #include <fcntl.h>
6
+
7
+ /*
8
+ * simple program creating a pipe between two processes
9
+ */
10
+ int main(int argc, char **argv)
11
+ {
12
+ pid_t child_id;
13
+ pid_t my_id;
14
+ int pipe_desc[2];
15
+ char *string;
16
+ char read_buffer[4096];
17
+ int err;
18
+
19
+ /*
20
+ * create the pipe
21
+ */
22
+ err = pipe(pipe_desc);
23
+ if(err < 0) {
24
+ printf("error creating pipe\n");
25
+ exit(1);
26
+ }
27
+
28
+ /*
29
+ * then fork
30
+ */
31
+ child_id = fork();
32
+ if(child_id != 0) {
33
+ /*
34
+ * parent will be the writer
35
+ * doesn't need the read end
36
+ */
37
+ my_id = getpid();
38
+ close(pipe_desc[0]);
39
+ /*
40
+ * send the child a string
41
+ */
42
+ string = "a string made by the parent\n";
43
+ printf("pid: %d -- writing %s to pipe_desc[1]\n",
44
+ (int)my_id,
45
+ string);
46
+ write(pipe_desc[1],string,strlen(string));
47
+ /*
48
+ * and another string
49
+ */
50
+ string = "and another string";
51
+ printf("pid: %d -- writing %s to pipe_desc[1]\n",
52
+ (int)my_id,
53
+ string);
54
+ write(pipe_desc[1],string,strlen(string));
55
+ /*
56
+ * close the pipe to let the read end know we are
57
+ * done
58
+ */
59
+ } else {
60
+ /*
61
+ * child will read until pipe closes
62
+ * close the write end
63
+ */
64
+ my_id = getpid();
65
+ close(pipe_desc[1]);
66
+ memset(read_buffer,0,sizeof(read_buffer));
67
+ while(read(pipe_desc[0],read_buffer,sizeof(read_buffer))) {
68
+ printf("pid: %d -- received %s from parent\n",
69
+ (int)my_id,
70
+ read_buffer);
71
+ memset(read_buffer,0,sizeof(read_buffer));
72
+ }
73
+ printf("pid: %d -- child detects write end closed\n",
74
+ (int)my_id);
75
+ close(pipe_desc[0]);
76
+ }
77
+
78
+ printf("pid: %d -- I am exiting\n",my_id);
79
+ exit(0);
80
+
81
+ }
82
+
83
+
data/assets/pipe-4.c ADDED
@@ -0,0 +1,116 @@
1
+ #include <unistd.h>
2
+ #include <stdlib.h>
3
+ #include <stdio.h>
4
+ #include <string.h>
5
+ #include <fcntl.h>
6
+ #include <sys/wait.h>
7
+
8
+ /*
9
+ * simple program creating a pipe between a set of processes
10
+ * that read and write stdin and stdout
11
+ * first child get stdin of parent
12
+ * last child gets stdout of parent
13
+ */
14
+ int main(int argc, char **argv, char **envp)
15
+ {
16
+ pid_t child_id;
17
+ int child_status;
18
+ int pipe_desc[2];
19
+ char read_buffer[4096];
20
+ int err;
21
+ char file_name[4096];
22
+ int proc_count;
23
+ int i;
24
+ int last_stdout;
25
+
26
+ if(argc < 3) {
27
+ printf("usage: pipe-4 executable-file number-of-procs\n");
28
+ exit(1);
29
+ }
30
+
31
+ /*
32
+ * get the arguments
33
+ */
34
+ memset(file_name,0,sizeof(file_name));
35
+ strncpy(file_name,argv[1],sizeof(file_name));
36
+ proc_count = atoi(argv[2]);
37
+
38
+ /*
39
+ * save the parent stdout for the last child
40
+ */
41
+ last_stdout = dup(1);
42
+
43
+ /*
44
+ * create pipes, fork and exec the processes
45
+ */
46
+ for(i=0; i < proc_count; i++) {
47
+ /*
48
+ * create the pipe
49
+ */
50
+ err = pipe(pipe_desc);
51
+ if(err < 0) {
52
+ printf("error creating pipe\n");
53
+ exit(1);
54
+ }
55
+
56
+ /*
57
+ * then fork
58
+ */
59
+ child_id = fork();
60
+ if(child_id == 0) {
61
+ /*
62
+ * child closes standard out
63
+ */
64
+ close(1);
65
+ /*
66
+ * child dups the write end of the pipe
67
+ * if it is not the last child, otherwise
68
+ * it dups the last_stdout it got from the parent
69
+ * the closed stdout will be chosen as the
70
+ * target
71
+ */
72
+ if(i < (proc_count - 1)) {
73
+ dup2(pipe_desc[1],1);
74
+ } else {
75
+ dup2(last_stdout,1);
76
+ close(pipe_desc[1]);
77
+ }
78
+ /*
79
+ * child runs the program
80
+ */
81
+ err = execve(file_name,&argv[1],envp);
82
+ printf("parent error: %s didn't exec\n",
83
+ file_name);
84
+ exit(1);
85
+ } else {
86
+ /*
87
+ * parent closes standard in
88
+ */
89
+ close(0);
90
+ /*
91
+ * parent dups the read end of the pipe for the
92
+ * next child
93
+ */
94
+ if(i < (proc_count - 1)) {
95
+ dup2(pipe_desc[0],0);
96
+ }
97
+ close(pipe_desc[0]);
98
+ close(pipe_desc[1]);
99
+ }
100
+ }
101
+
102
+ close(1);
103
+ dup2(last_stdout,1);
104
+ /*
105
+ * parent now waits for the children to exit
106
+ */
107
+ for(i=0; i < proc_count; i++) {
108
+ child_id = wait(&child_status);
109
+ }
110
+
111
+
112
+ exit(0);
113
+
114
+ }
115
+
116
+
data/assets/race1.c ADDED
@@ -0,0 +1,75 @@
1
+ /*
2
+ * CS170: race1.c
3
+ * adapted from code by Jim Plank
4
+ */
5
+
6
+ #include <unistd.h>
7
+ #include <stdlib.h>
8
+ #include <stdio.h>
9
+ #include <pthread.h>
10
+
11
+ typedef struct {
12
+ int id;
13
+ int size;
14
+ int iterations;
15
+ char *s;
16
+ } Thread_struct;
17
+
18
+ void *infloop(void *x)
19
+ {
20
+ int i, j;
21
+ Thread_struct *t;
22
+
23
+ t = (Thread_struct *) x;
24
+
25
+ for (i = 0; i < t->iterations; i++)
26
+ {
27
+ for (j = 0; j < t->size-1; j++)
28
+ {
29
+ t->s[j] = 'A'+t->id;
30
+ }
31
+ t->s[j] = '\0';
32
+ printf("Thread %d: %s\n", t->id, t->s);
33
+ }
34
+
35
+ pthread_exit(NULL);
36
+ }
37
+
38
+ int
39
+ main(int argc, char **argv)
40
+ {
41
+ pthread_t *tid;
42
+ Thread_struct *t;
43
+ void *retval;
44
+ int nthreads, size, iterations, i;
45
+ char *s;
46
+
47
+ if (argc != 4)
48
+ {
49
+ fprintf(stderr, "usage: race nthreads stringsize iterations\n");
50
+ exit(1);
51
+ }
52
+
53
+ nthreads = atoi(argv[1]);
54
+ size = atoi(argv[2])+1;
55
+ iterations = atoi(argv[3]);
56
+
57
+ tid = (pthread_t *) malloc(sizeof(pthread_t) * nthreads);
58
+ t = (Thread_struct *) malloc(sizeof(Thread_struct) * nthreads);
59
+ s = (char *) malloc(sizeof(char) * size);
60
+
61
+ for (i = 0; i < nthreads; i++)
62
+ {
63
+ t[i].id = i;
64
+ t[i].size = size;
65
+ t[i].iterations = iterations;
66
+ t[i].s = s;
67
+ pthread_create(&(tid[i]), NULL, infloop, &(t[i]));
68
+ }
69
+ for (i = 0; i < nthreads; i++)
70
+ {
71
+ pthread_join(tid[i], &retval);
72
+ }
73
+
74
+ return(0);
75
+ }
data/assets/race2.c ADDED
@@ -0,0 +1,77 @@
1
+ /*
2
+ * CS170: race2.c
3
+ * adapted from code by Jim Plank
4
+ */
5
+
6
+ #include <unistd.h>
7
+ #include <stdlib.h>
8
+ #include <stdio.h>
9
+ #include <pthread.h>
10
+
11
+ typedef struct {
12
+ int id;
13
+ int size;
14
+ int iterations;
15
+ char *s;
16
+ } Thread_struct;
17
+
18
+ void *infloop(void *x)
19
+ {
20
+ int i, j, k;
21
+ Thread_struct *t;
22
+
23
+ t = (Thread_struct *) x;
24
+
25
+ for (i = 0; i < t->iterations; i++)
26
+ {
27
+ for (j = 0; j < t->size-1; j++)
28
+ {
29
+ t->s[j] = 'A'+t->id;
30
+ /* needed because machines are so darn fast */
31
+ for(k=0; k < 80000; k++);
32
+ }
33
+ t->s[j] = '\0';
34
+ printf("Thread %d: %s\n", t->id, t->s);
35
+ }
36
+
37
+ pthread_exit(NULL);
38
+ }
39
+
40
+ int
41
+ main(int argc, char **argv)
42
+ {
43
+ pthread_t *tid;
44
+ Thread_struct *t;
45
+ void *retval;
46
+ int nthreads, size, iterations, i;
47
+ char *s;
48
+
49
+ if (argc != 4)
50
+ {
51
+ fprintf(stderr, "usage: race nthreads stringsize iterations\n");
52
+ exit(1);
53
+ }
54
+
55
+ nthreads = atoi(argv[1]);
56
+ size = atoi(argv[2])+1;
57
+ iterations = atoi(argv[3]);
58
+
59
+ tid = (pthread_t *) malloc(sizeof(pthread_t) * nthreads);
60
+ t = (Thread_struct *) malloc(sizeof(Thread_struct) * nthreads);
61
+ s = (char *) malloc(sizeof(char) * size);
62
+
63
+ for (i = 0; i < nthreads; i++)
64
+ {
65
+ t[i].id = i;
66
+ t[i].size = size;
67
+ t[i].iterations = iterations;
68
+ t[i].s = s;
69
+ pthread_create(&(tid[i]), NULL, infloop, &(t[i]));
70
+ }
71
+ for (i = 0; i < nthreads; i++)
72
+ {
73
+ pthread_join(tid[i], &retval);
74
+ }
75
+
76
+ return(0);
77
+ }