OS - Processes

YJ·2023년 9월 5일

운영체제

목록 보기
1/1
post-thumbnail

Processes

Program

  • 내가 만든 소스코드를 통해 만든 실행 파일

Process

  • Program이 메모리에 올라갈 경우

  • 동일한 Program을 여러 번 실행할 경우
    - 1. a.c 파일
    - 2. gcc -o a.out a.c로 a.out 실행 파일 생성 -> Program
    - 3. a.out 실행 -> Memory에 load -> Process 생성
    - 4. Memory에 load 되면 Process의 Memory Instance 생성 (m1라고 가정)
    - 5. a.out을 또 실행(동일한 프로그램을 컴퓨터에서 다시 실행할 경우)
    - 6. Memory에 또 load -> Process 생성 -> Memory Instance 생성 (m2라고 가정)
    - 7. m1과 m2의 Data, Heap, Stack의 메모리 주소는 다르고, Instruction은 공유 (메모리 공간을 위해)

  • Core가 1개일 경우, Process가 100개라 하더라도, 실제 Process가 실행될 때는, 1개의 Process가 실행되고,
    해당 Process의 Process Control Block(Linux: task-struct) 자료구조 값이 CPU의 Program Counter,
    Register 등의 Hardware에 복사된다.
    해당 Process의 실행이 종료되면, 다시 Process Control Block에 CPU의 값들이 복사된다.
    Process의 PCB(Process Control Block)의 값을 CPU에 복사하거나, CPU의 값을 PCB에 전달해주는 것은
    OS가 수행한다. 개개의 Process는 고유의 PC 값을 가지고 있어야, 각각 일관되게 Process가 실행될 수 있다.

PCB

  • Process Control Block
  • Linux에서는 task-struct라고 함.
  • Process의 상태 등 Process와 관련되어 유지해야하는 정보를 자료구조로 저장해놓은 Block

Q . OS는 어떻게 수 많은 Process를 관리하지?
A . 각 Process의 정보들을 일일히 따라가는 것은 복잡하기에 Process의 정보들을 하나로 저장해두는 자료구조가 필요하다. 그래서 만들어진 것이 Process Control Block이다.

  • PCB 기본 구성
    - Process State: running, waiting 등 Process의 상태를 저장.
    - Process Number: Process를 각각 구분하기 위한 용도.
    - Program Counter: 앞서서 얘기했듯이, 개개의 Process는 고유의 PC 값을 가지고 있어야 일관된 실행 가능. 다음에 실행할 명령어의 주소가 저장.
    - CPU Registers: 레지스터 이용.
    - CPU Scheduling Information: priority, scheduling queue pointer 등이 저장.
    - Memory Limits: 같은 Memory access 등을 막기 위해, Memory 정보가 저장.
    - list of open files: file에 대한 접근 권한을 유지하기 위해 사용.
  • priority
    - linux에서는 nice로 불림.
    - scheduling 시 사용되며, 값이 높을 수록 나중에 실행.

Process State

  • new: Process가 만들어지는 상태. new 상태는 아직 Program -> Process 과정이므로 Process는 아니다.

  • ready: running이 가능한 준비가 끝난 상태. cpu에 이동할 수 있는 상태이다.

  • running: Process가 CPU에서 실행되는 상태. core가 1개면 running 상태 1개. core가 100개면 running 상태 100개.

  • waiting: 이벤트, I/O 발생시 멈추는 상태. 이 상태에서 해당 작업을 대기한다. 해당 작업이 끝나 Interrupt가 발생하면 ready 상태로 이동한다.

  • terminated: 종료된 상태.

  • Linux의 Process State
    - new는 없다.
    - runnable: ready랑 동일한 상태.
    - running: 위 running과 동일.
    - stop: waiting이랑 동일한 상태.
    - zombie: terminated랑 동일한 상태. 이 상태에서 부모 Process가 정리해줘야 한다. 이 상태를 벗어나지 못할 경우, zombie process가 된다. 왜냐하면, 자신 Process가 사용한 Resource는 반환해줘야 한다. zombie 상태에 머무르고 있다는 것은, 관리정보가 정리가 안된 종료 상태이다.

  • Linux Process 실행 예시
    - Process가 fork() 호출시, 새 Process가 생성된다. (new)
    - CPU에서 실행가능한 준비가 끝난다. (runnable)
    - CPU를 점유하며 실행된다. (running)
    - 실행이 끝나면 종료된다, (zombie)

  • new -> ready 상태로 이동하는 것은 admitted(허락된)라고 하며, long term scheduler가 관리한다.

  • ready -> running 상태로 이동하는 것은 scheduler dispatch라고 하며, short term scheduler가 관리한다.

profile
dev

0개의 댓글