inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

463

jglee81

작성한 질문수 3

1

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

운영체제

답변 1

0

감자

안녕하세요 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님께서 시스템 프로그래밍도 배워보시면 실무에 많은 도움이 될 것 같습니다!

프로그램과 프로세스 강의 3분47초

1

649

1

컴파일 과정

1

559

1

페이징&가상메모리 관련 질문 드립니다.

1

411

1

페이징(배치정책) CPU에 논리주소를 물리주소로 전달해 줄때 계산 단위

1

486

1

운영체제의 역사 영상에서

1

484

2

프로세스 동작 및 스케줄링 알고리즘 관련 질문 드립니다.

1

506

1

인터럽트 발생 시점과 비동기 방식

1

602

2

PCB 상태 실행에서 대기 상태에서 준비 상태로 변경시

1

480

2

프로세스 동기화 질문 드립니다.

1

359

1

부모 프로세스는 프로그램을 실행하지 않아도 생기는 건가요?

1

421

1

페이지드 세그멘테이션 기법에서 메모리 주소 변환 할때요

4

409

1

오버헤드란?

1

4067

1

논리주소와 BoundAddress의 비교에 대한 질문

1

319

1

MLFQ 알고리즘

2

415

1

FIFO 알고리즘 / RR 알고리즘

1

455

1

블로그 업로드 질문

1

388

1

다중큐 강의에서 I/O 작업시 질문

2

254

1

예제코드 질문

1

308

1

하드디스크와 메모리 질문 있습니다!

0

227

1

컴파일 과정 예시와 관련해서 질문드립니다!!

1

283

1

예제 코드 관련 질문입니다!

1

269

1

공유 메모리 및 프로세스 생성 관련

3

504

1

레지스터 관련

2

402

1

"컴파일과 프로세스" 강의 1분 37초

1

251

1