 to the course design and engineering of computer systems. My name is Maitili Vootkuru, I am a faculty member in the department of computer science and engineering at IIT Bombay. And I mainly work in the areas of computer systems and networking. In this course what I would like to cover with you all is how computer systems work. So what are computer systems? It is nothing but just a group of computers that together provide some functionality. For example an e-commerce website is a group of computers that will provide you functionality like you know buying products online, shipping them to you, collecting your payments and so on or video streaming website basically is a group of computers that store movies and stream them to you on demand or a ticket reservation website or a mapping service that will tell you you know real time information about which routes are good to go from one place to the other and what is the traffic information and so on. So all of you must have you know used or interacted with computer systems in your day to day lives. In this course what we are going to try to see is how these computer systems are built. So every computer system is built to satisfy certain functionality, certain functional requirements of you know it has to provide so and so service to users. In addition to the functional requirements we also have certain non-functional requirements or expectations like you know a website should be able to handle a large volume of traffic. It should return a response to us very quickly and even if failures happen it should not lose our data. For example your bank cannot say oh no I lost your account information because some failure happened or you know when you try to book a ticket on a website it should not take you one hour to book the ticket. So we have all of these non-functional requirements also in addition to the functionality that a computer system is supposed to provide. So in this course we are going to see how you design and build computer systems in order to guarantee the functional and the non-functional requirements. So we will start with the basic introduction to computer hardware and then we will understand how the operating system which is the layer on top of the hardware manages all of this hardware and then we will understand how user applications are built on top of the operating system. We will see how you build an application using multiple sub-components or subsystems and how all of these subsystems in an application interact with each other and you know how they interact over the network, how the computer networking works, how the internet works and then how do you measure the performance of a computer system, how do you improve the performance of a computer system, how do you design a computer system so that it is robust to failure so that it has a certain amount of reliability all of these different concepts we are going to study in this course. And as you might have seen from this introduction this course actually intersects with many other courses in a typical computer science curriculum like for example, computer architecture, operating systems, networking, virtualization, cloud computing, distributed systems, performance analysis. So in this course we have components from all of these other courses put together in order to give you this end to end view of how a computer system works. So we will not assume any prerequisites of any of these courses and if you have just taken a basic introductory programming data structures course you should be all set to take this course. We are not assuming any other prerequisites but if you have done any of these other courses that intersect with the contents of this course then it is also fine you can still take this course because you will still get an end to end picture that may be missing in the individual courses that I have listed. So overall computer systems is a very exciting field I personally love it and I enjoy building systems as well as teaching about computer systems and you know as you look around everywhere you will be amazed that you know what technology has done to us in our day to day lives and a large part of that is due to all the new ideas that have come up in the area of computer systems. So as we go along in this course we are going to learn some of these ideas and you can see that a lot of the ideas are you know basically common sense and you know the same common sensical idea can be found across different components in a computer system. So we will try to study these high level design principles you know one of the things I will try to do in this course is to isolate and you know point out to you these high level design principles that are used everywhere widely in computer systems. So that this is not just about giving you information about how a computer system works but rather pointing out all of these design principles to you so that if you have to design a computer system in the future you have all the necessary tools at your disposal in order to do that on your own in your future jobs and careers. So that is the goal of this course both to help you appreciate how real world systems work today as well as give you enough ideas so that you can go out and design computer systems on your own in the future. So I hope you all will join me for this course and I hope we will have a good time together and thank you everyone.