SlideShare a Scribd company logo
Faculty of Computer Science Institute for System Architecture, Operating Systems Group




Introduction to Microkernel-
Based Operating Systems
Björn Döbel
Lecture Outline

• Microkernels and what we like about them

• The Fiasco.OC microkernel
      – Kernel Objects
      – Kernel Mechanisms

• OS Services on top of Fiasco.OC
      – Device Drivers
      – Virtualization




TU Dresden, 2012-07-18      Microkernels - Intro
Purpose of Operating Systems

• Manage the available resources
      – Hardware (CPU) and software (file systems)
• Provide users with an easier-to-use interface to access
  resources
      – Unix: data read/write access to sockets instead of writing
        TCP packets on your own
• Perform privileged / HW-specific operations
      – x86: ring0 vs. ring3
      – Device drivers
• Provide separation and collaboration
   – Isolate users / processes from each other
   – Allow cooperation if needed (e.g., sending
     messages between processes)


TU Dresden, 2012-07-18         Microkernels - Intro
Monolithic kernels - Linux


                   Application         Application             Application        Application
User mode

Kernel
mode
                                                   System-Call Interface


                             File Systems     Networking             Processes       Memory
                                  VFS           Sockets              Scheduling    Management
              Linux       File System Impl.    Protocols                IPC       Page allocation
              Kernel                                                              Address spaces
                                   Device Drivers                                   Swapping



                                                      Hardware Access




                                        Hardware
                                        CPU, Memory, PCI, Devices




 TU Dresden, 2012-07-18                       Microkernels - Intro
What's the problem?

• Security issues
      – All components run in privileged mode.
      – Direct access to all kernel-level data.
      – Module loading → easy living for rootkits.

• Resilience issues
      – Faulty drivers can crash the whole system.
      – 75% of today's OS kernels are drivers.

• Software-level issues
      – Complexity is hard to manage.
      – Custom OS for hardware with scarce resources?


TU Dresden, 2012-07-18      Microkernels - Intro
One vision - microkernels

• Minimal OS kernel
      – less error prone
      – small Trusted Computing Base
      – suitable for verification

• System services in user-level servers
      – flexible and extensible

• Protection between individual components
      – systems get
         • More secure – inter-component protection
         • More resilient – crashing component does not
           (necessarily...) crash the whole system

TU Dresden, 2012-07-18      Microkernels - Intro
The microkernel vision

                    Application          Application             Application            Application
User mode


                              File Systems     Networking                Memory
                                   VFS           Sockets               Management
                           File System Impl.    Protocols             Page allocation
                                                                        Swapping
                                     Device Drivers


Kernel
mode
                                                                       Address Spaces
                                  System-Call Interface
                                                                          Threads
                                                                         Scheduling
                                    Hardware Access                          IPC

                    Microkernel




                                       Hardware
                                       CPU, Memory, PCI, Devices




  TU Dresden, 2012-07-18                       Microkernels - Intro
Microkernel-Based Systems

• 1st generation: Mach
      – developed at CMU, 1985 - 1994
      – Foundation for several real systems (e.g.,
        NextOS → Mac OS X)

• 2nd generation: Minix3
      – Andrew Tanenbaum @ VU Amsterdam
      – Focus on restartability

• 2nd/3rd generation:
      – Various kernels of the L4 microkernel family



TU Dresden, 2012-07-18     Microkernels - Intro
The L4 family – a timeline
                                                                                       SeL4
                                                    N1             N2

                                                                                      OKL4v2
Univ. of New South
Wales / NICTA / Open                                               NICTA::
                                                                                             OKL4
Kernel Labs                                                  Pistachio-embedded

                           L4/x86
                                                                                               ABI Specification
      L2, L3       v2               x0            x2/v4
                                                                                               Implementation


Univ. of                                 L4Ka::Hazelnut            L4Ka::Pistachio
Karlsruhe

                          Fiasco/L4v2                                                Nova

                                                          Fiasco
                                                                                     OC                Nova

TU
Dresden                             L4.Sec          Fiasco/L4.Fiasco                      Fiasco.OC

          TU Dresden, 2012-07-18                    Microkernels - Intro
L4 concepts

• Jochen Liedtke:
  “A microkernel does no real work.”
      – Kernel only provides inevitable mechanisms.
      – Kernel does not enforce policies.

• But what is inevitable?
      – Abstractions
         • Threads
         • Address spaces (tasks)
      – Mechanisms
         • Communication
         • Resource Mapping
         • (Scheduling)

TU Dresden, 2012-07-18      Microkernels - Intro
Fiasco.OC – Objects

• OC – Object-Capability system
• System designed around objects providing
  services:
                                          call()
                         Client                           Service 1


                             call()                      call()

                                         Service 2

• Kernel provides
      – Object creation/management
      – Object interaction: Inter-Process Communication
        (IPC)

TU Dresden, 2012-07-18            Microkernels - Intro
Fiasco.OC – Calling objects

• To call an object, we need an address:
      – Telephone number
      – Postal address                         Client            Service 1
      – IP address

                         call(service1.ID)
                                                        Kernel



• Kernel returns ENOTEXISTENT if ID is wrong.
• Security issues:
      – Client could simply “guess” IDs brute-force.
      – Existence/non-existence can be used as a covert
        channel
TU Dresden, 2012-07-18        Microkernels - Intro
Fiasco.OC – Capabilities

       • Capability:
          – Reference to an object
          – Protected by the Fiasco.OC kernel
                   • Kernel knows all capability-object mappings.
                   • Managed as a per-process capability table.
                   • User processes only use indexes into this table.

           Client                                                           Service 1


                                                             Service1
                                1                          Communication
                                                             Channel
                                2
invoke(capability(3))
                                3
                                4                                  Kernel
       TU Dresden, 2012-07-18       Microkernels - Intro
Fiasco.OC: System Calls

• “Everything is an object.”

• 1 system call: invoke_object()
      – Parameters passed in UTCB
      – Types of parameters depend on type of object

• Kernel-provided objects
      – Threads / Tasks / IRQs / …


• Generic communication object: IPC gate
   – Send message from sender to receiver
   – Used to implement new objects in user-level
     applications

TU Dresden, 2012-07-18      Microkernels - Intro
Kernel vs. Operating System

• Fiasco.OC is not a full                            uClibC     libstdc++   ...
  operating system!                                 IPC Client/Server Framework
      – No device drivers                                User-level libraries
        (except UART + timer)
      – No file system / network
                                                               Ned
        stack / …




                                         L4Re
                                                      Init-style task loader
• A microkernel-based OS
  needs to add these                                           Moe
  services as user-level
                                                              Sigma0
  components
      L4 Runtime         User                      Basic Resouce Manager(s)
                         mode
      Environment
                         Kernel
      (L4Re)             mode
                                                         Fiasco.OC

TU Dresden, 2012-07-18      Microkernels - Intro
Outline for the Next Lectures

• Fiasco.OC's mapping from managed resources
  to kernel objects:
      – CPU           → threads
      – Memory        → tasks (address spaces)
      – Communication → Inter-Process
                        Communication (IPC)

• L4 Runtime Environment
      – Device Drivers
      – L4Linux



TU Dresden, 2012-07-18       Microkernels - Intro
L4 - Threads
                                                      Address Space
• Thread ::= abstraction of execution
      – Unit of CPU scheduling
      – Threads are temporally isolated

• Properties managed by the kernel:                                   Threads

      –   Instruction Pointer (EIP)                       Code
      –   Stack Pointer (ESP)
                                                          Data
      –   CPU Registers / flags
      –   (User-level) TCB

• User-level applications need to                         Stack
      –   allocate stack memory                           Stack
      –   provide memory for application binary
      –   find entry point
      –   ...
TU Dresden, 2012-07-18         Microkernels - Intro
L4 Threads and the Kernel

• Threads run in userland and enter the kernel
      – Through a system call (sysenter / INT 0x30)
      – Forced by HW interrupts or CPU exceptions

• Kernel Info Page
      – Magic memory page mapped into every task
      – Contains kernel-related information
         • Kernel version
         • Configured kernel features
         • System call entry code (allows the kernel to
           decide whether sysenter or INT 0x30 are better
           for a specific platform)


TU Dresden, 2012-07-18      Microkernels - Intro
Thread Control Block (TCB)

• Kernel storage for thread-related information

• One TCB per thread

• Stores user state while thread is inactive

• Extension: User-level Thread Control Block
  (UTCB)
      – Holds data the kernel does not need to trust
      – Mapped into address space
      – Most prominent use: system call parameters


TU Dresden, 2012-07-18      Microkernels - Intro
Thread Scheduling

• Whenever a thread enters the kernel, a
  scheduling decision is made.

• Fiasco.OC: priority- based round-robbin
   – Every thread has a priority assigned.
   – The thread with the highest priority runs until
            • Its time quantum runs out (timer interrupt),
            • Thread blocks (e.g., in a system call), or
            • A higher-priority thread becomes ready
      – Then, the next thread is selected.




TU Dresden, 2012-07-18       Microkernels - Intro
L4Re and Threads

• Fiasco provides thread-related system calls
      – thread_control    → modify properties
      – thread_stats_time → get thread runtime
      – thread_ex_regs    → modify EIP and ESP

• But most L4Re applications don't need to
  bother:
      – L4Re provides full libpthread including
         • pthread_create
         • pthread_mutex_*
         • pthread_cond_*
         • ...

TU Dresden, 2012-07-18     Microkernels - Intro
L4Re Applications

• Every L4Re application starts with
      – An empty address space
         • Memory managed by parent
      – One initial thread
         • EIP set to binary's entry point by ELF loader
      – An initial set of capabilities – the environment
         • Parent
         • Memory allocator
         • Main thread
         • Log
         • ...



TU Dresden, 2012-07-18      Microkernels - Intro
Performing System Calls

• All Fiasco.OC system calls are performed using
  IPC with different sets of parameters.
      – Functions are called l4_ipc_*()
      – Colloquially: invoke
• Generic parameters (in registers):
      – Capability to invoke
      – Timeout (how long do I want to block at most? –
        let's assume L4_IPC_NEVER for now.)
      – Message tag describing the rest of the message
          • Protocol
          • Number of words in UTCB
• Message-specific parameters in UTCB message
  registers
TU Dresden, 2012-07-18      Microkernels - Intro
Writing Output

• L4Re environment passes a LOG capability

      – Implements the L4_PROTO_LOG protocol
         • By default implemented in kernel and
           printed out to serial console

      – UTCB content:
         • Message reg 0: log operation to perform
           (e.g., L4_VCON_WRITE_OP)
         • Message reg 1: number of characters
         • Message reg 2...: characters to write


TU Dresden, 2012-07-18      Microkernels - Intro
Writing Output: The Code

#include <l4/re/env.h>
#include <l4/sys/ipc.h>

[..]

l4re_env_t *env = l4re_env();     // get environment
l4_msg_regs_t *mr = l4_utcb_mr(); // get msg regs

mr->mr[0] = L4_VCON_WRITE_OP;
mr->mr[1] = 7; // 'hellon' = 6 chars + 0 char
memcpy(&mr->mr[2], “hellon”, 7);

l4_msgtag_t tag, ret;
tag = l4_msgtag(L4_PROTO_LOG, 4, /* 4 msg words /
                      0, L4_IPC_NEVER);

ret = l4_ipc_send(env->log, l4_utcb(), tag); // System Call!

if (l4_msgtag_has_error(ret)) {
  /* error handling */
}
 TU Dresden, 2012-07-18      Microkernels - Intro
Writing Output: The Code

#include <l4/re/env.h>
#include <l4/sys/ipc.h>

[..]

l4re_env_t *env = l4re_env(); // get environment
l4_msg_regs_t mr = l4_utcb_mr(); // get msg regs
                 In real code, please just do
mr->mr[0] = L4_VCON_WRITE_OP;
mr->mr[1] = 7; // 'hellon' = 6 chars + 0 char
memcpy(&mr->mr[2], “hellon”, 7);
                          puts(“hello”);
l4_msgtag_t tag, ret;
tag = l4_msgtag(L4_PROTO_LOG, 4, /* 4 msg words /
                      0, 0, L4_IPC_NEVER);

ret = l4_ipc_send(env->log, l4_utcb(), tag); // System Call!

if (l4_msgtag_has_error(ret)) {
  /* error handling */
}
 TU Dresden, 2012-07-18       Microkernels - Intro
Multithreading

• Fiasco.OC allows multithreading
      – Many threads sharing the same address space
      – Spread across multiple physical CPUs

• Classical Problem: critical sections

global: int i = 0;

Thread 1                            Thread 2

for (unsigned j = 0; j < 10;        for (unsigned j = 0; j < 10;
     ++j)                                ++j)
   i += 1;                                  i += 1;

 • The result is rarely i == 20!
TU Dresden, 2012-07-18         Microkernels - Intro
Synchronization

for (unsigned j = 0; j < 10; ++j)

            i += 1;       Critical Section


• Critical Sections need to be protected
      – Disable interrupts → infeasible for user space
      – Spinning → burns CPU / energy / time quanta

• What we want: blocking lock
      – Thread tests flag: critical section free yes/no
      – waits (sleeping) until section is free


TU Dresden, 2012-07-18      Microkernels - Intro
Expected behavior

                                            Thread1 leaves
                                             critical section

Thread 1




Thread 2
                          Threads try to                  Thread2 leaves
                           enter critical                  critical section
                             section                                          time




 TU Dresden, 2012-07-18                          Microkernels - Intro
Synchronization - pthreads

• L4Re provides libpthread, so we can simply use
  pthread_mutex operations:

    pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

    [..]

    for (unsigned j = 0; j < 10; ++j) {
        pthread_mutex_lock(&mtx);
        i += 1;
        pthread_mutex_unlock(&mtx);
    }

• Fiasco.OC's IPC primitives allow for another solution,
  though.


TU Dresden, 2012-07-18      Microkernels - Intro
Synchronization: Serializer Thread

• IPC operations are synchronous by default:
      – Sender and receiver both need to be in an IPC system call
• There's a combination of sending and receiving a
  message: l4_ipc_call().
• This allows synchronization using a serializer thread:

  Thread 1
                         Blocking         Done
                           call

 Serializer
                         Blocking          Reply
                           call

  Thread 2


TU Dresden, 2012-07-18              Microkernels - Intro      time
Downloading and Compiling

• Fiasco.OC and L4Re are available from
  http://os.inf.tu-dresden.de/L4Re

• There are download and build instructions.
      – We will use the 32bit versions for this course
          → simply leave all configuration settings at their defaults
      – Note, you have to do 2 separate builds: one for
        Fiasco.OC and one for the L4Re.
      – GCC-4.7 did not work for me at the moment.




TU Dresden, 2012-07-18          Microkernels - Intro
L4Re directory structure

• src/l4
• Important subdirectories: pkg/, conf/
• pkg/contains all applications (each in its own
  package)
      – Packages have subdirs again:
         • server/ → the application program
         • lib/ → library to be used by clients
         • include/ → header files shared between
           server and clients




TU Dresden, 2012-07-18      Microkernels - Intro
Running Fiasco.OC/L4Re

• We'll use QEMU to run our setups.
• L4Re's build system has QEMU support
  integrated, which is configured through files
  in src/l4/conf:
      – modules.lst → contains multiboot setup info,
        similar to a GRUB menu.lst
      – Makeconf.boot → contains overall settings
        (where to search for binaries, qemu, ...)




TU Dresden, 2012-07-18     Microkernels - Intro
modules.lst
                                                          Have this once in your
        modaddr 0x01100000                                  modules.lst file.


Each entry has a name                                             roottask is the initial task
                                                                to boot. --init rom/hello asks
        entry hello                                               it to load the hello binary
        roottask moe --init=rom/hello                            from the ROM file system
        module l4re
        module hello

                                  modules are additional
                               files. They are loaded into
                                memory and can then be
                              accessed through the ROM
                              file system under the name
                                     rom/<filename>.


    TU Dresden, 2012-07-18         Microkernels - Intro
Makeconf.boot

• Start from the example in src/l4/conf
  (rename it to Makeconf.boot)

• At least set:
      – MODULE_SEARCH_PATH (have it include the
        path to your Fiasco.OC build directory)




TU Dresden, 2012-07-18     Microkernels - Intro
Booting QEMU

• Go to L4Re build directory

• Run “make qemu”
      – Select 'hello' entry from the dialog
         • If there's no dialog, you need to install the
           'dialog' package.
         • You can also circument the dialog:
           make qemu E=<entry>
           where entry is the name of a modules.lst
           entry.




TU Dresden, 2012-07-18     Microkernels - Intro
Assignments

• Download and compile Fiasco.OC and L4Re.

• Run the hello world example in QEMU.

• Modify the hello world example (it is in
  l4/pkg/hello/server/src):
      – Replace the puts() call with a manual system
        call to the log object.
      – You can use the example code from these
        slides.



TU Dresden, 2012-07-18     Microkernels - Intro
Further Reading

• P. Brinch-Hansen: The Nucleus of a Multiprogramming
  System
    http://brinch-hansen.net/papers/1970a.pdf
    Microkernels were invented in 1969!


• J. Liedtke: On microkernel construction
    http://os.inf.tu-dresden.de/papers_ps/jochen/Mikern.ps
    Shaping the ideas found in L4 microkernels.

• D. Engler et al.: Exokernel – An operating system
  architecture for application-level resource management
    http://pdos.csail.mit.edu/6.828/2008/readings/engler95exokernel.pdf
    Taking user-level policy implementation to the extreme.



TU Dresden, 2012-07-18        Microkernels - Intro

More Related Content

PDF
Advanced Components on Top of L4Re
PDF
Memory, IPC and L4Re
PDF
Microkernel design
PPT
Microkernel-based operating system development
PDF
From L3 to seL4: What have we learnt in 20 years of L4 microkernels
PDF
seL4 intro
PDF
L4 Microkernel :: Design Overview
PDF
seL4 on RISC-V/lowRISC - ORCONF'15
Advanced Components on Top of L4Re
Memory, IPC and L4Re
Microkernel design
Microkernel-based operating system development
From L3 to seL4: What have we learnt in 20 years of L4 microkernels
seL4 intro
L4 Microkernel :: Design Overview
seL4 on RISC-V/lowRISC - ORCONF'15

What's hot (20)

PDF
PDF
olibc: Another C Library optimized for Embedded Linux
PDF
Microkernel Evolution
PDF
Implement Runtime Environments for HSA using LLVM
PDF
Embedded Hypervisor for ARM
PDF
F9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
ODP
A tour of F9 microkernel and BitSec hypervisor
PDF
Hints for L4 Microkernel
PDF
Faults inside System Software
PDF
Embedded Virtualization applied in Mobile Devices
PDF
Barrelfish OS
PDF
Construct an Efficient and Secure Microkernel for IoT
PDF
Making Linux do Hard Real-time
PDF
μ-Kernel Evolution
PPTX
bfarm-v2
PPT
Enea Linux and LWRT FTF China 2012
PDF
Lightweight Virtualization in Linux
ODP
Libra Library OS
PDF
Cache Consistency – Requirements and its packet processing Performance implic...
PDF
[Harvard CS264] 05 - Advanced-level CUDA Programming
olibc: Another C Library optimized for Embedded Linux
Microkernel Evolution
Implement Runtime Environments for HSA using LLVM
Embedded Hypervisor for ARM
F9: A Secure and Efficient Microkernel Built for Deeply Embedded Systems
A tour of F9 microkernel and BitSec hypervisor
Hints for L4 Microkernel
Faults inside System Software
Embedded Virtualization applied in Mobile Devices
Barrelfish OS
Construct an Efficient and Secure Microkernel for IoT
Making Linux do Hard Real-time
μ-Kernel Evolution
bfarm-v2
Enea Linux and LWRT FTF China 2012
Lightweight Virtualization in Linux
Libra Library OS
Cache Consistency – Requirements and its packet processing Performance implic...
[Harvard CS264] 05 - Advanced-level CUDA Programming
Ad

Similar to Introduction to Microkernels (20)

PDF
MIcrokernel
PDF
Rtos part2
PDF
淺談探索 Linux 系統設計之道
PDF
Linux Performance Analysis and Tools
PDF
Sucet os module_2_notes
PDF
00-WindowsKernelOverview_University of Tokyo_July 2004.pdf
PPT
20120524 cern data centre evolution v2
PDF
Zero-Copy Event-Driven Servers with Netty
PPT
Current Trends in HPC
PDF
Walking around linux kernel
PDF
Analysis of Practicality and Performance Evaluation for Monolithic Kernel and...
PPT
EEDC Distributed Systems
ODP
Visual comparison of Unix-like systems & Virtualisation
PDF
An Introduce of OPNFV (Open Platform for NFV)
PPT
Isys20261 lecture 06
ODP
Linux Internals - Kernel/Core
PPTX
Microx - A Unix like kernel for Embedded Systems written from scratch.
PPT
2. microkernel new
PPT
Processes and Threads in Windows Vista
PPT
Arch stylesandpatternsmi
MIcrokernel
Rtos part2
淺談探索 Linux 系統設計之道
Linux Performance Analysis and Tools
Sucet os module_2_notes
00-WindowsKernelOverview_University of Tokyo_July 2004.pdf
20120524 cern data centre evolution v2
Zero-Copy Event-Driven Servers with Netty
Current Trends in HPC
Walking around linux kernel
Analysis of Practicality and Performance Evaluation for Monolithic Kernel and...
EEDC Distributed Systems
Visual comparison of Unix-like systems & Virtualisation
An Introduce of OPNFV (Open Platform for NFV)
Isys20261 lecture 06
Linux Internals - Kernel/Core
Microx - A Unix like kernel for Embedded Systems written from scratch.
2. microkernel new
Processes and Threads in Windows Vista
Arch stylesandpatternsmi
Ad

More from Vasily Sartakov (20)

PDF
Мейнстрим технологии шифрованной памяти
PDF
RnD Collaborations in Asia-Pacific Region
PDF
Сетевая подсистема в L4Re и Genode
PDF
Защита памяти при помощи NX-bit в среде L4Re
PDF
Hardware Errors and the OS
PDF
Operating Systems Meet Fault Tolerance
PDF
PDF
Genode OS Framework
PDF
Operating Systems Hardening
PDF
Особенности Национального RnD
PDF
Genode Architecture
PDF
Genode Components
PDF
Genode Programming
PDF
Genode Compositions
PDF
Trusted Computing Base
PDF
System Integrity
PDF
PDF
Применение Fiasco.OC
PDF
Прикладная Информатика 6 (36) 2011
PDF
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Мейнстрим технологии шифрованной памяти
RnD Collaborations in Asia-Pacific Region
Сетевая подсистема в L4Re и Genode
Защита памяти при помощи NX-bit в среде L4Re
Hardware Errors and the OS
Operating Systems Meet Fault Tolerance
Genode OS Framework
Operating Systems Hardening
Особенности Национального RnD
Genode Architecture
Genode Components
Genode Programming
Genode Compositions
Trusted Computing Base
System Integrity
Применение Fiasco.OC
Прикладная Информатика 6 (36) 2011
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...

Recently uploaded (20)

PDF
RMMM.pdf make it easy to upload and study
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
Complications of Minimal Access Surgery at WLH
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PDF
VCE English Exam - Section C Student Revision Booklet
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PPTX
Institutional Correction lecture only . . .
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
Cell Types and Its function , kingdom of life
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
Pharma ospi slides which help in ospi learning
PDF
Classroom Observation Tools for Teachers
PDF
Basic Mud Logging Guide for educational purpose
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
RMMM.pdf make it easy to upload and study
Module 4: Burden of Disease Tutorial Slides S2 2025
Complications of Minimal Access Surgery at WLH
Supply Chain Operations Speaking Notes -ICLT Program
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
VCE English Exam - Section C Student Revision Booklet
2.FourierTransform-ShortQuestionswithAnswers.pdf
Institutional Correction lecture only . . .
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
STATICS OF THE RIGID BODIES Hibbelers.pdf
Cell Types and Its function , kingdom of life
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Pharma ospi slides which help in ospi learning
Classroom Observation Tools for Teachers
Basic Mud Logging Guide for educational purpose
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
Final Presentation General Medicine 03-08-2024.pptx
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
human mycosis Human fungal infections are called human mycosis..pptx

Introduction to Microkernels

  • 1. Faculty of Computer Science Institute for System Architecture, Operating Systems Group Introduction to Microkernel- Based Operating Systems Björn Döbel
  • 2. Lecture Outline • Microkernels and what we like about them • The Fiasco.OC microkernel – Kernel Objects – Kernel Mechanisms • OS Services on top of Fiasco.OC – Device Drivers – Virtualization TU Dresden, 2012-07-18 Microkernels - Intro
  • 3. Purpose of Operating Systems • Manage the available resources – Hardware (CPU) and software (file systems) • Provide users with an easier-to-use interface to access resources – Unix: data read/write access to sockets instead of writing TCP packets on your own • Perform privileged / HW-specific operations – x86: ring0 vs. ring3 – Device drivers • Provide separation and collaboration – Isolate users / processes from each other – Allow cooperation if needed (e.g., sending messages between processes) TU Dresden, 2012-07-18 Microkernels - Intro
  • 4. Monolithic kernels - Linux Application Application Application Application User mode Kernel mode System-Call Interface File Systems Networking Processes Memory VFS Sockets Scheduling Management Linux File System Impl. Protocols IPC Page allocation Kernel Address spaces Device Drivers Swapping Hardware Access Hardware CPU, Memory, PCI, Devices TU Dresden, 2012-07-18 Microkernels - Intro
  • 5. What's the problem? • Security issues – All components run in privileged mode. – Direct access to all kernel-level data. – Module loading → easy living for rootkits. • Resilience issues – Faulty drivers can crash the whole system. – 75% of today's OS kernels are drivers. • Software-level issues – Complexity is hard to manage. – Custom OS for hardware with scarce resources? TU Dresden, 2012-07-18 Microkernels - Intro
  • 6. One vision - microkernels • Minimal OS kernel – less error prone – small Trusted Computing Base – suitable for verification • System services in user-level servers – flexible and extensible • Protection between individual components – systems get • More secure – inter-component protection • More resilient – crashing component does not (necessarily...) crash the whole system TU Dresden, 2012-07-18 Microkernels - Intro
  • 7. The microkernel vision Application Application Application Application User mode File Systems Networking Memory VFS Sockets Management File System Impl. Protocols Page allocation Swapping Device Drivers Kernel mode Address Spaces System-Call Interface Threads Scheduling Hardware Access IPC Microkernel Hardware CPU, Memory, PCI, Devices TU Dresden, 2012-07-18 Microkernels - Intro
  • 8. Microkernel-Based Systems • 1st generation: Mach – developed at CMU, 1985 - 1994 – Foundation for several real systems (e.g., NextOS → Mac OS X) • 2nd generation: Minix3 – Andrew Tanenbaum @ VU Amsterdam – Focus on restartability • 2nd/3rd generation: – Various kernels of the L4 microkernel family TU Dresden, 2012-07-18 Microkernels - Intro
  • 9. The L4 family – a timeline SeL4 N1 N2 OKL4v2 Univ. of New South Wales / NICTA / Open NICTA:: OKL4 Kernel Labs Pistachio-embedded L4/x86 ABI Specification L2, L3 v2 x0 x2/v4 Implementation Univ. of L4Ka::Hazelnut L4Ka::Pistachio Karlsruhe Fiasco/L4v2 Nova Fiasco OC Nova TU Dresden L4.Sec Fiasco/L4.Fiasco Fiasco.OC TU Dresden, 2012-07-18 Microkernels - Intro
  • 10. L4 concepts • Jochen Liedtke: “A microkernel does no real work.” – Kernel only provides inevitable mechanisms. – Kernel does not enforce policies. • But what is inevitable? – Abstractions • Threads • Address spaces (tasks) – Mechanisms • Communication • Resource Mapping • (Scheduling) TU Dresden, 2012-07-18 Microkernels - Intro
  • 11. Fiasco.OC – Objects • OC – Object-Capability system • System designed around objects providing services: call() Client Service 1 call() call() Service 2 • Kernel provides – Object creation/management – Object interaction: Inter-Process Communication (IPC) TU Dresden, 2012-07-18 Microkernels - Intro
  • 12. Fiasco.OC – Calling objects • To call an object, we need an address: – Telephone number – Postal address Client Service 1 – IP address call(service1.ID) Kernel • Kernel returns ENOTEXISTENT if ID is wrong. • Security issues: – Client could simply “guess” IDs brute-force. – Existence/non-existence can be used as a covert channel TU Dresden, 2012-07-18 Microkernels - Intro
  • 13. Fiasco.OC – Capabilities • Capability: – Reference to an object – Protected by the Fiasco.OC kernel • Kernel knows all capability-object mappings. • Managed as a per-process capability table. • User processes only use indexes into this table. Client Service 1 Service1 1 Communication Channel 2 invoke(capability(3)) 3 4 Kernel TU Dresden, 2012-07-18 Microkernels - Intro
  • 14. Fiasco.OC: System Calls • “Everything is an object.” • 1 system call: invoke_object() – Parameters passed in UTCB – Types of parameters depend on type of object • Kernel-provided objects – Threads / Tasks / IRQs / … • Generic communication object: IPC gate – Send message from sender to receiver – Used to implement new objects in user-level applications TU Dresden, 2012-07-18 Microkernels - Intro
  • 15. Kernel vs. Operating System • Fiasco.OC is not a full uClibC libstdc++ ... operating system! IPC Client/Server Framework – No device drivers User-level libraries (except UART + timer) – No file system / network Ned stack / … L4Re Init-style task loader • A microkernel-based OS needs to add these Moe services as user-level Sigma0 components L4 Runtime User Basic Resouce Manager(s) mode Environment Kernel (L4Re) mode Fiasco.OC TU Dresden, 2012-07-18 Microkernels - Intro
  • 16. Outline for the Next Lectures • Fiasco.OC's mapping from managed resources to kernel objects: – CPU → threads – Memory → tasks (address spaces) – Communication → Inter-Process Communication (IPC) • L4 Runtime Environment – Device Drivers – L4Linux TU Dresden, 2012-07-18 Microkernels - Intro
  • 17. L4 - Threads Address Space • Thread ::= abstraction of execution – Unit of CPU scheduling – Threads are temporally isolated • Properties managed by the kernel: Threads – Instruction Pointer (EIP) Code – Stack Pointer (ESP) Data – CPU Registers / flags – (User-level) TCB • User-level applications need to Stack – allocate stack memory Stack – provide memory for application binary – find entry point – ... TU Dresden, 2012-07-18 Microkernels - Intro
  • 18. L4 Threads and the Kernel • Threads run in userland and enter the kernel – Through a system call (sysenter / INT 0x30) – Forced by HW interrupts or CPU exceptions • Kernel Info Page – Magic memory page mapped into every task – Contains kernel-related information • Kernel version • Configured kernel features • System call entry code (allows the kernel to decide whether sysenter or INT 0x30 are better for a specific platform) TU Dresden, 2012-07-18 Microkernels - Intro
  • 19. Thread Control Block (TCB) • Kernel storage for thread-related information • One TCB per thread • Stores user state while thread is inactive • Extension: User-level Thread Control Block (UTCB) – Holds data the kernel does not need to trust – Mapped into address space – Most prominent use: system call parameters TU Dresden, 2012-07-18 Microkernels - Intro
  • 20. Thread Scheduling • Whenever a thread enters the kernel, a scheduling decision is made. • Fiasco.OC: priority- based round-robbin – Every thread has a priority assigned. – The thread with the highest priority runs until • Its time quantum runs out (timer interrupt), • Thread blocks (e.g., in a system call), or • A higher-priority thread becomes ready – Then, the next thread is selected. TU Dresden, 2012-07-18 Microkernels - Intro
  • 21. L4Re and Threads • Fiasco provides thread-related system calls – thread_control → modify properties – thread_stats_time → get thread runtime – thread_ex_regs → modify EIP and ESP • But most L4Re applications don't need to bother: – L4Re provides full libpthread including • pthread_create • pthread_mutex_* • pthread_cond_* • ... TU Dresden, 2012-07-18 Microkernels - Intro
  • 22. L4Re Applications • Every L4Re application starts with – An empty address space • Memory managed by parent – One initial thread • EIP set to binary's entry point by ELF loader – An initial set of capabilities – the environment • Parent • Memory allocator • Main thread • Log • ... TU Dresden, 2012-07-18 Microkernels - Intro
  • 23. Performing System Calls • All Fiasco.OC system calls are performed using IPC with different sets of parameters. – Functions are called l4_ipc_*() – Colloquially: invoke • Generic parameters (in registers): – Capability to invoke – Timeout (how long do I want to block at most? – let's assume L4_IPC_NEVER for now.) – Message tag describing the rest of the message • Protocol • Number of words in UTCB • Message-specific parameters in UTCB message registers TU Dresden, 2012-07-18 Microkernels - Intro
  • 24. Writing Output • L4Re environment passes a LOG capability – Implements the L4_PROTO_LOG protocol • By default implemented in kernel and printed out to serial console – UTCB content: • Message reg 0: log operation to perform (e.g., L4_VCON_WRITE_OP) • Message reg 1: number of characters • Message reg 2...: characters to write TU Dresden, 2012-07-18 Microkernels - Intro
  • 25. Writing Output: The Code #include <l4/re/env.h> #include <l4/sys/ipc.h> [..] l4re_env_t *env = l4re_env(); // get environment l4_msg_regs_t *mr = l4_utcb_mr(); // get msg regs mr->mr[0] = L4_VCON_WRITE_OP; mr->mr[1] = 7; // 'hellon' = 6 chars + 0 char memcpy(&mr->mr[2], “hellon”, 7); l4_msgtag_t tag, ret; tag = l4_msgtag(L4_PROTO_LOG, 4, /* 4 msg words / 0, L4_IPC_NEVER); ret = l4_ipc_send(env->log, l4_utcb(), tag); // System Call! if (l4_msgtag_has_error(ret)) { /* error handling */ } TU Dresden, 2012-07-18 Microkernels - Intro
  • 26. Writing Output: The Code #include <l4/re/env.h> #include <l4/sys/ipc.h> [..] l4re_env_t *env = l4re_env(); // get environment l4_msg_regs_t mr = l4_utcb_mr(); // get msg regs In real code, please just do mr->mr[0] = L4_VCON_WRITE_OP; mr->mr[1] = 7; // 'hellon' = 6 chars + 0 char memcpy(&mr->mr[2], “hellon”, 7); puts(“hello”); l4_msgtag_t tag, ret; tag = l4_msgtag(L4_PROTO_LOG, 4, /* 4 msg words / 0, 0, L4_IPC_NEVER); ret = l4_ipc_send(env->log, l4_utcb(), tag); // System Call! if (l4_msgtag_has_error(ret)) { /* error handling */ } TU Dresden, 2012-07-18 Microkernels - Intro
  • 27. Multithreading • Fiasco.OC allows multithreading – Many threads sharing the same address space – Spread across multiple physical CPUs • Classical Problem: critical sections global: int i = 0; Thread 1 Thread 2 for (unsigned j = 0; j < 10; for (unsigned j = 0; j < 10; ++j) ++j) i += 1; i += 1; • The result is rarely i == 20! TU Dresden, 2012-07-18 Microkernels - Intro
  • 28. Synchronization for (unsigned j = 0; j < 10; ++j) i += 1; Critical Section • Critical Sections need to be protected – Disable interrupts → infeasible for user space – Spinning → burns CPU / energy / time quanta • What we want: blocking lock – Thread tests flag: critical section free yes/no – waits (sleeping) until section is free TU Dresden, 2012-07-18 Microkernels - Intro
  • 29. Expected behavior Thread1 leaves critical section Thread 1 Thread 2 Threads try to Thread2 leaves enter critical critical section section time TU Dresden, 2012-07-18 Microkernels - Intro
  • 30. Synchronization - pthreads • L4Re provides libpthread, so we can simply use pthread_mutex operations: pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; [..] for (unsigned j = 0; j < 10; ++j) { pthread_mutex_lock(&mtx); i += 1; pthread_mutex_unlock(&mtx); } • Fiasco.OC's IPC primitives allow for another solution, though. TU Dresden, 2012-07-18 Microkernels - Intro
  • 31. Synchronization: Serializer Thread • IPC operations are synchronous by default: – Sender and receiver both need to be in an IPC system call • There's a combination of sending and receiving a message: l4_ipc_call(). • This allows synchronization using a serializer thread: Thread 1 Blocking Done call Serializer Blocking Reply call Thread 2 TU Dresden, 2012-07-18 Microkernels - Intro time
  • 32. Downloading and Compiling • Fiasco.OC and L4Re are available from http://os.inf.tu-dresden.de/L4Re • There are download and build instructions. – We will use the 32bit versions for this course → simply leave all configuration settings at their defaults – Note, you have to do 2 separate builds: one for Fiasco.OC and one for the L4Re. – GCC-4.7 did not work for me at the moment. TU Dresden, 2012-07-18 Microkernels - Intro
  • 33. L4Re directory structure • src/l4 • Important subdirectories: pkg/, conf/ • pkg/contains all applications (each in its own package) – Packages have subdirs again: • server/ → the application program • lib/ → library to be used by clients • include/ → header files shared between server and clients TU Dresden, 2012-07-18 Microkernels - Intro
  • 34. Running Fiasco.OC/L4Re • We'll use QEMU to run our setups. • L4Re's build system has QEMU support integrated, which is configured through files in src/l4/conf: – modules.lst → contains multiboot setup info, similar to a GRUB menu.lst – Makeconf.boot → contains overall settings (where to search for binaries, qemu, ...) TU Dresden, 2012-07-18 Microkernels - Intro
  • 35. modules.lst Have this once in your modaddr 0x01100000 modules.lst file. Each entry has a name roottask is the initial task to boot. --init rom/hello asks entry hello it to load the hello binary roottask moe --init=rom/hello from the ROM file system module l4re module hello modules are additional files. They are loaded into memory and can then be accessed through the ROM file system under the name rom/<filename>. TU Dresden, 2012-07-18 Microkernels - Intro
  • 36. Makeconf.boot • Start from the example in src/l4/conf (rename it to Makeconf.boot) • At least set: – MODULE_SEARCH_PATH (have it include the path to your Fiasco.OC build directory) TU Dresden, 2012-07-18 Microkernels - Intro
  • 37. Booting QEMU • Go to L4Re build directory • Run “make qemu” – Select 'hello' entry from the dialog • If there's no dialog, you need to install the 'dialog' package. • You can also circument the dialog: make qemu E=<entry> where entry is the name of a modules.lst entry. TU Dresden, 2012-07-18 Microkernels - Intro
  • 38. Assignments • Download and compile Fiasco.OC and L4Re. • Run the hello world example in QEMU. • Modify the hello world example (it is in l4/pkg/hello/server/src): – Replace the puts() call with a manual system call to the log object. – You can use the example code from these slides. TU Dresden, 2012-07-18 Microkernels - Intro
  • 39. Further Reading • P. Brinch-Hansen: The Nucleus of a Multiprogramming System http://brinch-hansen.net/papers/1970a.pdf Microkernels were invented in 1969! • J. Liedtke: On microkernel construction http://os.inf.tu-dresden.de/papers_ps/jochen/Mikern.ps Shaping the ideas found in L4 microkernels. • D. Engler et al.: Exokernel – An operating system architecture for application-level resource management http://pdos.csail.mit.edu/6.828/2008/readings/engler95exokernel.pdf Taking user-level policy implementation to the extreme. TU Dresden, 2012-07-18 Microkernels - Intro