기본미션
p. 304의 확인 문제 1번 풀고 인증하기
선택미션
Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
Chapter 0️⃣9️⃣
1) 운영체제를 알아야 하는 이유
(시스템) 자원: 프로그램 실행에 마땅히 필요한 요소들
e.g. 컴퓨터 부품(CPU, 메모리, 보조기억장치, 입출력 장치)
⬇️
운영체제: 실행할 프로그램에 필요한 자원 할당 + 프로그램이 올바르게 실행되도록 돕는 프로그램
메모리 = 커널 영역(운영 체제) + 사용자 영역(응용 프로그램)
운영 체제를 깊이 이해하면 ➡️ 하드웨어와 프로그램을 더 깊이 이해할 수 있음
2) 운영체제의 큰 그림
운영체제의 핵심 서비스:
커널 (자원에 접근하고 조작하는 기능 + 프로그램이 올바르고 알전하게 실행되게 하는 기능)
+ 사용자 인터페이스(그래픽 유저 인터페이스, 커맨드 라인 인터페이스)
이중 모드: CPU가 명령어를 실행하는 모드를 사용자 모드/커널 모드로 구분
사용자 모드: 운영체제 서비스를 제공받을 수 없는 실행 모드(시스템 호출 필요) ➡️ 커널 영역의 코드 실행 불가
e.g. 일반적인 응용 프로그램
커널 모드: 운영체제 서비스를 제공받을 수 있는 실행 모드 ➡️ 커널 영역의 코드 실행 가능
e.g. 운영체제
시스템 호출(시스템 콜): 인터럽트의 일종, 사용자 모드 프로그램 커널 모드 전환 ➡️ 운영체제 커널 서비스 제공
시스템 호출 처리 순서 = 인터럽트 처리 순서 [Chapter 04]
1. 시스템 호출 발생 명령어 실행
2. CPU: 현재 작업 백업
3. 인터럽트 서비스 루틴 실행
4. 기존에 실행하던 응용 프로그램 복귀, 이전 작업 실행
운영체제 커널 서비스
- CPU: 한 번에 하나의 프로세스만 실행 가능
➡️ 다양한 프로세스 관리/실행 필요 [Chapter 10] + 프로세스 동기화 [Chapter12] + 교착 상태 해결 필요 [Chpater 13]
- 운영체제
➡️ CPU: CPU 스케줄링 [Chpater 11]
➡️ 메모리: 프로세스 메모리 할당 방법 + 메모리 부족 시 극복 방법 [Chpater 14]
➡️ 입출력장치: 인터럽트 서비스 루틴 제공 ➡️ 입출력 작업 수행
- 운영체제: 보조기억장치 속 데이터 ➡️ 파일/디렉터리로 관리 [Chapter 15]
Chpater 🔟
1) 프로세스 개요
포그라운드 프로세스: 사용자가 보는 앞에서 실행되는 프로세스
백그라운드 프로세스: 사용자가 보지 못한느 뒤편에서 실행되는 프로세스
- 사용자와 직접 상호작용할 수 있는 백그라운드 프로세스
- 데몬(유닉스)/서비스(윈도우): 사용자와 상호작용하지 않는 백그라운드 프로세스
프로세스 제어 블록(PCB)
if 프로세스 생성 ➡️ 메모리 커널 영역(운영체제) PCB 생성 ➡️ 특정 프로세스 식별, 해당 프로세스 처리 필요 정보 판단 ➡️ 프로세스 실행 순서 관리 + 프로세스에 자원(CPU) 배분
- 프로세스 ID: 특정 프로세스 식별 목적 부여 고유 번호 (같은 일 수행 프로그램 N번 실행 ➡️ PID 다른 N 개의 프로세스 생성)
- 레지스터 값: 해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값들
- 프로세스 상태: 현재 프로세스의 상태 (입출력장치 사용 대기 상태 or CPU 사용 대기 상태 or CPU 이용 상태)
- CPU 스케줄링 정보: 프로세스가 언제, 어떤 순서로 CPU를 할당받을지
- 메모리 관리 정보: 프로세스가 어느 주소에 저장되어있는지에 대한 정보(베이스 레지스터, 한계 레지스터, 페이지 테이블 정보 [Chapter 14])
- 사용한 파일과 입출력장치 목록: 어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보
문맥: 하나의 프로세스 수행을 재개하기 위해 기억해야할 정보(PCB)
e.g. 프로그램 카운터, 레지스터 값, 메모리 정보, 실행을 위해 열었던 파일, 사용한 입출력장치
문맥 교환: if 프로세스 CPU 사용 시간 끝 or 인터럽트 발생 ➡️ 운영체제: 해당 프로세스의 PCB에 문맥 백업 ➡️ 프로세스 B의 문맥 복구
프로세스 생성 ➡️ 사용자 영역(코드 영역, 데이터 영역, 힙 영역, 스택 영역) 분할 저장
- 코드 영역(= 텍스트 영역): 정적 할당 영역, 코드(기계어로 이루어진 명령어) 저장
CPU가 실행할 명령어 ➡️ 읽기 전용 공간(쓰기 금지)
- 데이터 영역: 정적 할당 영역, 프로그램이 실행되는 동안 유지할 데이터 저장
e.g. 전역 변수 [Chapter 12]
- 힙 영역: 동적 할당 영역(낮은 주소 ➡️ 높은 주소), 프로그래머가 직접 할당할 수 있는 저장 공간
(언젠가 해당 공간을 반환해야함 or 메모리 누수 문제)
- 스택 영역: 동적 할당 영역(높은 주소 ➡️ 낮은 주소) , 데이터를 일시적으로 저장하는 공간
저장할 데이터 - PUSH / 필요하지 않은 데이터 - POP
e.g. 매개 변수, 지역 변수
2) 프로세스 상태와 계층 구조
프로세스 상태
- 생성 상태: 프로세스를 생성 중인 상태(메모리 적재 ➡️ PCB 할당)
- 준비 상태: CPU 할당 받아 실행 가능 but 차례 기다리고 있는 상태
- 실행 상태: CPU 할당 받아 실행 중, 할당된 일정 시간 동안만 CPU 사용 가능
- 대기 상태: 입출력장치의 작업을 기다리는 상태
- 종료 상태: 프로세스가 종료된 상태, PCB와 프로세스가 사용한 메모리 정리
부모 프로세스: 새 프로세스를 생성한 프로세스 (개별 PID)
자식 프로세스: 부모 프로세스에 의해 생성된 프로세스 (개별 PID + Parent PID)
➡️ 최초의 프로세스가 자식 프로세스들을 생성, 자식 프로세스들이 새로운 프로세스들을 생성...
➡️ 프로세스 계층 구조
➕최초의 프로세스
유닉스 - init
리눅스 - systemd
macOS - launched
부모 프로세스: fork ➡️ 자식 프로세스(복사본) 생성 ➡️ 자식 프로세스: exex ➡️ 자신의 메모리 공간을 새로운 프로그램으로 덮어씀(새로운 프로그램으로 전환)
+ exec 호출하지 않는 경우) 부모 프로세스 & 자식 프로세스: 같은 코드 병행하여 실행
❓기본 미션
Q. 다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 1부터 5까지 올바른 상태를 적어보세요.
A. 1 - 생성 상태, 2 - 준비 상태, 3 - 실행 상태, 4 - 종료 상태, 5 - 대기 상태
3) 스레드
단일 스레드 프로세스: 모든 프로세스가 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행되는 프로세스
스레드 = 프로세스를 구성하는 실행 단위(스레드 ID + 프로그램 카운터 값을 비롯한 레지스터 값 + 스택) ➡️ 각기 다른 코드 실행 가능, 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행됨
➕ 리눅스: 프로세스 = 스레드 ➡️ 태스크
멀티프로세스: 여러 프로세스를 동시에 실행, 자원 공유 ❌ ➡️ 메모리 낭비
멀티스레드: 여러 스레드로 프로세스를 동시에 실행, 자원(코드 + 데이터 + 힙 영역) 공유 ⭕ ➡️ 메모리 효율적 사용, 협력 유리 but, 하나의 스레드에 문제 발생 시 프로세스 전체에 문제 발생
➕ 프로세스 간 통신(IPC): 스레드에 비해 까다롭지만 가능하다!
Chapter 1️⃣1️⃣
1) CPU 스케줄링 개요
프로세스: 실행 상태 🔄️ 대기 상태
입출력 집중 프로세스: 입출력 작업이 많은 프로세스, CPU 사용량 ⬇️
e.g. 비디오 재생, 디스크 백업 작업
CPU 집중 프로세스: CPU 작업이 많은 프로세스, CPU 사용량 ⬆️
e.g. 수학 연산, 컴파일, 그래픽 처리 작업
if 입출력 집중 프로세스 & CPU 집중 프로세스 동시 CPU 자원 요구
: 입출력 집중 프로세스 실행 ➡️ 입출력 장치 작동, CPU 집중 프로세스에 CPU 할당
운영체제: 프로세스 우선순위 부여 ➡️ 프로세스의 중요도에 맞게 CPU 이용 ➡️ 우선순위 높은 프로세스: 더 빨리, 자주 실행
➕ 프로세스 우선순위: 유닉스 체계 운영체제) ps -el
❗매번 모든 프로세스의 PCB를 확인해 우선순위를 정하는 것은 비효율적
➡️ 스케줄링 큐: 모든 프로세스를 큐에 삽입하여 줄을 세움
준비 큐: CPU를 이용하고 싶은 프로세스들이 서는 줄
대기 큐: 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄
(➡️ 입출력 완료 ➡️ 인터럽트 발생 ➡️ 준비 큐로 이동)
선점형 스케줄링: 프로세스가 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식 ➡️ 어느 하나의 프로세스가 자원 사용 독점 불가능
🔼 한 프로세스의 자원 독점 방지, 프로세스들에 골고루 자원 배분
🔽 문맥 교환 과정에서 오버헤드 발생
비선점형 스케줄링: 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식
🔼 오버헤드 ⬇️
🔽 모든 프로세스 골고루 자원 사용 불가능
2) CPU 스케줄링 알고리즘
방식 | 장점 | 단점 | |
선입 선처리 스케줄링 (FCFS 스케줄링) |
비선점형 스케줄링. 준비된 큐에 삽입된 순서대로 프로세스들을 처리 |
공정 | 호위 효과 (프로세스 대기 시간 ⬆️⬆️⬆️) |
최단 작업 우선 스케줄링 (SJF 스케줄링) |
비선점형 스케줄링. CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행 |
호위 효과 방지 | |
라운드 로빈 스케줄링 | 선점형 스케줄링. 선입 선처리 스케줄링 + 타임 슬라이스(각 프로세스가 CPU를 사용할 수 있는 정해진 시간) 프로세스가 타임 슬라이스 동안 돌아가며 CPU 이용 |
타임 슬라이스 크기 ⬆️ 호위 효과 발생 타임 슬라이스 크기 ⬇️ 프로세스 전환 잦음 |
|
최소 잔여 시간 우선 스케줄링 (SRT 스케줄링) |
선점형 스케줄링. 최단 작업 우선 스케줄링 알고리즘 + 라운드 로빈 알고리즘 |
||
우선순위 스케줄링 | 프로세스들에 우선순위 부여, 가장 높은 우선순위를 가진 프로세스부터 실행 | 기아 현상(우선순위 낮은 프로세스 실행 계속 연기) ➡️ 에이징 기법: 오랫동안 대기한 프로세스 우선순위 ⬆️ |
|
다단계 큐 스케줄링 | 우선순위별로 준비 큐 여러 개 사용 ➡️ 우선순위가 가장 높은 큐에 있는 프로세스 먼저 처리,그다음 우선순위에 큐에 있는 프로세스 처리 |
우선순위 구분 실행 편리 | 프로세스들 큐 사이 이동 불가 ➡️ 우선순위 낮은 프로세스 계속 연기 (기아 현상) |
다단계 피드백 큐 스케줄링 | 프로세스 큐 사이 이동 가능 ➡️ CPU 이용 시간 ⬆️ ▶️ 우선순위 ⬇️ 큐 대기 시간 ▶️ 우선순위 ⬆️ 큐 |
구현 복잡 |
❗ 선택 미션
Q. Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
A. A, B, C, D 순서
'Computer Science > Computer Architecture, Operating System' 카테고리의 다른 글
[혼공컴운] 3주차_Chapter 06~08 (0) | 2024.01.21 |
---|---|
[혼공컴운] 2주차_Chapter 04~05 (0) | 2024.01.14 |
[혼공컴운] 1주차_Chapter 01~03 (1) | 2024.01.07 |