[CS] 프로세스

Jihoon·2023년 8월 30일
0

CS

목록 보기
1/1

운영체제
프로세스
가상 메모리
스레드 - 동시성 문제 해결

프로세스 VS 프로그램

프로그램

프로그램 자체는 생명이 없음
보조 기억장치(하드디스크, SSD)에 존재
실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음

프로세스

프로그램의 명령어와 정적인 데이터가 메모리에 적재되면 생명이 있는 프로세스가 돼!
즉, 프로세스 : 실행 중인 프로그램 의미

  • 정적인 데이터란?

How 여러 개의 프로세스가 동시에 실행 가능하지?

원래는 하나의 CPU 즉 프로세서는 한 순간에 하나의 프로세스만 실행 가능
운영체제!가 엄청나게 빠르게 CPU가 실행할 프로세스를 교체하고 있기 때문
동시에 여러 개의 프로세스가 실행되고 있다고 느낄 뿐 !

프로세스의 구성

  • 프로세스에 대한 정보는 프로세스 제어블록(PCB, Process Control Block) 또는 프로세스 기술자(process descriptor)라고 부르는 자료구조에 저장됌 (대부분 PCB라 부름)

  • PID

운영체제가 각 프로세스를 식별하기 위해 부여된 프로세스 식별번호(PID, Process Identification)

  • 프로세스 상태

CPU는 프로세스를 빠르게 교체하면서 실행하기 때문에 실행 중인 프로세스도 있고, 대기 중인 프로세스도 있음. 그런 프로세스의 상태를 저장함

  • 프로그램 카운터

CPU가 다음으로 실행할 명령어를 가리키는 값을 의미함. CPU는 기계어를 한 단위씩 읽어서 처리하는데 프로세스를 실행하기 위해 다음으로 실행할 기계어가 저장된 메모리 주소를 가리키는 값 의미

  • 스케줄링 우선순위

운영체제는 여러 개의 프로세스를 동시에 실행하는 환상을 제공. 운영체제가 여러 개의 프로세스가 CPU에서 실행되는 순서를 결정하는 것을 스케줄링이라고 함. 이 스케줄링에서 우선순위가 높으면 먼저 실행될 수 있는데 이를 스케줄링 우선순위라고 함

  • 권한

프로세스가 접근할 수 있는 자원을 결정하는 정보임. 안드로이드 앱을 예로 들면 아무 앱이나 휴대폰 통화내역을 볼 수 있는 권한을 가지면 이를 악의적으로 이용하는 앱이 등장할 수 있음. 따라서, 프로세스마다 어디까지 접근할 수 있는지에 대한 권한이 필요함

  • 프로세스의 부모와 자식 프로세스

최초로 생성되는 init 프로세스를 제외하고 모든 프로세스는 부모 프로세스를 복제해서 생성되고, 이 계층관계는 트리를 형성함. 그래서 각 프로세스는 자식 프로세스와 부모프로세스에 대한 정보를 가지고 있음.

  • 프로세스의 데이터와 명령어가 있는 메모리 위치를 가리키는 포인터

프로세스는 실행중인 프로그램임. 따라서, 프로그램에 대한 정보를 가지고 있어야 함. 프로그램에 대한 정보는 프로세스가 메모리에 가지는 자시만의 주소 공간에 저장됌. 이 공간에 대한 포인터 값을 가짐

  • 실행문맥 (레지스터?)

프로세스가 실행상태에서 마지막으로 실행한 프로세서의 레지스터 내용을 담고 있음. CPU에 의해 실행되는 프로세스는 운영체제에 의해 계속 교체되는데 교체되었다가 다시 자신의 차례가 되어서 실행될 때 중단된 적 없고 마치 연속적으로 실행된것처럼하기 위해 이 레지스터 정보를 가지고 있음.

  • 이게 무슨 말이지?

스택영역과 힙영역 사이에 빈 공간이 보이나요? 컴파일 타임에 지역변수를 얼마나 사용할지 미리 계산할 수 없기 때문에 런타임에 지역변수 선언 순서에 따라 스택영역은 위쪽으로 주소 값을 매기고 동적 할당될때 힙영역은 아래쪽으로 주소값을 매깁니다.

  • Context Switching

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 의미

멀티 프로세스

하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
부모 프로세스 -> 자식 프로세스

  • 특징
    1. 안정성이 좋다. 여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다.
  1. 구현이 비교적 간단하고, 각 프로세스들의 독립적으로 동작하며 자원의 서로 다르게 할당된다.
  2. 프로세스 간 통신을 하기 위해서는 IPC를 통해야 한다.
  3. 메모리 사용량이 많다.
  4. 스케쥴링에 따른 Context Swtich이 많아지고, 성능 저하의 우려가 있다.

멀티 스레드

멀티 스레드란 하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다. 일반적으로 멀티스레드를 사용하는 이유는 사용자와 상호작용하는 애프리케이션에서 단일 스레드로 Network 또는 DB와 같은 긴 작업을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.

  • 특징
    1. 응답성이 좋다. 프로그램의 일부분(자식 스레드)이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속적으로 수행됌
    2. 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유할 수 있음
    3. 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
    4. 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있음
    5. 구현 및 테스팅, 디버깅이 어렵다. -> Why?

프로세스 주소공간

스레드

스레드 정의

컴퓨터 분야에서 실행되는 스레드는 일반적으로 운영체제의 일부인 스케줄러에 의해 독립적으로 관리 될 수 있는 프로그래밍 된 명령어의 가장 작은 시퀀스를 의미

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말함. 일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다. 즉 프로세스를 생성하면 하나의 (메인)스레드가 생성되는 셈이다.

profile
장난감이 데이터인 사람

0개의 댓글