System Idle Process에 대해서 알아보자



원랜 시분할 운영체제에서 멀티태스킹의 기본인 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)는 유저모드 프로세스(그냥 통상 볼 수 있는 프로그램)는 권한이 없어서 실행 할 수 없다!

21개의 댓글

유후 유후 후후후 후유 유후~♬
2
2017.03.30
@오늘도안녕하신가
수발..;;
0
@잉텔
글이 너무 진지하면 게이들 개쫄음 근데 스레드는 idle에서 돌아가는거 아니감?
0
2017.03.30
@오늘도안녕하신가
쓰레드가 실행할 명령이 없으면 idle인거지뭐..
0
@잉텔
그렇고만 cpu야 뭐 잉텔, 암드 구조 차이만 알면 될거 같구 os는 음 역시 공룡책인가
0
2017.03.30
@오늘도안녕하신가
여기서 CPU 구조란 그냥 범용적인 구조라서.. 범용적 구조만 해도 복잡하지.. ㅎㅎ

OS 공룡책 원서로 봐서 수업시간에 ㅈ같았다..
0
2017.03.30
[삭제 되었습니다]
2017.03.30
@루니오스
네? 그럼 i5가지고 해야하나...
0
2017.03.30
@잉텔
[삭제 되었습니다]
2017.03.30
@루니오스
응 할배불러왔어 시발...
0
굳굳
0
2017.03.30
@매우진한고룡종피
고맙 ㅋ
0
2017.03.30
저기요 이런건 읽판에좀 가세요 ㅡㅡ
0
2017.03.30
@담요
흑.. ㅠㅠ 그래도 컴퓨터/IT 판이니깐 ㅠㅠ
0
2017.03.30
아조씨 읽판에다가 연재해주세요.계속읽게요
여기쓰면 묻혀요 아조씨!
0
2017.03.30
@잠적자
ㅇㅋ
0
2017.03.30
굿굿 추천누름
0
2017.03.30
@샤랄랄랄라
땡스 ㅋ
0
2017.03.30
그냥 Idle이 무슨뜻인지 검색해보면 빡대가리가 아닌이상 뭔지 알거같은데?
간단히 말하면 놀고있는 비율을 나타내는거잖아? 사용율 총합이 100%가 되야하니까?
0
2017.03.30
@폐폐
ㅇㅇ 근데 여기서 더 말하고 싶은건 저 idle 프로세스가 진짜 idle로 만들기 위한 시퓨 명령을 그만큼 수행한다 이거지
0
2017.03.30
ㅊㅊ좋은글ㅊㅊ
0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180573 [컴퓨터] 뭘로 살까.. 게이밍 노트북 VS 데스크탑 5 사람존 0 51 분 전 42
180572 [잡담] PC랑 TV연결 문제 질문 4 fjekxnw 0 1 시간 전 24
180571 [잡담] 입주예정 개붕이 티비랑 스피커 고민 7 배프고다배파고 0 1 시간 전 43
180570 [컴퓨터] 공유기 익스텐더 설정 이거 층에사는중 0 1 시간 전 20
180569 [모바일] 지금 a34를 사는게 맞나.. 9 울그락푸르락 0 1 시간 전 57
180568 [컴퓨터] PC 고수님들 컴퓨터 좀 봐주십시요 꾸벅 4 방앗간 0 2 시간 전 37
180567 [컴퓨터] 서브 모니터 추천좀 1 년째재수강 0 2 시간 전 22
180566 [잡담] 태블릿 직구했는데 배송조회에 '사고'래.... 2 ✔_✔ 0 4 시간 전 184
180565 [모바일] ㅠㅠ a90 아직 현역인가? 4 슈퍼커브 0 5 시간 전 90
180564 [정보] 개드립 mp4 재생 안되는 사람 보시오 3 쪼렙고양이 1 10 시간 전 84
180563 [컴퓨터] 메인보드 어떤거 써야되죠? 4 함박눈 0 12 시간 전 122
180562 [프로그래밍] 안드로이드 책 추천좀 집에가게해줘 0 12 시간 전 90
180561 [잡담] 갤럭시 앱 아이콘 숫자? 안뜸ㅠ 5 1q2w3es 0 14 시간 전 102
180560 [컴퓨터] 이런 도킹스테이션 어떰? 6 쿠엥쿠엥 0 14 시간 전 211
180559 [잡담] 허먼밀러 뉴 에어론B 하루체감 5 창원토박이 0 14 시간 전 211
180558 [컴퓨터] 노트북 가지고다니기 vs 미니컴퓨터 가지고다니기 15 황제건 0 15 시간 전 189
180557 [잡담] 아이패드 프로 얼마에 나올거 같음? 5 노보케인 0 16 시간 전 164
180556 [정보] 알리 ssd 2테라 9.6만 7 년차html개발자 0 18 시간 전 361
180555 [잡담] 거북선 -> 레이니로 바꿀까 3 fhana 0 18 시간 전 137
180554 [잡담] 집안에 돌아다니는 물건들 싹 다 파는 중 1 연골어류 0 20 시간 전 207