인프런 커뮤니티 질문&답변

jglee81님의 프로필 이미지

작성한 질문수

그림으로 쉽게 배우는 운영체제

컨텍스트 스위칭 질문입니다.

해결된 질문

22.03.10 19:50 작성

·

399

1

안녕하세요.
 
임베디드 리눅스 환경에서 C언어로 , 주로 네트워크 통신 프로그램 개발하고 있습니다.
 
개발하는 응용프로그램에서 내부적으로 8개의 스레드가 돌고 있습니다.
 
1. 스레드간 컨텍스트 스위칭에서도 강의에서 말씀하신 MLFQ 기법이 적용이 되는지요?
 
2. 컨텍스트 스위칭이 발생하는 지점을 어느정도 예측이 가능한지요? 코드상으로요
Ex ) write(), sleep() 함수를 만났을때...
 
3. 컨텍스트 스위칭하는데 걸리는 시간(오버헤드) 계산이 가능한가요?
sleep(1ms) 주기로 복수의 스레드를 돌렸을 때
스레드의 반복주기를 printf로 찍으면 통상 2ms 간격으로 나옵니다.
그럼 컨텍스트 스위칭 시작부터 완료되기까지 시간이 1ms 걸린다는 건지...
 
4. 8개 스레드의 우선순위(가중치)를 사용자 임의로 조작하는 방법이 있을까요?
 
5. 스레드도 프로세스와 마찬가지로 PCB로 관리가 되는지요?
 
6. 메모리 영역 할당할 때 스택과 힙 영역의 크기는 어떻게 결정이 되는지요?
컴파일 단계에서 어느정도 예측이 가능하니 이에 따라 결정이 되는지요?
그리고 힙은 malloc 함수의 리턴값으로 오버플로를 알수 있는데
스택의 경우에는 오버플로 되면 어떻게 조치되나요?

답변 1

0

감자님의 프로필 이미지
감자
지식공유자

2022. 03. 10. 21:59

안녕하세요 jglee81님!
질문에 시스템 프로그래밍과 연관된 질문이 많아서 제가 자세히 설명드리기 어려운 부분도 있습니다.
제가 실무에서 직접 다뤄보지 않은 부분은 인터넷의 힘을 빌려 답변드리겠습니다^^


1. 스레드간 컨텍스트 스위칭에서도 강의에서 말씀하신 MLFQ 기법이 적용이 되는지요?

네 기본적으로 pthread_setschedparam함수의 스케줄링 설정값으로 SCHED_OTHER로 설정되는데 시스템마다 구현법이 조금 다를 수 있다고 합니다.
제 생각엔 이 기법이 MLFQ을 말하는 것 같습니다.
추가적으로 사용자가 FIFO, RR으로 바꿀 수 있습니다.
 

2. 컨텍스트 스위칭이 발생하는 지점을 어느정도 예측이 가능한지요? 코드상으로요

시스템 콜을 사용하는 부분에서 컨텍스트 스위칭이 발생한다고 예측할 수 있습니다.
하지만 모든 시스템 콜에서 컨텍스트 스위칭이 발생하는 것은 아닙니다! 시스템에 따라 조금 다릅니다.
입출력 시스템콜이나 뮤텍스를 호출하면 컨텍스트 스위칭이 해당 위치에서 발생한다고 예측할 수 있습니다.

3. 컨텍스트 스위칭하는데 걸리는 시간(오버헤드) 계산이 가능한가요?

좋은 글이 있어서 링크 첨부 하겠습니다!
게시글에서도 대략 1.2~1.5ms가 걸렸네요.
 

4. 8개 스레드의 우선순위(가중치)를 사용자 임의로 조작하는 방법이 있을까요?

네 우선순위를 변경할 수 있습니다.
pthread_setschedparam의 파라미터에서 설정할 수 있습니다.
자세한 사용방법은 메뉴얼을 보셔야 할 것 같아요!

5. 스레드도 프로세스와 마찬가지로 PCB로 관리가 되는지요?

PCB와 비슷한 Thread Control Block으로 관리됩니다!

6. 메모리 영역 할당할 때 스택과 힙 영역의 크기는 어떻게 결정이 되는지요?
컴파일 단계에서 어느정도 예측이 가능하니 이에 따라 결정이 되는지요?

이 부분은 컴파일러와 관련되어있습니다.
C라면 gcc를 사용하실거라고 생각이 드는데요.
gcc에서 -fstack-usage를 이용하셔도 될 것 같습니다.
각 함수에서 발생할 수 있는 최악의 상황의 크기로 메모리를 할당한다고 하네요.
-fstack-check로 한번 보시면 좋을 것 같습니다!

운영체제 강의를 다 보시면 시스템 프로그래밍 공부를 할 준비가 된 것이니 jglee81님께서 시스템 프로그래밍도 배워보시면 실무에 많은 도움이 될 것 같습니다!

jglee81님의 프로필 이미지

작성한 질문수

질문하기