반응형
이 글은 책 컴퓨터 밑바닥의 비밀 chapter 4.2 의 내용을 읽고 요약한 글입니다.
4.2.1 컴퓨터의 CPU 사용률은 얼마인가?
- 게임, 영상 편집, 이미지처리 같은 일을 하지 않는 한 대부분 컴퓨터의 CPU 사용률은 낮음(7~8%)
- Windows 경우 아래와 같이 Task Manager 의 Details 탭의 CPU 컬럼에서 확인할 수 있다.
- 근데 System Idle Process 항목은 뭐길래 96%를 차지하고 있는걸까?
4.2.2 프로세스 관리와 스케쥴링
- OS는 프로세스에 우선순위를 할당하고 이에 따라 스케쥴러가 스케쥴링할 수 있도록 대기열에 프로세스를 넣음
4.2.3 대기열 상태 확인: 더 나은 설계
- 준비 완료 대기열이 비어있다면 OS가 스케쥴링해야 할 프로세스가 없고 CPU는 유휴상태임을 의미
if(queue.empty())
{
do_something();
}
- 위처럼 코드를 작성할 수도 있지만 커널은 if 같은 예외처리 구문으로 가득하기 때문에 코드가 번잡해보일 수 있음 → 항상 실행할 수 있는 프로세스를 찾을 수 있도록 하면 됨
- linked list에서 sentinel 노드를 사용하는 이유
- NULL판단 로직이 제거되어 코드 오류가능성이 줄고 구조가 깔끔하게 됨
*System Idle Process가 유휴 작업이라는 프로세스 by 커널 설계자. 항상 준비완료 상태이며 우선순위가 가장 낮음
- 유휴 프로세스는 무엇을 하나? 이를 설명하기 위해서 CPU를 이야기 해야한다.
4.2.4 모든 것은 CPU로 돌아온다
- halt 명령어를 통해 CPU 내부의 일부 모듈을 절전 상태로 전환하여 전력 소비를 크게 줄임
- 커널 상태에서 CPU로만 실행할 수 있음
참고) 일시중지(suspend) vs halt
- sleep같은 함수는 일시 중지로 해당 함수를 호출한 프로세스만 일시 중지
- CPU가 halt 명령어를 실행하는 것은 시스템 내 더 이상 실행할 준비가 완료된 프로세스가 없다는 의미
4.2.5 유휴 프로세스와 CPU의 저전력 상태
- halt 명령어를 지속적으로 실행해주는 순환이 있어 CPU는 저전력 상태로 진입하기 시작
while (1)
{
while (!need_resched())
{
cpuidle_idle_call(); // halt 명령어 실행
}
}
4.2.6 무한 순환 탈출: 인터럽트
위 코드의 이상한점들
- 위 코드를 보면 무한 while loop 구조 내부에 break/return 문이 없는데 어떻게 빠져나올까?
- 무한 loop이 있어서 프로그램이 CPU 독점하는 것으로 보이지 않음
- OS는 일정 시간마다 타이머 인터럽트를 생성하고, CPU는 인터럽트 신호를 감지해 인터럽트 처리 프로그램을 실행함
- 인터럽트 처리함수에는 프로세스의 상태를 파악해 준비완료된 프로세스가 있으면 기존 프로세스를 중단하고 준비완료된 프로세스를 실행
반응형
'OS' 카테고리의 다른 글
[책리뷰] 컴퓨터 밑바닥의 비밀: ch4.7 CPU 진화론(중): 축소 명령어 집합의 탄생 (0) | 2024.09.08 |
---|---|
[책리뷰] 컴퓨터 밑바닥의 비밀: ch4.6 CPU 진화론(상): 복잡 명령어 집합의 탄생 (0) | 2024.09.08 |
[책리뷰] 컴퓨터 밑바닥의 비밀: ch4.1 이 작은 장난감을 CPU라고 부른다 (0) | 2024.09.01 |
[책리뷰] 컴퓨터 밑바닥의 비밀: ch3.4 메모리 힙 영역 (0) | 2024.09.01 |
[책리뷰] 컴퓨터 밑바닥의 비밀: ch3.2 -3.3 메모리 내의 프로세스 (0) | 2024.08.25 |