프로세스
- 실행중인 프로그램
- 프로그램 vs 프로세스
- 프로그램
- 명령어 리스트를 내용으로 가진 디스크에 저장된 파일 (실행 파일)
- passive entity (수동적 엔티티)
- 프로세스
- 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원 집합
- active entity (능동적 엔티티)
- 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨
- 포그라운드 프로세스
- 사용자가 볼 수 있는 공간에서 실행
- 백그라운드 프로세스
- 사용자가 보이지 않는 공간에서 실행
- 데몬 (UNIX 계열), 서비스 (윈도우)
- 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스
- 구조
- 코드 영역 (텍스트 영역)
- 실행 코드
- 기계어로 이루어진 명령어 저장
- 읽기 전용
- CPU가 실행할 명령어가 담겨 있어 쓰기가 금지
- 정적 할당 영역
- 크키가 고정된 영역
- 데이터 영역
- 전역 변수
- 프로그램이 실행되는 동안 유지되며, 프로그램 전체에서 접근할 수 있는 변수
- 정적 할당 영역
- 크키가 고정된 영역
- 힙 영역
- 프로그래머가 직접 할당하는 영역
- 프로그램 실행 중에 동적으로 할당하는 메모리
- 메모리 누수
- 할당한 메모리 공간을 반환하지 않아 메모리 내에 계속 남아 낭비를 초래한 상태
- 동적 할당 영역
- 실시간으로 크기가 변화
- 스택 영역
- 데이터를 일시적으로 저장하는 공간
- 함수를 호출할 때 임시 데이터 저장 장소
- 함수 매개변수, 복귀 주소 및 지역 변수
- 동적 할당 영역
- 실시간으로 크기가 변화
- 힙 - 스택 영역 관계 성
- 힙 영역은 메모리의 낮은 주소에서 높은 주소, 스택은 메모리의 높은 주소에서 낮은 주소로 할당됨
- 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당할 주소가 겹치는 일을 최소화
- C에서의 메모리 배치
PCB (Process Control Block)
- 프로세스와 관련된 정보를 저장하는 자료 구조
- 운영체제가 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 분배하기 위해 이용
- 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장
- 약간의 회계 데이터와 함께 프로세스를 시작시키거나 다시 시작시키는 데 필요한 모든 데이터를 위한 저장소의 역할
- 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기
- 인터럽트등의 신호를 만나면 대기 상태에 들어갔다가 다시 실행
- 커널 영역에 생성
- 구성
- 프로그램 카운터
- 이 프로세스가 다음에 실행할 명령어의 주소를 가리킴
- PID
- 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
- CPU 레지스터
- 누산기, 인덱스 레지스터, 스택 레지스터, 범용 레지스터들과 상태 코드 정보가 포함
- 상태 코드
- 현재 프로세스의 상태가 생성, 준비, 실행, 대시, 종료 중 어떤 상태인지 표시
- CPU 스케줄링 정보
- 프로세스 우선순위, 스케줄 큐에 대한 포이터와 다른 스케줄 매개변수를 포함
- 메모리 관리 정보
- 메모리 시스템에 따라 베이스 레지스터와 한계 레지스터의 값 저장
- 메모리 시스템에 따라 페이지 테이블이나 세그먼트 테이블을 저장
- 회계 정보
- CPU 사용 시간과 경과된 시간, 시간 제한, 계정 번호 등을 포함
- 입출력 상태 정보
- 프로세스에 할당된 입출력 장치들과 열린 파일등의 목록이 명시
프로세스의 상태
- 생성 상태
- 프로세스가 메모리에 올라와 운영체제로부터 PCB를 할당 받은 상태
- 바로 실행하지 않고 준비 상태에서 자기 순서를 기다리며, PCB도 같이 준비상태로 옮겨짐
- 준비 상태
- 생성된 프로세스가 CPU를 얻을 떄까지 기다리는 상태
- 실행 대기 중인 모든 프로세스가 자기 순서를 기다림
- CPU 스케줄러가 몇 개의 큐를 운영할지, 어떤 프로세스의 PCB를 실행 상태로 보낼지 결정
- CPU 스케줄러가 dispatch(PID 사용)로 PCB를 선택하면 해당 PCB가 실행 상태로 변경
- 실행 상태
- 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
- 타임슬라이스 동안만 작업 가능
- 시간 만료시 timeout(PID 사용)을 실행
- 준비 상태로 바뀜
- 실행 상태 동안 작업 완료시 exit(PID 사용)을 실행
- 프로세스 정상 종료
- 실행 상태의 프로세스가 입출력 요청시 CPU가 입출력관리자 에게 입출력 요청시 block(PID 사용) 실행
- block상태 진입하면 다른 작업은 진행이 불가능
- 대기 상태로 옮기고 다른 작업 진행 가능
- 대기 상태
- 실행 상테에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
- 대기 상태의 프로세스는 입출력장치 별로 마련된 큐에서 기다리다가 완료되면 인터럽트 발생
- 인터럽트 발생 시 대기상태에서 해당 인터럽트로 꺠어날 프로세스를 찾음
- wakeup(PID 사용)이라고 함
- wakeup으로 해당 프로세스의 PCB가 준비 상태로 이동
- 종료 상태
- 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 종료하는 상태
- 프로세스 제어 블록이 사라
- 정상 종료
- exit()으로 처리
- 비정상적인 종료 발생
- 디버깅을 위해 종료 직전의 메모리 상태를 저장장치로 옮김
- 비정상적인 종료 발생시 처리하는 과정을 코어덤프라고 함
- 코어덤프
- 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록한 것
'CS > OS' 카테고리의 다른 글
프로세스 동기화 [혼공컴구] (0) | 2024.01.18 |
---|---|
스케줄링 알고리즘 [혼공컴구] (1) | 2023.12.22 |
프로세스와 스레드 [혼공컴운] (0) | 2023.12.15 |
프로세스 계층 구조 & 생성 기법 [혼공컴운] (0) | 2023.12.15 |
문맥 교환 [혼공컴운] (0) | 2023.12.14 |