wdwd
프로세스, 스레드 본문
Process와 Thread
▶프로세스(Process) : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- 동적인 개념으로는 실행된 프로그램을 의미
- 특징
- 프로세스는 실행될 때 운영체제로부터 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받음
- 각 프로세스는 별도의 주소 공간에서 실행되며 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC, Inter-Process Communication)을 사용해야 함. ex) 파이프, 파일, 소켓
- 프로세스 상태
▶쓰레드(Thread) : 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 프로세스의 특정한 수행 경로
- 특징
- 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내에서 각각 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유함
- 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행됨
PC
▶PC(프로그램 카운터)
프로세서 내부에 있는 레지스터 중의 하나
다음에 실행될 명렁어의 주소를 가지고 있기 때문에 명렁어 포인터라고도 함
PCB
▶PCB(Process Control Block, 프로세스 제어 블록)
: 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체
- 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스
- 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거
- 저장되는 정보
- 프로세스의 현재 상태 : 준비, 대기, 실행 등의 프로세스 상태
- 포인터 : 부모/자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리에 대한 포인터, 할당된 자원에 대한 포인터
- 프로세스 고유 식별자 : 프로세스를 구분할 수 있는 고유의 번호
- 스케줄링 및 프로세스의 우선순위 : 스케줄링 정보 및 프로세스가 실행될 우선순위
- CPU 레지스터 정보
- 주기억장치 관리 정보
- 입, 출력 상태 정보
- 계정 정보
▶레지스터
CPU(Central Processing Unit)가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치
<메모리>
▶동적적재, 동적연결 비교
▶메모리 최적화 방식 : Compaction, Swapping
▶내부 단편화
메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비 되는 현상
▶외부 단편화
중간중간에 생긴 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황
▶Paging
- 페이징은 프로세스와 메모리 공간을 각각 일정 크기인 페이지와 프레임으로 잘라서 프로세스를 메모리에 적재하는 방식
- 페이징 기법을 사용하면 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제를 해결할 수 있음
- 페이지 단위를 작게하면 내부 단편화 문제도 해결할 수 있겠지만 대신 page mapping 과정이 많아지므로 오히려 효율이 떨어질 수 있음
▶Segmentation
- 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환
- 세그먼트들의 크기가 다르기 때문에 미리 분할해 둘 수 없고 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
- 프로세스가 필요한 메모리 만큼 할당해주기 때문에 내부단편화는 일어나지 않으나 여전히 중간에 프로세스가 메모리를 해제하면 생기는 구멍, 즉 외부 단편화 문제는 여전히 존재한다.