[OS] Ch3_Processes

윰지·2020년 4월 6일
0

OS_운영체제

목록 보기
3/13

Process Concept


실행중인 프로그램을 의미한다. 보조 기억장치에 저장된 프로그램이 메모리에 로드된 것이다. 프로세스의 현재 활동 상태는 프로그램 카운터(PC) 값과 프로세서 레지스터의 내용으로 나타낸다. 프로세스의 메모리 레이아웃에는 실행 코드가 담긴 Text Section, 전역 변수가 담긴 Data Section, 프로그램 실행 중 동적으로 할당되는 메모리인 Heap Section, 함수를 호출할 때 임시 데이터를 저장하는 Stack Section이 있다.

Process State


프로세스가 처음 생성될 때는 new, 프로세서에게 할당되기를 기다릴 때는 ready, 프로세서에 할당되어 instruction이 실행되고 있을 때는 running, 프로세스가 입출력을 기다릴 때는 waiting, 프로세스 실행이 종료될 때는 terminated 상태를 갖는다.

PCB(Process Control Block)

프로세스에 대한 정보를 담고 있다. New, ready, running, waiting, terminated 정보가 담긴 process state, 이 프로세스가 다음에 실행할 명령어의 주소를 가리키는 program counter, 컴퓨터의 구조에 따라 다양한 수와 유형을 가지는 CPU register, 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함하는 CPU-scheduling information, OS에 의해 사용되는 메모리나 OS가 사용하는 메모리 시스템 정보를 포함하는 Memory-management information, CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 변호 혹은 프로세스 번호 등을 포함하는 Accounting information, 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함하는 I/O status information가 PCB에 담긴다.

Context Switch


프로세스가 실행되다가 interrupt가 발생해 운영체제가 개입하여 프로세서에 할당된 프로세스를 바꾸는 것이다. Context는 프로세스가 사용되고 있는 상태 즉, PCB 정보를 의미한다. 프로세서가 다른 프로세스로 스위치할 때 현재 실행중인 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 로드한다. 즉, CPU가 A 프로세스에서 다른 프로세스로 넘어가야 할 때 현재 실행 중인 프로세스를 PCB에 저장해놓고 다음에 돌 프로세스 상태를 PCB에서 꺼내야한다.


Process Creation


fork()

  • 프로세스가 새로운 프로세스를 만들 때 system call을 통해 운영체제에게 요청한다.
  • parent의 address space를 복사하여 똑같은 process 생성
  • fork를 부른 시점에 원래 parent에 있던 값이 복사된다.

Replace Process Image


  • exec() family
    • 현재의 process address space를 갈어엎고 새롭게 시작한다.
    • execl(), execlp(), execle(), execv(), exevp(), execvpe()
      l : Comma-separated arguments
      v : Vectored (array of strings) arguments
      p : Find executable with PATH environment variable
      e : Specify environment variables

Process Termination


  • exit()
    • child에서 해당하는 프로그램이 끝난다.
    • return 값을 부모에게 전달하게 된다.
  • wait()
    • 부모는 child가 exit로 죽고 반환하는 값을 받는다.
  • Voluntary
    • Normal exit
    • Error exit
  • Involuntary
    • kill : receivein a signal
    • Fata error

Zombie process
부모가 wait를 불러서 child를 종료시켜야한다. 자식 프로세스가 exit를 불러 종료했는데 부모 프로세스가 wait를 호출하지 않아 반환한 정보를 회수하지 않으면 자식 프로세스는 종료되었음에도 정보가 메모리에 남아있는 상태이다.

Orphan process
부모 프로세스가가 먼저 종료되어 자식 프로세스의 반환값을 받을 수 없는 상황이다. 부모 프로세스가 wait를 호출하지 않고 종료된 것이다. 해결책은 운영체제마다 다르지만 cascading termination(부모가 죽으면 밑에 child도 죽인다.)을 사용한다. Cascading termination시 리스크가 커서 reparenting을 한다. 이는 init에서 주기적으로 wait()를 날리는 것이다.

0개의 댓글