All right. So it's such a beautiful spring day, here, on campus. I'm gonna record
outside, here at Stamford campus. Just kind of sunny, park like. So where college
students just come [inaudible]. So the topic for this section is: What is
software? What is code? How is it that something runs on a computer. So when we
talked about hardware in the computer we talked about the cpu, that's the brains of
the thing. So the cpu's what actually does running, and the cpu implements what is
called? Machine code instructions'. And machine code instructions are extremely
simple. One machine code instruction might add two numbers, another instruction might
compare two numbers to see which one is bigger. So when. For code that we've seen,
so something like pixel set red dot ten. That's much more complicated, than an
individual machine code instruction. So the way that's going to work, is that
pixel set red dot ten. Will ultimately expand to a series of maybe five or ten of
these very simple machine code instructions. Such that, when those ten
instructions are run, one after the other, it sorta has the effect of setting the red
value of the pixel to ten. Alright, and I'll get into more detail later on about,
how that, how that expansion happens. So, I think a good first question for running
a program is, what is a program? So I'll look at the, the right hand side of this
diagram. So a program, and I'll, I'll sort of use this as my running example,
Firefox. So a program is made actually of just an enormous sequence of these very
simple machine code instructions. And so, when Firefox is, is running on your
computer, that means somewhere in RAM, there's a block of these instructions.
Such that running them, has, you know, does the things that Firefox does. So it
blinks the cursor, it takes url, draws, gets web pages and all that sort of stuff.
So. The individual instructions are really trivial, right. Just add two numbers. So
how does it get from that to like blinking the cursor? And the best I can say is it's
maybe sort of like the relationship between sand and sculpture. That each
instruction is like a grain of sand. Like by itself it's meaningless and it kind of
looks like all the others. But if you put them together in just the right way, you
can build this complicated overall structure. And so that is the way that
Firefox is built out of these, this these simple instructions. So the way it works
is the CPU, over here on the left, runs what is called a fetch execute cycle. And
all that means is that, the CPU will start off, let's say here, with Instruction one,
and it'll load that instruction and run it. Or sometimes we'll say it executes
that instruction. So, it, it adds the two numbers, or it does whatever the
instruction says. And when it, it's done with Instruction one, it just goes down
the list. It goes to Instruction two, and it does that one. Instructions for you, it
does that one, it's only just ru-, it just runs through the sequence. So, when we say
that a CPU operates at two gigahertz, two billion operations per second, it's these
little instructions that, that refers to. So there are, there's obviously a, a big
variety of instructions. But I'm just gonna point out a couple special types. So
one type of instruction has the effect of changing the order that the instruction.
Normally the CPU just runs down the list and does them in order. But let?s say
instruction four maybe says, oh jump back and start executing again at instruction
one. And so think about what the cpu's gonna do. So it's gonna do instructions...
One, two, three, four. And then when it gets to four, it'll sorta jump back, and
do instructions one, two, three again. And then one, two, three again, and again. You
can sorta see that's how loops are implemented. Just arranging the
instructions so that they'res some piece of code we wanna do 500,000 times. Well,
you can set up an instruction to just loop back and so, do those instructions again
and again. Another sort of instruction. Our [inaudible] idea is an instruction,
well, the same instruction two here, which tests some condition and if the condition
is true maybe it skips ahead where instruction five would be here. So. That's
how if statements are implemented. You have an instruction that's gonna look at
some condition, and if it's, if the condition is true, it's gonna sort of tell
the CPU to go over here. And if it's false, it'll go over to some other place.
So by arranging the instructions just so, you can get the effect of, something that
we, that, in our code, looks like an if statement. [sound]. Alrighty. So Well so
how, how does a program get running and how do we get to, how do we get to this
thing. So I would imagine you've got, Firefox on your flash drive, you know, the
file. So on your flash drive, or on your hard drive. So here, I've stored, long
term, you know, persistent storage down here. And here's RAM and here's the CPU.
So when you've got Firefox on your hard drive. It's, it's a file, basically, and
here I, it's called Firefox exe, that's just a windows convention, for, how to
name a file, which is a program, but it, it helps keep things clearer so I'll
follow that. So firefox.exe, that file, it has a lot of bytes in it, and for the most
part, those bytes, are just the instructions, that make up the program,
plus some icons. [inaudible] and other stuff. So what I want to think about is
well, what happens when you double click Firefox.exc? How does it start running?
And basically what happens is there's two steps. The first thing that happens is the
bytes for these instructions, at least enough of the instructions to get started,
get copied up to RAM. So it just copies, puts the instructions in RAM where the CPU
can get at them. And then step two, just tell the CPU, 'Okay, well, here's
instruction one. Start executing here.' And so then the CPU just starts ripping
down the series of instructions and now it's running Firefox. So I think this
leads to the question of like, well who do this right? How did, how did, who handles
the double click? Who gets Firefox running? And so that's what an operating
system is. So the operating system is a set of kind of supervisory and
administrative programs that sort of you know, organize, organize the whole system.
So, in particular, the operating system manages multiple programs, and starting
and, ending programs. So a modern computer can, run multiple programs at the same
time and so the operating system sorta keeps things organized. So it, it does the
initial startup of a program, giving it some RAM to use, and maybe giving it a
window to draw in. Also, operating systems try to keep programs isolated from each
other. So each program has its RAM, but it can't necessarily just go mess with the
RAM of some other program. So that helps if a program has bugs. Hopefully, it'll
just mess up that program, but not mess up some other program that you're running. Or
maliciously, if I program was trying to do something bad to some other program that,
the operating system tries to keep them separate. So, the operating system is
really the first thing that runs when your computer starts up. So that's what's gonna
put up those first windows, and maybe show you what's on the hard drive. And then,
from thereafter, you can double click, or do other things, and the operating system
will start those programs for you. So that's really the, the thing you're
seeing, when you start up your laptop. Digital camera, it, you don't think of it
as a computer, necessarily, but it's really the same. When the digital camera
first starts up, there's probably a couple programs. There's maybe the program that
takes pictures, and the program that lets you look through the pictures you've
already taken. And so, when the camera first starts out, there's a little bit of
administrative, sorta get, get the, the programs running to sort of show you the
interface, and then it just lets you go. Am. So just as a, a last thing, there's
sort of the, the, these, this terminology boot and reboot, I always thought that was
kinda funny. Like, where does that come from? And I-, it refers to the sort of
chicken egg problem of, like, well, when the computer first turns on, when it first
starts up, how does it. How does it get itself organized? How does it start
running a program? And this terminology actually comes from sort of an old joke,
about if you want to get over a fence, what you could just do is reach down to
your bootstraps, and pull up, and just like lift yourself over the fence that
way. And it's obviously kind of absurd. But it, it has the same quality of like,
well wait, what program does the computer run to enable the computer to run
programs. So it sort of a chicken and egg problem. So the way it works is that the
hardware, the, the CPU, has, when it recognizes that it has, it was turned off,
and that it has, it has just started up. And so there's a special tiny program that
is hardwired into the computer to run, at that moment. And that program can maybe
check, check what's hardware area, you know, do some basic early start-up stuff.
And then pretty much it looks around for a hard disk or a flash drive or something
that contains an operating system on it. And then it can start that operating
system and then, then the computer can start up in that way. So that's why it's
called boot up. It refers to this old boot strap idea. And then that's what rebooting
is. So reboot means just to sort of, we want to get a clean slate so it's going to
shut down and start up fresh. All right. So now you know.