////
Search

프로세스 관리

Created
2022/09/03 11:08
1 more property

프로세스의 개념

Process is program in execution
프로세스란 실행중인 프로그램이다.
프로세스는 프로그램이 실행되고 종료될 때까지의 문맥(Context)를 가진다.

프로그램의 문맥 (Context)

프로세스 주소 구조
프로그램의 현재 활동의 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타낸다.
프로세스 주소 공간
프로세스 관련 커널 자료구조
PCB
Kernel Stack

프로세스의 상태

프로세스 상태도
New - 프로세스가 생성 중이다.
Running - 명령어들이 실행되고 있다.
CPU를 잡고 instruction을 수행중인 상태
Waiting - 프로세스가 어떤 이벤트가 일어나길 기다린다.
CPU를 주어도 당장 instruction을 수행할 수 없는 상태
Ready - 프로세스가 CPU에 할당되기를 기다린다.
프로세스를 실행하기 위해 CPU를 제외한 모든 조건이 만족되었을때의 상태
Terminated - 프로세스의 실행이 종료되었다.

PCB (Process Control Block)의 구성

PCB란 운영체제가 프로세스를 관리하기 위해 프로세스당 유지하는 정보
PCB 구조
OS가 관리하기 위해 사용하는 정보
Process state
Process ID (PID)
Scheduling Information
Priority
CPU 수행 관련의 하드웨어 값
Program Counter
Register
메모리 관련의 값
Code / Stack / Data의 위치정보
파일 관련의 값
Open file descriptors

문맥 교환 (Context Swiching)

문맥 교환 다이어그램
CPU 사용을 극대화하기 위하여 프로세스들 사이에서 CPU코어를 빈번하게 교체하는 것
문맥 교환시 CPU자원을 다른 프로세스에게 넘길 때 운영체제는 다음의 과정을 수행한다.
1.
CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
2.
CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
문맥 교환은 System call이나 Interrupt 발생시 반드시 일어나는것은 아니다.
또한 문맥 교환은 PCB블록을 저장/불러오기 하는 과정이 있어서 오버헤드가 크다.

프로세스 스케줄링

스케줄링 큐

프로세스를 스케줄링하기 위해서 크게 3가지 큐로 구분하게 된다.
이미지 자료
Job queue
시스템 내 모든 프로세스의 집합 ( Ready + Device)
Ready queue
현재 메모리 내에 있으며 CPU를 할당받아 실행되기를 기다리는 프로세스의 집합
Device queue
I/O device의 처리를 기다리는 프로세스의 집합

스케줄러

Long-term scheduler (장기 스케줄러 / job scheduler)
프로세스에 memory를 주는 문제
시작 프로세스 중 어떤 것들을 Ready queue로 보낼지 결정
degree of multiprogramming(멀티 프로그래밍의 정도)을 제어
시분할 시스템에는 보통 장기 스케줄러가 없음
Short-term scheduler (단기 스케줄러 / CPU scheduler)
프로세스에 CPU를 주는 문제
어떤 프로세스를 다음번에 Running시킬지 결정
충분히 빨라야 함 (Millisecond 단위)
Medium-term scheduler (중기 스케줄러 / Swapper)
프로세스에게서 Memory를 뺏는 문제
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
degree of multiprogramming(멀티 프로그래밍의 정도)을 제어

스와핑 프로세스의 상태 (Process State)

Suspended
외부적인 이유로 프로세스의 수행이 정지된 상태, 프로세스 통째로 디스크에 Swap out된다.
시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올라와 있을때)
메모리의 여유가 생기거나 준비상태의 프로세스가 0일 경우 swapped in 된다.
Suspended Ready
준비 상태일때 메모리가 swap out된 상태
Suspended Blocked
대기 상태일때 메모리가 swap out된 상태

스레드 (Thread)

스레드란?

스레드는 CPU이용의 기본단위이다.
또한 스레드는 동일 프로세스 내 Code / Data / OS Resource 섹션을 공유한다.
전통적인 개념의 단일 스레드는 하나의 스레드를 가지고있는 프로세스로 볼 수 있다.
스레드의 구성
Thread ID
Program Counter
Register set
Stack space

스레드의 장점

다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked된 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행되어 빠른 처리를 할 수 있다.
응답성 - 응용 프로그램이 긴작업을 수행하더라도 프로그램의 수행이 계속되는 것을 허용함으로써, 사용자에 대한 응답성을 증가시킵니다.
자원 공유 - 스레드는 자동으로 그들이 속한 프로세스 자원과 메모리를 공유할 수 있습니다. 프로세스 내에서 여러 개의 작업을 해야하는 스레드가 가지는 강점입니다.
경제성 - 스레드는 자신이 속한 프로세스의 자원을 공유하기 때문에 스레드를 생성하고 문맥 교환하는 일이 보다 경제적입니다.
규모 적응성 - 다중 처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 수행될 수 있습니다.

다중코어 프로그래밍

하나의 칩 안에 여러 계산 코어를 넣는 경향이 생기고 있습니다. 코어가 여러 CPU 칩 형태를 띠는 것을 다중코어, 다중 처리기 시스템이라 부릅니다.

커널스레드, 유저스레드

커널 스레드 = 커널단에서 스레드 생성유무를 알 수 있는 스레드
OS에 직접적으로 지원 관리된다.
syscall에 생성/관리가 이뤄진다.
각각의 스레드는 TCB를 필요로 한다. 여러 스레드를 멀티 코어에 돌릴 수 있다.
유저 스레드 = 유저 레벨단에서 스레드를 생성 (커널은 스레드가 있는지 모름)
커널의 도움 없이 커널의 윗부분을 지원한다(라이브러리).
비교적 빠르고 효율적이나, 스레드 1개에 block이 생기면 모든 스레드가 block된다.
OS는 커널 스레드 기준으로 할당을 받기 때문에, 병렬적으로 안돌아 갈수도 있다.

멀티 스레딩 모델

Many to One 모델 (A.K.A. 그린 스레드)
One to One 모델
Many to Many 모델 (A.K.A. 네이티브 스레드)
Two-level 모델
여러 모델들을 합쳐서 사용하는 방식을 의미한다.