Download Colin Roby and Jaewook Kim - WindowsThread

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Join-pattern wikipedia , lookup

Stream processing wikipedia , lookup

Multi-core processor wikipedia , lookup

Parallel computing wikipedia , lookup

Process management (computing) wikipedia , lookup

Java ConcurrentMap wikipedia , lookup

Scheduling (computing) wikipedia , lookup

Monitor (synchronization) wikipedia , lookup

Thread (computing) wikipedia , lookup

Transcript
[CMSC 621] Advanced Operating Systems
Windows Threading
Colin Roby
Jaewook Kim
OS, Process, and Thread for
Windows OS
Applications
Programming paradigms
Threads Interface
Operating System
Microkernel
Multi-Processor Computing System
P
P
P
P Processor
P
Thread
P

P
Process
Hardware
Legacy Window Threading
Model
(Co-operative Threading –
Windows 3.1 and 95)
Co-operative Threading
Used by old 16-bit Window Platform
Invented to overcome the lacking of a hardware timer
Thread continues execution until
Thread terminates
Thread executes an instruction causing wait (e.g., IO)
Thread volunteers to stop (invoking yield or sleep)
Terminate
(call scheduler)
Scheduler
dispatch
Exited
Running
Yield
(call scheduler)
Block for resource
(call scheduler)
Create
Ready
Blocked
Resource becomes available
(move to ready queue)
Architecture for Cooperative
Threading Model
Use serialized message queue
All user input from keyboard & mouse are queued
Next message is not sent to program until current
message is fully processed
Message based program interaction
Prior to receiving message, program stays dormant in
memory
Message queue sends message to program
Program starts processing message
Program returns control back to window
Advantages & Disadvantages
Advantage
Safe and easy to use.
No need to worry about other threads changing shared
variables due to its exclusive nature
Disadvantage
Only one thread can be active
Threads depend on each other to yield control, results
in performance decrease in heavily loaded systems.
Threading Models from
Windows NT to 2003
(Preemptive Threading)
Preemptive Multiprocessing
Preemptive multi-processing operating system
The OS schedules the CPU time
The application can be preempted by OS scheduler
Terminate
(call scheduler)
Scheduler
dispatch
Exited
Running
Block for resource
(call scheduler)
Yield, Interrupt
(call scheduler)
Create
Ready
Blocked
Resource free, I/O completion interrupt
(move to ready queue)
* Kai Li – Non-Preemptive and Preemptive Threads
Windows Thread
The unit of execution (in UNIX, Process is the unit)
Basically one-to-one mapping
Fiber Library for the M:M Model
Each thread contains
A thread id
Register set
Separate user and kernel stacks
Private data storage area
The register set, stacks, and private storage area are
known as the context of the threads
The primary data structures of a thread include:
ETHREAD (executive thread block)
KTHREAD (kernel thread block)
TEB (thread environment block)
Windows Thread Types
Single Threading
Each process is started with a single thread
Multiple Threading
A thread can be created by Win32 Pthread or
Windows Thread API
Hyper Threading
Simultaneous multithreading technology on
the Pentium 4 microarchitecture by Intel
Supported by Windows 2000 or more
Windows Threading Models
Win32 Threading Model
Win32 Pthread or Windows Thread API
COM (Component Object Model)
Threading Model
Single Threaded Apartments (STA)
Multi Threaded Apartments (MTA)
Both Threading Model (STA or MTA)
Win32 Threading API Calls
Some of Win32 calls for managing processes, threads and fibers
12
Win32 Threading Example
start_servers( ) {
HANDLE thread; DWORD id;
thread = CreateThread(0, // security attributes
0, // default # of stack pages allocated
(LPTHREAD_START_ROUTINE) server, // start routine
(LPVOID)0, // argument
0, // creation flags
&id); // thread ID
WaitForSingleObject(thread, INFINITE);
...
}
DWORD WINAPI server(void *arg) {
while(TRUE)
// get and handle request
return(0);
}
Win32 Threading Example cont.
rlogind(int r_in, int r_out, int l_in, int l_out) {
HANDLE in_thread, out_thread;
two_ints_t in={r_in, l_out}, out={l_in, r_out};
in_thread = CreateThread(0, 0, incoming, &in, 0, &id);
out_thread = CreateThread(0, 0, outgoing, &out, 0, &id);
WaitForSingleObject(in_thread, INFINITE);
CloseHandle(in_thread);
WaitForSingleObject(out_thread, INFINITE);
CloseHandle(out_thread);
}
Win32 Threading Example cont.
ExitThread((DWORD) value);
return((DWORD) value);
WaitForSingleObject(thread, timeOutValue);
GetExitCodeThread(thread, &value);
CloseHandle(thread);
COM Threading
Components don’t live on threads
An instance is a ‘chunk’ of memory
associated with an apartment
Apartments determine which threads can
call the component
Thread switch is decided by the proxy
based on apartment and threading model
16
COM Threading (STA vs. MTA)
COM Object
COM Object
COM Threading Example
int main()
{
/* ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
for STA */
::CoInitializeEx(NULL, COINIT_MULTITHREADED); /* for MTA */
DisplayCurrentThreadId();
ILegacyCOMObject1Ptr spILegacyCOMObject1;
spILegacyCOMObject1.CreateInstance(__uuidof(LegacyCOMObject1));
spILegacyCOMObject1 -> TestMethod1();
::CoUninitialize();
return 0;
}
Threading Model for
Multicore System
Thread Management
Program actively assigns software thread to
hardware thread.
Assign thread – strongly suggests which hardware
thread should the software thread run on
Program passively relies on window scheduler to
assign software thread to hardware thread
Efficiency of the threading is dependent upon the
scheduling algorithm.
Hardware Design Variance
Two hardware thread share one core
This is known as simultaneous multi-threading (aka
Hyper-Threading)
Multiple cores within the same cpu, one or more
hardware thread on each core
Existing architecture includes dual-core, quad core.
Detecting multicore cpu and
hardware thread
Window relied on threading packages provided
by processor manufactures to detect the number
of cpu cores and available hardware
Detect the cpu core topology – how many real
hardware threads exist
Detect the relationship between the hardware threads
such as sharing data caches or sharing instructions
set
Mechanics of Window Scheduler
Preemptive, time slicing based
Using system clock to interrupt each thread
Each thread is allocated a fixed amount of time quantum
Priority Driven
Highest priority ready thread always run first
Higher priority thread will interrupt lower priority thread
before its time slicing is used up, or even before it
starts its quantum
Manages processor affinity
Assign a thread to a particular processor
Processor Preference for Window
Scheduler
Each thread maintains two CPU numbers stored
in the kernel thread block:
Ideal processor – the preferred processor the thread
should run on (often specified by programmer)
Last processor – the processor on which the thread
last ran
Scheduler processor assignment preference:
If the ideal processor is idle, pick the ideal processor
Pick the last processor if it is idle
Pick the executing processor – where the current
scheduling code is running
Scan all the cpu from highest cpu number to lowest
cpu number.
Additional Slides
Processes and Threads (1)
Basic concepts used for CPU and resource management
26
Processes and Threads (2)
Relationship between jobs, processes, threads, and
fibers
27
Windows Threading
Architecture
One-to-one Threading Model
A process in Windows XP is inert; it executes
nothing
A process simply owns a 4GB address space that
contains code and data for an application.
In addition, a process owns other resources, such as
files, memory allocations, and threads.
Every process in Windows XP has a primary
thread.
Threads in Windows XP are kernel-level threads.
Per-thread data structures:
Total user/kernel time, kernel stack, thread-scheduling info.,
Thread-local storage array, thread environment block (TEB),
List of objects thread is waiting on, synchronization info. Etc.
Fibers vs. Threads
Fibers vs. Threads
Fibers are often called “lightweight” threads.
They allow an application to schedule its own “threads” of
execution.
Fibers are invisible to the kernel.
They are implemented in user-mode in Kernel32.dll
Fibers interface
ConvertThreadToFiber() converts a thread to a running fiber.
A new fiber can be created using CreateFiber().
The new fiber runs until it exits or until it calls SwitchToFiber().
Fibers provide a functionality of the many-to-many
model.
Thread Cancellation
Terminating a thread before it
has finished
Two general approaches:
Asynchronous cancellation
terminates the target thread
immediately
Deferred cancellation allows the
target thread to periodically check if
it should be cancelled
References
1. Detecting Multi-Core Processor Topology in an IA32 Platform by Khang Nguyen and shiHjon Kuo (Intel
software network)
2. Inside Microsoft Windows 2000 by David A
Solomon and Mark E. Russinovich
3. Programming Windows 95 by Charles Petzold Microsoft Press.