과학

System Idle Process(시스템 유휴 시간 프로세스)에 대해서 알아보자


이전 게시물

[인텔 CPU의 하이퍼쓰레딩에 대해서 알아보자] http://www.dogdrip.net/117805253


[컴퓨터/IT판 에서 옮겨옴]

http://www.dogdrip.net/123866028


원랜 시분할 운영체제에서 멀티태스킹의 기본인 Context Switch(문맥교환)에 대해서 설명하려고 했는데,


CPU구조부터 OS구조까지 파야되는지라 일단 미룸..


사실 저거 공부한지가 4년이 넘어서 기억이 가물가물해서 다시 공부해야됨 ㅠㅠ


그래서 토막글로 윈도우에 있는 System Idle Process에 대해서 알아보자


윈도우에서 작업 관지라에서 프로세스를 뒤지다 보면 CPU 사용률이 유독 높은 프로세스를 볼 수 있다.


작업관리자를 켜보자


1.png


뭐? 98퍼나 CPU를 쓰고 있다고?


2.png


근데 시스템 모니터에서는 10퍼도 안쓰고 있다...


작업관리자에서도 저 프로세스의 속성을 보려고 해도 볼 수가 없다.


우리가 알 수 있는건 PID와 실행한 사용자만 알 수 있다..


아무리 시스템 프로세스라해도 왜 저렇게 CPU 사용률이 높은걸까?


저 프로세스 이름을 다시한번 확인해보자 System Idle Process


시스템  Idle(유휴)상태 프로세스다.


그러니깐 CPU가 실행할 작업이 없으면 계속 실행되는 프로세스라는거다!


그런데 왜 CPU가 유휴상태에서 저 프로세스를 계속 가동시키는가? 그냥 냅두면 안될까?


모든 CPU들은 기본적으로 계속 프로그램을 실행하고 있는 상태다.


그러니깐 CPU는 프로그램을 한줄 실행했다가 쉰다는 그런 개념은 없다.


명령을 실행했으면 다음 명령도 실행해야되고 또 다음 명령을 수행하고 또 또 다른 명령을 수행하고 이렇게 반복되어진다..


만약 다음에 실행할 명령이 없다면? OS 개발 서적 보면서 해본 내 경험상 한 몇초있다가 그대로 컴퓨터가 꺼지더라..


결국 계속 어떤 프로그램이던 CPU가 프로그램을 계속 실행할 수 있도록 해야한다.

(물론 CPU를 유휴상태로 보낼수 있는 명령어가 있지만 그건 후에 설명하자)


이때 CPU를 계속 프로그램을 실행 시킬 수 있는 방법중 제일 쉬운 방법은 아무것도 실행 하지 않고 계속 루프를 도는거다.


마치


while (!system_halt)

{

// Do Nothing

}


이걸 어셈블리로 나타내면


:idle

jmp idle


이렇게 말이다.. 뭐 문제가 없어보이는데.. 뭐 당장에도 문제는 없어 보인다.


하.지.만. 저 아무것도 안하는 프로그램도 보면 idle 번지로 점프해서 수행하라는 명령이 무한정 수행된다.


결국 jmp idle 이라는 명령이 CPU 내부 사이클을 모두 점유하고 있따는 이야기가 된다.


이는 CPU가 계속 켜져있어야 한다는 말이되고, EIST(스피드스텝) 가 있다면 CPU를 유휴 상태 클럭으로 내릴 수 없다..


고로 CPU는 저 아무것도 안하는 프로그램을 수행하면서 전기를 먹을 수 있는 최대 상태로 다 까 잡숴 드신다.


이는 CPU가 아무것도 하지 않아도 엄청난 열기를 뿜어낸다는 말과 같다..


위와 같은 방법은 Busy Waiting 이라고 부른다. 근데 저 방식 자체도 나쁜건 아니다.


CPU를 항상 켜놓을 수 있으니 다른 작업이 을 수행 할때 바로 할 수 있는 장점이 있다.


또한 마이컴 정도면 저 방식을 써도 상관이 없다.

(어차피 마이컴정도면 20MHz 내외 인데... 뭐 발열도 없다시피 하다..)


자 그러면 Busy Waiting 말고 다른방법은 무엇일까?


대부분 CPU들은 자기를 유휴 상태로 보낼 수 있는 명령이 있다.


바로 halt 명령이다. x86에서는 해당 명령을 hlt라고 쓴다

(리눅스의 halt 명령과는 좀 다르다... 유의하자!)


CPU가 halt 명령을 만나면 진짜 아무것도 안한다.


그럼 nop 명령하고 뭐가다르냐!!


nop도 아무것도 안하긴 하지만 nop는 CPU 사이클을 점유한다.


하지만 halt 명령은 아무것도 안하기도 하고 CPU 사이클을 점유하지도 않는다.


그렇다면 CPU를 유휴 상태로 두려면 halt를 무한정 수행하면 된다!


while (!system_halt)

{

// Halt

hlt();

}


위 코드를 어셈블리로 표현하면


:idle

hlt

jmp idle


그런데 왜 무한정 halt를 수행할까?


halt로 만든 CPU 유휴 상태는 CPU의 외부 인터럽트가 있으면 바로 풀린다.


여기서 인터럽트는 다른 작업을 전환하기 위한 태스크 스위칭일수도 있고, 장치가 보내는 인터럽트일 수 있다.


태스크 스위칭의경우


A  -> 유휴 -> B -> 유휴


가 될 수 있고 프로세스 A, B 둘다 CPU를 엄청 쓰고 있다면


A -> B -> B -> A -> A -> 유휴 -> A -> A -> B


가 될 수 있겠다..


장치가 보내는 인터럽트라면


A -> 마우스 인터럽트 처리 -> 유휴 -> A


이렇게 될 수 도 있겠지..


그때는 CPU가 깨어나는데, 깨어나고 나서 다시 할일이 없으면 어쩌겠나..


다시 halt 명령으로 재워야한다...


결국 System Idle Process는 OS 내부에서 CPU를 유휴상태로 만들기 위해  halt 명령을 계속 실행 시키는 역할을 하고, 논리적으로 보면 CPU를 계속 사용하는것 처럼 보이기 때문에 항상 높은 점유율을 가지고 있다!


ps. 참고로 x86에서 halt 명령어(hlt)는 유저모드 프로세스(그냥 통상 볼 수 있는 프로그램)는 권한이 없어서 실행 할 수 없다!

16개의 댓글

2017.03.30
ㅋㅋㅋ 정성글인데

일반인한테 이런거 필요가 없어보인다 ㅋㅋㅋㅋ

어셈블리 코딱지 만큼은 알아야 알아먹을 내용이넹

OS 기초랑
0
2017.03.30
봐바 읽판에오니 얼마나 보기좋니
0
2017.03.30
알고싶던 내용이긴 한데
nop은 뭐고. 전자랑 후자의 차이점은 무엇이며. 인터럽트,마이컴,태스크 스위칭은 또 무슨 뜻이며. 태스크스위칭 설명할 때 A와 B라는건 뭘 의미하는지. 또 halt 명령어를 실행하는건 분명 CPU를 사용하고 있는걸텐데 '논리적으로 이것처럼 보인다'는 무슨 의미인지(논리적이지 않은거랑 뭐가 다른건지) 등등
나보다 모르는 사람이라면 아무것도 못읽겠다. 이거만 알고 있다가는 내가 이해하고있다는 착각에 빠지겠는걸. 글에다가 짧은 설명 좀 붙여줘.
0
2017.03.31
@거물렁
어쩌다 급하게 쓰다보니 이리됬네..

지난번 글은 그래도 이틀정도 고민하고 쓴글인데..

NOP명령은 No Operation의 약자로 CPU가 아무일도 안할 수 있도록 만들어주는 명령인데, HLT 명령 역시 CPU가 아무일도 안할 수 있도록 해주는 명령임. 근데 NOP는 CPU 파이프라인을 점유하지, 하지만 HLT는 CPU 파이프라인을 점유하지 않아 쉽게 표현하면 일꾼이 있으면 일꾼한테 NOP 명령을내리면 책상에 앉아서 아무것도 안하는 상태, HLT 명령을 내리면 일꾼은 책상을 비우고 침대에 누워있는 상태라고 볼 수 있지..

인터럽트는 CPU가 어떤일을 하고 있는데, 어떤요인(HW가 CPU한테 알림, SW가 임의적으로 트랩)에 의해서 CPU가 현재 하던일을 중단하고 처리하도록 하도록 하는것

마이컴은 보통 MCU라고 말하는데, 소위 말하는 컨트롤러 수준(자판기, 세탁기, 시계)에 들어가는 정도 CPU를 의미함
0
2017.03.31
@거물렁
태스크스위칭은 작업전환을 의미해 컴퓨터의 멀티태스킹은 여러가지일은 돌아가면서 매우 빠르게 처리한다고 했지? 이때 현재 하던일을 잠깐 멈추고 다른일로 바꾸는걸 태스크스위칭이라고 부름

여기서 A와 B는 프로세스를 의미함. 왜 번갈아 가면서 하는지는 태스크스위칭 참조

"HLT 명령어를 실행한다는건 분명 CPU를 사용하고 있는건데 논리적으로 보면 CPU를 계속 사용한다는것처럼 보인다" 이말은 OS 관점에서 봐야되는데 A, B, SysIdle 프로세스가 OS상에 올라가고 있어, SysIdle은 HLT 를 무한정 실행하는 프로세스 이고, A, B는 그냥 일반 프로세스인거지 A, B가 놀고 있을때는 SysIdle 프로세스가 HLT 명령을 무한정 호출하지? 그럼 SysIdle 프로세스 혼자서 CPU를 점유하고 있다는 말이되. 그럼 OS 입장에서는 SysIdle은 CPU를 100퍼센트의 유틸라이제이션을 가지고, A 프로세스/B 프로세스는 지금 0퍼센의 CPU 유틸라이제이션을 가지고 있구나라고 생각하는거지. 물론 CPU 입장에서는 HLT 명령이 무한정 들어오니깐 쉬는거나 마찬가지인거고..
0
2017.03.31
@잉텔
오 전부 다 알겠어. 이해하기 쉽다ㅋㅋ 친절하게 달아줘서 고맙다
0
2017.03.30
음 지식롭다 추천
0
2017.03.31
재밌넹
0
2017.03.31
잘 읽었다. 마이크로프로세서 개발보드 사놓고 공부하고 있는데 재밌게 읽은듯
0
2017.03.31
저 svchost는 왜있는거야? 졸라많던데
0
2017.03.31
@복숭아가범인
윈도우 관련 서비스인데 서비스가 각각의 실행 파일로 되어 있는게 아니라 dll 형태로 만들어놓고 svchost.exe가 dll 내부에 있는 기능을 호출 하는 형태로 되어있음
0
2017.04.01
게이야 니 글로 공부하면 운영체저 에이쁠 각이냐
0
2017.04.02
Hlt는 cpu에서 어떻게 처리되는거야?
Nop은 아무 동작도 안하는 instruction 인걸 알겠는데
Hlt는 명확하게 뭔지는 모르겠네. Clock을 끄는 식으로 작동하는 건가?
0
2017.04.02
@싱어송파이터
내가 전자공학과는 아니라서 잘 모르겠는데 어디서 본바에 의하면 레치신호를 끊어버린다캄
0
2017.04.02
@잉텔
오호 그렇구나 땡큐
0
2017.04.03
명문대 컴퓨터공학과 학부 졸업하면 타인 스마트폰이나 sns 계정 해킹할수있냐?
가정집 pc 해킹해서 모니터 훔쳐보는것도 할수있냐?
대학4년으로 부족하면 석박사 따면 가능하냐?
0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜
12408 [역사] 지도로 보는 정사 삼국지 ver2 11 FishAndMaps 8 1 일 전
12407 [기타 지식] 100년을 시간을 넘어서 유행한 칵테일, 사제락편 - 바텐더 개... 3 지나가는김개붕 1 1 일 전
12406 [기타 지식] 오이...좋아하세요? 오이 칵테일 아이리쉬 메이드편 - 바텐더... 3 지나가는김개붕 2 3 일 전
12405 [기타 지식] 웹툰 나이트런의 세계관 및 설정 - 지구 1부 30 Mtrap 8 2 일 전
12404 [기타 지식] 칵테일의 근본, 올드 패션드편 - 바텐더 개붕이의 술 이야기 15 지나가는김개붕 13 3 일 전
12403 [기타 지식] 웹툰 나이트런의 세계관 및 설정 - 인류 2부 21 Mtrap 13 3 일 전
12402 [기타 지식] 웹툰 나이트런의 세계관 및 설정 - 인류 1부 13 Mtrap 19 3 일 전
12401 [역사] 군사첩보 실패의 교과서-욤 키푸르(完) 1 綠象 0 2 일 전
12400 [호러 괴담] [살인자 이야기] 미치도록 잡고 싶었다. 체포되기까지 28년이... 1 그그그그 6 4 일 전
12399 [역사] 아편 전쟁 실제 후기의 후기 3 carrera 11 5 일 전
12398 [과학] 경계선 지능이 700만 있다는 기사들에 대해 36 LinkedList 9 5 일 전
12397 [역사] 미지에의 동경을 그린 만화 8 식별불해 5 8 일 전
12396 [호러 괴담] [살인자 이야기] 두 아내 모두 욕조에서 술을 마시고 익사했... 그그그그 2 8 일 전
12395 [기타 지식] 서부 개척시대에 만들어진 칵테일, 카우보이 그리고 프레리 ... 3 지나가는김개붕 5 8 일 전
12394 [유머] 웃는 자에게 복이 오는 삶 10 한그르데아이사쯔 7 8 일 전
12393 [기타 지식] 모던 클래식의 현재를 제시한 칵테일편 - 바텐더 개붕이의 술... 4 지나가는김개붕 2 9 일 전
12392 [호러 괴담] [살인자 이야기] 공소시효만료 11개월을 앞두고 체포된 범인 그그그그 3 10 일 전
12391 [호러 괴담] [살인자 이야기] 범인으로 지목받자 딸에게 누명을 씌우려다... 그그그그 4 10 일 전
12390 [기타 지식] 브라질에서 이 칵테일을 다른 술로 만들면 불법이다, 카이피... 5 지나가는김개붕 1 10 일 전
12389 [기타 지식] 럼, 라임, 설탕 그리고 다이키리 편 - 바텐더 개붕이의 술 이... 2 지나가는김개붕 6 11 일 전