Created
December 16, 2020 00:48
-
-
Save bhpayne/a355fac19c36ee8c93536c59bce3c525 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |
<thisdocument> | |
<process userobjective="turn on the computer"> | |
<!-- https://www.quora.com/How-does-a-power-button-work-in-a-computer --> | |
<!-- https://wiki.osdev.org/System_Initialization_(x86) --> | |
<!-- https://wiki.osdev.org/System_Initialization_(x86) --> | |
<task entity="user" action="push power button"> | |
<task entity="power button" action="electrical current running through wire is interrupted"></task> | |
<task entity="electrical wire" action="current goes to zero for short duration"></task> | |
<task entity="mother board" action="?"></task> | |
<task entity="CPU" action="starts by executing whatever code is found at the bottom of its memory map, which is bios code."> | |
<task entity="CPU" action="executes instructions from ROM which contains a BIOS initialization program"></task> | |
</task> | |
<task entity="BIOS" action="sets up a bootloader"> | |
<task entity="BIOS" action="RAM dection"></task> | |
<task entity="BIOS" action="Hardware detection/initialization"></task> | |
<task entity="BIOS" action="Boot sequence"></task> | |
</task> | |
<task entity="BIOS" action="hands control to the OS"> | |
<task entity="BIOS" action="boots some devices directly into your OS-specific bootloader"></task> | |
<task entity="BIOS" action="boots other devices (any hard disk, or anything emulating a hard disk) into an MBR"></task> | |
</task> | |
</task> | |
<task entity="OS" action="OS starts userspace"></task> | |
</process> | |
<process userobjective="browse the web"> | |
<!-- https://medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a --> | |
<!-- https://vanseodesign.com/web-design/browser-requests/ | |
probably based on the medium post, but adds insight on the browser rendering stage --> | |
<!-- https://varvy.com/pagespeed/display.html | |
keywords: request, response, build, render | |
details on layout/reflow and paint process --> | |
<!-- https://en.wikipedia.org/wiki/OSI_model --> | |
<!-- https://unix.stackexchange.com/a/418323/431711 --> | |
<task entity="user" | |
action="open web browser"> | |
<task entity="user" | |
action="use mouse to move pointer on desktop icon for browser"> | |
<task entity="mouse hardware" | |
action="mouse moves across a surface"></task> | |
<task entity="mouse hardware" | |
action="light sensor detects movement"></task> | |
<task entity="mouse hardware" | |
action="signal is sent across USB cable"></task> | |
<task entity="mouse hardware" | |
action="data is sent using a protocol"> | |
<task entity="mouse hardware" | |
action="electrical signals are sent across USB cable"> | |
</task> | |
</task> | |
<task entity="computer" | |
action="operating system translates USB signal to pointer on screen"></task> | |
</task> | |
<task entity="user" | |
action="use mouse to click on desktop icon for browser"> | |
</task> | |
</task> | |
<task entity="user" | |
action="enter URL of desired website"> | |
<task entity="user" | |
action="use keyboard to type URL"> | |
</task> | |
<task entity="user" | |
action="hit 'enter' when URL is complete"> | |
</task> | |
</task> | |
<task entity="web browser" | |
action="shows webpage"> | |
<task entity="web browser" | |
action="separate path from domain name from protocol"> | |
</task> | |
<task entity="web browser" | |
action="browser checks the cache for a DNS record to find the corresponding IP address of URL"> | |
<context> | |
DNS(Domain Name System) is a database that maintains the name of the | |
website (URL) and the particular IP address it links to. | |
</context> | |
<task entity="web browser" | |
action="check browser's in-memory cache"> | |
<context> | |
The browser maintains a repository of DNS records for a fixed duration for websites you have previously visited. | |
</context> | |
</task> | |
<task entity="web browser" | |
action="check operating system's cache"> | |
<task entity="web browser" | |
action="make a system call"> | |
<example> | |
system call <command>gethostname</command> on Windows | |
</example> | |
<task entity="operating System" | |
action="check local cache"> | |
</task> | |
<task entity="operating System" | |
action="check the router cache"> | |
<task entity="web browser" | |
action="send request to router"> | |
<task entity="web browser" | |
action="system call"> | |
<!-- https://unix.stackexchange.com/a/418323/431711 --> | |
<task entity="operating System" | |
action="kernel implements TCP connection" osilayer="4 = transport"> | |
<task entity="?" action="send SYN packet to router"> | |
</task> | |
<task entity="router" action="send SYN-ACK packet to computer"> | |
</task> | |
<task entity="router" action="send ACK packet to computer"> | |
</task> | |
<task entity="?" action="IP packet" osilayer="3 = network layer"> | |
<context> | |
Every single URL on the internet has a unique IP address assigned to it. | |
</context> | |
<context> | |
The IP address belongs to the computer which hosts the server of the website we are requesting to access. | |
<example> | |
www.google.com has an IP address of 209.85.227.104 | |
</example> | |
</context> | |
<task entity="NIC driver" | |
action="send request"> | |
<task entity="NIC firmware" | |
action="send signal (using Ethernet?)"> | |
<task entity="NIC hardware" osilayer="1 = physical" | |
action="send electrical signal to router"> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
<task entity="web browser" | |
action="check the ISP cache"> | |
<task entity="ISP DNS server" | |
action="initiates a DNS query to find the IP address of the server that hosts the URL"> | |
<task entity="ISP DNS server" | |
action="contact the root name server"> | |
<task entity="root name server" | |
action="redirect ISP DNS server to TLD server"> | |
</task> | |
</task> | |
</task> | |
</task> | |
</task> | |
<task entity="web browser" | |
action="initiates a TCP connection with the server"> | |
</task> | |
<task entity="web browser" | |
action="sends an HTTP request to the server"> | |
</task> | |
<task entity="server" | |
action="handles the request"> | |
</task> | |
<task entity="server" | |
action="sends back an HTTP response"> | |
</task> | |
<task entity="web browser" | |
action="renders the HTML content"> | |
<task entity="web browser" | |
action="build the DOM tree"> | |
</task> | |
</task> | |
<task entity="web browser" | |
action="sends additional requests for objects embedded in the html file (CSS files, images, javascript, etc.)"> | |
</task> | |
<task entity="server" | |
action="sends back additional content"> | |
</task> | |
<task entity="web browser" | |
action="Process CSS markup and build the CSSOM tree."> | |
</task> | |
<task entity="web browser" | |
action="Combine the DOM and CSSOM into a render tree."> | |
</task> | |
<task entity="web browser" | |
action="Run the layout on the render tree to compute | |
the geometry of each node. (layout/reflow)"> | |
<task entity="web browser" | |
action="determine size of screen"> | |
</task> | |
</task> | |
<task entity="web browser" | |
action="Paint the individual nodes to the screen."> | |
<task entity="web browser" | |
action="convert each node in the render tree to | |
actual pixels on the screen."> | |
</task> | |
</task> | |
</task> | |
<task entity="user" | |
action="read webpage"> | |
<task entity="user" | |
action="scroll webpage"> | |
<option> | |
<task entity="user" action="use keyboard to move webcontent down in browser"> | |
<task entity="user" action="press arrow key"> | |
</task> | |
</task> | |
</option> | |
<option> | |
<task entity="user" action="use mouse to move page down in browser"> | |
<task entity="user" action="move mouse pointer to scroll bar"> | |
<task entity="mouse hardware" action="mouse moves"> | |
</task> | |
</task> | |
</task> | |
</option> | |
<option> | |
<task entity="user" action="use webwheel to move page down in browser"> | |
<task entity="user" action="rotate webwheel"> | |
<task entity="mouse hardware" action="web wheel moves"> | |
</task> | |
</task> | |
</task> | |
</option> | |
</task> | |
</task> | |
<task entity="user" | |
action="click on relative link"> | |
<task entity="user" | |
action="use mouse to move pointer on hyperlink in browser"> | |
</task> | |
<task entity="user" | |
action="use mouse to click on hyperlinked text browser"> | |
</task> | |
</task> | |
<task entity="user" | |
action="click on absolute link"> | |
<task entity="user" | |
action="use mouse to move pointer on hyperlink in browser"> | |
</task> | |
<task entity="user" | |
action="use mouse to click on hyperlinked text browser"> | |
</task> | |
</task> | |
<task entity="user" | |
action="close browser"> | |
<option> | |
<task entity="user" | |
action="use mouse to move pointer to 'close' icon for browser"> | |
</task> | |
<task entity="user" | |
action="use mouse to click on 'close' icon for browser"> | |
</task> | |
</option> | |
<option> | |
<task entity="user" | |
action="terminate browser app using keyboard"> | |
<task entity="user" | |
action="alt-F4 on keyboard"> | |
</task> | |
</task> | |
</option> | |
</task> | |
</process> | |
<process userobjective="turn off the computer"> | |
<task entity="user" action="push power button"></task> | |
</process> | |
</thisdocument> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment