81.5. УПРАВЛЕНИЕ ПОТОКАМИ И ПРОЦЕССАМИ
THIS SECTION IS UNDER CONSTRUCTION
Группы процессов (задания)
Экранная группа
разделяет одну консоль (управляющий терминал)
Процессы
владельцы ресурсов
memory (virtual)
environment
other resources (files etc)
Потоки
владельцы ресурса CPU
Static priority
Dynamic priority
Scheduling class (FIFO, RR, other)
Sporadic time
deadline
Rate Monolythic Analysis
Волокна (Fiber)
Scheduling
распределение процессорного времени (ресурса)
Приоритетное
Адаптивное (добавляем 1)
Deadline-driven
Проблема инверсии приоритетов
Потоки H (high-priority) и L (Low-priority) разделяют ресурс P
T - третий поток (средний приоритет)
Если H ready, когда активен L, и L заблокировал P,
то H вытеснит L.
Как только H захочет ресурс P, то заблокируется.
Если в это время готов T, то будет выполнсться он а не L.
Как результат - получаем что H ждет долго
Решение - наследование приоритетов:
Если L блокировал ресурс P, который нужен H,
то при блокировании H, приоритет L повышается до H.
Решение - Priority Ceiling Protocol
Приоритет любого потока обращающегося к объекту
повышается до указанного уровня.
Процессы
Запуск нового процесса
system
popen
fork
QNX
//spawn.h
pid_t spawn(const char * path,
int fd_count,
const int fd_map[],
const struct inheritance* inherit,
char* const argv[],
char* const envp[]);
Потоки
Pthread scope
PTHREAD_SCOPE_SYSTEM
PTHREAD_SCOPE_PROCESS
int pthread_attr_setscope(pthread_attr_t* attr, int scope);
int pthread_attr_getscope(const pthread_attr_t* attr, int* scope);
int pthread_create(pthread_t* thread,
const pthread_attr_t* attr,
void* (*start_routine)(void*),
void* arg);
void pthread_exit(void* value_ptr);
int pthread_cancel(pthread_t thread);
int pthread_setcancelstate(int state, int* oldstate);
PTHREAD_CANCEL_ASYNCHRONOUS
PTHREAD_CANCEL_DEFFERED
void pthread_testcancel(void);
void pthread_cleanup_push(void(*routine)(void*), void* arg);
void pthread_clenup_pop(int execute);
// QNX
int pthread_abort(pthread_t thread);
pthread_attr_get
set
detachstate Joinable/detached
guardsize
inheritsched
schedparam
schedpolicy
scope
stackaddr
stacklazy
stacksize
PTHREAD_CREATE_JOINABLE
PTHREAD_CREATE_DETACHED
PTHREAD_EXPLICIT_SCHED
int pthread_join(pthread_t thread, void** value_ptr);
int pthread_timedjoin(pthread_t thread, void** value_ptr,
const struct timespec* abstime); // QNX, no POSIX
int pthread_detach(pthread_t thread);
sched_yield()
побочный эффект:
sleep()
delay()
Barriers
int pthread_barrier_init(pthread_barrier_t* barrier,
const pthread_narrierattr_t* attr,
int pthread_barrier_wait(pthread_barrier_t* barrier);
int pthread_barrierattr_init
pthread_barrierattr_destroy
pthread_barierattr_set
get
pshared
Thread specific data
pthread_key_create
pthread_getspecific
pthread_setspecific
IPC
mutex
event
semaphore
Windows API:
CreateProcess
CreateProcessAsUser
ExitProcess
GetCurrentProcess
GetCurrentProcessId
GetExitCodeProcess
GetPriorityClass
SetPriorityClass
GetProcessAffinityMask
SetProcessAffinityMask
GetProcessHeap
GetProcessHeaps
GetProcessPriorityBoost
SetProcessPriorityBoost
GetProcessShutdownParameters
SetProcessShutdownParameters
GetProcessTimes
GetProcessWorkingSetSize
SetProcessWorkingSetSize
OpenProcess
TerminateProcess
CreateThread
CreateRemoteThread
ExitThread
GetCurrentThread
GetCurrentThreadId
GetExitCodeThread
GetThreadPriority
SetThreadPriority
GetThreadPriorityBoost
SetThreadPriorityBoost
GetThreadTimes
ResumeThread
SuspendThread
SetThreadAffinityMask
SetThreadIdealProcessor
TerminateThread
CreateFiber
ConvertThreadToFiber
DeleteFiber
GetCurrentFiber
GetFiberData
SwitchToFiber
CreateEvent
OpenEvent
PulseEvent
ResetEvent
SetEvent
CreateMutex
OpenMutex
ReleaseMutex
CreateSemaphore
OpenSemaphore
ReleaseSemaphore
CreateWaitableTimer
OpenWaitableTimer
SetWaitableTimer
Sleep
SleepEx
WaitForSingleObject
WaitForSingleObjectEx
WaitForMultipleObjects
WaitForMultipleObjectsEx
SignalObjectAndWait
InitializeCriticalSection
TryEnterCriticalSection
EnterCriticalSection
LeaveCriticalSection
DeleteCriticalSection
InterlockedCompareExchange
InterlockedDecrement
InterlockedExchange
InterlockedExchangeAdd
InterlockedIncrement
TlsAlloc
TlsFree
TlsGetValue
TlsSetValue
CreatePipe
CreateNamedPipe
ConnectNamedPipe
DisconnectNamedPipe
WaitNamedPipe
PeekNamedPipe
TransactNamedPipe
CallNamedPipe
GetNamedPipeHandleState
SetNamedPipeHandleState
GetNamedPipeInfo
CreateMailslot
GetMailslotInfo
SetMailslotInfo
LoadLibrary
LoadLibraryEx
FreeLibrary
FreeLibraryAndExitThread
GetProcAddress
UNIX:
fork
vfork
clone
execl/execv
_exit
wait
waitpid
waitid
getpid
getppid
getuid
geteuid
getgif
getegid
seteuid
setegid
setuid
setgid
nice
getrlimit
setrlimit
RLIMIT_CORE
RLIMIT_CPU
RLIMIT_DATA
RLIMIT_FSIZE
RLIMIT_NOFILE
RLIMIT_STACK
ulimit
getrusage
getenv
setenv
putenv
unsetenv
pthread_create
pthread_join
pthread_mutex_lock
pthread_mutex_unlock
pthread_cond_signal
pthread_cond_wait
pthread_cancel
pthread_testcancel
pthread_cleanup_push
pthread_cleanup_pop
pipe
dup
dup2
Index Prev Next