본문 바로가기
ComputerScience/운영체제

3강. 프로세스

by 구월에작은섬 2018. 9. 12.

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에는 시스템 콜을 한 프로세스의 커널 스택 값을 저장한다.

프로세스의 상태

screenshot2018-08-04at3-ec50202f-e85d-4988-81e8-9c3e7c3ec463 33 39pm

프로세스는 상태를 바꾸어 가며 작업을 수행한다.

  • 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)

운영체제가 프로세스 관리 목적으로 프로세스당 유지하는 정보

  1. OS가 관리상 사용하는 정보

    • Process State, Process ID

    • Scheduling information, priority

  2. CPU 수행 관련 하드웨어 값

    • PC, register
  3. 메모리 관련

    • code, data, stack 위치 정보
  4. 파일 관련

    • open file descriptors…

문맥 교환, Context Switch

CPU를 한 사용자 프로세스에서 다른 사용자 프로세스로 넘겨주는 과정.

운영체제는 CPU를 내어 주는 프로세스의 상태 정보를 PCB에 저장. CPU를 새로 얻는 프로세스 정보를 PCB에서 읽어 온다.

System call이나 Interrupt 발생 시 반드시 Context Switch가 일어나는 것은 아니다.

screenshot2018-08-04at3-edc46ed9-f87a-4889-8763-07676ec653c3 48 20pm

(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)를 여러 개 두는 것이다.

screenshot2018-08-05at1-596b6f40-89be-40c6-aab8-d311b4b6d11d 21 01pm

각 스레드는 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