console.log
[CS] 운영체제 본문
1. Process (프로세스)
- 실행 중인 프로그램 (CPU의 할당을 받을 수 있는 것)
- 주소 공간, 파일, 메모리 등을 총칭
- PCB (Process Control Block, 프로세스 제어 블록)
- 프로세스에 대한 중요한 정보 저장
- 프로세스 생성과 동시에 고유한 PCB 생성
- 프로세스가 CPU를 반환하기 전, 작업의 진행 상황을 저장하는 곳
- 저장되는 정보
- 프로세스 식별자 (Process ID, PID)
- 프로세스 상태 (new, readty, running, wating, terminated …)
- 프로그램 카운터 : 다음 실행할 명령어 주소
- CPU 레지스터
- CPU 스케쥴링 정보 : 프로세스 우선순위, 스케쥴 큐에 대한 포인터 …
- 메모리 관리 정보 : 페이지 테이블, 세그먼트 테이블
- 입출력 상태 정보 : 프로세스에 할당된 입출력 장치, 열린 파일 목록
- 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정정보 등
2. Thread (스레드)
- 프로세스의 실행 단위
- 구성
- 스레드 ID
- 프로그램 카운터
- 레지스터 집합
- 스택
- 같은 프로세스에 속한 스레드와 공유하는 것
- 코드
- 데이터 섹션
- 열린 파일
- 신호
- 멀티스레딩이란 ?
- 하나의 스레드를 다수의 실행 단위로 구분해 수행 능력 향상
- 각각의 스레드는 독립적인 작업 수행 → 각자의 스택, PC 레지스터 값 가짐
- 장점
- 메모리 공간, 시스템 자원 소모 절약 → Heap 영역을 통해 데이터 주고받을 수 있음
- 간단한 통신 방법
- 캐시 메모리를 비울 필요가 없어 빠른 context switch 가능
- 응답시간 단축
- 문제점
- 동일한 자원에 동시에 접근할 때 문제가 발생
- 동기화 작업 필요 → 병목 현상 발생하여 성능 저하 가능성 높음
- 멀티 스레드 vs 멀티 프로세스
멀티 스레드 | 멀티 프로세스 |
적은 메모리 공간 | 많은 메모리 공간 |
빠른 문맥 전환 | 느린 문맥 전환 |
동시에 여러 작업 수행 | 동시에 여러 작업 수행 |
하나의 스레드 종료 시 전체 스레드 종료 |
다른 프로세스에 영향을 끼치지 않음 |
동기화 문제 존재 | 동기화 문제 존재하지 않음 |
3. 스케줄러
- 프로세스를 스케줄링 하기 위한 Queue
- Job Queue - 현재 시스템 내의 모든 프로세스
- Ready Queue - 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스
- Device Queue - Device I/O 작업을 대기하는 프로세스
- Queue에 프로세스를 넣고 빼주는 스케줄러
- 장기스케줄러
- 메모리와 디스크 사이의 스케줄링 담당
- 프로세스에 메모리 할당
- 실행중인 프로세스 수 제어
- 프로세스 상태 (new → ready)
- 단기스케줄러
- CPU와 메모리 사이의 스케줄링 담당
- Ready Queue의 어떤 프로세스 running 시킬지 결정
- 프로세스에 CPU 할당
- 프로세스 상태 (ready → running → wating → ready)
- 중기스케줄
- 여유 공간 마련을 위해 모든 프로세스를 메모리에서 디스크로 옮김
- 프로세스에게서 메모리를 할당 해제
- 실행중인 프로세스 수 제어
- 프로세스 상태 (ready → suspended (외부적인 이유로 수행 정지 상태로 메모리에서 내려간 상태))
- 장기스케줄러
4. CPU 스케줄러
- FCFS (First Come First Served)
- 특징
- 먼저 온 순서대로 처리
- 비선점형 스케줄링 (할당되었던 CPU가 반환될 때 까지 기다림)
- 문제점
- 소요시간이 긴 프로세스가 먼저 도착하면 효율이 떨어짐
- 특징
- SJF (Shortest - Job - First)
- 특징
- 소요 시간이 짧은 프로세스에게 먼저 할당
- 비선점형 스케줄링
- 문제점
- 소요 시간이 지나치게 긴 프로세스는 거의 영원히 CPU 할당받을 수 없음 (지나친 차별)
- 특징
- SRTF (Shortest Remaining Time First)
- 특징
- 새로운 프로세스가 도착할 때마다 새로운 스케줄링
- 선점형 스케줄링 (현재 남은 시간보다 짧은 프로세스가 도착하면 CPU 뺏김)
- 문제점
- 매번 스케줄링을 새로 하기 때문에 CPU 사용시간을 측정할 수 없음
- 특징
- Priority Scheduling
- 특징
- 우선순위에 따라 CPU 할당 (수가 작을수록 우선순위 높음)
- 선점형 스케줄링 (더 높은 우선순위 프로세스가 도착하면 그 즉시 CPU 선점)
- 비선점형 스케줄링 (더 높은 우선순위 프로세스가 도착하면 Ready Queue의 Head에 삽입)
- 문제점
- 실행 준비는 됐지만 CPU를 사용 못하는 프로세스 무기한 봉쇄가 이루어질 수 있음
- 해결책
- 우선순위가 낮더라도 오래 기다리면 우선순위 높여주기
- 특징
- Round Robin
- 특징
- 현대적인 CPU 스케줄링
- 모든 프로세스가 동일한 시간 동안 할당됨
- 할당 시간이 지나면 선점 당한 뒤 ready queue 맨 뒤에 삽입
- CPU 사용시간이 랜덤한 프로세스가 섞여있을 경우 용이
- 장점
- 빠른 응답 시간 (대기 시간 감소)
- 공정한 스케줄링
- 주의할 점
- 설정한 할당 시간이 너무 커지면 FCFS와 같아짐
- 설정한 시간이 너무 작아도 overhead 발생
- 즉, 적당한 할당 시간을 설정하는 것이 중요 !
- 특징
'개발공부 > CS' 카테고리의 다른 글
[CS] 자료구조 (2) | 2023.09.29 |
---|---|
[CS] Front-End (0) | 2023.09.23 |
[CS] 네트워크 (1) | 2023.09.22 |
[CS] JavaScript (0) | 2023.09.21 |
[CS] Basic (0) | 2023.09.20 |