CS 정리 | OS | 3. 프로세스 관리 (1) | kocw 반효경 교수님

Konseo·2023년 9월 7일
0

운영체제

목록 보기
5/19

프로그램의 실행

  • 프로그램은 파일시스템에 실행파일 형태로 저장되어 있음
  • 메모리에 올라가면 프로세스가 됨
  • 가상메모리
    • 각 프로그램만의 독자적인 주소가 존재 (logical memory)
    • 당장 필요한 부분은 메모리(physical memory)에 로드되고, 그렇지 않은 부분은 swap area에 내려가 있음
    • code (실제 cpu가 수행할 기계어가 모여있음)
      data (전역 변수 등)
      stack 으로 구성됨
  • 가상메모리와 메모리의 주소는 다르기 때문에 address traslation을 거쳐야 함
  • 커널 또한 하나의 프로그램이기 때문에 code, data, stack으로 구성되어 있음

커널 주소 공간의 내용

  • code

    • 자원을 효율적으로 관리하기 위한 코드가 커널 내부에 존재
    • 사용자에게 편리한 인터페이스 제공
    • 시스템콜, 인터럽트 처리 코드
  • data

    • OS는 HW를 관리하기 위한 자료구조를 갖추고 있을 뿐만 아니라 모든 프로세스(SW)들을 관리하기 위한 자료구조도 갖추고 있음 = PCB
    • ex. process가 10개 구동 중이라면 ? PCB 또한 10개 구동 중
  • stack

    • 커널의 스택은 타 실행 프로그램들의 스택과 달리 OS스택은 누구의 서비스를 수행하기 위해 OS 코드가 현재 실행되는가에 따라 각 프로세스마다 별도로 실행

사용자 프로그램이 사용하는 함수

  • 함수
    • 사용자 정의 함수
      • 자신의 프로그램에서 정의한 함수
    • 라이브러리 함수
      • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
      • 자신의 프로그램의 실행 파일에 포함되어 있음
    • 커널 함수
      • OS 프로그램의 함수
      • 커널 함수의 호출 = 시스템 콜

프로그램의 실행

프로그램이 종료될때까지의 일련의 과정

그림과 같이 프로그램 실행 도중에,

  • cpu 제어권이 계속 바뀔 수 있다
  • 내가 정의된 함수나 라이브러리는 유저모드에서 실행된다
  • 시스템콜 등을 부르게 되면 커널모드에서 실행된다

프로세스

  • process is a program in excution

  • 프로세스의 문맥(context)

    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter
      • 각종 register
    • 프로세스의 주소 공간
      • code, data, stack
    • 프로세스 관련 커널 자료 구조
      • PCB (process Control Block)
      • kernel stack

프로세스의 상태

  • running
    • CPU를 잡고 instruction을 수행 중인 상태
  • ready
    • CPU를 기다리는 상태(메모리 등 다른 조건은 모두 만족한 상태)
  • Blocked (wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • 프로세스 사진이 요청한 event(ex. 키보드 입력 등)가 즉시 만족되지 않아 이를 기다리는 상태이거나 디스크에서 file을 읽어와야하는 경우에 해당 됨
  • Suspended (stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 swap out 된다
    • 외부적인 이유
      • 메모리에 너무 많은 프로세스가 올라와서 OS가 해당 프로세스를 메모리로부터 뺏음
      • 사용자가 프로그램을 일시 정지 시킨 경우 (break key)

💬 참고
Blocked : 자신이 요청한 event가 만족되면 다시 ready
Suspended : 외부에서 resume을 주어야만 active하게 됨

결국 각 프로세스는 여러 큐를 통해 자신의 상태가 분류되며 이는 OS의 PCB를 통해 관리를 하게된다 ❗️

PCB (Process Control Block)

  • OS가 각 process를 관리하기 위해 프로세스 당 유지하는 정보
  • 다음의 구성 요소를 가짐 (구조체로 유지)
    1. OS가 관리상 사용하는 정보
      • process state, process ID
      • scheduling information, priority
    2. CPU 수행 관련 하드웨어 값
      • Program counter, registers
    3. 메모리 관련
      • code, data, stack의 위치 정보
    4. 파일 관련
      • Open file descriptors

Context Switch (문맥교환)

  • CPU를 한 프로세스에서 '다른' 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 OS는 다음을 수행 함
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

🚨 시스템 콜이나 인터럽트가 발생했다고 해서 반드시 context switch가 일어나는 것은 아니다

위 사진에서 (1)은 context switching이 아니다. 물론 (1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 저장해야하지만 문맥교환을 하는 (2)의 경우 그 부담이 훨씬 크다 (ex. cache memory flush)

*(1)의 interrupt는 A 프로그램이 아닌 타 프로그램이 IO작업 완료 후 발생시킨 인터럽트 일 수 있음

프로세스를 스케줄링하기 위한 큐

  1. job queue
    • 현재 시스템 내에 있는 모든 프로세스의 집합
  2. ready queue
    • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  3. device queue
    • I/O device의 처리를 기다리는 프로세스의 집합

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

스케줄러 (Scheduler)

OS에서 스케줄링을 하는 코드를 스케줄러라고 부름

  • Long-term scheduler (메모리 스케줄러)
    • 메모리에 프로그램이 admitted 될 수 있도록 하는 것
    • degree of multiprogramming 를 제어
    • time sharing system에는 OS는 보통 장기 스케줄러가 없음
  • Short-term scheduler (CPU 스케줄러)
    • 매우 자주 호출 됨
    • timer interrput 발생 시 마다 호출
    • 프로세스에 CPU를 주는 문제
  • medium-term scheduler (swapper)
    • 보통 장기 스케줄러가 없기 때문에 실행시킨 프로그램은 보통 모두 메모리에 로드 됨
    • 그러나, 모두 로드되면 메모리 경합이 매우 심하여 성능이 안좋아지기 때문에 일부 프로그램은 메모리에서 쫒아내는 게 더 효율적일 수 있음. 그 역할을 하는 것이 중기 스케줄러임
    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄
    • 프로세스에게서 memory를 뺏는 문제
    • degree of multiprogramming를 제어
profile
둔한 붓이 총명함을 이긴다

0개의 댓글