[Operating System] 프로세스 & 스레드

olwooz·2023년 1월 23일
0

Operating System

목록 보기
2/10

프로세스 & 스레드

프로세스: 메모리 상에서 실행중인 작업(프로그램), CPU 스케줄링의 대상이 되는 작업
스레드: 프로세스 내 작업의 흐름

- 프로그램이 메모리에 올라가면 프로세스가 됨 (인스턴스화)
- 기본적으로 프로세스마다 최소 1개의 스레드 소유
- 프로세스는 각각 별도의 주소공간 할당

동적 영역 - 스택, 힙
정적 영역 - 데이터 영역 (BSS Segment, Data segment), 코드 영역

스택

- 지역변수, 매개변수, 함수 저장
- 컴파일 시 크기 결정
- 동적인 특징 가짐
- 함수가 함수를 재귀적으로 호출하면서 동적으로 크기 늘어날 수 있음 
  → 힙과 메모리 안 겹치게 사이 공간 비워놓음

- 동적 할당 시 사용
- 런타임 시 크기 결정 (e.g. 벡터같은 동적 배열)
- 동적인 특징 가짐

데이터 영역

- 전역변수, 정적변수 저장
- 프로그램이 종료되면 사라지는 변수가 들어있는 정적인 특징을 갖는 영역
- BSS 영역과 Data 영역으로 나뉨
  - BSS - 초기화되지 않은 변수가 0으로 저장
  - Data - 0이 아닌 다른 값으로 할당된 변수 저장

코드 영역

- 프로그램에 내장된 소스 코드가 들어가는 영역
- 수정 불가능한 기계어로 저장되어 있음
- 정적인 특징 가짐

프로세스 - 자신만의 고유 공간과 자원 할당 받아 사용
스레드 - 다른 스레드와 공간, 자원 공유하며 사용, Stack만 따로 할당받음

PCB (Process Control Block)

- 프로세스에 대한 메타데이터를 저장한 데이터, 프로세스 제어 블록
- 프로세스가 생성되면 운영체제가 해당 PCB 생성
- 프로그램 실행 → 프로세스 생성 → 프로세스 주소 값들에 메모리 할당 
  → 메타데이터들이 PCB에 저장되어 관리
- 프로세스의 중요한 정보를 포함, 일반 사용자가 접근하지 못하게 커널 스택의 가장 앞부분에서 관리

메타데이터

- 데이터에 관한 구조화된 데이터, 데이터를 설명하는 작은 데이터
- 대량의 정보 중 찾는 정보를 효율적으로 찾아내기 위해 일정 규칙에 따라 콘텐츠에 대해 부여되는 데이터

PCB의 구조

- 프로세스 스케줄링 상태: ‘준비’, ‘일시중단’ 프로세스가 CPU에 대한 소유권을 얻은 이후의 프로세스 상태
- 프로세스 ID: 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
- 프로세스 권한: 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
- 프로그램 카운터: 프로세스에서 실행해야 할 다음 명령어의 주소 포인터
- CPU 레지스터: 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
- CPU 스케줄링 정보: CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
- 계정 정보: 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
- I/O 상태 정보: 프로세스에 할당된 I/O 디바이스 목록

Context Switching

- PCB를 교환하는 과정
- 실행중인 프로세스가 대기 상태로 바뀌면서 프로세스 상태가 보관되고,
  다음 순번의 프로세스가 실행되면서 보관된 프로세스 상태를 불러오는 과정
- 프로세스는 독립된 메모리 영역을 할당받아 사용
  → 캐시 메모리 초기화와 같은 무거운 작업 진행 시 오버헤드 발생하는 문제 존재

0개의 댓글