프로세스

Solf·2023년 6월 30일
0

운영체제

목록 보기
7/13

운영체제에서 프로세스는 하나의 작업 단위이다. 프로그램은 실행됨에 따라 메모리에 올라가며 PCB(프로세스 컨트롤 블록)을 할당받아 비로소 프로세스가 된다.

프로세스와 프로그램 사이의 관계

프로세스 = 프로그램 + PCB
프로그램 = 프로세스 - PCB

PCB는 운영체제 영역에 올라가며 프로그램은 사용자 영역으로 들어간다.

프로세스 제어 블록, PCB

이것보다 다양한 정보가 들어가 있으나 대표적인 정보들을 서술한다.
프로세스 구분자(PID): 프로세스를 구분하기 위한 ID
프로그램 카운터: 다음에 실행될 명령의 위치 값
프로세스 우선순위: 해당 프로세스가 가지는 우선순위
각종 레지스터 정보: 프로세스가 실행될 때 사용하던 레지스터, 자신이 계산하던 중간값 등이 저장
메모리 관리 정보: 프로세스가 메모리의 어디있는지 주소, 메모리를 보호를 위해 사용하는 경계 레지스터 값 등이 저장
할당된 자원 정보: 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보
계정 정보: 계정 번호, CPU할당시간, 사용시간등의 정보
부모프로세스 자식프로세스 구분자: PPID(부모프로세스아이디) CPID(자식프로세스아이디)정보가 저장된다.

프로세스의 구조


코드 영역: 프로그램의 본문이 기술된 곳. 읽기전용으로 처리된다 자기 자신을 수정하는 프로그램이 존재하지 않기 때문
데이터 영역: 코드가 실행되면서 사용되는 변수나 각종 데이터를 모아 놓는 곳.
스택 영역: 운영체제가 프로세스를 실행하 위해 부수적으로 필요한 데이터를 모아 놓는 곳. ex 함수 호출 스택
힙 영역: 사용자가 가변적으로 사용하는 메모리 영역

프로세스의 상태


생성상태(create status - new): 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
준비상태(ready status): 프로세스가 CPU를 얻을 때까지 기다리는 상태
실행상태(running status): CPU를 얻어 실제 작업을 수행하는 상태
대기상태(watting status): 실행 상태에서 프로세스가 입출력을 요구하면 입출력 완료까지 기다리는 상태
완료상태(terminate status - exit): 실행 상태의 프로세스가 주어진 시간동안 작업을 마친 상태

Dispatch: 운영체제가 cpu를 할당해주는 과정
time out or Process completed by I/O : 인터럽트를 통해 발생

프로세스의 생성과 복사

fork() : 실행중인 프로세스를 그대로 복사하는 함수 이때 실행되던 프로세스가 부모 프로세스 새로생긴 프로세스가 자식 프로세스가 된다.
exec() : 이미 만들어진 프로세스의 구조를 재활용해 fork와 달리 부분적으로 활용한다.

프로세스의 계층구조

프로세스는 부모 자식 프로세스가 있었기에 계층 구조를 가진다.

이런 계층 구조는 장점이 있다.

  • 여러작업의 동시 처리 : 다수의 사용자가 이용하는 login 프로세스의 경우 fork로 여러 사용자를 동시에 처리할 수 있다.
  • 용이한 자원회수: 프로세스간 부모자식 관계가 생겨 운영체제가 직접 종료된 프로세스의 자원을 회수하는 것이 아니라, 자식프로세스가 작업을 마치면 부모 프로세스가 회수할 수 있다.

고아 프로세스: 자식 프로세스가 종료되기전 부모 프로세스가 먼저 종료된 자식 프로세스
좀비 프로세스: 자식 프로세스가 종료되었는데도 부모가 뒤처리를 하지 않는 경우

C언어의 exit()나 return()문이 프로세스가 작업을 마쳤다고 부모 프로세스에게 알리는 것이다.

profile
CS/Back-End

0개의 댓글