ME-I-US Windows CE The next version Base on Presentations at Medc 2006 by Boar-Ming Hsieh and John Hatch Avi Kcholi Mobile&Embedded Israeli User Society.

Slides:



Advertisements
Similar presentations
Microsoft Windows NT Embedded 4.0
Advertisements

Device Drivers Witawas Srisa-an Embedded Systems Design and Implementation.
MHK200 Module 1: Introduction to Windows CE. MHK200 Overivew Windows CE Design Goals Windows CE Architecture Supported Technologies, Libraries, and Tools.
Windows XP Operating Systems  COSC513 Operating Systems  Mr. Nut Prommongkonkun  Student ID #
Memory Protection: Kernel and User Address Spaces  Background  Address binding  How memory protection is achieved.
Windows CE 6.0 Architecture Douglas Boling President Boling Consulting Inc. Douglas Boling President Boling Consulting Inc.
Contiki A Lightweight and Flexible Operating System for Tiny Networked Sensors Presented by: Jeremy Schiff.
INTRODUCTION OS/2 was initially designed to extend the capabilities of DOS by IBM and Microsoft Corporations. To create a single industry-standard operating.
Chapter 13 Embedded Systems
1 CE6130 現代作業系統核心 Modern Operating System Kernels 許 富 皓.
Introduction Operating Systems’ Concepts and Structure Lecture 1 ~ Spring, 2008 ~ Spring, 2008TUCN. Operating Systems. Lecture 1.
Operating Systems Concepts 1. A Computer Model An operating system has to deal with the fact that a computer is made up of a CPU, random access memory.
Future Directions For The Windows CE Operating System Architecture John Hatch Program Manager.
Hands-On Microsoft Windows Server 2008 Chapter 1 Introduction to Windows Server 2008.
Chapter 3.1:Operating Systems Concepts 1. A Computer Model An operating system has to deal with the fact that a computer is made up of a CPU, random access.
Windows 2000 Memory Management Computing Department, Lancaster University, UK.
WebFOCUS Developer Studio Update Dimitris Poulos Technical Director September 3, 2015 Copyright 2009, Information Builders. Slide 1.
Computer Organization
Chapter 8 Windows Outline Programming Windows 2000 System structure Processes and threads in Windows 2000 Memory management The Windows 2000 file.
About the Presentations The presentations cover the objectives found in the opening of each chapter. All chapter objectives are listed in the beginning.
EMB426 Windows CE Memory Architecture Steve Maillet CEO/Chief Software Architect EmbeddedFusion.
Windows CE 시스템 개발 개요. 임베디드시스템소프트웨어 -Windows CE 2 Overview  Selecting a Windows Embedded Operating System  The Windows CE Platform Development Cycle.
Introduction to Embedded Software Development School of software Engineering Introduction to Windows CE.
Virtual techdays INDIA │ Nov 2010 Developing Office Biz Application using WPF on Windows 7 Sarang Datye │ Sr. Consultant, Microsoft Sridhar Poduri.
Overview of System Development. Overview Selecting a Windows Embedded Operating System The Windows CE Platform Development Cycle The Application Development.
Copyright © 2011 EMC Corporation. All Rights Reserved. MODULE – 6 VIRTUALIZED DATA CENTER – DESKTOP AND APPLICATION 1.
Eric Keller, Evan Green Princeton University PRESTO /22/08 Virtualizing the Data Plane Through Source Code Merging.
LiveCycle Data Services Introduction Part 2. Part 2? This is the second in our series on LiveCycle Data Services. If you missed our first presentation,
What’s new in NET+Works 6.2. Major NET+OS 6.2 features New Development Tools Support for the NS9360 Security Features Discovery Tools USB memory class.
Windows 2000 Course Summary Computing Department, Lancaster University, UK.
System Software Provides GUI Manages the resources of the computer system Defines the Software Platform Components of System Software Operating system.
Background: Operating Systems Brad Karp UCL Computer Science CS GZ03 / M th November, 2008.
A+ Guide to Managing and Maintaining Your PC Fifth Edition Chapter 13 Understanding and Installing Windows 2000 and Windows NT.
CE Operating Systems Lecture 3 Overview of OS functions and structure.
Windows CE 시스템 개발 개요. 모바일운영체제 - Windows CE 2 Overview  Selecting a Windows Embedded Operating System  The Windows CE Platform Development Cycle  The.
Processes Introduction to Operating Systems: Module 3.
Microsoft Virtual Server: Overview and Roadmap Mike Neil Product Unit Manager Windows Virtualization microsoft.com Microsoft Corporation.
PRIOR TO WEB SERVICES THE OTHER TECHNOLOGIES ARE:.
System Components ● There are three main protected modules of the System  The Hardware Abstraction Layer ● A virtual machine to configure all devices.
Concurrency, Processes, and System calls Benefits and issues of concurrency The basic concept of process System calls.
Best Practices Steve Maillet Chief Software Architect EmbeddedFusion ECE401 Best Practices For Driver Development.
Full and Para Virtualization
Hands-On Virtual Computing
Efficient Software-Based Fault Isolation Authors: Robert Wahbe Steven Lucco Thomas E. Anderson Susan L. Graham Presenter: Gregory Netland.
Lecture 5 Rootkits Hoglund/Butler (Chapters 1-3).
Develop VB in WinCE Maker : Axel Chou. Introduction to WinCE 3.0 One of the Microsoft Embedded System –WinCE 3.0 –Embedded NT 4.0 Customize : Minimize.
Beyond Application Profiling to System Aware Analysis Elena Laskavaia, QNX Bill Graham, QNX.
A+ Guide to Managing and Maintaining Your PC, 7e Chapter 2 Introducing Operating Systems.
Introduction to Operating Systems Concepts
Computer System Structures
Computer System Structures
Operating System Overview
Kernel Design & Implementation
Hardware and OS Design and Layout.
Operating System Review
Current Generation Hypervisor Type 1 Type 2.
Windows 95 & 98 Steve Boyle Mike Forster Maggie Hamill Nancy O’Brien.
Introduction to Computers
Chapter 3: Windows7 Part 1.
Operating System Review
Windows Internals Brown-Bag Seminar Chapter 1 – Concepts and Tools
Lecture 14 Virtual Memory and the Alpha Memory Hierarchy
Page Replacement.
Module 1: Introduction to Windows CE
Lecture Topics: 11/1 General Operating System Concepts Processes
1/14/2019 3:57 AM © 2004 Microsoft Corporation. All rights reserved.
Windows Virtual PC / Hyper-V
Outline Operating System Organization Operating System Examples
Overview of System Development for Windows CE.NET
Running C# in the browser
Presentation transcript:

ME-I-US Windows CE The next version Base on Presentations at Medc 2006 by Boar-Ming Hsieh and John Hatch Avi Kcholi Mobile&Embedded Israeli User Society

ME-I-US first shared source competition Nic Sagez, has asked me to invite you to participate in the first shared source competition The program manager in charge of the Windows CE source code You can find a description of the competition at: Nic Sagez, has asked me to invite you to participate in the first shared source competition The program manager in charge of the Windows CE source code You can find a description of the competition at:

ME-I-US Agenda Overview - Introduction Windows CE 5.0 – Recollect Windows CE 6.0 Beta – Overview New Features Compatibility Drivers Overview Real-time Platform Builder Overview - Introduction Windows CE 5.0 – Recollect Windows CE 6.0 Beta – Overview New Features Compatibility Drivers Overview Real-time Platform Builder

ME-I-US Overview Targeted to embedded devices Pocket PC, Smartphones, STBs, Thin clients, AutoPC, PMC, control panels, robots, etc. Benefits Flexible, adaptable, configurable, small Supports ARM, MIPS, SH, x86 Real-time Simple driver model Power conscious Shared source Tiered licensing model Targeted to embedded devices Pocket PC, Smartphones, STBs, Thin clients, AutoPC, PMC, control panels, robots, etc. Benefits Flexible, adaptable, configurable, small Supports ARM, MIPS, SH, x86 Real-time Simple driver model Power conscious Shared source Tiered licensing model

ME-I-US Overview However, Windows CE 5.0 has a memory model limitation It only supports 32 processes and 32 MB per process These limitations has now been removed with Windows CE 6.0 New Virtual Memory Model However, Windows CE 5.0 has a memory model limitation It only supports 32 processes and 32 MB per process These limitations has now been removed with Windows CE 6.0 New Virtual Memory Model

ME-I-US

Windows CE 5.0 Memory Model Virtual Memory Map 2 GB for Kernel Single 2 GB mapping for all processes Divided up into 32 MB “slots” 32 Process Limit Each process has one 32 MB slot 32 slots for processes Shared memory Upper half of user space is shared memory Read / Write by all processes Virtual Memory Map 2 GB for Kernel Single 2 GB mapping for all processes Divided up into 32 MB “slots” 32 Process Limit Each process has one 32 MB slot 32 slots for processes Shared memory Upper half of user space is shared memory Read / Write by all processes

ME-I-US :::::::: Shared Memory Kernel 32 Slots for Processes Single 2 GB VM for all Processes Execution Slot and Shared DLL Slot Slot 0 – Execution Slot 1 – ROM DLLs Slot 2 – NK.exe Slot 3 – Filesys.exe Slot 4 – Device.exe Slot 5 – GWES.exe Slot 32 Slot 7 – Services.exe 2 GB Kernel Space Slot 8 Slot 31

ME-I-US

Introducing the New Kernel 2 GB of Virtual Memory per process 32,000 processes Unified Kernel Critical OS components moved into kernel space Improved system performance Increased security and robustness High degree of backwards compatibility 2 GB of Virtual Memory per process 32,000 processes Unified Kernel Critical OS components moved into kernel space Improved system performance Increased security and robustness High degree of backwards compatibility

ME-I-US 32 K Process 2 GB per Process 2 GB Kernel Space New Win CE Memory Model Process Code User VM User VM Memory Mapped files User DLLs Kernel Filesystem GWES Drivers...

ME-I-US User Space Shared User DLLs 512 MB RAM Backed Mapfiles 256 MB Shared System Heap 255 MB Process space 1 GB per process User Space 2 Gigabytes Each process has its own mapping R/W for OS components Read only for user process RAM Backed Mapfiles Mapped at fixed location for better backwards compatibility All DLLs – code and data Same mapping across all processes Data pages are unique physical pages Code pages are shared Executable code and data VM Allocation File Back Mapfiles 0x x x

ME-I-US 0x Kernel Space 2 Gigabytes Fixed mapping independent of user space 0xFFFFFFFF All XIP DLLs in kernel Cached access to physical memory Uncached access to physical memory Ram file system & ram registry Kernel Virtual Memory Shared by all kernel Servers and drivers System Trap Area CPU Specific VM Kernel VM (if supported by CPU) 256 MB Kernel VM 256 MB Object Store (128MB) Kernel XIP DLLs (128 MB) Static Mapped Uncached 512 MB Static Mapped Cached 512 MB

ME-I-US OS New Layout Moving critical drivers, file system, and graphical window manager into the kernel Kernel version of Coredll.dll Same APIs without the thunks Benefit Greatly reduces the overhead of system calls between these components Reduces overhead of all calls from user space to kernel space Increase code sharing between base OS services Moving critical drivers, file system, and graphical window manager into the kernel Kernel version of Coredll.dll Same APIs without the thunks Benefit Greatly reduces the overhead of system calls between these components Reduces overhead of all calls from user space to kernel space Increase code sharing between base OS services

ME-I-US

Performance & Size Improvements expected in process switching Same performance Thread Switching Memory Allocation System Calls Some slow down with interprocess calls Now involves data marshalling Size increase is less then 5% Improvements expected in process switching Same performance Thread Switching Memory Allocation System Calls Some slow down with interprocess calls Now involves data marshalling Size increase is less then 5%

ME-I-US Win CE 5.0 System Calls Application makes call PSL jump Kernel Validates parameters Maps Service into Slot 0 Possible Cache Flush Calls into to the service Service Runs Returns to Kernel Kernel Maps App into Slot 0 Possible cache flush Returns to App App Service Kernel

ME-I-US Win CE 6.0 Beta System Calls Application makes call Same PSL jump App stays mapped during the call Kernel Validates parameters Calls into to the service Service Runs Returns directly to the app App ServiceKernel

ME-I-US

Security Early Threat Modeling of the kernel Working with Microsoft Secure Windows Team and penetration testers Double checked design to tighten up System Calls Handles Exception Handling Memory Allocation Loader And many other components Early Threat Modeling of the kernel Working with Microsoft Secure Windows Team and penetration testers Double checked design to tighten up System Calls Handles Exception Handling Memory Allocation Loader And many other components

ME-I-US Security and Robustness Features Improved parameter validation for system calls Per-Process Page and Handle tables Greatly improves Process isolation Improves code robustness Secure Stack System calls run on special kernel side stacks Safe guards system calls from stack tampering Robust Heaps Heap control structures separated from heap data Safe Remote Heaps for OS components OS servers can open heaps in user process R/W for servers, R/only for user Performance optimization and safe from tampering Improved parameter validation for system calls Per-Process Page and Handle tables Greatly improves Process isolation Improves code robustness Secure Stack System calls run on special kernel side stacks Safe guards system calls from stack tampering Robust Heaps Heap control structures separated from heap data Safe Remote Heaps for OS components OS servers can open heaps in user process R/W for servers, R/only for user Performance optimization and safe from tampering

ME-I-US

New Features Per-Process Page Tables Each process has its own page table Pointers are unique to each process Enables the new virtual memory model Increases security Per-Process Handle Tables Each process has its own handle table Handles have reference and usage counts Increases security Increased programming robustness No more stale handles Per-Process Page Tables Each process has its own page table Pointers are unique to each process Enables the new virtual memory model Increases security Per-Process Handle Tables Each process has its own handle table Handles have reference and usage counts Increases security Increased programming robustness No more stale handles

ME-I-US New Features Continued Large Memory Mapped File Support Support for mapping views into very large files Up to 64-bit files Big benefit for in car navigation and multimedia Secure Loader Enables of control of which executable and DLLs get loaded by the system Uses encrypted signatures to identify the files Foundation for a code based security model Security is based on knowing what code is running instead of who the user is Large Memory Mapped File Support Support for mapping views into very large files Up to 64-bit files Big benefit for in car navigation and multimedia Secure Loader Enables of control of which executable and DLLs get loaded by the system Uses encrypted signatures to identify the files Foundation for a code based security model Security is based on knowing what code is running instead of who the user is

ME-I-US New Features Continued User Mode UI service Displays UI in user mode for kernel mode drivers Keeps drivers from launching windows from inside the kernel Virtual Alloc Ex functions Memory management functions for drivers Just like the Windows XP APIs Enables drivers to allocate memory in user processes User Mode UI service Displays UI in user mode for kernel mode drivers Keeps drivers from launching windows from inside the kernel Virtual Alloc Ex functions Memory management functions for drivers Just like the Windows XP APIs Enables drivers to allocate memory in user processes

ME-I-US New Features Continued Marshalling Helper Functions Helper functions for interprocess data marshalling Services that help drivers to handle user data Monotonic clock Always forward going clock independent of user clock Enables services to calculate elapsed time Marshalling Helper Functions Helper functions for interprocess data marshalling Services that help drivers to handle user data Monotonic clock Always forward going clock independent of user clock Enables services to calculate elapsed time

ME-I-US New Features Continued User Mode Services and Drivers Run all services and some drivers in User Mode host Saves kernel resources and increases robustness Separate OAL OAL has been split from the kernel Allows independent updates Kernel updates and OEM OAL updates can be done independently Enables easier device updates User Mode Services and Drivers Run all services and some drivers in User Mode host Saves kernel resources and increases robustness Separate OAL OAL has been split from the kernel Allows independent updates Kernel updates and OEM OAL updates can be done independently Enables easier device updates

ME-I-US

CPU Requirements The same CPUs as Windows CE 5.0 ARMV4I and above MIPSII with sync instructions (ll, sc) x86 SH4 Best performance is on CPUs with Physical tagged caches Virtual-tag-cached CPUs have a small performance penalty and limitation on virtual mappings Same hardware as Windows CE 5.0 The same CPUs as Windows CE 5.0 ARMV4I and above MIPSII with sync instructions (ll, sc) x86 SH4 Best performance is on CPUs with Physical tagged caches Virtual-tag-cached CPUs have a small performance penalty and limitation on virtual mappings Same hardware as Windows CE 5.0

ME-I-US Compatibility Binary compatibility for applications is the key goal The general structure of the OS will be the same Will maintain compatibility in CoreDLL Minimize impact on Win32 APIs Changes hidden in API libraries Continue to shared DLL code Well behaved SDK applications Should work with little or no changes Apps using undocumented techniques Will likely have to be modified Such as passing handles or pointers between processes Main changes will be in how drivers access client memory Some drivers will migrate with little work Binary compatibility for applications is the key goal The general structure of the OS will be the same Will maintain compatibility in CoreDLL Minimize impact on Win32 APIs Changes hidden in API libraries Continue to shared DLL code Well behaved SDK applications Should work with little or no changes Apps using undocumented techniques Will likely have to be modified Such as passing handles or pointers between processes Main changes will be in how drivers access client memory Some drivers will migrate with little work

ME-I-US Porting Incompatible Apps Some applications will need work Improper use of handles nonstandard memory usage Use of some Windows CE specific APIs Remove old tricks and workarounds Such as handle sharing and pointer tricks Our verification approach Ported Windows Mobile 5.0 to Windows CE 6.0 Beta Running Windows CE 5.0 commercial applications on Windows CE 6.0 Beta Some applications will need work Improper use of handles nonstandard memory usage Use of some Windows CE specific APIs Remove old tricks and workarounds Such as handle sharing and pointer tricks Our verification approach Ported Windows Mobile 5.0 to Windows CE 6.0 Beta Running Windows CE 5.0 commercial applications on Windows CE 6.0 Beta

ME-I-US Other Porting Drivers will require some work System calls Use of worker threads Access to caller’s memory BSP will need some work New memory mappings Changes to OAL to support image updates Drivers will require some work System calls Use of worker threads Access to caller’s memory BSP will need some work New memory mappings Changes to OAL to support image updates

ME-I-US Compatibility Tester Identifies removed, deprecated, and changed APIs Supports both static and runtime analysis Produces a detail report of any compatibility issues it finds Includes documentation and suggestions We will release it before Windows CE 6.0 RTM Will allow customers to prepare ahead of time Identifies removed, deprecated, and changed APIs Supports both static and runtime analysis Produces a detail report of any compatibility issues it finds Includes documentation and suggestions We will release it before Windows CE 6.0 RTM Will allow customers to prepare ahead of time

ME-I-US

Kernel Mode Drivers Drivers are loaded in the kernel space by device.dll Have full access to the kernel’s data structures and memory APIs used do not change Link to a kernel version of coredll.dll called kcoredll.dll Thin layer for API compatibility Directly links the services together without thunk layer Drivers needing the best performance should be kernel mode Such as those with lots of quick calls Drivers are loaded in the kernel space by device.dll Have full access to the kernel’s data structures and memory APIs used do not change Link to a kernel version of coredll.dll called kcoredll.dll Thin layer for API compatibility Directly links the services together without thunk layer Drivers needing the best performance should be kernel mode Such as those with lots of quick calls

ME-I-US User Mode Drivers Loaded by udevices.exe Mostly the same APIs as Kernel Mode No access to kernel structures or memory Kernel will marshal parameters during system calls Examples Expansion buses like USB and SDIO Keyboard and touch Drivers where performance is not a factor should consider moving to user mode Called less often and do more work Loaded by udevices.exe Mostly the same APIs as Kernel Mode No access to kernel structures or memory Kernel will marshal parameters during system calls Examples Expansion buses like USB and SDIO Keyboard and touch Drivers where performance is not a factor should consider moving to user mode Called less often and do more work

ME-I-US Handling Calls App memory already mapped correctly Can access it without re-mapping pointers Don’t need – These APIs are being removed SetProcPermissions MapPtrToProcess, UnMapPtr Accessing callers memory CopyIn / CopyOut ReadProcessMemory / WriteProcessMemory Virtual Alloc Ex APIs Marshalling Helper Library Provides APIs for handling user data App memory already mapped correctly Can access it without re-mapping pointers Don’t need – These APIs are being removed SetProcPermissions MapPtrToProcess, UnMapPtr Accessing callers memory CopyIn / CopyOut ReadProcessMemory / WriteProcessMemory Virtual Alloc Ex APIs Marshalling Helper Library Provides APIs for handling user data

ME-I-US OAL Changes OAL split from kernel Merged into NKLoader Enables separate updates Overall OAL structure remains the same Same OEM functions Access kernel through kernel interface Changes to the OAL initialization Memory mappings for new memory model OAL split from kernel Merged into NKLoader Enables separate updates Overall OAL structure remains the same Same OEM functions Access kernel through kernel interface Changes to the OAL initialization Memory mappings for new memory model

ME-I-US

Windows CE is a Real-Time OS Real time is being able to respond to an interrupt in a bounded maximum time Analysis by OMAC User Group shows that 95% of real-time applications require between 0.5ms to 10 ms respond time And tolerate 10% variations, or 50µs to 1ms jitter Real time is being able to respond to an interrupt in a bounded maximum time Analysis by OMAC User Group shows that 95% of real-time applications require between 0.5ms to 10 ms respond time And tolerate 10% variations, or 50µs to 1ms jitter Interrupt every.5 ms to 10 ms 50µs to 1 ms Jitter Typical Real-Time Requirements

ME-I-US Real-Time Kernel Windows CE achieves real-time by the design of the kernel and the drivers The majority of the kernel and driver code can be interrupted The uninterruptible parts are small discrete units so interrupts can be handled quickly The length of the largest part is biggest latency Windows CE 6.0 Beta kernel and drivers are designed with the same real-time constraints Windows CE achieves real-time by the design of the kernel and the drivers The majority of the kernel and driver code can be interrupted The uninterruptible parts are small discrete units so interrupts can be handled quickly The length of the largest part is biggest latency Windows CE 6.0 Beta kernel and drivers are designed with the same real-time constraints

ME-I-US Windows CE Test Results Respond time test using the following configuration Samsung SMDK2410 development board 200 MHz ARM with 16x16 cache Windows CE 5.0 with full UI Running a WMV video Respond time test using the following configuration Samsung SMDK2410 development board 200 MHz ARM with 16x16 cache Windows CE 5.0 with full UI Running a WMV video ISR startsIST starts minimum 1.2 µs31.7 µs average 3.3 µs67.2 µs Maximum 13.3 µs103.0 µs Time in microseconds (µs) Windows CE Real-Time Test Results

ME-I-US Win CE 6.0 Beta Real-Time The new kernel has the same response times as the current kernel May even perform slightly better because of reduced system call overhead Performance between app and kernel will be better Drivers and services in services.exe will be slightly worse The new kernel has the same response times as the current kernel May even perform slightly better because of reduced system call overhead Performance between app and kernel will be better Drivers and services in services.exe will be slightly worse

ME-I-US Platform Builder No more multiple tools for development Platform Builder now a plug in wizard in Visual Studio 2005 OS designs are located now under %WINCEROOT%\OSDesigns An OS design directory hierarchy is new too %WINCEROOT%\OSDesigns\OSDesign1 \OSDesign1 – directory for the OS design OSDesign1.ncb – VC++ Intellisense data base OSDesign1.sln - Visual Studio solution OSDesign1.suo – Visual Studio solution user options No more multiple tools for development Platform Builder now a plug in wizard in Visual Studio 2005 OS designs are located now under %WINCEROOT%\OSDesigns An OS design directory hierarchy is new too %WINCEROOT%\OSDesigns\OSDesign1 \OSDesign1 – directory for the OS design OSDesign1.ncb – VC++ Intellisense data base OSDesign1.sln - Visual Studio solution OSDesign1.suo – Visual Studio solution user options

ME-I-US OS Design directory structure %WINCEROOT%\OSDesigns\OSDesign1\ OSDesign1 RelDir Device_Emulator_ARMV4I_Debug Device_Emulator_ARMV4I_Release Subproject1 WINCE600 Name of BSP for OS design cesysgen OAK %WINCEROOT%\OSDesigns\OSDesign1\ OSDesign1 RelDir Device_Emulator_ARMV4I_Debug Device_Emulator_ARMV4I_Release Subproject1 WINCE600 Name of BSP for OS design cesysgen OAK

ME-I-US OS design templates

ME-I-US The catalog No more OSDesignView tree Catalog view now shows selected components Add components to design just by checking checkbox No more OSDesignView tree Catalog view now shows selected components Add components to design just by checking checkbox

ME-I-US Adding an application Adding a new project is very straight forward In the Solution Explorer right click on the Subprojects node Add a new project Add an existing project Adding a new project is very straight forward In the Solution Explorer right click on the Subprojects node Add a new project Add an existing project

ME-I-US New project wizard

ME-I-US Added project The newly added project is both a SOURCES project and has a PBXML file to describe the project to the IDE

ME-I-US

Questions….. Thank You for coming