CS/OS

[OS] 4. Thread 연습문제

JWonK 2023. 4. 16. 00:22
728x90
반응형

4.1 Provide two programming examples in which multithreading does not provide better performance than a single-threaded solution.

 

Answer:

멀티스레딩이 단일 스레드 솔루션보다 성능이 향상되지 않는 두 가지 프로그래밍 예제를 제공합니다.

1. 단일 처리기 시스템에서의 계산 집약적인 작업
- 만약 작업이 단일 처리기 시스템에서 실행되는 계산 집약적인 작업이라면, 
  멀티스레딩은 성능 향상을 제공하지 않을 수 있습니다. 
  이 경우 CPU가 한 번에 하나의 작업만 처리할 수 있으므로 멀티스레딩은 여러 스레드 간의 
  문맥 전환 오버헤드만 추가할 뿐입니다.

2. 입출력 작업이 많은 작업
- 입출력 작업이 많은 작업에서도 멀티스레딩은 성능 향상을 제공하지 않을 수 있습니다. 
  이 경우 입출력 연산이 스레드 블록킹을 유발하여, 블록된 스레드는 CPU를 놀게 두고, 
  다른 스레드가 작업을 처리할 수 없게 됩니다. 
  따라서 멀티스레딩이 성능을 향상시키는 대신, 입출력 작업을 비동기적으로 처리하는 것이 
  더 나은 성능을 제공할 수 있습니다.

 

 

 


4.2 Describe the actions taken by a thread library to context switch between user-level threads.

 

Answer:

스레드 라이브러리가 유저 레벨 스레드 간의 컨텍스트 스위칭을 수행하기 위해서는 일반적으로 다음과 같은 단계를 거칩니다.

1. 스레드 라이브러리가 스레드 스케줄링을 수행합니다. 이는 다음에 실행될 스레드를 선택하는 것을 의미합니다. 
  이 선택은 라운드 로빈, 우선순위 또는 다른 스케줄링 알고리즘을 사용하여 이루어집니다.

2. 선택된 스레드의 레지스터와 스택을 유저 모드에서 커널 모드로 복사합니다.

3. 커널이 현재 실행 중인 스레드의 컨텍스트를 저장하고, 선택된 스레드의 컨텍스트를 복원합니다.
4. 컨텍스트 스위칭이 완료되면, 선택된 스레드는 커널 모드에서 유저 모드로 실행을 재개합니다.

또한, 유저 레벨 스레드를 지원하는 스레드 라이브러리는 스레드 생성, 종료 및 동기화를 위한 다양한 기능을 제공합니다.
예를 들어, 스레드 생성 함수는 새로운 스레드를 생성하고 해당 스레드의 스택 및 레지스터를 초기화합니다.
스레드 동기화 함수는 다른 스레드와의 상호작용을 관리하고, 임계영역 문제와 같은 동기화 문제를 해결합니다.

 

 

 


4.3 Which of the following components of program state are shared across threads in a multithreaded process?

 

a. Register values

b. Heap memory

c. Global variables

d. Stack memory

 

 

Answer:

다중 스레드 프로세스에서 다음 프로그램 상태 구성 요소 중 어떤 것이 스레드 간에 공유됩니까?

a. 레지스터 값
b. 힙 메모리
c. 전역 변수
d. 스택 메모리

a. 레지스터 값: 레지스터 값은 스레드마다 별도로 할당되므로 스레드 간에 공유되지 않습니다.
b. 힙 메모리: 힙 메모리는 모든 스레드에 의해 공유됩니다.
c. 전역 변수: 전역 변수는 모든 스레드에 의해 공유됩니다.
d. 스택 메모리: 스택 메모리는 각 스레드에 별도로 할당되므로 스레드 간에 공유되지 않습니다.

따라서, b와 c가 스레드 간에 공유되는 구성 요소입니다.

 

 

 

 


4.4 Can a multithreaded solution using multiple user-level threads achieve better performance on a multiprocessor system than on a single-processor system?

 

Answer:

멀티프로세서 시스템에서 멀티스레딩 솔루션은 단일 프로세서 시스템보다 더 나은 성능을 얻을 수 있습니다.
이는 멀티프로세서 시스템에서 스레드가 각기 다른 프로세서에서 병렬로 실행될 수 있기 때문입니다. 
이렇게 하면 작업을 더 빠르게 처리할 수 있으며 전반적인 시스템 성능이 향상됩니다.

 

 

 

 


4.5 Consider a multiprocessor system and a multithreaded program written using the many-to-many threading model. Let the number of user-level threads in the program be more than the number of processors in the system. Discuss the performance implications of the following scenarios:

 

a. The number of kernel threads allocated to the program is less than the number of processors.

b. The number of kernel threads allocated to the program is equal to the number of processors.

c. The number of kernel threads allocated to the program is greater than the number of processors but less than the number of user-level threads

 

 

Answer:

다중 프로세서 시스템과 매니 투 매니 스레딩 모델을 사용하여 작성된 멀티스레드 프로그램을 고려해보자. 
프로그램 내의 유저 레벨 스레드 수가 시스템 내 프로세서 수보다 많다고 가정하자. 
다음 시나리오에 대한 성능 영향에 대해 논의해보자:

a. 프로그램에 할당된 커널 스레드 수가 프로세서 수보다 적은 경우.
b. 프로그램에 할당된 커널 스레드 수가 프로세서 수와 같은 경우.
c. 프로그램에 할당된 커널 스레드 수가 프로세서 수보다 크지만 유저 레벨 스레드 수보다 적은 경우.

[정답]

a. 커널 스레드가 프로세서 수보다 적은 경우, 프로세서는 한 번에 하나의 스레드만 실행할 수 있다. 
   스레드 간 전환은 비용이 많이 드는 작업이므로, 스레드가 프로세서를 사용하지 않고 기다려야 하는 경우가 생길 수 있다. 
   이 경우 CPU 이용률은 낮아지며, 스레드 간 전환이 많아질수록 성능이 저하된다.

b. 커널 스레드가 프로세서 수와 같은 경우, 프로세서는 최대한 이용되며, 스레드 간 전환에 대한 비용이 최소화된다. 
   이 경우 CPU 이용률이 높아지며, 성능도 향상된다.

c. 커널 스레드가 프로세서 수보다 크지만 유저 레벨 스레드 수보다 적은 경우, 
   스레드 간 전환이 커널 스레드에 의해 처리될 수 없기 때문에,
   유저 레벨 스레드는 서로 CPU 사용 시간을 나누어 사용해야 한다.
   이 경우 CPU 이용률이 감소하며, 스레드 간 전환 비용이 높아지기 때문에 성능이 저하된다.
728x90
반응형