.


:




:

































 

 

 

 


.




n MS-DOS

n UNIX

n Windows, Solaris, Linux, Mach, OS/2 .

 

n ,

n , , -.

n

n

n :

q

q

n (TLS Win32)

n , . .

 

n , .

n , .

n .

n , .

n (foreground) (background).

q

n

q

n

q

n

q / - .

n (Suspending)

n .

 

 

n ,

q (Spawn)

n . ( ).

n .

q

n

n .

q

n

q

n .

 

Windows NT/2000/XP

 

Windows NT

 

. .

 

. .

 

 

 

. .

 

n .

n

q è DoS .

q .

q , .

.

n

q è .

q . (Pool ).

q .

q

n à . , .

n à. , .

n

q è .

q DoS .

 

n (User-level threads)

n (Kernel-level threads)

 

n

n .

 

 

n

n .

q : OS/2, Windows

 

n

n

n .

q : Solaris, Windows

 

Windows API

#include <iostream>

#include <windows.h>

// , .
// p
DWORD __stdcall CharsThread(LPVOID p)
{
// LPVOID p
TCHAR c = *(TCHAR*)(p);

 

//
while(1)
{
std::cout << c;
}

return 0;
}

int _tmain(int argc, _TCHAR* argv[]) {
//
HANDLE hThreads[2];
TCHAR asterisk = '*';
TCHAR exclam = '!';

// , '*'
hThreads[0] = CreateThread(NULL, 0, CharsThread, &asterisk, 0, NULL);
// , '!'
hThreads[1] = CreateThread(NULL, 0, CharsThread, &exclam, 0, NULL);

//
#define TIMEOUT 2000
// TIMEOUT
WaitForMultipleObjects(2, hThreads, TRUE, TIMEOUT);
/* .

*/

 

CloseHandle(hThreads[0]);
CloseHandle(hThreads[1]);
return 0;

}

 

POSIX 1003.1

#include <pthread.h>

#include <stdio.h>

 

void *Thread(void *string)

{

int i;

for (i=0; i<10; i++)

printf("%s\n", (char *)string);

pthread_exit(NULL);

}

int main()

{

char *e_str = "Hello!";

char *f_str = "Bonjour!";

pthread_t e_th;

pthread_t f_th;

int rc;

rc = pthread_create(&e_th, NULL, Thread, (void *)e_str);

if (rc) exit(-1);

rc = pthread_create(&f_th, NULL, Thread, (void *)f_str);

if (rc) exit(-1);

pthread_exit(NULL);

}

 

 

Windows 2000

n

q BOOL QueueUserWorkItem(PTHREAD_START_ROUTINE pfnCallback, PVOID pvContext, ULONG dwFlags);

n

q HANDLE CreateTimerQueue();

q BOOL CreateTimerQueueTimer(PHANDLE phNewTimer, HANDLE hTimerQueue, WAITORTIMERCALLBACK pfnCallback, PVOID pvContext, DWORD dwDueTime, DWORD dwPeriod, ULONG dwFlags);

q BOOL DeleteTimerQueueTimer(HANDLE hTimerQueue, HANDLE hTimer, HANDLE hCompletionEvent);

n

q BOOL RegisterWaitForSingleObject(PHANDLE phNewWaitObject, HANDLE hObject, WAITORTIMERCALLBACK pfnCallback, PVOID pvContext, ULONG dwMilliseconds, ULONG dwFlags);

q BOOL UnregisterWaitEx(HANDLE hWaitHandle, HANDLE hCompletionEvent);

 

(Fibers) Windows NT

PVOID ConvertThreadToFiber(PVOID pvParam);

 

PVOID CreateFiber(DWORD dwStackSize, PFIBER_START_ROUTINE pfnStartAddress, PVOID pvParam);

 

VOID SwitchToFiber(PVOID pvFiberExecutionContext);

 

VOID DeleteFiber(PVOID pvFiberExecutionContext);

 

n SISD

q ; .

n SIMD

q ( ).

n MISD

q

n MIMD

q .

 

 

SMP AMP (ASMP)

n SMP (Symmetric Multi Processing)

q .

q , .

n AMP (Asymmetric Multi Processing)

q (master) .

q

q (slave) .

 

SMP versus AMP. .

 

n .

q

n

q .

n

q .

n

q

n

q .

 

SMP

n :

q (Standby processor)

q (Affinity processor)

q (Ideal processor)

q (Last processor) .

q (NT-)

 

c Windows 2000

 

n

q UNIX, Linux

n ()

q THE, MULTICS, Windows NT

n

q IBM VM/370, JVM

n

q MIT

n ( -)

q QNX, MINIX

 

 

(, Layered)

 

.

1. ( )

2. . .

3. , . , .

4. , (

5. .

6. , .

7. . .

8. .

 

n (Virtual Machine, VM)

 

 


(MINIX, QNX, Fluke, Paramecium, SPIN, Vino)

n , .

n .

n , , :

q

q

q

q

q .

 

n

q .

q

n

q ˸

n

q

q

n

q . .

n

q

q .

n

q

n -

q .

 

 

n (IPC Inter Process Communications)

n -

n

 

 

n :

q , ..: , ..

q () .

 

n

n Linux ~2 500 000 .

n Windows XP ~6 000 000 .

q ( ) 6 16 1000

q ~70% .

q

n

 

. .

n Singularity (Microsoft Research)

q Sing#

n

n

n

q

n (Domain)

q

n

n

n

n

q

n

 

 

n

q

n

q :

n

q

 

n R = {r} ,

n W={w} , .

n , :

 

 

n .

q

q , .

 

n , .

n

q ,

q : ,

q () ( )

q (), , .

 

x=e , , , ,

 

 

n

q

n

q ,

n

q

n

q , , -

 

:

n

q

q

q

n IRQL

q

q

q

n

q

q

 

- Windows

. .

 

n KeAcuireSpinLock(PKSPIN_LOCK pSpinLock, PKIRQL pOldIrql);

n KeReleaseSpinLock(PKSPIN_LOCK pSpinLock, PKIRQL pNewIrql);

 

:

n ()

q (last) , . , last.

n

q , . .

n

q .

 

n - , :

1.

2. wait . , , wait

3. signal . , wait

 

Win32

n

q VOID InitializeCriticalSection(LPCRITICAL_SECTION lpcs)

q VOID EnterCriticalSection(LPCRITICAL_SECTION lpcs)

q VOID LeaveCriticalSection(LPCRITICAL_SECTION lpcs)

n

q HANDLE CreateMutex(LPSECURITY_ATTRIBUTE lpsa, BOOL bOwner, LPCTSTR szName)

q Wait-

q BOOL RelaseMutex(HANDLE hMutex)

n

q HANDLE CreateSemaphore (LPSECURITY_ATTRIBUTE lpsa, LONG cSemInitial, LONG cSemMax, LPSTR lpszSemName)

q Wait-

q BOOL ReleaseSemaphore(HANDLE hSem, LONG cRelease, LPLONG lpPrev);

n

q HANDLE CreateEvent(LPSECURITY_ATTRIBUTE lpsa, BOOL fManual, BOOL fState, LPSTR szName)

q Wait-

q BOOL SetEvent(HANDLE hEvent)

q BOOL ResetEvent(HANDLE hEvent)

 

/

n - .

n -

n

 

/

n .

n .

n - , .

 

n

n .

 

n

n

n

n

n

 

 

n

n ()

n .

 

n

n

n .

q .

q (exception) (0xEh Intel)

n

q , .

 

 

n

n

n ( , ..)

n

n

q

q

n

n

n

n

n

n

n

n

n ,

n ,

n , (overlays).

n

q .

n

q ,

q

n

n ,

n .

n ; .

. .

n

n

. .

n 2U

n s, , 2U-1 < s <= 2U,

n 2U-1

n 2U-2 < s <= 2U-1, .

 

. .

n (Logical). ,

n (Relative). , .

n (, physical). .

.

n () .

n

n .

 

n

n (pages). (frames).

n

q

q .

n

n

n :

n , .

 

.

n

q

n (/),

n .

 

1. (/)

,

1. , , .

2. .

3. , ()

1. -

2. () .

3. - .

4. .

 

n

q

q .

n , .

n

q () , .

n

q

q , .

n ().

q ,

q .

 

(Thrashing)

n ,

n , .

 

1. .

2. .

3. .

 

.

 

n , -

n / .

 

n (page table).

n (page table entry - PTE) .

n , .

n (Page Fault)

 

n , , .

n , .

 

n

n .

n .

 

(TLB Translation Lookaside Buffer)

n

q

q

n PTE, TLB.

 

TLB

n , TLB

n PTE TLB ( TLB), TLB

n TLB PTE.

n

n

n TLB PTE.

 

n

n

n

n .

n

n , ( ). .

n , , . .

 

n ,

n

n

n .

 

n

n

n

n : , .

 

-

n

q

q

n

q

q

q

q

q

 

 

:

n

n

n

n

 

(Fetch Policy)

n ,

q

q

n (Windows 2000)

n (Windows XP)

n ,

n - .

n (, NUMA)

n .

n .

n , .

n

n (Least Recently Used LRU)

n FIFO

n (Clock Policy)

n .

n , .. .

LRU

n

n , .

n .

FIFO

n .

n (Round-robin).

n .

n , .

n .

Clock Policy ( 1)

n

n (Use bit)

n 1

n 1

n .

n .

Clock Policy. ( 2)

n

q , (u=0, m=0)

q , (u=1, m=0)

q , (u=0, m=1)

q , (u=1, m=

n , . u . (u=0, m=0) .

n 1 , (u=0, m=1), . .

n 2 , 1.

 

n FIFO

n , :

q

q

 

Windows 2000

n

q (Active/ Valid)

q (Transition)

q (Standby)

q (Modified)

q , (Modified no-write)

q (Free)

q (Zeroed)

q (Bad)

 

: ?

 

n , .

n .

n .

 

n

q

q

n

q , .

 

, .

n ,

n

n .

n .

 

,

n .

n , .

n .

 

,

n , , . .

n , .

n .

 

(working set strategy)

 

() Windows 2000

 

n (345 50 )

n , .

n , .

n .

 

Windows 2000

n , .

q , , .

q

q , ( 6 )

q ( Windows XP/2003 )

 

-

.

n

n ()

q

q

n -

n ()

 

n

n

n

q

q

q

n

n .

q (): 16 (Intel 8080), 20 (Intel 8086), 32 (Intel 80386), 36 (Intel Pentium), 64 (Intel Itanium /Itanium 2)

n ( )

n

q (): 8 (Intel 8080), 16 (Intel 8086), 32 (Intel 80386), 64 (Intel Pentium)

n

q /

q

q ( )

 

 

-

n

q

q

q

n ,

n () -

() -

n , .. .

n

-

n

n

n

n

n

-

1. -.

2. - .

3. , .

4. - .

5.

6. .

-

n (PIO)

n

n (DMA)

-

n

q - .

n -,

n -.

q -

n

q

q ( ).

q :

n /, /, / ..

 

- (1)

n -

n

n

n

n

n (PnP)

n

n -

n

-

n () -

n -

n -

n - -

n

n .

q ( - )

n -

q ( -, direct I/O)

q - (buffered I/O)

n

n

n

-

n

q

q ,

n

q

q

q -

n

q ( )

q ( )

n

 

n ( )

q

n

q

q

q

q ..

 

n

n -

q

n - (Driver Kernel Interface, DKI)

n - (Driver Device Interface, DDI)

q DKI/DDI

q Driver Development Kit (DDK)

n

q

q Windows 2000

q (Legacy) Windows NT

q

q WDM (Windows Driver Model)

n ()

n

n

 

Windows 2000

1. 1

1. IRQL.

2. . (traps) ISR

3. ISR

4. ISR DPC,

2. 2

1. IRQL DPC/Dispatch

2. .

 

-

n -

n -.

q

q

n - -. .

- Windows 2000

n

q -.

n , -

q .

q WaitForMultipleObjects 64 .

q

n - APC (Asynchronous Procedure Call)

q - .

n - (Input-Output Completion Port)

q .

q .

q .

q .

q .

 

 

- Windows 2000

1. 1

1. DCP- - -

2. - APC -

2. 2

1. APC.

2. APC- -

3. APC- .





:


: 2017-02-11; !; : 565 |


:

:

. .
==> ...

1430 - | 1397 -


© 2015-2024 lektsii.org - -

: 0.598 .