나의 브을로오그으

#9. CPU 스케쥴링 알고리즘(3) 본문

Computer Science/운영체제

#9. CPU 스케쥴링 알고리즘(3)

__jhp_+ 2022. 7. 2. 17:06

Multilevel Queue Scheduling

- Process groups

  * System processes

  * Interactive processes

  * Interactive editing processes

  * Batch processes

  * Student processes

(프로세스마다 더 중요한 프로세스들(시스템 프로세스)이 있는데 Queue를 1개를 둔다면 다른 프로세스들이 하나의 Queue에 들어가는게 조금 않맞다. 따라서 프로세스 마다 들어가는 Queue 가 다르도록 해야 조금 더 중요한 프로세스들 부터 CPU 서비스를 받을 수 있도록)

- Single ready queue -> Several separate queues

  * 각각의 Queue에 절대적 우선순위 존재

  * 또는 CPU time을 각 Queue에 차등배분

  * 각 Queue는 독립된 scheduling 정책  

 

Multilevel Feddback Queue Scheduling

- 복수 개의 Queue

- 다른 Queue로의 점진적 이동

  * 모든 프로세스는 하나의 입구로 진입

  * 너무 많은 CPU time 사용 시 다른 Queue 로

  * 기아 상태 우려 시 우선순위 높은 Queue 로

(예를 들어 우선순위가 낮은 Queue 있던 프로세스가 기아 상태를 우려해서 

우선순위가 보다 높은 Queue로 들어감.)

 

 

프로세스 생성과 종료

Process Creation

- 프로세스는 프로세스에 의해 만들어진다!

  * 부모 프로세스 (Parent process)

  * 자식 프로세스 (Child process)

  * Sibling processes

- 프로세스 트리 (process tree)

- Process Identifier (PID)

  * Typically an integer number

  * cf. PPID

- 프로세스 생성

  * fork() system call = 부모 프로세스 복사

  * exec() - 실행파일을 메모리로 가져오기

(최초의 프로세스의 생성은 어떻게 생성될까? 리눅스의 경우 최초에 실행되는 프로세스는 init()이다.

그리고 프로세스마다 Identifier가 있으며, 이는 Unique한 값이다. 부모의 PID는 PPID)

파일 생성, 삭제, 읽기, 쓰기 등의 system call 함수로 open(), close(), write(), read()가 있다.

그렇다면 프로세스의 system call은? fork() 이다. exe파일을 memory로 가져오는 system call은 exec() 임.)

 

Process Termination

- 프로세스 종료

  * exit() system call

  * 해당 프로세스가 가졌던 모든 자원은 O/S에게 반환

 (메모리, 파일, 입출력용 사용)

(프로세스를 종료시키면 어떤 일이 일어날까?? 현재 사용중이던 파일에 할당해준 메모리를 회수한다.)

 

Thread

- 쓰레드 (Thread)

  * 프로그램 내부의 흐름, 맥

 

class Test (

public static void main(String[] args) {

    int n = 0;

    int m = 6;

    System.out.println(n * m);

    while(n < m) n++;

    System.out.println("Bye");

}

 

- 다중 쓰레드 (Multithreads)

  * 한 프로그램에 2개 이상의 맥

  * 맥이 빠른 시간 간격으로 스위칭 된다. = 여러 맥이 동시에 실행되는 것처럼 보인다.

(concurrent vs simultaneous)

- 예 : Web browser

  * 화면 출력하는 쓰레드 + 데이터 읽어오는 쓰레드

- 예 : Word processor

  * 화면 출력하는 쓰레드 + 키보드 입력 받는 쓰레드 + 철자/문법 오류 확인 쓰레드

- 예 : 음악 연주기, 동영상 플레이어, Eclipse IDE

(concurrent는 여러개의 CPU를 의미하는 것이 아님.)

 

- 한 프로세스에는 기본 1개의 쓰레드

  * 단일 쓰레드 (single thread) 프로그램

- 한 프로세스에 여러 개의 쓰레드

  * 다중 쓰레드 (multi-thread) 프로그램

- 쓰레드 구조

  * 프로세스의 메모리 공간 공유 (code, data)

  * 프로세스의 자원 공유 (file, i/o, ...)

  * 비공유 : 개별적인 PC, SP, registers, stack

- 프로세스의 스위칭 vs 쓰레드의 스위칭

 

※ 현대의 컴퓨터는 가장 작은 실행 단위가 thread이다.

'Computer Science > 운영체제' 카테고리의 다른 글

#11. 프로세스 동기화  (0) 2022.07.06
#10. 프로세스 동기화  (0) 2022.07.04
#8. CPU 스케쥴링 알고리즘(2)  (0) 2022.07.01
#7. CPU 스케쥴링 알고리즘(1)  (0) 2022.06.30
#6. 프로세스 관리  (0) 2022.06.29