운영체제 Process(프로세스)

김영민·2022년 4월 5일
0

1. 프로세스란?

메모리에 올라가서 돌아가고 있는 프로그램

Representing of process needed

  • Current instruction : program counter (다음 명령어의 주소를 갖고 있는 명령어 포인터)
    (명령의 위치 파악)
  • Register state
  • memory contents : Stack, Heap, global variables
  • Parent info

(위의 것들을 전부 다 알면 process 복원이 가능함)

프로그램은 passive(수동적)이고, 프로세스는 활동적(active)하다.

2. Process Memory Layout

  • 모든 프로세스는 가상의 메모리 레이아웃을 가지고 있다고 가정함

    -실제 메모리는 OS가 관리 -> 실제로 쓰는 것만 메모리에 OS가 전달해 줌

  • Reserved by kernel(1GB) / Stack, heap, data, text (3GB) 로 이루어져 있다.

  • Reserved by kernel : Syscall이 필요할 경우 이 kernel space를 이용하여 OS Kernel에 작업을 요청하게 된다.

  • Stack area : 지역변수 저장, 함수 호출되면 크기가 밑으로 커짐(내려옴)

  • Heap area: 동적 메모리할당 관련을 저장. 위로 커짐(올라감)

  • data segment: global variables를 초기화

  • Text segment: source code와 같은 명령어가 적혀있음.

Stack과 Heap이 반대인 이유: 메모리가 확장되면서 다른 영역과 충돌 가능하기 때문, 최대한 반대로 자라게 하여 자유롭게 이용가능하게 하려고

  • 여러 개의 memory layout이 있으면, OS가 위치선정을 해줌

3. process State

  • New : 새로 생기는 것
  • Ready : ready queue에서 processor에 의해 배정될 때까지 기다림
  • Running : 실행
  • Waiting : 어떤 event가 발생하여 프로세스가 기다리는 것 (다른 곳 가서 데이터 읽어올 때 등)
  • Terminated : 실행 종료
  • Ready -> Running : scheduled / Running -> Ready : preempted
  • ex) ready -> running -> waiting -> ready -> running -> ready ...

4. PCB : process control block

  • PCB : 프로세스의 정보를 나타내는 구조체

5. Threads

  • 프로세스 안에 여러 개의 스레드
  • cpu의 코어 - 여러 개의 병렬성
  • thread 하나로 쪼갤 수는 없음.
  • thread는 자기 자신의 속한 process의 메모리 사용 가능

6. process switch

  • process P0가 running하다가 저장되고 process P1이 running 하는 것
  • 말 그대로 switch

7. process scheduling

  • Multiprogramming : CPU utilization을 극대화

  • Time Sharing : process interactive하게 -> 병렬적으로 되는 것처럼 느껴짐(빠르게 바꿔치기)

  • process scheduling : processor에 올릴 다음 process를 고름

  • Scheduling Queues

    • Job queue
    • Ready queue
    • Device queue (각각 queue가 있음)

8. Scheduler

  • 알고리즘을 통해 적절하게 process들을 조절
  • long term scheduler = job scheduler
  • short term scheduler = CPU scheduler
  • Scheduling criteria
    • CPU Utilization 최대화
    • average waiting time 최소화
    • 사람이 느끼기에 반응이 빠르게 느껴지도록 (response time 최소화)
    • fairness

9. Operations on Processes

  • Resource on process creation
    • child는 추가적인 resource를 얻음
    • child는 parent process의 resource의 일부를 받아 overloading 되는 것을 막는다.
  • On creating a new child process
    • Execution type

      • 부모와 자식이 concurrently 하게 돌아감
      • 부모가 자식이 종료될 때까지 기다림
    • Program type

      • 부모와 똑같은 자식 program
      • 자식이 새로운 program

10. process creation in Unix/Linux

  • fork() system call

    • 새 process를 만듦
    • 정확히 카피본
    • parent와 child는 fork() 이후 concurrently하게 run
    • return values는 parent와 child 다름
  • exec() system call

    • 새 process 메모리를 모두 삭제
  • wait() system call

    • 부모가 자식이 종료될 때까지 기다릴 때 사용

11. Process Termination

  • Process가 exit()을 호출

    • 부모의 상태를 return
    • 자원이 released 된다
  • 부모가 자식 process를 종료시킬 수 있다.

    • 자식 프로세스가 cpu나 메모리를 과도하게 사용할 때
    • 자식 프로세스의 task가 필요없을 때
    • 부모 프로세스가 종료되면 OS는 자식 프로세스를 남겨두지 않는다.
      • cascading termination
  • exit() 는 코드롬 명시할 수 있고, 암묵적으로 할 수 있다.

  • wait()

    • 부모 프로세스가 사용하는 것으로, 자식 프로세스가 끝날 때까지 기다림
  • Zombie

    • 프로세스가 종료되었는데, 부모가 wait()을 호출하지 않았을 때
  • what if parent never calls wait()?

    • init : 주기적으로 wait() 안되어있는 것들을 청소해줌.

12. pipes

  • ordinary pipe
    • 부모 프로세스와 자식 프로세스 간의 파이프
    • 단방향 커뮤니케이션 가능
  • Named Pipes
    • 양방향 커뮤니케이션
    • 부모 자식 사이가 아니어도 가능 -> fork 필요 없음
    • 프로세스들이 끝나도 존재 가능
    • mkfifo() system call로 사용 가능
    • 프로세스들이 같은 물리적 머신 위에 있어야 함.

13. Remote Procedure calls

  • function call를 네트워크를 통해 함
  • 하는 이유 : 계산량이 너무 많거나, 보안 데이터가 있으면 RPC에서 계산하여 결과만 줌

0개의 댓글