Process

2021. 8. 28. 23:34운영체제

Process란?

  • Process란 스케줄링의 단위로, Protection domain 기능을 지원한다.
  • Process에는 Program counter, Stack, Data section으로 구성된다.
  • Process in memory
    메모리 내의 Process는 다음과 같다.
    1. Stack : 함수 인자, 반환 주소 값, 지역 변수와 같은 일시적인 데이터를 저장한다.
    2. Heap : 프로세스 실행 중 동적할당을 할 때 쓰이는 곳이다. 여기서 메모리 반납을 제대로 안하면 메모리 leak이 발생한다.
    3. Data : 전역 변수를 저장한다.

    디스크 위의 프로그램을 메모리 내의 Process로 옮기는 과정은 다음과 같다.
    a.out이라는 파일이 있을 때, 그 파일 내에는 header와 text, data가 있다. Text는 Process의 Text 영역에 들어가게되는데, 이 때 a.out 파일의 header에서 텍스트 사이즈를 확인하고 그만큼의 메모리를 확보한 후, a.out의 text 어셈블리어를 메모리 내의 text 영역으로 복사한다. 또한, a.out의 헤더에서 데이터 사이즈에 대한 정보를 확인한 후 메모리 리 내 프로세스의 data 영역에 그만큼의 메모리를 확보한다. 그 후에 a.out의 데이터를 메모리 내 프로세스의 data 영역에 집어 넣는다.

Context Switch

  • context switch란 CPU에서 수행되는 프로세스가 바뀌는 것을 말하며, time quantem이 다 끝났거나 I/O 호출이 발생했을 때 일어난다. 이러한 문맥 교환을 담당하는 부분이 바로 dispatcher이다.

다음은 context switch를 그림으로 나타낸 것이다. P(old)가 실행되다가 Interrupt가 발생하면 P(old)에 대한 정보를 PCB라는 곳에 저장한다. 그 후 Interrupt를 처리하는 사이 CPU는 idle 상태에 있다가 P1에 대한 PCB에서 프로세스 정보를 가져온 후 P(new)를 실행한다. 시스템콜은 트랩이 발생하므로 context switch가 발생하지 않는다.

 

  • PCB란?
    Process Control Block의 약자로 커널 메모리 단에 존재하며 pointer, process state, process number, counter, register 등 프로세스의 정보들을 저장한다.
  • 프로세서 구조에 따른 문맥전환
    1. CISC
    - CISC는 복잡한 명령어 집합을 갖는 CPU 아키텍쳐이므로 효율이 높고, 그 대신 클럭 속도가 저하된다.
      또한 복잡한 회로 때문에 물리적인 공간을 차지하여 레지스터 용량이 저하된다.
      Ex) Intel pentinum processor
    2. RISC
    - RISC는 간단한 명령어 집합을 갖는 CPU 아키텍쳐이므로 클럭 속도가 높아 수행 속도가 빠르다.
      또한 회로가 간단해 물리적 공간이 절약되어 많은 레지스터 장착이 가능하다. 하지만 이러한 점 때문에 context
      switch 발생 시 레지스터 내용 변화가 커 큰 오버헤드가 생긴다는 단점이 있다.
      Ex) Sparc, Arm processor
  • Process State
    위의 그림은 프로세스 상태 변화도이다. 
    1. Process가 생성되면 new state가 된다.
    2. 실행될 준비가 되면 ready state를 가지게 된다. ready 상태에 있는 process는 메모리에 있는 ready queue에 적재된다.
    3. Ready 큐에 있던 프로세스가 CPU를 할당받으면 running state가 된다. 하나의 프로세스가 running state이면 다른 process들은 waiting queue에 들어간다.
    4.
    (1) 실행 중인 process에 interrupt가 발생하면 CPU는 interrupt를 처리하기 위해 프로세스를 강제로 ready 상태로 전환한다.
    (2) I/O 요청을 받으면 해당 요청에 대한 I/O나 event를 받을 때까지 기다리며 waiting 상태를 가지게 된다.
    5. Process가 완전히 끝나면 terminated가 된다.

 

  • 프로세스 생성부터 실행까지
    1. fork(2) 시스템 콜을 통해 child process를 생성하는데, 이 때 child process는 parent process의 메모리 복사본을 담고 있다.
    2. Exec(2)를 통해 child process에서 새로운 프로그램을 실행시킨다.
    3. Process가 마지막 상태까지 실행을 하게 되면 OS가 exit(2) 시스템 콜을 통해 해당 프로세스를 삭제할 것인지 묻는다. 만약 부모 프로세스가 자식 프로세스를 종료시키려고 할 떄 abort 시스템 콜을 통해 종료할 수 있다. 

 

'운영체제' 카테고리의 다른 글

CPU Scheduling  (0) 2021.09.05
IPC  (0) 2021.09.04
컴퓨터 구조  (0) 2021.08.27
운영체제 구조  (0) 2021.08.17
운영체제 개요  (0) 2021.08.16