Download presentation
Presentation is loading. Please wait.
Published byEllen McDonald Modified over 9 years ago
1
Thomas Ball Principal Researcher Microsoft Corporation Sebastian Burckhardt Researcher Microsoft Corporation Madan Musuvathi Researcher Microsoft Corporation Shaz Qadeer Senior Researcher Microsoft Corporation TL58
4
Madan Musuvathi Researcher Microsoft Corporation
6
Madan Musuvathi Researcher Microsoft Corporation
7
CAP Memory Model bugs Memory Model bugs Monitors Coverage Repro Testing Data races Data races Debugging Visualization Unmanaged Program Unmanaged Program Windows Managed Program Managed Program.NET CLR Record the interleaving executed Drive the program along an interleaving Record the interleaving executed Drive the program along an interleaving
10
Kernel: Threads, Scheduler, Synchronization Objects Kernel: Threads, Scheduler, Synchronization Objects While(not done) { TestScenario() } While(not done) { TestScenario() } TestScenario() { … } Program CHESS CHESS runs the scenario in a loop Every run takes a different interleaving Every run is repeatable Win32/.NET Uses the CAP scheduler To control and direct interleavings Detect Assertion violations Deadlocks Dataraces Livelocks CAP
11
x = 1; … x = k; x = 1; … x = k; x = 1; … x = k; x = 1; … x = k; … n threads k steps each Goal: Scale CHESS to large programs (large k)
12
x = 1; if (p != 0) { x = p->f; } x = 1; if (p != 0) { x = p->f; } x = 1; if (p != 0) { x = 1; if (p != 0) { x = p->f; } x = p->f; } p = 0; Thread 1Thread 2 preemption non-preemption
13
x = 1; … x = k; x = 1; … x = k; x = 1; … x = k; x = 1; … x = k; … n threads k steps each
14
Thomas Ball Principal Researcher Microsoft Corporation
21
EnterCS(cs) if (p != 0) { x = p->f; } LeaveCS(cs) EnterCS(cs) if (p != 0) { x = p->f; } LeaveCS(cs) p = 0; Thread 1Thread 2
25
flag1 = true; if( !flag2 ) DoWork(); flag1 = true; if( !flag2 ) DoWork(); flag2 = true; if( !flag1 ) DoWork(); flag2 = true; if( !flag1 ) DoWork(); Thread 1Thread 2 // initial state volatile bool flag1 = false; volatile bool flag2 = false; // initial state volatile bool flag1 = false; volatile bool flag2 = false;
27
Please fill out your evaluation for this session at: This session will be available as a recording at: www.microsoftpdc.com
29
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.