CS/OS

5. Process1

hjkim0502 2022. 3. 7. 18:51
  • 프로세스: 실행중인 프로그램
  • 프로세스의 맥락(context)
    • CPU 수행 상태를 나타내는 하드웨어: Program counter, 각종 레지스터
      • PC가 어떤 코드를 가리키는가, 레지스터에 어떤 정보를 담고 있는가
    • 프로세스의 주소 공간: code, data, stack
    • 프로세스 관련 커널 자료 구조: PCB(Process Control Block), kernel stack
      • 프로세스가 실행 될 때마다 각각 별도로 PCB를 data에 두고 관리
      • A의 코드 실행 중에 함수 호출이 일어나면 본인의 스택에 그 함수를 호출하고 리턴 후 관련 정보 쌓음
      • A 본인이 스스로 할 수 없는 것을 OS에 요청하면(시스템콜) 그와 관련되어 실행되는 커널에서의 코드가 함수를 호출하면 A의 커널 스택에 개별적으로 쌓고 관리
      • 프로세스별로 커널 스택을 별도로 생성

  • 프로세스의 상태
    • Running: CPU를 잡고 인스트럭션을 수행중인 상태
    • Ready: CPU를 기다리는 상태(메모리 등 다른 조건을 만족한 상태)
    • Blocked(wait, sleep): CPU를 주어도 당장 인스트럭션을 수행할 수 없는 상태
      • 프로세스 자신이 요청한 이벤트(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
      • 예) 현재 메모리에 올라와 있지 않고 디스크에서 파일을 읽어와야 하는 경우
    • New: 프로세스가 생성 중인 상태
    • Terminated: 수행(execution)이 끝난 상태
    •  

  • 위 큐들은 커널 주소 공간의 data영역에 있으면서 각각의 프로세스의 상태(ready/blocked)에 맞게 운영

 

  • PCB: OS가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보 (구조체로 유지)
    • OS가 관리상 사용하는 정보
      • process state, process ID, scheduling information, priority
    • CPU 수행 관련 하드웨어 값
      • program counter, registers
    • 메모리 관련
      • code, data, stack의 위치 정보
    • 파일 관련
      • open file descriptors...
  • Context Switch: CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
    •  

  • 프로세스를 스케줄링 하기 위한 큐
    • Job queue: 현재 시스템 내에 있는 모든 프로세스의 집합
    • Ready queue: 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합
    • Device queues: I/O device의 처리를 기다리는 프로세스의 집합
    • 프로세스의 PCB가 포인터로 연결되어 큐에 줄을 섬
  • 스케줄러
    • Long-term scheduler (job scheduler): 시작 프로세스 중 메모리를 할당하여 ready queue에 보낼 프로세스 결정
      • 현재 메모리에 몇개의 프로세스를 올려놓을지 제어 (degree of multiprogramming)
      • time sharing system에는 보통 장기 스케줄러가 없음 (즉시 ready 상태)
    • Short-term scheduler (CPU scheduler): 어떤 프로세스를 다음에 실행시킬지 결정
      • 충분히 빨라야 함(ms 단위)
    • Medium-term scheduler (Swapper): 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
      • 장기 스케줄러 대신 degree of multiprogramming 제어

 

* 시스템콜, 인터럽트 등으로 사용자 모드에서 커널모드로 바뀌었어도 그 사용자 프로세스가 실행중인 것으로 간주

* suspended 상태에서도, 메모리에서 탈락되어 CPU가 실행 못하지만 I/O는 처리가능하여 wake up 가능

 

출처: https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f