▶ Process
- Process란?
- 실행 중인 프로그램을 말한다.
- 프로그램이 메모리에 적재하고 실행되는 순간 프로세스가 된다.
① 실행 가능한 파일이 메모리에 올라가면 프로세스가 된다.
② 해당 방향으로 동적 증가
③ 힙 영역과 스택 영역의 크기는 가변적이다. (동적 할당 영역)
💡힙 영역: 낮은 주소 -> 높은 주소
💡스택 영역: 높은 주소 -> 낮은 주소
- stack
- 데이터를 일시적으로 저장
- ex) 함수 매개변수, 지역변수, 반환주소 등
- heap
- 프로그래머가 직접 할당할 수 있는 저장공간 (메모리 동적 할당 가능)
- 메모리로 할당했다면 반환해야 함. 반환하지 않는다면 메모리 누수가 발생하기 때문
- ex) 모든 자바 객체 (new 연산자로 생성), C의 Malloc()
- data
- 프로그램이 실행되는 동안 유지할 데이터 저장
- ex) 전역변수
- text (code)
- 실행할 수 있는 코드, 기계어로 이뤄진 명령어가 저장
- 읽기 전용 공간
▷ Process state⭐
① new ( 생성 ) : 프로세스가 메모리에 적재되어 이제 막 PCB를 할당받은 상태
② ready ( 준비 ) : 실행 상태로 갈 수 있는 유일한 상태, CPU를 할당 받기를 기다림
③ running ( 실행 ) : 프로세스가 CPU를 할당받아 실행중인 상태
- 타이머 인터럽트 발생시(할당된 시간 모두 사용시) -> ready 상태
- 실행 도중 I/O 작업이나 이벤트 발생시, 기다림 -> waiting 상태
④ waiting ( 대기 ) : I/O 작업이나 Event가 발생할 때까지 대기하는 상태
⑤ terminated ( 종료 ) : 프로세스가 종료된 상태, PCB와 메모리 영역 정리
▶ ready queue
메인 메모리에서 running 상태로 가기 위해 기다리는 큐를 말한다.
- 프로세스는 끝으로 들어온다.
- 다음으로 실행할 확률이 가장 높은 프로세스는 head에 존재한다.
- 프로세스가 실행이 끝나면 ready로 이동한다.
- 연결 리스트 구조를 갖는다. (PCB의 포인터만 바꿔주면 되기 때문임)
그 외에도 스케줄링 큐에는 Job Queue, Device Queue 가 있다.
▷ Queueing diagram
- Queueing diagram을 살펴보자!
① 새로운 프로세스는 초기에 ready queue에 놓인다.
실행을 위해 선택(dispatch) 될 때까지 ready queue에서 기다린다.
② 프로세스가 위 4개(I/O요청, 할당시간 만료...)에 대한 이벤트 처리를 끝내면 다시 ready queue로 돌아온다. -> PCB 반납
▶ Process scheduler
- Process scheduler란?
- ready 상태인 여러 프로세스 중에서 다음 실행할 프로세스를 선택하고 CPU에 할당하는 것을 말한다.
- 이러한 할당 과정을 dispatch라고 한다.
▷ PCB
- PCB(Process Control Block)란?
- OS는 프로세스의 상태를 PCB에 기록해 관리한다.
- PCB는 프로세스의 정보를 담고 있는 자료 구조이다.
- 빠르게 번갈아 수행되는 프로세스들을 관리해준다.
- 프로세스 생성 시 커널 영역에 생성, 종료시 폐기된다.
① 프로세스 P₀ 실행
② 인터럽트 or 시스템 콜 발생시 P₀ 정보 PCB에 저장
③ PCB₁에 저장된 P₁정보 로드
④ 프로세스 P₁실행
▶ Context Switching
- Context (문맥)
- 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 말한다.
- 하나의 프로세스 문맥은 해당 프로세스 PCB에 표현되어 있다.
- Context Switching (문맥 교환)
- Context Switching(문맥 교환)은 프로세스의 상태 정보를 교환하는 작업을 말한다.
- 즉, CPU가 다른 프로세스로 전환하기 위해 현재의 프로세스의 문맥을 PCB에 저장(백업)한 후, 전환하려고 하는 새로운 프로세스의 문맥을 PCB로부터 로딩하는 과정을 말한다.
- 문맥교환 오버헤드
- 문맥교환이 수행되는 동안 idle 상태에 빠지는 것을 말한다.
- 문맥 교환 동안은 일을 안 하는 것과 같다.
▷Context Switching 원리
- 문맥 교환은 H/W를 통해 수행된다.
- 왜냐하면, S/W보다 H/W가 더 빠르기 때문이다.
- ⭐ 문맥 교환은 현행 레지스터 집합에 대한 포인터를 변경한다.
- 문맥 교환 덕분에 여러 프로세스가 끊임없이 빠르게 번갈아가며 실행될 수 있다. (멀티 프로그래밍 효과)
📎참조
- 성결대학교 강영명 교수님 운영체제 (2023)
- 혼자 공부하는 컴퓨터구조 + 운영체제 - 한빛 미디어