O S E. Introduction. The Operating-System Design Dilemma. Trivial Pursuit in Computer Science. General Purpose System



Similar documents
The programming language C. sws1 1

For a 64-bit system. I - Presentation Of The Shellcode

Lecture 7: Machine-Level Programming I: Basics Mohamed Zahran (aka Z)

Lecture 27 C and Assembly

C++ INTERVIEW QUESTIONS

How To Write Portable Programs In C

Sources: On the Web: Slides will be available on:

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

Informatica e Sistemi in Tempo Reale

Bachelors of Computer Application Programming Principle & Algorithm (BCA-S102T)

Simple C Programs. Goals for this Lecture. Help you learn about:

CS61: Systems Programing and Machine Organization

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

CSC230 Getting Starting in C. Tyler Bletsch

Operating System Structures

Chapter One Introduction to Programming

Last Class: OS and Computer Architecture. Last Class: OS and Computer Architecture

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Instruction Set Architecture (ISA)

The C Programming Language course syllabus associate level

PART-A Questions. 2. How does an enumerated statement differ from a typedef statement?

Embedded Software Development

Assembly Language: Function Calls" Jennifer Rexford!

Habanero Extreme Scale Software Research Project

Simple C++ Programs. Engineering Problem Solving with C++, Etter/Ingber. Dev-C++ Dev-C++ Windows Friendly Exit. The C++ Programming Language

CS3600 SYSTEMS AND NETWORKS

Compiler Construction

Chapter 4: Computer Codes

Number Representation

DNA Data and Program Representation. Alexandre David

Chapter 7D The Java Virtual Machine

Motorola 8- and 16-bit Embedded Application Binary Interface (M8/16EABI)

OPERATING SYSTEMS MEMORY MANAGEMENT

Outline. hardware components programming environments. installing Python executing Python code. decimal and binary notations running Sage

Construction Principles and Design Patterns. Flyweight, Bridge, Builder

64-Bit NASM Notes. Invoking 64-Bit NASM

Comp151. Definitions & Declarations

WinProladder software package

Implementation Aspects of OO-Languages

Compiler and Language Processing Tools

Glossary of Object Oriented Terms

File Management. Chapter 12

C++ Programming Language

Pemrograman Dasar. Basic Elements Of Java

C++ Programming: From Problem Analysis to Program Design, Fifth Edition. Chapter 3: Input/Output

Chapter 11 I/O Management and Disk Scheduling

Example of Standard API

Off-by-One exploitation tutorial

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

13 Classes & Objects with Constructors/Destructors

Lecture 7: Programming for the Arduino

El Dorado Union High School District Educational Services

An Incomplete C++ Primer. University of Wyoming MA 5310

Applying Clang Static Analyzer to Linux Kernel

A deeper look at Inline functions

SQLITE C/C++ TUTORIAL

Objectives. Chapter 2: Operating-System Structures. Operating System Services (Cont.) Operating System Services. Operating System Services (Cont.

ASSEMBLY LANGUAGE PROGRAMMING (6800) (R. Horvath, Introduction to Microprocessors, Chapter 6)

Encryption Wrapper. on OSX

1/20/2016 INTRODUCTION

CISC 181 Project 3 Designing Classes for Bank Accounts

2011, The McGraw-Hill Companies, Inc. Chapter 3

Memory management basics (1) Requirements (1) Objectives. Operating Systems Part of E1.9 - Principles of Computers and Software Engineering

Course Name: ADVANCE COURSE IN SOFTWARE DEVELOPMENT (Specialization:.Net Technologies)

IS0020 Program Design and Software Tools Midterm, Feb 24, Instruction

Object Oriented Software Design II

Lecture 6: Introduction to MPI programming. Lecture 6: Introduction to MPI programming p. 1

Binary Code Extraction and Interface Identification for Security Applications

Operating System Components

Information Technology Security Evaluation Criteria. ITSEC Joint Interpretation Library (ITSEC JIL)

CSC 2405: Computer Systems II

Next, the driver runs the C compiler (cc1), which translates main.i into an ASCII assembly language file main.s.

Last Class: OS and Computer Architecture. Last Class: OS and Computer Architecture

Machine Programming II: Instruc8ons

Semantic Analysis: Types and Type Checking

Software Testing. Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program.

Programming Languages

Run-time Variability Issues in Software Product Lines

The little endl that couldn t

CSCI 3136 Principles of Programming Languages

Format string exploitation on windows Using Immunity Debugger / Python. By Abysssec Inc

6.S096 Lecture 1 Introduction to C

Building Applications Using Micro Focus COBOL

Numbering Systems. InThisAppendix...

OKLAHOMA SUBJECT AREA TESTS (OSAT )

Language Processing Systems

PROBLEM SOLVING SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON

X86-64 Architecture Guide

OPERATING SYSTEM - MEMORY MANAGEMENT

How To Use The C Preprocessor

Chapter 1. Dr. Chris Irwin Davis Phone: (972) Office: ECSS CS-4337 Organization of Programming Languages

7.1 Our Current Model

Parrot in a Nutshell. Dan Sugalski dan@sidhe.org. Parrot in a nutshell 1

COS 217: Introduction to Programming Systems

Jonathan Worthington Scarborough Linux User Group

Programming from the Ground Up. Jonathan Bartlett

Traditional IBM Mainframe Operating Principles

Contents. Java - An Introduction. Java Milestones. Java and its Evolution

Java Interview Questions and Answers

Transcription:

O O S E E Introduction The Operating-System Design Dilemma Clearly, the operating system design must be strongly influenced by the type of use for which the machine is intended. Unfortunately it is often the case with general purpose machines that the type of use cannot easily be identified; a common criticism of many systems is that, in attempting to be all things to all individuals, they end up being totally satisfactory to no-one. [2] Operating-System Engineering Operating-System Engineering Introduction 2 Trivial Pursuit in Computer Science General Purpose System Q: What is an elephant? A: A mouse with an operating system. being prepared on all eventualities Eier legende Wollmilchsau e.g., enforcing scheduling protection security in a single - process program user environment optimized towards the most probable and common standard use case at the cost of all the cases that deviate from the artificially defined norm no (system) function is free of charge not even a sleeping beauty Operating-System Engineering Introduction 1 Operating-System Engineering Introduction 3

ÙÒ Ñ ¹ ÒÖÑ ÐÙ Ø Ö º Ò Ð ºÓÖ ¾º º¼¹Ø ؽ¹ ¹ÖÑ ½¹Öо ÖÑÚ Ð Ä ÒÙÜ Ó ³Ñ Ò µßôö ÒØ Ò µ г ÐÐÓº ¹Ç ¹ ÐÐÓº ¹ Ø Ø ¹Ó ÐÐÓ ÐÐÓºÓ º» ÐÐÓ Ð ¹Ð ÐÐÓ ½ Ù Ø Ù Ö Å Ö ¼ ½ ÐÐÓ ¹ÖÛÜÖ¹ÜÖ¹Ü ½ Ù Ø Ù Ö Å Ö ¼ ½ ÐÐÓº ½ Ù Ø Ù Ö ½ Å Ö ¼ ½ ÐÐÓºÓ Þ ÐÐÓ ÐÐÓºÓ ¾¼ ¾ ¾ ¾¾½ ¾ ÐÐÓ ¾½ ¼ ¼ ¾ ¾ ÐÐÓºÓ ¾ ÙÒ Ñ ¹ ÒÖÑ Ö Ö ¾º¾º½ ¹ ÐÔ Ä ÒÙÜ Ó ³Ñ Ò µßôö ÒØ Ò µ г ÐÐÓº ¹Ç ¹ ÐÐÓº ¹ Ø Ø ¹Ó ÐÐÓ ÐÐÓºÓ ¼ ÐÐÓ ½ Ð ¹Ð ÐÐÓ ½ ÛÓ Ú ¾ ¾¾ Å Ö ½½ ÐÐÓ ¹ÖÛÜÖÛÜÖ¹Ü ½ ÛÓ Ú Å Ö ½½ ÐÐÓº ¹ÖÛ¹ÖÛ¹Ö¹¹ ½ ÛÓ Ú ½ Å Ö ½½ ÐÐÓºÓ ¹ÖÛ¹ÖÛ¹Ö¹¹ ¾ Þ ÐÐÓ ÐÐÓºÓ ½ ¼ ¼ ÐÐÓ ¾ ½ ¼ ¼ ¾ ÐÐÓºÓ ¾ ÙÒ Ñ ¹ ÒÖÑ Ø ØÐ Ö ¾º¾º½ ÔÖ ÔÔ Ä ÒÙÜ Ó ³Ñ Ò µßôö ÒØ Ò µ г ÐÐÓº ¹Ç ¹ ÐÐÓº ¹ Ø Ø ¹Ó ÐÐÓ ÐÐÓºÓ ¼ ÐÐÓ ½ Ð ¹Ð ÐÐÓ ½ ÛÓ Ú ½¼ ½ ¾¾ Å Ö ½½ ¾ ÐÐÓ ¹ÖÛÜÖ¹ÜÖ¹Ü ½ ÛÓ Ú Å Ö ½½ ¾ ÐÐÓº ½ ÛÓ Ú Å Ö ½½ ¾ ÐÐÓºÓ ¾ Þ ÐÐÓ ÐÐÓºÓ ¼ ¼ ¾ ¾ ÐÐÓ ¾ ¼ ¼ ¼ ¼ ÐÐÓºÓ ¼ ÙÒ Ñ ¹ ÒÖÑ Ò Ù º ÙÒ Ù ËÙÒÇË Ó ³Ñ Ò µßôö ÒØ Ò µ г ÐÐÓº ¹Ç ¹ ÐÐÓº ¹ Ø Ø ¹Ó ÐÐÓ ÐÐÓºÓ ¼ ÐÐÓ ½ Ð ¹Ð ÐÐÓ ½ ÛÓ Ú ¾ ¼ Å Ö ¾¼¼½ ÐÐÓ ¹ÖÛÜÖ¹ÜÖ¹Ü ½ ÛÓ Ú Å Ö ¾¼¼½ ÐÐÓº ½ ÛÓ Ú ¼ Å Ö ¾¼¼½ ÐÐÓºÓ ¾ Þ ÐÐÓ ÐÐÓºÓ ½ ¼ ¾ ½ ¾ ÐÐÓ ½ ¼ ¼ ¼ ¾ ÐÐÓºÓ General Purpose System General Purpose Function General Purpose Function (contd.) No Isolated Phenomenon...System provides general services for a broad range of applications shows up with a rich set of system functions trying to cover all of the demands stated by the various user programs aims at providing users with the best possible compromise there can t be only one optimal solution to a number of various problems follows some sort of black-box model by its (mostly) fixed system interface... Function same as above, but services become attributes of a single function Operating-System Engineering Introduction 4 Operating-System Engineering Introduction 6 General Purpose Function printf(3) General Purpose Function (contd.) Memory Footprints Linux hawaii.cs.uni-magdeburg.de 2.2.14 i686 wosch@hawaii 38> echo main(){printf("\n"); > hello.c wosch@hawaii 39> gcc -O6 -c hello.c; gcc -static -o hello hello.o -rwxr-xr-x 1 wosch ivs 932099 Dec 1 11:08 hello* -rw-r--r-- 1 wosch ivs 33 Dec 1 11:06 hello.c -rw-r--r-- 1 wosch ivs 908 Dec 1 11:07 hello.o 195562 5064 3340 203966 31cbe hello 29 0 0 29 1d hello.o Size (in Bytes) Program Linux Solaris Windows i686 arm ppc alpha sparc i586 hello 203 966 221 998 245 452 453 898 183 373 30 935 hello.o 29 42 60 62 38 29 % 0.014 0.018 0.024 0.013 0.02 0.094 Operating-System Engineering Introduction 5 Operating-System Engineering Introduction 7

General Purpose Considered Harmful? The Hack as a Reference write(2) it depends the interface alone is not always the cause of all evil much more crucial tends to be the function s internal software structure degree of modularization, modul interdependencies, uses relation,... black-boxing aims at hiding exactly these internals from the user much in the same way as an abstract data type (ADT) [1] the desired features may be present internally, but they remain hidden one might expect puts(3) to be the streamlined printf(3) alternative Linux hawaii 2.2.14 i686 wosch@hawaii 38> echo main(){write(1,"\n",13); void _start(){main( );_exit(0); > hello.c wosch@hawaii 39> gcc -O6 -c hello.c; gcc -nostartfiles -static -o hello hello.o -rwxr-xr-x 1 wosch ivs 3927 Oct 18 12:33 hello* -rw-r--r-- 1 wosch ivs 70 Oct 18 12:33 hello.c -rw-r--r-- 1 wosch ivs 1016 Oct 18 12:33 hello.o 202 0 4 206 ce hello 74 0 0 74 4a hello.o Can be shrunk to 174 bytes at the expense of Segmentation fault (core dumped)! Operating-System Engineering Introduction 8 Operating-System Engineering Introduction 10 Special Purpose Function puts(3) Where the Shoe Pinches Linux hawaii.cs.uni-magdeburg.de 2.2.14 i686 wosch@hawaii 38> echo main(){puts(""); > hello.c wosch@hawaii 39> gcc -O6 -c hello.c; gcc -static -o hello hello.o -rwxr-xr-x 1 wosch ivs 932715 Mar 7 16:16 hello* -rw-r--r-- 1 wosch ivs 30 Mar 7 16:16 hello.c -rw-r--r-- 1 wosch ivs 908 Mar 7 16:16 hello.o 195759 5076 3360 204195 31da3 hello 28 0 0 28 1c hello.o exposition of the system architecture...12 structure of the object modules...13 function of the binder...16 capabilities of the compiler... 18 features of the programming language...19 Operating-System Engineering Introduction 9 Operating-System Engineering Introduction 11

System Architecture printf(3) supports formatted I/O in many respects: 1. assortment of plain data types and sizes + int, unsigned, float, char, char*; short, long, double 2. various kinds of numbering schemes + dual, octal, decimal, hexa-decimal 3. different formats + left/right aligned, user-defined field widths not every application exploits all these features Hello World! : a left-aligned character string (char*) but nonetheless, every application is charged with all these features foo.cc example of a source-module structure similar to printf(3) #define LINE_SIZE 64 char line[line_size]; int slot; void resetline () { for (int i = 0; i < LINE_SIZE; i++) line[i] = \0 ; slot = 0; void flushline () { write(1, line, slot); void writeline (char c) { line[slot++] = c; void putcharacter (char c) { if (slot == LINE_SIZE) { flushline(); resetline(); writeline(c); void putstring (char* line) { char c; while ((c = *line++)) putcharacter(c); void putunsigned (unsigned value) { if (value / 10) putunsigned(value / 10); putcharacter( 0 + (value % 10)); void putnumber (int value) { if (value < 0) { putcharacter( - ); value = -value; putunsigned(value); Operating-System Engineering Introduction 12 Operating-System Engineering Introduction 14 Object Modules foo.{cc,o a single reference to printf(3) entails a number of follow-up references to functions called unconditionally e.g., output of the assembled character buffer using write(2) + to functions called conditionally e.g., output of character - when displaying a negative int + e.g., output of an unsigned after having parsed format %u +. e.g., the option for an int although %i gets never parsed similar holds for variables, constants, and other addressable units monolithic source modules of that kind result in overloaded object modules wosch@hawaii 40> g++ -O6 -fno-rtti -fno-exceptions -fno-inline -c foo.cc wosch@hawaii 41> nm -v foo.o U write 00000000 t gcc2_compiled. 00000000 B line Resolution of symbol putstring FPc causes not only 00000000 T resetline Fv 00000024 T flushline Fv 0000003c T writeline Fc 00000040 B slot 00000058 T putchararacter Fc 00000080 T putstring FPc the (static) binding of function putstring(), and of all other objects/functions (or object modules) directly or indirectly referenced by that source, but also of all unreferenced objects/functions (e.g. putnumber() and putunsigned()) contained in the same object module and this holds recursively. 000000a8 T putunsigned FUi 000000ec T putnumber Fi wosch@hawaii 42> size foo.o 270 0 68 338 152 foo.o Operating-System Engineering Introduction 13 Operating-System Engineering Introduction 15

Binder Compiler the usual case is to consider an entire object module as binding unit not the actually referenced functions/objects of that particular module the consequence is a larger memory footprint p. 15 static binding can benefit from the output generated by a compiler many compilers leave a.size assembler pseudo-instruction p. 17 many assemblers and/or linkers don t make capital out of this dynamic binding seems to be the solution to these problems, if any but at which other costs? even this (nice) feature is not for free! a compile-time option such as -fdismember would be nice to have to cut a single (monolithic) source module in pieces of compilation units each of which being the source-code representation of a binding unit to create object modules which, likewise, export a single reference only thus to outwit the binder and link only the truly referenced parts to archive the (possibly many) slim object modules in a library an extensive local data and control flow analysis alone is not enough functions unreachable inside a source module may be reachable from outside a global analysis is not always feasible and wouldn t solve our problem Operating-System Engineering Introduction 16 Operating-System Engineering Introduction 18 the output of gcc... -S foo.cc?.size leaves the actual object size... to be kept in the symbol table... to be used by the linker...toextractputstring() not every compiler does like this not every assembler notices.size not every linker binds selectively tools that do not work always properly.align 4.globl putstring FPc.type putstring FPc,@function putstring FPc: pushl %ebp movl %esp,%ebp pushl %ebx movl 8(%ebp),%ebx jmp.l21.p2align 4,,7.L18: movsbl %al,%eax pushl %eax call putchararacter Fc addl $4,%esp.L21: movb (%ebx),%al incl %ebx testb %al,%al jne.l18 movl -4(%ebp),%ebx leave ret.lfe5:.size putstring FPc,.Lfe5-putstring FPc Programming Language a problem lies in the overloaded and monolithic interface of printf(3) an actual parameter decides upon which of the many operations to perform a format-string interpreter fetches instructions and reads their operands references to functions implementing the instructions are hard encoded moreover, printf(3) is not a programming-language but a library concept thus, static format-string analysis becomes not the compiler s task consequently, unused functions cannot be eliminated at compile-time an integrated programming system looks nice but is not everybodies darling Operating-System Engineering Introduction 17 Operating-System Engineering Introduction 19

<iostream.h> An Omnipresent Problem #include <iostream.h> void main () { cout << "" << endl; ostream provides specialized operations by overloading operator << users see a function set to choose from the printf(3) and iostream.h examples are no exceptions existing software-development tools leave much to be desired nonetheless is user-friendly software exceedingly required ostream& operator << (const char *s) and endl is all one needs other operators are not used, not referenced and, hence, need not be linked the question is whether or not ostream makes up a single compilation unit at a first glance object-orientation or C++ is really the right way to go a highly modular and application-oriented software structure is needed beginning at the drawing-board where the software design takes place ending on the spot where the software implementation is been carried out certain software-engineering principles must be applied (more) consequently Operating-System Engineering Introduction 20 Operating-System Engineering Introduction 22 class ostream That s the State of the Art Linux hawaii.cs.uni-magdeburg.de 2.2.14 i686 wosch@hawaii 38> vi hello.cc wosch@hawaii 39> g++ -O6 -c hello.cc; g++ -static -o hello hello.o -rwxr-xr-x 1 wosch ivs 1403951 Mar 9 16:13 hello* -rw-r--r-- 1 wosch ivs 73 Mar 9 16:09 hello.cc -rw-r--r-- 1 wosch ivs 1248 Mar 9 16:13 hello.o 300921 19564 3812 324297 4f2c9 hello 44 52 0 96 60 hello.o operating systems provide nice features for optimized storage management virtual memory enables the execution of uncomplete programs, i.e. the programs must not necessarily be entirely present in main memory to be executed. A program s memory footprint varies with the size of the process s working set (of pages). shared libraries work similar. In addition, their use leads to a significant reduction of the disk-memory space occupied by the executable programs. but these are only good for higher-level (system) software abstractions what s about the virtual-memory or shared-library system itself? what s about device driver, process management, scheduling etc.? lower-level (system) software cannot always make a profit from it! Operating-System Engineering Introduction 21 Operating-System Engineering Introduction 23

An Operating-System Problem? Application-Oriented Operating Systems no... it s a general problem concerning all kinds of software :-(... but operating systems are highly sensitive to software deficiencies they generally are of functionally high complexity they come up with a durability that lies in the order of decades they are often expected to show a broad applicability Some users may require only a subset of services or features that other users need. These less demanding users may demand that they are not be forced to pay for the resources consumed by the unneeded features. [3] operating systems are key technology in the past, present, and future Operating-System Engineering Introduction 24 Operating-System Engineering Introduction 26 Preventive Measures Bibliography the design and development of an operating system as a program family establishment of a many-layered functional hierarchy creation of a manufacture of standardized (reusable) units construction of a rich set of small and simple modules a careful use of object orientation in the implementation process composition of abstract data types by means of classes use of inheritance to promote the functional enrichment of the system thriftiness in the employment of late-binding [1] B. H. Liskov and S. Zilles. Programming with Abstract Data Types. SIGPLAN Notices, 9(4), 1974. [2] A. M. Lister and R. D. Eager. Fundamentals of Operating Systems. The Macmillan Press Ltd., fifth edition, 1993. ISBN 0-333-59848-2. [3] D. L. Parnas. Designing Software for Ease of Extension and Contraction. IEEE Transactions on Software Engineering, SE-5(2):128 138, 1979. understand application programs as final operating-system specializations Operating-System Engineering Introduction 25 Operating-System Engineering Introduction 27