본문 바로가기

운영체제

[운영체제] Process and Threads

Process: 실행 중인 프로그램

  • 실체: 프로그램이 실행되는 데 필요한 모든 것들을 저장하는 자료구조
  • 분기나 JUMP가 없으면 기본적을 sequential로 실행
  • 포함하는 것

 

1. text section: 프로그램 코드

2. stack section: function call과 관련된 데이터들 (parameter, return address, local variables ...)     

     -> top에서 pop하면 함수에 들어갔다 나오는 정보들을 바로 알 수 있음

3. data section: static, global variable 저장

4. heap section: 동적 메모리 할당으로 저장한 데이터 관리하는 영역 , malloc

5. 동작, 컨트롤, 상태 에 필요한 program counter, register 저장 영역, 멀티프로그래밍, 멀티태스킹을 위함

 

 

Process State

  • new: 프로세스 막 만들어진 상태, 메모리 탑재, CPU 스케쥴링의 대상은 아님
  • running: 프로세스가 현재 cpu를 잡고 일을 하는 상태
  • waiting: 프로세스가 이벤트 발생을 기다리는 상태, 즉 I/O가 끝나길 기다리는 상태
  • ready: 준비가 됐지만 cpu를 할당받지 못해서 일을 못 하고 있는 상태
  • terminated: 마지막 instruction까지 수행을 끝낸 상태

 

Process Control Block (PCB)

-> 프로세스의 형태를 갖추게 하는 자료 구조 (Linux에서는 task_struct)

Process state, program counter, CPU registers, CPU 스케쥴링, 메모리 관리, accounting, I/O 상태 정보 등을 포함

 

Process Scheduling Queues

-> 상태별 프로세스가 모여있는 장소

  • Job Queue: 모든 프로세스 관리
  • Ready Queue: ready 상태의, CPU를 기다리는 프로세스들이 모여있는 장소
  • Device Queues: 인터럽트 기다리는, wait 상태의 프로세스 관리

 

Schedulers

  • Long-term scheduler (job scheduler): ready queue로 편입시킬 대상 결정하는 스케쥴러

                 - degree of multiprogramming: cpu를 잡아서 일을 조금조금 하고 있는 프로세스 개수

  • Short-term scheduler (CPU scheduler): ready 상태의 프로세스 중 어떤 놈에게 cpu를 줄까 결정
  • Medium-term scheduler: 메모리 공간 확보를 위해 프로세스를 디스크로 swap out, swap in 해주는 것

 

Context Switch

-> 프로세스가 돌다가 다른 프로세스로 변환되는 것

  • 멀티프로그래밍을 지원하는 os가 감내해야 하는 overhead 발생
  • cpu switch 발생 시 캐시를 비워 -> 초반에는 계속 cache miss -> overhead 큼

 

Process Creation

  • 사용자의 요청에 의해 생성 -> UI를 관장하는 프로세스가 사용자 입력을 받아 생성
  • tree형태의 가계도가 만들어짐

나를 만든 프로세스 = parent process

내가 만든(fork) 프로세스 = child process

부모 자식 간 자원(동일 코드, 다른 부분 수행)을 공유하기도 함

fork 로 프로세스 생성 시 address space에는 부모 꺼 그대로 복제

Threads

  • lightweight process라고도 함
  • code, data, files 등은 공유
  • 각각 다른 부분 수행 -> registers, stack은 각자 가짐
  • 장점
    • 진도가 계속 나가니까 응답성
    • process는 각각의 address space를 가지는 반면, threads는 공유하므로 자원 활용의 효율성
    • process 여러 개 만들면 overhead 큼, threads는 memory copy를 하지 않으므로 경제성
    • multicore system> 하나의 프로세스는 하나의 코어, 여러 개의 스레드가 있는 경우 서로 다른 코어에서 돌 수 있어서 빨라짐 확장성 굳 
  • Kernel Threads: 커널이 만들어줌, 커널에게 일일히 요청, 답을 받아야 하니까 무겁고 느림
  • User Threads: 유저 레벨에서 만듦, 커널의 입장에선 하나의 프로세스가 있을 뿐 thread의 존재 모름, 가볍고 빠름

한양대학교 강수용 교수님 운영체제 강의 내용 정리