[Sysfence-commit] sysfence/dokprojektlic speckonstrukcyjna.tex,1.8,1.9
Status: Alpha
Brought to you by:
emes
|
From: mkoperto <mko...@us...> - 2004-06-06 19:01:04
|
Update of /cvsroot/sysfence/sysfence/dokprojektlic In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28512 Modified Files: speckonstrukcyjna.tex Log Message: opisalem modulu w ktorych sie orientowalem Index: speckonstrukcyjna.tex =================================================================== RCS file: /cvsroot/sysfence/sysfence/dokprojektlic/speckonstrukcyjna.tex,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- speckonstrukcyjna.tex 6 Jun 2004 17:49:54 -0000 1.8 +++ speckonstrukcyjna.tex 6 Jun 2004 19:00:53 -0000 1.9 @@ -53,28 +53,103 @@ \texttt{CHILD} dla \textit{stwatch}) rozró¿nia dzia³anie funkcji dla ró¿nych procesów; \item \textit{void signals\_handling (int onoff)} -- funkcja blokuje (\texttt{SIGBLOCK}) lub odblokowuje - (\texttt{SIGUNBLOCK}) przyjmowanie sygna³ów; wykrzystywana jest przed wej¶ciem programu do sekcji krytycznej - (czyli opercji na pamiêci dzielonej) i po wyj¶ciu; + (\texttt{SIGUNBLOCK}) przyjmowanie sygna³ów; wykorzystywana jest przed wej¶ciem programu do sekcji krytycznej + (czyli operacji na pamiêci dzielonej) i po wyj¶ciu; \end{itemize} \subsubsection{Modu³ \textit{communication}} \begin{itemize} - \item \textit{int semaphore\_init (int val)} -- inicjalizacja pojedeyczego semafora; argument + \item \textit{int semaphore\_init (int val)} -- inicjalizacja pojedynczego semafora; argument \texttt{SEMAPHORE\_SET} lub \texttt{SEMAPHORE\_RESET} decyduje o jego pocz±tkowym stanie; funkcja zwraca \textit{semid}; - \item \textit{semaphore\_wait(int semid)} i \textit{semaphore\_post(int semid)} -- makra do opercji na semaforze; + \item \textit{semaphore\_wait(int semid)} i \textit{semaphore\_post(int semid)} -- makra do operacji na semaforze; \item \textit{int semaphore\_del (int semid)} -- dealokacja semafora; \item \textit{int shared\_mem\_init (int memsize)} -- inicjalizacja pamiêci dzielonej o rozmiarze \textit{memsize}; funkcja zwraca identyfikator pamiêci \textit{shmid}; - \item \textit{void *shared\_mem\_attach (int shmid)} -- przy³aczenie do pamiêci dzielonej o idetyfikatorze + \item \textit{void *shared\_mem\_attach (int shmid)} -- przy³±czenie do pamiêci dzielonej o identyfikatorze \textit{shmid}; funkcja zwraca wska¼nik do pocz±tku pamiêci \textit{shm}; \item \textit{void shared\_mem\_detach (void *shm)} -- od³±czenie od pamiêci; \item \textit{void shared\_mem\_del (int shmid)} -- usuniêcie pamiêci dzielonej; \end{itemize} +\subsubsection{Modu³ \textit{processtitle}} + +Idea tego modu³u zaczerpniêta zosta³a z kodu ¼ród³owego programu \textit{sendmail} (dok³adnie z pliku +sys/conf.c). +\begin{itemize} + \item \textit{void initproctitle (int argc, char **argv)} -- funkcja kopiuje obszar \textit{environ} w nowy + obszar pamiêci; zmienia wska¼nik \textit{environ} aby wskazywa³ na ten obszar; oryginalny obszar + zmiennych ¶rodowiskowych wykorzystywany jest do zwiêkszenia obszaru przeznaczonego na pamiêtanie + nazwy procesu; funkcja wyznacza te¿ maksymaln± d³ugo¶æ nazwy procesu, jest on pamiêtana jest w globalnej + zmiennej modu³u; + \item \textit{void setproctitle (int process, int state, const char *rulename)} -- ustawia tytu³ procesu; + \textit{process} - \texttt{MAIN\_PROCESS} lub \texttt{RULE\_PROCESS}; dozwolone stany (\textit{state}) + to \texttt{STATE\_STOPPED}, + \texttt{STATE\_NORMAL} lub \texttt{STATE\_EXEC}; \textit{rulename} jest wska¼nikiem na ³añcuch umieszczony w apostrofach; +\end{itemize} + +\subsubsection{Modu³ \textit{xalloc}} + +\begin{itemize} + \item \textit{void * xalloc (void * ptr, size\_t size)} -- pomocnicza funkcja do alokacji pamiêci, + je¶li wska¼nik \textit{ptr} ma warto¶æ ró¿n± od \texttt{NULL} obszar jest zwiêkszany; je¶li wyst±pi³ + b³±d podczac przydzielania pamiêci, funkcja koñczy dzia³anie programu z kodem \texttt{EXIT\_MEM}; +\end{itemize} + +\subsubsection{Modu³ \textit{exit}} + +\begin{itemize} + \item \textit{exit.h} -- zwiera definicjê kodów zakoñczenia programu: \texttt{EXIT\_OK}, + \texttt{EXIT\_IO}, \texttt{EXIT\_MEM}, \texttt{EXIT\_NOCONF}, \texttt{EXIT\_NORULE}, + \texttt{EXIT\_PARSE}, \texttt{EXIT\_VALUE}, \texttt{EXIT\_OPTION}, \texttt{EXIT\_SHM}, + \texttt{EXIT\_SEM}, \texttt{EXIT\_BUG}; + \item \textit{void bail\_out (int excode, const char *details)} -- koñczy dzia³anie programu z odpowiednim kodem; + \textit{details} jest dodatkow± informacj± wympisywan± na \textit{stderr}; +\end{itemize} + +\subsubsection{Modu³ \textit{cp2memory}} + +\begin{itemize} + \item \textit{void *cp\_list (void **buf, sf\_list *list)} i \textit{void *cp\_rule (void **buf, sf\_rule *rule)} -- + przekopiowuj± odpowiednie drzewiaste struktury do ci±g³ego bufora; +\end{itemize} + +\subsubsection{Modu³ \textit{conditions}} + +\begin{itemize} + \item \textit{int check\_atomic (sf\_atomic *at)} -- sprawdza warto¶æ wyra¿enia atomicznego; + \item \textit{int check\_expression (sf\_expression *ex)} -- sprawdza warto¶æ wyra¿enia \textit{ex}; +\end{itemize} + +\subsubsection{Modu³ \textit{mainloop}} + +\begin{itemize} + \item \textit{void rule\_watch\_loop (sf\_rule *rule)} -- g³ówna pêtla procesu \textit{sfwatch} + w której cyklicznie wywo³ywane + s± wszystkie funkcje; + \item \textit{void res\_probe\_loop (sf\_database *db)} -- g³ówna pêtla procesu \textit{sffetch}; +\end{itemize} + +\subsubsection{Modu³ \textit{sysfence}} + +Najwa¿niejsze funkcje wywo³ywane w pocz±tkowym okresie dzia³ania aplikacji to (wg. kolejno¶ci wywo³ywania): +\begin{itemize} + \item \textit{read\_config\_files ()}; + \item \textit{open\_files ()}; + \item \textit{daemon ()}; + \item \textit{semaphore\_init ()}; + \item \textit{shared\_mem\_init ()}; + \item \textit{shared\_mem\_attach ()}; + \item \textit{cp\_rule ()}; + \item \textit{fetch\_* ()}; + \item \textit{fork ()}; + \item \textit{signal\_init ()}; + \item \textit{initproctitle ()}; + \item \textit{rule\_*\_loop ()}; +\end{itemize} \subsection{Przep³yw danych} |