반응형

Context(문맥 / 콘텍스트)

컨텍스트는 사용자와 다른 사용자, 혹은 사용자와 시스템 또는 디바이스 간의 상호작용에 영향을 미치는 사람, 장소, 개체 등의 현재 상태를 규정하는 정보들이다.

OS에서의 컨텍스트는 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다.

이러한 컨텍스트는 프로세스의 PCB(Process Control Block)에 저장된다.

 

PCB(Process Control Block)

PCB란 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓을 수 있는 저장 장소를 뜻한다.

PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다. 프로세스 상태 관리와 컨텍스트 스위칭을 위해 필요하다.

위 이미지는 PCB의 정보 저장 구조에 관한 이미지이고 PCB에는 다음과 같은 정보가 저장된다.

  • 프로세스 상태 : 생성, 준비, 수행, 대기, 중지
  • 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
  • 레지스터 : 누산기, 스택, 색인 레지스터
  • 프로세스 번호

Context Switching(문맥교환 / 콘텍스트 스위칭)

컴퓨터가 매번 하나의 Task만 처리할 수 있다면?

=> 해당 Task가 끝날 때까지 다음 Task는 기다려야 함

=> 그렇다면 매우 느린 속도 때문에 사용하기 불편할 것.

 

이를 해결하기 위해 Context Switching이 등장.

 

다양한 사람들이 동시에 사용하는 것처럼 하기 위해서는 빠른 속도로 Task를 바꿔 실행해 실시간처럼 보이도록 해야 했고, CPU가 Task를 바꿔가며 실행하기 위해 Context Switching이 필요하게 되었다.

또한 새로 실행되는 Task가 아니라면 이전에 실행될 때 레지스터들이 지니고 있던 데이터들을 불러와서 이어서 실행해야 하므로 컨텍스트 스위칭이 필요하게 되었다.

Context Switching이란 멀티프로세스 환경에서 CPU가 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선순위 프로세스가 실행돼야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업이다.

 

Context Switching의 순서

 

이미지 출처 : https://velog.io/@underlier12/OS-17-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%AD-%EC%A0%95%EB%A6%AC

  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트하여 메인 메모리에 저장
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행

 

Context Switching의 단점

  • 프로세스가 변경되는 과정에서 데이터를 서로 백업하기 때문에 CPU의 과부하가 생길 수 있다.
  • 컨텍스트 스위칭이 잦으면 오버헤드가 발생하여 성능이 떨어질 수 있다.

 

오늘은 이렇게 Context Switching에 대해 알아보았습니다.

이외에 전체적인 CS주제들은 https://github.com/HongEunho 에 정리되어 있습니다.

 

HongEunho - Overview

📖 Android, Java, Kotlin, Algorithm, Clean Architecture - HongEunho

github.com

팔로우 & 맞팔 환영입니다!

반응형

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

프로세스와 스레드 (Process vs Thread)  (0) 2021.11.01
반응형

오늘은 운영체제 중에서도 가장 중요하다고 꼽히는 프로세스스레드 및 차이점에 대해 알아보자.

 

먼저, 프로세스와 스레드를 알아보기 전에 프로그램 이라는 개념에 대해 알아야 한다.

프로그램

프로그램이란, 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가지 않은 정적인 상태를 말한다.

즉, 메모리에 올라가지 않은 상태이기 때문에 아직 운영체제로부터 독립적인 메모리 공간을 할당받지 않은 상태이며

정적인 상태이기 때문에 아직 실행되지 않고 가만히 있는 상태이다.

즉, 그냥 코드 덩어리 라고 할 수 있다.

 

그럼 이를 인지한 후, 본격적으로 프로세스스레드에 대해 알아보자.


프로세스

프로세스란, 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다.

컴퓨터에서 실행되고 있다는 것은 운영체제로부터 독립적인 메모리 공간을 할당받았다는 것이며,

실행되고 있기 때문에 동적인 상태이다.

 

아래 그림은 프로세스를 나타낸 모습이다.

운영체제로부터 독립적인 메모리 공간을 할당받는 프로세스

  • 프로세스의 각각의 영역에 대한 설명
    • Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
    • Data : 전역 변수, 정적 변수, 배열 등의 데이터 (초기화된 데이터)
    • Stack : 지역 변수, 매개 변수, 리턴 값 등의 임시 데이터 (임시 메모리 영역)
    • Heap : 동적 할당 시 사용 (new(), malloc() 등)
  • 프로그램 -> 프로세스 를 그림으로 표현하면 다음과 같다.
  • 즉, 프로그램은 코드 덩어리 파일이며 이 프로그램을 실행한 것이 바로 프로세스 이다.
  • 프로세스의 특징
    • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 가진다.
    • 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
    • 각각의 프로세스는 별도의 주소 공간에서 실행되고, 기본적으로 서로 다른 프로세스의 자원에 접근할 수 없다. (운영체제에서 안전성을 위해 이렇게 설계됨)
    • 다른 프로세스의 자원에 접근하기 위해서는 프로세스 간 통신(IPC)을 이용해야 한다.

그럼 다음으로, 프로세스 내에 존재하는 스레드에 대해 알아보자.


스레드

스레드란, 프로세스 내에서 실행되는 여러 흐름의 단위 이다.

즉, 프로세스의 특정한 수행 경로이며, 프로세스가 할당받은 자원을 이용하는 실행의 단위 이다.

  • 프로세스 내에서 Stack만 따로 할당받고, Code, Data, Heap영역은 공유하는 스레드

스레드는 프로세스의 공유적인 한계점을 극복하기 위해 만들어진 개념이기 때문에, 프로세스와는 달리 서로 메모리를 공유한다.

즉, 스레드 끼리는 프로세스의 자원을 공유하며 프로세스 실행 흐름의 일부가 되는 것이다.

  • 스레드의 특징
    • 스레드는 프로세스 내에서 Stack만 각각 따로 할당받고 Code, Data, Heap 영역은 공유한다.
    • 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내의 스레드 끼리 서로 공유한다.
    • 한 스레드가 프로세스 자원을 변경하면, 다른 스레드(Sibling Thread)도 그 변경된 결과를 즉시 볼 수 있다.

 

지금까지 살펴본 프로그램프로세스스레드의 개념을 코드에 비유하여 정리해보면

  • 프로그램은 아직 실행되지 않은 실행 파일로써 코드 덩어리라고 볼 수 있고
  • 프로세스는 이러한 프로그램(코드 덩어리)을 실행한 것 이라고 볼 수 있고
  • 스레드는 이 코드의 일부분(main문, 함수 등) 으로 볼 수 있다.

 

이제, 앞에서 살펴본 내용을 토대로 멀티프로세스멀티스레드에 대해 정리해보며 마무리를 하려고 한다.


멀티 프로세스

멀티 프로세스란, 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나 이상의 작업을 동시에 처리하도록 하는 것이다.

쉽게 말하면 하나의 컴퓨터에 여러개의 CPU가 장착되어, 하나 이상의 프로세스들을 동시에 처리(병렬 처리) 하는 개념이다.

멀티 프로세스의 장점과 단점은 다음과 같다.

  • 장점
    • 독립된 구조이기 때문에 안전성이 높다.
    • 프로세스 중 하나의 프로세스에 문제가 생겨도, 다른 프로세스에는 영향을 주지 않는다.
  • 단점
    • 독립된 구조이기 때문에 Context Switching으로 인한 오버헤드가 발생하여 성능저하가 발생한다.
    • 프로세스는 각각의 독립된 메모리 영역을 할당받기 때문에 프로세스 끼리 공유하는 메모리가 없으므로, Context Switching 과정에서 캐시 메모리 초기화 등의 무거운 작업이 진행된다.

 

멀티 스레드

하나의 프로세스를 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.

윈도우나 리눅스 등의 운영체제들이 멀티 프로세싱을 지원하고 있으며, 멀티 스레딩을 기본으로 하고 있다.

  • 장점
    • 시스템 자원소모 감소(자원의 효율성 증대)
    • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리
    • 시스템 처리율 향상(처리비용 감소)
    • 스레드 간 데이터를 주고 받는 것이 간단하며, Context Switching이 빠름
    • 간단한 통신방법으로 인한 프로그램 응답 시간 빠름
    • 스레드는 프로세스 내의 Stack영역을 제외한 메모리 공간을 공유하기 때문에 통신이 빠름
  • 단점
    • 자원 공유시, 잘못된 변수 공유나 미묘한 시간차로 인한 오류 발생 가능
    • 동기화 문제로 인한 데드락(병목 현상) 발생 가능
    • 하나의 스레드에 문제가 생기면 프로세스 전체에 영향을 줌
    • 디버깅이 어려우며 주의 깊은 설계가 필요함

 

이렇게 오늘은 프로세스와 스레드에 대해 알아보았다.

혹시 SW면접을 준비하고 있다면 프로세스와 스레드의 차이점들을 명확히 알아두는 것을 추천한다.

 

이외의 CS 다른 주제들은 https://github.com/HongEunhohttps://hongcoding.tistory.com에 정리되어 있습니다!

 

AndroidTeacher

 

hongcoding.tistory.com

 

HongEunho - Overview

📖 Android, Java, Kotlin, Algorithm, Clean Architecture - HongEunho

github.com

 

반응형

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

Context Switching(문맥교환)  (0) 2021.11.06

+ Recent posts