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