inflearn logo
강의

Course

Instructor

Linux System Programming - Theory and Practice

Processor Friendly - Live Programming

간단한 C 질문...

272

tomato

4 asked

2

안녕하세요 강사님, 강의 너무 잘 듣고 있습니다. 

질문이 한 개 있는데요,

sleep(1) 을 쓰면 1초를 기다리고 그 시간동안 thread 같은 것이 잠시 unexecutable 되는 것으로 알고 있습니다. 

강사님이 sleep(1)을 쓰실 때 "커널이 느리게 동작하실 수 있으므로" 라고 하셨는데 어떻게 잠시 쓰레드를 멈추게 되면 커널이 다시 빨라지는 건가요,,? 

sleep API를 단순히 그냥 인자로 넣어준 것 만큼 기다린다. 이렇게만 알고있어서 이해가 잘 안가네요.   구글링도 해봤는데 해답이 잘 안나와서.. 간단하게나마 알려주실 수 있나요 ㅠㅠ... 

linux

Answer 2

1

tomato

감사합니다. 이해 100% 완료!

1

learnit

제 말을 오해하신 듯 합니다.ㅠㅠ

제가 "커널이 느리게 동작할 수 있으므로"라고 하면서 sleep(1)을 주었는데요.. 그 말과 sleep(1)의 의미는 sched_set()을 호출한 직후에 sched_get()을 호출하면 sched_set()에서 내린 명령이 커널에 반영되기 전에(즉, CPU가 변경되기 전에) sched_get()을 호출할 수 있으므로 sleep(1)로 CPU가 변경될 시간을 준 후에 sched_get()을 호출한다는 의미였습니다.

부연 설명을 드리자면, sched_set() 명령과 sched_get() 명령 사이에 충분한 시간을 준 것은 sched_set() 명령이 Synchornous한 기능이 아니기 때문입니다. sched_set() 명령은 '나 이제 이 CPUmask에서 동작할래'라는 의도를 커널에 전달만 하는 것이고, 커널이 내 의도를 스케쥴링에 반영하는 것은 커널 스케쥴러가 판단하기에 적절한 시기에 반영하게 됩니다. 물론 최대한 빨리 적용해주겠지만, 시간 차이는 있을 수 있죠. 따라서 sched_set() 명령이 리턴됐다고 스케쥴러에 반영이 끝난게 아닌거죠. 내 의도를 전달한 상태인 것이지 내 의도가 반영된 것은 아니라는 말입니다. 물론, sched_set() 명령이 리턴됐을 때 이미 반영이 됐을 수도 있습니다. ^^

또 sleep에 대해 약간 오해하신 부분에 대해서도 부연 설명 드릴게요. 내 프로그램이 호출한 sleep()으로 절대 커널이 멈추지 않습니다. 내 프로세스만 SLEEP 상태로 들어갔다가 깨어나게 되는 것이죠. 프로세스가 잠들고 깨고 스케쥴링되고 하는 것은 모두 커널의 스케쥴러에서 담당하는 일 입니다.

또 궁금한점 있으시면 질문 올려주세요~ :)

inotify 객체에 등록된 watch descriptor 해제 관련 질문

0

37

2

select API 실습 코드 질문

0

40

2

wsl에서 fcntl사용

0

72

2

inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...

0

179

2

./stat 파일이름

0

272

2

fopen r, r+모드 차이

0

460

2

강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?

0

326

1

pthread 질문

0

419

2

I/O Multiplexing(select) 질문

0

325

1

inotify.c. ret 질문

0

302

1

inotify.c 질의합니다.

1

317

1

child process

0

715

1

read/blocking

0

564

1

flock

0

565

1

system call

0

598

1

pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?

0

487

1

fork() 함수 사용시 결과 관련 질문

0

371

1

exec 관련 궁금한 사항

0

450

2

파일 디스크립터와 FILE 구조체에 대한 질문

0

552

1

buf 선언에 따른 read() fail 문제

0

251

2

파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문

0

254

1

2번 multi thread 방법 질문

0

242

1

segmentation fault 발생 관련 문의

1

842

1

라이브 코딩 실습 코드

0

235

1