Top Banner
Recap What are the three components of a process? Address space CPU context OS resources What are the steps of a context switching? Save & restore CPU context Change address space and other info in the PCB What is the ready queue? A list (or tree) of ready processes 1
55

What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Apr 25, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Recap

• What are the three components of a process?– Address space

– CPU context

– OS resources

• What are the steps of a context switching?– Save & restore CPU context

– Change address space and other info in the PCB

• What is the ready queue?– A list (or tree) of ready processes

1

Page 2: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Process Termination

• Normal termination via exit() system call.

– Exit by itself.

– Returns status data from child to parent (via wait())

– Process’s resources are deallocated by operating system

• Forced termination via kill() system call

– Kill someone else (child)

• Zombie process– If no parent waiting (did not invoke wait())

• Orphan process– If parent terminated without invoking wait

– Q: who will be the parent of a orphan process?

– A: Init process

2

Page 3: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Mini Quiz

• Hints

– Each process has its own private address space

– Wait() blocks until the child finish

• Output?

Child: 1

Main: 2

Parent: 1

Main: 2

3

int count = 0;int main() {

int pid = fork();if (pid == 0){

count++;printf("Child: %d\n", count);

} else{wait(NULL);count++;printf("Parent: %d\n", count);

}count++;printf("Main: %d\n", count);return 0;

}

Page 4: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Inter-Process Communication

Disclaimer: some slides are adopted from the book authors’ slides with permission4

Page 5: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Today

• Inter-Process Communication (IPC)

– What is it?

– What IPC mechanisms are available?

5

Page 6: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Inter-Process Communication (IPC)

• What is it?

– Communication among processes

• Why needed?

– Information sharing

– Modularity

– Speedup

6

Page 7: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Chrome Browser

• Multi-process architecture

• Each tab is a separate process

– Why?

– How to communicate among the processes?

7

Page 8: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

message passing shared memory

Models of IPC

8

Page 9: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Models of IPC

• Shared memory

– share a region of memory between co-operating processes

– read or write to the shared memory region

– ++ fast communication

– -- synchronization is very difficult

• Message passing

– exchange messages (send and receive)

– typically involves data copies (to/from buffer)

– ++ synchronization is easier

– -- slower communication9

Page 10: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Interprocess Communication in Unix (Linux)

• Pipe

• FIFO

• Shared memory

• Socket

• Message queue

• …

10

Page 11: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Pipes

• Most basic form of IPC on all Unix systems

– Your shell uses this a lot (and your 1st project too)

• Characteristics

– Unidirectional communication

– Processes must be in the same OS

– Pipes exist only until the processes exist

– Data can only be collected in FIFO order

11

ls | more

Page 12: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

IPC Example Using Pipes

12

main()

{

char *s, buf[1024];

int fds[2];

s = “Hello World\n";

/* create a pipe */

pipe(fds);

/* create a new process using fork */

if (fork() == 0) {

/* child process. All file descriptors, including

pipe are inherited, and copied.*/

write(fds[1], s, strlen(s));

exit(0);

}

/* parent process */

read(fds[0], buf, strlen(s));

write(1, buf, strlen(s));

}

(*) Img. source: http://beej.us/guide/bgipc/output/html/multipage/pipes.html

Page 13: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Pipes in Shells

• Example: $ ls| more

– The output of ‘ls’ becomes the input of ‘more’

• How does the shell realize this command?

– Create a pipe

– Create a process to run ls

– Create a process to run more

– The standard output of the process to run ls is redirected to a pipe streaming to the process to run more

– The standard input of the process to run more is redirected to be the pipe from the process running ls

13

Page 14: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

FIFO (Named Pipe)

• Pipe with a name!

• More powerful than anonymous pipes

– No parent-sibling relationship required

– Allow bidirectional communication

– FIFOs exists even after creating process is terminated

• Characteristics of FIFOs

– Appear as typical files

– Communicating process must reside on the same machine

14

Page 15: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Example: Producer

15

main()

{

char str[MAX_LENGTH];

int num, fd;

mkfifo(FIFO_NAME, 0666); // create FIFO file

fd = open(FIFO_NAME, O_WRONLY); // open FIFO for writing

printf("Enter text to write in the FIFO file: ");

fgets(str, MAX_LENGTH, stdin);

while(!(feof(stdin))){

if ((num = write(fd, str, strlen(str))) == -1)

perror("write");

else

printf("producer: wrote %d bytes\n", num);

fgets(str, MAX_LENGTH, stdin);

}

}

Page 16: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Example: Consumer

16

main()

{

char str[MAX_LENGTH];

int num, fd;

mkfifo(FIFO_NAME, 0666); // make fifo, if not already present

fd = open(FIFO_NAME, O_RDONLY); // open fifo for reading

do{

if((num = read(fd, str, MAX_LENGTH)) == -1)

perror("read");

else{

str[num] = '\0';

printf("consumer: read %d bytes\n", num);

printf("%s", str);

}

}while(num > 0);

}

Page 17: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Shared Memory

17

Process A’sVirtual memory

Process B’sVirtual memory

Physicalmemory

Page 18: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Shared Memory

• Kernel is not involved in data transfer

– No need to copy data to/from the kernel

• Very fast IPC

– Pipes, in contrast, need to

• Send: copy from user to kernel

• Recv: copy from kernel to user

– BUT, you have to synchronize

• Will discuss in the next week

18

Page 19: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

POSIX Shared Memory

• Sharing between unrelated processes

• APIs

– shm_open()

• Open or create a shared memory object

– ftruncate()

• Set the size of a shared memory object

– mmap()

• Map the shared memory object into the caller’s address space

19

Page 20: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Example: Producer

20

$ ./writer /shm-name “Hello”

int main(int argc, char *argv[])

{

char *addr;

int fd;

size_t len;

fd = shm_open(argv[1], O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);

len = strlen(argv[2])+1;

ftruncate(fd, len);

addr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

close(fd);

memcpy(addr, argv[2], len);

return 0;

}

Page 21: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Example: Consumer

21

$ ./reader /shm-name

int main(int argc, char *argv[])

{

char *addr;

int fd;

struct stat sb;

fd = shm_open(argv[1], O_RDWR, 0);

fstat(fd, &sb);

addr = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);

close(fd);

printf(“%s\n”, addr);

return 0;

}

Page 22: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Sockets

• Sockets – two-way communication pipe

– Backbone of your internet services

• Unix Domain Sockets– communication between processes on the same Unix system

– special file in the file system

• Client/Server– client sending requests for information, processing

– server waiting for user requests

• Socket communication modes– connection-based, TCP

– connection-less, UDP

22

Page 23: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Example: Server

23

int main(int argc, char *argv[])

{

int listenfd = 0, connfd = 0;

struct sockaddr_in serv_addr;

char sendBuff[1025];

time_t ticks;

listenfd = socket(AF_INET, SOCK_STREAM, 0);

memset(&serv_addr, '0', sizeof(serv_addr));

memset(sendBuff, '0', sizeof(sendBuff));

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

serv_addr.sin_port = htons(5000);

bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

listen(listenfd, 10);

while(1)

{

connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);

snprintf(sendBuff, “Hello. I’m your server.”);

write(connfd, sendBuff, strlen(sendBuff));

close(connfd);

}

}

Page 24: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Example: Client

24

int main(int argc, char *argv[])

{

int sockfd = 0, n = 0;

char recvBuff[1024];

struct sockaddr_in serv_addr;

sockfd = socket(AF_INET, SOCK_STREAM, 0);

memset(&serv_addr, '0', sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(5000);

inet_pton(AF_INET, argv[1], &serv_addr.sin_addr);

connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)

{

recvBuff[n] = 0;

printf("%s\n" recvBuff);

}

return 0;

}

$ ./client 127.0.0.1Hello. I’m your server.

Page 25: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Quiz

• A process produces 100MB data in memory. You want to share the data with two other processes so that each of which can access half the data (50MB each). What IPC mechanism will you use and why?

25

Page 26: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Project 1: Quash

• Goals

– Learn to use UNIX system calls

– Learn the concept of processes

• Write your own shell (like bash in Linux)

– Run external programs• Use fork()/execve() system calls

– Support built-in commands

– Support pipe and redirections

26

Page 27: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Project 1: Quash

• Detailed instruction

– Course website

• Deadline

– Sep. 21, 11:59 p.m.

• Help

– Post questions to the blackboard message board

– Send email to the TA

– Use TA’s office hours.

27

Page 28: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread

Disclaimer: some slides are adopted from the book authors’ slides with permission28

Page 29: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Recap

• IPC– Shared memory

• share a memory region between processes

• read or write to the shared memory region

• fast communication

• synchronization is very difficult

– Message passing• exchange messages (send and receive)

• typically involves data copies (to/from buffer)

• synchronization is easier

• slower communication

29

Page 30: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Recap

• Process– Address space

• The process’s view of memory

• Includes program code, global variables, dynamic memory, stack

– Processor state• Program counter (PC), stack pointer, and other CPU registers

– OS resources• Various OS resources that the process uses

• E.g.) open files, sockets, accounting information

30

Page 31: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Recap: Pipes

31

main()

{

char *s, buf[1024];

int fds[2];

s = “Hello World\n";

/* create a pipe */

pipe(fds);

/* create a new process using fork */

if (fork() == 0) {

/* child process. All file descriptors, including

pipe are inherited, and copied.*/

write(fds[1], s, strlen(s));

exit(0);

}

/* parent process */

read(fds[0], buf, strlen(s));

write(1, buf, strlen(s));

}

(*) Img. source: http://beej.us/guide/bgipc/output/html/multipage/pipes.html

Page 32: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Concurrent Programs

• Objects (tanks, planes, …) are moving simultaneously

• Now, imagine you implement each object as a process. Any problems?

32

Page 33: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Why Processes Are Not Always Ideal?

• Not memory efficient

– Own address space (page tables)

– OS resources: open files, sockets, pipes, …

• Sharing data between processes is not easy

– No direct access to others’ address space

– Need to use IPC mechanisms

33

Page 34: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Better Solutions?

• We want to run things concurrently

– i.e., multiple independent flows of control

• We want to share memory easily

– Protection is not really big concern

– Share code, data, files, sockets, …

• We want do these things efficiently

– Don’t want to waste memory

– Performance is very important

34

Page 35: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread

35

Page 36: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread in OS

• Lightweight process

• Process

– Address space

– CPU context: PC, registers, stack, …

– OS resources

• Thread

– Address space

– CPU context: PC, registers, stack, …

– OS resources

36

Process

Thread Thread

Page 37: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread in Architecture

• Logical processor

37http://www.pcstats.com/articleview.cfm?articleID=1302

Page 38: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread

• Lightweight process

– Own independent flown of control (execution)

– Stack, thread specific data (tid, …)

– Everything else (address space, open files, …) is shared

38

- Program code- (Most) data- Open files, sockets, pipes- Environment (e.g., HOME)

- Registers - Stack- Thread specific data- Return value

Shared Private

Page 39: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Process vs. Thread

39

Figure source: https://computing.llnl.gov/tutorials/pthreads/

Page 40: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Process vs. Thread

40

Figure source: https://computing.llnl.gov/tutorials/pthreads/

Page 41: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread Benefits

• Responsiveness

– Simple model for concurrent activities.

– No need to block on I/O

• Resource Sharing

– Easier and faster memory sharing (but be aware of synchronization issues)

• Economy

– Reduces context-switching and space overhead better performance

• Scalability

– Exploit multicore CPU41

Page 42: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread Programming in UNIX

• Pthread

– IEEE POSIX standard threading API

• Pthread API

– Thread management• create, destroy, detach, join, set/query thread attributes

– Synchronization• Mutexes –lock, unlock

• Condition variables – signal/wait

42

Page 43: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Pthread API

• pthread_attr_init – initialize the thread attributes object– int pthread_attr_init(pthread_attr_t *attr);

– defines the attributes of the thread created

• pthread_create – create a new thread– int pthread_create(pthread_t *restrict thread, const pthread_attr_t

*restrict attr, void *(*start_routine)(void*), void *restrict arg);

– upon success, a new thread id is returned in thread

• pthread_join – wait for thread to exit– int pthread_join(pthread_t thread, void **value_ptr);

– calling process blocks until thread exits

• pthread_exit – terminate the calling thread– void pthread_exit(void *value_ptr);

– make return value available to the joining thread

43

Page 44: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Pthread Example 1

44

#include <pthread.h>

#include <stdio.h>

int sum; /* data shared by all threads */

void *runner (void *param)

{

int i, upper = atoi(param);

sum = 0;

for(i=1 ; i<=upper ; i++)

sum += i;

pthread_exit(0);

}

int main (int argc, char *argv[])

{

pthread_t tid; /* thread identifier */

pthread_attr_t attr;

pthread_attr_init(&attr);

/* create the thread */

pthread_create(&tid, &attr, runner, argv[1]);

/* wait for the thread to exit */

pthread_join(tid, NULL);

fprintf(stdout, “sum = %d\n”, sum);

}

$./a.out 10

sum = 55

Quiz: Final ouput?

Page 45: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Pthread Example 2

45

#include <pthread.h>

#include <stdio.h>

int arrayA[10], arrayB[10];

void *routine1(void *param)

{

int var1, var2

}

void *routine2(void *param)

{

int var1, var2, var3

}

int main (int argc, char *argv[])

{

/* create the thread */

pthread_create(&tid[0], &attr, routine1, NULL);

pthread_create(&tid[1], &attr, routine2, NULL);

pthread_join(tid[0]); pthread_join(tid[1]);

}

Page 46: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

User-level Threads

• Kernel is unaware of threads

– Early UNIX and Linux did not support threads

• Threading runtime

– Handle context switching• Setjmp/longjmp, …

• Advantage

– No kernel support

– Fast (no kernel crossing)

• Disadvantage

– Blocking system call. What happens?

46

Page 47: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Kernel-level Threads

• Native kernel support for threads

– Most modern OS (Linux, Windows NT)

• Advantage

– No threading runtime

– Native system call handing

• Disadvantage

– Overhead

47

Page 48: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Hybrid Threads

• Many kernel threads to many user threads

– Best of both worlds?

48

Page 49: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Threads: Advanced Topics

• Semantics of Fork/exec()

• Signal handling

• Thread pool

• Multicore

49

Page 50: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Semantics of fork()/exec()

• Remember fork(), exec() system calls?

– Fork: create a child process (a copy of the parent)

– Exec: replace the address space with a new pgm.

• Duplicate all threads or the caller only?

– Linux: the calling thread only

– Complicated. Don’t do it!

• Why? Mutex states, library, …

• Exec() immediately after Fork() may be okay.

50

Page 51: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Signal Handling

• What is Singal?

– $ man 7 signal

– OS to process notification

• “hey, wake-up, you’ve got a packet on your socket,”

• “hey, wake-up, your timer is just expired.”

• Which thread to deliver a signal?

– Any thread

• e.g., kill(pid)

– Specific thread

• E.g., pthread_kill(tid)51

Page 52: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Thread Pool

• Managing threads yourself can be cumbersome and costly

– Repeat: create/destroy threads as needed.

• Let’s create a set of threads ahead of time, and just ask them to execute my functions

– #of thread ~ #of cores

– No need to create/destroy many times

– Many high-level parallel libraries use this.

• e.g., Intel TBB (threading building block), …52

Page 53: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Single Core Vs. Multicore Execution

Single core execution

Multiple core execution

53

Page 54: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Challenges for Multithreaded Programming in Multicore

• How to divide activities?

• How to divide data?

• How to synchronize accesses to the shared data? next class

• How to test and dubug?

54

EECS750

Page 55: What is the ready queue - KU ITTCheechul/courses/eecs678/F17/... · Pipes in Shells •Example: $ ls| more –The output of ls becomes the input of more •How does the shell realize

Summary

• Thread

– What is it?

• Independent flow of control.

– What for?

• Lightweight programming construct for concurrent activities

– How to implement?

• Kernel thread vs. user thread

• Next class

– How to synchronize?

55