🖥️ 프로세스 개요 🖥️
포그라운드 프로세스(foreground process)
- 사용자가 볼 수 있는 공간에서 실행되는 프로세스(게임, 워드 등)
백그라운드 프로세스(background process)
- 사용자가 볼 수 없는 공간에서 실행되는 프로세스
1. 사용자와 직접 상호작용이 가능한 백그라운드 프로세스
2. 사용자와 상호작용하지 않고 정해진 일만 수행하는 프로세스 -> (데몬_daemon, 서비스 라고 부름)
프로세스 제어 블록
- 모든 프로세스는 실행을 위해 CPU가 필요하다. 하지만 CPU의 자원은 한정되어 있다!
위와 같이 프로세스들은 빠르게 번갈아가며 수행된다.
이를 위해 사용되는 자료구조가 '프로세스 제어 블록' (Process Control Block PCB)
- 프로세스 관련 정보를 저장하는 자료 구조(저장 형태)
- 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기됨.
프로세스 ID(PID)
- 특정 프로세스를 식별하기 위해 부여하는 고유 번호
레지스터 값
- 프로세스는 CPU의 레지스터를 이용함.
-> 타이머 인터럽트가 발생했을 때 자기가 작업하던 내용을 알고 있어야 함. 그래야 다시 차례가 왔을 때 실행 재개 가능하기 때문.
- 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원함. 그리고 실행을 재개함.
프로그램 카운터, 스택 포인터 등..
프로세스 상태
- 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태, CPU 이용 중인 상태 등.. 여러 상태값들이 저장됨.
CPU 스케줄링 정보
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
메모리 정보
- 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
- 페이지 테이블 정보 (메모리 주소를 알 수 있는 정보)
사용한 파일과 입출력장치 정보
- 할당된 입출력장치, 사용 중인(열린) 파일 정보
문맥 교환 (Context Switch)
- 한 프로세스(A)에서 다른 프로세스(B)로 실행 순서가 넘어가면 어떤 작업이 이루어질까?
기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업한다.
- 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력 장치 등
- 이런 중간 정보를 바로 문맥이라고 한다. (Context)
- 다음 차례가 돌아왔을 때 실행을 재개하기 위한 정보가 문맥인 것.
"실행 문맥을 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다."
프로세스 A의 문맥 백업이 완료되면, 뒤이어 실행할 프로세스 B의 문맥을 복구한다. -> Context Switch
PCB는 아래와 같이 커널 영역에 적재되어 있다.
그렇다면 사용자 영역에는 어떻게 저장되어 있을까?
그 유명한 코데힙스..
코드 영역(텍스트 영역)
- 실행할 수 있는 코드, 기계어로 이루어진 명령어를 저장함.
- 데이터가 아닌, CPU가 실행할 명령어가 담김. read-only로 쓰기가 금지된 영역
데이터 영역
- 잠깐 쓰고 사라지는 데이터가 아니라, 프로그램이 실행되는 동안 유지할 데이터를 저장
ex. 전역 변수, static
코드, 데이터 영역은 크기가 고정되어 있기 때문에 '정적 할당 영역'이라고도 함. Static
힙
- 개발자가 직접 할당할 수 있는 저장공간
ex. 클래스, 클로저.
메모리 누수를 방지하기 위해 사용이 끝나면 해제시켜줘야함. (ex. 가비지 컬랙션, ARC)
스택
- 데이터가 일시적으로 저장되는 공간
- 잠깐 쓰고 사라지는 값들이 저장됨.
ex. 매개변수, 지역변수, 함수 실행 등
힙과 스택 영역은 프로그램이 실행되는 과정에서 동적으로 크기가 변할 수 있음. '동적 할당 영역' Dynamic
학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl
'Computer Science > 운영체제' 카테고리의 다른 글
5. CPU 스케줄링 (0) | 2023.08.29 |
---|---|
4. 스레드 (0) | 2023.08.29 |
3. 프로세스 상태와 계층 구조 (0) | 2023.08.28 |
1. 운영체제 intro (0) | 2023.08.27 |
0. 운영체제를 왜 공부해야 하는가 🤔 iOS (0) | 2023.07.02 |