background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Wykład z Programowania Sieciowego 

Programowanie wielowątkowe

i komunikacja międzyprocesowa 

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Tematyka wykładu

Wielowątkowość i 

serwery sieciowe

Procesy

Wątki 

Komunikacja międzyprocesowa

Synchronizacja

Wielowątkowość w systemie UNIX

R Stevens

 „

Programowanie usług sieciowych w systemie Unix tom 2 WNT 

2001

 

Programowanie wielowątkowe w systemie UNIX

1.

Pojęcie wielowątkowości

2.

Typy wielowątkowości w systemie UNIX

Program wieloprocesowy

1.

Program wielowątkowy

3.

Systemy operacyjne i wielowątkowość

1.

Tworzenie wątków

1.

fork, exec , exit

2.

pthreads

4.

Komunikacja między-procesowa

1.

Pipes and fifos

2.

Message Queues

3.

Mutexes Condition Variables

4.

Read-Write Lock

5.

Rekord Locking

6.

Semaphores

1.

Posix 

2.

System V

7.

Shared Memory

WIELOWĄTKOWOŚĆ

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Typologia serwerów

Typy serwerów

Serwer 

jednowątkowy

Serwer 

wielowątkowy

Serwer pozornie 

wielowątkowy

Obsługa  klienta

Oczekiwanie

Zalety
• Prostota implementacji
• Nadaje się do systemów 

operacyjnych/środowisk jednowątkowych

• Małe wymagania pamięciowe

Wady
• Nadaje się tylko do usług krótkotrwałych
• Klient blokując swoją sesje blokuje cały 

serwer

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Utworzenie nowego 

procesu

Oczekiwanie

Wątek 

główny

Typologia serwerów

Typy serwerów

Serwer 

jednowątkowy

Serwer 

wielowątkowy

Serwer pozornie 

wielowątkowy

Stop

Start

Obsługa 

klienta

Stop

Start

Obsługa 

klienta

Zalety

Implementacja umiarkowanie trudna 

Obsługuje wielu klientów jednocześnie 

Nadaje się do usług krótko i długotrwałych

Odporny na błędy. Klient blokując swoją sesję 
nie ma wpływu na pozostałych klientów

Wady

Stosunkowo powolny

Możliwy do 
zaimplementowania w 
systemach operacyjnych 
wspierających 
wielowątkowość 

Wymaga sporych zasobów 
pamięciowych

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Typologia serwerów

Typy serwerów

Serwer 

jednowątkowy

Serwer 

wielowątkowy

Serwer pozornie 

wielowątkowy

E.O.  klient 1

Sprawdzenie 

E.O.  klient 2

....

E.O.  klient n

Dołączenie 

nowego klienta

Zalety

Szybki w działaniu

Obsługuje wielu klientów jednocześnie 

Nadaje się do usług krótko i długotrwałych

Możliwy do zaimplementowania w systemach 
nie wspierających wielowątkowości

Wady

Trudny do implementacji 

Łatwy do zawieszenia przez 
klientów 

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Typologia serwerów  

 serwery przechowujące stan interakcji  ( stanowe )

 serwer nie przechowujący stanu interakcji (bez-stanowy)

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Procesy  

Stos

Stan Procesora

Stos

Stan Procesora

Zmienne 

globalne

Sterta 

zmiennych 

dynamicznych

Zmienne 

globalne

Sterta 

zmiennych 

dynamicznych

Program 1

Program 2

System 

operacyjny

System 

operacyjny

Sprzęt

Sprzęt

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Wątki w ramach procesu  

Stos

Stan Procesora

Stos

Stan Procesora

Zmienne globalne

Sterta zmiennych dynamicznych

System 

operacyjny

System 

operacyjny

Sprzęt

Sprzęt

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Procesy programy i wątki

• Program to zbiór rozkazów procesora zorganizowany w 

postaci pliku dyskowego czytelnego dla systemu 

operacyjnego.

• Proces to reprezentacja programu w pamięci systemu 

operacyjnego połączona ze strukturami systemu takimi 

jak kontekst procesu.

• Wątki są składnikami procesu 

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Procesy i programy

Diagram przejść międzystanowych procesu
TW    Wykonywany w trybie użytkownika
TJ      Wykonywany w trybie jądra 
RD     Gotowy do wykonania
Z        Stan zombie
ŚP      Śpi w pamięci
ŚD

Śpi w pamięci SWAP

RDD   Gotowy do wykonania w pamięci SWAP
U        Utworzony
W

Wywłaszczony

 

TU

TJ

RD

ŚP

ŚD

RDD

U

W

Z

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Funkcja select 

Definicja

 

int select (  int nfds, fd_set FAR* readfds,      
         
  fd_set FAR*
 writefds, fd_set FAR* exceptfds,    
         
  const struct timeval FAR *
 timeout );

\nfds  

- ilość deskryptorów testowanych funkcją select. W Windows parametr 

ignorowany
readfds/writefds/except - wskaźnik do struktury fd_set zawierającej deskryptory 
testowane na 

możliwość odczytu/zapisu/obecność danych 

pilnych  
timeout  - ilość czasu w [ms], którą  funkcja select czeka na wystąpienie zdarzenia 
na testowanych deskryptorach

 

Parametry

 

Funkcja czeka na wystąpienie zdarzenia na jednym z wyspecyfikowanych 
deskryptorów. Zdarzeniem jest gotowość urządzenia do odczytu , zapisu  lub 
wystąpienie błędu

Opis

 

Ilość deskryptorów dla których zaszło zdarzenie wyzwalające w przypadku 
sukcesu lub  wartość SOCKET_ERROR  w przypadku błędu 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: Zadklarowana w winsock2.h.
Biblioteka importowa: ws2_32.lib.

accept, connect, recv, recvfrom, send, 

WSAAsyncSelect, WSAEventSelect

 

Patrz także

 

Informacja skrótowa

 

struct fd_set {
        u_int fd_count;
        SOCKET  fd_array[ FD_SETSIZE ]; 
} fd_set;

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Funkcja fork 

Definicja

 

pid_t fork(void);

brak

Parametry

 

Tworzy nowy proces , który jest  dokładną kopią  istniejącego programu. 
Proces tworzący nowy wątek jest procesem rodzicielskim , proces utworzony 
jest procesem potomnym. 

Opis

 

Proces rodzicielski identyfikator procesu potomnego
Proces potomny 0 

Wartość zwrotna

 

Windows NT: Nie
Windows: Nie\

Windows CE: Nie

Linux : Tak

Solaris: Tak

fork1, alarm(2),exec(2),exit(2),fcntl(2),getitimer(2),

     getrlimit(2),memcntl(2),  mmap(2),  nice(2), priocntl(2), 

ptrace(2), semop(2), shmop(2), times(2), umask(2),  wait(2),  

exit(3C), plock(3C),    pthread_atfork(3T),   signal(3C), 

system(3S), thr_create(3T) timer_create(3R),  

attributes(5),standards(5)

Patrz także

 

Informacja skrótowa

 

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Funkcja fork 

Definicja

 

pid_t fork(void);

brak

Parametry

 

Tworzy nowy proces , który jest  dokładną kopią  istniejącego programu. 
Proces tworzący nowy wątek jest procesem rodzicielskim , proces utworzony 
jest procesem potomnym. 

Opis

 

Proces rodzicielski identyfikator procesu potomnego
Proces potomny 0 

Wartość zwrotna

 

Windows NT: Nie
Windows: Nie\

Windows CE: Nie

Linux : Tak

Solaris: Tak

fork1, alarm(2),exec(2),exit(2),fcntl(2),getitimer(2),

     getrlimit(2),memcntl(2),  mmap(2),  nice(2), priocntl(2), 

ptrace(2), semop(2), shmop(2), times(2), umask(2),  wait(2),  

exit(3C), plock(3C),    pthread_atfork(3T),   signal(3C), 

system(3S), thr_create(3T) timer_create(3R),  

attributes(5),standards(5)

Patrz także

 

Informacja skrótowa

 

....
if ( pid = fork() )
{
...
} else
{

}

....
if ( pid = fork() )
{
// PROCES RODZICIELSKI
} else
{

....
if ( pid = fork() )
{
...
}else
{
// PROCES POTOMNY
}

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Współpraca procesów i wątków

Proces 1

Proces 2

Jądro systemu

System Plików

Proces 1

Proces 2

Jądro systemuStr. Jądra

Proces 1

Proces 2

Pamięć 

współdzielona

Wymiana danych za 
pośrednictwem systemu plików 

Wymiana danych za 
pośrednictwem struktur jądra

Wymiana danych za 
pośrednictwem pamięci dzielonej

IPC

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Mechanizmy IPC

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Trwałość obiektów IPC

Proces 1

Jądro systemu

System Plików

Trwałość w ramach Procesu

Trwałość w ramach Jądra

Trwałość w ramach systemu plików

Obiekt IPC jest usuwany 

najpóźniej wtedy gdy 
proces który go utworzył 
kończy działanie

Obiekty trwają najpóźniej do momentu 

jawnego usunięcia lub zakończenia 
działania systemu

Obiekty trwają do momentu 

jawnego usunięcia 

Obiekt IPC 

Trwałość

Łącze komunikacyjne
FIFO

Proces

Mutex ( posix )
Zmienna warunkowa ( 
posix)
Rygiel RW( posix )
Rygiel rekordów 
( posix )
Semafor w pamięci 

Proces

Kolejka komunikatów
Nazwany semafor
Pamięć współdzielona

Jądro

Kolejka komunikatów
Semafor 
Pamięć współdzielona

Jądro

Gniazdo TCP/UDP
Gniazdo UNIX

Proces

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

POSIX  IPC

Kolejki 
komunikató
w

Semafory

Pamięć 
współdzielo
na

Tworzen
ie/ 
usunięci
e

mq_open
mq_close
mq_unlink

sem_open
sem_clos
e
sem_unlin
k
sem_init
sem_destr
oy

shm_open
shm_unlink

Zmiana 
paramet
rów

mq_getattr
mq_setattr

ftruncate
fstat

Wymian

danych/ 
operowa
nie na

mq_send
mq_receive
mq_notify

sem_wait
sem_tryw
ait
sem_post
sem_getv
alue

mmap
munmap

S_TYPEISMQ
S_TYPEISSEM
S_TYPEISSHM

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

POSIX  IPC

Kolejki 
komunikató
w

Semafory

Pamięć 
współdzielo
na

Tworzen
ie/ 
usunięci
e

mq_open
mq_close
mq_unlink

sem_open
sem_clos
e
sem_unlin
k
sem_init
sem_destr
oy

shm_open
shm_unlink

Zmiana 
paramet
rów

mq_getattr
mq_setattr

ftruncate
fstat

Wymian

danych/ 
operowa
nie na

mq_send
mq_receive
mq_notify

sem_wait
sem_tryw
ait
sem_post
sem_getv
alue

mmap
munmap

S_TYPEISMQ
S_TYPEISSEM
S_TYPEISSHM

Pobranie statusu pliku 
lstat, fstat, stat

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

POSIX  IPC

Kolejki 
komunikatów

Semafory

Pamięć 
współdzielo
na

Tworzenie/ 
usunięcie

mq_open

sem_open

shm_open

Odczyt/zapis

O_RDONLY
O_WRONLY
O_RDWR

O_RDONLY

O_RDWR

Utworzenie/ 
wyłączność/inne

O_CREAT
O_EXCL
O_NONBLOCK

O_CREAT
O_EXCL

O_TRUNC

Int  xxx_open( const char *name,  u_int oflag )

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Funkcja _beginthread 

Definicja

 

unsigned long _beginthread( void ( __cdecl 
*
start_address )( void * ), unsigned stack_size, void 
*
arglist );

start_addres  

- wskaźnik do funkcji wątku 

addr 

- rozmiar stosu 

arglist

wskaźnik do danych przekazywanych do funkcji wątku

Parametry

 

Funkcja tworzy nowy wątek wykonania aplikacji. Wątek ten tworzony jest na 
podstawie funkcji podanej pierwszym argumentem. Dla utworzonego wątku 
przydzielany jest stos o rozmiarze podanym drugim argumentem

Opis

 

-1 w przypadku błędu , 0 w przypadku powodzenia 

Wartość zwrotna

 

Windows NT: Tak
Windows: Tak
Windows CE: W wersji 1.0 i późniejszych.
Nagłówek: process.h
Biblioteka importowa: libcmt.lib lub 
msvcrt.lib

 _beginthreadex

 

, CreateThread, 

_endthread, _endthreadex

ExitThread, CloseHandle, select 

Patrz także

 

Informacja skrótowa

 

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

 Łącza i kolejki FIFO

 #include <unistd.h>
 int pipe( int fd[2] );

 fd[0] - ODCZYT
 fd[1] - ZAPIS

ls –la | grep „ala*”  | rm 

pipe_main.cpp

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

 Łącza i kolejki FIFO

 #include <unistd.h>
 int pipe( int fd[2] );

ls –la | grep „ala*”  | rm 

pipe_main.cpp

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

 Łącza i kolejki FIFO

 #include <unistd.h>
 FILE *popen(const char *cmd, const char *type );
 int pclose( FILE *stream );  

Proces 

potomny

Proces 

rodzicielski

fifo.c

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

 Łącza i kolejki FIFO

FIFO umożliwiają jednokierunkowy przepływ danych)

Proces 

potomny

Proces 

rodzicielski

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Kolejki komunikatów

Standard POSIX

 

#include <mqueue.h>

  mqd_t mq_send ( mqd_t dscr, const char *ptr, size_t len, unsigned int prio ) ;
  mqd_t mq_receive ( mqd_t dscr, char *ptr, size_t len, unsigned int *prio ) ;

background image

© 2008 dr inż.. Sławomir Jeżewski 

Katedra Informatyki Stosowanej PŁ

Programowanie Sieciowe

Muteksy 

Standard POSIX

Mutex (mutual exclusion) – jedna z form synchronizacji procesów koncepcyjnie 

polegająca  na wykluczających się alternatywach 

CreateMutex
. . .

lock_the_mutex
. . .

unlock_mutex

#include <pthread.h>
int pthread_mutex_lock ( pthread_mutex_t *p ) ;
int pthread_mutex_trylock ( pthread_mutex_t *p ) ;
int pthread_mutex_unlock ( pthread_mutex_t *p ) ;

#include <pthread.h>
int pthread_mutex_init ( pthread_mutex_t *p, const pthread_mutexattr_t *attr ) ;
int pthread_mutex_destroy ( pthread_mutex_t *p ) ;


Document Outline