[OS] Process

touhou09·2024년 11월 6일
0

컴퓨터 이론

목록 보기
17/47
post-thumbnail

Process
프로그램을 실행하는 과정에서 보조저장장치 등에서 프로그램을 메모리에 적재 후 실행할 경우 Process가 된다고 한다.

모든 process는 CPU를 필요로 하며 CPU의 사용권한은 한정되어 있으므로 OS는 process에 정해진 시간만큼 CPU를 할당해주고 시간이 끝나면 타이머 인터럽트가 발생하여 CPU 권한을 넘긴 뒤 대기한다.

이 과정을 위해 OS는 kernel mode에서 PCB를 사용을 한다.

PCB는 아래와 같은 구성요소를 가진다.

  • Process ID
  • Register 값
  • CPU Scheduling 정보
  • Memory 관리 정보

이 구성요소들이 PCB의 각 위치에 저장이 되는데, 이를 Context라 부르며 인터럽트가 발생하면 PCB의 context를 저장하고 다른 process의 context를 PCB에 입력하는데 이 과정을 Context Switching이라 부른다.

OS는 끊임없이 빠르게 context switching을 하여 user에게 프로그램이 동시에 실행되는 것과 같이 보이게 한다.
(단, 너무 잦은 context switching은 overhead를 유발한다.)

kernel에서 PCB가 있으면 User mode에서는 Memory 영역이 동작한다.
Memory 영역은 아래 그림과 같은 구조로 나뉜다.

  • Stack
    임시 데이터를 저장하는 공간이며 사용시 push하고 사용 후 필요 없어지면 pop을 통해 제거한다.
    보통 argument와 local variable 등을 저장하는데 사용한다.
  • Heap
    user가 직접 할당하는 공간이며 공간할당 후 언젠가 반환해야하는 공간이다.
    만약 직접 반환하지 않거나 garbage collecter 등이 없다면 메모리 누수가 일어난다.
  • Data
    프로그램이 실행되는 동안 유지해야하는 데이터를 저장하는 공간이며 주로 Global variable을 저장하는데 사용된다.
  • Code
    text공간이라고도 부르는 공간이다.
    CPU에 직접 작용하는 명령어가 담겨있는 공간이며 read only 상태이다.
    (write 할 수 없다.)

Stack과 Heap 영역은 실시간으로 그 크기가 변할 수 있으므로 동적 할당 영역 이라고 부르며

Data와 Code 영역은 크기가 항상 고정되므로 정적 할당 영역 이라고 부른다.

profile
Engineer가 되기 위하여

0개의 댓글