[컴퓨터공학] 기초 | 운영체제(OS), 프로세스, 스레드

Eunji Lee·2023년 1월 27일
0

[TIL] 컴퓨터공학

목록 보기
2/3
post-thumbnail

운영체제

구조

목적

처리능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등

기능

  • 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원 관리
  • 자원을 효율적으로 관리하기 위해 자원 스케줄링 기능을 제공
    • cf. 스케줄링: 어떤 자원을 누가, 언제, 어떤 방식으로 사용할지를 결정하는 것
  • 사용자와 시스템 간의 편리한 인터페이스를 제공
  • 시스템의 각종 하드웨어와 네트워크를 관리하고 제어

시스템 자원 관리

응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리

응용 프로그램 관리

  • 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리
    • 응용 프로그램이 운영체제를 통해 컴퓨터에게 일을 시키려면, 컴퓨터를 조작할 수 있는 권한을 운영체제로부터 부여받아야함
    • 권한을 부여받고 난 후에는, 운영체제가 제공하는 기능을 이용할 수 있음
    • 응용 프로그램이 운영체제와 소통하기 위해서는, 운영체제가 응용 프로그램을 위해 인터페이스(API)를 제공해야함
    • cf. 시스템 콜(System call): 응용 프로그램이 시스템 자원을 사용할 수 있도록, 운영체제 차원에서 다양한 함수를 제공하는 것



프로세스

의미

  • 프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU 가 해당 명령어를 하나씩 수행하고 있는 상태
  • 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하고, 이때 실행되는 애플리케이션을 의미
  • cf. 프로그램: 아직 실행되기 전인 애플리케이션

구성요소

유저 메모리 영역 관리(Virtual Address Descriptors)

  • 프로세스 별로 독립된 영역인 유저 메모리 공간을 가짐
  • 커널 메모리 공간의 경우 모든 프로세스가 공유하여 사용
  • VAD(Virtual Address Descriptors)라는 관리 테이블로 각각 프로세스의 독립적인 유저 메모리 영역을 관리

핸들 테이블(Handle Table)

  • 프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간
  • 프로세스가 종료하게 될 때 이 테이블의 정보를 참고하여 이 프로세서에서 사용하고 있는 모든 커널 객체를 자동으로 반환

독립적인 메모리 공간

페이징 기법을 이용하여 프로세스마다 별도의 고유한 메모리를 사용(윈도우의 경우)

특징

자원 소유의 단위

  • 각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야 함
  • 메모리 공간은 각 프로세스마다 구별되어야 하며 해당 프로세스가 접근하고자 하는 파일, I/O 장치들에 대해서 또한 프로세서 단위로 할당 받아 관리

디스패칭의 단위

  • 프로세스는 하나의 프로그램이 운영체제로부터 CPU 의 자원을 일정 기간 동안 할당 받아 명령어를 실행하는 것
  • 운영체제는 여러 개의 프로세스가 병렬적으로 실행되게 하기 위해서 CPU 의 사용 시간을 각각의 프로세스에 골고루 나눔
  • 하나의 프로세스에서 여러 개의 디스패칭 단위(즉, 여러 개의 스레드)가 실행될 수 있음

프로세스 상태

  • 실행(Run) : 프로세스가 프로세서를 차지하여 서비스를 받고 있는 상태
  • 준비(Ready) : 실행될 수 있도록 준비되는 상태
  • 대기(Waiting) : CPU 의 사용이 아니라 입출력의 사건을 기다리는 상태

프로세스와 프로세서

프로세스(Process)프로세서(Processor)
특정 목적을 수행하기 위해 나열된 작업의 목록• 하드웨어적인 측면 : 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛으로, 중앙처리장치(CPU)를 의미하며 적어도 하나 이상의 ALU와 레지스터를 내장
메모리에 적재 되어 프로세서에 의해 실행 중인 프로그램• 소프트웨어적인 측면 : 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템으로, 워드프로세서나 컴파일러 등이 여기에 해당



스레드

의미

명령어가 CPU 를 통해서 수행되는 객체의 단위

특징

  • 프로세스 내에서 실행되는 흐름의 단위로, 하나의 스레드는 시작해서 종료할 때까지 한번에 하나씩 명령들을 수행
  • 하나의 프로세스 내에는 반드시 1개 이상의 스레드가 존재
  • 프로세스가 종료되면 그 프로세스에 속해있던 스레드도 함께 종료됨
  • 각 스레드마다 call stack이 존재(call stack: 실행 중인 서브루틴을 저장하는 자료 구조)하며, 나머지 Code, Data, Heap 영역은 스레드끼리 공유
    • 같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재하게 되며 동일한 데이터에 접근할 수 있음
    • 하나의 스레드가 수정한 메모리는 같은 메모리를 참조하는 스레드에 영향을 줌
      • ex. 하나의 스레드에서 오픈한 파일을 다른 스레드가 사용할 수 있음
    • 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없음
  • 스레드는 다른 스레드와 독립적으로 동작
    • 독립적으로 동작하기 때문에 두 개 이상의 스레드가 동작되는 경우, 두 개 이상의 스레드의 실행 및 종료순서는 예측할 수 없음

필요성

  • 여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 사용
  • 하나의 프로세스 안에서 여러 개의 독립적인 루틴을 동시에 수행함으로써 수행 능력을 향상시킬 수 있음

구성 요소

  • 가상 CPU : 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드
  • 수행 코드 : Thread Class에 구현되어 있는 run() Method 코드
  • 처리 데이터 : Thread에서 처리하는 데이터

싱글 스레드와 멀티 스레드

싱글 스레드(Single-Thread)

개요

  • 프로세스가 단일 스레드로 동작하는 방식으로 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법
  • 하나의 레지스터, 스택으로 표현
  • 자바스크립트는 가장 대표적인 싱글 스레드 언어

장점

  • 자원 접근에 대한 동기화를 신경쓰지 않아도 됨
    • 여러 개의 스레드가 프로세스의 자원을 공유할 경우,각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야함
    • 예를 들어, 모든 스레드가 일정 자원에 동시에 접근하거나, 똑같은 작업을 실행할 때 에러가 발생하거나 원하는 값이 나오지 않기 때문에 스레드들이 동시에 같은 자원에 접근하지 못하도록 제어해야함
  • 자원 접근에 대한 동기화를 신경쓰지 않아도 되므로 문맥 교환(context switch) 작업 또한 요구하지 않음
    • 문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업으로 많은 비용이 필요함

문맥 교환(Context Switching)

  • CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정
  • 즉, 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행 중인 태스크(프로세스, 스레드)를 멈추는 것을 의미함
  • 프로그래밍 난이도가 쉽고, CPU 메모리를 적게 사용함

단점

  • 여러 개의 CPU를 활용하지 못함
    • 싱글 스레드는 하나의 물리적 코어밖에 사용하지 못해 멀티 코어 머신에서 CPU 사용을 최적화할 수 없음
  • 최적화를 위해선 Cluster 모듈을 이용하여 여러 프로세스를 사용할 수 있음
    • 하지만 앞서 프로세스끼리의 자원 공유가 어렵기 때문에 Redis와 같은 부가 인프라가 필요함
  • 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있음
  • 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춤
    • 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복함

멀티 스레드(Multi-Thread)

개요

  • 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
  • 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미
  • 시스템 자원의 활용 극대화 및 처리량 증대할 수 있어 단일 프로세스 시스템의 효율성을 높임

장점

  • 작업을 분리해서 수행하므로 실시간으로 사용자에게 응답할 수 있음
    • 싱글 스레드인 경우, 작업이 끝나기 전까지 사용자에게 응답하지 않음
    • 멀티 스레드인 경우 한 프로세스를 여러 프로세서에서 수행할 수 있으므로 훨씬 효율적
    • 싱글 스레드인 경우 한 프로세스는 오직 한 프로세서에서만 수행 가능

단점

  • 주의 깊은 설계가 필요하며, 디버깅이 까다로움
  • 단일 프로세스 시스템의 경우 효과를 기대하기 어려우며 다른 프로세스에서 스레드를 제어할 수 없음 (즉, 프로세스 밖에서 스레드 각각을 제어할 수 없음)
  • 자원 공유 문제
    • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받음
  • 문맥 교환 작업 필요

동시성과 병렬성

  • 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한
  • 즉, 컴퓨터 하드웨어와 관련 있는 개념

Concurrency(동시성, 병행성)

여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴

  • 시분할: 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 하는 방식

Parallelism(병렬성)

멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

0개의 댓글