Placeholder Image

字幕表 動画を再生する

  • hello everyone i'd like to welcome you all to this fall's this terms instance

  • of this course is a fish way either 15 213 from computer science or 18 213 from

  • electrical and computer engineering but a large number of people enrolled in

  • this course are in one called 513 which is for graduate students and to be

  • totally honest you're not supposed to be here because you supposed to watch the

  • videos the lectures by video later but we're not checking any cards so i don't

  • really know who you are

  • Oh anyways this course is a as you can see a very popular course on campus we

  • have over 700 700 600 shouldn't exaggerate students on campus and rolled

  • in one of those three versions of the course which if you think about a

  • university of the size of CMU it's like about five percent of the total student

  • population so we're very glad to have you here in this game is too high think

  • we overdid the game try that

  • that's better so my name is Randy Bryant and my co-instructor is Dave O'Halloran

  • and those names might be familiar if you have been to the bookstore

  • because the book was written by us and we actually wrote this book of we

  • started to 13 is a course in 1998 are and I know that your children them and

  • all that stuff but up out of response for our new type of course that you'll

  • see today that sort of gives people are in depth understanding of systems but

  • more from a high level or programmers perspective and we'll talk some about

  • the philosophy of the course later

  • so this book as you see are just came out its third edition last March and

  • that's the required text for the course and there is nothing you can do to avoid

  • buying that book and it's not because we're greedy actually we take the money

  • we get from royalty for students in this course or any CMU course and we donate

  • it to CMU so we're not actually making any money out of you buying the book but

  • it's a simple reality that the new version is different than the old we

  • expect you to be using the new version there are no electronic copies there are

  • no pirated version so you basically have to buy the book but and I don't really

  • apologize for that because i know you or your parents or somebody's paying a lot

  • of money for you to be here and so the price of the book is really a relatively

  • small amount relative to that and up this course by the way is is not some

  • courses there's oh yeah this book you might want to look at it once in awhile

  • but actually the course has nothing to do with it

  • this course the book and the course are one they're very tied together there'll

  • be parts of the book that we don't go into all the details that are in the

  • book sometimes but we expect you to be able to figure it out and so really the

  • course in the book are tied together and they very much the the progress the

  • course the topics covered how it's covered everything about it is

  • consistent with the book and we wrote the book because of the course think of

  • them as course notes so and the reason why we are teaching this term by the way

  • we haven't talked together in several years but because this is the first roll

  • out of this book and not only is it being used here but it's actually used

  • by about 250 schools around the world and many of those people are also going

  • through the same of activities of teaching for from this new edition for

  • the first time and so we wanted to make sure all the material for the course was

  • sort of put in order and thanks

  • because other universities and other colleges use this material of the

  • supporting material we've developed so that's the course and today is the first

  • election we're sort of doing a tag team here I'll talk the high-level what the

  • course is about what the main themes are and today we'll talk more about the

  • logistics so we refer that the saying we have one of the very first time I type

  • the number of this course into a text editor i realized i've typed those five

  • digits many times in my career because it's the zip code of CMU 1521 three so

  • that's where we come up with the same so arm there is a few things about this

  • course for the most part you know and your normal undergraduate curriculum

  • when you learn programming you've been very much separated from the realities

  • of the Machine you you just think about code just you put some text into some

  • little box somehow and outcomes of behavior that it hopefully is what you

  • intended the program to do the purpose of this course is to give you enough

  • understanding of what that box is doing when it executes your code and through

  • that to help you

  • I'll become better at what you're trying to do so some of the outcomes is there's

  • really two types of outcomes from this course one is that if this is the only

  • systems course you ever taken your whole life you will get useful material from

  • it you will learn tools tricks methods that will help you if you ever are

  • involved in software development a large-scale software engineering

  • projects systems hardware design any aspect of of computer technology

  • this will help you be better at what you do you'll understand what programs do

  • how they work

  • what the machines that support them do why sometimes they work really well and

  • why sometimes they don't work so well

  • oh it also is intended as a sort of stepping stone into a whole number of

  • other courses at CMU that will give you more in-depth understanding of computer

  • technology but are sort of specialized by topical area whether it's computer

  • networking or operating systems or embedded systems where you'll take the

  • sort of ideas from this course and be able to then learn it as somewhat

  • narrower but deeper sense what's really going on and so it really is trying to

  • serve those two goals of making you more effective giving you useful ideas and

  • tools right away but also preparing you for later courses so one way we talk

  • about this is sort of what why what kind of stuff will you learn from this course

  • is to go through a series of what we call great realities places where sort

  • of computers meetup real-life computers get meet up against your expectations

  • and maybe they're not quite the same

  • so one of them is in the first part of the course is going to take a fairly

  • detailed look at how numbers are represented in computers and you'll

  • learn some things that are on one hand surprising and another

  • your hand will start to make sense when you understand it better

  • so are a simple case is for numbers i don't know when it was but it was

  • probably in about eight grade algebra that I've learned that if you square a

  • number it will be at least 0 if it's not an imaginary number

  • so a either an integer or a real number you'd expect to square and it to be a

  • positive value or perhaps 0 right arm and that's actually generally true with

  • floats a representation of floating-point numbers but with integers

  • are hints you know the the computer representation of integers it's not so

  • clear so for example a few square 40,000 on most computers then you'll get

  • $PERCENT of whatever that should be as you'd expect but what if you square

  • 50,000 so you could do this in your head but actually built into this laptop is a

  • computer so i'm going to go ahead and use it just sighs

  • and use the to all which on unix systems is called know what's going on before

  • we are on our linux systems is called GDB but on a macintosh OS X it's called

  • lld but they're pretty much the same program you will get to know this

  • program really really well this term so like i said if you square 40,000 you'll

  • get what you'd expect but let's change this to 50,000 and you get a very

  • peculiar number that doesn't look anything like you'd expect 50,000

  • squared to be and in fact it's negative and so that might just seem like well

  • there must be a mistake or something know that that's just the way it is

  • because of this computer is expecting numbers to be represented as 32-bit

  • values and the bit pattern that you get when you do this multiplication happens

  • to be the representation of a negative number so that's a an example of where

  • your normal expectations about integer arithmetic may or may not hold up on the

  • other hand there are some places like if i try to do the same thing multiplying

  • 300 by forward by 500 x 600 then all of a sudden i also get a number that

  • clearly is not what you'd expect because the same thing has happened

  • I've gotten an overflow it happens that it's overflowed to value that's positive

  • not negative but it still is obviously not the integer product of those four

  • numbers on the other hand one thing you'll find is even though this

  • arithmetic is not a normal sort of integer arithmetic it actually has some

  • well-behaved properties so for example if you look at it

  • what i've done is i just moved the 300 around from the beginning of the product

  • the end of the product and so now if you think about how associate ility and

  • community works basically multiplying these four numbers in a different order

  • but what you see is you get the same funny-looking result

  • uh no matter how you do it so what you can say from this is integer arithmetic

  • is commutative and associative sobes some of the conventional mathematical

  • properties it just isn't what you'd expect it to be it's not a up

  • normal sort of mathematical integer arithmetic so the cartoon here shows an

  • example that similar possibility we get to it

  • oh I guess it comes at the end up so that the next question is is edition

  • associative right can you order that the numbers and then you probably might have

  • figured both it in the integer arithmetic even though as this potential

  • for overflow it is associative and it's a community of two but four floats it's

  • not really quite the same because the range of values you can get in floating

  • point or so extreme that some numbers kind of disappear on you so the example

  • I'll show without having to use a computer to do it is if you take a big

  • number and subtract it from itself you'll get zero so if you add that to

  • 3.14 you'll get 3.14 but if you take those two numbers and you reorder the

  • how you combine them so that that 3.14 compared to minus ten to the twentieth

  • is so insignificant that result gets turned into a minus ten to the twentieth

  • and you add that to one ten to the twentieth and you end up with zero so

  • it's not associative and so what you see is the both these numbers systems have

  • some peculiarities and it all comes down to the fact that they use finite

  • representations of things that are potentially infinite and their expands

  • and so there's some compromises in how those work and what the compromises you

  • can overflow an integer and and run out of room and in floating point numbers

  • you have roundoff problems where you should drop the digits that are

  • significant you can also over floating point but the more common problem is

  • round of so this is shown in this cartoon this idea of overflow of

  • somebody counting sheep which in the u.s. is are in english language at least

  • a way to fall asleep and when he or she goes from 30 2767 and then increment set

  • by one gets minus-30 2700

  • 68 and we'll see exactly why that happens but basically the numbers are

  • going up to the largest value can represent and then when it goes one more

  • becomes a negative number so these are really important understood thanks to

  • understand I mean ninety percent of the time maybe you can just get by writing

  • programs and not worrying about whether your numbers are going to exceed their

  • possible range but they sometimes when this could be really important if you're

  • like you know controlling a rocket you really don't want the positive thrust to

  • become negative or something like that so you can see you there

  • this could be an important consideration similar way there is well known

  • instances of security vulnerabilities where somebody wrote code that sort of

  • expected a positive number in someplace and clever person figured out if I

  • supply a negative number i can fool the system and get it to do then thanks

  • so these are the kind of corner cases that you need to understand better if

  • you're either working in programs where it's really really important that it

  • worked correctly or you're really worried about security vulnerabilities

  • anytime you have possible for corner cases you have to understand these

  • nuances better assembly for floating point if you're going to use floating

  • point for serious computation whether its scientific research or for designing

  • bridges or nuclear power plants or something

  • you better understand what the characteristics are so that's our first

  • one and we'll spend a couple weeks talking about numbers and number

  • representations in their properties here

  • the second is we're going to spend a lot of time in this course learning about

  • machine level programming meaning what

  • the instructions are that actually get executed by the computer and that can be

  • diff described in assembly language which is a text version of it or an

  • object code which is the actual bit-level binary encoding of

  • instructions and we'll learn

  • a fair bit about that and spend a fair amount of time seeing how code that you

  • write in C I'll gets turned into machine code and how that gets executed on the

  • machine

  • one thing I'll say is it historically courses like this would teach assembly

  • code by having you write programs and assembly that I do various things not

  • usually very interesting because a lot of work to write assembly program this

  • course is much more about taking the assembly code that's been generated by

  • compiler a/c compiler and looking at it and understanding that's a different set

  • of skills then you need to write it on your own and in particular we're going

  • to look at the language of of intel processors the most recent versions of

  • them are called x86 dash 64 the 64-bit version of their instruction set and one

  • thing that's new in this course compared to previous ones we used to teach 32-bit

  • stuff

  • this course is 64 bits all the time on another one that will talk about a fair

  • amount that is really fairly visible to programmers surprisingly visible is

  • aspects of the memory system so modern computers have a very complex layered

  • memory system to try and give you high performance and high-capacity at the

  • same time and there's some results of that system that can mean that if you

  • program write a program well it might work really well and if you don't it

  • could run very poorly because it's not making use of this hierarchical memory

  • system so and also there's a lot of bugs that show up especially in C programs

  • that have to do with memory referencing errors and so understanding what those

  • errors are what their manifestation is how to prevent them as a big part of the

  • course so for example if i define a struct that contains a to integer values

  • a in an array and a double-precision floating-point number

  • d and if I this function if you end you'll see what it does is it is given

  • an argument I and it sets the ice element of Ages some strange-looking

  • value so as you know I should really only be either 0 or 1 of with this code

  • because that's the range of possible values of this array a but uh we can try

  • other things too

  • so in particular if you run it on either one or two you'll get what you'd expect

  • that you assigned 3.14 to element D of this structure and when you read it back

  • you get the same thing and in fact up but now if i set a of two to this number

  • all of a sudden you'll see that my floating point number which seems to

  • have nothing to do with a has changed and if i do that same thing with i equal

  • to three you'll see i get a number that's closer to two them to 3.14 and if

  • I keep going well

  • nothing much happens until I hit six and then the program crashes so something

  • interesting is going on here at least something quirky is going on and the

  • reason is again it has to do with how data is wait out in memory and how it's

  • accessed and one of the features of C and C++ is it doesn't do any bounds

  • checking on a raised it will happily let you reference element number 5 million

  • of a two element array and not complain but the operating system might complain

  • as it did here and it are in this particular structure and we'll see more

  • about how structures are implemented and wait out but basically the two if each

  • of these of

  • blocks in this vertical chain represents four bytes and so the two elements of HR

  • 4 bytes d is eight bytes and then there's some other of El stuff in the

  • other beyond their that's not actually in the structure itself so you'll see

  • that if I reference either a 0 or a of one then i will just modify that array

  • as designed

  • but when i'm calling fun of two or front of three when i'm actually doing is

  • altering the the bites it in code this number d and that's why you saw the suit

  • of funny numbers come out of it and as I go up at some point when i hit 6 i'm

  • modifying some state of the program that it's using to kind of keep things

  • organized most likely how it keeps track of of allocated memory and that's

  • causing the program to crash so this is a pretty good demonstration of a YC

  • programming can drive you crazy because as you saw it doesn't do bounds checking

  • so it's easy to write code that does invalid stuff arm it's also often the

  • case that you'll cause some problems and it has a sort of action a distance

  • feature that you can modify some thank you

  • modifying some data structure and what you're doing because of the way things

  • are organized memory you're changing something totally unrelated somewhere

  • else in the program and imagine they're not just one apart but they're 10,000

  • apart and things might just run fine for hours days or weeks and then always said

  • some point that data that got corrupted a long time ago

  • it's accessed and something goes wrong so this can be some of the worst

  • nightmare debugging nightmares that exist on earth is to try and figure out

  • memory referencing errors

  • oh so this is actually one argument not to program in c or c++ and it's a valid

  • argument

  • I'll admit but also as a person who's writing a lot of c programming you just

  • get more experienced and you know what times that you should actually put

  • bounds checking in your own code and there's also tools available that will

  • help you sort of of of bulletproof your code so that it will detect these kind

  • of problems so it's not like you have to change languages but it is a particular

  • feature of these languages and so understanding sort of the Machine level

  • representation of data structures and how they work is very really makes a

  • huge difference in your ability to deal with these kind of vulnerabilities and

  • things Varner abilities by the way also from a security perspective arm the the

  • fourth sort of theme will cover in the courses are getting performance out of

  • programs other parts of the curriculum and CS do much more emphasis on getting

  • the right algorithm at the right data structure and that's really well and

  • good that's important stuff i don't deny it but they some amount of the the sort

  • of low-level optimization that you need to do that you need to understand what

  • the system does what makes it run well what makes it run for way in order to be

  • able to do that kind of optimization so the example we like to use is these two

  • functions do exactly the same thing in terms of their their behavior what they

  • do is copy a matrix or array from scald source or SRC to a destination DST

  • they're both size to be 2048 rose 2048 columns two-dimensional arrays and

  • you'll see that the programs do the obvious thing you have a nested pair of

  • Hoops to do the row and column indices and you just copy from one source

  • element to a destination element the only thing that's different

  • you'll see is that the two loops their nesting is different the nesting orders

  • you

  • in one case I'm going kind of a row first going through all the rows and

  • then the columns and the other is for any given row i'm copying all the

  • columns that's really the only difference between these two programs

  • but what you'll find if you run it on a typical system is that there's one is

  • much faster than the other in this particular machine we ran it on it was

  • about a close to 20 times difference in performance so something fishy is going

  • on if the same program that differs only and the seemingly insignificant way a

  • way that has no effect whatsoever on its functionality can have this much

  • performance difference and so to understand this you need to stare at the

  • cover of the book because basically of your two different points of this

  • strange-looking picture that's on your book and since there's no axes or labels

  • on it it makes no sense whatsoever but it's there

  • oh so what you see is this picture shows four different memory access patterns

  • and i won't go into the details of what the throughput measured in megabytes per

  • second on on a basically a copying program was and without going into the

  • details what you'll see is these two functions sort of sit at different

  • points in this memory access pattern the one that goes through row by row is much

  • better than the one that goes through college like all and as a result you're

  • getting a lot better performance and it has to do with this memory hierarchy and

  • that what they call the cache memories of that you're getting way better

  • performance out of it in one case and the other so that's explains what the

  • cover of the book is about and we'll talk about it more later in the course

  • and then a final part of the course talks more about not just getting

  • computers to run little programs in isolation but getting computers that

  • talk to each other over networks and implement services like web server

  • and other functions like that which of course is where most of the world of

  • computing sits today it's not just isolated machines but computers that

  • interact with each other over the network

  • they're embedded controllers that are interacting with the physical world so

  • really but the world of computers is a much richer environment and we'll cover

  • that we some aspects of that in the final part of this course so arm as i

  • mentioned the other feature of this course is it will get you ready for

  • other systems courses you might take it CMU and here we've listed actually a

  • subset of the courses at the University that require this course is a

  • prerequisite and they're mostly in computer science and ECE but you'll see

  • it's quite a range of of different courses and I each of them builds on in

  • one or multiple aspects of the material learned in the course so of the reason

  • why we make everyone take this course including incoming mass to students is

  • that all these other courses at the University have come to rely on students

  • being familiar and having done the work of 213 or 513 as a prerequisite and they

  • can build on that material and sort of cover more ground as a result rather

  • than having to do what would otherwise be somewhat remedial work on it and in

  • fact one of the part of the genesis of this course was the people who taught

  • the operating system course a 4 1030 complain that they were spending too

  • much time at the beginning of the course talking about some very basics of

  • machine programming and and David I said oh well we can cover that so that was

  • part of what got this course started

  • oh and as I mentioned that the course has a sort of perspective that's very

  • different from traditional systems courses most systems courses including

  • that whole array you saw there were about how do I build some particular

  • feature how do i implement an operating system

  • how do I did

  • sign of pipeline microprocessor and those that's all important stuff to know

  • we really want the people who are out there building operating systems and

  • designing micro processors to have learned how to do it up on the other

  • hand is a way to start to get new into this and get the introduction and get

  • the experience we find it more useful to take what we call programmers

  • perspective meaning our understanding of what you as a person who sits in front

  • of a computer screen and types code I need to know about that machine you're

  • typing code for in order to be effective at doing it as opposed to somebody who

  • is someday going to be designing that the actual machine itself up so that by

  • taking that perspective it gives you sort of an understanding so now when you

  • go off to implement it you actually know what these features are and why it's

  • important to implement them well but also that's by doing this programmers

  • perspective it lets you right away get tools that you can use in other places

  • where you're writing programs are doing anything related to it and be more

  • effective at that

  • so this programmers perspective really gives this duel our benefit to it that

  • we feel is very useful and students have taken the course in the past have

  • expressed that as well so as I mentioned we have two instructors for the course

  • and they also happen to be authors and the the longest we've probably taught

  • this course of more than anyone else but it's also taught by other people on

  • campus as well so what I'm going to do now is hand my pair of microphones over

  • two days right uh welcome good afternoon is great to see you

  • my name is stable hollering and I'm just delighted delighted to have the

  • opportunity to be one of your instructors this this term this course

  • is

  • one of the reasons i'm so excited to be teaching this course I mean I just love

  • this course and the real reason is is the the opportunity of represents to

  • have an impact on people's lives that we really believe that the material learned

  • this semester can have a really positive and long lasting impact on on your

  • careers and it will help you not only with your future classes but also future

  • positions you have and I i hear this from people all all the time

  • former CMU students and students around the world to have taken the equivalent

  • of 213 it at their schools and even a couple years ago we were interviewing a

  • faculty member attended tenure track faculty member who went to Disney

  • undergrad see of you and then went off to Stanford got his PhD at stanford was

  • coming back to you know join the faculty and he told me that 213 changed his life

  • in our interview I don't like he's trying to butter me up but i i i i think

  • i believe it he he said he'd changed his whole life in the sense that it gave

  • mode research direction you know I didn't really know what what he knew it

  • kind of like computer science but it didn't really know what direction to go

  • in and after he took 213 he knew they wanted to to do is work his life's work

  • in systems now it was just remarkable right to come by and tap we ended up

  • actually hiring him and he told me that everybody in his lab at Stanford all of

  • the grad students had a copy of the book on their desk from the neighbor from all

  • over you know all different schools and so I mean I even I was in a bookstore in

  • Beijing couple years ago right outside the EKU campus and I was up on the floor

  • trying to see if i could find a copy of the textbook and I i found that yet

  • english version in one mile and then a couple hours over i found the Chinese

  • version i was going through the Chinese version and the sky tapped me on my

  • shoulder

  • and I turn around he says oh man that that book is really good you should the

  • english version is two aisles over

  • and I mean it just blew me away to be to be in the head of someone like halfway

  • around the world it was just that it was just one of those moments and so I'm up

  • I'm not trying to post I'm just trying what i want i want to give you a sense

  • of what it what an opportunity this course represents for Miranda and I to

  • to have what we hope will be a really positive impact on on your lives so let

  • me we have kind of a kind of a funny organization for the course to it in

  • response to that just that the tremendous demand we have we found that

  • we have for it so there's there's actually three course numbers but it's

  • all the same course

  • ok identical course 5 13 15 5 13 is for master students and the 513 513 doesn't

  • have a formal lecture so there's no seats assigned to it instead will

  • videotape the lectures and we'll make those available on the course web web

  • page for our for graduate students and the reason we do this is just because in

  • the past we we didn't have enough seats for everyone and there would be cases

  • where there might be a hundred a hundred fifty master students on the waitlist

  • they wouldn't be able to get into the course and we we didn't really want that

  • because they need this course for to take other courses so that's the reason

  • why we have this sort of does not meet version of 213 is 513 because then we

  • can admit as many all the master students that that need to take the

  • course now 15 to 13 and 18 213 or are for undergraduates in computer science

  • and ECE respectively

  • ok and the undergraduate will go to lectures and recitations okay in person

  • graduate students watch video tapes of those but otherwise yes

  • yeah we're making them available to everyone

  • actually sorry and lecture slides as well everything's available on the

  • course webpage so um so you'll be doing up the all students will have equal

  • access to office hours on this staff mailing list and everybody does the same

  • labs and the same exams

  • ok so it's just a question it's just a matter of whether good election in

  • person or if you're watching on video

  • in fact if you know since it's available to everybody if you miss lecture it will

  • be there on the web page and you can catch up which I know you'll probably do

  • actually know most of you will never miss class right but the few of you do

  • you'll be able to watch the video

  • ok alright this is the one part i miss the party

  • I hate love teaching but this is this is the one part teaching that none of us

  • really like but we have to talk about it and that's academic integrity if you're

  • new on campus coming from international school for an international student new

  • on-campus there might be different notions of academic integrity and

  • different notions of cheating at your undergraduate school your old school so

  • if you're new on campus pay very close attention to this because a carnegie

  • mellon we take academic integrity very seriously

  • ok it's not a wink wink nod nod

  • we're very serious about it and we want you we want everybody doing their own

  • work to preserve the integrity of the courses so what exactly is cheating

  • so if you share code with anybody either copying

  • retyping it looking at somebody's coat like if you look at somebody's coat on

  • the screen or if you give somebody a file all of those all of those examples

  • of sharing are cheating if if you describe your code like line-by-line to

  • somebody that's cheating if you coach somebody line-by-line that's cheating

  • searching the web for solutions just the act of searching is cheating right and

  • this is a this is a real problem for us in particular because the courses is are

  • offered all around the world and people in maliciously yours or sometimes just

  • they're proud of their work and they post it you know for employers on like

  • public github sites so it's it might be tempting to to search for these

  • solutions but even the act of searching is cheating and definitely if you find

  • some solution in and use it

  • that's cheating even if you modify it afterwards and I just want you to

  • remember I can I know how to use google just as well as anybody else right so I

  • i can search for solutions to sew on copying code you know you might be

  • tempted you might be tempted to copy code from someone who took the class you

  • know a previous semester

  • don't do it that's that's cheating to know what's not cheating so you can you

  • can help each other use tools you know somebody's having trouble using GDB or

  • you know they have questions about how to run not use a text editor that

  • stuff's all great you help each other out on using the tools how to log in the

  • shark machines all that kind of stuff and you can help you can discuss sort of

  • high-level design issues and that's probably a good idea

  • yes

  • yeah

  • yes it did you get a previous semester

  • okay okay yeah the question was if you took it in a previous semester can use

  • your your work and answers yes

  • so if you can also talk to each other about high-level you know design issues

  • you know how are you are using a explicit list or you could are using a

  • segregated list for Malik lab okay that kind of stuff is is is ok a high-level

  • ok low-level not okay and basically what we want you to write your own code this

  • is not you know it's kind of a cut-and-paste world these days right you

  • look stuff up on Google's stackoverflow you cut and paste it but that's not

  • that's not the way we do it here we want you to do the work yourself

  • we want you to enjoy the experience of figuring things out and learning how to

  • to solve problems now the consequences for cheating

  • there's a single sanction if if you're caught cheating you'll get you'll be

  • expelled from the course within our there's no exceptions if you drop the

  • course we'll just reinstate you and then

  • it's really up

  • it's a very serious very serious penalty because we just take it we take it so

  • seriously its sub it's just it's just something we don't want you to do we

  • have amazing tools to detect code plagiarism

  • we have amazing tools to detect plagiarism that are on that a resilient

  • to renaming reformatting they operate a very deep syntactic level and so just

  • please please don't do it

  • we have I think 18 TAS will have office hours almost every day of the week

  • there's plenty of opportunities and ways to get help start early if you get stuck

  • start early enough so if you get stuck you can go ask for help

  • we have but automatic extensions built-in if you need more time I'll talk

  • about that later form of grace days but please please whatever you do don't

  • cheat it's just tragic when it happens last last fall 25 students were expelled

  • from the course some were expelled from the University because it was a second

  • offense many were sent hope I talked to students who were like the only person

  • in their family to go to college

  • the only person in their village to go to college and they were going home

  • without without a degree and it's just tragic it's just so please please please

  • don't do it

  • do your own work on and it will be a wonderful experience has really

  • mentioned the the textbook is a computer systems a programmers perspective third

  • edition you can there's a whole bunch of supporting material on the on the books

  • website at csa PP . CS at CMU edu and as Randy mentioned this this book really

  • matters for the course because actually the book came out of the course right so

  • the book is the course of course if you look on and so it'll really help you

  • love that the labs that we do come directly from material that we discussed

  • in the book so what I would encourage all of you to do and i'm not sure if

  • anybody is that

  • taking this advice but I say it every year anyway because i believe it but i

  • think a really good strategy for studying and preparing for this course

  • would be to read each chapter three times

  • okay read it three times work the practice problems so we have littered

  • throughout the book or practice problems with solutions at the end of the end of

  • the chapter and these practice problems like little sort of bite-size morsels

  • just kind of just kind of check your kind of sanity check your understanding

  • of the material so i think if you read this if you read the book each chapter

  • three times and work the practice problems you at that would be an

  • excellent way to go through the semester and prepare the other book we use this

  • that Kernahan Richie's classic c programming book I think of this is

  • still this was written a long time ago it's still the best book around i think

  • four seats it it's a beautiful example of technical writing it was one of the

  • inspirations I used to when I was writing the book you know I could try to

  • find that same clarity and precision that they that they return hand Richie

  • have in their book so this is a this is a really good book i mean this is kind

  • of book it's a reference but it's the kind of book you can just read from

  • beginning to end and get a really good understanding of of see there's a

  • there's four main components of the course there's lectures where we go over

  • the high-level concepts recitations where which meet once a week for an hour

  • led by a TA and the root of the purpose of the recitations is really to help you

  • with that the labs it's very practical hands-on there's the there's seven of

  • those labs and these are really the the heart and soul of the the course this is

  • where this is where all the real learning comes then I think when you

  • actually have to do this stuff

  • and that's why we take the cheating part so seriously because if you do these

  • labs you're going to learn an incredible amount of really cool stuff if you don't

  • do it you won't learn anything so each one of these these labs is one or two

  • weeks each and involves a typically some kind of programming or measurement

  • there's also two exams and midterm and a final the exams are proctored their

  • online proctored in wien and and gates and what we do for the exams as we have

  • like we take like four days from 10 to 10 and then you can sign up and then we

  • have like multiple clusters that are networked isolated and then you can sign

  • up for a slot like a six hour slot and that the the midterm is like nominally

  • like an hour 80-minute exam right the same exam we just we gave when we we use

  • that people sitting in person so it's normally like 80 minutes but we give you

  • like a five or six hour window to do it

  • ok so there's so you can sign up anytime anyday that there's a slot

  • ok so there's flexibilities that can kind of tailor it to your your schedule

  • and we I think we've also removed all the time pressure right so which is you

  • can you can go back you can check your work can you can just kind of relax and

  • not not not be worried about how quickly do it

  • now there's many different ways to get help the main source of information is

  • the course webpage that's a WCS CMU edu till the 213 and all the information is

  • there we've got a complete schedule of lectures and assignments we don't change

  • it that's it's fixed it so you can look at that and and plan your semester

  • knowing that those dates so won't change we've actually even got all the lectures

  • posted ahead of time for for the other instructors around the world who are

  • using the books that we needed to get them all already there's also on news at

  • the at the very beginning there's sort of news if you need to make

  • announcements will post it there we don't use the blackboard are Piazza in

  • the course instead we have a staff mailing list that you can that you can

  • send mail to if you have questions and all of the tas and all of the faculty

  • ar-ar-ar-ar subscribe to that staff mailing list and so will all see it and

  • we usually try to have you know really fast feedback right so there's so many

  • people so many people looking at at your emails that chance to write how you get

  • up and answer back quickly the the disadvantage of having this may have the

  • advantage of this mailing list is that allows us to control the message and

  • control what were its what feedback for giving back to you and the disadvantages

  • that we often get the same question over and over again and so for that we

  • established the fact if we find we're getting same questions over and over is

  • that we've established a fact on the on the course webpage for are organized by

  • labs

  • ok so you can you can see the answers to frequently asked questions on the on

  • there and we have office hours i think we're still trying to eat we are still

  • trying to meet with the staff and figure out the exact office hours but what I'm

  • what we're thinking now is that will have

  • office hours six days a week every day but saturday the $DAY they will be at

  • the same time and same place every day so from 5 45 2 830 in winter coat

  • between 5207 cluster will have to 13 th there too to help to answer your

  • questions

  • ok so you don't have to make appointments and you can make an

  • appointment to see any staff member of course but you don't you you know that

  • at the same time same place every day there's somebody you can go to for help

  • ok for our labs and exams every assignment every lab is a single person

  • so we don't have any group projects we want you to do the work yourself now you

  • know it's important to work in groups and you will learn how to work in groups

  • and other classes CS classes but not in 213 we want this is a kind of course we

  • want you to figure stuff out yourself all of our hands will be doing 1159 p.m.

  • on either tuesday or thursday and this is you can see which on the schedule

  • page on the course webpage and all of our hands are using auto lab where you

  • know you probably use that for some of your other classes but it's a it's a

  • oughta grading service that allows you to get instant feedback on your on your

  • in your hand and so when you handed in to get feedback right away the exams

  • like i mentioned are going to be networked isolated clusters held over

  • multiple days and and you can just sign up for a slot that's available now what

  • what usually happens if if we offer like the exam tuesday wednesday and thursday

  • thursday slots fill up immediately and so you know i guess i should try to try

  • to sign up soon if you want but people always seem to want to defer to the end

  • rather than and it was me I'd want to get it over with but so I just that

  • sort of about a constraint right that you can always sign up four slots that

  • that are available

  • ok now you know we make mistakes there's we always make mistakes especially with

  • just so many students so we there's a there's a specific process for appealing

  • grades if you think that there was a picture the work wasn't great properly

  • so what you do after after either an exam or after your labs are graded you

  • have seven days to file an appeal and appeals have to be in in writing and

  • hardcopy ok so there's no we won't we won't we won't consider any email any

  • appeals by email that has to be in writing and hardcopy and you get those

  • to me and if I'm not there you can just slide it under the desk

  • ok and what the reason we do it that way is it allows us to treat everybody

  • fairly so we get all the appeals together and once and then we can we can

  • we can treat everybody the same way rather than just sort of doing them one

  • at a time like that

  • ok now for our labs we have 10 machines that were donated by Intel call the

  • shark machines so initially our first version of 213 and I guess we started

  • using intel machines in 1999 used alfa processors that for the first year I

  • like to fish

  • so all of our machines work they were called the fish machines right they were

  • freshwater fish and then we upgraded a few years after that and those were the

  • saltwater fish machines and then we upgraded like in 2011 to these nehalem

  • class servers had run out of freshwater fish in saltwater fish so the next grade

  • up with sharks right so every fishes is named after some kind of sharp but these

  • are the same machines that that you will that auto lab uses for grading right so

  • there's

  • I'm consistency for performance-oriented laughs like Malik lab and you can access

  • them that their you the names are listed on the course webpage and so you can ssh

  • to a specific machine they're all identical if you have an andrew account

  • you've already got accounts on the machine so there's nothing special to do

  • or you can just ssh2 sharp that ICS and we'll just randomly put you on on one of

  • the shark machines

  • ok if but if you have any trouble logging in just send send mail to the

  • staff mailing list

  • ok we know that during the semester things come up

  • grandparents died especially near the near the final

  • that's harsh huh but that things come up right and you got your very busy you're

  • taking a lot of courses so instead of sort of dealing with requests for

  • extensions and you know all these special cases what we do is we give you

  • five grace days that you can then spend as you wish

  • so if you had your work in late one day late you'll automatically consumed a

  • great day

  • ok we don't allow you to sort of allocate the grace days you you spend

  • one of your grace days by handing in late so if you have a great day lot then

  • you hand in late you'll spend that grace day but you won't be penalized for the

  • late and so we have five grace days over the entire semester and a maximum of two

  • grace days for the assignments now we're going to set up since the first three

  • assignments are kind of not as programming intensive and don't take as

  • much time we're not going to allow any grace days for those because 01 grace

  • day when sorry one grace day and then for that the latter for labs which are

  • much more intense we're going to allow you to a max of two great days and the

  • reason we're doing this is because we don't want you to burn your great these

  • grace days are valuable their critical especially later in the semester when

  • every you really really busy so we don't want you to burn up your grace days

  • early in the semester and this happens every semester and it and then when Alec

  • lap comes up

  • there's no gray space left it's really it's really sad to see that and so we're

  • going to limit it to one for those first three just to help you save you from

  • yourself now

  • um it

  • the the phenomenal late penalty if you don't have a great day as fifteen

  • percent per day and we don't allow any hands three days after the due date and

  • also that are live shots often then and then that's it

  • now if there's some kind of catastrophic about you know then you know please

  • contact us for a friend extension right so we're not you know we try to be

  • reasonable but most of the most of the most of the reasons that for requesting

  • extensions you can handle yourself about using your grace days and just uh i mean

  • this is this is advice I give every semester too but I but it'sit's people

  • often don't don't pay attention but are just they're unable to but really for

  • every one of these assignments you want to start early and the reason is you

  • need to give yourself time to end to go seek help if you get stuck because the

  • nature of these very programming intensive assignments like we have in

  • 213 is that you're going to get stuck and often it's very hard to to bound the

  • time you spend on on some of these assignments you know it's not like

  • problem sets where you can kind of project you know this will take it would

  • take me like three hours to do these problem sets for a lot of the 213

  • assignments is very difficult to to sort of manage your time and bound your time

  • so for that reason you really want to start early to give yourself a chance to

  • get help when you get stuck now in the lecture hall of your permitted to have

  • your laptops but we ask you not to send email or instant messaging or cell phone

  • texting or anything like that if you're here we want you two to be attentive and

  • engaged the for your presence in in lectures recitations is voluntary

  • so we don't take we don't take role in either of those we encourage you to come

  • but it's not required

  • and no recordings of any kind except this one day the exams and labs are

  • weighted equally 50-percent midterms 20 finals 30 and final grades are based on

  • a straight 90 80 70 scale now rough outline of the semester the the first

  • three labs cover programs record the Machine representations of programs and

  • data data loud that's how we teach you about that level representations of data

  • so you'll sell collection of puzzles and see like a puzzle might be is it is a

  • little function that you have to implement like absolute value so a

  • function that returns the absolute value of its art input argument

  • the kicker is that we restrict the set of operators that you can use and it has

  • to be straight line code no conditionals are loops and so to solve these puzzles

  • so imagine how you might try to solve absolute value without using an if

  • statement right the normal way to do it would be if x less than 0 return x- x

  • yeah

  • see I told you we make mistakes but imagine how you might do that without

  • using conditionals and only using bit-level see operations right so this

  • is how this is how this is our way of teaching you how data is is really

  • represented in the machine now the bottom line which you probably heard

  • about this is this is that kind of famous all over the world now and uh and

  • at CMU the bomb lab is the way we teach you how to read and understand assembly

  • language and a bomb just briefly out obama is it is a sea program that

  • consists of a collection of six phases and each phase wants you to type

  • something into the keyboard if you type in the what it wants you to type what it

  • expects you to type then you have diffused that phase and it goes to the

  • next phase then you have to type with that face once and if you defuse all the

  • phases then you've defused the bottom

  • however if you type in the wrong thing then the bomb explodes by printing boom

  • and you have to try it again and the kicker is in either case when if you

  • explode the bomb or diffuse of a phase that information gets sent to auto lab

  • if you and we use the diffusing string that that your bomb sends us and we will

  • check it out on a copy of your bomb that we keep on on the server that's another

  • thing every everybody gets a different bomb slightly different by

  • so we check so when you defuse when you defuse a phase auto life takes a string

  • that it that your mom census and then compares against the local copy of your

  • bomb if you explode phase you lose half a point so there's a real consequence to

  • exploding bomb it's very very tense

  • until you learn how to use gdb to set a breakpoint before the function that

  • sends the information to the server and we want you to do that right so the

  • bombs are really the bombs really beautiful it's kind of fun it's kind of

  • like a video game it

  • it teaches you how to read compiler generated code because the only all the

  • kicker is sorry that the kicker is we don't give you the source code all we

  • give us the binary hence the binary bomb so in order to defuse a bomb

  • you've gotta fire up GDB single trace through the fine for the code is for

  • each phase single trace through that code and sort of reverse engineering and

  • figure out what it wants you to type in and then you'll quickly find out where

  • that function that explode the bomb is and you put a breakpoint there and so we

  • want you to do that because it the bomb besides teaching you how to program

  • assembly language it also teaches you sort of organically how to use gdb

  • because you really can't do it if you don't use if you don't run gdb and then

  • the the third lab is that this is a new lab this semester there Randy's develops

  • called the attack lab and we developed this lab specifically for a 64-bit

  • architecture so this is a reflection of the change from 32 bits to 64 bits on

  • and this is that we're really excited about this one you'll learn how to you

  • learn how to write exploits using return to a sort of a modern technique called

  • return to return oriented programming which is kind of the modern modern way

  • that hackers deal with the fact that stacks in newer machines move around on

  • and and are prohibitive and make it impossible to execute code on the track

  • so this is a brand new labs really i think it's really going to be really

  • going to be neat

  • in the memory hierarchy when we study the memory hierarchy we we have a cache

  • lab lab called the cash lab where you build your own cash simulator so this is

  • how you sort of learn how this hardware that Randy was mentioning called cache

  • memory works you'll build a simulator and ce4 that and then you'll take a

  • small transpose function and you'll try to make that that code run with his

  • nephew mrs. as possible on your simulator and this will involve sort of

  • understanding of how the memory hierarchy works and how to exploit it

  • ok the part of the course where you we sort of transition from hardware to

  • interacting with the the system software that the operating system there's sort

  • of a concept that we call exceptional control fault that exists in all parts

  • of the system and it's sort of represents that intellectual transition

  • from hardware to software so this is how this was sort of a key idea that allowed

  • us to kind of smoothly move from from hardware to software in in some

  • intellectually consistent way and so the the ideas that you cover an exceptional

  • control for like low heart low-level hardware interrupts and exceptions and

  • and then at the higher level or involving hardware and operating system

  • software is the idea of an operator of a process context switch

  • ok so this is this is where you start to learn what processes are and how to how

  • to ask the colonel to create and manage processes for you at the next higher

  • level or us a software form of exceptional control flow called a signal

  • so this exists solely on the linux kernel and then and then even at a

  • higher level that there's an application c language version of exceptional

  • control flow a call set jump and long jump

  • so this notion of exceptional control flow kind of exists in all parts of the

  • system we covered all at once

  • and the lab that we use to sort of exercise all these ideas is called the

  • shell lab and in the shell lab you'll write your own linux show is really cool

  • that's the program the command line program that you interact with whenever

  • you log into a linux box you're going to write your own and I don't look for me

  • that was really exciting when I could like write something that looked like a

  • real shell this is pretty neat the next areas will study is called virtual

  • memory virtual memory is a sort of combination of hardware and software

  • that presents an abstraction to you of this very of memory as a very large

  • array of bytes when in reality memory is a hierarchy of hardware and of cache

  • memories and d Rams virtual memory provides a very high level abstraction

  • and as just a linear sequence of bytes and also does provide a lot of a lot of

  • other useful abstractions that make many different parts of the system much

  • easier to manage okay so we'll learn we learn about virtual memory will learn

  • how it works will learn about the performance impact potential performance

  • impact that has any programs and and will also learn how to manage that large

  • pool of of memory that it makes available to you and the lab that we do

  • that the lab where you'll do that is called Mallik lab and then in the Mallik

  • lab you'll write your own malloc and free functions

  • ok so you'll you'll reimplement the functionality of the lipsy malloc and

  • free and this is a maybe I that minute maybe it's two pages of code but it'll

  • be a guarantee it'll be the most sophisticated difficult to pages of code

  • you she's written not only because since its managing the memory system you can't

  • use all of you mean she doesn't have many she doesn't help you out a lot with

  • the

  • abstractions for data structures but when you're writing but at least it does

  • give you ideas like strokes unions that you can use to to structure your memory

  • when you're riding a Malik package you can't use any of those you have to ride

  • exclusively on pointers and casting because you're the malefactors working

  • at such a low level and so it's a very very difficult piece of code for that

  • reason but also the design space for Malik is is enormous

  • you have many options they all have implications that trade-off performance

  • and and memory efficiency and finally the last part of the course we deal with

  • IO input/output so so far in the course we just talked about sort of running

  • programs are machines in the last part of the course we'll talk about input and

  • output sending data into and out of the machine so we'll look at basic concepts

  • of one xio will and since I think the most interesting form of i/o is is

  • networking which allows you to talk to machines anywhere in the world using the

  • internet will also talk will learn how to do network programming you learn how

  • to write programs that use a socket interface which is the basic interface

  • for the internet to talk to machines any potentially any machine in the in the

  • world and that's really exciting

  • I mean once I can still remember when developing this course i had to windows

  • open on my machine I was ssh into two different machines and i wrote a program

  • to send a message like hello world from one machine to the other and when that

  • hello world appeared on the second windows like so exciting I mean if

  • you're a nerd it's really exciting but but just the thought that that could

  • have been any machine right that could have been any machine that that is just

  • like opens up a whole new world

  • ok all of our are all of our hands are using a system called Auto lab which was

  • developed here and you can access it if you if you are on the roster as of this

  • morning if you go to the auto lab link then you'll see this course was staying

  • on your page if you're not enrolled you won't have an auto lab account and you

  • have to be enrolled to get an auto live account so if you're if you want to try

  • to wait it out and wait for people to drop i'll make the first couple of least

  • the first assignment to available from the course webpage so you can work on it

  • without actually having into auto web but at least you can keep going ok if

  • you enroll actually I didn't update this but i updated the audio lab accounts

  • today now for one final thing if you have weightless questions please don't

  • don't send email to the staff because we don't control the way this so you should

  • contact one of these either Kathy Catherine or Sarah depending on which

  • class you would

  • ok so that's that welcome again looking forward to a great semester and we'll

  • see it on thursday

hello everyone i'd like to welcome you all to this fall's this terms instance

字幕と単語

ワンタップで英和辞典検索 単語をクリックすると、意味が表示されます

B1 中級

講座01 講座概要 (Lecture 01 Course Overview)

  • 44 1
    Dean に公開 2021 年 01 月 14 日
動画の中の単語