혼공컴운 4주차 기본 미션
프로세스 상태 다이어그램을 완성하시오
혼공컴운 4주차 추가 미션
큐에 A→B→C→D 순서로 삽입되었을 때, FCFS 스케줄링을 적용하면 어떤 순서로 CPU를 할당받는가?
FCFS(First Come First Served)의 이름 그대로, 먼저 온 순서대로 CPU를 할당받는다.
즉, A→B→C→D 순서로 할당받는다.
09장 운영체제 시작하기
09-1 운영체제를 알아야 하는 이유
운영체제(Operating System)
실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 정상적으로 실행할 수 있도록 보조하는 프로그램
- 커널(kernel; 씨앗, 알맹이, 핵심) 영역: 메모리에서 운영체제가 적재되는 영역
- 사용자 영역(user space): 메모리에 응용 프로그램이 적재되는 영역
운영체제를 알아야 하는 이유
운영체제 덕분에 하드웨어를 조작하는 코드를 직접 작성할 필요가 없다.
개발자가 작성한 프로그램은 결국 운영체제를 통해 실행하게 되므로, 하드웨어의 상태와 오류, 실행 방법 등을 통해 문제 해결의 실마리를 얻을 수 있다.
09-2 운영체제의 큰 그림
커널(kernel)
운영체제의 핵심 서비스를 담당하는 부분
※ 핵심 서비스: 프로세스 관리, 자원 접근/할당, 파일 시스템 관리 등
이중 모드
CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식
- 운영체제는 응용 프로그램이 하드웨어에 직접 접근하는 것을 방지하여 자원을 보호한다.
- 운영체제는 응용 프로그램이 오로지 운영체제를 통해서만 자원에 접근하도록 하여 자원을 보호한다.
- 커널 모드: 운영체제 서비스를 제공받을 수 있는 실행 모드
- 사용자 모드: 운영체제 서비스를 제공받을 수 없는 실행 모드
(일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다)
- 시스템 호출(System Call): 사용자 모드로 실행되는 프로그램이 운영체제 서비스(= 자원 접근)를 제공받기 위한 요청 → 소프트웨어 인터럽트
운영체제 핵심 서비스
프로세스 관리
일반적으로 하나의 CPU는 한 번에 하나의 프로세스(실행 중인 프로그램)를 실행할 수 있으므로, 프로세스들을 전환/반복하기 때문에 운영체제가 교통 정리에 나서야 한다.
또한, 운영체제는 프로세스 동기화(프로세스 동시 실행)와 교착 상태(한정된 자원으로 모든 프로세스가 대기 상태)를 관리해야 한다
자원 접근 및 할당
- CPU 스케줄링: 프로세스가 CPU를 사용할 순서와 시간을 결정하는 일
- 메모리 관리: 새로운 프로세스 적재 시 주소 결정
- 인터럽트 서비스 루틴 제공: 하드웨어 인터럽트 발생 시 처리 방법에 대한 정보를 제공한다.
파일 시스템 관리
파일과 디렉터리(directory; 폴더)를 관리
10장 프로세스와 스레드
10-1 프로세스 개요
프로세스(Process)
보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행되는 프로그램
- Foreground Process: 사용자가 보는 앞에서 실행되는 프로세스
- Background Process: 사용자가 보지 못하는 뒤편에서 실행되는 프로세스
- 사용자와 상호작용하지 않고, 자기 역할만 하는 백그라운드 프로세스
- Daemon ← 유닉스 운영체제
- Service ← 윈도우 운영체제
프로세스 제어 블록(Process Control Block; PCB)
프로세스 관련 정보를 저장하는 자료구조
PCB는 커널 영역에서 프로세스 생성 시에 만들어지고, 실행이 끝나면 폐기된다.
PCB에 담기는 정보
- 프로세스 ID(Process ID; PID): 프로세스 식별을 위해 부여하는 고유한 번호
- 레지스터값: 이전 작업을 이어서 진행하기 위한 레지스터 값들
- 프로세스 상태: 입출력장치 대기, CPU 사용 또는 대기 등
- CPU 스케줄링 정보: 프로세스의 CPU 할당 순서
- 메모리 관리 정보: 프로세스의 메모리 주소 정보, 페이지 테이블 정보
- 사용한 파일과 입출력장치 목록: 사용한 입출력장치와 파일
문맥 교환(Context Switching)
기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위한 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
※ 문맥(Context): 프로세스 수행 재개를 위해 기억해야 할 정보
프로세스의 메모리 영역
사용자 영역에 프로세스가 배치되는 방식
- 정적 할당 영역: 크기가 고정된 영역
- 코드 영역(또는 텍스트 영역)
기계어로 이루어진 명령어가 저장되는 공간
CPU 실행할 명령어가 담겨 있기 때문에 읽기 전용 공간
- 데이터 영역
프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간(전역 변수)
- 동적 할당 영역: 크기가 변할 수 있는 영역
- 힙 영역
개발자가 직접 할당할 수 있는 영역
사용 후 반환 필요(미반환 시 메모리 누수 발생)
낮은 주소에서 높은 주소로
- 스택 영역
데이터를 일시적으로 저장하는 공간(지역 변수, 매개 변수)
높은 주소에서 낮은 주소로
10-2 프로세스 상태와 계층 구조
프로세스 상태
- 생성 상태(new): 프로세스를 생성 중
- 준비 상태(ready): CPU 순서를 기다리는 중
- 실행 상태(running): CPU를 할당받아(= dispatch) 일정 시간 실행 중
- 대기 상태(blocked): 입출력장치 작업 기다리는 중
- 종료 상태(terminated): 프로세스가 종료
프로세스 계층 구조
- 부모 프로세스: 새 프로세스를 생성한 프로세스
- 자식 프로세스: 부모 프로세스에 의해 생성된 프로세스
프로세스 생성 기법
부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다.
- fork: 부모 프로세스는 자식 프로세스(일종의 분기, 가지(branch))를 생성하는 시스템 호출
- exec(execute): 생성된 자식 프로세스는 자신의 메모리 공간을 다른 프로그램으로 교체하는(기존 프로그램을 '처형'하는) 시스템 호출
10-3 스레드
프로세스를 구성하는 실행의 단위
스레드는 실행에 필요한 최소한의 정보만으로 프로세스 자원을 공유하며 실행된다.
멀티프로세스와 멀티스레드
- 멀티프로세스: 여러 프로세스를 동시에 실행하는 것(자원 공유 X)
- 프로세스 간 통신(Inter-Process Communication; IPC): '기본적으로' 프로세스 간 자원 공유를 하지 않지만, 프로세스 간에 자원과 데이터를 주고받을 수 있다.
- 공유 메모리: 프로세스 간에 공유하는 메모리 영역을 두어 데이터 통신
- (소켓, 파이프 등)
- 멀티스레드: 여러 스레드로 프로세스를 동시에 실행하는 것(자원 공유 O)
- 프로세스의 자원을 공유한다는 특성은 하나의 스레드에 문제 발생 시, 프로세스 전체에 문제로 확대될 수 있다.
11장 CPU 스케줄링
11-1 CPU 스케줄링 개요
운영체제가 CPU 자원을 합리적인 방법으로 프로세스에 배분하는 것
- 입출력 집중 프로세스: (입출력 작업)
- CPU 집중 프로세스: (연산, 컴파일 등)
스케줄링 큐
시스템 자원을 이용할 프로세스들을 '줄' 세우는 것(프로세스 상태 참조)
- 준비 큐(ready queue): CPU를 이용하고 싶은 프로세스가 서는 줄
- 대기 큐(waiting queue): 입출력장치를 이용하기 위해 대기 상태가 된 프로세스들이 서는 줄
선점형/비선점형 스케줄링
- 선점형(preemptive) 스케줄링: 기존 프로세스가 자원을 사용하고 있더라도 운영체제가 강제로 다른 프로세스에 자원을 할당할 수 있는 스케줄링 → 독점 불가
- 독점을 방지하여 다양한 프로세스에 자원 할당 가능
- 문맥 교환 과정에서 오버헤드(추가 시간)가 발생 가능
- 비선점형(non-preemptive) 스케줄링: 한 프로세스가 종료되거나 대기 상태에 들어갈 때까지 다른 프로세스가 자원에 접근할 수 없는 스케줄링 → 독점
- 오버헤드는 적지만, 모든 프로세스가 골고루 자원을 사용할 수 없다.
11-2 CPU 스케줄링 알고리즘
FCFS(First Come First Served)
선입 선출 → 준비 큐에 삽입된 순서대로 단순 처리하는 비선점형 스케줄링
SJF(Shortest Job First)
준비 큐에 삽입된 프로세스 중 CPU 이용 시간이 가장 짧은 프로세스부터 실행
Round Robin
타임 슬라이스(CPU를 사용할 수 있는 정해진 시간)만큼 돌아가면서 CPU를 이용하는 선점형 스케줄링
SRT(Shortest Remaining Time)
SFJ + Round Robin → 타임 슬라이스만큼 CPU를 사용하되, 다음 프로세스는 남아있는 작업시간이 가장 적은 프로세스가 선택됨
우선순위 스케줄링
프로세스에 우선순위를 부여하고, 그 순서에 따라 실행
- 기아(starvation) 현상: 우선순위가 낮은 프로세스는 우선순위가 높은 프로세스에 의해 지속해서 실행이 연기될 수 있다.
- 에이징(aging): 기아 현상을 방지하고자, 오랫동안 대기한 프로세스의 우선순위를 높이는 방식
다단계 큐 스케줄링
우선순위별로 준비 큐를 여러 개 사용하는 방식
다단계 피드백 큐 스케줄링
다단계 큐 스케줄링의 발전된 형태 → 프로세스가 큐 사이를 이동 할 수 있다.
자원을 오래 사용하는 프로세스는 프로세스는 우선순위가 낮아지고,
자원을 적게 사용하는 프로세스는 우선순위가 높은 큐에서 실행이 끝난다.