CS) 프로세스

Havi·2021년 7월 4일
0

CS

목록 보기
8/13

프로세스란?

프로세스란 실행 중인 프로그램을 의미한다.
프로그램이란 보조 기억 장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어와 코드의 집합이다.

프로그램이 메모리에 적재되어 생명주기를 가진다면 프로세스가 된다.

하나의 CPU(프로세서)는 한 순간에 하나의 프로세스만 실행할 수 있다. 프로세스가 동시에 여러 개가 실행될 수 있는 이유는 운영체제가 CPU가 어떤 프로세스를 실행할 지 판단해 계속 교체하고 있기 때문이다. 이를 시분할 방식이라고 한다.

프로세스의 구성

프로세스에 대한 정보는 프로세스 제어 블록(PCB)에 저장되며 다음과 같은 정보를 담고있다.

  1. PID
    • 프로세스 식별 번호(Process Identification)
  2. 프로세스 상태
    • CPU는 빠르게 프로세스를 교체하기 때문에 실행중인 프로세스와 대기중인 프로세스가 있다. 따라서 해당 프로세스들의 정보를 저장한다.
  3. 프로그램 카운터
    • CPU가 다음으로 실행할 명령어를 가리키는 값. 프로세스가 다음으로 실행할 기계어를 저장된 메모리 주소를 가리킴.
  4. 스케줄링 우선순위
    • 어떤 프로세스가 먼저 실행될지 순서를 결정.
  5. 권한
    • 프로세스가 어떤 자원에 접근할 수 있는지 결정하는 정보. ex) 앱이 실행됐을 때 사진첩에 접근할 수 있는지 등
  6. 부모 프로세스와 자식 프로세스
    • 프로세스는 계층관계로 형성된다. 따라서 각 계층의 부모 자식 정보를 가지고 있는다.
  7. 프로세스의 데이터와 명령어가 있는 메모리 위치를 가리키는 포인터
    • 아래에 설명
  8. 프로세스에 할당된 자원들을 가리키는 포인터
  9. 실행문맥
    • 마지막으로 실행한 프로세서의 레지스터 내용을 담고있다.

프로세스가 접근할 수 있는 메모리 공간

프로세스의 데이터와 명령어가 있는 메모리 공간은 다음과 같이 구성되어있다.

Stack 영역

프로그램이 자동으로 사용하는 메모리 영역으로 함수 호출과 관계되는 지역변수와 매개변수가 저장된다. 함수 호출 시 생성되며, 함수가 끝나면 반환된다. stack 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드될 때 stack 사이즈가 고정되어 있어 런타임 시 stack 사이즈를 바꿀 수 없다. 명령 실행 시 자동으로 증가 또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.

Heap 영역

필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라고 부른다. C 에서 malloc() calloc() 등의 함수를 사용하여 메모리 크기를 할당할 수 있으며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

unused memory

위의 stack과 heap영역은 사실 같은 공간을 공유한다. heap이 메모리의 낮은 주소부터 할당되면 stack은 높은 주소부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 stack overflow, heap overflow 라고 한다.

Data 영역(BSS, GVAR)

프로그램이 실행될 때 생성되고, 프로그램이 종료되면 시스템에 반환되는 전역 변수, 정적 변수 등이 저장된다. 초기화된 데이터는 BSS, 초기화되지 않은 데이터는 GVAR에 저장된다.

Text 영역(code영역)

실행할 명령을 포함하는 코드 들이 들어가는 부분. 읽기 전용 영역이며 변경할 경우 오류가 생긴다.

멀티 프로세싱

멀티 프로세싱이란, 말 그대로 여러 개의 프로세서가 서로 협렵적으로 일을 처리하는 것이다. 많은 양의 작업을 빠른 시간에 처리하기 위해서는 단일 프로세서보다 멀티 프로세서가 빠르다. 따라서 그림과 같이 멀티 코어 시스템에서 여러 개의 CPU가 병렬적으로 작업을 수행하는 것을 의미한다.

참고
https://bowbowbow.tistory.com/16
https://velog.io/@chy0428/OS-%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EC%84%B8%EC%8B%B1
https://kyu9341.github.io/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/2020/10/04/OS_Process_Structure/

profile
iOS Developer

0개의 댓글