프로세스는 디스크에 존재하는 프로그램 파일이 주기억장치(메모리)에 적재되어 CPU에 의해 실행과정에 있는 상태를 말한다.
즉, CPU에 의해 현재 실행되고 있는 프로그램을 프로세스라고 한다.
각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하기 위해서는 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (커널이 제공하는 파이프, 파일, 소켓 등을 이용한 통신)
프로세스에 대한 자료 블록 또는 레코드
PID(프로세스 고유 번호), 상태(준비, 대기 실행 등), 포인터(다음 실행될 프로세스의 포인터), Register save area(레지스터 관련 번호), Priority(스케줄링 및 프로세스 우선순위), 할당된 자원 정보, Account(CPU 사용시간), 입출력 상태 정보
프로세스는 시스템으로부터 메모리 공간을 할당받는데 이 메모리는 Code, Data, Stack, Heap 영역으로 구성되어있다.
실행할 프로그램의 코드가 저장되는 영역 (CPU가 실행할 수 있는 기계어 명령 형태로 변환되어 저장됨)
전역변수와 정적변수가 저장되는 영역 (프로그램이 실행될 때 할당되어 프로그램 종료 시 소멸됨)
지역변수, 매개변수, 리턴값 등 잠시 사용된 후 사라지는 데이터와 함수 수행을 마치고 돌아갈 주소 가 임시로 저장되는 영역
(함수 호출 시 할당되고 함수가 종료되면 소멸, 로드 시점(컴파일)에 크기가 결정됨, 재귀함수가 반복해서 호출되거나 함수가 지역변수를 매우 많이 가지고 있을 경우 메모리가 초과하여 stack overflow가 발생할 가능성이 있음)
필요에 의해 메모리를 동적으로 할당할 때 사용하는 동적 메모리 영역, 메모리 주소 값에 의해서만 참조되고 사용되는 영역
따라서, 프로그램 실행 시점(런타임)에 크기가 결정됨
(자바에서는 객체가 heap 영역에 생성되고 GC에 의해 정리됨)
사실 stack과 heap 영역은 같은 공간을 고유하는데 heap은 메모리의 낮은 주소부터 할당되고 stack은 높은 주소부터 할당된다. 각 영역이 상대 영역을 침범하면 heap overflow, stackoverflow가 발생한다.
프로세스를 생성하기 위해 프로그램이 보조기억장치에 있는 상태 (커널 공간에 PCB가 만들어진 상태)
프로그램이 메인 메모리에 적재되어 프로세스가 된 상태 (프로그램을 실행하는데 필요한 자원을 모두 얻은 상태)
CPU 자원을 할당받기 위해 대기하는 상태로, 준비 상태에 있는 프로세스들은 큐에서 대기
CPU에 의해 실행되고 있는 상태
프로세스가 입출력 완료, 시그널 수신 등 어떤 사건(event)을 기다리고 있는 상태
프로세스가 완전히 종료된 상태
프로세스 생성이 가능하여 승인받는 과정
준비 상태의 여러 프로세스 중 한 프로세스를 선정하여 CPU에 할당하는 과정
할당된 CPU 시간이 지나면 Timeout Interrupt가 발생하여 CPU를 다른 프로세스에게 양도하고 자신은 ready 상태로 전이되는 과정
예외, 입출력, 이벤트 등이 발생하여 현재 실행중인 프로세스를 ready 상태로 바꾸고, 해당 작업을 먼저 처리하는 것
필요한 자원이 할당되면 프로세스는 waiting에서 ready 상태로 전이되는 과정
운영체제는 계층 프로세스를 관리하기 위해 6가지 작업 수행
여러 개의 프로세스가 같은 프로그램을 사용할 경우, code 영역은 공유하고 나머지 영역은 프로세스마다 개별적으로 할당
CPU가 이전 프로세스의 상태를 해당 프로세스의 PCB에 보관하고 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정
Context switching(문맥 교환)에 대해 간략히 설명하고, Context switching이 필요한 이유를 말해주세요.
Context switching이란 CPU가 현재 실행하고 있는 프로세스에 대한 정보를 프로세스의 PCB에 저장하고, CPU 제어권을 할당받을 다음 프로세스의 정보를 해당 프로세스의 PCB에서 읽어와 레지스터에 저장하는 과정입니다. 만약 인터럽트나 입출력 이벤트로 인해 CPU가 멈추어 가만히 있다면 CPU의 유휴 시간(작동하지 않는 시간)이 길어져 자원의 낭비를 초래하기 때문에 문맥교환의 overhead를 감수하더라도 다른 프로세스를 실행하는 것이 낫기 때문에 문맥 교환이 필요합니다.
프로세스 생성 과정에 대해 간단하게 설명하세요.
프로세스 생성을 위해 새로운 프로세스의 식별자를 할당합니다. 그리고 메모리(주소 공간)와 PCB를 할당하고, PCB를 초기화 합니다. 생성된 프로세스는 Ready(준비) 상태가 되어 해당 큐의 마지막 순서에서 대기 합니다.