Multithreading  &  Shared Memory 

Pthreads: POSIX Threads • is a standard set of C library functions for  multithreaded programming • Programs must include the file pthread.h • Programs must be linked with the pthread  library (‐lpthread) while compilation

Pthreads Programming Model • creation of threads • managing thread execution • managing the shared resources of the  process

main thread • initial thread created when main() is  invoked by the process loader • once in the main(), the application has the  ability to create threads • if the main thread returns, the process  terminates even if there are running  threads in that process, unless special  precautions are taken • to explicitly avoid terminating the entire  process, use pthread_exit()

Thread Termination Methods • implicit termination: • thread function execution is completed • explicit termination: • calling pthread_exit() within the thread • calling pthread_cancel() to terminate  other threads

Sample Pthreads Program in C • The program calls the pthread.h header file.   Pthreads related statements are preceded by  the pthread_ prefix (except for semaphores).   Knowing how to manipulate pointers is  important.

Creating a thread: int pthread_create( pthread_t *thread, pthread_attr_t *attr, void *(*thread_function)(void *), void *arg ); • first argument – pointer to the identifier of the created  thread • second argument – thread attributes • third argument – pointer to the function the thread will  execute • fourth argument – the argument of the executed function  (usually a struct) • returns 0 for success

Waiting for the threads to finish • • • • •

int pthread_join( pthread_t thread, void **thread_return ) main thread will wait for daughter thread thread to finish first argument – the thread to wait for second argument – pointer to a pointer to the return value  from the thread returns 0 for success threads should always be joined; otherwise, a thread  might keep on running even when the main thread has  already terminated

Thread Attributes • detach state attribute: int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); • detached – main thread continues working  without waiting for the daughter threads to  terminate • joinable – main thread waits for the daughter  threads to terminate before continuing further

Scope attribute int pthread_attr_setscope(pthread_attr_t *attr, int *scope); • system scope – threads are mapped one‐to‐one  on the OS's kernel threads (kernel threads are  entities that scheduled onto processors by the OS) • process scope – threads share a kernel thread  with other process scoped threads

Skeleton Thread Program #include  /* * The function to be executed by the thread should take a * void * parameter and return a void * exit status code . */ void  *thread function ( void * arg ) { // Cast the parameter into what is needed . int  *incoming = ( int * ) arg ; // Do whatever is necessary using * incoming as the  argument . // The thread terminates when this function returns . return NULL; }

Program Continued... int main ( void ) {pthread_t thread ID ; void *exit status ; Int  value; // Put something meaningful into value . // Create the thread , passing & value for the argument . pthread_create (& thread_ID , NULL, thread_function , &value ) ; // The main program continues while the thread executes . // Wait for the thread to terminate . pthread_join( thread_ ID, &exit_status ) ; // Only the main thread is running now . return 0 ; }

Shared Memory • The parent and child processes are run in  separate address spaces.  • A shared memory segment is a piece of  memory that can be allocated and attached to  an address space.  Thus, processes that have  this memory segment attached will have  access to it. • But, race condi ons can occur!

Procedure for Using Shared Memory • Find a key.  Unix uses this key for iden fying  shared memory segments. • Use shmget() to allocate a shared memory. • Use shmat() to attach a shared memory to an  address space. • Use shmdt() to detach a shared memory from  an address space. • Use shmctl() to deallocate a shared memory.

To use shared memory, include  the following • #include   //Various data types are listed in this header. • #include   //for inter Process Communication • #include   //for shared Memory Facility

KEY A key is a value of type key_t. There are three ways to generate a key: 1. Create your own key: key_t    SomeKey; SomeKey = 1234; 2. Ask the system to provide a private key using  IPC_PRIVATE. 3. Use  ok() to generate key: key_t = ftok(char *path, int ID); Func on  ok() returns a key of type key_t: • Keys are global en es.  If other processes know your key, they  can access your shared memory.

Asking for a Shared Memory • Use shmget() to request a shared memory: • shm_id = shmget( key_t key,    /* identity key */ int size,   /* memory size */ int flag); /* creation or use */ • shmget()returns a shared memory ID. • The flag is either 0666 (rw) or IPC_CREAT |  0666. 

Asking for a Shared Memory • The following creates a shared memory of size  struct Data with a private key IPC_PRIVATE.   This is a creation (IPC_CREAT) and permits read  and write (0666). • struct Data { int a; double b; char x; }; int ShmID; ShmID = shmget( IPC_PRIVATE,  /* private key */ sizeof(struct Data), /* size */ IPC_CREAT | 0666);/* cr & rw */

Asking for a Shared Memory • When asking for a shared memory, the  process that creates it uses IPC_CREAT | 0666  and the process that accesses a created one  uses 0666. • If the return value is nega ve (Unix  convention), the request was unsuccessful,  and no shared memory is allocated. • Create a shared memory before its use!

Attaching a Shared Memory to the  address space • Use shmat() to attach an existing shared memory to an  address space: • shm_ptr = shmat( int shm_id, /* ID from shmget() */ char *ptr,   /* use NULL here    */ int flag);  /* use 0 here       */ • shm_id is the shared memory ID returned by shmget(). • Use NULL and 0 for the second and third arguments,  respectively. • shmat() returns a void pointer to the memory. If  unsuccessful, it returns a negative integer.

Detaching/Removing Shared  Memory • To detach a shared memory, use shmdt(shm_ptr); • shm_ptr is the pointer returned by shmat(). • A er a shared memory is detached, it is s ll  there.  You can re‐attach and use it again.  • To remove a shared memory, use shmctl(shm_ID, IPC_RMID, NULL); shm_ID is the shared memory ID returned by shmget().  After a shared memory is removed,  it no longer exists.

Communicating Among Separate  Processes • The “Server”  • Define the structure of a shared memory  #define  NOT_READY  (‐1) #define  FILLED     (0) #define  TAKEN      (1) struct Memory { int status; int data[4]; };                                                              Contd…

Server Code Contd… • void main(int argc, char *argv[]) { key_t ShmKEY; int ShmID, i; struct Memory  *ShmPTR; ShmID = shmget(ShmKEY, sizeof(struct Memory),  IPC_CREAT | 0666); ShmPTR = (struct Memory *) shmat(ShmID, NULL, 0);

Server Code Contd… ShmPTR‐>status = NOT_READY; //shared memory not ready for (i = 0; i < 4; i++) ShmPTR‐>data[i] = atoi(argv[i]);  // filling in data ShmPTR‐>status = FILLED; while (ShmPTR‐>status != TAKEN) sleep(1);  /* sleep for 1 second */ //wait until the data is taken shmdt((void *) ShmPTR); shmctl(ShmID, IPC_RMID, NULL); exit(0); }

The Client Code void main(void) {        key_t          ShmKEY; int            ShmID; struct Memory  *ShmPTR; ShmID = shmget(ShmKEY, sizeof(struct Memory), 0666); ShmPTR = (struct Memory *) shmat(ShmID, NULL, 0); while (ShmPTR‐>status != FILLED) ; printf(“%d %d %d %d\n”, ShmPTR‐>data[0], ShmPTR‐>data[1], ShmPTR‐>data[2], ShmPTR‐>data[3]); ShmPTR‐>status = TAKEN; shmdt((void *) ShmPTR); exit(0); }

Important Notes • The “server” must run first to prepare a shared  memory.  • Try run the server in one window, and run the client in  another a little later. • If you did not remove your shared memory segments  (e.g., program crashes before the execution of  shmctl()), they will be in the system forever.  This will  degrade the system performance. • Use the ipcs command to check if you have shared  memory segments left in the system. • Use the ipcrm command to remove your shared  memory segments.

Lab Work • Write a shared memory program where the  server is calculating the factorial value of n  and client is calculating the sum of digits of  the factorial value and printing both the  factorial and digit sum values. Then server  also prints both the values. • Write a multithreaded program implementing   matrix multiplication of 3X3 matrices.

References • http://www.csl.mtu.edu/cs4411.choi/www/R esource/unix‐shm.pdf • pthread Tutorial by Peter C. Chapin

Lab-4 Shared Memory.pdf

Whoops! There was a problem loading more pages. Retrying... Whoops! There was a problem previewing this document. Retrying... Download. Connect more ...

230KB Sizes 2 Downloads 176 Views

Recommend Documents

Lab4.pdf
Group report of maximum 2 students. • Submission ... Each octal digit represents the access permissions for the. user/owner ... Main menu. Displaying Lab4.pdf.

Shared Memory
Algorithm. Server. 1. Initialize size of shared memory shmsize to 27. 2. Initialize key to 2013 (some random value). 3. Create a shared memory segment using shmget with key & IPC_CREAT as parameter. a. If shared memory identifier shmid is -1, then st

Shared Governance
Public community college governance stands quite apart from the ... in America's community colleges is virtually a state-by-state choice with some of the.

Shared!Practice!Forum! -
Nepal!earthquake,!the!initial!mental!burden!of!shock!and! ... OPENPediatrics'! clinician! community! site! and! public! website.! Please! go! to!

Developing Shared Purpose.pdf
Page 1 of 3. Groundswell | 1850 M Street NW, Suite 1150 | Washington, D.C. 20036. 202.505.3051 | www.groundswell.org | @grndswell. Activity: Developing ...

Shared, reproducible research
•Open data. •Open research process. •Open research results. •Open access to publications. •Open source. •Open peer review. •Collaborative research. •Citizen participation in research. •… Open, reproducible research. Reproducible r

2017.01 Shared Reading.pdf
Download. Connect more apps... Try one of the apps below to open or edit this item. 2017.01 Shared Reading.pdf. 2017.01 Shared Reading.pdf. Open. Extract.

Shared Governance Model 4.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. Shared ...

Shared Memory for Distributed Systems - CiteSeerX
Our business in every ..... Thus the objective is to design a software simulator which in turn will provide a set ...... scheduling strategy to be used for page faults.

CLAHRC BITE SHARED HD WEB.pdf
Page 1 of 2. SHAREHD - a quality improvement collaborative to scale up Shared. Haemodialysis Care for patients on hospital based haemodialysis November 2017. CLAHRCBITE. Collaboration for Leadership in Applied Health Research and Care (CLAHRC). A bit

Shared Governance Resolution 2018.pdf
Page 1 of 1. “Shared Governance Resolution of 2018”. I. Title. A. This resolution shall be referred to as the “Shared Governance Resolution.” II. Findings. A. Whereas, the State University of New York (SUNY) and Stony Brook University (SBU) p

Shared-Use Agreement Example 1
WHEREAS, PAAC requested that the Owner, as a public service to transit patrons, permit the .... Legal & Corporate Services Department. AA. APPROVED AS TO ...

The shared circuits model
Printed in the United States of America doi: 10.1017/ ..... action and similar performance, no translation is needed. But things ..... The advance from cooperation plus deceptive copying ..... you reach to pick up the ringing phone, your act and my.

Unknown [SHARED](1).pdf
Page 1 of 5. (101) CWP No. 19086 of 2017 (O&M) [1]. Ravinder Singh Dhull v. State of Haryana & others. Present: Mr. Ravinder Singh Dhull, Advocate ...

6 Salford Shared Data Centre.pdf
There was a problem previewing this document. Retrying... Download. Connect more ... 6 Salford Shared Data Centre.pdf. 6 Salford Shared Data Centre.pdf.

The Apison Appeal The Lepers Shared - Apison Seventh-day ...
Apr 4, 2013 - these requests and the person making the requests. We prayed ... Amazing Grace, Josh Tinkham closed .... illustration a number of times for the.