[운영체제] 3. Process

Seojin Kwak·2022년 4월 22일
0

Operating Systems

목록 보기
3/6

Process

" Process is a program in execution "

counter.c (프로그래밍) ---(컴파일)---> counter (기계어코드) ---(실행)---> process

프로세스의 문맥 (context)

  • CPU의 수행 상태를 나타내는 하드웨어 문맥. 특정 시점에서 어디까지 수행했는지.

    ( program counter: 프로그램 중 몇번째 line 수행하는지 가리킴
    register: code 수행 시, 사용되는 data )
    => 저장, 관리 잘하면 context switching 용이

  • 프로세스 주소 공간: code, data, stack(user mode call stack 저장)

  • 프로세스 관련 커널 자료 구조: PCB, Kernel stack

    1. PC값을 사용하여 현재 수행하는 line의 code 접근
    2. 명령어를 ALU에 탑재
    3. R1, R2에서 data를 가져와서 ALU 연산 수행
    4. Rn에 ALU 연산 결과 data 저장

프로세스의 상태 (state)

  • Running: CPU를 잡고 instruction 수행 중
    ex) program counter, register
  • Ready: CPU를 기다리는 상태 (메모리 등 다른 조건 모두 만족. memory나 I/O interrupt 걸린 상태 X). I/O 요청을 기다리거나 어떤 이벤트가 일어나기를 기다리는 프로세스는 서 있을 수 없음. (CPU burst 상태)
  • Blocked (wait, sleep): CPU를 주어도 당장 instruction을 수행할 수 없는 상태. Process 자신이 요청한 event(ex.I/O)가 만족되지 않아 기다리는 상태.
    I/O가 완료될 때까지 CPU를 놓은 다음 CPU를 기다리는 줄에도 서지 않고 해당 I/O 장치의 서비스를 기다리는 줄에 가서 서는 것.
    ex) 디스크에서 file을 읽어와야 하는 경우
    - wait: memory에 I/O나 event copy
  • Suspended (stopped): 중기 스케줄러때문에 추가. 외부적인 이유로 프로세스의 수행이 정지된 상태. 프로세스는 통째로 disk에 swap out.
    ex) 사용자가 프로그램을 일시정지시킨 경우(break key),
    시스템(중기 스케줄러)이 여러 이유로 프로세스를 잠시 중단시킴(memory에 너무 많은 프로세스가 올라와 있어서 queue의 뒤쪽 process는 일단 suspend)


    Blocked: 자신이 요청한 event가 만족되면 Ready
    Suspended: 외부에서 resume해줘야 Active


    1. process A가 CPU에서 running 중이다.
    2. timer interrupt 발생 시, process A는 작업을 멈추고, ready queue의 맨 뒤로 줄을 선다.
    3. process A가 CPU running 도중 disk에서 data를 읽어 와야할 경우, blocked로 바뀌고, Disk I/O queue에 줄을 선다.
    4. Disk는 controller에 의해 순차적으로 data 읽고, process A의 data를 읽는 작업이 끝나면, disk controller가 CPU에 interrupt를 건다. (I/O 작업이 끝났음을 알려줌)
    5. CPU는 interrupt가 들어왔으니 작업중이던 process를 멈추고, CPU 제어권이 운영체제 kernel에 넘어간다.
    6. 운영체제 kernel은 process A의 메모리 영역에 A의 data를 넘겨준다. process A의 상태를 blocked -> ready로 바꿔서 CPU를 얻을 수 있는 자격을 준다.
    공유 데이터 (sw자원): 동시에 여러 개의 process가 공유 데이터에 접근할 수 없음. 제어가 필요함. blocked 상태로 기다림.

Process Control Block (PCB)

: 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보 (구조체)

  • OS가 관리 상 사용하는 정보
    - process state, process ID
    - scheduling information (어떤 process를 먼저 cpu에 갖다줄 것인가), priority(우선순위. ex. 커널 process 우선순위 높음. system 전체 운영 위해 우선권 필요)
  • CPU 수행 관련 하드웨어 값
    - program counter, registers
  • 메모리 관련
    - code, data, stack의 위치 정보
  • 파일 관련
    - open file descriptors (다른 파일들과의 충돌을 피하기 위해 열려 있는 파일 미리 저장)

Context Switch

  • 문맥 교환

    : CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
    CPU가 다른 프로세스에게 넘어갈 때 운영체제는?
    - CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    : PC, register 등 저장
    - CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴 (Copy)
    : 과거 진행됐던 위치에서 다시 시작 하기 위해 저장된 값 읽어옴

    System call이나 Interrupt 발생 시, 반드시 context switch가 일어나는 것은 아님


    (1) user mode -> kernel mode -> user mode로의 전환일 뿐.
    (2) Timer Interrupt, I/O Request
    kernel mode: A->Blocked
    reg -> cache (자주 가져오는 data 저장) -> DRAM
    ex) A의 실행 blocked? -> cache memory flush (B의 cache memory 넣어야 하기 때문)
    : 상당한 overhead 발생

Process Scheduling

  • 프로세스 스케줄링 Queue (linked list)

    - Job queue: 현재 시스템 내의 모든 프로세스 집합
    - Ready queue: 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스 집합
    - Device queues: I/O device의 처리를 기다리는 프로세스 집합

    프로세스들은 각 queue들을 오가며 수행된다.

  • 스케줄러

    - Long-term scheduler (Job scheduler)
    : 시작 프로세스 중 어떤 것을 ready queue로 보낼지 결정. 프로세스에 memory를 주는 문제.
    degree of multiprogramming (memory에 올라가있는 프로세스의 수) 제어.
    time sharing system에는 없음(무조건 ready)
    => 잘 안 씀. multiprogramming은 주로 중기 스케줄러로 제어.

    - Short-term scheduler (CPU scheduler)
    : 어떤 프로세스를 다음번에 running시킬지 결정. 프로세스에 CPU를 주는 문제. ms단위.

    - Medium-term scheduler(Swapper)
    : 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 보냄. 프로세스에서 memory를 뺏는 문제. degree of multiprogramming 제어.

Thread

프로세스 내부에 CPU 수행 단위가 여러 개 있는 경우

  • Thread 구성: program counter, register set, stack space => thread마다 따로 필요

  • Thread가 서로 공유하는 부분 (task)
    : code section, data section, OS resources
    메모리 공간 공유 => (+) 자료 공유 용이 (-) 하나 잘못되면 전체 다 X

    lightweight process: thread를 여러 개 두는 것이 process를 여러 개 두는 것보다 가벼움

  • Thread의 장점
    1. Responsiveness (응답성, 반응성)
    : 다중 thread task 구조에서는 하나의 서버 thread가 blocked인 동안에도 동일한 task 내의 다른 thread가 running되어 처리 ⬆️
    ex) multi-threaded web: network(blocked) dispaly(continues)
    2. Resource Sharing
    : 동일한 일을 수행하는 다중 thread가 협력하여 처리율(throughput) ⬆️, 성능 향상
    3. Economy
    : process보다 creating & CPU switching에서 overhead가 작음
    ex) Solaris(Linux)가 각각 30배, 5배 overhead
    4. Utilization of MP Architectures
    : 병렬성 ⬆️

    Process: 안정성 good, 데이터 보호성 good // 비용 bad

    Thread는 하나의 PCB안에서 CPU 관련 정보를 담는 program counter, registers만 각각 가지고 있음.

  • Implementation of Threads
    - Kernel Threads: supported by kernel
    - User Threads: supported by library


운영체제 - 반효경
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

profile
Hello, World!

0개의 댓글