운영체제 : 프로세스

mmmYoung·2023년 5월 5일
0

운영체제

목록 보기
2/10

프로세스

포그라운드 프로세스는 사용자가 볼 수 있는 공간에서 실행되는 프로세스, 백그라운드 프로세스는 사용자가 볼 수 없는 공간에서 실행되는 프로세스이다.
백그라운드 프로세스는 또 직접 사용자와 상호작용이 가능한 지의 여부에 따라 나뉘게 된다.

모든 프로세스는 CPU가 필요하다. 하지만 CPU 자원은 한정적이다.

프로세스들은 돌아가며 한정된 시간만큼 CPU를 이용하게 된다. 이렇게 빠르고 번갈아가며 수행되는 프로세스를 관리하는 자료구조를 PCB라고 한다. PCB에는 프로세스와 관련된 정보들이 저장되는 태그라고 볼 수 있다. PCB는 프로세스 생성 시 커널영역에 생성되고, 종료시 제거된다.

문맥 교환 (context switch)

한 프로세스가 실행되다가, 다른 프로세스로 실행순서가 넘어간다면?
기존에 실행되던 프로세스는 지금까지의 중간 정보(각종 레지스터 값, 메모리 정보, 열었던 파일 등등)를 백업해야한다.
이러한 중간 정보를 문맥이라고 하고, 이러한 문맥을 백업해둔다면 언제든 해당 프로세스의 실행을 재개할 수 있게 된다.
이 과정을 통해 여러 프로세스가 끊임없이 빠르게 번갈아가며 실행될 수 있다.

즉 문맥 교환은 기존의 프로세스 문맥을 백업하고 새 프로세스 실행을 위한 문맥을 복구하는 과정을 의미한다.

PCB는 커널영역인데, 그렇다면 사용자 영역에서는 프로세스가 어떤 식으로 저장될까?

사용자 영역은 크게 코드/데이터/힙/스택 영역으로 이루어져있다.

코드 영역은 실행할 수 있는 코드, 기계어로 이루어진 명령어가 저장된다. 데이터가 아닌 CPU가 실행할 명령어가 담기기 때문에 쓰기가 금지됨(read-only).

데이터 영역은 한번 쓰고 없어질 데이터가 아니라, 전역변수처럼 프로그램이 실행되는 동안 유지할 데이터가 저장된다.

코드 영역과 데이터 영역은 크기가 달라지지 않아 정적 할당 영역이라고도 부른다.

힙 영역은 프로그래머가 직접 할당할 수 있는 저장공간이다. 참고로 힙 영역에 메모리를 할당하게 되면, 언젠가는 이 메모리 공간을 반환해야한다. 반환하지 않으면 메모리 누수가 일어나게 되는데, 이를 프로그래밍 언어가 알아서 자동적으로 해주는 것을 garbage collection이라고 한다.(C언어는 안됨..)

스택 영역은 매개 변수나 지역 변수같은 잠깐 쓰고 마는 데이터들을 일시적으로 저장하는 공간이다.

힙과 스택 영역은 크기가 가변적이라서 동적 할당 영역이라고도 부른다. 서로의 메모리 충돌을 방지하기 위해, 힙은 낮은 주소에서 높은 주소로, 스택은 높은 주소에서 낮은 주소로 할당된다.

프로세스 상태

프로세스는 5가지 상태가 있다.

생성 상태 : 이제 막 메모리에 적재되어 PCB를 할당받은 상태. 준비가 완료되면 준비 상태로 넘어간다.

준비 상태 : CPU를 할당받아 실행할 수 있는 준비가 모두 완료되었지만 차례를 기다리고 있는 상태이다. 자신의 차례가 된다면 실행 상태로 넘어간다.(= 디스패치)

실행 상태 : CPU를 할당받아 실행중인 상태. 할당된 시간을 다 써서 타이머 인터럽트가 발생하면 준비 상태로, 실행 도중 입출력장치를 이용하면 입출력 작업이 끝날 때 까지 대기 상태로 넘어간다.

대기 상태 : 프로세스가 실행 도중 입출력장치를 사용하는 경우이다. 입출력 작업은 CPU에 비하여 느리기 때문에 대기 상태로 접어든다. 입출력 작업이 끝나 입출력 완료 인터럽트가 발생하면 준비 상태로 돌아간다.

종료 상태 : 프로세스가 종료된 상태. PCB가 폐기되고 메모리 영역이 정리된다.

프로세스의 계층 구조

프로세스 실행 도중 시스템 호출을 통해 다른 프로세스가 생성이 가능하다.

새 프로세스를 생성한 프로세스를 부모 프로세스, 부모 프로세스에 의해 새로 생성된 프로세스를 자식 프로세스라고 한다.

부모 프로세스와 자식 프로세스는 별개의 프로세스이므로, 각기 다른 PID를 갖는다. 또한 자식 프로세스는 또 다른 자식 프로세스를 낳을 수 있기 때문에, 계층 구조를 갖는다.

프로세스 생성 기법

부모 프로세스는 어떻게 자식 프로세스를 생성할까? 바로 복제와 옷 갈아입기의 과정을 거친다.

fork 시스템 호출

부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성한다.

exec 시스템 호출

자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.

출처 한빛미디어 혼자 공부하는 컴퓨터 구조+운영체제
profile
안냐세여

0개의 댓글