@ 3주차 Keyword
RAM - DRAM, SRAM
캐시메모리는 CPU 코어에 멀어질수록 용량이 커지고, 속도는 작아진다.
플래시 메모리는 우리가 흔히 사용하는 USB, SSD, SD카드 이다.
플래시 메모리 - SLC타입, MLC타입, TLC 타입
셀보다 더 큰단위는 페이지, 블록, 플레인, 다이 순서이다.
RAID는 하드디스크 또는 SSD 를 이용하는 기술로, 여러개의 디스크를 이용하여 하나의 디스크 처럼 취급하는 기술임
입출력은 프로그램 입출력, 인터럽트 기반 입출력 DMA 입출력 이 있다.
9. 운영체제 시작하기
9.1. 운영체제를 알아야 하는 이유
9.1.1. 운영체제란
- 모든 프로그램은 하드웨어를 필요로하며, 프로그램 실행에 필요한 요소를 '시스템 자원' 또는 '자원' 이라고 함
- 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 하는 프로그램이 '운영체제' 임
- 운영체제 또한 프로그램이기에 메모리에 적재되는데, → 메모리 내 커널 영역 이라는 특별한 공간에 적재
- 커널 영역을 제외한 나머지 영역을 '사용자 영역' 이라고 함
▷ 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에게 자원을 할당하고 올바르게 실행되도록 함
9.1.2. 운영체제를 알아야 하는 이유
- 운영체제는 하드웨어를 조작하고 관리하는 기능들을 제공 → 개발자들이 하드웨어 조작 코드를 작성할 필요 X
- 운영체제와 대화 통해 하드웨어와 프로그램을 더 깊이 이해하고, 문제 해결의 실마리를 찾을 수 있음
- 여기서 운영체제와의 대화는 오류 메세지
9.2. 운영체제의 큰 그림
9.2.1. 운영체제의 심장 커널
- 운영체제는 현존하는 프로그램 중 가장 큰 규모를 가진 프로그램
- 커널은 운영체제의 핵심 서비스 → 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능
- 운영체제가 설치된 모든 기기에는 커널 존재
- 사용자 인터페이스는 사용자가 컴퓨터와 상호작용 할 수 있도록 하지만, 커널에 포함되는 서비스는 아님
- 사용자 인터페이스에는 GUI와 커맨드 라인 인터페이스(CLI)가 있음
9.2.2. 이중 모드와 시스템 호출
- 운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지 → 시스템 자원을 보호
- 응용 프로그램의 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행 → 이중 모드로써 구현
- 이중모드는 CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식
사용자 모드 : 운영체제 서비스를 제공받을 수 없는 실행 모드, 커널 영역의 코드를 실행할 수 없음
- 사용자 모드로 실행 중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없음
커널모드 : 운영체제 서비스를 제공받을 수 있는 실행 모드, 커널 영역의 코드를 실행할 수 있음
- CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있음
- 사용자 모드에서 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환 되어야함
- 이를 위한 요청을 시스템 호출(시스템 콜)이라고 함, 시스템 호출은 소프트웨어적인 인터럽트임
9.2.3. 운영체제의 핵심 서비스
- 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리
1) 프로세스 관리
- 실행중인 프로그램을 프로세스라고 하며, 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있음
- 여러 프로그램 실행시 조금씩 번갈아 가며 실행됨
- 여러 프로세스가 동시에 실행되는 환경에서는 '프로세스 동기화'가 필수적임
- 프로세스가 더 이상 실행되지 못하는 '교착 상태'를 해결 필요
2) 자원 접근 및 할당
- 운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 필요한 자원을 할당함
2-1) CPU
- 일반적으로 메모리에는 여러 프로세스가 적재, 하나의 CPU는 한번에 하나의 프로세스만 실행 가능
- 운영체제는 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 할당 할지 등 결정 필요
→ CPU 스케쥴링
2-2) 메모리
- 메모리에 적재되는 프로세스들의 주소는 가지각색 → 운영체제에서 프로세스 적재 시 메모리 주소를 결정해야 함
- 메모리 공간이 꽉 차있는 경우, 메모리 공간이 남아 있지만 프로세스를 적재하지 못하는 경우가 있음
2-3) 입출력장치
- 입터럽트 서비스 루틴은 운영체제가 제공하는 기능 → 당연하게도, 입출력장치에서 발생하는 하드웨어 인터럽트도 포함됨
3) 파일 시스템 관리
- 파일시스템은 운영체제가 지원하는 핵심 서비스 중 하나, 데이터를 파일과 디렉터리로 관리
10. 프로세스와 스레드
10.1. 프로세스 개요
10.1.1. 프로세스 직접 확인하기
- 사용자가 볼 수 있는 공간에서 실행되는 프로세스 → 포그라운드 프로세스
- 사용자가 볼 수 없는 공간에서 실행되는 프로세스 → 백그라운드 프로세스
- 백그라운드 프로세스 중, 사용자와 직접 상호 작용할 수 있는 백그라운드 프로세스도 있음
- 백그라운드 프로세스는 유닉스 체계의 운영체제에서 데몬, 윈도우 운영 체제에서는 서비스라고 부름
10.1.2. 프로세스 제어 블록 (PCB)
- 모든 프로세스는 실행을 위해 CPU가 필요하지만, CPU 자원은 한정적
- 순서대로 한정된 시간동안 CPU를 이용 → 제한된 시간이 끝나면 인터럽트가 발생(타이머 인터럽트) → 다음 순서까지 대기
- 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스 CPU를 비롯한 자원을 배분함
▷ 프로세스 제어 블록 (PCB, process control block) 이라고 함
- 프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료 구조임
- PCB는 커널 영역에 생성, 특정 프로세스를 식별하고 해당 프로세스를 처리하는데 필요한 정보를 판단
- 프로세스 생성 시 PCB 생성 → 실행 종료가 되면 PCB 폐기
ex) '새로운 프로세스가 생성되었다' = '운영체제가 PCB를 생성했다'
ex) ' 프로세스가 종료되었다' = '운영체제가 해당 PCB를 폐기했다'
프로세스 ID)
- 프로세스 ID (PID, process ID)는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호임
- 같은 일을 수행하는 프로그램을 두 번 실행하면, PID가 다른 두 개의 프로세스가 생성됨
레지스터 값)
- 프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원
- PCB 안에는 해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값이 저장됨
프로세스 상태)
- 현재 프로세스가 어떤 상태인지도 PCB에 기록되어야 함
- 입출력장치 사용을 위한 대기 상태 여부, CPU 사용을 위한 대기 상태 여부, CPU 이용 상태 여부 등
CPU 스케줄링 정보)
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보가 PCB에 기록
메모리 관리 정보)
- 프로세스마다 메모리에 저장된 위치가 다름 → PCB에 프로세스 주소 정보 필요함
- PCB에 베이스 레지스터, 한계 레지스터 값과 같은 정보들이 저장
- 프로세스 주소를 알기 위한 또다른 중요 정보인 페이지 테이블 정보도 저장
사용할 파일과 입출력장치 목록)
- 프로세스가 실행과정에서 특정 입출력장치나 파일을 사용하면 PCB에 해당 내용이 명시
- 어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일들을 열었는지에 대한 정보들이 PCB에 기록
10.1.3. 문맥 교환
- 중간 정보, 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 문맥이라고 함
- 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있음 (PCB에 기록되는 정보들)
- 인터럽트가 발생하면 운영체제는 해당 프로세스의 PCB에 문맥을 백업 → 다음 실행 프로세스의 문맥을 복구
- 이러한 절차를 문맥 교환이라고 하며, 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리
10.1.4. 프로세스의 메모리 영역 (★ 프로그래밍에 있어 중요한 내용임)
- 프로세스가 생성되면 커널 영역에 PCB가 생성됨
- 사용자 영역에는 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장
코드 영역 = 텍스트 영역)
- 실행할 수 있는 코드, 기계어로 이루어진 명령어가 저장됨
- 코드 영역에는 데이터가 아닌 CPU가 실행할 명령어가 담겨져 있기 때문에 쓰기가 금지 → 코드 영역은 읽기 전용 공간
데이터 영역)
- 잠깐 썼다가 없앨 데이터가 아닌, 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간 → 전역 변수가 대표적
- 전역 변수 : 프로그램이 실행되는 동안 유지, 프로그램 전체에 접근할 수 있는 변수
- 코드 영역과 데이터 영역은 크기가 변하지 않음 → 크기가 고정된 영역 = 정적 할당 영역
- 힙 영역과 스택 영역은 프로그램 실행 과정에서 크기가 변할 수 있는 영역 → 동적 할당 영역
힙 영역)
- 프로그램을 만드는 사용자, 프로그래머가 직접 할당할 수 있는 저장 공간임
- 프로그래밍 과정 중 힙 영역에 메모리 공간을 할당했다면, 반드시 해당 공간을 반환해야 함
- 메모리 공간 반환은 '더 이상 해당 메모리 공간을 사용하지 않겠다' 라고 운영체제에게 알림
- 메모리 공간을 반환하지 않으면 할당된 메모리 공간은 메모리에 계속 남아 메모리 공간 낭비를 초래
▷ 메모리 누수
스택 영역)
- 스택 영역은 데이터를 일시적으로 저장하는 공간
- 데이터 영역에 담기는 값과 달리 잠깐 쓰다가 없어질 값들이 저장되는 공간 → ex) 함수의 실행이 끝나면 사라지는 매개변수
- 일시적으로 저장할 데이터는 스택 영역에 push, 더이상 필요하지 않는 데이터는 pop되어 스택 영역에서 사라짐
- 힙 영역과 스택 영역은 실시간으로 크기가 변할 수 있기 대문에 동적 할당 영역이라고 함
- 일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당
- 일반적으로 스택 영역은 높은 주소에서 낮은 주소로 할당
▷ 그래야만 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당되는 주소가 겹치지 않음
10.2. 프로세스 상태와 계층 구조
10.2.1. 프로세스 상태
- 컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번갈아가며 실행됨 → 하나의 프로세스는 여러 상태를 거치며 실행
- 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리함
- 프로세스의 상태를 표현하는 방식은 운영체제마다 조금씩 차이가 있음
생성 상태)
- 프로세스를 생성 중인 상태를 생성 상태(new)라고 함 → 메모리에 막 적재되어 PCB를 할당 받은 상태
- 생성 상태 이후, 실행할 준비가 완료된 프로세스는 준비 상태가 되어 CPU 할당을 기다림
준비 상태)
- 준비 상태(ready)는 당장 CPU를 할당받아 실행할 수 있지만, 순서를 기다리는 상태임
- 준비 상태에서 순서가 되면 CPU를 할당받아 실행 상태가 됨
실행 상태)
- 실행 상태(running)는 CPU를 할당받아 실행 중인 상태, 할당된 일정 시간 동안만 CPU를 사용할 수 있음
- 할당된 시간을 모두 사용하면(타이머 인터럽트 발생), 다시 준비 상태가 됨
- 입출력장치를 사용하여 입출력장치의 작업이 끝날 때까지 기다려야 한다면, 대기 상태가 됨
대기 상태)
- 프로세스는 실행 도중 입출력장치를 사용하는 경우가 있음
- 입출력 작업은 CPU에 비해 처리 속도가 느림
- 입출력 작업을 요청한 프로세스는 입출력장치가 입출력이 끝날 때까지(입출력 완료 인터럽트 받을 때까지) 기다려야 함
- 입출력장치의 작업을 기다리는 상태를 대기 상태(blocked)라고 하며, 작업이 완료되면 해당 프로세스는 다시 준비 상태
종료 상태)
- 종료 상태(terminated)는 프로세스가 종료된 상태임
- 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리함
프로세스 상태 다이어 그램
준비 상태 | (디스 패치) → |
실행 상태 | ||||
생성 상태 | → | → | 종료 상태 | |||
← (타이머 인터럽트) |
||||||
↑ | ↓ | |||||
← (입출력 완료) |
대기 상태 | ← (입출력 요청) |
10.2.2. 프로세스 계층 구조
- 프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있음
- 부모 프로세스 : 새 프로세스를 생성한 프로세스
- 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
- 부모/자식 프로세스는 각기 다른 PID를 가짐일부 운영체제에서는 자식 프로세스에 PPID (부모 프로세스 PID) 기록
- 실행 과정 중 자식 프로세스에서 다시 자식 프로세스를 생성할 수 있음 = 계층적인 구조
10.2.3. 프로세스 생성 기법
- 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷갈아입기를 통해 실행됨
- 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성
- 만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체
- fork : 자기 자신 프로세스의 복사본을 만드는 시스템 호출, PID 값이나 메모리 위치는 다름
- exec : 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출, 새로운 프로그램 내용으로 전환하여 실행
운영체제 편은 코드와 맞닿아 있는 부분이 많음
10.3. 스레드
- 스레드는 프로세스를 구성하는 실행의 흐름 단위
- 하나의 프로세스는 여러 개의 스레드를 가질 수 있음 → 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있음
10.3.1. 프로세스와 스레드
- 프로세스가 하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행 → 단일 스레드 프로세스
- 스레드 개념의 도입으로, 하나의 프로세스를 구성하는 여러 명령어를 동시에 실행할 수 있게 됨
- 스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값, 레지스터 값, 스택으로 구성됨
- 각자 프로그램 카운터 값을 비롯한 레지스터 값, 스택을 갖고 있기에, 스레드마다 각기 다른 코드를 실행 할 수 있음
- 프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하여 실행됨
- 프로세스 자원을 공유하는게 핵심
10.3.2. 멀티프로세스와 멀티스레드
- 여러 프로세스를 동시에 실행하는 것을 멀티프로세스라 함
- 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라고 함
- 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유함
- 스레드는 같은 프로세스 내에서 동일한 주소 공간의 코드, 데이터, 힙 영역을 공유하고, 열린 파일과 같은 프로세스 자원을 공유
- 프로세스를 병행 실행하는 것보다 메모리, 통신, 협력에 더 효율적임
- 자원을 공유하는 특성의 단점 : 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음
11. CPU 스케줄링
11.1. CPU 스케줄링 개요
- 운영체제가 프로세스들에게 공정하고 합리적인 CPU 자원을 배분하는 것을 CPU 스케줄링이라고 함
11.1.1. 프로세스 우선순위
- 프로세스마다 우선순위가 다르며, 우선순위가 높은 프로세스는 빨리 처리되어야 함
- 프로세스 종류마다 입출력장치를 이용하는 시간과 CPU를 이용하는 시간의 차이가 있음
- 입출력 집중 프로세스 : 입출력 작업이 많은 프로세스
- CPU 집중 프로세스 : CPU 작업이 많은 프로세스
- 입출력 집중 프로세스에서 CPU를 CPU 집중 프로세스와 동일한 빈도로 사용하는 것은 비합리적임
- 이러한 이유로, 모든 프로스세가 CPU를 순서대로 돌아가며 사용하는 것보다 상황에 맞게 CPU를 배분해야 효율적임
- 운영체제는 각 프로세스의 PCB에 우선순위를 명시하고, PCB에 적힌 우선순위를 기준으로 프로세스 처리
11.1.2. 스케줄링 큐
- CPU를 사용할 다음 프로세스를 찾기 위해 운영체제가 모든 프로세스의 PCB를 뒤적거리는 것은 비효율적임
- 운영체제는 메모리로 적재되고 싶은(새로 생성되는) 프로세스들, CPU 자원을 이용하고 싶은 프로세스들에 대해 각각의 큐에 삽입
- 운영체제가 관리하는 대부분의 자원은 큐로 관리됨
- 준비 큐 : CPU를 이용하고 싶은 프로세스들이 서는 줄
- 대기 큐 : 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄
- 운영 체제는 PCB들이 큐에 삽입된 순서대로 프로세스를 하나씩 꺼내어 실행하되, 우선순위가 높은 프로세스를 먼저 실행
11.1.3. 선점형과 비선점형 스케줄링
- 현재 CPU를 사용 중인 프로세스로부터 CPU 자원을 빼앗아 다른 프로세스에 할당할 수도 있고, CPU를 사용 중인 프로세스의 작업이 끝날 때 까지 다른 급한 프로세스를 기다리게 할 수도 있음
- 선점형 스케줄링 : 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식 → 어느 하나의 프로세스가 자원 사용을 독점할 수 없는 스케줄링 방식
- 비선점형 스케줄링 : 하나의 프로세스가 자원을 사용하고 있다면, 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식 → 하나의 프로세스가 자원 사용을 독점할 수 있는 스케줄링 방식
- 현재 대부분의 운영체제는 선점형 스케줄링 방식을 차용함
- 선점형 스케줄링은 더 급한 프로세스가 언제든 끼어들어 사용할 수 있는 스케줄링 방식
장점 : 골고루 자원을 배분
단점 : 문맥 교환과정에서 오버헤드 발생할 수 있음
- 비선점형 스케줄링은 문맥교환 횟수가 상대적으로 적음
장점 : 오버헤드는 적음
단점 : 하나의 프로세스가 자원을 사용 중이라면 당장 자원을 사용해야 하는 상황에서도 무작정 기다려야함, 골고루 자원 사용 X
11.2. CPU 스케줄링 알고리즘
11.2.1. 스케줄링 알고리즘의 종류
1) 선입 선처리 스케줄링
- FCFS (first com fist scheduling), 단순히 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식
- 선입 선처리 스케줄링은 CPU를 먼저 요청한 프로세스부터 CPU를 할당하는 스케줄링 방식
- 가끔 프로세스들이 기다리는 시간이 매우 길어질 수 있는 단점이 발생할 수 도 있음 (호위 효과, convoy effect)
2) 최단 작업 우선 스케줄링
- SJF 스케줄링, 준비된 큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행하는 스케줄링 방식
- 최단 작업 우선 스케줄링은 기본적으로 비선점형 스케줄링 알고리즘으로 분류되지만 선점형으로 구현 가능
3) 라운드 로빈 스케줄링
- 선입 선처리 스케줄링에 타임 슬라이스라는 개념이 더해진 방식
- 타임슬라이스란 각 프로세스가 CPU를 사용할 수 있는 정해진 시간을 의미
- 정해진 타임 슬라이스만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링임
- 타임 슬라이스 크기가 매우 중요
지나치게 크면 : 선입 선처리 스케줄링 처럼 호위 효과가 생길 수 있음
지나치게 작으면 : 문맥 교환에 발생하는 비용이 커, CPU는 프로세스를 처리하는 일보다 프로세스를 전환하는데 올인
4) 최소 잔여 시간 우선 스케줄링
- SRT 스케줄링이라고도 하며, 최단 작업 우선 스케줄링 알고리즘과 라운드 로빈 알고리즘을 합친 스케줄링 방식
- 최단 작업 우선 스케줄링의 경우 작업 시간이 짧은 프로세스부터 처리하는 스케줄링 알고리즘
- 라운드 로빈 알고리즘은 정해진 타임 슬라이스만큼 돌아가며 CPU를 사용하는 선점형 스케줄링 알고리즘
- 최소 잔여 시간 우선 스케줄링 안에서, 프로세스는 정해진 타임 슬라이스 만큼 CPU를 사용하되,
- CPU를 사용할 다음 프로세스로는 남아 있는 작업시간이 가장 적은 프로세스가 선택
5) 우선순위 스케줄링
- 프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘
- 최단 작업 우선 스케줄링, 최소 잔여 시간 우선 스케줄링은 넓은 의미로 우선순위 스케줄링의 일종
- 우선순위 스케줄링은 근본적인 문제가 있음 → 기아 현상
- 우선순위가 높은 프로세스를 우선하여 처리하는 방식이기에 우선순위가 작은 프로세스는 실행이 계속해서 연기될 수 있음
- 기아 현상을 방지하기 위한 방법으로 에이징이 있음
- 에이징은 오랫동안 대기한 프로세스의 우선 순위를 점차 높이는 방식임
6) 다단계 큐 스케줄링
- 우선순위 스케줄링의 발전 형태로, 우선 순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식임
- 우선순위가 가장 높은 큐에 있는 프로세스들을 먼저 처리하고, 다음 우선순위 큐에 있는 프로세스를 처리
- 큐마다 다른 스케줄링 알고리즘을 사용할 수 있음
7) 다단계 피드백 큐 스케줄링
- 다단계 큐 스케줄링의 발전된 형태
- 다단계 큐 스케줄링에서는 프로세스들이 큐 사이를 이동할 수 없기에, 기아 현상이 발생할 수 있음
- 다단계 피드백 큐 스케줄링은 프로세스들이 큐 사이를 이동할 수 있음
- CPU를 오래 사용해야 하는 CPU 집중 프로세스들의 우선순위는 점차 낮아지고,
- CPU를 적게 사용하는 입출력 집중 프로세스들은 우선순위가 높은 큐에서 실행
→ 어떤 프로세스의 CPU 이용 시간이 길면 낮은 우선순위 큐로 이동
→ 어떤 프로세스가 낮은 우선순위 큐에서 너무 오래 기다린다면 높은 우선순위 큐로 이동시킬 수 있음
- 가장 일반적인 CPU 스케줄링 알고리즘
# | 진도 | 기본 숙제(필수) | 추가 숙제(선택) |
4주차 (2/3 ~ 2/9) |
Chapter 09 ~ 11 | p. 304의 확인 문제 1번 풀고 인증하기 | Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기 |
1. 프로세스 상태 다이어그램 채우기
2)준비 상태 | (디스 패치) → |
3)실행 상태 | ||||
1) 생성 상태 | → | → | 4)종료 상태 | |||
← (타이머 인터럽트) |
||||||
↑ | ↓ | |||||
← (입출력 완료) |
5)대기 상태 | ← (입출력 요청) |
2. Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
- 입력한 순서대로 A,B,C,D 순으로 나오게 됨
- 호위 효과가 발생할 수도 있음
'개인공부 > 혼공학습단 13기 - 컴운' 카테고리의 다른 글
혼공학습단 13기- 6주차 (0) | 2025.02.25 |
---|---|
혼공학습단 13기- 5주차 (0) | 2025.02.19 |
혼공학습단 13기- 3주차 (0) | 2025.02.04 |
혼공학습단 13기- 2주차 (0) | 2025.02.04 |
혼공학습단 13기- 1주차 (0) | 2025.01.13 |