프로세스와 스레드

운영체제

프로세스

실행 중인 프로그램

실행되기 전까지는 그저 보조 기억장치에 있는 데이터 덩어리일 뿐이지만, 메모리에 적재하고 실행하는 순간 프로세스라 일컬음

PCB(프로세스 제어 블록)

PCB는 커널 영역에 생성 프로세스 생성시 PCB 생성, 프로세스 끝날시 PCB 폐기

PCB에 담기는 정보

프로세스 ID(PID): 특정 프로세스를 식별하기 위해 부여하는 고유한 번호 레지스터 값: 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원 프로세스 상태: 현재 프로세스가 어떤 상태인지 기록 (입출력 장치를 위해 대기 중인지, CPU를 사용하기 위해 기다리는 상태인지 등등) CPU 스케줄링 정보: 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지에 대한 정보 메모리 관리정보: 프로세스가 어떤 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보 사용한 파일과 입출력 장치 목록: 어떤 입출력 장치가 이 프로세스에 할당 되었는지, 어떤 파일을 열었는지 정보들을 기록

문맥교환

하나의 프로세스를 재개하기 위해 기억되어야할 정보를 문맥 이라 한다. (PCB에 명시된 내용을 문맥이라 봐도 무방) 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것을 문맥 교환이라고 한다.

프로세스의 메모리 영역

프로세스가 생성되면 커널영역에 PCB가 생성된다. 그러면 사용자 영역에 프로세스가 배치되는 방식은?

사용자 영역에서 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

코드 영역

실행할수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다. 데이터가 아닌 CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지되어있다. (읽기 전용 공간)

데이터 영역

프로그램을 실행할 동안 유지할 데이터가 저장되는 공간. 전역변수가 대표적이다.

→ 코드영역과 데이터 영역은 크기가 변하지 않는다. 실행하는 동안 바뀌지 않고 실행할동안에만 유지될 데이터이기 떄문에

힙 영역

프로그램을 만드는 사용자가 직접 할당할 수 있는 저장 공간 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반납해야한다.

반환하지 않는다면 메모리 누수가 발생하여 메모리 낭비 초래

스택 영역

데이터를 일시적으로 저장하는 공간이다. 대표적으로 매개변수, 지역변수가 있다.

→ 힙영역과 스택영역은 실시간으로 그 크기가 변할 수 있기 때문에 동적 할당 영역이라 한다. 힙영역은 낮은 주소에서 높은 주소로 할당, 스택영역은 높은 주소에서 낮은 주소로 할당한다.