CS/OS

Process

min_zu 2024. 4. 28. 15:48
728x90
반응형

Program vs Process

Program : 기계어 instructions + 디스크의 static data의 집합

  • 컴파일된 exe파일
  • 기계어 instruction : cpu가 이해하는 언어 
  • static data : 컴파일 될 때 해당 메모리 영역이 유지되며, 변경된 값이 유지되고, 어디서든 접근 가능 ex) global, static

exe파일이 여러번 실행 >> process 여러개 생성 

 

Process : 실행되고 있는 프로그램

  • 메모리 : instructions (메모리에 적재 - code) & data (프로그램 실행에 따라 변경됨)
  • 레지스터 : program counter (cpu가 실행해야하는 인스트럭션 위치를 가리키는 레지스터 ) & stack pointer 등
  • 오픈한 파일의 list와 상태정보 등

Virtualization of the CPU

Q. How can we provide the illusion? 어떻게 cpu가 여러개의 프로그램을 실행하는 것처럼 환상을 제공하는가?

A. time sharing을 통해 제공

Time sharing

(cpu virtualization을 위한 방법)

  • CPU가 몇개 있는지와 관계 없이 process를 실행시킬 수 있다. → illusion 제공 (가진 cpu < 프로세스 인 경우에도)
  • Potential cost : 모든 프로세스의 성능이 유지될 수 있을 것인가?
  • context switch & scheduling policy에 따라 구현됨

context switch - overhead가 존재함

scheduling policy - 운영체제 정책에 따라 cpu 스케줄링이 어떻게 일어날 것인지 결정됨

 

Process State 

cpu state

  • Running : cpu 자원을 할당받아 프로세스가 실행되고 있는 상태 - 한 개의 process만 run 상태일 수 있음
  • Ready : 기다리는 상태 - queue로 이루어져있어, 여러개의 process가 ready 상태일 수 있음
  • Blocked (Waiting) : cpu를 할당받아도 아무것도 안하는 상태 (데이터의 입력을 기다리는 등) / 프로세스가 cpu를 할당받아도 작동할 준비가 되어있지 않음
    ex) wait sytem call : 어느 프로세스가 끝날지 기다려야하므로 cpu를 할당받아도 아무것도 하지 않음

Scheduling Queues

OS 는 세가지 종류의 queue를 다룸

  • Run queue
  • Ready queue - 다음에 실행할 프로세스를 효과적으로 찾아야함
  • Watiting queue

CPU : 상태마다 queue를 만들어서 프로세스를 해당하는 상태의 queue에 넣어둠

Linux 의 경우 red-black tree로 queue를 만들어놓음

Example of Process State

Time \(P_0\) \(P_1\) Notes queue 상태
1 Running Ready   run - \(P_0\)
ready - \(P_1\)
2 Running Ready \(P_0\)의 I/O 요청이 발생함  
3 blocked running   run - \(P_1\)
wating - \(P_0\)
4 blocked running \(P_0\)의 I/O 요청이 끝남  
5 ready running 운영체제 정책 - \(P_0\), \(P_1\) 모두 cpu를 할당 가능 run - \(P_1\)
ready - \(P_0\)
6 ready running \(P_1\) 종료  
7 running     run - \(P_0\)
8 running      

 

* \(P_0\)의 I/O가 종료될 때 : I/O디바이스가 생성하는 인터럽트에 의해 인터럽트 핸들러가 실행 >> block → ready

* 인터럽트가 발생하면 cpu 스케줄러가 어디에 cpu를 줄 지 결정함 - 이 경우에는 그대로 \(P_1\)에게 준 것 

 

cpu 점유

0 0 1 1 1 1 0 0

 

 

PCB (Process Control Blocks)

프로세스 생성 >> 프로세스를 관리하기 위한 자료구조 PCB를 생성함

kernel/include /linux/sched.h

struct task_struct { //PCB의 역할을 함 
    volatile long state; 
    /* TASK_RUNNING : running인지 여부 확인
       TASK_INTERRUPTIBLE .. : blocked의 종류가 다양함 - state가 많음*/
    void *stack;  // 커널 스택을 가리키는 stack pointer
    
    unsigned int cpu; // 몇번 cpu를 사용하는지 - 몇번 코어인지
    
    struct mm_strcut *mm; // memory vartualization 정보 - 구조체의 시작점
    
    // 프로세스간의 관계 정보 (fork)
    struct task_strcut *parent; // parent process
    struct list_head children; // circulary doubled linked list로 관리함 - child 여러개
    
    struct files_struct *files; //open한 파일들의 정보
}
  • 각각의 프로세스는 user-mode stack & kernel-mode stack을 가지고 있음

 

728x90
반응형