From c2cb4ab8d9c91e160650eebde1b5e87b6bb11c3a Mon Sep 17 00:00:00 2001 From: Medium Fries Date: Wed, 10 Oct 2018 19:42:35 -0700 Subject: [PATCH] good lord theres so much missing in this commit --- cst311/lec/lec11.md | 2 +- cst311/lec/lec12.md | 53 ++++++++++++++++++ cst337/lec/lec11.md | 82 ++++++++++++++++++++++++++++ cst337/readme.md | 2 +- cst363/lab/in-memory-search-lab.pdf | Bin 0 -> 43594 bytes cst363/lab/on-disk-search-lab.pdf | Bin 0 -> 34021 bytes cst363/lec/lec11.md | 26 +++++++++ cst363/lec/lec12.md | 43 +++++++++++++++ readme.md | 2 +- 9 files changed, 207 insertions(+), 3 deletions(-) create mode 100644 cst311/lec/lec12.md create mode 100644 cst337/lec/lec11.md create mode 100644 cst363/lab/in-memory-search-lab.pdf create mode 100644 cst363/lab/on-disk-search-lab.pdf create mode 100644 cst363/lec/lec11.md create mode 100644 cst363/lec/lec12.md diff --git a/cst311/lec/lec11.md b/cst311/lec/lec11.md index 6e4dc9e..713d034 100644 --- a/cst311/lec/lec11.md +++ b/cst311/lec/lec11.md @@ -25,5 +25,5 @@ Say we have two competing sessions: Certain types of applications won't be be rate limited by TCP fairness. Streaming video for instance won't since we just want to _throw_ data across as much as possible. -That being said we do have to tolerate loss since UDP doesn't account for data loss on the line in any significant manner. +This also means we have to account for loss and tolerate it when it does happen because UDP doesn't account for loss anyway. diff --git a/cst311/lec/lec12.md b/cst311/lec/lec12.md new file mode 100644 index 0000000..63fe1e3 --- /dev/null +++ b/cst311/lec/lec12.md @@ -0,0 +1,53 @@ +# lec12 + +Networkk Layer + +Here instead of datagrams, or segments, we are referring to chunks of data as _datagrams_. +We concern ourselves with _host to host communication_. +There are two major function to worry about: + +* forwarding + * getting from an input to an output +* routing + * concerned with + +## Virtual Circuits + +_THIS SECTION IS BAREBONES_ + +Datagram Service: network provides network-layer _connectionless_ service. + +Virtual Circuit: network provides network-layer _connection_ service. + +### Setup a connection + +Virtual Connections: before two end hosts start sending data to each other both must determine over which route they will communicate with. +This means that we have to get routers between hosts involved with this initial setup. + +When the routers get involved they put an incoming vc number on an incoming bus, and an outgoing vc number on an outgoing bus. +These entries are stored in the routers _forwarding table_. + +## VC Implementation + +1. Path from source to destination +2. VC numbers one number for each link +3. entries in forwarding table + +### Forwarding Table + +__pls clarify section__ + +Each router has a forwarding table which allows for entries regarding data about it's incoming/outgoing buses. + +Router has has incoming/outgoing interface on these lines we see that datagram has a vc# when its incoming to the router. +Upon exit we know that each vc# from the incoming interface corresponds to a vc# on some outgoing interface. + +## IP Addresses & Datagram forwarding tables + +> What is an ip address? + +Think of an adress of a variable in memory. +Instead of a variable we have an end host. +Instead of an address memory we have an address in some network. + +Usually we'll write a destination address in the header of a datagram so that we know where the data is meant to go. diff --git a/cst337/lec/lec11.md b/cst337/lec/lec11.md new file mode 100644 index 0000000..ce75ec5 --- /dev/null +++ b/cst337/lec/lec11.md @@ -0,0 +1,82 @@ +# lec11 + +_diagrams references implied for now_ + +Sequential Logic: at this point we effectively are dealing with state(_state machines_). Simply put we have _memory_ now. + +## State Tables + +In Q~s~ is our _Current state_ while Q~s+1~ is the next state + +![](../img/lec11fig1.png) + +| A | Q~s~ | Q~s+1~ | +|---|---|---| +| 0 | 0 | 0| +| 0 | 1 | 0| +| 1 | 0 | 0| +| 1 | 1 | 1| + + +We can try the same thing with an `or` gate: + +![](../img/lec11fig2.png) + +Keeping in mind that our effective input here is only `A`. + +## Latches + +Namely we are going to look at set-reset latches. + +They should be able to do two things: + +* store a state +* change state upon appropriately changed signals. + +![](../img/lec11fig3.png) + +Note that the above state machine the two rows show up as illogical; because both don't make sense in that context. + +The actualy gate implementation of the above would look like the above. + +![](../img/lec11fig4.png) + +The same can also be done with `nor` gates making the whole operation much more efficient on transistor usage. + +![](../img/lec11fig5.png) + + +## Clocking & Frequency + +The period of the square wave in this case can be used to find the frequency. +We simple note that `1/T = F`. +This frequency is measured in cycles/second or _hertz_. + +![](../img/lec11squareWave.png) + +### Setup time & Hold time + +Setup time would be some aount of time after the previous point where we wait for the combinational logic to perpetuate its results into memory. +A short period of time in the valley would be setup time + +Hold time is the time that we wait before we start feeding input into our combinational logic(unit). +Say we wanted to start our combinational logic at the beginning of one of our plateaus. + +## D Latches + +_D stands for data_ + +![](../img/lec11dlatch.png) + +Essentially we want to only read in D when the clock signal is high. +If it's low only we want to _block_ the signal from our output state. +The latch simply allows or disallows our input from passing through the other side based on what our clock is(high/low). +If D was 0 then it stays 0 when the clock goes low. +If D was 1 then it stays 1 when the clock goes low. + +### Flip-Flop & Edge Triggering + +Say we want to grab what ever D is but, only when we approach a falling edge. +The first latch opens as grabs any changes coming off D, then the the second opens just as the first closes. + +We can reverse the two like in the next figure to acheive the opposite result: reading on the rising edge. diff --git a/cst337/readme.md b/cst337/readme.md index bd1940b..c4aa828 100644 --- a/cst337/readme.md +++ b/cst337/readme.md @@ -1,4 +1,4 @@ -# Subject - Computer Architecture & Assembly with MIPS \ +# Subject - Computer Architecture & Assembly with MIPS Material on the hardware side of this course covers everything from transistors up to logic gates. Assembly is among the second half of this course(_ymmv_) if the course is flip-flopped for you. diff --git a/cst363/lab/in-memory-search-lab.pdf b/cst363/lab/in-memory-search-lab.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9edb087d9dc0b7001de0ef2aee52d314e6c4dfc3 GIT binary patch literal 43594 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�}G_; zY~d(jb}N0_Fu`LEymoHrB5!fkI0IotRbnAq31L0Okb)xDb##j0-IA01SS>_P5&bcD1m? zy5)qhfJpz^=wMJNuy$C|{bl2W@PL8(yxr&=|78QxJU~7EZi7IeK(qd7;|DtPA2vQf z&-!;8A8;*Daew*={^2nvwS>)yij18_&uH=|Lq+0n~fK8OK<&YgWXDZ|KTS9{#Y3W4wYa{{dgS<4|BRXLy z{PtrE6e0-)OTpj*0I0^xCk+fE2|<2-2|gY^QLO*n<#s}lb~2N)wlK4E^KhU8@$&J@ zKqUnrQeX+N6dWum!vh17e3B9{Uf>8Ufxt*{b2oK$|20hb0E!Nb#mo#>mBIQi`XQff literal 0 HcmV?d00001 diff --git a/cst363/lab/on-disk-search-lab.pdf b/cst363/lab/on-disk-search-lab.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4edb1586b5f6a93943978ac9c98342794dc64aad GIT binary patch literal 34021 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 H5bpl~j3agl literal 0 HcmV?d00001 diff --git a/cst363/lec/lec11.md b/cst363/lec/lec11.md new file mode 100644 index 0000000..a31a568 --- /dev/null +++ b/cst363/lec/lec11.md @@ -0,0 +1,26 @@ +# lec11 + +_this section still needs more info_ + +## Query processing + +Keep in mind we are still concerned with systems like sqlite3. + +First we have to parse an input to validate it. +Then we should also validate any semantics about the input, ensure that the given _tables, objects etc_ are correct. +Finally we should somehow calculate the input: usually by converting the given expression to the equivalent relational algebra expression. + +If we can optimize this expression we can then create more efficient queries. +To do this we take into account 3 main factors: +1. I/O time + * if we have to write something to disk over and over again then we +2. Computational Time +3. Required memory/disk space + +### Cost funtion + +## Performance of Disk and RAM + +## DB Block + +## Disk Buffers diff --git a/cst363/lec/lec12.md b/cst363/lec/lec12.md new file mode 100644 index 0000000..d2ad1fc --- /dev/null +++ b/cst363/lec/lec12.md @@ -0,0 +1,43 @@ +# lec11 + +## Lab + +This section has a lab activity in `lab/` with instructions on `in-memory-searches.pdf` and `on-disk-search.pdf`. + +## In-memory Search + +_For now we'll deal with trivial queuries._ + +Say we perform this query: `select name from censusData where age<30;`. + + +If we do a linear search we will nearly always have to go through all `N` records in the table to get the data we want out. +Binary searches prove to be quicker but our data must be ordered in some fashion. +_Note:_ just recall that we can only sort a table's entries by a single column at any given time. +The other problem we encounter is that our data must _always_ remaini sorted, which means entering, modifying, and deleting data has much larger overhead than other methods. + +## On-Disk Search + +There are two main ways of storing the data on disk: by record or by column. +Likewise we also have to deal with variable length data types like `varchar` which provides an uppoer bound but no fixed size necessarily. + +### Blocks + +Blocks contain records or sometimes columns depending on the implementation. +We usually allocate these blocks in 4k or 8k bytes of space since sectors are split into 512 byte chunks. +These things are taken into account because I/O time sucks, it always has and until ssd's lifetime performace doesn't suck this always will. + +The main issue with getting data off the disk isn't the read time, it's the time to find something in the first place. This is because we write to the disk in a fashion that _isn't_ completely linear. + +Also keep in mind that our total I/O time to search for something is going to be T~access~ + T~transfer~\*N~records~. + +* If we search on a keytype then we only have to search half the records. +* Also this is assuming that _all_ the blocks are right next to each other. + +If we search for some blocks that happen to be right next to each then we only need to bother finding the first block but with a binary search we have to bother accessing _every single research_. +This is because unlike memory which is managed by a well written OS, the disk is dumb... very dumb. +The way it(physical machine disk) writes/modifies data is nearly always trivial, meaning there is no clever way that it is writing data. +This is half the reason we say that I/O time sucks. +Because hard disks are slow and stupid compared to memory which is quick and clever. + + diff --git a/readme.md b/readme.md index 9819fdc..9a7af81 100644 --- a/readme.md +++ b/readme.md @@ -16,4 +16,4 @@ Info here should be useful for general purpose but material is guided for CSUMB' ### Regarding Accuracy -Until I am more experienced some of this info might be innaccurate however, I will be keeping some tabs on this repo since it's inevtiable that someone somewhere use this information for their own studies. +Until I am more experienced some of this info may be imprecise however, I will be keeping some tabs on this repo since it's inevtiable that someone somewhere use this information for their own studies.