본문 바로가기

CS/운영체제(OS)

OS - CPU 스케줄링(3), 프로세스의 생성과 소멸, 쓰레드

728x90

MultiLevel Queue 스케줄링

  • 다단계 큐 스케줄링은 이전에 봤던 것 처럼 하나의 큐를 사용하는 것이 아닌 여러개의 큐를 사용하는 방법이다.
  • 앞어 많은 프로세스들이 있었는데 운영체제 단계에서 인터럽트를 처리하는 프로세스도 있고 사용자와 인터랙티브하는 프로세스, 배치 프로세스, 컴파일러 등 많은 프로세스가 있는데 이들을 같은 큐로 관리하기 어렵기 때문에 나온 개념이다.'

프로세스 그룹 단위

  • 위의 순서대로 우선순위가 매겨져 각 큐는 절대적인 우선순위를 가진다. 아래의 프로세스 큐가 실행되려면 위의 프로세스 큐가 모두 비어있어야한다.
    • 만약 Interactive Processes가 실행되고 있던 중 System Processes작업이 큐에 들어오면 바로 프로세서를 반납해야한다.
    • 각각의 큐는 독립된 스케줄링 기법을 사용한다.
    • 또 큐 사이에 시간을 나눠사용할 수도 있다. 각 큐는 프로세서 시간의 일정량을 받아서 큐에 있는 프로세스들을 스케줄링 할 수 있다.

MultiLevel FeedBack Queue

  • 피드백 큐는 프로세스들이 각 큐를 이동할 수 있다. 먼저 맨위의 우선순위로 작업을 하다가 너무 안끝난다 싶으면 다음 큐로 이동시키는 식이다.
  • 기아 상태의 위험이 있을 경우 가장 높은 우선순위를 배정한다.

프로세스의 생성과 소멸

  • 프로세스는 프로세스에 의해 만들어진다. 프로세스도 부모와 자식 프로세스가 나뉘며 이를 프로세스 트리라고 한다.
  • Process Identifier (PID)
    • 정수형으로 이루어지며 Integer타입의 정수이다.
  • 생성 단계
    • 새로운 프로세스에 프로세스 식별자를 할당
    • 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 프로세스 제어 블록 공간 할당
    • 프로세스 제어 블록 초기화, 프로세스 상태, 프로그램 카운터 초기화, 자원 요청, 제어 요청 등을 포함한다.
    • 링크를 건다 (큐에 삽입)
  • 프로세스가 새로운 프로세스를 할당할 때는 두가지 실행이 발생가능하다.
    • 부모와 자식 모두 실행
    • 부모가 자식이 모두 종료할 때 까지 대기
      • fork() 명령어는 부모와 자식을 복사하거나 바로 exec() 명령어로 자식 프로세스의 주소 공간을 별도 프로그램 주소 공간으로 덮어 쓰는 것이다.
      • 프로세스 종료는 exit() 명령어가 있으며 사용한 모든 자원을 반납한다.

쓰레드 (Thread)

  • 쓰레드는 프로그램 내부의 흐름, 맥이라 볼 수 있다.
  • 프로세스는 안에서 코드의 흐름이 있을 것이다. 그것을 쓰레드라고 한다.
  • 프로세스는 최소 1개의 쓰레드를 가지고 있다.

다중 쓰레드

  • 한 프로그램에 2개 이상의 흐름
  • 흐름이 빠른 시간에 스위칭 된다. → 여러 쓰레드 동시 실행 되는 것으로 보인다. 그러나 이것은 그렇게 보일 뿐이다. 이것을 동시성이라 한다.
  • 사실 지금까지의 스위칭은 옛날 방식이다. 요즘은 쓰레드 스위칭이라고 볼 수 있다.
    • 프로세스는 여러 쓰레드가 동시 진행되고 있다.
    • 다음 프로세스로 cpu가 재할당 될 때, 프로세스의 PCB에서 주소와 시작할 지점을 찾는데 여기에 쓰레드의 정보도 포함된다. 쓰레드들은 프로세스의 정보를 공유하는데, 단 코드와 데이터는 공유하지만 PC, SP, register, stack은 공유하지 않는다.
    • 결론적으로 우리들은 프로세스만 스위칭하는 것이 아닌 쓰레드 단위의 스위칭을 한다.

'CS > 운영체제(OS)' 카테고리의 다른 글

OS - 임계구역과 세마포어  (1) 2023.11.20
OS - 프로세스 동기화 개념  (0) 2023.11.11
OS - CPU 스케줄링(2)  (0) 2023.11.04
OS - 프로세스 관리와 CPU 스케줄링  (1) 2023.11.02
OS - 프로세스 관리  (0) 2023.11.01