[OS] 프로세스 보충 설명

yongkini ·2021년 9월 22일
0

Operating System

목록 보기
3/5

프로세스에 대한 보충 설명

  • 프로세스의 메모리 구조
    : 프로세스는 크게 stack, heap, data, text로 되어있다.

1) 먼저, Stack은 함수가 호출됨과 동시에 생성되며, 함수를 실행하는 동안 쓰이는 지역변수, 매개변수가 저장되는 곳이다. 또한, 함수가 끝남에 따라 반환된다. 이러한 stack은 프로그램이 자동으로 사용하는 메모리 영역이다. 여기서도 stack이 넘치면 stack overflow가 발생한다.
2) 다음으로 Heap은 프로그래머가 동적으로 할당하여 사용하는 메모리 영역으로 동적 메모리 영역이라고 한다. C언어에서는 malloc이라는 함수로 동적 메모리의 사이즈를 지정해준뒤 생성후에 사용할 수 있다(이 때, memory leak을 막기 위해 생성한 다음에 사용하고, 반드시 free함수로 할당해준 메모리를 해제시켜줘야 시스템 메모리 부족현상이 일어나지 않는다. 스택은 따로 해제 과정이 필요없으나 heap은 필요함!).
3) 세 번째로, data가 있는데, data는 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환되며, 전역변수, 정적변수, 배열, 구조체 등이 저장된다. Data 영역은 다시 BSS(Block Stated Symbol) 영역과 Data(GVAR) 영역으로 나누어지는데, 초기화된 데이터는 Data 영역에 저장되고(ROM), 초기화되지 않은 데이터는 BSS 영역에 저장된다(RAM). 이유는 초기화된 데이터와 초기화되지 않은 데이터를 둘다 ROM에 넣으면 큰 사이즈의 ROM이 필요해지기 때문이다.
4) 마지막으로 Text(Code)는 실행 명령을 포함하는 코드들이 들어가는 부분이다. 프로그램을 시작 할 때 컴파일한 프로그램(기계어)이 저장되어 있고, 읽기 전용 영역이기에 프로세스가 함부로 변경 할 수 없고 변경 시 오류를 발생시킨다.

  • 프로세스의 상태
    1) new(프로세스 생성중) : 프로세스를 생성하고 있는 단계로 커널 공간에 PCB가 만들어진 상태
    2) ready(프로세스가 CPU를 기다리는 상태) : 프로세스가 메모리에 적재된 상태로 실행하는데 필요한 자원을 모두 얻은 상태. 아직 CPU를 받지는 않았지만 CPU를 할당 받으면 바로 실행 가능한 상태. ready상태를 가지는 여러개의 프로세스들이 존재할 수 있음
    3) running : 프로세스가 CPU를 할당받아서 실제로 실행중인 상태
    4) blocked : 프로세스가 CPU를 할당받아도 실행할 수 없는 상태로 현재 I/O 작업 등을 처리중임을 알리는 상태. I/O 작업중에는 CPU를 점유하고 있어도 다음 작업을 할 수 없으므로, CPU를 가지고 있어도 낭비임. 그래서 반납하는 것.
    5) terminated : 프로세스의 실행이 완료되고, CPU를 반납한 상태. PCB은 남아있음.
    6) suspended : 특정한 이유로 프로세스 실행이 정지된 상태로, 메모리를 강제로 빼앗긴 상태임. 임의로 외부에서 다시 재개시키지 않는 이상 다시 활성화될 수 없는 상태임.
    ** suspended vs blocked
    blocked 상태는 I/O 처리 과정이 끝나면 자동으로 ready 상태로 돌아와서 CPU가 다시 돌아오길 기다리지만, suspended는 임의로 외부에서 재개시키지 않는이상 자동으로 활성화되지 않음.
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글