프로세스의 5가지 상태
1. 생성 (New)
- 프로세스가 생성된 상태지만, 운영체제에 의해 수행 가능한 프로세스 풀로 진입이 아직 허용되지 않은 프로세스
- 메모리 공간 할당, 프로세스 제어 블록(PCB) 생성 등 다양한 초기화 작업이 이루어짐
2. 준비 (Ready)
- CPU 를 사용할 수 있는 기회가 주어지면 수행할 준비가 되어있는 프로세스
- 준비 상태의 프로세스는 준비 큐(Ready Queue)에서 대기하며, 스케줄러가 프로세스를 선택하여 CPU 를 할당할 때까지 기다림
3. 실행 (Running)
- 현재 CPU를 사용하여 실행 중인 프로세스
- 프로세스의 명령어가 순차적으로 실행되며, 운영체제는 프로세스의 수행 상태를 지속적로 모니터링 함
4. 대기 (Blocked)
- 특정 이벤트(I/O 작업 완료 등)가 발생할 때까지 수행될 수 없는 프로세스
- 프로세스는 블록 큐(Block Queue)에 들어가며, 이벤트가 발생하여 입출력 작업이 완료되면 다시 준비 상태로 전환되며, 이 상태에서는 CPU를 사용하지 않으며, 자원을 효율적으로 관리하기 위해 필요한 상태
5. 완료 (Exit)
- 프로세스 수행이 중지되거나, 어떤 이유로 중단되었기 때문에 프로세스 풀에서 방출된 프로세스
- 프로세스가 정상적으로 실행을 완료했거나, 오류 또는 강제 종료로 인해 실행이 중지된 상태로, 운영체제가 프로세스의 자원을 해제하고 프로세스 제어 블록을 삭제함
프로그램의 실행
프로세스 : 실행되고 있는 프로그램
프로그램의 실행 :
- 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미
- 프로그램이 CPU를 할당받고 명령을 실행하고 있는 상태
파일 시스템에 있는 실행 파일이 메모리에 적재될 때, 실행파일 전체가 메모리에 올라가지 않는다. 일부분만 메모리에 올라가고, 나머지는 디스크의 특정 영역인 스왑 영역에 존재한다.
프로세스의 메모리 영역
프로세스 주소 공간은 code(text), data, heap, stack 영역으로 구성되어 있다.
이러한 주소 공간을 우리는 가상 메모리 (또는 논리적 메모리)라고 부른다.
Code 영역
실행할 프로그램의 코드가 저장된다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 된다.
Data 영역
전역 변수 또는 Static 변수 등 프로그램이 사용하는 데이터를 저장하는 공간
전역 변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 바뀐다.
Stack 영역
호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간
Heap 영역
프로그래머가 필요할 때마다 사용하는 메모리 영역
heap 영역은 런타임에 결정되며 자바에서는 객체가 heap 영역에 생성되고 GC 에 의해 정리된다.
문맥 교환(Context Switching)이란?
CPU 가 현재 작업 중인 프로세스에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스의 상태를 저장하고, 새 프로세스의 저장된 상태를 다시 적재하는 작업
언제 발생하는가?
- 멀티태스킹
- 인터럽트 핸들링
- 사용자 모드와 커널 모드 간의 전환
멀티태스킹
- 실행 가능한 프로세스들이 운영체제의 스케줄러에 의해 조금씩 번갈아가며 수행되는 것
- 번갈아가며 프로세스가 CPU를 할당받는데, 이때 context switching 한다.
인터럽트 핸들링
- 컴퓨터 시스템에서 예외 상황이 발생했을 때 CPU에게 알려 처리할 수 있도록 하는 것
사용자가 커널 모드 전환
- 사용자 모드와 커널 모드 사이의 전환이 필요할 때 운영체제에 따라 문맥 교환 발생(필수x)
'Web > TIL' 카테고리의 다른 글
[OS_01] OS란 무엇이며, 핵심 기능은? (1) | 2024.10.27 |
---|---|
Redis와 캐시의 이해 (0) | 2024.08.18 |
[Spring] 스프링부트와 스프링, War 와 Jar의 차이 (0) | 2024.08.13 |
캐시 무효화와 캐시 무효화 전략 (1) | 2024.08.11 |
캐시와 설계 시스템 전략 (0) | 2024.08.11 |