 All right, welcome to winter and ECE 353 so can everyone hear me okay ish You people at the back might be a bit screwed with the tech size so you might want to move up to a little bit so Welcome back. Hopefully you had a good winter break and start off. Hello. I'm John I guess my full legal name is Jonathan, but I don't need anything like super fancy Do not call me my full legal name only my parents call me Jonathan when I royally screwed up So I don't want to hear that name. Just John is fine nice and easy Real real easy. That's it. So I'm a teaching stream professor. I'm fairly new. You may not have seen much about me I've only taught at UCLA before this and then here I taught the same course in fall So I've taught this course once before so you're not completely screwed, but Your only choice is me and I'm setting your exams now for a change. So good luck It'll be fine. My exams are usually okay. Don't worry about so Today's lecture. We'll talk about you know Just boring course stuff what to expect and kind of what is Changing with this offering if you've seen it before and seen that the labs are terrible Hopefully, I'll do something to adjust or address that So corcus is the main hub. I don't really like corcus. So all it has is a collection of links. So It all only really posts like scheduling announcements on there like when your midterm is so it emails you other than that Corcus is not terribly great So I'm not going to use it and your grades will also be posted there and that's pretty much all you will use corcus for I'll post all the materials on my website. It'll have links to everything and if you guys like qr codes There's qr codes, but if you download the slides from there, everything is clickable that URL is the materials URL in the corcus thing and Everything should be nice and easy So in a departure, I'm not going to use piazza. I don't like piazza. I like discord so we'll be using discord for Discussion lab discussion Q&A's my philosophy behind that is it's nice instant you get instant feedback and You know piazza is okay to like search stuff for but I want everything there for you So I'd rather just revise the materials if they are unclear Rather than just having to rely on like go References piazza posts it answers your question things like that and also in a departure We will It's also there's a chat if you prefer to ask questions that way So it actually pops up. Hopefully this works. Oh wow. Hey look it works So like 25% of you are already on discord So just go ahead message me who you are So I actually know you're enrolled in the core course then you should see the lecture's channel and everything So that lecture's channel will just go there So if you don't want to raise your hand or do that you don't are comfortable with it Whatever or you just want to add some reactions like something is really clear if you just want to like I don't know do that a bunch of times whatever that is that is also helpful and Then so we're going to actually be doing code submission how real software engineers do code submission not Uploading a zip file or a tar file to some random server We're actually going to use git and use an actual open source git platform So we'll be using git lab. That's the URL for it again link through corkis like 25% of you have already Logged in on this so that is good. It just uses the normal Toronto off thing And you shouldn't have to do anything special or email me on like discord And that's how all code submission will be done Labs are definitely going to change and I'll talk about that later But all your code submission will just be you're using git if you're unfamiliar with git you will learn learn how to use git and That's your your code submission is you push your changes and that's it So lecturers will also be streamed with vods So you don't have to worry about you know panicking and taking down notes if you don't want to you can go ahead Watch it again If you want or if anything is unclear, so they'll all be there. It will be exactly like this hopefully the audio is going through okay and And while there's still online lectures and live streaming it does have a delay it's kind of Bad for feedback So please still attend lectures if you're not sick if you are sick This is the thing to keep you away from you know getting other people sick that you can just you've no excuses Everything's recorded. You can just watch it online That's kind of my philosophy behind it But if you aren't sick you should come it helps It's the easiest and most effective way to get feedback because even without you doing anything I can look at your faces if I say something stupid. I can see you like I can see your face It's not that hard to read while if it's just online I don't know if I'm doing anything good or anything bad or what? So and then also here There's the discord or you can feel free raise your hand at any time if anything is unclear And I will try and address it So office hours, I just tentatively set for Wednesdays at 1 p.m. Let me know if there's any conflict I guess discord would be the best place for that. Is there any immediate conflict for that? No Okay, nothing so the TAs and I will otherwise be in discord Most people get their interaction through that way because you don't have to wait for a single hour a week And I'm generally pretty active on it So but and of course office hours aren't going to be streamed or recorded That's for you resource only for you and of course is that office hours don't work You can just email me to meet on something else like zoom or something like that or other office hours So that's completely up to you So there's going to be at least plan for six labs a midterm and a final I Don't know if this will actually get approved by the department. They actually haven't approved it yet I was told that This might not get approved because basically what I did is use their system made the final exam the lowest percent It could possibly be then did about half of that for the midterm and then put all the rest of the grades towards the labs So it's like 48% labs 52% written so I was told by some other professors that it might not slide But the automated system was all full of green check marks, and they haven't emailed me back yet, so but So hopefully this stays intact and the finals a bit less stressful with this with this marking scheme, but this is the plan marking scheme and You might have heard before that the labs are like really really awful and really really time-consuming like 20 plus hours 40 hours something like that So the main my main job this semester is to make all new labs So all the labs will be brand new Which means you can't search them on github? Which Yeah, I won't say the exact percent but a lot of percent Last semester got caught for cheating for doing that. It's generally not a good idea so You can't one you can't do that to we can check it against you know your other students and Well, since they're all new labs, it's not going to be that much out there. So that's it So hopefully yeah No labs are just by yourself So you can talk to each other about the labs, but you can't you know debug other people's labs the lab Okay, yeah, and the practical sessions will be the TAs will be there to help you with your labs But there's no mandatory anything for them they're just going to be there to help you and that's it and There will be no TAs there on Friday So this Friday won't have any TAs because there's no labs I'll be releasing the labs and they'll be due on Mondays So next Monday will be when the first lab is released and then you'll have two weeks for each lab And they'll just keep going on and on like that until the semester just kind of ends so that's the plan for that and The also intent towards that is hey lab six is due the Monday of the last week So you should actually be done all the course stuff and then you can actually like study for exams And we can use lecture time for final review or something like that So I have to mention academic integrity Toronto takes it really really really seriously They even have like public hearings that you can go see people that got their degrees taken away and all fun stuff like that It's all public if you get bored on like a Sunday I suggest reading it some of the cases are actually kind of entertaining and I didn't know they took That seriously, but hey they do So technically this also includes not posting any code to Github and I will especially be enforcing this because I Don't want to see my assignment stuff posted on Github I know students kind of like to have their Github full of stuff that employers can see But spoiler alert employers don't care about your course code they assume that you have done it and they can read it in your transcript and Because this course is core to everything you can do something based on the labs that is actually an original piece of software that does something interesting and It won't be that much different from the labs and you can actually post it on Github and employers might actually care about it Because it's something that's useful So yeah Yeah Yeah, so if you take a little snippet, that's fine Generally and if you have a little snippet in your code no one's going to go see you know your I don't know your shell Project and steal a little piece of code from it like realistically little code snippets. There's there's stack overflow There's anything there's not going to be anything to do with that So the code you write is your code, but don't post my full assignments So you can study together can't do labs together. They'll be individual and The idea of this course and as we'll be doing in the lectures is making mistakes all the time and Making mistakes especially for this is how you learn if you don't screw up Then you probably haven't actually learned anything Unless you know you're like a one in a billion person, but I've screwed up lots of things We're going to screw up lots of things during the lectures and it's going to be lots of fun and then Don't try and cheat it makes your life hard it makes my life hard It makes the university's life hard Let's just try and have a nice fun course if anything sucks generally I'm quite fair about it, and I'll make some adjustment if I need to yeah. Oh like feedback for the lab grade so It should be mostly automated testing and then there's going to be a TA assigned to each lab that will be able to That runs a script and might monkey around with it and be able to answer any questions for you So there'll be test cases. You'll get the same script probably I haven't decided or not whether to do hidden test cases But you'll get a script with some test cases and it'll say what they failed and why and then you can fix them Okay So there is a few textbooks that are optional they complement lectures I try and make everything as self-contained as possible, but this Textbook this operating systems in three easy pieces is quite good, and it's free online PDF don't have to pay for it Yep. Yeah, so the question is how long do the labs usually take and the answer is I haven't made them yet So I don't know Hopefully like you have two weeks for them. So 10 ish hours instead of 20 maybe 15 depending on it, but Usually with these labs, it's like very Inconsistent your lab time because sometimes you might just get a bug that just screws you over for like three days and One of your labs might just magically work So but ideally like 10 15 hours not 20 Yeah, like 10 to 15 is ideal Probably be a much shorter generally if I can do the lab and under like an out in under my train ride Then it's probably okay, which is like an hour 40 But I'm probably a lot faster than you so like 10 to 15 Yeah, yeah, so when the labs released you'll have at least some test cases with it It's the idea So hopefully they're gonna be the labs are designed to be kind of shorter to the point Hopefully do something useful and actually reinforce what you've learned in the class So The labs will all be in C and assume you are running Linux Some of them you might be able to get away with if you have an M1 Mac They might kind of work but since we're using Linux and we are doing operating system stuff Some stuff might not work ballpark like Probably like for four three to four of the labs will probably work with an M1 Mac. No problem The other ones probably won't first one definitely won't so you have to use a virtual machine or docker or If you want to use local development or use a links machine from the University So they'll all be in C So if you don't know C the C programming language book is a good book to know and we'll have some C examples this class just to make sure that You kind of know what code to expect in this course So please provide some feedback. I want you to get the most of this course this is a really really foundational and important course and It will be important to you if you write software Period so if you write any types of software this course will make you a better software developer and I guarantee you About that so if there's anything you like dislike or want to see more of something Just let me know we have a few lectures of slack. Yeah Some maybe others know So the question is are the labs gonna be based on the previous labs and the answer that is Probably not really because Yeah, some of them were a bit out there like the so who here has Learned about hash tables before hands up who we who here has implemented a hash table. Oh Hey, okay, that's pretty good. So for example, the lab one last Semester was one of the parts was implemented a hash table as like the warm-up lab and The other and there's incoming students. It was not covered in the data data structures course So they had to learn it completely cold and some of them took like 40 hours while you guys would have already done it and That's it's kind of an easy thing to do. You probably would just like copied your code over but Yeah, so this all of the labs are going to be, you know Hopefully to the point and useful is my is my goal So let's start with an overview of the course and this is a quote that I like that is Ridiculously true that all problems in computer science and computer engineering can be solved with another layer of Indirection and guess what an an operating system is just another layer of indirection so all a operating system does as it sits between applications and hardware and its primary goal is to kind of manage and coordinate resources and otherwise get out of your way and One of the like other Really important things is if you want to be good at something in software, you should understand the thing below it So if you are writing software or writing applications Well, the thing below your applications that interacts with the actual the four-day ratchets the hardware goes through the operating system so if you know about the operating system you will be a better programmer and Unfortunately, if you want to be better at operating systems while the layer below that is hardware So you should probably learn about more about hardware but in this course will be learning specifically about operating systems and Generally will be testing your knowledge with more application stuff on top of the operating system instead of going Below and going to hardware although we'll see we might have some assembly pop up, you know here and there So yeah, how many of you have done assembly? There's some luck Did how many of you did you do arm assembly? Yes Okay, so No What is that? What'd you do? What? Nios two Okay, some of you did some like really weird assembly. There's not gonna be that much assembly So if you did arm any code examples will actually I'm transitioning to using something called risk 5 Which is just like an open source arm that you could actually implement a CPU and if you really wanted to but I'll do most Of my examples using that but they'll be really minimal. Otherwise. We're pretty much in C land the whole time So the first question you might want to ask is well What is an operating system and that's actually a fairly complicated question because there's actually no good definition so Ubuntu and Android most people would probably consider different operating systems But if you actually have some knowledge of the internals of an operating system You know that they both use the same kernel Which is kind of a core part of the operating system that we'll be diving into in this course So they use the same core part that is like 90% of it But otherwise you'd consider them, you know completely different operating systems so There isn't really a clear line You might consider those two things the same operating systems if you were just you know Writing command line Utilities or something like that because both your Android phone if you were sadistic enough to actually execute command line Things it could do it the same as you know a server But generally if I'm using an Android phone I'm not going to just start executing stuff from my command line on my phone But if you want to you could and if that was your definition of your application Then they might actually be the same operating system But most people actually like seeing graphics and are a bit more sane and would probably consider them different operating systems so if you care about Desktop applications, maybe that's your application. So maybe you consider them different Operating systems because the way they display graphics is actually different. So for Android that uses something called surface flinger as a library that actually shows you graphics on your screen while if you're using Linux it's using something called at least more modernly called Wayland and If you've never dived into the internals, you probably don't know these names But there are two different display servers to actually show you graphics to your screen and since they're different There's different ways of using them. So you might consider them different operating systems if that's what you care about Okay, so the primary goal of operating systems is to allow you to run more than one application because you know if you actually tried to Program on a CPU with no software. Well CPUs are actually quite the dumb things They just start executing at a fixed address and whatever code you put there is whatever it executes So without an operating system, okay if that's what happens and I just put my application that fixed address and then it starts running and I'm all good So that actually works if you are only running one thing on your hardware So if you're doing a embedded development, which isn't this course, that's perfectly fine You don't need an operating system learn assembly learn see carry on with your life But if you have an operating system, well the idea behind that is well Let's use that fixed address and then it can go to an operating system and that operating system can start as many programs as it wants So there's a little bit more to it on a real system instead of just hey Give me an operating system. It actually points to something that loads the operating system before it boots But we also won't get into that in this course because bootings kind of boring So if you do that You only have one application instead We put an operating system there and then we let it run multiple applications So our operating system is going to have abstractions Everyone has used this abstraction even though you might not have realized what it was called before and the first abstraction is a process and just so you know abstraction is just you know a Generalization just to make our lives a lot easier. So a process basically abstracts a CPU. So it's just a Well extracts Abstracts a running program So each process contains its own set of registers including the program counter, which if we've done assembly we all know about the program counter and Then when this process starts One of the things it does is as part of the information in the in your program Even though you haven't written it it there's actually an address that tells where the CPU should start executing Everyone's you see right? I hope if you've taken this course so There's a bit of magic whenever you start your running your program Contrary to what you think it does not begin at main and we'll see that during this course But there's some special things that go on and we'll kind of break it down and see what actually happens, but You know your code starting to execute at main It's just a nice happy little lie that we tell you to make your life a bit easier before you take this course And we you know we destroy you so get ready for that So I'm just kidding that this course is actually pretty good. It's actually interesting to break it open see what actually goes on So if you're the operating system what you have to do is you have to keep track of registers for all your processes you have to be able to switch between running processes and Since the operating system controls everything you actually get to pick what runs So if you do this poorly your system it might look unresponsive even though there's actually nothing wrong with it So it's a really important thing to do and then you also have to decide When to switch and what to switch to so those are kind of big engineering trade-offs There's no perfect answer to that, but we'll see different algorithms You can do to accomplish that and see what actually goes on So next is talking about memory. So Let's assume that we just have a system with like 16 gigs of RAM and We didn't have an operating system. Well, we could ahead of time Just divide the RAM into like some sections. We can say hey operating system you get the first four gigs Let's say LibreOffice you get the next four gigs and then Firefox You know your web browser you eat up lots of RAM. So we'll give you eight gigs so you could like go ahead and Set this as a fixed memory thing You're like set this as your memory layout for your physical memory ahead of time But this is really really really inflexible because if LibreOffice Hey if Firefox isn't even open well LibreOffice can't use more than four gigs of RAM because Firefox could open So it needs to leave that space open and if LibreOffice, you know went up here and started You know writing into this RAM then oh no it might overwrite something with Firefox and then you just have a whole mess and then this gets even worse and worse if You want to run multiple applications, right? So if you have your program you need a space in memory and then you don't even know how many programs You might run ahead of time. So this just seems like a really really terrible idea that isn't very flexible So the concept of virtualization is one of the fundamental things of this course and it basically Fools something into thinking it has all the resources So we'll get into it kind of midway through the course But there is virtual memory so each process thinks it has access to all of the memory on your machine And it is the operating systems job to maintain that lie So both LibreOffice and Firefox Could actually start executing at the same virtual memory address So it looks like the same memory address But in the Firefox process it's Firefox's code and in the LibreOffice process It's LibreOffice's code, but it is the same address if you were to like, you know print out the address of main Assuming it starts there. It would be the same address for both them, but they both contain different things So we'll get into that like kind of midway through the course, but this virtualization concept doesn't end up memory You can have virtual machines And so on and so forth. So you can just virtualize this all the way to the machine instead of just memory So this is kind of what I said about virtual memory each process believes it has access to everything and Different processes can have the same starting address with different contents So if you're the operating system, you have to map be able to map virtual memory to physical memory And we'll see this when we get to that then you have to keep track of memory usages like allocations and Deallocations and then you actually have to happen Handle out of memory scenarios So each process thinks it has access to all the memory, but your system has a finite amount of memory So if all the processes use all the memory then it goes out of memory and you have to do something about it spoiler alert the easiest thing to do is just to kill the thing with the Highest RAM usage and then hey it frees your memory. So that's kind of one of the things you can look forward to So powerful concept Processes kind of implement virtual CPU with a set of registers There's virtual memory and then like I said before there's virtual machines as well. So that virtualizes a You know a whole operating system running on computer instead of just one-to-one You can have one physical machine running multiple virtual machines and then the next topic is going to be concurrency and this is typically where People have the most amount of trouble with this course because So far has it wait first thought has anyone ever used threads before? Okay, so some people have used threads before a bit So you will actually get very familiar with threads because Some of you have this nice thing where hey I start executing at main and it keeps on going and everything happens in order and it's all nice Well that illusion is now dead because you'll have multiple things running in the same process at the same time And you have to manage all of it and it can lead to very very hard to debug Things so like even in the Linux kernel there have been bugs that have survived Seven nine years before anyone actually found them because they don't happen all the time And it might take several generations of hardware to even discover the bug So those are the type of things you have to look forward to so You also want the operating system also has to handle this Just at a base level because we have multiple applications running at once especially if you have a multi-core CPU which everyone does by now and you also want Applications to do multiple things at once which you might not have experience with yet But you will get there and that is a way to actually Utilize all of your hardware and use all of your CPU resources which again Doing this and maximizing this will make you a much better programmer So we don't want applications completely isolated from each other either We want them to be able to communicate in some way because an application that doesn't communicate at all Just kind of heats up your Computer heats up the air and doesn't do anything useful because even your first hello world application That does some communication and prints out hello world do something So you want applications to be able to communicate and we'll see that So of course running one application at a time isn't a great experience Sorry, there's a question Are the memories virtual address or physical so the memory you've been dealing with so far Whenever you run anything and you print the address of something it has all been virtual addresses so far And you have not known the wiser so everything you've dealt with is virtual memory even though you didn't know it yet so well, we will figure out that lie and actually Knowing that will make some concepts, you know much much easier So Operating system has to allow multiple Executions at once and actually do it safely and we'll get into some reasons why or how you would actually do that And you have to manage abstractions for different kinds of inter process communication So that's just a fancy word of saying two processes need to talk to each other somehow So even if you print hello world something ran your program and then got the information from it So there is a communication between two programs even though you only wrote one of them And that is called IPC or inter process communication And then of course if you can communicate you actually need to make sure that things only communicate with things they should be communicating with and That will involve permission checking access control things like that that we'll see And then finally we need some persistence So persistence is just data that's accessible between boots and the main thing you have for that is a Hard drive which has a file system on it So a file system just specifies how to organize data on a storage medium which is typically just flash memory for most people and the operating system just has to store and retrieve data and also ensure the integrity of it because if you Wrote your meme to your hard drive. You want to be able to access it later without it being corrupted. So you can enjoy it later, right? so Another the first abstraction that you've all used before even though you might not have realized it is a file descriptor and They abstract both communication and persistence So what they generalize is just anything that can be written to or read from So file descriptor, it's just a number So just some number that you don't know what it represents and you say I want to write some bytes there Or I want to read some rights from whatever that represents and the abstract is you don't have to know what it actually represents it's just a number and You if you write to it it writes to whatever that represents so The operating system has to deal with managing to actually writing those bytes to whatever it represents being it might be a file It might be you know another Application listing it might be your web browser Doesn't matter. They're all going to use this kind of interface and everything's represented by a file descriptor So it could represent a file or you know network connection, whatever So this is to give you a little taste of what to expect in this course So if you have logged on to the Git lab server, let's see. Oh No, there we go. See I had something prepared just in case But I probably should use it. Okay, so if you log into the Git lab thing, it will look somewhat like this Although you won't you'll see about half of these so there'll be some examples So I'll post all of the code examples there so you can run them play with them break them at your will and then the materials You probably won't care about that. That's like the actual source code to the slides But you'll generally probably just want the examples one so in here already There is this 01 overview that will have the code will get into so This is an example of kind of the code will be looking at oh God, can anyone read that like midway? Probably not a put your hands up if you can't actually read that Okay, so like the first three rows cool That better All right. Yeah, hands up if you can read it Yeah All right more thumbs up. Okay. I guess we're here Okay, so This is Just a simple way to open a file So if you haven't written C before if this doesn't make any sense to you then you should probably Review C but in here we have main it has arguments So we're gonna check that it has exactly two arguments if it doesn't Will return an error code so we'll be learning what these error codes are It's just a special number that the operating system uses don't worry about if you don't know what that actually is It's but it's just a number and then we will Use a function called open which returns a file descriptor Which is what I just kind of alluded to and all it is is a number we can read and write from so it just opens The first argument which is hopefully a file and opens it as read only and we get a file descriptor back if you actually read the manuals for this so You through the course you will have to read the manual. So of course if you don't know what the functions do That's okay. You get to read it later But open returns a file descriptor if it's successful if and then return some special value if there's an error That we can check for so we check for that. Otherwise. There's no error And then after that we create an array of four bytes and Then call this read function which takes a file descriptor and that is reading bytes from something So if I read bytes from a file descriptor and I say I want to read four bytes What the operating system will do? So this is a Function that will see how but it will kind of call the operating system So it gets four bytes back and fills up that buffer So if we go through it here and it returns a number of bytes read So if we go through all the bytes read We can read them byte by byte and actually print them out So what this will do is print out that byte as a normal character if you can actually represent as a character Otherwise it will spit out its hex value and hopefully you know hex values if you don't you will So that's all this does so it prints the first four bytes of a file and If we go ahead and run it So throughout all of this so there's also these instructions on the slide So we use Meason as our build system So the steps will always be like this. So you set up a build directory and it's already set up So it doesn't do anything and then you need to compile your project and tell it where your build directory is and Then goes ahead and builds it. So we made an executable called read for bytes and Read for bytes. Whoops. It is in build So read for bytes just takes a single argument that is a file So I can be a bit meta about it and read the first four bytes of my C file So the first four bytes of my C file. It starts off with an include So the first few bytes of my include file are you know pound INC so that's the first bit of include So with this little tool we get to have some fun with it because you can start poking at a bunch of random things so Everyone's used LS before I hope so I can poke it at LS because it's just a file And I can see what it is. You would assume it's just a bunch of garbage machine code, right? Well, the first bytes kind of garbage 7f doesn't mean much to you, but the rest of it is ELF hmm interesting you can actually read it and that is not a coincidence and oddly enough if I Browse other files. I don't know you name Huh it also starts with that And also if I go really meta and I See the executable that I'm executing. Well, it's also that Wow, so we'll get into that in the next lecture So then finally most kernel code is going to be device drivers Which is like 80 plus percent of real kernel code like real operating system code Generally, they're really really boring and involves reading a bunch of specifications Realizing they're wrong and trying to do some hacky workarounds about it There's generally inconsistencies between them and it's just a big pain So if you get into this you might be stuck doing this But try and do the fun core work that we'll go into in this course And don't be stuck doing this because you're just reading a bunch of dry tech specs and realizing that they're completely wrong Because if you go and look at some Linux code This is an actual comment in the source code making fun of the QA process between some BIOS you know developers and a BIOS is just Some baseline code your system implement So you can build an operating system on top of it where it does some it stands for basic input Input output system, so I'll do some basic input to output So your operating system has to use it and this is the joke for their QA process Where they're just a bunch of people that just write some code Check if it compiles if it doesn't they just write some more code Soon as it compiles and you can see how old it is it just checks if it boots windows 98 and as soon as it boots Windows 98 doesn't matter what the rest of code works or if it was a fluke or anything They just ship it and that's the code and then it is now your problem to deal with so you can see that Hey, you know When it was first released it was really it was bad And they had to do some really hacky work around and then a month later They actually you know did some QA and actually fix it a bit So it took about a month to fix it But the problem with hardware is as soon as you ship it you can't change it So you actually have to address it in software and work around it and it's quite awful So hopefully you can avoid doing that so as the teaser to the next lecture, so just to give you a Little taste of this course this is actually hello world. So hopefully you can read hex So yeah, oh that was in question. Okay, so hopefully you can read hex so Here This is actually hello world I don't know why people teach you this and see you're like python or something like this This is the shortest hello world. You'll ever see that actually executes. So this is a hundred and sixty-eight bite So each of those is a single bite and believe it or not. This actually works and I will demonstrate it so in here in Yours so it might not actually work for yours So there is a file called hello world Linux a arch 64, which is arm and we can see here that it is a hundred and 68 bytes and if I go and execute it It prints hello world Which is kind of cool? ah clubs, which is really really confusing so Everyone's been told so far like see is low level. It's got no overhead. It's great, right? Okay. Well Whoops, let's see Okay, I'll just write this fast. So let's write the easiest hello world. We'll see so include standard h it main Let's be nice and actually return whoops Let's be nice and return zero So there's my hello source file. I guess it's how big that is by itself So my source file it's 74 bytes pretty good Now if I go ahead and compile it Let's see how low overhead C is any guesses as to how big it is so hands up if it's you know Thousand under thousand They've got a few under two thousand Okay sees pretty good under five thousand Under ten thousand Under twenty thousand Okay under one gigabyte Okay, that's still not everyone's hands up like if people are asleep geez okay, so Given that it like probably around like five to ten thousand So if I look at it my hello world is like 14,000 geez What low overhead of C mines like mine's so much smaller than that and what's it do? Doesn't do anything special of this Prince. Hello world. How's that any different than mine? Yeah, it's fine so Yeah, try that like Javascript or something like that or Python gets way worse so What I'll leave you at is that there's three major concepts in this course So you'll learn how the following applies to operating systems and also figure out that hello world example virtualization concurrency and persistence and just remember I'm pulling for you. We're all in this together