728x90
반응형
프로세스(Process)
실행중인 프로그램을 나타냄
프로세스의 문맥(Context)
- 프로그램이 무엇을 어떻게 실행했고, 현재 시점에 어떠한 상태인지 나타내기 위한 요소
- CPU의 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 레지스터
- 프로세스의 주소 공간
- code, data, heap, stack
- 프로세스 관련 커널 자료 구조
- PCB(Process Control Block) -> 프로세스가 실행될 때마다 관리하는 구조체 생성(이중 연결 리스트)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- OS가 관리상 사용하는 정보
- 프로세스 ID, 프로세스 상태
- 스케쥴링 정보, 우선순위
- CPU 수행 관련 하드웨어 값
- Program Counter, 레지스터
- 메모리 관련
- code, data, heap, stack의 위치 정보
- 파일 관련
- OS가 관리상 사용하는 정보
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- Kernal stack -> 프로세스별로 스택을 별도로 저장
- PCB(Process Control Block) -> 프로세스가 실행될 때마다 관리하는 구조체 생성(이중 연결 리스트)
프로세스의 상태
프로세스의 상태(State)가 변경되며 수행
- Running
- CPU를 잡고 명령을 수행중인 상태
- Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족한 상태)
- Blocked(wait, sleep)
- CPU를 주어도 명령을 수행할 수 없는 상태
- 프로세스 자신이 요청한 이벤트(ex. I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- 예시 : 디스크에서 file을 읽어와야 하는 경우
- Suspended(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out됨
- 예시 : 사용자가 프로그램을 일시정지 시킨 경우 / 메모리에 너무 많은 프로세스가 있는 경우
- New : 프로세스가 생성중이 상태
- Terminated : 프로세스가 종료중인 상태
— Blocked : 자신이 요청한 event가 만족되면 Ready
— Suspended : 외부에서 resume해줘야 Active
문맥 교환(Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU 수행 방식
- CPU를 내어주는 프로세스의 상태를 커널 스택에 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 커널 스택에서 PCB를 읽어옴
주의사항
- 사용자 프로세스(A)가 시스템 콜이나 인터럽트로 운영체제로 CPU제어권을 넘겨준 뒤,
사용자 프로세스(A)로 돌려받는 것은 문맥 교환이 일어나는 것은 아님(소량) - 보냈을 때와 받을 때의 프로세스가 바뀌어야 문맥 교환이 일어남
Dispatch Latency와 Context Switching
1) Dispatch Latency
- 스케줄러가 선택한 프로세스를 CPU에 할당하는 요소를 Dispatcher라고 함
- Dispatcher가 하나의 프로세스를 중단하고, 다른 프로세스를 실행하기까지 소요하는 시간
2) Context Switching
- 인터럽트로 인해 다음 우선순위의 프로세스가 실행되어야 할 때, 기존의 상태(Context)를 저장하고, 다음 프로세스를 수행할 수 있도록 PCB에 상태(Context)를 적재하는 작업
스케쥴러
한정적인 메모리를 여러 프로세스가 효율적으로 사용할 수 있도록 다음 실행 시간에 실행할 수 있는 프로세스 중에 하나를 선택하는 역할
종류
- 장기 스케줄러(Long-term scheduler) / 잡 스케줄러(Job scheduler)
- degree of multi-programming 제어
- 디스크와 메모리 사이의 스케줄링 담당
- 어떤 프로세스에 메모리를 할당해 Ready queue로 보낼지 결정하는 역할
- time sharing system에는 보통 장기 스케줄러가 없음 (무조건 Ready)
- 단기 스케줄러(Short-term scheduler) / CPU 스케줄러(CPU scheduler)
- 메모리와 CPU 사이의 스케줄링 담당
- 어떤 프로세스를 running 상태로 전환 시킬지 결정하는 역할
- 중기 스케줄러(Mid-term scheduler) / 스와퍼(Swapper)
- degree of multi-programming 제어
- 여유 공간을 마련하기 위해 프로세스를 통째로 메모리에서 디스크로 쫓아내는 역할(swap in/ swap out)
스케쥴링하기 위한 큐
- Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device queue : I/O device의 처리를 기다리는 프로세스의 집합
쓰레드(Thread / Lightweight process)
CPU 내부에서 실질적으로 작업을 수행하는 가장 작은 단위
- 프로세스는 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있음
- Program Counter와 레지스터 집합, stack이 저장돼있음
- 같은 프로세스 내의 쓰레드는 동일한 코드와 전역데이터(메모리 영역)를 공유
- 프로세스의 컨텍스트에서 실행(커널의 스택에 저장됨)
- 데이터 공유가 프로세스보다 효율적임(빠르게 응답할 수 있음)
- 운영체제 입장에서는 작업의 단위는 프로세스지만, 프로세스 입장에서는 쓰레드
- 각각의 프로세스는 다른 프로세스에 영향을 미치지 않지만, 쓰레드는 작업은 다른 쓰레드의 영향을 미칠 수 있음
- CPU가 여러 개일 경우 병렬성을 높일 수 있음
구현방법
- 커널 쓰레드 : 쓰레드가 여러 개가 있다는 것을 운영체제가 알고 있어, 커널이 CPU 스케줄링 하듯이 넘겨줌
- 유저 쓰레드 : 유저 프로그램이 스스로 라이브러리의 지원을 받아 쓰레드를 관리하는 형태(커널은 모름)
- 리얼 타임 쓰레드
+ 가상메모리 내용 추가 작성하기..
+ 동시성, 병렬성
728x90
반응형
'크래프톤 정글 - TIL' 카테고리의 다른 글
크래프톤 정글 5기 TIL - DAY 14(트라이, 플로이드 와샬, 다익스트라) (0) | 2024.04.01 |
---|---|
크래프톤 정글 5기 TIL - Day 13(알고리즘) (0) | 2024.04.01 |
크래프톤 정글 5기 TIL - Day 12(CS:APP (1)) (0) | 2024.03.29 |
크래프톤 정글 5기 TIL - Day 11 (0) | 2024.03.28 |
크래프톤 정글 5기 TIL - Day 10 (0) | 2024.03.28 |