3강. Process
강의 링크 : https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f
프로세스란?
“Process is a program in execution”
프로세스는 현재 실행 중인 프로그램. 이 프로세스들을 구성하는 요소들을 프로세스의 문맥(process context)이라고 한다.
프로세스의 문맥
-
CPU 수행 상태를 나타내는 하드웨어 문맥.
PC(Program counter), register값을 포함한다.
PC는 다음 수행할 명령어의 위치 정보(주소값)을 담고 있다.
-
프로세스의 주소 공간
code, data, stack. 현재 변수의 값, 메모리에 담긴 내용, 스택의 내용 같은 정보를 갖고 있다.
-
프로세스 관련 커널 자료 구조
- PCB(Process Control Block) : 프로세스가 하나 실행될 때 마다 운영체제는 PCB를 생성한다. 커널 주소 공간에서 data에 해당하는 부분에 PCB를 저장한다.
- Kernel stack : 시스템 콜이 발생했을 때 어떤 프로세스가 시스템 콜을 했는지 알기 위해 커널 주소 공간의 stack에는 시스템 콜을 한 프로세스의 커널 스택 값을 저장한다.
프로세스의 상태
프로세스는 상태를 바꾸어 가며 작업을 수행한다.
-
Running
CPU를 갖고 Instruction을 수행 중인 상태.
-
Ready
CPU만 기다리는 상태. 메모리 등 다른 조건들을 모두 만족.
-
Blocked(wait, sleep)
CPU를 주어도 instruction을 수행할 수 없는 상태. 프로세스가 요청한 event(ex: I/O)가 즉시 만족되지 않는 상태.
-
New
프로세스가 생성 중인 상태
-
Terminated
수행(execution)이 끝난 상태
-
Suspended
Mid-term Scheduler 때문에 생겨난 개념. 메모리가 통째로 빼앗긴 상태. 아래 스케쥴러 부분 참조.
Process Control Block (PCB)
운영체제가 프로세스 관리 목적으로 프로세스당 유지하는 정보
-
OS가 관리상 사용하는 정보
Process State, Process ID
Scheduling information, priority
-
CPU 수행 관련 하드웨어 값
- PC, register
-
메모리 관련
- code, data, stack 위치 정보
-
파일 관련
- open file descriptors…
문맥 교환, Context Switch
CPU를 한 사용자 프로세스에서 다른 사용자 프로세스로 넘겨주는 과정.
운영체제는 CPU를 내어 주는 프로세스의 상태 정보를 PCB에 저장. CPU를 새로 얻는 프로세스 정보를 PCB에서 읽어 온다.
System call이나 Interrupt 발생 시 반드시 Context Switch가 일어나는 것은 아니다.
(1) Context Switch가 일어나지 않는 경우. 프로세스 A → 운영체제 → 프로세스 A
(2) Context Switch가 일어나는 경우. 타이머 인터럽트가 들어왔을 때와 시스템 콜로 I/O요청이 들어 왔을 때이다. 사용자 프로세스 → 시스템 콜 → 운영체제 → 다른 사용자 프로세스
다른 프로세스로 넘어가는 과정은 상당한 오버헤드가 발생한다. 캐시 메모리에 있던 프로세스의 캐시를 모두 비워줘야 하기 때문이다.
Queue, 프로세스를 스케쥴링 한다.
-
Job Queue
현재 시스템 내의 모든 프로세스의 집합
-
Ready Queue
현재 메모리 내에 있으면서 CPU를 기다리는 프로세스의 집합
-
Device Queues
Device I/O작업을 대기하고 있는 프로세스의 집합
스케쥴러, Scheduler
각각의 자원별로 시간을 할당하는 것
-
Long-term Scheduler(Job Scheduler)
시작 프로세스 중 어떤 것들을 ready queue로 보낼 지 결정
프로세스에 메모리 및 자원을 할당
메모리에 올라갈 프로그램 수를 제어. (degree of multi programming)
time sharing system에는 보통 장기 스케쥴러가 없다. 무조건 ready상태로 메모리에 올려둔다.
-
Medium-term Scheduler(Swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다
프로세스에게서 메모리를 빼앗음
메모리에 올라갈 프로그램 수를 제어. (degree of multi programming)
Swapper 때문에 앞서 나온 프로세스의 상태 중 Suspended가 추가 되었다.
Suspended (Stopped): 메모리가 통째로 빼앗긴 상태. 외부적인 이유로 프로세스의 수행이 정지된 상태. 프로세스는 디스크에서 통째로 Swap out이 된다. 메모리에 너무 많은 프로세스가 올라오거나 사용자가 프로그램을 일시 정지 시킨 경우.
Blocked는 자신이 요청한 이벤트가 만족되면 Ready가 되고 Suspended는 외부에서 Resume해 줘야 Active 된다.
-
Short-term Scheduler(CPU Scheduler)
어떤 프로세스를 다음에 running 시킬 지 결정
프로세스에 CPU 할당
빠른 속도를 가져야 한다.
스레드, Thread
스레드는 프로세스 내부의 CPU 수행 단위가 여러 개 있는 것을 말한다. 동일한 일을 하는 프로세스를 여러 개 만들면 여러 개의 동일한 데이터와 코드를 만들어야 해서 메모리의 낭비가 생기므로, 주소 공간을 하나만 띄어 놓고 프로세스 마다 다른 코드를 실행할 수 있게 만들어 주면 메모리의 낭비를 줄일 수 있다. 즉, 주소 공간의 코드를 가리키는 PC(Program Counter)를 여러 개 두는 것이다.
각 스레드는 PC, Register Set, Stack Space로 별도 구성되어 있고, code selection, register set, stack space등의 Task를 공유한다.
스레드의 장점
-
Responsiveness, 반응성
하나의 프로세스 안에 여러 스레드가 수행된다면 하나의 서버 스레드가 blocked상태인 동안에도 동일한 프로세스 내의 다른 스레드가 실행되어 보다 빠른 처리가 가능하다.
-
Resource Sharing
메모리 낭비를 줄인다. 리소스들을 공유하기 때문이다.
-
Economy
생성하고 switch하는 면에서 프로세스보다 오버헤드가 적고 빠르다.
-
Utilization of MultiProcessor Architectures
스레드를 생성하면 병렬성이 높아진다. CPU가 여러 개인 컴퓨터를 갖는 효과이다.
스레드의 종류에는 무엇이 있는가
-
커널 스레드
프로세스 내에 스레드가 여러 개라는 것을 운영체제가 알고 있는 스레드이다. 커널이 스레드 스케쥴링을 하게 된다.
-
유저 스레드
라이브러리 차원에서 지원되는 스레드이다. 운영체제는 하나의 프로세스로 인식된다.
'ComputerScience > 운영체제' 카테고리의 다른 글
6강. 프로세스 동기화 (0) | 2018.09.12 |
---|---|
5강. CPU Scheduling (0) | 2018.09.12 |
4강. Process Management (0) | 2018.09.12 |
2강. System Structure & Program Execution (0) | 2018.09.12 |
1강. 운영체제 소개 (0) | 2018.09.12 |