{
    "links":{},
    "photo":"https://s3.amazonaws.com/coursera/topics/hardware/large-icon.png",
    "courseFormat":"Video lecture topics. Written homework and programming assignments. Only\nthe programming assignments will be graded. The written assignments provide\nstudents with a sense for the kinds of topics and analysis are considered\nmost important.",
    "smallIcon":"https://d1z850dzhxs7de.cloudfront.net/topics/hardware/small-icon.hover.png",
    "universityLogo":"",
    "video":"",
    "smallIconHover":"https://d1z850dzhxs7de.cloudfront.net/topics/hardware/small-icon.hover.png",
    "shortDescription":"Examines key computational abstraction levels below modern high-level languages. From Java/C to assembly programming, to basic processor and system organization.",
    "id":122,
    "estimatedClassWorkload":"10-15 hours/week",
    "universityLogoSt":"",
    "targetAudience":0,
    "courseSyllabus":"This course should develop students\u2019 sense of \u201cwhat really happens\u201d when\nsoftware runs \u2014 and convey that this question can be answered at several\nlevels of abstraction, including the hardware architecture level, the assembly\nlevel, the C programming level and the Java programming level. The core\naround which the course is built is C, assembly, and low-level data representation,\nbut this is connected to higher levels (roughly how basic Java could be\nimplemented), lower levels (the general structure of a processor), and\nthe role of the operating system (but not how the operating system is implemented).\nFor (computer science) students wanting to specialize at higher levels\nof abstraction, this could in the extreme be the only course they take\nthat considers the \u201cC level\u201d and below. However, most will take a subset\nof Systems Programming, Hardware Design and Implementation, Operating Systems,\nCompilers, etc. For students interested in hardware, embedded systems,\ncomputer engineering, computer architecture, etc., this course is the introductory\ncourse after which other courses will delve both deeper (into specific\ntopics) and lower (into hardware implementation, circuit design, etc.).\nThe course has three principal themes:\n<ul>\n    <li>Representation: how different data types (from simple integers to arrays\n        of data structures) are represented in memory, how instructions are encoded,\n        and how memory addresses (pointers) are generated and used to create complex\n        structures.</li>\n    <li>Translation: how high-level languages are translated into the basic instructions\n        embodied in process hardware with a particular focus on C and Java.</li>\n    <li>Control flow: how computers organize the order of their computations,\n        keep track of where they are in large programs, and provide the illusion\n        of multiple processes executing in parallel.</li>\n</ul>At the end of this course, students should:\n<ul>\n    <li>understand the multi-step process by which a high-level program becomes\n        a stream of instructions executed by a processor;</li>\n    <li>know what a pointer is and how to use it in manipulating complex data\n        structures;</li>\n    <li>be facile enough with assembly programming (X86) to write simple pieces\n        of code and understand how it maps to high-level languages (and vice-versa);</li>\n    <li>understand the basic organization and parameters of memory hierarchy and\n        its importance for system performance;</li>\n    <li>be able to explain the role of an operating system;</li>\n    <li>know how Java fundamentally differs from C;</li>\n    <li>grasp what parallelism is and why it is important at the system level;\n        and</li>\n    <li>be more effective programmers (more efficient at finding bugs, improved\n        intuition about system performance).</li>\n</ul>Topics:\n<br>\n<ul>\n    <li>Number representation</li>\n    <li>Assembly language</li>\n    <li>Basics of C</li>\n    <li>Memory management</li>\n    <li>Operating-system process model</li>\n    <li>High-level machine architecture</li>\n    <li>Memory hierarchy</li>\n    <li>Implementation of high-level languages</li>\n</ul>",
    "aboutTheCourse":"This course examines key computational abstraction levels below modern\nhigh-level languages; number representation, assembly language, introduction\nto C, memory management, the operating-system process model, high-level\nmachine architecture including the memory hierarchy, and how high-level\nlanguages are implemented. We will develop students\u2019 sense of \u201cwhat really\nhappens\u201d when software runs \u2014 and that this question can be answered at\nseveral levels of abstraction, including the hardware architecture level,\nthe assembly level, the C programming level and the Java programming level.\nThe core around which the course is built is C, assembly, and low-level\ndata representation, but this is connected to higher levels (roughly how\nbasic Java could be implemented), lower levels (the general structure of\na processor and the memory hierarchy), and the role of the operating system\n(but not how the operating system is implemented).",
    "largeIcon":"https://d15cw65ipctsrr.cloudfront.net/26/ec7a70352d11e494bcf927fb09cbc9/large-icon.png",
    "suggestedReadings":"Text are recommended but not required:\n<p>\n<a href=\"http://csapp.cs.cmu.edu\">Computer Systems: \u000bA Programmer\u2019s Perspective, 2nd Edition (CS:APP2e)</a>\n    <br>Randal E. Bryant and David R. O\u2019Hallaron\n    <br>Prentice-Hall, 2010</p>\n<p>\n<a href=\"http://www.mypearsonstore.com/bookstore/computer-systems-a-programmers-perspective-9780136108047\">Purchase direct from Pearson</a>\n    <br>\n<a href=\"http://www.coursesmart.com/0132130661/?a=1773944\">Purchase eBook from CourseSmart</a>\n    <br>\n<a href=\"http://chggtrx.com/click.track?CID=267582&AFID=301076&ADID=1088031&SID=hwswinterface&isbn_ean=9780136108047\">Purchase print or Kindle edition from Amazon.com</a>\n\n</p>\n<p>Students are also encouraged to have access to a good C reference \u2013 any\n    will do \u2013 there are many available on the web as well:</p>\n<p>The C Programming Language (Kernighan and Ritchie)\n    <br>C: A Reference Manual (Harbison and Steele)</p>",
    "videoId":"",
    "faq":"",
    "shortName":"hwswinterface",
    "instructor":"Gaetano Borriello and Luis Ceze",
    "name":"The Hardware/Software Interface",
    "subtitleLanguagesCsv":"",
    "recommendedBackground":"Introductory programming in C or Java as well as familiarity with binary numbers.<br>",
    "aboutTheInstructor":"<img src=\"https://s3.amazonaws.com/coursera/topics/hardware/instructor-1.jpg\" style=\"width: 200px;\" class=\"coursera-instructor-thumb\"> Gaetano Borriello is Jerre D. Noe Professor of Computer Science & Engineering at the University of Washington with adjunct appointments in Electrical Engineering, Human Centered Design & Engineering, and the Information School. His PhD is in Computer Science from the University of California at Berkeley. He has received the UW Distinguished Teaching Award and is a Fellow of both the ACM and IEEE. He is also a Fulbright Scholar and a UC Berkeley CS Division Distinguished Alumni. Gaetano Borriello\u2019s career started in the areas of integrated circuits for networking, automatic synthesis of digital circuits, reconfigurable hardware and embedded systems development tools. Borriello served as principal investigator for the Portolano Expedition, a DARPA-sponsored investigation on invisible computing. As founding director of Intel Research Seattle, he launched elder care projects (sensor-rich homes and wearable devices) to help the elderly remain home longer and location-aware computing (the PlaceLab project) where he expanded the use of Wi-Fi to enhance indoor location sensing. Currently, he is directing efforts to apply mobile technology to problems in public health in low resource settings. His group\u2019s open-source mobile data collection tools, Open Data Kit, is used by programs in dozens of countries and has thousands of users in applications ranging from public health, to documentation of human rights violations, to environmental monitoring. <br><br> <img src=\"https://s3.amazonaws.com/coursera/topics/hardware/instructor-2.jpg\" style=\"width: 200px;\" class=\"coursera-instructor-thumb\">Luis Ceze is an Associate Professor in the Computer Science and Engineering Department at the University of Washington. His research focuses on computer architecture, programming languages and OS to improve the programmability, reliability and energy efficiency of multiprocessor systems. He has co-authored over 60 papers in these areas, and had several papers selected as IEEE Micro Top Picks and CACM Research Highlights. He participated in the Blue Gene, Cyclops, and PERCS projects at IBM and is a recipient of several IBM awards. He is also a recipient of an NSF CAREER Award, a Sloan Research Fellowship, a Microsoft Research Faculty Fellowship and is a Kavli Frontiers of Science Fellow. He co-founded Corensic, a UW-CSE spin-off company. He has been elected \"teacher of the year\" by UW-CSE undergrad students in 2012. He cooks and eats in his free time."
}