├── 2018 └── COMPSCI 630 Whiteboard.pdf ├── 2019 ├── COMPSCI 630 Systems Fall 2019.pdf ├── Scribe │ ├── .DS_Store │ ├── 2018-01-29 │ │ ├── 2018-01-29.pdf │ │ ├── live_range.jpg │ │ ├── main.tex │ │ └── reality_subset.jpg │ ├── 2018-02-05 │ │ ├── Lecture-5.pdf │ │ └── Lecture-5.txt │ ├── 2018-02-12 │ │ ├── Lecture-6.pdf │ │ └── Lecture-6.tex │ ├── 2018-02-14 │ │ ├── cachehitrate.png │ │ ├── main.pdf │ │ └── main.tex │ ├── 2018-02-26 │ │ ├── lecture.pdf │ │ └── lecture.tex │ ├── 2018-03-19 │ │ ├── lecture.pdf │ │ └── lecture.tex │ ├── 2018-04-11 │ │ ├── Lecture-17.pdf │ │ └── Lecture-17.tex │ ├── 2018-04-17 │ │ ├── 2018-04-17.tex │ │ └── 2018_04_17.pdf │ ├── 2018-04-18 │ │ ├── Lecture-19.pdf │ │ └── Lecture-19.tex │ ├── 2018-04-23 │ │ ├── Lecture-20.pdf │ │ └── Lecture-20.tex │ ├── 2018-04-25 │ │ ├── Lecture-21.pdf │ │ └── Lecture-21.tex │ ├── 2018-04-30 │ │ ├── scribe.pdf │ │ └── scribe.tex │ ├── 2019-09-05 │ │ ├── Lecture-2.pdf │ │ └── Lecture-2.tex │ ├── 2019-09-10 │ │ ├── fig1.png │ │ ├── fig2.png │ │ ├── fig3.png │ │ ├── fig4.png │ │ ├── fig5.png │ │ ├── fig6.png │ │ ├── fig7.png │ │ ├── fig8.png │ │ ├── fig9.png │ │ ├── lecture3.pdf │ │ └── lecture3.tex │ ├── 2019-09-17 │ │ ├── Lecture-4.pdf │ │ ├── Lecture-4.tex │ │ ├── fig1.png │ │ ├── fig2.png │ │ ├── lattice.png │ │ └── memory_fragmentation.png │ ├── 2019-09-24 │ │ ├── Lecture-5-2019-09-24.pdf │ │ ├── Lecture-5-2019-09-24.tex │ │ └── fig1.free-lists.pdf │ ├── 2019-09-26 │ │ ├── 9-26-scribe-notes.pdf │ │ └── 9-26-scribe-notes.tex │ ├── 2019-10-1 │ │ ├── 630_10_1.pdf │ │ └── 630_10_1.tex │ ├── 2019-10-17 │ │ ├── lecture_11.pdf │ │ └── lecture_11.tex │ ├── 2019-10-29 │ │ ├── Lecture-12-2019-10-29.pdf │ │ ├── Lecture-12-2019-10-29.tex │ │ ├── architecture-now.png │ │ └── architecture-prev.png │ ├── 2019-10-31 │ │ ├── 10-31_ScribeNotes.pdf │ │ └── 10-31_ScribeNotes.tex │ ├── 2019-10-8 │ │ ├── buffer1.pdf │ │ ├── buffer2.pdf │ │ ├── later.tex │ │ ├── lecture_9.pdf │ │ ├── lecture_9.tex │ │ └── stack.pdf │ ├── 2019-11-05 │ │ ├── 2019-11-05, Lecture 14.pdf │ │ ├── 2019-11-05, Lecture 14.tex │ │ ├── example-scribe-notes.pdf │ │ ├── example-scribe-notes.tex │ │ └── latexmkrc │ ├── 2019-11-07 │ │ ├── 2019-11-07, Lecture 15.pdf │ │ └── 2019-11-07, Lecture 15.tex │ ├── 2019-11-12 │ │ ├── Lecture 16.pdf │ │ └── Lecture 16.tex │ ├── 2019-11-19 │ │ ├── notes.pdf │ │ └── notes.tex │ ├── 2019-11-21 │ │ ├── 630_scribe_notes_tex.pdf │ │ └── cs630-scribe-notes.tex │ ├── 2019-12-03 │ │ ├── .DS_Store │ │ ├── Lecture 19.pdf │ │ └── lecture 19-scribe-notes.tex │ ├── 2019-12-05 │ │ ├── lecture2019-12-05.pdf │ │ └── lecture2019-12-05.tex │ ├── 2019-12-10 │ │ ├── lecture_21.pdf │ │ └── lecture_21.tex │ ├── CS630_Fall_2019_Lec10.pdf │ ├── Lecture 10 │ ├── Lecture-17.5? │ └── previous │ │ ├── Lecture-10 │ │ ├── LICENSE │ │ ├── Lecture-10.tex │ │ ├── Makefile │ │ └── README.md │ │ ├── Lecture-11 │ │ ├── README.md │ │ ├── notes.txt │ │ ├── notes2.txt │ │ └── scribe-notes.tex │ │ ├── Lecture-14 │ │ ├── LICENSE │ │ ├── Lecture-14.tex │ │ ├── Makefile │ │ ├── README.md │ │ └── airplane_queue.jpg │ │ ├── Lecture-15 │ │ └── Lecture15_Performance_Analysis.tex │ │ ├── Lecture-16 │ │ ├── Mirroring.jpg │ │ ├── MirroringAndStriping.jpg │ │ ├── Seema_notes.txt │ │ ├── Striping.jpg │ │ ├── adam-scribe-notes.txt │ │ ├── hardDrive.jpg │ │ └── scribe-notes.tex │ │ ├── Lecture-17 │ │ └── Lecture_17.tex │ │ ├── Lecture-18 │ │ └── lecture-18.tex │ │ ├── Lecture-19 │ │ ├── LICENSE │ │ ├── Lecture-19.tex │ │ ├── Makefile │ │ └── README.md │ │ ├── Lecture-2 │ │ ├── Lecture-2.pdf │ │ └── Lecture-2.tex │ │ ├── Lecture-20 │ │ └── Lecture_20.tex │ │ ├── Lecture-21 │ │ └── Lecture_21.tex │ │ ├── Lecture-3 │ │ ├── BB_Abstraction.jpg │ │ ├── Compacting_Live.jpg │ │ ├── Generational.jpg │ │ ├── GitHub_Branches.jpg │ │ ├── Hash_Table.jpg │ │ ├── Lecture-3.pdf │ │ ├── Lecture-3.tex │ │ ├── Load_Balancing.jpg │ │ ├── MSC.jpg │ │ ├── No_Compacting_Issues.jpg │ │ ├── Semi_Space.jpg │ │ ├── Soft_vs_Hard.jpg │ │ ├── Thumbs.db │ │ ├── Tricolor_Invariant.jpg │ │ └── Types_GC.jpg │ │ ├── Lecture-4 │ │ ├── Lecture-4.pdf │ │ ├── Lecture-4.tex │ │ ├── Original.png │ │ ├── README.md │ │ └── nb-scribe-notes.txt │ │ ├── Lecture-5 │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ └── ScribeNotes_09162014.tex │ │ ├── Lecture-6 │ │ ├── LICENSE │ │ ├── Lecture-6.pdf │ │ ├── Lecture-6.tex │ │ ├── Makefile │ │ └── README.md │ │ ├── Lecture-7 │ │ ├── Lecture-7.pdf │ │ ├── Lecture-7.tex │ │ ├── README.md │ │ ├── Seema_notes │ │ └── adam-notes.txt │ │ └── Lecture-8 │ │ ├── Lecture-8.tex │ │ ├── MESI.png │ │ ├── README.md │ │ └── seq_con.png ├── footer.html ├── header.html └── schedule.csv ├── 2022 └── Scribe │ ├── CS630-01-31.pdf │ ├── CS630-02-02.pdf │ ├── CS630-02-07.pdf │ ├── CS630-02-09.pdf │ ├── CS630-02-14.pdf │ ├── CS630-02-16.pdf │ ├── CS630-02-22.pdf │ ├── CS630-02-28.pdf │ └── CS630-03-09.pdf ├── 2023 ├── Lecture-Notes.pdf └── Scribe │ ├── 2023-02-14 │ ├── jit.drawio.png │ ├── offsetlist.drawio.png │ ├── rc_leak.drawio.png │ ├── reachabilityanalysis.drawio.png │ ├── refcounting.drawio.png │ ├── scribe_notes.pdf │ └── scribe_notes.tex │ ├── 2023-02-21 │ ├── main.pdf │ └── main.tex │ ├── 2023-03-02 │ ├── 03-02.pdf │ └── main.tex │ ├── 2023-03-07 │ ├── full_adder.png │ ├── spring2023-lecture-7.pdf │ └── spring2023-lecture-7.tex │ ├── 2023-03-09 │ ├── scribe-notes-typed.pdf │ ├── scribe-notes-typed.synctex.gz │ ├── scribe-notes-typed.tex │ └── scribed-notes-handwritten.pdf │ ├── 2023-03-21 │ ├── Scribe_notes.pdf │ ├── address.png │ ├── conceptual.png │ ├── lecture 9.tex │ └── userkernel.png │ ├── 2023-04-13 │ ├── main.pdf │ └── main.tex │ ├── 2023-05-02 │ ├── main.pdf │ └── main.tex │ ├── 2023-05-04 │ ├── critical_path.jpeg │ ├── spring2023-lecture16.pdf │ └── spring2023-lecture16.tex │ ├── 2023-05-09 │ ├── scribe-notes-typed.pdf │ ├── scribe-notes-typed.tex │ └── scribed-notes-handwritten.pdf │ └── README.md ├── .DS_Store ├── .gitignore ├── 2019-10-10 ├── README.md ├── assignment1_template ├── .gitignore ├── README.md ├── cheap │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── core_printer │ ├── Cargo.toml │ └── src │ │ └── lib.rs └── evaluate │ ├── Cargo.toml │ └── src │ └── main.rs ├── empirical ├── csrankings.css ├── empirical-eval.js ├── empirical-eval.ts ├── eval.json ├── figs │ ├── .gitignore │ ├── README.md │ ├── applications_not_just_kernels.jpg │ ├── applications_not_just_kernels.pdf │ ├── appropriate_baseline_for_comparison.jpg │ ├── appropriate_baseline_for_comparison.pdf │ ├── appropriate_level_of_precision.jpg │ ├── appropriate_level_of_precision.pdf │ ├── appropriate_suite.jpg │ ├── appropriate_suite.pdf │ ├── appropriate_summary_statistics.jpg │ ├── appropriate_summary_statistics.pdf │ ├── appropriately-scoped_claims.jpg │ ├── appropriately-scoped_claims.pdf │ ├── axes_include_zero.jpg │ ├── axes_include_zero.pdf │ ├── comprehensive_summary_results.jpg │ ├── comprehensive_summary_results.pdf │ ├── confidence_intervals.jpg │ ├── confidence_intervals.pdf │ ├── convo.sh │ ├── cross-validation_where_needed.jpg │ ├── cross-validation_where_needed.pdf │ ├── direct_or_appropriate_proxy_metric.jpg │ ├── direct_or_appropriate_proxy_metric.pdf │ ├── explicit_claims.jpg │ ├── explicit_claims.pdf │ ├── explores_key_design_parameters.jpg │ ├── explores_key_design_parameters.pdf │ ├── fair_comparison.jpg │ ├── fair_comparison.pdf │ ├── measure_all_important_effects.jpg │ ├── measure_all_important_effects.pdf │ ├── non-standard_suites_justified.jpg │ ├── non-standard_suites_justified.pdf │ ├── open_loop_in_workload_generator.jpg │ ├── open_loop_in_workload_generator.pdf │ ├── pdfs │ ├── ratios_plotted_correctly.jpg │ ├── ratios_plotted_correctly.pdf │ ├── reasonable_platform.jpg │ ├── reasonable_platform.pdf │ ├── sufficient_information_to_repeat.jpg │ ├── sufficient_information_to_repeat.pdf │ ├── sufficient_number_of_trials.jpg │ ├── sufficient_number_of_trials.pdf │ ├── test.jpg │ ├── test.pdf │ ├── threats_to_validity_of_claims.jpg │ └── threats_to_validity_of_claims.pdf ├── index.html ├── jquery-1.12.3.min.js └── jquery.d.ts ├── example-reviews.pdf ├── example-scribe-notes.pdf ├── example-scribe-notes.tex ├── footer.html ├── header.html ├── index-original.html ├── index.html ├── make-schedule.py ├── old ├── project1.html ├── project2.html ├── project2.pdf └── project2.tex ├── papers ├── Algol60-Dijkstra-MR35.pdf ├── Architecture-of-the-IBM-System-360.pdf ├── FORTRAN-102663113.05.01.acc.pdf ├── GC-Uncooperative.pdf ├── LISP.pdf ├── RAID.pdf ├── Rsapaper.pdf ├── WebAssembly.pdf ├── atc14-paper-ongaro.pdf ├── bitcoin.pdf ├── coverity.pdf ├── coz.pdf ├── dart.pdf ├── fp014-berger.pdf ├── fuzz.pdf ├── gprof.pdf ├── gray-85.pdf ├── hints.pdf ├── lampson73.pdf ├── p243-hopper.pdf ├── r4letv1crx.pdf ├── raft.pdf ├── rinard.pdf ├── spectre.pdf ├── unix.pdf └── valgrind.pdf ├── presentations └── karthik-pattabiraman-2018-04.pdf └── schedule.csv /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Core latex/pdflatex auxiliary files: 2 | *.aux 3 | *.lof 4 | *.log 5 | *.lot 6 | *.fls 7 | *.out 8 | *.toc 9 | 10 | ## Intermediate documents: 11 | *.dvi 12 | *-converted-to.* 13 | # these rules might exclude image files for figures etc. 14 | # *.ps 15 | # *.eps 16 | 17 | ## Bibliography auxiliary files (bibtex/biblatex/biber): 18 | *.bbl 19 | *.bcf 20 | *.blg 21 | *-blx.aux 22 | *-blx.bib 23 | *.brf 24 | *.run.xml 25 | 26 | ## Build tool auxiliary files: 27 | *.fdb_latexmk 28 | *.synctex.gz 29 | *.synctex.gz(busy) 30 | *.pdfsync 31 | 32 | ## Auxiliary and intermediate files from other packages: 33 | 34 | # algorithms 35 | *.alg 36 | *.loa 37 | 38 | # amsthm 39 | *.thm 40 | 41 | # beamer 42 | *.nav 43 | *.snm 44 | *.vrb 45 | 46 | #(e)ledmac/(e)ledpar 47 | *.end 48 | *.[1-9] 49 | *.[1-9][0-9] 50 | *.[1-9][0-9][0-9] 51 | *.[1-9]R 52 | *.[1-9][0-9]R 53 | *.[1-9][0-9][0-9]R 54 | *.eledsec[1-9] 55 | *.eledsec[1-9]R 56 | *.eledsec[1-9][0-9] 57 | *.eledsec[1-9][0-9]R 58 | *.eledsec[1-9][0-9][0-9] 59 | *.eledsec[1-9][0-9][0-9]R 60 | 61 | # glossaries 62 | *.acn 63 | *.acr 64 | *.glg 65 | *.glo 66 | *.gls 67 | 68 | # hyperref 69 | *.brf 70 | 71 | # listings 72 | *.lol 73 | 74 | # makeidx 75 | *.idx 76 | *.ilg 77 | *.ind 78 | *.ist 79 | 80 | # minitoc 81 | *.maf 82 | *.mtc 83 | *.mtc0 84 | 85 | # minted 86 | *.pyg 87 | 88 | # morewrites 89 | *.mw 90 | 91 | # nomencl 92 | *.nlo 93 | 94 | # sagetex 95 | *.sagetex.sage 96 | *.sagetex.py 97 | *.sagetex.scmd 98 | 99 | # sympy 100 | *.sout 101 | *.sympy 102 | sympy-plots-for-*.tex/ 103 | 104 | # todonotes 105 | *.tdo 106 | 107 | # xindy 108 | *.xdy 109 | 110 | -------------------------------------------------------------------------------- /2018/COMPSCI 630 Whiteboard.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2018/COMPSCI 630 Whiteboard.pdf -------------------------------------------------------------------------------- /2019/COMPSCI 630 Systems Fall 2019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/COMPSCI 630 Systems Fall 2019.pdf -------------------------------------------------------------------------------- /2019/Scribe/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/.DS_Store -------------------------------------------------------------------------------- /2019/Scribe/2018-01-29/2018-01-29.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-01-29/2018-01-29.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-01-29/live_range.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-01-29/live_range.jpg -------------------------------------------------------------------------------- /2019/Scribe/2018-01-29/reality_subset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-01-29/reality_subset.jpg -------------------------------------------------------------------------------- /2019/Scribe/2018-02-05/Lecture-5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-02-05/Lecture-5.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-02-12/Lecture-6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-02-12/Lecture-6.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-02-14/cachehitrate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-02-14/cachehitrate.png -------------------------------------------------------------------------------- /2019/Scribe/2018-02-14/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-02-14/main.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-02-26/lecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-02-26/lecture.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-03-19/lecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-03-19/lecture.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-11/Lecture-17.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-04-11/Lecture-17.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-17/2018-04-17.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | 14 | % 15 | % The following commands sets up the lecnum (lecture number) 16 | % counter and make various numbering schemes work relative 17 | % to the lecture number. 18 | % 19 | \newcounter{lecnum} 20 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 21 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 22 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 23 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 24 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 25 | \newcommand{\dnl}{\mbox{}\par} 26 | 27 | % 28 | % The following macro is used to generate the header. 29 | % 30 | \newcommand{\lecture}[4]{ 31 | \pagestyle{myheadings} 32 | \thispagestyle{plain} 33 | \newpage 34 | \setcounter{lecnum}{#1} 35 | \setcounter{page}{1} 36 | \noindent 37 | \begin{center} 38 | \framebox{ 39 | \vbox{\vspace{2mm} 40 | \hbox to 6.28in { {\bf CMPSCI~630~~~Systems 41 | \hfill Spring 2018} } 42 | \vspace{4mm} 43 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 44 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 45 | \vspace{2mm} 46 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 47 | \vspace{2mm}} 48 | } 49 | \end{center} 50 | \markboth{Lecture #1: #2}{Lecture #1: #2} 51 | \vspace*{4mm} 52 | } 53 | 54 | % 55 | % Convention for citations is authors' initials followed by the year. 56 | % For example, to cite a paper by Leighton and Maggs you would type 57 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 58 | % (To avoid bibliography problems, for now we redefine the \cite command.) 59 | % 60 | \renewcommand{\cite}[1]{[#1]} 61 | 62 | % \input{epsf} 63 | 64 | %Use this command for a figure; it puts a figure in wherever you want it. 65 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 66 | \newcommand{\fig}[4]{ 67 | \vspace{0.2 in} 68 | \setlength{\epsfxsize}{#2} 69 | \centerline{\epsfbox{#4}} 70 | \begin{center} 71 | Figure \thelecnum.#1:~#3 72 | \end{center} 73 | } 74 | 75 | % Use these for theorems, lemmas, proofs, etc. 76 | \newtheorem{theorem}{Theorem}[lecnum] 77 | \newtheorem{lemma}[theorem]{Lemma} 78 | \newtheorem{proposition}[theorem]{Proposition} 79 | \newtheorem{claim}[theorem]{Claim} 80 | \newtheorem{corollary}[theorem]{Corollary} 81 | \newtheorem{definition}[theorem]{Definition} 82 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 83 | 84 | % Some useful equation alignment commands, borrowed from TeX 85 | \makeatletter 86 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 87 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 88 | \crcr#1\crcr}}\,} 89 | \def\eqalignno#1{\displ@y \tabskip\@centering 90 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 91 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 92 | &\llap{$##$}\tabskip\z@skip\crcr 93 | #1\crcr}} 94 | \def\leqalignno#1{\displ@y \tabskip\@centering 95 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 96 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 97 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 98 | #1\crcr}} 99 | \makeatother 100 | 101 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 102 | 103 | 104 | 105 | % Some general latex examples and examples making use of the 106 | % macros follow. 107 | 108 | \begin{document} 109 | 110 | %FILL IN THE RIGHT INFO. 111 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 112 | \lecture{17}{April 16}{Emery Berger}{Prakhar Sharma} 113 | 114 | \section{Fault tolerance} 115 | Transaction processing is divided into individual, indivisible operations called transactions. Each transaction must succeed or fail as a complete unit; it can never be only partially complete. Transactions ensure traversal from consistent state to consistent state.\\\\In place file editing is bad. e.g. suppose we have a file with upper case alphabets and we want to convert it to lower case. While editing F1, an error during the write could corrupt the file. The solution is to write to a different file (F2) and then swap their roles.\\\\ \begin{center} 116 | 117 | \includegraphics[scale=.55]{fileed.png} 118 | 119 | \end{center}\\ 120 | \section{Fault tolerance in systems} 121 | RAMs can have errors due to cosmic rays - they can flip a bit. Shielding is done as a preliminary measure but RAM error correcting codes are used to prevent errors.\\\\Hard drives are prone to faults because: \\1) Manufacturing defects\\2)Dust particles can get between the disks\\3)Seals in HDD can fail\\4)when dropped they get corrupt\\\\ 122 | \newline 123 | The UDP protocol is error prone and a buffer overflow can cause packet loss. UDP works best in absence of faults.\\\\TCP/IP checks for faults. The error correction is built in the protocol via sending of an ack and checksum as a response to the packet. If checksum fails, the sender sends original message again. For big files, big checksums can be used (128k, MD5 sum). This also helps security.\\\\ 124 | \section{Byzantine fault tolerance} 125 | Preservation of reliability and security is the key while designing systems. Byzantine fault tolerance (Lamport et.al) solves the Byzantine generals problem and asserts that (modulo crypto), a system with 3n+1 nodes can maintain reliability and security (and reach consensus) with at most n malicious generals. Using crypto, the result is that a system with 2n+1 nodes can reach consensus with n malicious nodes. \\\\FLP (fischer lynch patterson) result: Distributed asynchronous consensus is impossible to achieve. This is because a delay and a failure is ough to distinguish. As a solution timeouts can be used but they aren't effective. 126 | \section{Paxos and PAXOS made simple} 127 | Paxos is a family of protocols for solving consensus in a network of unreliable processors. Consensus is the process of agreeing on one result among a group of participants. This problem becomes difficult when the participants or their communication medium may experience failures. It is also widely considered a tough algorithm to understand, hence RAFT was developed. RAFT can be broken down into three main operations:\\\\1)Leader election\\2)log replication\\3)Log safety \\\\ RAFT is better than 2-Phase and 3-Phase commit which fail when the leader dies. Aliveness of the leader can be ascertained using heartbeat messages. 128 | 129 | 130 | \end{document} 131 | -------------------------------------------------------------------------------- /2019/Scribe/2018-04-17/2018_04_17.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-04-17/2018_04_17.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-18/Lecture-19.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-04-18/Lecture-19.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-23/Lecture-20.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-04-23/Lecture-20.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-25/Lecture-21.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-04-25/Lecture-21.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-30/scribe.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2018-04-30/scribe.pdf -------------------------------------------------------------------------------- /2019/Scribe/2018-04-30/scribe.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | 14 | % 15 | % The following commands sets up the lecnum (lecture number) 16 | % counter and make various numbering schemes work relative 17 | % to the lecture number. 18 | % 19 | \newcounter{lecnum} 20 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 21 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 22 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 23 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 24 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 25 | \newcommand{\dnl}{\mbox{}\par} 26 | 27 | % 28 | % The following macro is used to generate the header. 29 | % 30 | \newcommand{\lecture}[4]{ 31 | \pagestyle{myheadings} 32 | \thispagestyle{plain} 33 | \newpage 34 | \setcounter{lecnum}{#1} 35 | \setcounter{page}{1} 36 | \noindent 37 | \begin{center} 38 | \framebox{ 39 | \vbox{\vspace{2mm} 40 | \hbox to 6.28in { {\bf COMPSCI~630~~~Systems 41 | \hfill Spring 2018} } 42 | \vspace{4mm} 43 | \hbox to 6.28in { {\Large \hfill Last Lecture: #2 \hfill} } 44 | \vspace{2mm} 45 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe(s): #4} } 46 | \vspace{2mm}} 47 | } 48 | \end{center} 49 | \markboth{Lecture {#1}: #2}{Lecture {#1}: #2} 50 | \vspace*{4mm} 51 | } 52 | 53 | % 54 | % Convention for citations is authors' initials followed by the year. 55 | % For example, to cite a paper by Leighton and Maggs you would type 56 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 57 | % (To avoid bibliography problems, for now we redefine the \cite command.) 58 | % 59 | \renewcommand{\cite}[1]{[#1]} 60 | 61 | % \input{epsf} 62 | 63 | %Use this command for a figure; it puts a figure in wherever you want it. 64 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 65 | \newcommand{\fig}[4]{ 66 | \vspace{0.2 in} 67 | \setlength{\epsfxsize}{#2} 68 | \centerline{\epsfbox{#4}} 69 | \begin{center} 70 | Figure \thelecnum.#1:~#3 71 | \end{center} 72 | } 73 | 74 | % Use these for theorems, lemmas, proofs, etc. 75 | \newtheorem{theorem}{Theorem}[lecnum] 76 | \newtheorem{lemma}[theorem]{Lemma} 77 | \newtheorem{proposition}[theorem]{Proposition} 78 | \newtheorem{claim}[theorem]{Claim} 79 | \newtheorem{corollary}[theorem]{Corollary} 80 | \newtheorem{definition}[theorem]{Definition} 81 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 82 | 83 | % Some useful equation alignment commands, borrowed from TeX 84 | \makeatletter 85 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 86 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 87 | \crcr#1\crcr}}\,} 88 | \def\eqalignno#1{\displ@y \tabskip\@centering 89 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 90 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 91 | &\llap{$##$}\tabskip\z@skip\crcr 92 | #1\crcr}} 93 | \def\leqalignno#1{\displ@y \tabskip\@centering 94 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 95 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 96 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 97 | #1\crcr}} 98 | \makeatother 99 | 100 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 101 | 102 | 103 | 104 | % Some general latex examples and examples making use of the 105 | % macros follow. 106 | 107 | \begin{document} 108 | 109 | %FILL IN THE RIGHT INFO. 110 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 111 | \lecture{1}{Testing and Program Verification}{Emery Berger}{Amit Rawat} 112 | 113 | \section*{Program Verification} 114 | 115 | ``Proves'' the absence of bugs. 116 | Testing on the other hand is best described by Dijkstra's quote: 117 | ``proves the presence of bugs but not their absence''. 118 | 119 | THe idea is to prove that the specification for a program and its implementation 120 | produce the same output for all possible inputs. 121 | This is called complete program verification. 122 | 123 | For example, the specification of sorted is $$sorted(l) = \forall i \in {0, len(l)-1} : l[i] \le l[i+1]$$. 124 | A sort routine then has an empty precondition and maintains the postcondition that the output list conforms to sorted. 125 | Such a triple is also called a Hoare triple. 126 | 127 | Partial program verification on the other hand only proves the absence of some of the bugs, for e.g. buffer overflow. 128 | Type systems usually prove some properties about a program, and can be viewed as a partial program verification. 129 | 130 | Constraints can be generated from a program which are then fed to a SAT solver to prove that some property holds true. 131 | In case the SAT solver cannot prove that the property is true, it could be either that the program is incorrect, 132 | the specification is incorrect, or even worse both are incorrect. 133 | SAT solvers try to solve a NP-complete problem namely SAT, so a polynomial execution time is not guaranteed. 134 | However, they do perform very well on most practical inputs. 135 | 136 | {\em Eiffel} language has precond and postcond that can be added to a function, which are basically assertions 137 | that are made at runtime. 138 | The problem with runtime verification is that it increases the execution time and is input dependant, and 139 | thus only tells us about the current/past execution and not the future. 140 | 141 | Our goal is to write correct working software. Specification for a program can be written not only for 142 | correctness, but also for bounded execution time, security etc. 143 | 144 | \section*{Specification problem} 145 | The problem with writing a specification for a program is that writing a specification is hard and could be 146 | 3-5x the length of the program itself! This then leads to the questions of whether the specification in itself 147 | correct or not. 148 | 149 | Rather than writing the whole specification for the program, generally a subset for critical components is written 150 | and verified against the implementation. 151 | 152 | 153 | \section*{Testing} 154 | ``I have only proved it correct, I have not tried it.'' - Knuth 155 | 156 | Many forms of testing like systems and end-to-end testing. 157 | The general idea is to test the output of the program for inputs for which correct output is known. 158 | Once an input is known for which the program provides incorrect output, the goal is to ``fix'' the program to 159 | correct it. In case the input is very large, it can be trimmed by doing a binary search over it to find a 160 | very small input for which the program fails to run correctly. 161 | 162 | Tests are usually written by humans, and usually have the following characteristics: 163 | \begin{itemize} 164 | \item - correlated with the code, 165 | \item - have low coverge usually, 166 | \item + test created post hoc can be good insurance for future, 167 | \item + help in documenting how the code should run, 168 | \end{itemize} 169 | 170 | \subsection*{Fuzz testing} 171 | Provide random inputs to a program to make it crash. 172 | The issue with this approach is that it has almost negligible property that the fuzzer can create 173 | a useful test case which can actually find bugs in a program. 174 | Better techniques like ``concolic testing'' which is a combination of concrete and symbolic execution 175 | are known to make fuzzing better. 176 | AFL (American Fuzzy Lop) is one of the framework which does intelligent fuzz testing. 177 | 178 | \end{document} 179 | -------------------------------------------------------------------------------- /2019/Scribe/2019-09-05/Lecture-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-05/Lecture-2.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig1.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig2.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig3.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig4.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig5.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig6.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig7.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig8.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/fig9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/fig9.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-10/lecture3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-10/lecture3.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-09-17/Lecture-4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-17/Lecture-4.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-09-17/fig1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-17/fig1.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-17/fig2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-17/fig2.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-17/lattice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-17/lattice.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-17/memory_fragmentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-17/memory_fragmentation.png -------------------------------------------------------------------------------- /2019/Scribe/2019-09-24/Lecture-5-2019-09-24.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-24/Lecture-5-2019-09-24.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-09-24/fig1.free-lists.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-24/fig1.free-lists.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-09-26/9-26-scribe-notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-09-26/9-26-scribe-notes.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-1/630_10_1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-1/630_10_1.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-17/lecture_11.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-17/lecture_11.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-17/lecture_11.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{listings} 13 | \usepackage{url} 14 | 15 | % 16 | % The following commands sets up the lecnum (lecture number) 17 | % counter and make various numbering schemes work relative 18 | % to the lecture number. 19 | % 20 | \newcounter{lecnum} 21 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 22 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 23 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 24 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 25 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 26 | \newcommand{\dnl}{\mbox{}\par} 27 | 28 | % 29 | % The following macro is used to generate the header. 30 | % 31 | \newcommand{\lecture}[4]{ 32 | \pagestyle{myheadings} 33 | \thispagestyle{plain} 34 | \newpage 35 | \setcounter{lecnum}{#1} 36 | \setcounter{page}{1} 37 | \noindent 38 | \begin{center} 39 | \framebox{ 40 | \vbox{\vspace{2mm} 41 | \hbox to 6.28in { {\bf CMPSCI~630~~~ Systems 42 | \hfill Fall 2019} } 43 | \vspace{4mm} 44 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 45 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 46 | \vspace{2mm} 47 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 48 | \vspace{2mm}} 49 | } 50 | \end{center} 51 | \markboth{Lecture #1: #2}{Lecture #1: #2} 52 | \vspace*{4mm} 53 | } 54 | 55 | % 56 | % Convention for citations is authors' initials followed by the year. 57 | % For example, to cite a paper by Leighton and Maggs you would type 58 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 59 | % (To avoid bibliography problems, for now we redefine the \cite command.) 60 | % 61 | \renewcommand{\cite}[1]{[#1]} 62 | 63 | % \input{epsf} 64 | 65 | %Use this command for a figure; it puts a figure in wherever you want it. 66 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 67 | \newcommand{\fig}[4]{ 68 | \vspace{0.2 in} 69 | \setlength{\epsfxsize}{#2} 70 | \centerline{\epsfbox{#4}} 71 | \begin{center} 72 | Figure \thelecnum.#1:~#3 73 | \end{center} 74 | } 75 | 76 | % Use these for theorems, lemmas, proofs, etc. 77 | \newtheorem{theorem}{Theorem}[lecnum] 78 | \newtheorem{lemma}[theorem]{Lemma} 79 | \newtheorem{proposition}[theorem]{Proposition} 80 | \newtheorem{claim}[theorem]{Claim} 81 | \newtheorem{corollary}[theorem]{Corollary} 82 | \newtheorem{definition}[theorem]{Definition} 83 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 84 | 85 | % Some useful equation alignment commands, borrowed from TeX 86 | \makeatletter 87 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 88 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 89 | \crcr#1\crcr}}\,} 90 | \def\eqalignno#1{\displ@y \tabskip\@centering 91 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 92 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 93 | &\llap{$##$}\tabskip\z@skip\crcr 94 | #1\crcr}} 95 | \def\leqalignno#1{\displ@y \tabskip\@centering 96 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 97 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 98 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 99 | #1\crcr}} 100 | \makeatother 101 | 102 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 103 | 104 | 105 | 106 | % Some general latex examples and examples making use of the 107 | % macros follow. 108 | 109 | \begin{document} 110 | 111 | %FILL IN THE RIGHT INFO. 112 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 113 | \lecture{11}{October 17}{Emery Berger}{Bryce Bodley-Gomes, Bochen Xu, Wenjun Huang} 114 | 115 | \section{Eunices} 116 | 117 | Multics introduced security rings. Ring 0 = supervisor mode; ring 3 = user mode. 118 | 119 | Software can have bugs. Having hardware enforce security was a good idea, as there tend to be less bugs in hardware compared to software implementations. But new attacks like Spectre show that hardware security is not a solved problem. 120 | 121 | Multics was a huge failure. The actual motivation behind Unix was to make portable video games. 122 | 123 | Unix was expensive, so people at Berkeley wrote a Unix clone (BSD) without looking at the source code. This in turn led to other operating systems. None of the OSs directly based their code off of their predecessors but they definitely adopted similar feature design. 124 | 125 | Unix's primary adaption from Multics is the file system. On Unix-like systems, everything is a file (i.e. the "one level of indirection" philosophy), including devices (e.g. hard drives). Even processes are represented as files (e.g. Linux's /proc, which came from Plan 9). Files can be block-based (IO done in blocks) or character-based (IO done in bytes). 126 | 127 | Unix also introduced mountable file system (without letters that DOS reintroduced, which caused portability issues). Mountable file system is again following the "one level of indirection" philosophy: you can refer to remote file systems using regular paths (e.g. /mounted/file1). 128 | 129 | On Unix-like systems, it is possible to redirect output to files/programs in the shell. Since all devices are files, this allows you to do thing like printing program outputs directly in the shell. 130 | 131 | Shell pipeline has built-in parallelism ("streaming"): as the first program starts generating output, a second program is often able to begin processing this output before the first program finishes execution. 132 | 133 | The Unix philosophy is to have many small utilities and combine them using pipelines. But this is a bad idea in practice, as each program invocation creates a new process, and the overhead is high. 134 | 135 | \section{Languages are Cults} 136 | 137 | This overhead issue led to Perl, which conceptually packages many Unix utilities into one language. But Perl has weird syntax, making it "write-only", so Python came along and solved that problem. 138 | 139 | Ruby didn't solve any problem. But Rails, being the first decent web framework, gave people a reason to use Ruby (i.e. Ruby has a killer app). 140 | 141 | People weren't happy with Miranda™, so Haskell came along. It is a pure lazy functional language. Here, pure means functions can't have any side effect. It's hard to code in Haskell, so there aren't many large programs written in it. 142 | 143 | Lazy evaluation: do work only when it's needed. So a self-referencing data structure is possible: ones = 1 :: ones, and take(ones, 3) = [1, 1, 1]. However, lazy evaluation makes programs slow, as each time a value is needed, we have to check if it's been evaluated (i.e. if(evaluated(x)) { proceed } else { evaluate(x); proceed }). 144 | 145 | Currying: passing some arguments to a function creates a new function with those arguments filled in. E.g. f(x, y, z)(1, 2) = f(z) [x = 1, y = 2]. List comprehension (as seen in Python) and currying were adopted by many other languages (originally they were Haskell features). 146 | 147 | \section{Microsoft v.s. Macrohard} 148 | 149 | In a monolithic kernel, all functionality implemented by the OS is written in one "blob." That blob includes all the device drivers as well. This makes the trusted computing base (TCB) very large. Also, device drivers have the same privilege as the kernel. Thus, a bad device driver can bring down the whole system. This design violates the "principle of least privilege," which essentially states that you should give each process the minimal amount of access it needs to complete its job. 150 | 151 | Microkernel strips out unnecessary components from the kernel (e.g. device drivers) and separate them into individual user-space modules. The kernel is therefore minimal, and device drivers generally can't bring down the whole system. But these modules incur extra overhead, as (1) they need to communicate with the kernel (2) they need to switch into kernel mode occasionally. As such, microkernel OSs tend to run slow. 152 | 153 | \end{document} 154 | -------------------------------------------------------------------------------- /2019/Scribe/2019-10-29/Lecture-12-2019-10-29.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-29/Lecture-12-2019-10-29.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-29/architecture-now.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-29/architecture-now.png -------------------------------------------------------------------------------- /2019/Scribe/2019-10-29/architecture-prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-29/architecture-prev.png -------------------------------------------------------------------------------- /2019/Scribe/2019-10-31/10-31_ScribeNotes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-31/10-31_ScribeNotes.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-8/buffer1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-8/buffer1.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-8/buffer2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-8/buffer2.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-8/later.tex: -------------------------------------------------------------------------------- 1 | \begin{verbatim} 2 | x = new(...); 3 | y = x; 4 | delete x; 5 | z = new(...); 6 | // If z is allocated to the space where 7 | // y was present, then y can access z. 8 | print(y); 9 | \end{verbatim} 10 | -------------------------------------------------------------------------------- /2019/Scribe/2019-10-8/lecture_9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-8/lecture_9.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-10-8/stack.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-10-8/stack.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-11-05/2019-11-05, Lecture 14.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-11-05/2019-11-05, Lecture 14.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-11-05/example-scribe-notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-11-05/example-scribe-notes.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-11-05/latexmkrc: -------------------------------------------------------------------------------- 1 | $pdf_mode = 1; 2 | $postscript_mode = 0; 3 | $dvi_mode = 0; 4 | $bibtex_use = 2; -------------------------------------------------------------------------------- /2019/Scribe/2019-11-07/2019-11-07, Lecture 15.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-11-07/2019-11-07, Lecture 15.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-11-12/Lecture 16.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-11-12/Lecture 16.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-11-12/Lecture 16.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | 14 | % 15 | % The following commands sets up the lecnum (lecture number) 16 | % counter and make various numbering schemes work relative 17 | % to the lecture number. 18 | % 19 | \newcounter{lecnum} 20 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 21 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 22 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 23 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 24 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 25 | \newcommand{\dnl}{\mbox{}\par} 26 | 27 | % 28 | % The following macro is used to generate the header. 29 | % 30 | \newcommand{\lecture}[4]{ 31 | \pagestyle{myheadings} 32 | \thispagestyle{plain} 33 | \newpage 34 | \setcounter{lecnum}{#1} 35 | \setcounter{page}{1} 36 | \noindent 37 | \begin{center} 38 | \framebox{ 39 | \vbox{\vspace{2mm} 40 | \hbox to 6.28in { {\bf CMPSCI~630~~~ Systems 41 | \hfill Fall 2019} } 42 | \vspace{4mm} 43 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 44 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 45 | \vspace{2mm} 46 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribes: #4} } 47 | \vspace{2mm}} 48 | } 49 | \end{center} 50 | \markboth{Lecture #1: #2}{Lecture #1: #2} 51 | \vspace*{4mm} 52 | } 53 | 54 | % 55 | % Convention for citations is authors' initials followed by the year. 56 | % For example, to cite a paper by Leighton and Maggs you would type 57 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 58 | % (To avoid bibliography problems, for now we redefine the \cite command.) 59 | % 60 | \renewcommand{\cite}[1]{[#1]} 61 | 62 | % \input{epsf} 63 | 64 | %Use this command for a figure; it puts a figure in wherever you want it. 65 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 66 | \newcommand{\fig}[4]{ 67 | \vspace{0.2 in} 68 | \setlength{\epsfxsize}{#2} 69 | \centerline{\epsfbox{#4}} 70 | \begin{center} 71 | Figure \thelecnum.#1:~#3 72 | \end{center} 73 | } 74 | 75 | % Use these for theorems, lemmas, proofs, etc. 76 | \newtheorem{theorem}{Theorem}[lecnum] 77 | \newtheorem{lemma}[theorem]{Lemma} 78 | \newtheorem{proposition}[theorem]{Proposition} 79 | \newtheorem{claim}[theorem]{Claim} 80 | \newtheorem{corollary}[theorem]{Corollary} 81 | \newtheorem{definition}[theorem]{Definition} 82 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 83 | 84 | % Some useful equation alignment commands, borrowed from TeX 85 | \makeatletter 86 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 87 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 88 | \crcr#1\crcr}}\,} 89 | \def\eqalignno#1{\displ@y \tabskip\@centering 90 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 91 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 92 | &\llap{$##$}\tabskip\z@skip\crcr 93 | #1\crcr}} 94 | \def\leqalignno#1{\displ@y \tabskip\@centering 95 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 96 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 97 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 98 | #1\crcr}} 99 | \makeatother 100 | 101 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 102 | 103 | 104 | 105 | % Some general latex examples and examples making use of the 106 | % macros follow. 107 | 108 | \begin{document} 109 | %FILL IN THE RIGHT INFO. 110 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 111 | \lecture{16}{November 12}{Emery Berger}{Shashwat Singh} 112 | 113 | \section{Failure Oblivious Computing} 114 | Software fault tolerant systems can be used through the use of assert(0), throwing an exception like for eg. x=1/0, x= *0, x=(null) 115 | 116 | Latent programmer intent can be specified using exit(0) in UNIX. 117 | 118 | Memory safety errors include buffer overflows(spatial), dangling pointers(temporal) 119 | 120 | Race condition is specified as if two threads try to compete for the same memory location then it accounts as race condition. 121 | 122 | Emery talks about Hans Boehm designing the android calculator which was designed to give accurate precisions. 123 | 124 | An Undefined behavior can result in a compiler to delete codes. 125 | 126 | Acquiring a lock is sometimes expensive so people sometimes dont do it. 127 | 128 | In Hogwild paper there is no concurrency control as it never loses locks. It carefully leads to convergence and gives right result and has higher performance but gives undefined behavior. 129 | 130 | Emery talks about the phenomenon in which we don't really notice a significant difference between the colors of the clothes of the characters since humans are not much perceptive towards colors. 131 | 132 | The concept of automatic data structure repair was discussed in which for eg. like in a linkedlist if the backpointer is missing then a back-pointer is added. 133 | 134 | Failure oblivious mentions taking a C program and making it a safe C program. If an out of bounds allocation occurs, it is stored in a separate buffer and retrieved later. 135 | 136 | Failstop basically stops the program from running whenever a failure occurs in the program. 137 | 138 | Emery told a trick to save the space occupied by backward pointers in doubly linkedlist, in which he told that the backward pointers can be calculated using A XOR C for B, B XOR D for C etc. 139 | 140 | Emery talks about why ATC towers are located at a higher elevation, so that when the software fails, the staff can use binoculars to located the aircraft and can use walkie talkie to transmit or receive the messages. 141 | 142 | Emery mentions why sometimes reinstalling an app can help in getting rid of corrupted data which was earlier causing the app to fail while running. 143 | 144 | Linux has a Out of Memory killer in which it finds if the system is consuming a lot of memory then it exits it. 145 | 146 | Fault tolerant systems use the concept of infinite heap semantics. 147 | 148 | The Expectation[No of user failures]= p * N 149 | 150 | The companies like IBM, Boeing and AT&T are given as examples of N variant systems. It was assumed that the softwares developed by these companies will be independent but was not. 151 | 152 | 153 | \end{document} -------------------------------------------------------------------------------- /2019/Scribe/2019-11-19/notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-11-19/notes.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-11-21/630_scribe_notes_tex.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-11-21/630_scribe_notes_tex.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-12-03/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-12-03/.DS_Store -------------------------------------------------------------------------------- /2019/Scribe/2019-12-03/Lecture 19.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-12-03/Lecture 19.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-12-05/lecture2019-12-05.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-12-05/lecture2019-12-05.pdf -------------------------------------------------------------------------------- /2019/Scribe/2019-12-10/lecture_21.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/2019-12-10/lecture_21.pdf -------------------------------------------------------------------------------- /2019/Scribe/CS630_Fall_2019_Lec10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/CS630_Fall_2019_Lec10.pdf -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-10/Lecture-10.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | \usepackage{tikz} 14 | 15 | % 16 | % The following commands sets up the lecnum (lecture number) 17 | % counter and make various numbering schemes work relative 18 | % to the lecture number. 19 | % 20 | \newcounter{lecnum} 21 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 22 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 23 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 24 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 25 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 26 | \newcommand{\dnl}{\mbox{}\par} 27 | 28 | % 29 | % The following macro is used to generate the header. 30 | % 31 | \newcommand{\lecture}[4]{ 32 | \pagestyle{myheadings} 33 | \thispagestyle{plain} 34 | \newpage 35 | \setcounter{lecnum}{#1} 36 | \setcounter{page}{1} 37 | \noindent 38 | \begin{center} 39 | \framebox{ 40 | \vbox{\vspace{2mm} 41 | \hbox to 6.28in { {\bf CMPSCI~630~~~Operating Systems 42 | \hfill Fall 2014} } 43 | \vspace{4mm} 44 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 45 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 46 | \vspace{2mm} 47 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 48 | \vspace{2mm}} 49 | } 50 | \end{center} 51 | \markboth{Lecture #1: #2}{Lecture #1: #2} 52 | \vspace*{4mm} 53 | } 54 | 55 | % 56 | % Convention for citations is authors' initials followed by the year. 57 | % For example, to cite a paper by Leighton and Maggs you would type 58 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 59 | % (To avoid bibliography problems, for now we redefine the \cite command.) 60 | % 61 | \renewcommand{\cite}[1]{[#1]} 62 | 63 | % \input{epsf} 64 | 65 | %Use this command for a figure; it puts a figure in wherever you want it. 66 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 67 | \newcommand{\fig}[4]{ 68 | \vspace{0.2 in} 69 | \setlength{\epsfxsize}{#2} 70 | \centerline{\epsfbox{#4}} 71 | \begin{center} 72 | Figure \thelecnum.#1:~#3 73 | \end{center} 74 | } 75 | 76 | % Use these for theorems, lemmas, proofs, etc. 77 | \newtheorem{theorem}{Theorem}[lecnum] 78 | \newtheorem{lemma}[theorem]{Lemma} 79 | \newtheorem{proposition}[theorem]{Proposition} 80 | \newtheorem{claim}[theorem]{Claim} 81 | \newtheorem{corollary}[theorem]{Corollary} 82 | \newtheorem{definition}[theorem]{Definition} 83 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 84 | 85 | % Some useful equation alignment commands, borrowed from TeX 86 | \makeatletter 87 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 88 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 89 | \crcr#1\crcr}}\,} 90 | \def\eqalignno#1{\displ@y \tabskip\@centering 91 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 92 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 93 | &\llap{$##$}\tabskip\z@skip\crcr 94 | #1\crcr}} 95 | \def\leqalignno#1{\displ@y \tabskip\@centering 96 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 97 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 98 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 99 | #1\crcr}} 100 | \makeatother 101 | 102 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 103 | 104 | 105 | 106 | % Some general latex examples and examples making use of the 107 | % macros follow. 108 | 109 | \begin{document} 110 | 111 | %FILL IN THE RIGHT INFO. 112 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 113 | \lecture{10}{October 2}{Emery Berger}{Ian Gemp, Patrick Pegus} 114 | 115 | \section{Queuing Theory} 116 | 117 | \subsection{Little's Law} 118 | %http://tex.stackexchange.com/questions/119597/how-can-i-create-a-queuing-node-using-tikz 119 | \begin{tikzpicture}[>=latex] 120 | % the rectangle with vertical rules 121 | \draw (0,0) -- ++(2cm,0) -- ++(0,-1.5cm) -- ++(-2cm,0); 122 | \foreach \i in {1,...,4} 123 | \draw (2cm-\i*10pt,0) -- +(0,-1.5cm); 124 | 125 | % the circle 126 | \draw (2.75,-0.75cm) circle [radius=0.75cm]; 127 | 128 | % the arrows and labels 129 | \draw[->] (3.5,-0.75) -- +(20pt,0); 130 | \draw[<-] (0,-0.75) -- +(-20pt,0) node[left] {$\lambda$}; 131 | \node at (2.75,-0.75cm) {$W$}; 132 | \node[align=center] at (1cm,-2cm) {Queue}; 133 | \node[align=center] at (3cm,-2cm) {Servicer}; 134 | \end{tikzpicture} \\ 135 | $L = \lambda W$ where $L$ is the average queue length, $\lambda$ is the average arrival rate, and $W$ is the average wait time.\\ 136 | \\ 137 | Requirements/Assumptions:\\ 138 | 1) Queue can never be empty (i.e. must be ``back-filled'')\\ 139 | 2) There can't be any crazy feedback processes (i.e. reasonable independence)\\ 140 | 3) The queue must be in a steady state\\ 141 | \\ 142 | Little's law is important because of its widespread applicability to a large set of complex queuing problems and its simplicity.\\ 143 | 144 | \subsection{Latency vs Throughput} 145 | Latency: Waiting Time\\ 146 | Throughput/Bandwidth: transactions/sec, queries/sec, etc.\\ 147 | - Systems require warm up: Time per byte $\propto$ 1 / bytes transmitted 148 | \begin{enumerate} 149 | \item Old school: Cared about throughput 150 | \begin{enumerate} 151 | \item Batch computing: Share a large number of CPUs 152 | \item Pro: High throughput - schedule tasks so that the all the CPUs are always working 153 | \item Con: High latency - Might have to wait a long time for your process to initiate due to priority scheduling 154 | \end{enumerate} 155 | \item New school: Care about latency 156 | \begin{enumerate} 157 | \item Facebook focuses on TTI (Time to Interact) metric 158 | \item 30\% of users close Youtube videos after 1 sec of waiting, 70\% after 3 sec 159 | \item Interactive computing: 160 | \begin{enumerate} 161 | \item 40 to 500 ms latency is acceptable, 24 fps gives us persistence of vision 162 | \item Try to hide network latency with caching and prefetching 163 | \item Offload some processes to the client 164 | \begin{enumerate} 165 | \item Memoization - memorization of previous function evaluations (from DP) 166 | \item Buffering 167 | \item Concurrent local updates with batching (e.g. Google Drive - ``saved'') 168 | \item Gmail downloads 1.5Mb of javascript 169 | \end{enumerate} 170 | \end{enumerate} 171 | \end{enumerate} 172 | \end{enumerate} 173 | 174 | \subsection{MS Outlook} 175 | All mail is stored in a massive .pst file with a single lock (i.e. it is not randomly accessible). They attempted to use multithreading to simulate concurrency and speed up mail retrieval, but this failed because all of their fetch and send mail requests bottlenecked when accessing the .pst file because of the single lock. They realized this after creating a queuing network model (QNM) which revealed the basic structure of their queuing network.\\ 176 | MS products have been evolving since the 80's and a lot of their code is maintained from previous generations. Designing from scratch is seldom an option given the size of these projects and maintaining big picture models is very difficult. 177 | \subsection{Why do most software projects not have a performance model?} 178 | \begin{enumerate} 179 | \item Since the model is not apparent in the code, it must be constructed manually. 180 | \item The likelihood of a successful project is low. There is no financial gain from developing a model for a project that will probably fail. 181 | \item Software is built to implement a feature often without concern for performance. 182 | \end{enumerate} 183 | 184 | \subsection{Flux} 185 | Allows you to easily extract QNMs from your network by decoupling the software into 4 types: threads, thread-pools, processes, and events. This could prevent disasters such as the outlook fiasco described above. 186 | \end{document} 187 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-10/Makefile: -------------------------------------------------------------------------------- 1 | #adapted from http://www.fclose.com/1643/a-simple-makefile-for-latex/ 2 | 3 | SHELL=/bin/bash 4 | FILE=Lecture-10 5 | 6 | all: pdf 7 | pdf: 8 | pdflatex ${FILE} 9 | clean: 10 | rm -f ${FILE}.{pdf,log,aux,out} 11 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-10/README.md: -------------------------------------------------------------------------------- 1 | CMPSCI-630_scribe_20141002 2 | ========================== 3 | 4 | CMPSCI-630 class notes for Oct. 2, 2014 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-11/README.md: -------------------------------------------------------------------------------- 1 | cs630-scribe-notes-10-9 2 | ======================= 3 | 4 | CS 630 Scribe Notes, Oct 9 2014 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-11/notes.txt: -------------------------------------------------------------------------------- 1 | 2 | Security 3 | 4 | - Lampson: 'The Confinement Problem' 5 | - Thompson: Turing award speech 6 | ~ Context: Security was a 'hypothetical' concern 7 | ~ By the time Thompson gave speech, it's possible the backdoor 8 | he described no longer was vulnerable 9 | 10 | - Confinement: 11 | - Data may leak through two types of channels: 12 | (1) Overt: Explicit flow of information 13 | (2) Covert: implicit flow of information 14 | Ex: Packet traffic analysis, timing attacks (using the time to execute of a program with logical flow to predict its conditions, etc.) 15 | - even power consumption (Levine, Fu) related to web traffic 16 | - Many were skeptical of covert traffic at this time 17 | 18 | - Paper: 'Timing Attacks are Real' 19 | - Revealed that passwords could be intercepted over a network 20 | - Key distance could be modeled w/ only a few observations (of packets) 21 | - Network traffic patters can be used to infer a user's browsing activity 22 | - using promiscuous mode (all network traffic - not just that which is addressed to the MAC of machine in use - is visible). (Technically, all wireless traffic is interceptable due to being radio waves, and even using unencrypted headers, and timing attacks. 23 | - These types of attacks could be battled with nonce characters, pseudorandom interpacket arrival times 24 | - Latency vs. privacy (timing) binary : Latency leaks timing 25 | - Many attacks are due to poor system design 26 | - (Other poor designs exploited include smartphones over-the-shoulder and fingerprints, and ATM infrared [materials adjusted since]) 27 | - Additionally, rubber-hose cryptography: forced handover of credentials 28 | 29 | Confinement Problem: Formal Framework - 30 | 31 | Information flow: 32 | - Integrity: No dangerous information goes (leaks) to a sensitive place 33 | ex: z = input from Internet //arbitrary command 34 | ... 35 | System(z) //infiltration 36 | 37 | - in other words: nothing "tainted" goes to untrusted places 38 | - Confidentiality: no sensitive information flows out to a public place 39 | ex: z = readMail() 40 | ... 41 | Output(z) //exfiltration 42 | 43 | [Aside: Perl: taint mode; all variables from untrusted sources set a taint bit; also applies to all variables which propogate from a tained variable] 44 | 45 | Issues with tainting: 46 | (1) Taint Explosion: taint is monotonically nondecreasing 47 | - One way to taint is sanitizing 48 | ex: y = count(z) //Assert 'count' is a sanitizer, or sanitize method removes sanitize bit 49 | ... 50 | Write(y) 51 | 52 | Ex: query = readInternet() 53 | ... 54 | q = sanitize(q) //Could be SQL injection; must ensure valid input 55 | executeQuery(q) 56 | 57 | - Dual: Declassification -- must rely on people to do it correctly 58 | 59 | (2) Implicit flow (control flow dependence) 60 | - Ex: z = InputFromInternet() 61 | .. 62 | if z: x = 0; else: x = 1 63 | 64 | - x, which is technically safe, has been tainted 65 | 66 | - To properly track tainintg, must track data flow (copying assignment usage) and control flow (depends on conditionals) -- this is expensive and complex 67 | 68 | - These issues are formally described in terms of lattices: 69 | 70 | [lattice figure?] {a,b,c} example 71 | 72 | 73 | - Ex: untainted (meet) tainted = tainted 74 | 75 | Dynamic Information Flow Tracking (DIFT): 76 | 77 | - Every flow followed, allow information must be propogated 78 | - Too slow to be used in high-performance languages 79 | - [JIF: Java w/ Information Flow (Andrew Myers); static] 80 | 81 | Noninterference: Low-value data and high-value data don't interfere 82 | - Desirable property to preserve; only susceptible in covert channels 83 | 84 | - Ex: Web browser: exfiltration : tracking 85 | - or, JavaScript could maliciously download at will 86 | 87 | - (OS/VM level confinement) Sandboxing: Browser technique of seperating 'tabs', etc. into processes 88 | - (Filesystem level confinement) chroot jail; tell OS for this process, root is this (higher-than-root) directory 89 | - (PL/Binary level) SFI: instrument read/write calls with reference monitor; enables software fault isolation 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-11/notes2.txt: -------------------------------------------------------------------------------- 1 | October 9th, 2014 2 | 3 | Security 4 | 5 | - It was not seen as problem but just a theoretical concern 6 | 7 | - Confinement 8 | 9 | *Covert channels -> implicit flow 10 | -Packets: can't see the data but can see that communication is happening 11 | 12 | - Timing attack channel: depending on how long certain computations take, one can extract some information out of the system. Imagine that the time to test a certain condition is different if the condition is true or false. Just by tracking the time one can figure out what it is the value of the condition. (include pseudo code example) 13 | Timing attacks are a real threat. Can get passwords (pwd attacks), public key encryption, and can even help to guess network topology. 14 | 15 | Nonce characters: include some randomness 16 | 17 | Latency vs. privacy: high latency results in more privacy, 18 | 19 | -Power channel: observe how much power is being consumed. Ex: can guess visited websites given the energy consumption 20 | 21 | -Promiscuous mode: can get packets that are not destined to you 22 | 23 | *smartphones: fingerprints 24 | *ATM: infrared on the key board 25 | *Over the shoulder surfing 26 | *Brute force 27 | *Rubber hose crypto 28 | 29 | *Overt channels -> explicit flow 30 | 31 | The information flow is explicit. Need to guarantee two things: 32 | 1) Integrity: no dangerous information goes to a sensitive place 33 | 2) Confidentiality: no sensitive information goes to a dangerous place 34 | 35 | For example: 36 | 37 | code 1: Z= inputFromInternet(); 38 | - 39 | - 40 | system(Z); 41 | 42 | code 2: Z= readFromMailbox(); 43 | - 44 | - 45 | output(Z); 46 | 47 | To get integrity the system may implement what it is called tainting. Any potentially evil information will be tainted, i.e. data from an untrusted source or data obtained by using some tainted data. Some problems with the tainting can be: 48 | a) Taint explosion: might taint information that was not harmful. Instead of tainting, can sanitize. Analyze the data and 49 | ex: q = readString(q) 50 | q = sanitize(q) --> try to prevent SQL injection attack 51 | executeQuery(q) 52 | 53 | b) Implicit flow implies control flow dependency. 54 | In the following example: Z = inputFromInternet() 55 | if (Z) { x = 0 ;} 56 | else {x =1; } 57 | Even though x is not coming directly from the internet, its value is dependent on that. Therefore x could be a candidate for tainting but that kind of prevention (non-interference?) is too expensive. 58 | 59 | -Lattice: 60 | 61 | TAINTED HIGH SECURITY PUBLIC 62 | | | | 63 | | sanitizing | | declassification 64 | | | | 65 | UNTAINTED LOW SECURITY SECRET 66 | 67 | -Show the example with {a,b,c} to explain lattices 68 | 69 | -Data flow: copying, assignment, use 70 | -Control flow: depends on condition 71 | 72 | Perl uses DIFT: dynamic information flow track -> it is very slow 73 | 74 | SIFT: static information flow track. 75 | In C we can cast anything. Ex: int f = (int) systems -> can uncast f later and use it on tainted information. 76 | 77 | Sandboxing: establish boundaries for execution OS/VM 78 | On Chrome each tab has its own processor. It relies on OS for confinement. 79 | 80 | Chroot jail: establish a root for the process filesystem. The process can not access anything above. 81 | SFI: software fault isolation 82 | NaCl: x86 83 | PNaCl: chromebooks 84 | 85 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-14/Makefile: -------------------------------------------------------------------------------- 1 | #adapted from http://www.fclose.com/1643/a-simple-makefile-for-latex/ 2 | 3 | SHELL=/bin/bash 4 | FILE=Lecture-14 5 | 6 | all: pdf 7 | pdf: 8 | pdflatex ${FILE} 9 | clean: 10 | rm -f ${FILE}.{pdf,log,aux,out} 11 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-14/README.md: -------------------------------------------------------------------------------- 1 | CMPSCI-630_scribe_20141030 2 | ========================== 3 | 4 | CMPSCI-630 class notes for Oct. 30, 2014 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-14/airplane_queue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-14/airplane_queue.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-16/Mirroring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-16/Mirroring.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-16/MirroringAndStriping.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-16/MirroringAndStriping.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-16/Seema_notes.txt: -------------------------------------------------------------------------------- 1 | RAID and Disks 2 | Disks are technically referred to as spinning media where as flash is not the rotating media. 3 | Types of NVRAM technology: 4 | 1. SSD or Flash 5 | 2. PCM – Phase Change Memory 6 | 3. DVD/CD 7 | 8 | SSD (Solid State Disks ) 9 | Flash or SSD are not having the rotating medium, they have random access and have a non volatile RAM (NVRAM). 10 | SSD’s have chunks of RAM, you apply voltage to them. RAM has a clock rate, new information is sent to it every clock tick, if new information isn't sent then the memory is lost. We need to refresh RAM periodically. 11 | 12 | PCM – Phase Change Memory 13 | Here the state depends on the crystals. Heat causes crystal to change state. Heat it, it stays in the state until you heat it again. 14 | 15 | DVD/ CD 16 | - DVD is optical which is supposedly slow. Its less dense and an inexpensive disk. 17 | - Velocity is around 1000 times less than the magnetic media. 18 | 19 | Magnetic media has two sides and are usually vacuum – sealed. If vacuum seal is broken, disk is dead. But vacuum seal is very sensitive, even if there were dust particles on them, it was impossible to read data. Magnetic has very bandwidth, it speed goes upto 10,000 RPM. When things are rotating very fast, we are able to read lot of data from the disk. But the drawback is magnetic media have high latency when compared to NVRAM. 20 | 21 | Why did Google move from magnetic disks to SSD’s? 22 | - Power savings 23 | Rotator consumes a lot of power 24 | Hard drive – 10W 25 | SSD - mW 26 | 27 | - Predictable wear 28 | Flash has higher life cycle, since it is being used in a dense way. 29 | Flash goes for load leveling: 30 | - Flash maintains another level of indirection, maintains bad blocks. 31 | - It keeps a check of what has been written maximum number of times. Thus spreads the writes throughout the disk. 32 | 33 | - Data access speed 34 | 35 | - No need of a fan 36 | Since no heat is dissipitated by SSD 37 | 38 | - Less use of man power. 39 | Since SSD is more reliable. It has no moving parts and hence more reliability. No need of frequently replacing disks, hence less number of people to replace disks. 40 | 41 | - Only drawback is SSD’s are expensive. 42 | Cost is around 4 times that of magnetic disks. 43 | 44 | A hard drive is a stack of spinning discs, each of which has concentric rings of bits. The magnetic disk arm moves disk head back and forth to access data. The disk head should move really fast to access data. Thus magnetic disk head builds up speed and also has to reduce latency to land to a particular place. This is known as seek latency. This slows down random access. Random access is also slowed by waiting for the disk to spin around also known as rotation latency. To reduce this latency, we need a contiguous layout. Defragmentation helps in maintaining this contiguous layout. In case of NTFS, there is no defragmentation. Hence there was a compaction overhead when the disk was completely full. Best possible thing was to copy data from one disk to the other. But this again employs copying overhead. Thus we go for terabyte hard drive. It’s difficult to fill terabyte hard drives, thus easier to compact and hence easier to have a contiguous layout. 45 | 46 | Why Burn – In? 47 | The failure rate is high initially, then it reduces and rises up again. It follows a “bathtub graph”. This is the case, since products are shipped late and customers do not notice them earlier, but later they do. 48 | Replacing bad blocks may eventually result in bad blocks table map being completely full and no contiguous layout. If we go in for burn-in, the bad blocks table can be prevented from being full. 49 | 50 | SCSI drives have a hardware cache, which has good performance, it fills up the cache and disks work at the back end, data is written to the disk contiguously. If disk drive fails before a cache write, no data is written to the drive, it results in “lost blocks”. 51 | 52 | Old file systems only bothered about performance, but reliability has recently been focused. Thus modern file systems have introduced the concept of journaling 53 | 54 | Journaling. 55 | In case of journaling, we keep a log of all the actions completed. If case of a power failure in between, the disk might be corrupted. In this case, we check the last entry in the log. If it is not the end of a complete action, we undo all the changes written in log to the beginning of the action. 56 | Journal can also be corrupted since it is stored on disk. To protect journals, one should go for replicating journals. 57 | Proof of replication through Probability: 58 | - P(disk write fails) = p 59 | - P(disk write succeeds) = 1-p 60 | 61 | - P(disk write fails for two disks) = p * p = p^2 62 | - P(disk writes succeeds for two disks) = 1- p^2 63 | Hence, more the number of disks, success rate if higher. Here the assumption is that all the disks are independent of each other. 64 | 65 | RAID which used to mean "Redundant Array of Inexpensive Disks," now means "Redundant Array of Independent Disks". For fault tolerance, disks should be independent. 66 | RAID has two purposes: 67 | - Performance 68 | - Reliability 69 | 70 | These are achieved by 71 | - Mirroring (RAID 0) – same data being replicated on multiple blocks 72 | Best reliability/ worst performance/cost 73 | 74 | - Striping (RAID 1) - different blocks have different data 75 | Best performance /cost worst reliability 76 | 77 | In case of 3 disks, success rate would be as follows : 78 | - Mirroring 79 | Success rate = 1-p^3 80 | - Striping 81 | Success rate = (1-p)^3 82 | 83 | Hence optimal solution is to combine both mirroring and striping. And the only way to recover from failures is to make “BACKUPS”. 84 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-16/Striping.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-16/Striping.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-16/adam-scribe-notes.txt: -------------------------------------------------------------------------------- 1 | People have been talking about the end opf disks for a long time, but we still have disks. Some laptops have flash, or SSD (solid-state), drives, which have lots of different characteristics from traditional "spinning media." 2 | 3 | How SSDs are different: 4 | - O(1) random access 5 | 6 | SSds are also known as NVRAM (non-volatile RAM), meaning RAM that doesn'tr go away when it loses power. 7 | 8 | How SSDs are: you have chunks, you apply voltage to them, their values "stick." RAM has a clock rate, new information is sent to it every clock tick, if new information isn't sent then the memory is lost. 9 | 10 | Other NVRAM technology: 11 | PCM - phase-change memory. Not too different from DVD/CD technology. Heat causes a crystal to change state. 12 | memristers - ? 13 | 14 | DVD/CD: Old CD burners would literally etch holes in the CD. A laser checks where the etched pits are. As opposed to traditional spinning media, which is magnetic: a head floats above the surface of the disk, magnetizing the head writes bits, detecting head movement reads bits. Magnetic drives are usually vacuum-sealed, although floppy drives weren't... 15 | 16 | As density increases, risk of error goes up. As soon as the vacuum seal of a hard drive is open, it's dead. Even smoke particles are big enough to cause issues. Optical media is more reliable, but also slow. A DVD drive, to be as fast as an average hard drive, woud have to have a speed of ~1000X, which would destroy the disc. Hard drives can acceerate to ridiculous speeds; 10,000 RPM is normal in server drives. This is why we still use spinning media: high bandwidth. But... compared to NVRAM, they also have high latency. 17 | 18 | Google switched almost entirely from spinning disks to SSDs. Why? 19 | 20 | - power savings 21 | - hard drive ~10W 22 | - SSD ~mw 23 | - predictable wear 24 | - data access speed 25 | 26 | A hard drive is a stack of spinning discs, each of which has concentric rings of bits. The magnetic head must physically move when switching between rings, which slows down random access (seek latency). Random access is also slowed by waiting for the disk to spin around (rotation latency). To reduce this latency, files should be contiguous. Defragmentation (on old Windows machines) was used to keep files as contiguous as possible. Defragmentation might not be used as much today because disks don't usually fill up (how do you use up a terabyte?). 27 | 28 | Disks, even when vacuum-sealed, fail. Often. In fact, parts of the magnetic disk on a hard drive often don't work right out of the factory. During the "burn-in" period of a hard drive at the factory (testing it to know whether it works), some NVRAM in the HD is set to identify bad blocks, which tells the hardware to skip them. This may result in "contiguous" blocks not actually being contiguous, because one of the blocks is bad and the drive redirects it to another block in another part of the disk. 29 | 30 | The burn-in period is used because most hardware has failure rates that follow a "bathtub graph": most failures occur toward the very beginning or very end of a product's expected lifetime. By checking for the early failures, customers don't see them, and experience a linear failure rate. 31 | 32 | Modern SCSI drives have a hardware cache, which is good (performance), but also bad (if the drive loses power before data in cache has been written to disk, the data can be lost!) This can result in "lost blocks," which can lead to catastrophic inconsistency in the disk. 33 | 34 | There's an obvious tension between performance and reliability. File systems used to focus exclusively on performance, but reliability has recently been more important. Modern file systems have reliability features such as journaling. 35 | 36 | Journaling: Pretend that, at any moment, the power's going to go out, or the disk's going to fail. How do we recover from that? Answer: keep a log of every disk action, then, when recovering from a power failure, if the most recent entry in the log is not the end of a complete action, we can "rewind" to the beginning of this partial action. 37 | 38 | Replication: If the chance of failure is p, the chance of success is 1-p. If there are two disks, and only one must succeed for a write to succeed, then the chance of success is 1-p^2... and, if p is small, then p^2 is *really* small. Of course, this is assuming that the chances of failure are independent! 39 | 40 | RAID used to mean "Redundant Array of Inexpensive Disks," but now it means "Redundant Array of Independent Disks." Redundancy is useless without independence. 41 | 42 | Flash reliability is strange: reads are easy and painless, but writes require huge chunks to be deleted and rewritten at once. But this works well for big data: the more data there is, the more of the load is reads. Flash memory can handle only a limited number of writes before breaking down, but this has become less of a problem because the filesystem cycles writes among all of the blocks ("load leveling"). Contiguousness is not an issue; latency is constant, and there is no seek latency. 43 | 44 | Of course, everyone doesn't just move to SSDs, because they're expensive... about 4x the $/GB of traditional drives. But SSDs are used in mobile devices because a) they can take more of a beating, b) they don't use much power, and c) they don't give off much heat. 45 | 46 | RAID has two purposes: performance and reliability. 47 | - striping (RAID 0) best cost/performance, worst reliability 48 | - mirroring (RAID 1) best reliability, worst cost/performance 49 | - higher levels: simultaneous mirroring and striping 50 | 51 | Striping: split a file up into blocks among multiple disks. Greatly increases performance through parallelism, but also decreases reliability (for striping across two disks, faiure rate is sqrt(p)). 52 | 53 | RAID recovery is actually shockingly unreliable. It's basically a false sense of security. This is because, with so many disks, the chance of failure increases significantly. Google uses mirroring, but not higher-level RAID. Google actually still uses tape backup: tape has terrible seek speed, but pretty good bandwidth. 54 | 55 | The moral of this class is: MAKE BACKUPS. -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-16/hardDrive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-16/hardDrive.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-18/lecture-18.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | 14 | % 15 | % The following commands sets up the lecnum (lecture number) 16 | % counter and make various numbering schemes work relative 17 | % to the lecture number. 18 | % 19 | \newcounter{lecnum} 20 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 21 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 22 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 23 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 24 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 25 | \newcommand{\dnl}{\mbox{}\par} 26 | 27 | % 28 | % The following macro is used to generate the header. 29 | % 30 | \newcommand{\lecture}[4]{ 31 | \pagestyle{myheadings} 32 | \thispagestyle{plain} 33 | \newpage 34 | \setcounter{lecnum}{#1} 35 | \setcounter{page}{1} 36 | \noindent 37 | \begin{center} 38 | \framebox{ 39 | \vbox{\vspace{2mm} 40 | \hbox to 6.28in { {\bf CMPSCI~630~~~Systems 41 | \hfill Fall 2014} } 42 | \vspace{4mm} 43 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 44 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 45 | \vspace{2mm} 46 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 47 | \vspace{2mm}} 48 | } 49 | \end{center} 50 | \markboth{Lecture #1: #2}{Lecture #1: #2} 51 | \vspace*{4mm} 52 | } 53 | 54 | % 55 | % Convention for citations is authors' initials followed by the year. 56 | % For example, to cite a paper by Leighton and Maggs you would type 57 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 58 | % (To avoid bibliography problems, for now we redefine the \cite command.) 59 | % 60 | \renewcommand{\cite}[1]{[#1]} 61 | 62 | % \input{epsf} 63 | 64 | %Use this command for a figure; it puts a figure in wherever you want it. 65 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 66 | \newcommand{\fig}[4]{ 67 | \vspace{0.2 in} 68 | \setlength{\epsfxsize}{#2} 69 | \centerline{\epsfbox{#4}} 70 | \begin{center} 71 | Figure \thelecnum.#1:~#3 72 | \end{center} 73 | } 74 | 75 | % Use these for theorems, lemmas, proofs, etc. 76 | \newtheorem{theorem}{Theorem}[lecnum] 77 | \newtheorem{lemma}[theorem]{Lemma} 78 | \newtheorem{proposition}[theorem]{Proposition} 79 | \newtheorem{claim}[theorem]{Claim} 80 | \newtheorem{corollary}[theorem]{Corollary} 81 | \newtheorem{definition}[theorem]{Definition} 82 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 83 | 84 | % Some useful equation alignment commands, borrowed from TeX 85 | \makeatletter 86 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 87 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 88 | \crcr#1\crcr}}\,} 89 | \def\eqalignno#1{\displ@y \tabskip\@centering 90 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 91 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 92 | &\llap{$##$}\tabskip\z@skip\crcr 93 | #1\crcr}} 94 | \def\leqalignno#1{\displ@y \tabskip\@centering 95 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 96 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 97 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 98 | #1\crcr}} 99 | \makeatother 100 | 101 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 102 | 103 | 104 | 105 | % Some general latex examples and examples making use of the 106 | % macros follow. 107 | 108 | \begin{document} 109 | 110 | %FILL IN THE RIGHT INFO. 111 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 112 | \lecture{18}{November 13}{Emery Berger}{Nicholas Braga, Teddy Sudol} 113 | 114 | \section{Ordering of Events in Distributed Systems} 115 | 116 | In a distributed system, there is no total ordering without a global, synchronized, physical clock for each process. Additionally, it is not possible to establish a totally correct global time in a distributed system. For this reason, Leslie Lamport invented \textbf{Logical (Lamport) clocks}. 117 | 118 | \subsection{Lamport Clocks} 119 | 120 | \textbf{Lamport clocks} are a scalar that enable one to reason on distributed events using the \textit{happens-before} (HB) relation. 121 | % TODO: process timeline 122 | 123 | \begin{equation} 124 | C(e_{1}) < C(e_{2}) \Rightarrow e_{1} HB e_{2} 125 | \end{equation} 126 | 127 | The use of \[<\] rather than \[\leq\] is a "hack" which enables us to more easily reason on uninitalized clock values. 128 | 129 | This, however, is not fine-grained enough, since it is possible to lose information from this model. In particular, logical clocks cause an overapproximation on the number of events that you are able obtain a relation on. 130 | 131 | \subsection{Vector Clocks} 132 | 133 | \textbf{Vector clocks} are a generalization of Lamport clocks. Broadly, a vector clock keeps a view on all other clocks in the system \textit{relative to their last interaction} (if at all). 134 | % TODO: Vector clock process timeline 135 | Each vector clock maintains \texttt{n} cells (corresponding to \texttt{n} other processes). Each cell contains the value of the process \texttt{i} total number of sends when these processes last interacted. If they have not interacted yet, this value (remains) initialized as \texttt{-1}. Thus, the vector (corresponding to process) \texttt{i} maintains for process \texttt{j} 136 | \begin{equation} 137 | where \, i \neq j \, \forall \, n \, processes \; \frac{count\, of\, total\, sends\, for\, process\, i}{MAX\,(\,count\, of\, total\, sends\, of\, i\, last\, observed\,)} 138 | \end{equation} 139 | 140 | % NB: I was just throwing down the rest of my notes in case they were useful when you merge, feel free to edit/remove 141 | 142 | Because everything is being updated in the same order, every process can have a \textbf{consistent view}. Some issues with this, however, are the size of vector clocks needs to be initialized at the outset of sync. In the case of failure, with logging, we can rollback all processes and replay (locally, we cannot assume idempotence; appears as a delay to the outside). 143 | 144 | All of these concepts can also be applied to a shared memory system. 145 | 146 | Bohr Bug: deterministic bug; "easy to find", not necessarily easy to fix but gives more context; very common. 147 | 148 | Heisenbug: nondeterministic; hard to fix, but does not happen as frequently. 149 | 150 | Jim Gray was chiefly concerned with fault tolerance and availability. 151 | 152 | False positive problem: a fix not needed 153 | False negative problem: a fix needed but not given 154 | 155 | Concurrency errors are a canonical Heisenbug; including, timing (ordering of events -- schedular: nondeterminism of locks, etc.) network I/O, logging time, random number generators, crypography, etc. 156 | 157 | Monte Carlo algorithm: using randomness to compute a difficult problem ("The more trials, the more accurate your algorithm will be") 158 | 159 | Von Neumann: "Original Sin" : Believing true randomness can come from a deterministic function 160 | 161 | 162 | \end{document} 163 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-19/Makefile: -------------------------------------------------------------------------------- 1 | #adapted from http://www.fclose.com/1643/a-simple-makefile-for-latex/ 2 | 3 | SHELL=/bin/bash 4 | FILE=Lecture-19 5 | 6 | all: pdf 7 | pdf: 8 | pdflatex ${FILE} 9 | clean: 10 | rm -f ${FILE}.{pdf,log,aux,out} 11 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-19/README.md: -------------------------------------------------------------------------------- 1 | CMPSCI-630_scribe_20141118 2 | ========================== 3 | 4 | CMPSCI-630 class notes for Nov. 18, 2014 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-2/Lecture-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-2/Lecture-2.pdf -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/BB_Abstraction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/BB_Abstraction.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Compacting_Live.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Compacting_Live.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Generational.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Generational.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/GitHub_Branches.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/GitHub_Branches.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Hash_Table.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Hash_Table.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Lecture-3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Lecture-3.pdf -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Load_Balancing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Load_Balancing.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/MSC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/MSC.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/No_Compacting_Issues.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/No_Compacting_Issues.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Semi_Space.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Semi_Space.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Soft_vs_Hard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Soft_vs_Hard.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Thumbs.db -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Tricolor_Invariant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Tricolor_Invariant.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-3/Types_GC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-3/Types_GC.jpg -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-4/Lecture-4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-4/Lecture-4.pdf -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-4/Original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-4/Original.png -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-4/README.md: -------------------------------------------------------------------------------- 1 | cs630-scribe-notes 2 | ================== 3 | 4 | 9/9 Scribe notes for CS630 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-4/nb-scribe-notes.txt: -------------------------------------------------------------------------------- 1 | PL Runtime Systems 2 | 3 | I. Runtime Systems 4 | 5 | [[ Diagram of system hierarchy, incl. runtime system ]] 6 | 7 | - Runtime systems are very core to a programming language, and are a "grab bag" for programming languages features that are not directly supported by the architecture. One such feature is a garbage collector (GC); if no GC is available, then memory management mechanisms (i.e., malloc, free) must be used. 8 | 9 | - Threads are also often embedded into runtime systems. 10 | 11 | - For other embedded runtime system mechanism, see /usr/lib/ (for the most part) 12 | 13 | - Runtime systems are generally composed of libraries (such as, libc.so, libstdcpp.so, libm.so, etc.) 14 | 15 | II. Garbage Collection in an Uncooperative Environment (Boehm et al., 1991) 16 | 17 | - The goal of this work was to decouple GC from the program's interpretation; the design was that it should be a standalone module. Previously, GC required 'intimacy' with a particular programming language(s). 18 | 19 | - Precise GC: Garbage collectors in which pointers must be explicitly known. 20 | [[ Example: Java class Foo { ... } ]] (-Would show ex. that GC stores a ptr map and must know certain var's are ptrs.) 21 | 22 | - Why must we be able to distinguish a pointer from a non-pointer? 23 | [[ pointer graph showing Roots and stack pointers .. GC can scramble the pointers]] 24 | 25 | - Soundness: no reachable memory is ever reclaimed (could be just not reclaiming) 26 | - Completeness: unreachable memory is eventually reclaimed (should be overly aggresive). 27 | 28 | - Mark-sweep garbage collection: 29 | - Mark: recursively 'blacken' nodes 30 | - Sweep: reclaim all 'white' nodes; color reachable nodes 'white'. Store 'color' in variable such that the GC can make all current 'black' nodes the new 'white' nodes. 31 | 32 | - Real pointers ∩ discovered pointers = real pointers 33 | 34 | - Conservative garbage collection: Does not require a map for roots and each function require a stack map (error prone). 35 | - Motivation: Writing efficient concurrent GC is a difficult problem 36 | - Issue: "Duck test" 37 | Look at all allocated memory 38 | 1) x < min, x > max can not be a pointer 39 | 2) pointers not aligned at multiples* [Aligned for performance reasons. The error 'SIGBUS alignment error' refers to this sort of misalignment; this allignment is implement at the chip-level] of 4 or 8 (%4 = 0, etc.) 40 | 41 | - 0 ... 2^48 42 | - Concern: There is sufficient address space to store pointers in such a way 43 | 44 | 3) Then, walk through "chain of pointers" 45 | - blacklisting: chains that ultimately do not end in a pointer, stored to not allocate memory here again (Ex: integers that satisfied conditions (1) and (2)). [This is a heuristic: it is not unsound]. 46 | 47 | - Sweep "lazily": Instead of being strewn in memory, chunks and data structures are mapped where objects are located in memory. This also allows GC to ientify ranges of allocated memory quickly. 48 | - "B;BOP" (Big Bag o' Pointers) 49 | [[ diagram ]] 50 | 51 | - "Stop the world": the program must 'pause' to garbage collect 52 | - This approach is unpopular with projects require higher amounts of memory due to heap size 53 | - Worst case: We must allocate large object of size n, but only blocks of size n-1 or less are free 54 | - (Aside: this type of GC was originally used in emacs, since it is written in lisp) 55 | - This technique has no optimization faster than requiring O(n) time; unless some heuristic is applied 56 | 57 | - Mark-sweep GC can result in a porous memory space (fragmented) 58 | - Requiring: 1) More space 59 | 2) Underlying architecture optimizations 60 | 61 | Locality: property of things being close 62 | GC cannot choose specific objects to keep in RAM, must sends 'chunks' to cache; fetching memory is expensive and can incur a penalty of ~100 cycles 63 | - Spacial locality is desired: Generally, similar items should be stored in close proximity (Ex: If we use byte 1, it is likely that we'll also use byte 2). 64 | - On the other hand, temporal locality: items should be used in close time range, before objects are then changed again 65 | - One technique to this end could be to move pointers (compaction). The problem is that it is possible to overwrite integers by doing so. Conservative GC will only reclaim pointers, but might accidentally overwrite in this way. 66 | 67 | (Aside: "All problems in computer science can be solved by another level of indirection" -David Wheeler 68 | Corollary: "...except for the problem of too many layers of indirection." -Kevlin Henney (Paraphrased in class as, "Optimization is removing a layer of indirection").) 69 | 70 | - This problem can be solved with handles. Handles make it easier to relocate memory; this is because only the 'handle table' points to actual objects. [[diagram]] 71 | - However, this multiplies the number of operations (i.e., dereferences), resulting in poor performance in practice 72 | - If you can allocate relatively small amounts of memory, GC overhead can be made small. This is not possible with handles. 73 | - Handles interact poorly with prefetchers -- implemented at architecture level (i.e., a stride prefetchers, which learns loops by observing the memory stream) 74 | 75 | - Conclusion: While conservative GC cannot overcome fragmentation, using handles has other performance overheads about conservative GC. 76 | 77 | - From the outset, Boehm's goal was to write an external GC, which would be a novel idea. 78 | 79 | - The evolution of a GC: 80 | interpreter ---> JIT compiler ---> "fancy GC" 81 | 82 | Interpreter: (i.e., Python, Javascript, Ruby, etc.) 83 | - Easy to write 84 | - Terrible GC: use reference counting (also invented by McCarthy (LISP)); using mark-sweep in an interpreter is too slow 85 | 86 | Fancy GC: precise, but require a lot of fine-tuning 87 | 88 | [[reference counting diagram]] 89 | 90 | pointer update 91 | increment RC destination 92 | 93 | decrement RC origin 94 | if RC orgin = 0 95 | recursively: decrement_references(..) 96 | reclaim objects 97 | 98 | - Reference counting cannot handle circular data structures 99 | - Reference counting is sound, but not complete 100 | 101 | [[virtual, physical, swap diagram]] 102 | 103 | 3.3.2 - 3.3.3 : between, fragmentation, locality, handles 104 | ref counting diagram 105 | 106 | 107 | 108 | - 4 types of GC: concurrent, parallel, incremental, precise 109 | 110 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-5/Makefile: -------------------------------------------------------------------------------- 1 | #adapted from http://www.fclose.com/1643/a-simple-makefile-for-latex/ 2 | 3 | SHELL=/bin/bash 4 | FILE=Lecture-5.tex 5 | 6 | all: pdf 7 | pdf: 8 | pdflatex ${FILE} 9 | clean: 10 | rm -f ${FILE}.{pdf,log,aux,out} 11 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-5/README.md: -------------------------------------------------------------------------------- 1 | CMPSCI-630_scribe_20140916 2 | ========================== 3 | 4 | CMPSCI-630 class notes for Sept. 16, 2014 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-6/Lecture-6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-6/Lecture-6.pdf -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-6/Makefile: -------------------------------------------------------------------------------- 1 | #adapted from http://www.fclose.com/1643/a-simple-makefile-for-latex/ 2 | 3 | SHELL=/bin/bash 4 | FILE=Lecture-6.tex 5 | 6 | all: pdf 7 | pdf: 8 | pdflatex ${FILE} 9 | clean: 10 | rm -f ${FILE}.{pdf,log,aux,out} 11 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-6/README.md: -------------------------------------------------------------------------------- 1 | CMPSCI-630_scribe_20140918 2 | ========================== 3 | 4 | CMPSCI-630 class notes for Sept. 18, 2014 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-7/Lecture-7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-7/Lecture-7.pdf -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-7/README.md: -------------------------------------------------------------------------------- 1 | scribe-notes 2 | ============ 3 | 4 | Scribed notes for CMPSCI 630 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-8/MESI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-8/MESI.png -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-8/README.md: -------------------------------------------------------------------------------- 1 | CS630_lecture8_scribe 2 | ===================== 3 | 4 | Systems CS630 Lecture 8 Scribe notes 5 | -------------------------------------------------------------------------------- /2019/Scribe/previous/Lecture-8/seq_con.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2019/Scribe/previous/Lecture-8/seq_con.png -------------------------------------------------------------------------------- /2019/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /2019/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 14 | 17 | 20 | 21 | Systems (COMPSCI 630) 22 | 24 | 25 | 27 | 33 | 34 | 35 | 36 |
37 | 38 | 39 |
40 |
41 |

42 | 43 | Grad Systems (COMPSCI 630) 44 | 45 |

46 |
47 |
48 | 49 |
50 | 51 | 52 |
53 | 54 | 55 | 56 | 82 | 83 | 84 | 7 | 8 |
57 | 58 |
59 |
60 |

Course 61 | Description

62 |
63 |
64 |

In this course, we will discuss classic papers across the broad area of Systems, in roughly chronological order by area: programming languages, architecture, runtime systems, operating systems, and system design in general. This is a lecture-driven class (not a seminar); you will not be expected to present papers, but you are expected to have read every paper before class and participate in in-class discussions.

65 | 66 |

This course can be used to satisfy core requirements for Systems for the M.S. and PhD degrees.

67 |

Grades will be based on in-class participation, projects, and exams.
68 | You must submit your reviews via the review submission site before each class. Do not modify and re-submit your reviews: just submit once.

69 |

See these notes by John Ousterhout on writing reviews. Focus on the positive: these are classics for a reason!

70 |

Your reviews must address the following points:

71 |
    72 |
  • Summary: (at least two paragraphs) What is the problem that this work addressed? What are the big ideas / key insights / technical contributions?
  • 73 |
  • Significance / Contributions: How have the assumptions / context this work was based on changed? What is the practical significance of these results today?
  • 74 |
  • Discussion Points: Include at least two discussion points to bring up in class.
  • 75 |
76 |

You will be expected to scribe at least one lecture’s notes. Here is an example to use as a template (in LaTeX).

77 |

TA: Abhinav Jangda - W 4-5pm, CS207

78 |
79 |
80 | 81 |
85 |
86 |
87 |

Course 88 | Schedule

89 |
90 |
91 | All paper reviews should be submitted 92 | using the 93 | class HotCRP site. 94 |

95 | 96 | 97 | 2 | 3 |
98 | 99 | 100 | -------------------------------------------------------------------------------- /2019/schedule.csv: -------------------------------------------------------------------------------- 1 | sequence,type,date,datevalue,topic,paper1,url1,author1,status1,paper2,url2,author2,status2,paper3,url3,author3,status3 2 | 1,class,9/3/2019,43711,introduction,,,,,,,,,,,, 3 | 2,class,9/5/2019,43713,compilers,The Education of a Computer,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/p243-hopper.pdf,Hopper,read,The FORTRAN Automatic Coding System,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/FORTRAN-102663113.05.01.acc.pdf,Backus,review,The Night Watch,http://scholar.harvard.edu/files/mickens/files/thenightwatch.pdf,Mickens,read 4 | 3,class,9/10/2019,43718,programming languages,Recursive Functions of Symbolic Expressions and Their Computation by Machine,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/LISP.pdf,McCarthy,review,Algol-60 Translation,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/Algol60-Dijkstra-MR35.PDF,Dijsktra,review,Go To Statement Considered Harmful,https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf,Dijkstra,read 5 | ,noclass,9/12/2019,43720,,,,,,,,,,,,, 6 | 4,class,9/17/2019,43725,runtime systems,Garbage Collection in an Uncooperative Environment,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/GC-Uncooperative.pdf,Boehm and Weiser,review,Quantifying the Performance of Garbage Collection vs. Explicit Memory Management,,Hertz & Berger,nextyear,,,, 7 | ,noclass,9/19/2019,43727,,,,,,,,,,,,, 8 | 5,class,9/24/2019,43732,computer architecture,Architecture of the IBM System/360,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/Architecture-of-the-IBM-System-360.pdf,Amdahl et al.,review,Structural aspects of the System/360 Model 85: The cache,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/liptay68.pdf,Liptay,read,Bringing the Web Up to Speed with WebAssembly,"https://people.mpi-sws.org/~rossberg/papers/Haas,%20Rossberg,%20Schuff,%20Titzer,%20Gohman,%20Wagner,%20Zakai,%20Bastien,%20Holman%20-%20Bringing%20the%20Web%20up%20to%20Speed%20with%20WebAssembly.pdf",Rossberg et al.,review 9 | 6,class,9/26/2019,43734,multicore and parallelism,Cramming More Components onto Integrated Circuits,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/moorespaper.pdf,Moore,review,Validity of the Single Processor Approach to Achieving Large Scale Computing Capabilities,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Conc/Amdahl-04785615.pdf,Amdahl,review,Amdahl’s Law in the Multicore Era,http://www.cs.wisc.edu/multifacet/papers/ieeecomputer08_amdahl_multicore.pdf,Hill,review 10 | 7,class,10/1/2019,43739,hardware/software interface,The Case for the Reduced Instruction Set Computer,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/RISC-patterson.pdf,Patterson & Ditzel,review,Comments on the Case for RISC,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/RISC-clark.pdf,Clark & Strecker,review,Available Instruction-Level Parallelism for Superscalar and Superpipelined Machines,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/p272-jouppi.pdf,Jouppi,review 11 | 8,class,10/3/2019,43741,concurrency,Experience with Processes and Monitors in Mesa,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Conc/Mesa.pdf,Lampson & Redell ,review,,,,,,,, 12 | 9,class,10/8/2019,43746,OS design and internals,The Evolution of the UNIX Time-Sharing System,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/unix.pdf,Ritchie & Thompson,review,,,,,,,, 13 | 10,class,10/10/2019,43748,networked systems principles,Hints for Computer System Design,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/hints.pdf,Lampson,review,,,,,,,, 14 | 1,exam,10/16/2019,43754,Midterm,"ILC S140, 7:00pm-9:00pm",,,,,,,,,,, 15 | 11,class,10/17/2019,43755,security,A Note on the Confinement Problem,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/lampson73.pdf,Lampson,review,Spectre Attacks: Exploiting Speculative Execution,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/spectre.pdf,Many People,review,,,, 16 | ,noclass,10/22/2019,43760,,,,,,,,,,,,, 17 | ,noclass,10/24/2019,43762,,,,,,,,,,,,, 18 | 12,class,10/29/2019,43767,cryptography,A Method for Obtaining Digital Signatures and Public Key Cryptosystems,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/Rsapaper.pdf,RSA,review,,,,,,,, 19 | 13,class,10/31/2019,43769,fault-tolerance (hardware),A Case for Redundant Arrays of Inexpensive Disks (RAID),https://github.com/emeryberger/COMPSCI-630/raw/master/papers/RAID.pdf,"Patterson, Gibson & Katz",review,Why Do Computers Stop and What Can Be Done About It?,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/gray-85.pdf,Gray,review,,,, 20 | 14,class,11/5/2019,43774,fault-tolerance (software),"Enhancing Server Availability and Security Through 21 | Failure-Oblivious Computing",https://github.com/emeryberger/COMPSCI-630/raw/master/papers/rinard.pdf,Rinard et al.,review,DieHard: Probabilistic Memory Safety for Unsafe Languages,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/fp014-berger.pdf,Berger and Zorn,review,,,, 22 | 15,class,11/7/2019,43776,performance analysis,GProf: A Call-Graph Execution Profiler,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/gprof.pdf,Graham et al.,review,Coz: Finding Code that Counts with Causal Profiling,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/coz.pdf,Curtsinger & Berger,review,,,, 23 | 16,class,11/12/2019,43781,static & dynamic analysis,A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/coverity.pdf,Engler et al.,review,Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/valgrind.pdf,Nethercote & Seward,review,,,, 24 | 17,noclass,11/14/2019,43783,,,,,,,,,,,,, 25 | 18,class,11/19/2019,43788,testing,An empirical study of the reliability of UNIX utilities,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/fuzz.pdf,Miller et al.,review,DART: Directed Automated Random Testing,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/dart.pdf,Goderfroid et al.,review,,,, 26 | 19,class,11/21/2019,43790,distributed systems,Bitcoin: A Peer-to-Peer Electronic Cash System,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/bitcoin.pdf,Satoshi Nakamoto,review,,,,,,,, 27 | 20,class,12/3/2019,43802,distributed systems,In Search of an Understandable Consensus Algorithm,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/raft.pdf,Ongaro and Ousterhout,review,,,,,,,, 28 | 21,class,12/5/2019,43804,catch-up,,,,,,,,,,,, 29 | 22,class,12/10/2019,43809,catch-up,,,,,,,,,,,, 30 | 2,exam,12/13/2019,43812,Final,"ILC S140, 1:00pm-3:00pm",,,,,,,,,,, 31 | 1,project-due,10/28/2019,43766,"Smash, A Compacting Memory Allocator",,https://docs.google.com/document/d/1ryGR0CU6r39Uv6s062ftf15Jy8yndlrAQoia86rypDk/edit?usp=sharing,,,,,,,,,, 32 | 2,project-due,12/8/2019,43807,"SnakeProf, A Space and Time Profiler for Python",,https://docs.google.com/document/d/1-bqe5SRXHi19vII_plXKIzp3urI-SgJLGQiQT1Is8Bo/edit?usp=sharing,,,,,,,,,, 33 | ,,,,,,,,,,,,,,,, 34 | ,,,,,,,,,,,,,,,, 35 | ,,,,performance analysis,"Roofline: An Insightful Visual Performance Model 36 | for Floating-Point Programs and Multicore Architectures",,,,,,,,,,, -------------------------------------------------------------------------------- /2022/Scribe/CS630-01-31.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-01-31.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-02.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-02.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-07.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-07.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-09.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-09.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-14.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-14.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-16.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-16.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-22.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-22.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-02-28.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-02-28.pdf -------------------------------------------------------------------------------- /2022/Scribe/CS630-03-09.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2022/Scribe/CS630-03-09.pdf -------------------------------------------------------------------------------- /2023/Lecture-Notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Lecture-Notes.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-02-14/jit.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-14/jit.drawio.png -------------------------------------------------------------------------------- /2023/Scribe/2023-02-14/offsetlist.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-14/offsetlist.drawio.png -------------------------------------------------------------------------------- /2023/Scribe/2023-02-14/rc_leak.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-14/rc_leak.drawio.png -------------------------------------------------------------------------------- /2023/Scribe/2023-02-14/reachabilityanalysis.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-14/reachabilityanalysis.drawio.png -------------------------------------------------------------------------------- /2023/Scribe/2023-02-14/refcounting.drawio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-14/refcounting.drawio.png -------------------------------------------------------------------------------- /2023/Scribe/2023-02-14/scribe_notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-14/scribe_notes.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-02-21/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-02-21/main.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-03-02/03-02.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-02/03-02.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-03-02/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | \usepackage{amssymb} 14 | 15 | % 16 | % The following commands sets up the lecnum (lecture number) 17 | % counter and make various numbering schemes work relative 18 | % to the lecture number. 19 | % 20 | \newcounter{lecnum} 21 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 22 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 23 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 24 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 25 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 26 | \newcommand{\dnl}{\mbox{}\par} 27 | 28 | % 29 | % The following macro is used to generate the header. 30 | % 31 | \newcommand{\lecture}[4]{ 32 | \pagestyle{myheadings} 33 | \thispagestyle{plain} 34 | \newpage 35 | \setcounter{lecnum}{#1} 36 | \setcounter{page}{1} 37 | \noindent 38 | \begin{center} 39 | \framebox{ 40 | \vbox{\vspace{2mm} 41 | \hbox to 6.28in { {\bf CMPSCI~630~~~Systems 42 | \hfill Spring 2023} } 43 | \vspace{4mm} 44 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 45 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 46 | \vspace{2mm} 47 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 48 | \vspace{2mm}} 49 | } 50 | \end{center} 51 | \markboth{Lecture #1: #2}{Lecture #1: #2} 52 | \vspace*{4mm} 53 | } 54 | 55 | % 56 | % Convention for citations is authors' initials followed by the year. 57 | % For example, to cite a paper by Leighton and Maggs you would type 58 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 59 | % (To avoid bibliography problems, for now we redefine the \cite command.) 60 | % 61 | \renewcommand{\cite}[1]{[#1]} 62 | 63 | % \input{epsf} 64 | 65 | %Use this command for a figure; it puts a figure in wherever you want it. 66 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 67 | \newcommand{\fig}[4]{ 68 | \vspace{0.2 in} 69 | \setlength{\epsfxsize}{#2} 70 | \centerline{\epsfbox{#4}} 71 | \begin{center} 72 | Figure \thelecnum.#1:~#3 73 | \end{center} 74 | } 75 | 76 | % Use these for theorems, lemmas, proofs, etc. 77 | \newtheorem{theorem}{Theorem}[lecnum] 78 | \newtheorem{lemma}[theorem]{Lemma} 79 | \newtheorem{proposition}[theorem]{Proposition} 80 | \newtheorem{claim}[theorem]{Claim} 81 | \newtheorem{corollary}[theorem]{Corollary} 82 | \newtheorem{definition}[theorem]{Definition} 83 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 84 | 85 | % Some useful equation alignment commands, borrowed from TeX 86 | \makeatletter 87 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 88 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 89 | \crcr#1\crcr}}\,} 90 | \def\eqalignno#1{\displ@y \tabskip\@centering 91 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 92 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 93 | &\llap{$##$}\tabskip\z@skip\crcr 94 | #1\crcr}} 95 | \def\leqalignno#1{\displ@y \tabskip\@centering 96 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 97 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 98 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 99 | #1\crcr}} 100 | \makeatother 101 | 102 | \begin{document} 103 | \lecture{3}{March 2}{Emery Berger}{Bryan McCaffery} 104 | 105 | 106 | 107 | \section{Lecture Notes} 108 | Ahmadal's Law \\ 109 | Some tasks must be done sequentially, so there will not be a 1 to 1 ratio between number of processors and performance. There will be a serial part of the program that can only be done on a single processor. As such no matter how many processors you use, there will be a limit to how much faster you can make it. Parallelizing a program is bound by the sequential part. \\ 110 | 111 | Parallel Programming 112 | Programs Split into two parts 113 | \begin{itemize} 114 | \item Part Parallelizable - Can be perfectly parallelized 115 | \item Serial Part - Sequential, can only be done on one core 116 | \end{itemize} 117 | Totally Parallel = T / P \\ 118 | where T is time, and P is number of cores \\ 119 | Totally Serial = T \\ 120 | ${Maximum Speed Up = \frac{T}{\frac{Parallel Part}{P} + S}} $$ \\ 121 | 122 | Where T is total time, Parallel Part is time for Parallel Part and S is time for sequential part\\ 123 | 124 | Gustafsson's Law \\ 125 | As the number of processors grow, the amount of work we want to get done grows at least linearly. The idea of gustafsson's law is built upon, "If you build it they will come". In essence as processing power increases, user will develop larger problems to use the increase in processing power. \\ 126 | 127 | 128 | Chip Dependence analysis \\ 129 | The processor will attempt to parrallelize non dependent parts of the program. Using one of three processes ILP, SMT or SMP. SMP is no longer used in most machines, as it was designed upon utilizing multiple processors which no longer is common. 130 | \begin{itemize} 131 | \item ILP - Instruction Level Parallelism 132 | \item SMT - Simultaneous Multi Threading 133 | \item SMP - Simultaneous Multi Processors (Came before multi threading, when multiple processors used on same board) 134 | \end{itemize} 135 | 136 | Memory Wall \\ 137 | Processors are limited by retrieving data from memory which can take over a hundred cycles. As such, processors are attempt to retrieve memory before it is necessary or keep relevant data in the cache hierarchies. Two of the processes that are used are batching and speculation. \\ 138 | 139 | Batching is the process of retrieving N elements at a time instead of one. For example rather than retrieving one element, retrieve a whole array if you know that it is needed. If you know for certain data is needed retrieving it all at once is highly effective, if you have space in the cache.\\ 140 | 141 | Speculation attempts to retrieve data before it is necessary, by predicting/guessing what memory will be needed in the future. Predicting what will be needed is not an exact science, rather it use past patterns to predict what will be needed in the future. These patterns use very primitive machine learning, using past history as data. If speculation is accurate, it is highly effective, however over aggressive prefetching can lead to poor utilization rates. A poor utilization rate, can lead to wasted time and slowing down of the program. 142 | 143 | 144 | Memory Visibility \\ 145 | Memory should be observable, however the cache is not observable. The cache is meant to be private, meaning that it is hard to observe the effectiveness of different memory techniques. The most effective way to monitor how effective the cache is, is to monitor how often memory is acquired. Security researchers did find a way to decipher things in the cache by monitoring the latency of memory, however this exposed private information and as such systems added processes to slow down things to hide information. This slow down added 15 to 20 percent speed reductions, but prevented information from being exposed. 146 | 147 | 148 | 149 | 150 | \end{document} 151 | -------------------------------------------------------------------------------- /2023/Scribe/2023-03-07/full_adder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-07/full_adder.png -------------------------------------------------------------------------------- /2023/Scribe/2023-03-07/spring2023-lecture-7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-07/spring2023-lecture-7.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-03-09/scribe-notes-typed.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-09/scribe-notes-typed.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-03-09/scribe-notes-typed.synctex.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-09/scribe-notes-typed.synctex.gz -------------------------------------------------------------------------------- /2023/Scribe/2023-03-09/scribed-notes-handwritten.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-09/scribed-notes-handwritten.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-03-21/Scribe_notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-21/Scribe_notes.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-03-21/address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-21/address.png -------------------------------------------------------------------------------- /2023/Scribe/2023-03-21/conceptual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-21/conceptual.png -------------------------------------------------------------------------------- /2023/Scribe/2023-03-21/userkernel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-03-21/userkernel.png -------------------------------------------------------------------------------- /2023/Scribe/2023-04-13/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-04-13/main.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-04-13/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | \usepackage{pgfplots} 14 | 15 | % 16 | % The following commands sets up the lecnum (lecture number) 17 | % counter and make various numbering schemes work relative 18 | % to the lecture number. 19 | % 20 | \newcounter{lecnum} 21 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 22 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 23 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 24 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 25 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 26 | \newcommand{\dnl}{\mbox{}\par} 27 | 28 | % 29 | % The following macro is used to generate the header. 30 | % 31 | \newcommand{\lecture}[4]{ 32 | \pagestyle{myheadings} 33 | \thispagestyle{plain} 34 | \newpage 35 | \setcounter{lecnum}{#1} 36 | \setcounter{page}{1} 37 | \noindent 38 | \begin{center} 39 | \framebox{ 40 | \vbox{\vspace{2mm} 41 | \hbox to 6.28in { {\bf CMPSCI~630~~~Systems 42 | \hfill Spring 2023} } 43 | \vspace{4mm} 44 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 45 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 46 | \vspace{2mm} 47 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 48 | \vspace{2mm}} 49 | } 50 | \end{center} 51 | \markboth{Lecture #1: #2}{Lecture #1: #2} 52 | \vspace*{4mm} 53 | } 54 | 55 | % 56 | % Convention for citations is authors' initials followed by the year. 57 | % For example, to cite a paper by Leighton and Maggs you would type 58 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 59 | % (To avoid bibliography problems, for now we redefine the \cite command.) 60 | % 61 | \renewcommand{\cite}[1]{[#1]} 62 | 63 | % \input{epsf} 64 | 65 | %Use this command for a figure; it puts a figure in wherever you want it. 66 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 67 | \newcommand{\fig}[4]{ 68 | \vspace{0.2 in} 69 | \setlength{\epsfxsize}{#2} 70 | \centerline{\epsfbox{#4}} 71 | \begin{center} 72 | Figure \thelecnum.#1:~#3 73 | \end{center} 74 | } 75 | 76 | % Use these for theorems, lemmas, proofs, etc. 77 | \newtheorem{theorem}{Theorem}[lecnum] 78 | \newtheorem{lemma}[theorem]{Lemma} 79 | \newtheorem{proposition}[theorem]{Proposition} 80 | \newtheorem{claim}[theorem]{Claim} 81 | \newtheorem{corollary}[theorem]{Corollary} 82 | \newtheorem{definition}[theorem]{Definition} 83 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 84 | 85 | % Some useful equation alignment commands, borrowed from TeX 86 | \makeatletter 87 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 88 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 89 | \crcr#1\crcr}}\,} 90 | \def\eqalignno#1{\displ@y \tabskip\@centering 91 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 92 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 93 | &\llap{$##$}\tabskip\z@skip\crcr 94 | #1\crcr}} 95 | \def\leqalignno#1{\displ@y \tabskip\@centering 96 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 97 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 98 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 99 | #1\crcr}} 100 | \makeatother 101 | 102 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 103 | 104 | 105 | 106 | % Some general latex examples and examples making use of the 107 | % macros follow. 108 | 109 | \begin{document} 110 | 111 | %FILL IN THE RIGHT INFO. 112 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 113 | \lecture{13}{April 13}{Emery Berger}{Fadhil I. Kurnia} 114 | 115 | In this lecture, we are discussing three main topics: Jim Gray's paper on fault-tolerant systems, RAID, and Bitcoin. The common goal of those topics is building a fault-tolerant system. 116 | 117 | 118 | \section{Fault-Tolerant Systems} 119 | 120 | As the name suggest, a fault-tolerant system should handle failures. 121 | Generally failures can be random (e.g random failure model) or coordinated (e.g coordinated attack). 122 | The coordinated failures, in particular, is related to system security that we learn in the previous lectures. 123 | 124 | Each system has their own failure model, i.e failure that the system tries to mitigate. 125 | For example, the machine described by Jim Gray assumes fail-stop failures, RAID assumes disk failures, and the Bitcoin paper assumes integrity failures. 126 | That is, each system has different design based on the failure model it assumes. 127 | 128 | Next, we are discussing some failure models and impossibility regarding some failures. 129 | 130 | \textbf{Byzantine Failure. } This failure model assume arbitrary failures, such as message drop, long-time wait, duplicate messages, and even forged messages. 131 | However, the adversary still can not break the law of physics or computation; for example, an adversary still can not break an encryption or hash function. 132 | That being said, encryption could help mitigate some failures in this failure model. 133 | For instance, RSA algorithm -- which uses public \& private key and becomes the basis for all encryption that we use today in HTTPS -- can be used to prevent adversary from changing the messages. 134 | To function properly, a good encryption techniques should use \textit{one-way functions}, as illustrated below. 135 | 136 | \begin{verbatim} 137 | f(x) can be computed easily. 138 | f'(f(x)) is hard to be computed. 139 | \end{verbatim} 140 | 141 | \textbf{CAP: Consistency, Availability, and Partition-tolerant.} CAP defines a fundamental rule for system that operate under availability and partition-tolerant failures. The theorem says that among the three properties in CAP, we can only pick two. The consistency property ensures that every client gets the latest (the most up to date) values from the system, the availability property ensures that the system \textit{always} responds to client's requests, while the partition-tolerant property ensures that the system can handle any network partition. The theorem is obvious, for example if we have a partitioned system then the system can not synchronize the latest data, thus the system can either stop serving requests (unavailable) or keep serving requests with stale data (no consistency). 142 | 143 | \textbf{FLP Impossibility.} This theorem says that in an asynchronous system, it is impossible to design a deterministic consensus algorithm that can satisfy agreement, termination, and fault tolerance. 144 | Thus, the system can not even agree on a single bit (achieving consensus for a single bit) under certain failures. 145 | This impossibility stems from the fact that the system can not differentiate between failures and timeout (long delayed response). 146 | 147 | 148 | \textbf{The Byzantine General Problem. } This problem was proposed by Leslie Lamport using an analogy of parliament which tries to reach a consensus in an ancient city of Paxos. 149 | The protocol is so complex, making multiple papers trying to explain the protocol differently. 150 | In particular, Raft, simplifies the explanation by using leader election and logging abstraction. To keep the system available under $f$ failures machines, the protocol needs $3f+1$ nodes under byzantine model or $2f+1$ under fail-stop model. 151 | 152 | \textbf{Problem with Crypto Finance.} Crypto, arguably, solves no actual problem that the society should care about. It uses wasteful proof-of-work and append-only ledger abstraction. The proof-of-work (PoW) mechanism requires the system to solve a cryptographic puzzle first before it can do anything. People use CPU, GPU, and even ASIC to do the PoW, specifically to mine a new block in Bitcoin; this requires a lot of energy. Moreover, some researchers start to find issue with how the protocol works. For instance, in the selfish miner attack, a group of machines can hold the newly created block so that they have higher chance of getting the next blocks. 153 | 154 | 155 | \end{document} -------------------------------------------------------------------------------- /2023/Scribe/2023-05-02/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-05-02/main.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-05-02/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | \usepackage{amssymb} 14 | 15 | % 16 | % The following commands sets up the lecnum (lecture number) 17 | % counter and make various numbering schemes work relative 18 | % to the lecture number. 19 | % 20 | \newcounter{lecnum} 21 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 22 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 23 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 24 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 25 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 26 | \newcommand{\dnl}{\mbox{}\par} 27 | 28 | % 29 | % The following macro is used to generate the header. 30 | % 31 | \newcommand{\lecture}[4]{ 32 | \pagestyle{myheadings} 33 | \thispagestyle{plain} 34 | \newpage 35 | \setcounter{lecnum}{#1} 36 | \setcounter{page}{1} 37 | \noindent 38 | \begin{center} 39 | \framebox{ 40 | \vbox{\vspace{2mm} 41 | \hbox to 6.28in { {\bf CMPSCI~630~~~Systems 42 | \hfill Spring 2023} } 43 | \vspace{4mm} 44 | \hbox to 6.28in { {\Large \hfill Lecture #1 \hfill} } 45 | % \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 46 | \vspace{2mm} 47 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe: #4} } 48 | \vspace{2mm}} 49 | } 50 | \end{center} 51 | \markboth{Lecture #1: #2}{Lecture #1: #2} 52 | \vspace*{4mm} 53 | } 54 | 55 | % 56 | % Convention for citations is authors' initials followed by the year. 57 | % For example, to cite a paper by Leighton and Maggs you would type 58 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 59 | % (To avoid bibliography problems, for now we redefine the \cite command.) 60 | % 61 | \renewcommand{\cite}[1]{[#1]} 62 | 63 | % \input{epsf} 64 | 65 | %Use this command for a figure; it puts a figure in wherever you want it. 66 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 67 | \newcommand{\fig}[4]{ 68 | \vspace{0.2 in} 69 | \setlength{\epsfxsize}{#2} 70 | \centerline{\epsfbox{#4}} 71 | \begin{center} 72 | Figure \thelecnum.#1:~#3 73 | \end{center} 74 | } 75 | 76 | % Use these for theorems, lemmas, proofs, etc. 77 | \newtheorem{theorem}{Theorem}[lecnum] 78 | \newtheorem{lemma}[theorem]{Lemma} 79 | \newtheorem{proposition}[theorem]{Proposition} 80 | \newtheorem{claim}[theorem]{Claim} 81 | \newtheorem{corollary}[theorem]{Corollary} 82 | \newtheorem{definition}[theorem]{Definition} 83 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 84 | 85 | % Some useful equation alignment commands, borrowed from TeX 86 | \makeatletter 87 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 88 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 89 | \crcr#1\crcr}}\,} 90 | \def\eqalignno#1{\displ@y \tabskip\@centering 91 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 92 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 93 | &\llap{$##$}\tabskip\z@skip\crcr 94 | #1\crcr}} 95 | \def\leqalignno#1{\displ@y \tabskip\@centering 96 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 97 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 98 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 99 | #1\crcr}} 100 | \makeatother 101 | 102 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 103 | 104 | 105 | 106 | % Some general latex examples and examples making use of the 107 | % macros follow. 108 | 109 | \begin{document} 110 | 111 | %FILL IN THE RIGHT INFO. 112 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 113 | \lecture{15}{May 2}{Emery Berger}{Bryan McCaffery} 114 | 115 | \section{Raid} 116 | 117 | \begin{itemize} 118 | \item RAID stands for Redundant Array of Independent Disks. 119 | \item The idea is to store data on multiple disks to increase performance and redundancy. 120 | \item Normally disks are limited to by writing bandwidth, by increasing the number of disks and striping the data you can get around a n way speed up for n disks. 121 | \begin{itemize} 122 | \item Striping is the process of writing parts of the data to multiple different disks. 123 | \end{itemize} 124 | \item As the number of disks increase the probability of any one disk failing also exponentially increases. 125 | \begin{itemize} 126 | \item If the probability of any one disk failing is 1 percent, 127 | \begin{itemize} 128 | \item The probability 10 disks do not fail is approximately 90 percent 129 | \item The probability 100 disks do not fail is around 36.6 percent 130 | \item Probability any fails p(any) $= 1 - (1-(1-0.01)^{n} $ 131 | 132 | \end{itemize} 133 | \end{itemize} 134 | \item Max Reliability but minimum parallelism(slowest) is one disk 135 | \item Max Parallelism(fastest) but minimum reliability is N disks 136 | \item Levels of Raid 137 | \begin{itemize} 138 | \item RAID 1 - Mirroring of Data 139 | \item RAID 2 - Hamming Code 140 | \item RAID 3 - Byte level striping, plus level II functionality 141 | \item RAID 4 - Block level interleaving/striping 142 | \item RAID 5 - Block level interleaving/striping and check information 143 | \end{itemize} 144 | \item Recovery From Failures 145 | \begin{itemize} 146 | \item Raid has issues recovering from failures 147 | \item If a disk totally dies, all information has to be retrieved from replicated disks 148 | \item There is a high chance of failure as millions of blocks could have to be rewritten 149 | \item In many cases, back ups are kept in tape as it is easier to just recover from a backup than replicate data from disks 150 | \end{itemize} 151 | \end{itemize} 152 | 153 | \section{Robustness} 154 | \begin{itemize} 155 | \item SSD's 156 | \begin{itemize} 157 | \item SSD's have wear. The crystals can only reshape themselves so many times until they can no longer reshape themselves 158 | \item They keep track of this and do not put things in the bad blocks of memory 159 | \end{itemize} 160 | \item N Variant Systems 161 | \begin{itemize} 162 | \item Have three different machines running program that should produce the same output 163 | \item If two of the machines get same output, and third does not use the value that two machines got 164 | \item Used by NASA 165 | 166 | \item These machines if on the same spacecraft, can not be truly independent as they are subject to same environmental conditions 167 | \end{itemize} 168 | \item Failures are not normally Independent of Each Other 169 | \begin{itemize} 170 | \item Paper by Google discovered unusual ways things were not independent 171 | \item Things as simple as buying all hard drives at the same time from same factory can lead to data centers having multiple failures around the same number of cycles 172 | \item Contractors hired to right similar programs independent of each other commonly find similar solutions 173 | 174 | \end{itemize} 175 | \item Failure Oblivous Computing 176 | \begin{itemize} 177 | \item In the case of a bad address/seg fault put value in map with bad address pointing to value 178 | \item In the case of read from a bad address, retrieve value from map 179 | \end{itemize} 180 | \end{itemize} 181 | 182 | \end{document} 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /2023/Scribe/2023-05-04/critical_path.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-05-04/critical_path.jpeg -------------------------------------------------------------------------------- /2023/Scribe/2023-05-04/spring2023-lecture16.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-05-04/spring2023-lecture16.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-05-09/scribe-notes-typed.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-05-09/scribe-notes-typed.pdf -------------------------------------------------------------------------------- /2023/Scribe/2023-05-09/scribed-notes-handwritten.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/2023/Scribe/2023-05-09/scribed-notes-handwritten.pdf -------------------------------------------------------------------------------- /2023/Scribe/README.md: -------------------------------------------------------------------------------- 1 | Please create a pull request, and add the lecture notes you are 2 | scribing under a directory named with the date of the lecture, in the 3 | format YYYY-MM-DD (as in 2018-04-25). 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | COMPSCI-630 2 | =========== 3 | 4 | Public notes, etc. for COMPSCI 630, the UMass CS graduate systems course. 5 | 6 | All scribe notes are located in the directory Scribe/. 7 | -------------------------------------------------------------------------------- /assignment1_template/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 6 | # More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock 7 | Cargo.lock 8 | 9 | # These are backup files generated by rustfmt 10 | **/*.rs.bk 11 | -------------------------------------------------------------------------------- /assignment1_template/README.md: -------------------------------------------------------------------------------- 1 | # assignment1_template 2 | Template for Rust Memory Allocator 3 | -------------------------------------------------------------------------------- /assignment1_template/cheap/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cheap" 3 | version = "0.1.0" 4 | authors = [""] 5 | 6 | [dependencies] 7 | libc = { version = "0.2.36", default-features = false } 8 | nix = "0.10.0" 9 | core_printer = { path = "../core_printer" } -------------------------------------------------------------------------------- /assignment1_template/cheap/src/lib.rs: -------------------------------------------------------------------------------- 1 | #![feature(global_allocator, allocator_api, heap_api,libc,alloc)] 2 | #![feature(const_fn)] 3 | #![allow(dead_code)] 4 | #![feature(core_usizerinsics)] 5 | #![no_std] 6 | #![feature(asm)] 7 | #![feature(core_intrinsics)] 8 | #![feature(use_extern_macros)] 9 | 10 | 11 | //external crates you may need 12 | extern crate libc; 13 | extern crate alloc; 14 | use core::ptr; 15 | 16 | //import core printer for printing data 17 | extern crate core_printer; 18 | 19 | //use these printer functions 20 | use core_printer::{print_int,print_u8,print_string}; 21 | 22 | 23 | //import allocator API 24 | use alloc::heap::{Alloc, AllocErr, Layout}; 25 | 26 | //Struct to represent allocator 27 | pub struct Cheap; 28 | 29 | 30 | //this function takes various arguments and maps a page of memory, returns a ptr to said memory 31 | unsafe fn mmap(addr: *mut libc::c_void, len: usize, 32 | fd: libc::c_int, offset: usize)->*mut u8{ 33 | 34 | //implement Mmap here using nix crate function 35 | ptr::null_mut() 36 | } 37 | 38 | 39 | 40 | 41 | 42 | //implementing functions for evaluate struct 43 | pub unsafe trait Evaluate{ 44 | fn stats(&mut self); 45 | } 46 | 47 | //Functions to print stats for your memory allocator here. 48 | unsafe impl Evaluate for Cheap{ 49 | fn stats(&mut self){ 50 | unsafe{ 51 | //implement printing of memory stats here. 52 | print_string(b"Called Memory Stats!"); 53 | } 54 | } 55 | 56 | } 57 | 58 | 59 | 60 | 61 | 62 | //functions for allocator api, do not modify 63 | unsafe impl Alloc for Cheap { 64 | unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> { 65 | (&*self).alloc(layout) 66 | } 67 | 68 | unsafe fn dealloc(&mut self, ptr: *mut u8, layout: Layout) { 69 | (&*self).dealloc(ptr, layout) 70 | } 71 | } 72 | 73 | 74 | //Implement your memory allocator alloc and dealloc functions here 75 | unsafe impl<'a> Alloc for &'a Cheap { 76 | 77 | 78 | unsafe fn alloc(&mut self, layout: Layout) -> Result<*mut u8, AllocErr> { 79 | 80 | // Implement alloc here 81 | 82 | //returning a null ptr. 83 | Ok(ptr::null_mut() as *mut u8) 84 | 85 | 86 | 87 | } 88 | 89 | unsafe fn dealloc(&mut self, ptr: *mut u8, layout: Layout) { 90 | //implement free here 91 | 92 | } 93 | } -------------------------------------------------------------------------------- /assignment1_template/core_printer/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "core_printer" 3 | version = "0.1.0" 4 | authors = ["Lucas Chaufournier "] 5 | 6 | [dependencies] 7 | libc = "*" 8 | -------------------------------------------------------------------------------- /assignment1_template/core_printer/src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate core; 2 | use core::fmt::{self, Write}; 3 | 4 | 5 | extern crate libc; 6 | 7 | ///////WRITER ---------- 8 | struct Wrapper<'a> { 9 | buf: &'a mut [u8], 10 | offset: usize, 11 | } 12 | 13 | impl<'a> Wrapper<'a> { 14 | fn new(buf: &'a mut [u8]) -> Self { 15 | Wrapper { 16 | buf: buf, 17 | offset: 0, 18 | } 19 | } 20 | } 21 | 22 | impl<'a> fmt::Write for Wrapper<'a> { 23 | fn write_str(&mut self, s: &str) -> fmt::Result { 24 | let bytes = s.as_bytes(); 25 | 26 | // Skip over already-copied data 27 | let remainder = &mut self.buf[self.offset..]; 28 | // Make the two slices the same length 29 | let remainder = &mut remainder[..bytes.len()]; 30 | // Copy 31 | remainder.copy_from_slice(bytes); 32 | 33 | Ok(()) 34 | } 35 | } 36 | /////// ------------- End Writer ---- --------- 37 | 38 | 39 | 40 | 41 | pub unsafe fn print_string(data: &[u8]) 42 | { 43 | libc::write(1, data.as_ptr() as *const libc::c_void, data.len()); 44 | } 45 | 46 | pub unsafe fn print_int(data: usize){ 47 | 48 | let mut buf = [0 as u8; 20]; 49 | write!(Wrapper::new(&mut buf), "{}", data).expect("Can't write"); 50 | libc::write(1, buf.as_ptr() as *const libc::c_void, buf.len()); 51 | libc::write(1, "\n".as_bytes().as_ptr() as *const libc::c_void, "\n".as_bytes().len()); 52 | } 53 | 54 | pub unsafe fn print_u8(data: *mut u8){ 55 | 56 | let mut buf = [0 as u8; 20]; 57 | write!(Wrapper::new(&mut buf), "{:?}", data).expect("Can't write"); 58 | libc::write(1, buf.as_ptr() as *const libc::c_void, buf.len()); 59 | libc::write(1, "\n".as_bytes().as_ptr() as *const libc::c_void, "\n".as_bytes().len()); 60 | } 61 | -------------------------------------------------------------------------------- /assignment1_template/evaluate/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "evaluate" 3 | version = "0.1.0" 4 | authors = [""] 5 | 6 | [dependencies] 7 | cheap = { path = "../cheap" } -------------------------------------------------------------------------------- /assignment1_template/evaluate/src/main.rs: -------------------------------------------------------------------------------- 1 | //enable global allocator feature 2 | #![feature(global_allocator)] 3 | #![feature(core_intrinsics)] 4 | #![feature(alloc)] 5 | #![feature(allocator_api)] 6 | #![feature(alloc, heap_api)] 7 | #![feature(use_extern_macros)] 8 | #![allow(dead_code)] 9 | 10 | 11 | // import allocator 12 | extern crate cheap; 13 | 14 | // Use Cheap from allocator 15 | use cheap::Cheap; 16 | 17 | //use evaluate trait for printing stats 18 | use cheap::Evaluate; 19 | 20 | 21 | //applying allocator to global 22 | #[global_allocator] 23 | 24 | //Set the allocator 25 | static GLOBAL: Cheap = Cheap; 26 | 27 | 28 | fn main() { 29 | //make memory calls here to test your allocator 30 | 31 | 32 | //use this to print stats from your memory allocator. 33 | Cheap::stats(&mut Cheap); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /empirical/csrankings.css: -------------------------------------------------------------------------------- 1 | /*** uncss> filename: css/bootstrap.min.css ***/ 2 | /*! 3 | * Bootstrap v3.3.6 (http://getbootstrap.com) 4 | * Copyright 2011-2015 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b{font-weight:700}h1{margin:.67em 0;font-size:2em}small{font-size:80%}img{border:0}input,select{margin:0;font:inherit;color:inherit}select{text-transform:none}input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}p{orphans:3;widows:3}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,select{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}h1{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1{margin-top:20px;margin-bottom:10px}h1{font-size:36px}p{margin:0 0 10px}small{font-size:85%}.text-muted{color:#777}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}abbr[title]{cursor:help;border-bottom:1px dotted #777}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-12,.col-lg-6,.col-md-12,.col-md-6,.col-sm-12,.col-sm-6,.col-xs-3{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-3{float:left}.col-xs-3{width:25%}@media (min-width:768px){.col-sm-12,.col-sm-6{float:left}.col-sm-12{width:100%}.col-sm-6{width:50%}}@media (min-width:992px){.col-md-12,.col-md-6{float:left}.col-md-12{width:100%}.col-md-6{width:50%}}@media (min-width:1200px){.col-lg-12,.col-lg-6{float:left}.col-lg-12{width:100%}.col-lg-6{width:50%}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table .table{background-color:#fff}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}input[type=checkbox]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.container:after,.container:before,.row:after,.row:before{display:table;content:" "}.container:after,.row:after{clear:both}@-ms-viewport{width:device-width} 7 | /*# sourceMappingURL=bootstrap.min.css.map */ 8 | -------------------------------------------------------------------------------- /empirical/empirical-eval.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | eval.ts 4 | 5 | @author Emery Berger http://www.emeryberger.com 6 | 7 | */ 8 | /// 9 | ; 10 | ; 11 | var EmpiricalEval = /** @class */ (function () { 12 | function EmpiricalEval() { 13 | EmpiricalEval.theInstance = this; 14 | jQuery.getJSON("eval.json", function (json) { 15 | var s = ""; 16 | s += "

" + json.title + "

"; 17 | s += "

" + json.credits + "

"; 18 | s += "

" + json.date + "

"; 19 | var g = json.groups; 20 | s += ""; 21 | for (var _i = 0, g_1 = g; _i < g_1.length; _i++) { 22 | var i = g_1[_i]; 23 | s += ""; 24 | s += ""; 36 | var items = i.items; 37 | for (var _a = 0, items_1 = items; _a < items_1.length; _a++) { 38 | var item = items_1[_a]; 39 | if (item.include === "yes") { 40 | s += ""; 41 | s += ""; 47 | } 48 | } 49 | s += ""; 50 | } 51 | // s += ""; 52 | s += "
 " 35 | + i.name + "
 
"; 42 | s += ""; 43 | s += ""; 44 | s += "" + item.name + "
"; 45 | s += item.desc + "

"; 46 | s += "
 
"; 53 | jQuery("#checklist").html(s); 54 | }); 55 | } 56 | return EmpiricalEval; 57 | }()); 58 | var ev = new EmpiricalEval(); 59 | -------------------------------------------------------------------------------- /empirical/empirical-eval.ts: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | eval.ts 4 | 5 | @author Emery Berger http://www.emeryberger.com 6 | 7 | */ 8 | 9 | /// 10 | 11 | /* 12 | /// 13 | /// 14 | /// 15 | /// 16 | /// 17 | /// 18 | */ 19 | 20 | declare function escape(s:string): string; 21 | declare function unescape(s:string): string; 22 | 23 | interface ChecklistItem { 24 | readonly name : string; 25 | readonly include : string; 26 | readonly figure : string; 27 | readonly desc : string; 28 | readonly notes : string; 29 | }; 30 | 31 | interface ChecklistGroup { 32 | readonly name : string; 33 | readonly keyword : string; 34 | readonly color : string; 35 | readonly items : Array; 36 | }; 37 | 38 | class EmpiricalEval { 39 | 40 | constructor() { 41 | EmpiricalEval.theInstance = this; 42 | jQuery.getJSON("eval.json", function(json) { 43 | let s : string = ""; 44 | s += "

" + json.title + "

"; 45 | s += "

" + json.credits + "

"; 46 | s += "

" + json.date + "

"; 47 | const g = json.groups as Array; 48 | s += ""; 49 | for (let i of g) { 50 | s += ""; 51 | s += ""; 62 | const items = i.items as Array; 63 | for (let item of items) { 64 | if (item.include === "yes") { 65 | s += ""; 66 | s += ""; 72 | } 73 | } 74 | s += ""; 75 | } 76 | // s += ""; 77 | s += "
 " 61 | + i.name + "
 
"; 67 | s += ""; 68 | s += ""; 69 | s += "" + item.name + "
"; 70 | s += item.desc + "

"; 71 | s += "
 
"; 78 | jQuery("#checklist").html(s); 79 | }); 80 | } 81 | 82 | private static theInstance : EmpiricalEval; // singleton for this object 83 | 84 | /* for (let position = 0; position < this.areaMap.length; position++) { 85 | const { area, title } = this.areaMap[position]; 86 | CSRankings.areas[position] = area; 87 | this.areaNames[position] = title; 88 | this.fields[position] = area; 89 | this.areaDict[area] = this.areaNames[position]; 90 | this.areaPosition[area] = position; 91 | } 92 | for (let area of this.aiAreas) { 93 | this.aiFields.push (this.areaPosition[area]); 94 | } 95 | for (let area of this.systemsAreas) { 96 | this.systemsFields.push (this.areaPosition[area]); 97 | } 98 | for (let area of this.theoryAreas) { 99 | this.theoryFields.push (this.areaPosition[area]); 100 | } 101 | for (let area of this.interdisciplinaryAreas) { 102 | this.otherFields.push (this.areaPosition[area]); 103 | } 104 | for (let child in CSRankings.parentMap) { 105 | let parent = CSRankings.parentMap[child]; 106 | if (!(parent in CSRankings.childMap)) { 107 | CSRankings.childMap[parent] = [child]; 108 | } else { 109 | CSRankings.childMap[parent].push(child); 110 | } 111 | } 112 | this.displayProgress(1); 113 | this.loadAliases(this.aliases, ()=> { 114 | this.loadTuring(this.turing, ()=> { 115 | this.displayProgress(2); 116 | this.loadAuthorInfo(()=> { 117 | this.displayProgress(3); 118 | this.loadAuthors(()=> { 119 | this.setAllOn(); 120 | this.navigoRouter.on({ 121 | '/index' : this.navigation, 122 | '/fromyear/:fromyear/toyear/:toyear/index' : this.navigation 123 | }).resolve(); 124 | this.displayProgress(4); 125 | this.loadCountryInfo(this.countryInfo, ()=> { 126 | setTimeout(()=> { 127 | this.addListeners(); 128 | CSRankings.geoCheck(); 129 | }, 0); 130 | }); 131 | }); 132 | }); 133 | }); 134 | }); 135 | */ 136 | 137 | /* 138 | private addListeners() : void { 139 | 140 | ["toyear", "fromyear", "regions"].forEach((key)=> { 141 | const widget = document.getElementById(key); 142 | widget!.addEventListener("change", ()=> { this.rank(); }); 143 | }); 144 | // Add listeners for clicks on area widgets (left side of screen) 145 | // e.g., 'ai' 146 | for (let position = 0; position < CSRankings.areas.length; position++) { 147 | let area = CSRankings.areas[position]; 148 | if (!(area in CSRankings.parentMap)) { 149 | // Not a child. 150 | const widget = document.getElementById(area+'-widget'); 151 | widget!.addEventListener("click", ()=> { 152 | this.toggleConferences(area); 153 | }); 154 | } 155 | } 156 | // Initialize callbacks for area checkboxes. 157 | for (let i = 0; i < this.fields.length; i++) { 158 | const str = 'input[name='+this.fields[i]+']'; 159 | const field = this.fields[i]; 160 | jQuery(str).click(()=>{ 161 | let updateURL : boolean = true; 162 | if (field in CSRankings.parentMap) { 163 | // Child: 164 | // If any child is on, activate the parent. 165 | // If all are off, deactivate parent. 166 | updateURL = false; 167 | let parent = CSRankings.parentMap[field]; 168 | const strparent = 'input[name='+parent+']'; 169 | let anyChecked = 0; 170 | let allChecked = 1; 171 | CSRankings.childMap[parent].forEach((k)=> { 172 | let val = jQuery('input[name='+k+']').prop('checked'); 173 | anyChecked |= val; 174 | // allChcked means all top tier conferences 175 | // are on and all next tier conferences are 176 | // off. 177 | if (!(k in CSRankings.nextTier)) { 178 | // All need to be on. 179 | allChecked &= val; 180 | } else { 181 | // All need to be off. 182 | allChecked &= val ? 0 : 1; 183 | } 184 | }); 185 | // Activate parent if any checked. 186 | jQuery(strparent).prop('checked', anyChecked); 187 | // Mark the parent as disabled unless all are checked. 188 | if (!anyChecked || allChecked) { 189 | jQuery(strparent).prop('disabled', false); 190 | } 191 | if (anyChecked && !allChecked) { 192 | jQuery(strparent).prop('disabled', true); 193 | } 194 | } else { 195 | // Parent: activate or deactivate all children. 196 | let val = jQuery(str).prop('checked'); 197 | if (field in CSRankings.childMap) { 198 | for (let child of CSRankings.childMap[field]) { 199 | const strchild = 'input[name='+child+']'; 200 | if (!(child in CSRankings.nextTier)) { 201 | jQuery(strchild).prop('checked', val); 202 | } else { 203 | // Always deactivate next tier conferences. 204 | jQuery(strchild).prop('checked', false); 205 | } 206 | } 207 | } 208 | } 209 | this.rank(updateURL); 210 | }); 211 | } 212 | // Add group selectors. 213 | const listeners : {[key : string] : ()=>void } = 214 | { 'all_areas_on' : (()=> { this.activateAll(); }), 215 | 'all_areas_off' : (()=> { this.activateNone(); }), 216 | 'ai_areas_on' : (()=> { this.activateAI(); }), 217 | 'ai_areas_off' : (()=> { this.deactivateAI(); }), 218 | 'systems_areas_on' : (()=> { this.activateSystems(); }), 219 | 'systems_areas_off' : (()=> { this.deactivateSystems(); }), 220 | 'theory_areas_on' : (()=> { this.activateTheory(); }), 221 | 'theory_areas_off' : (()=> { this.deactivateTheory(); }), 222 | 'other_areas_on' : (()=> { this.activateOthers(); }), 223 | 'other_areas_off' : (()=> { this.deactivateOthers(); }) 224 | }; 225 | for (let item in listeners) { 226 | const widget = document.getElementById(item); 227 | widget!.addEventListener("click", ()=> { 228 | listeners[item](); 229 | }); 230 | } 231 | 232 | */ 233 | } 234 | 235 | var ev : EmpiricalEval = new EmpiricalEval(); 236 | -------------------------------------------------------------------------------- /empirical/figs/.gitignore: -------------------------------------------------------------------------------- 1 | *.svg 2 | *.bak -------------------------------------------------------------------------------- /empirical/figs/README.md: -------------------------------------------------------------------------------- 1 | ## Generating Checklist Figures 2 | 3 | The figures in this directory are generated from a Google Presentation, which can be found [here](https://docs.google.com/presentation/d/1sdSNQTRRvSTgCUO7S4_w2oeNVIbX_SqsJvX_A-XFJ5M/edit?usp=sharing). Converting those figures into pdfs is a little involved. Here's the process: 4 | 5 | #### Requirements 6 | 7 | - You will need [rsvg-convert](https://helpmanual.io/help/rsvg-convert/), which comes with the [librsvg2-bin](https://helpmanual.io/packages/apt/librsvg2-bin/) package. 8 | - You will need [sed](https://www.gnu.org/software/sed/manual/sed.html) 9 | - You will need some time and patience 10 | 11 | #### Procedure 12 | 13 | - Create an new, empty, Google Drawing. 14 | - From the [presentation](https://docs.google.com/presentation/d/1sdSNQTRRvSTgCUO7S4_w2oeNVIbX_SqsJvX_A-XFJ5M/edit?usp=sharing), select the figure you require, being sure to select only the frame of the figure and its contents, not the caption above or any other content, and copy the selection. 15 | - Paste the figure into your empty Google Drawing. 16 | - Select just the frame of the figure and change the line to transparent (don't delete the frame) 17 | - Export the figure as an svg using `File->Download as` 18 | - Fix the bounding box of the svg to 256x256, either by editing the file by hand or using something like `sed -i.bak 's/0.0 0.0 960.0 720.0/0.0 0.0 256.0 256.0/g' $n.svg` 19 | - Use rsvg-convert to convert the svg to pdf, using something like `rsvg-convert -f pdf $n.svg > $n.pdf` 20 | 21 | -------------------------------------------------------------------------------- /empirical/figs/applications_not_just_kernels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/applications_not_just_kernels.jpg -------------------------------------------------------------------------------- /empirical/figs/applications_not_just_kernels.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/applications_not_just_kernels.pdf -------------------------------------------------------------------------------- /empirical/figs/appropriate_baseline_for_comparison.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_baseline_for_comparison.jpg -------------------------------------------------------------------------------- /empirical/figs/appropriate_baseline_for_comparison.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_baseline_for_comparison.pdf -------------------------------------------------------------------------------- /empirical/figs/appropriate_level_of_precision.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_level_of_precision.jpg -------------------------------------------------------------------------------- /empirical/figs/appropriate_level_of_precision.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_level_of_precision.pdf -------------------------------------------------------------------------------- /empirical/figs/appropriate_suite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_suite.jpg -------------------------------------------------------------------------------- /empirical/figs/appropriate_suite.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_suite.pdf -------------------------------------------------------------------------------- /empirical/figs/appropriate_summary_statistics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_summary_statistics.jpg -------------------------------------------------------------------------------- /empirical/figs/appropriate_summary_statistics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriate_summary_statistics.pdf -------------------------------------------------------------------------------- /empirical/figs/appropriately-scoped_claims.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriately-scoped_claims.jpg -------------------------------------------------------------------------------- /empirical/figs/appropriately-scoped_claims.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/appropriately-scoped_claims.pdf -------------------------------------------------------------------------------- /empirical/figs/axes_include_zero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/axes_include_zero.jpg -------------------------------------------------------------------------------- /empirical/figs/axes_include_zero.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/axes_include_zero.pdf -------------------------------------------------------------------------------- /empirical/figs/comprehensive_summary_results.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/comprehensive_summary_results.jpg -------------------------------------------------------------------------------- /empirical/figs/comprehensive_summary_results.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/comprehensive_summary_results.pdf -------------------------------------------------------------------------------- /empirical/figs/confidence_intervals.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/confidence_intervals.jpg -------------------------------------------------------------------------------- /empirical/figs/confidence_intervals.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/confidence_intervals.pdf -------------------------------------------------------------------------------- /empirical/figs/convo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for fn in `cat pdfs`; do 3 | convert \ 4 | -verbose \ 5 | -density 150 \ 6 | -trim \ 7 | $fn.pdf \ 8 | -quality 100 \ 9 | -flatten \ 10 | -sharpen 0x1.0 \ 11 | $fn.jpg 12 | done 13 | -------------------------------------------------------------------------------- /empirical/figs/cross-validation_where_needed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/cross-validation_where_needed.jpg -------------------------------------------------------------------------------- /empirical/figs/cross-validation_where_needed.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/cross-validation_where_needed.pdf -------------------------------------------------------------------------------- /empirical/figs/direct_or_appropriate_proxy_metric.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/direct_or_appropriate_proxy_metric.jpg -------------------------------------------------------------------------------- /empirical/figs/direct_or_appropriate_proxy_metric.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/direct_or_appropriate_proxy_metric.pdf -------------------------------------------------------------------------------- /empirical/figs/explicit_claims.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/explicit_claims.jpg -------------------------------------------------------------------------------- /empirical/figs/explicit_claims.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/explicit_claims.pdf -------------------------------------------------------------------------------- /empirical/figs/explores_key_design_parameters.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/explores_key_design_parameters.jpg -------------------------------------------------------------------------------- /empirical/figs/explores_key_design_parameters.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/explores_key_design_parameters.pdf -------------------------------------------------------------------------------- /empirical/figs/fair_comparison.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/fair_comparison.jpg -------------------------------------------------------------------------------- /empirical/figs/fair_comparison.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/fair_comparison.pdf -------------------------------------------------------------------------------- /empirical/figs/measure_all_important_effects.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/measure_all_important_effects.jpg -------------------------------------------------------------------------------- /empirical/figs/measure_all_important_effects.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/measure_all_important_effects.pdf -------------------------------------------------------------------------------- /empirical/figs/non-standard_suites_justified.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/non-standard_suites_justified.jpg -------------------------------------------------------------------------------- /empirical/figs/non-standard_suites_justified.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/non-standard_suites_justified.pdf -------------------------------------------------------------------------------- /empirical/figs/open_loop_in_workload_generator.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/open_loop_in_workload_generator.jpg -------------------------------------------------------------------------------- /empirical/figs/open_loop_in_workload_generator.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/open_loop_in_workload_generator.pdf -------------------------------------------------------------------------------- /empirical/figs/pdfs: -------------------------------------------------------------------------------- 1 | applications_not_just_kernels 2 | appropriate_baseline_for_comparison 3 | appropriate_level_of_precision 4 | appropriate_suite 5 | appropriate_summary_statistics 6 | appropriately-scoped_claims 7 | axes_include_zero 8 | comprehensive_summary_results 9 | confidence_intervals 10 | cross-validation_where_needed 11 | direct_or_appropriate_proxy_metric 12 | explicit_claims 13 | explores_key_design_parameters 14 | fair_comparison 15 | measure_all_important_effects 16 | non-standard_suites_justified 17 | open_loop_in_workload_generator 18 | ratios_plotted_correctly 19 | reasonable_platform 20 | sufficient_information_to_repeat 21 | sufficient_number_of_trials 22 | threats_to_validity_of_claims 23 | -------------------------------------------------------------------------------- /empirical/figs/ratios_plotted_correctly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/ratios_plotted_correctly.jpg -------------------------------------------------------------------------------- /empirical/figs/ratios_plotted_correctly.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/ratios_plotted_correctly.pdf -------------------------------------------------------------------------------- /empirical/figs/reasonable_platform.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/reasonable_platform.jpg -------------------------------------------------------------------------------- /empirical/figs/reasonable_platform.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/reasonable_platform.pdf -------------------------------------------------------------------------------- /empirical/figs/sufficient_information_to_repeat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/sufficient_information_to_repeat.jpg -------------------------------------------------------------------------------- /empirical/figs/sufficient_information_to_repeat.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/sufficient_information_to_repeat.pdf -------------------------------------------------------------------------------- /empirical/figs/sufficient_number_of_trials.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/sufficient_number_of_trials.jpg -------------------------------------------------------------------------------- /empirical/figs/sufficient_number_of_trials.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/sufficient_number_of_trials.pdf -------------------------------------------------------------------------------- /empirical/figs/test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/test.jpg -------------------------------------------------------------------------------- /empirical/figs/test.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/test.pdf -------------------------------------------------------------------------------- /empirical/figs/threats_to_validity_of_claims.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/threats_to_validity_of_claims.jpg -------------------------------------------------------------------------------- /empirical/figs/threats_to_validity_of_claims.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/empirical/figs/threats_to_validity_of_claims.pdf -------------------------------------------------------------------------------- /empirical/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | 24 |
25 |
26 |
27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /example-reviews.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/example-reviews.pdf -------------------------------------------------------------------------------- /example-scribe-notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/example-scribe-notes.pdf -------------------------------------------------------------------------------- /example-scribe-notes.tex: -------------------------------------------------------------------------------- 1 | \documentclass[twoside]{article} 2 | \setlength{\oddsidemargin}{0.25 in} 3 | \setlength{\evensidemargin}{-0.25 in} 4 | \setlength{\topmargin}{-0.6 in} 5 | \setlength{\textwidth}{6.5 in} 6 | \setlength{\textheight}{8.5 in} 7 | \setlength{\headsep}{0.75 in} 8 | \setlength{\parindent}{0 in} 9 | \setlength{\parskip}{0.1 in} 10 | 11 | \usepackage{graphicx} 12 | \usepackage{url} 13 | 14 | % 15 | % The following commands sets up the lecnum (lecture number) 16 | % counter and make various numbering schemes work relative 17 | % to the lecture number. 18 | % 19 | \newcounter{lecnum} 20 | \renewcommand{\thepage}{\thelecnum-\arabic{page}} 21 | \renewcommand{\thesection}{\thelecnum.\arabic{section}} 22 | \renewcommand{\theequation}{\thelecnum.\arabic{equation}} 23 | \renewcommand{\thefigure}{\thelecnum.\arabic{figure}} 24 | \renewcommand{\thetable}{\thelecnum.\arabic{table}} 25 | \newcommand{\dnl}{\mbox{}\par} 26 | 27 | % 28 | % The following macro is used to generate the header. 29 | % 30 | \newcommand{\lecture}[4]{ 31 | \pagestyle{myheadings} 32 | \thispagestyle{plain} 33 | \newpage 34 | \setcounter{lecnum}{#1} 35 | \setcounter{page}{1} 36 | \noindent 37 | \begin{center} 38 | \framebox{ 39 | \vbox{\vspace{2mm} 40 | \hbox to 6.28in { {\bf COMPSCI~590S~~~Systems for Data Science 41 | \hfill Fall 2016} } 42 | \vspace{4mm} 43 | \hbox to 6.28in { {\Large \hfill Lecture #1: #2 \hfill} } 44 | \vspace{2mm} 45 | \hbox to 6.28in { {\it Lecturer: #3 \hfill Scribe(s): #4} } 46 | \vspace{2mm}} 47 | } 48 | \end{center} 49 | \markboth{Lecture {#1}: #2}{Lecture {#1}: #2} 50 | \vspace*{4mm} 51 | } 52 | 53 | % 54 | % Convention for citations is authors' initials followed by the year. 55 | % For example, to cite a paper by Leighton and Maggs you would type 56 | % \cite{LM89}, and to cite a paper by Strassen you would type \cite{S69}. 57 | % (To avoid bibliography problems, for now we redefine the \cite command.) 58 | % 59 | \renewcommand{\cite}[1]{[#1]} 60 | 61 | % \input{epsf} 62 | 63 | %Use this command for a figure; it puts a figure in wherever you want it. 64 | %usage: \fig{NUMBER}{FIGURE-SIZE}{CAPTION}{FILENAME} 65 | \newcommand{\fig}[4]{ 66 | \vspace{0.2 in} 67 | \setlength{\epsfxsize}{#2} 68 | \centerline{\epsfbox{#4}} 69 | \begin{center} 70 | Figure \thelecnum.#1:~#3 71 | \end{center} 72 | } 73 | 74 | % Use these for theorems, lemmas, proofs, etc. 75 | \newtheorem{theorem}{Theorem}[lecnum] 76 | \newtheorem{lemma}[theorem]{Lemma} 77 | \newtheorem{proposition}[theorem]{Proposition} 78 | \newtheorem{claim}[theorem]{Claim} 79 | \newtheorem{corollary}[theorem]{Corollary} 80 | \newtheorem{definition}[theorem]{Definition} 81 | \newenvironment{proof}{{\bf Proof:}}{\hfill\rule{2mm}{2mm}} 82 | 83 | % Some useful equation alignment commands, borrowed from TeX 84 | \makeatletter 85 | \def\eqalign#1{\,\vcenter{\openup\jot\m@th 86 | \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil 87 | \crcr#1\crcr}}\,} 88 | \def\eqalignno#1{\displ@y \tabskip\@centering 89 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 90 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 91 | &\llap{$##$}\tabskip\z@skip\crcr 92 | #1\crcr}} 93 | \def\leqalignno#1{\displ@y \tabskip\@centering 94 | \halign to\displaywidth{\hfil$\displaystyle{##}$\tabskip\z@skip 95 | &$\displaystyle{{}##}$\hfil\tabskip\@centering 96 | &\kern-\displaywidth\rlap{$##$}\tabskip\displaywidth\crcr 97 | #1\crcr}} 98 | \makeatother 99 | 100 | % **** IF YOU WANT TO DEFINE ADDITIONAL MACROS FOR YOURSELF, PUT THEM HERE: 101 | 102 | 103 | 104 | % Some general latex examples and examples making use of the 105 | % macros follow. 106 | 107 | \begin{document} 108 | 109 | %FILL IN THE RIGHT INFO. 110 | %\lecture{**LECTURE-NUMBER**}{**DATE**}{**LECTURER**}{**SCRIBE**} 111 | \lecture{1}{Memory Allocation}{Emery Berger}{Udit Saxena,Freddie Sanchez} 112 | 113 | \section{Continuation of discussion on Grappa } 114 | 115 | We discussed the concept of 'Work Stealing' and the difference from Work Stealing and Work Sharing. 116 | 117 | \begin{enumerate} 118 | 119 | \item Work Stealing : 120 | \begin{enumerate} 121 | \item Proactively go and "steal" work from an overloaded fellow worker. 122 | \item It is used for load imbalance correction. There can be different strategies - 123 | \begin{enumerate} 124 | \item Randomly choosing a victim and then decide how much work to take. 125 | \item "Half Stealing" - steal half the work of the chosen victim. 126 | \item "The power of two choices" - between two choices, we pick the victim as the one with more work. 127 | \end{enumerate} 128 | \item Work Stealing is more fine grained when looking at degree of load balancing control. 129 | \item Only the processes with "no work" are doing the load balancing work. 130 | \end{enumerate} 131 | 132 | \item Work Sharing : 133 | \begin{enumerate} 134 | \item Another load sharing paradigm where load is "shed" onto other workers. Different strategies include : 135 | \begin{enumerate} 136 | \item Random picking 137 | \item Round Robin 138 | \item Min-first 139 | \end{enumerate} 140 | \item Work Sharing is coarse grained when looking at degree of load balancing control. 141 | \item Everyone needs to be asked for their load. 142 | \item When workers are asking/answering to a query for their load, they aren't doing meaningful work - this situation gets worse when everyone is asking everyone for their work. \\ 143 | But to prevent the issue of stopping working when asking/being asked, we the concept of lock-free data structures. 144 | \end{enumerate} 145 | 146 | \end{enumerate} 147 | 148 | \section{Cooperative Scheduling} 149 | While on a single core, processes go to sleep and are context-switched out on an I/O call. \\ 150 | The process scheduling framework can be thought of as a scheduling - descheduling framework. \\ \\ 151 | There are two kinds of scheduling: 152 | \begin{enumerate} 153 | \item: Preemptive Scheduling: Every process gets a time quantum (~5ms). On the expiration of this time slice, the process is context-switched out, and another process is allowed to continue computation. \\ 154 | This kind of scheduling is good for preventing malicious processes from taking an arbitrarily long computation time. \\ 155 | The problem with this kind of scheduling is: 156 | \begin{enumerate} 157 | \item High scheduling overhead with lower granularity 158 | \item Lock Convoying 159 | \item Warm up or collateral damage or frequent cache flushing. 160 | \end{enumerate} 161 | \item: Cooperative Scheduling: In Cooperative scheduling, a process is allowed to continue processing until it explicitly yields the CPU for another process to continue. The onus is on the process to hand over the CPU - if it doesn't, it can keep processing for as long as it wants. This is used in environments which are considered safe and have no malicious processes. 162 | \end{enumerate} 163 | 164 | \section{Page based DSM} 165 | Page based DSM refers to the Distributed Shared Memory at the level of a page which is the smallest unit of memory being shared across the distributed system. There are two kinds: 166 | \begin{enumerate} 167 | \item True Sharing : When the same location on the same page needs to be shared across a distributed system. When the page is both logically and physically shared. 168 | \item False Sharing: When different locations on the same page need to be shared. Here the locations are logically unshared, but physically shared. 169 | \end{enumerate} 170 | False sharing is overcome by using diff merges/updates - it is a cheaper mode of communication. 171 | Grappa doesn't do this - it batches updates to amortize update overhead. 172 | 173 | \section{Delegation} 174 | This concept of completing work on the local machine rather than remotely doing the work. It is based on the principle that local memory access is way cheaper than remote memory access. 175 | \end{document} 176 | -------------------------------------------------------------------------------- /footer.html: -------------------------------------------------------------------------------- 1 |
4 |

5 |
6 |
9 |
10 | 17 |
18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 14 | 17 | 20 | 21 | Systems (COMPSCI 630) 22 | 24 | 25 | 27 | 33 | 34 | 35 | 36 |
37 | 38 | 39 |
40 |
41 |

42 | 43 | Grad Systems (COMPSCI 630) 44 | 45 |

46 |
47 |
48 | 49 |
50 | 51 | 52 |
53 | 54 | 55 | 56 | 83 | 84 | 85 |
57 | 58 |
59 |
60 |

Course 61 | Description

62 |
63 |
64 |

In this course, we will discuss classic papers across the broad area of Systems, in roughly chronological order by area: programming languages, architecture, runtime systems, operating systems, and system design in general. This is a lecture-driven class (not a seminar); you will not be expected to present papers, but you are expected to have read every paper before class and participate in in-class discussions.

65 | 66 |

This course can be used to satisfy core requirements for Systems for the M.S. and PhD degrees.

67 |

Grades will be based on in-class participation and paper reviews (15%), projects (50%), and exams (35%). These percentages are anticipated but subject to change. Exams will cover course material covered in lectures and assigned readings. There is no textbook for this course.
68 | You must submit your reviews via the review submission site before each class. Do not modify and re-submit your reviews: just submit once.

69 |

See these notes by John Ousterhout on writing reviews. Focus on the positive: these are classics for a reason!

70 |

Here are two examples of reviews: the first is a real conference review for a paper you will be reading, and the second is a real student review for this class that you should use a model: Example reviews 71 |

Your reviews must address the following points:

72 |
    73 |
  • Summary: (at least two paragraphs) What is the problem that this work addressed? What are the big ideas / key insights / technical contributions?
  • 74 |
  • Significance / Contributions: How have the assumptions / context this work was based on changed? What is the practical significance of these results today?
  • 75 |
  • Discussion Points: Include at least two discussion points to bring up in class.
  • 76 |
77 |

You will be expected to scribe at least one lecture’s notes. Here is an example to use as a template (in LaTeX).

78 |

TA: Juan Altmayer Pizzorno: Thursday 1:30-2:30pm, CS 207

79 |
80 |
81 | 82 |
86 |
87 |
88 |

Course 89 | Schedule

90 |
91 |
92 | All paper reviews should be submitted 93 | using the 94 | class HotCRP site. 95 |

96 | 97 | 98 |
99 | 100 | 101 | -------------------------------------------------------------------------------- /make-schedule.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import csv 3 | from collections import OrderedDict 4 | 5 | # Read in a date in MM/DD/YYYY format and return a string of the form "Dayname, Month dd" 6 | # process_date("03/13/2020") --> "Friday, March 13" 7 | 8 | 9 | def process_date(date_str): 10 | date_obj = datetime.datetime.strptime(date_str, '%m/%d/%Y') 11 | return date_obj.strftime("%A, %B %d") 12 | 13 | 14 | with open('header.html') as header_file: 15 | header = header_file.read() 16 | with open('footer.html') as footer_file: 17 | footer = footer_file.read() 18 | 19 | print(header) 20 | 21 | prolog = '
' 22 | 23 | prolog_header = '

' 24 | epilog_header = '

' 25 | prolog_topic = '
' 26 | epilog_topic = '
' 27 | prolog_body = '
' 28 | epilog_body = '
' 29 | 30 | epilog = '
' 31 | 32 | rows = {} 33 | 34 | with open('schedule.csv') as csvfile: 35 | reader = csv.DictReader(csvfile) 36 | for row in reader: 37 | d = row['datevalue'] 38 | if d != "": 39 | rows[int(d)] = row 40 | 41 | rows = OrderedDict(sorted(rows.items())) 42 | 43 | for r in rows: 44 | # print(r) 45 | # continue 46 | row = rows[r] 47 | print(prolog) 48 | 49 | if row['type'] == 'exam': 50 | print(prolog_header) 51 | print('') 52 | print(process_date(row['date'])) 53 | print(f" — {row['topic'].capitalize()}") 54 | print('') 55 | print(epilog_header) 56 | print(prolog_body) 57 | print(prolog_topic) 58 | print(row['paper1']) 59 | print(epilog_topic) 60 | print(epilog_body) 61 | continue 62 | 63 | if row['type'] == 'project-due': 64 | print(prolog_header) 65 | print('') 66 | print(process_date(row['date'])) 67 | print(f" — {row['topic']}") 68 | print('') 69 | print(epilog_header) 70 | continue 71 | 72 | if row['type'] == 'noclass': 73 | print(prolog_header) 74 | print('') 75 | print(process_date(row['date'])) 76 | print(" — no class") 77 | print('') 78 | print(epilog_header) 79 | continue 80 | 81 | if row['type'] == 'class': 82 | print(prolog_header) 83 | date = row['date'] 84 | if date == "": 85 | print("TBD") 86 | else: 87 | print(process_date(row['date'])) 88 | print(epilog_header) 89 | print(prolog_body) 90 | print(prolog_topic) 91 | topic = f"{row['topic'].title()}" 92 | print(topic) 93 | print(epilog_topic) 94 | for key in ['1', '2', '3']: 95 | if row['paper'+key] != "": 96 | title = row['paper'+key] 97 | url = row['url'+key] 98 | author = row['author'+key] 99 | if row['status'+key] == "review": 100 | url_str = f'{title}, {author} [review]
' 101 | elif row['status'+key] == "read": 102 | url_str = f'{title}, {author} [read]
' 103 | elif row['status'+key] == "skim": 104 | url_str = f'{title}, {author} [skim]
' 105 | # Ignore nextyear 106 | elif row['status'+key] == 'nextyear': 107 | continue 108 | else: 109 | # Default, review 110 | url_str = f'{title}, {author} [review]
' 111 | print(url_str) 112 | print(epilog_body) 113 | print(epilog) 114 | 115 | print(footer) 116 | -------------------------------------------------------------------------------- /old/project2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/old/project2.pdf -------------------------------------------------------------------------------- /old/project2.tex: -------------------------------------------------------------------------------- 1 | \title{Project 2: WeChat} 2 | \author{Emery Berger, COMPSCI 630} 3 | \date{Due May 2, 2018} 4 | 5 | \documentclass[12pt]{article} 6 | \usepackage{hyperref} 7 | \usepackage{algorithm} 8 | \usepackage{algpseudocode} 9 | \begin{document} 10 | 11 | \maketitle 12 | 13 | 14 | \section{Overview} 15 | For this project, you will be implementing \emph{WeChat}, a totally distributed group chat application written in \href{https://golang.org/}{\underline{Golang} (a.k.a., Go)}. This assignment will give you insight into the nature of distributed systems and the problems that arise when you have multiple distributed actors involved. 16 | 17 | 18 | \section{Implementation} 19 | Your WeChat implementation will allow users with an invite code (provided in advance) to communicate over the network without the need for a central chat server. Just as in ordinary chat, each participant should be able to send and receive small text messages. Unlike ordinary chat, your application should be able to handle a large number of simultaneous chat participants (i.e., it must be multithreaded). 20 | 21 | While WeChat should be totally distributed for handling chat functionality, you will still need to provide a central discovery server at a known IP address. Each client should register their location with the service at start up thus allowing other nodes to easily find them. 22 | 23 | In addition to supporting multiple clients, your app should have the following properties: 24 | 25 | \paragraph{Consistency} 26 | Each WeChat user should see the exact same chain of messages, independent of issues like network delay. In particular, you should implement causal consistency: a user should see messages in strict causal order (implemented via vector (Lamport) clocks). 27 | 28 | \paragraph{Fault-tolerance} 29 | WeChat users may periodically get disconnected from the system. Any messages sent to them should eventually appear after they reconnect (i.e. no messages should be lost). 30 | 31 | \paragraph{Encryption} 32 | All data messages should be encrypted so that no one who does not know the conference code will be able to read chat messages for the appropriate conference. 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | \section{Evaluation} 41 | You will be evaluated on the following basis: 42 | \begin{enumerate} 43 | \item Correctness of Implementation 44 | \item Directory Service 45 | \item Consistency 46 | \item Fault-Tolerance 47 | \item Encryption 48 | \item Coding Style 49 | \end{enumerate} 50 | 51 | \section{Resources} 52 | 53 | We have provided a centralized solution in the following repo: \href{https://github.com/jvilk/WeChat}{\underline{Centralized WeChat}}. 54 | 55 | Inside this repo is the following: 56 | \begin{enumerate} 57 | \item A description of the API that you need to provide. 58 | \item A python reference client that you can use to test your system. 59 | \item A python reference server that provides basic functionality. 60 | \end{enumerate} 61 | 62 | You need to implement a decentralized version of this client/server architecture, following the guidelines of the API description \href{https://github.com/jvilk/WeChat/blob/master/reference_client/api.txt}{\underline{here}}. 63 | 64 | \paragraph{Note:} Since your solution is fully distributed, each node needs to handle things that would be managed by this central server (i.e., chat history, channel management, etc...) 65 | 66 | \bf{Remember you MUST implement your code in golang!} 67 | 68 | \end{document} 69 | -------------------------------------------------------------------------------- /papers/Algol60-Dijkstra-MR35.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/Algol60-Dijkstra-MR35.pdf -------------------------------------------------------------------------------- /papers/Architecture-of-the-IBM-System-360.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/Architecture-of-the-IBM-System-360.pdf -------------------------------------------------------------------------------- /papers/FORTRAN-102663113.05.01.acc.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/FORTRAN-102663113.05.01.acc.pdf -------------------------------------------------------------------------------- /papers/GC-Uncooperative.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/GC-Uncooperative.pdf -------------------------------------------------------------------------------- /papers/LISP.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/LISP.pdf -------------------------------------------------------------------------------- /papers/RAID.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/RAID.pdf -------------------------------------------------------------------------------- /papers/Rsapaper.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/Rsapaper.pdf -------------------------------------------------------------------------------- /papers/WebAssembly.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/WebAssembly.pdf -------------------------------------------------------------------------------- /papers/atc14-paper-ongaro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/atc14-paper-ongaro.pdf -------------------------------------------------------------------------------- /papers/bitcoin.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/bitcoin.pdf -------------------------------------------------------------------------------- /papers/coverity.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/coverity.pdf -------------------------------------------------------------------------------- /papers/coz.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/coz.pdf -------------------------------------------------------------------------------- /papers/dart.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/dart.pdf -------------------------------------------------------------------------------- /papers/fp014-berger.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/fp014-berger.pdf -------------------------------------------------------------------------------- /papers/fuzz.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/fuzz.pdf -------------------------------------------------------------------------------- /papers/gprof.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/gprof.pdf -------------------------------------------------------------------------------- /papers/gray-85.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/gray-85.pdf -------------------------------------------------------------------------------- /papers/hints.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/hints.pdf -------------------------------------------------------------------------------- /papers/lampson73.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/lampson73.pdf -------------------------------------------------------------------------------- /papers/p243-hopper.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/p243-hopper.pdf -------------------------------------------------------------------------------- /papers/r4letv1crx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/r4letv1crx.pdf -------------------------------------------------------------------------------- /papers/raft.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/raft.pdf -------------------------------------------------------------------------------- /papers/rinard.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/rinard.pdf -------------------------------------------------------------------------------- /papers/spectre.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/spectre.pdf -------------------------------------------------------------------------------- /papers/unix.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/unix.pdf -------------------------------------------------------------------------------- /papers/valgrind.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/papers/valgrind.pdf -------------------------------------------------------------------------------- /presentations/karthik-pattabiraman-2018-04.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeryberger/COMPSCI-630/6b3b4308f9c59fb83b0bcdcd706ac57ae4a5a58a/presentations/karthik-pattabiraman-2018-04.pdf -------------------------------------------------------------------------------- /schedule.csv: -------------------------------------------------------------------------------- 1 | sequence,type,date,datevalue,topic,paper1,url1,author1,status1,paper2,url2,author2,status2,paper3,url3,author3,status3 2 | 1,class,2/7/2023,19395,introduction,,,,,,,,,,,, 3 | 2,class,2/9/2023,19397,compilers,The Education of a Computer,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/p243-hopper.pdf,Hopper,read,The FORTRAN Automatic Coding System,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/FORTRAN-102663113.05.01.acc.pdf,Backus,review,The Night Watch,http://scholar.harvard.edu/files/mickens/files/thenightwatch.pdf,Mickens,read 4 | 3,class,2/14/2023,19402,programming languages,Recursive Functions of Symbolic Expressions and Their Computation by Machine,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/LISP.pdf,McCarthy,review,Algol-60 Translation,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/Algol60-Dijkstra-MR35.PDF,Dijsktra,review,Go To Statement Considered Harmful,https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf,Dijkstra,read 5 | 4,class,2/16/2023,19404,runtime systems,Garbage Collection in an Uncooperative Environment,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/GC-Uncooperative.pdf,Boehm and Weiser,review,Quantifying the Performance of Garbage Collection vs. Explicit Memory Management,,Hertz & Berger,nextyear,,,, 6 | 5,class,2/21/2023,19409,computer architecture,Architecture of the IBM System/360,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/Architecture-of-the-IBM-System-360.pdf,Amdahl et al.,review,Structural aspects of the System/360 Model 85: The cache,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/liptay68.pdf,Liptay,read,Bringing the Web Up to Speed with WebAssembly,"https://people.mpi-sws.org/~rossberg/papers/Haas,%20Rossberg,%20Schuff,%20Titzer,%20Gohman,%20Wagner,%20Zakai,%20Bastien,%20Holman%20-%20Bringing%20the%20Web%20up%20to%20Speed%20with%20WebAssembly.pdf",Rossberg et al.,review 7 | 6,noclass,2/23/2023,19411,(snow day),,,,,,,,,,,, 8 | 7,noclass,2/28/2022,19051,(snow day),,,,,,,,,,,, 9 | 8,class,3/2/2023,19418,multicore and parallelism,Cramming More Components onto Integrated Circuits,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/moorespaper.pdf,Moore,review,Validity of the Single Processor Approach to Achieving Large Scale Computing Capabilities,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Conc/Amdahl-04785615.pdf,Amdahl,review,Amdahl’s Law in the Multicore Era,http://www.cs.wisc.edu/multifacet/papers/ieeecomputer08_amdahl_multicore.pdf,Hill,review 10 | 9,class,3/7/2023,19423,hardware/software interface,The Case for the Reduced Instruction Set Computer,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/RISC-patterson.pdf,Patterson & Ditzel,review,Comments on the Case for RISC,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/RISC-clark.pdf,Clark & Strecker,review,Available Instruction-Level Parallelism for Superscalar and Superpipelined Machines,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Arch/p272-jouppi.pdf,Jouppi,review 11 | 10,class,3/9/2023,19425,concurrency,Experience with Processes and Monitors in Mesa,http://www.cs.umass.edu/~emery/classes/cmpsci691st/readings/Conc/Mesa.pdf,Lampson & Redell ,review,,,,,,,, 12 | 11,noclass,3/14/2023,19430,Spring Break,,,,,,,,,,,, 13 | 12,noclass,3/16/2023,19432,Spring Break,,,,,,,,,,,, 14 | 13,class,3/21/2023,19437,OS design and internals,The Evolution of the UNIX Time-Sharing System,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/unix.pdf,Ritchie & Thompson,review,,,,,,,, 15 | 1,exam,3/23/2023,19439,exam 1,,,,,,,,,,,, 16 | 14,noclass,3/28/2023,19444,,,,,,,,,,,,, 17 | 15,noclass,3/30/2023,19446,,,,,,,,,,,,, 18 | 16,class,4/4/2023,19451,networked systems principles,Hints for Computer System Design,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/hints.pdf,Lampson,review,,,,,,,, 19 | 17,class,4/6/2023,19453,security,A Note on the Confinement Problem,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/lampson73.pdf,Lampson,review,Spectre Attacks: Exploiting Speculative Execution,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/spectre.pdf,Many People,review,,,, 20 | 18,class,4/11/2023,19458,distributed systems,Bitcoin: A Peer-to-Peer Electronic Cash System,https://bitcoin.org/bitcoin.pdf,Bitcoin,,,,,,,,, 21 | 19,class,4/13/2023,19460,fault-tolerance (hardware),A Case for Redundant Arrays of Inexpensive Disks (RAID),https://github.com/emeryberger/COMPSCI-630/raw/master/papers/RAID.pdf,"Patterson, Gibson & Katz",review,Why Do Computers Stop and What Can Be Done About It?,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/gray-85.pdf,Gray,review,,,, 22 | 20,noclass,4/18/2023,19465,,,,,,,,,,,,, 23 | 21,class,4/20/2023,19467,performance analysis,GProf: A Call-Graph Execution Profiler,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/gprof.pdf,Graham et al.,read,Coz: Finding Code that Counts with Causal Profiling,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/coz.pdf,Curtsinger & Berger,review,,,, 24 | 22,noclass,4/25/2023,19472,,,,,,,,,,,,, 25 | 23,noclass,4/27/2023,19474,,,,,,,,,,,,, 26 | 24,class,5/2/2023,19479,static analysis,A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/coverity.pdf,Engler et al.,review,,,,,,,, 27 | 25,class,5/4/2023,19481,dynamic analysis,Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/valgrind.pdf,Nethercote & Seward,review,,,,,,,, 28 | 26,class,5/9/2023,19486,testing,An empirical study of the reliability of UNIX utilities,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/fuzz.pdf,Miller et al.,read,DART: Directed Automated Random Testing,https://github.com/emeryberger/COMPSCI-630/raw/master/papers/dart.pdf,Goderfroid et al.,review,,,, 29 | 2,exam,5/11/2023,19488,Exam 2,,,,,,,,,,,, 30 | 1,project-due,4/7/2023,19454,Project 1: Ouroboros,,,,,,,,,,,, 31 | 2,project-due,5/17/2023,19496,Project 2: Cyprompt,,,,,,,,,,,, --------------------------------------------------------------------------------