프로세스에 대해 알아보자

권태형·2023년 3월 18일
0

지식정리

목록 보기
38/72
post-thumbnail

😀이 글에 앞서 포스팅한 동시성과 병렬성 포스팅에서 동시성의 구현에 스레드를 사용하고 멀티태스킹의 구현에 프로세스와 스레드를 사용한다는 내용이 있다. 우리는 일상 용어에서도 프로세스를 사용한다. 일반적인 일의 과정이나 공정을 뜻하는 의미로도 사용하고, 컴퓨터를 사용하면서 스레드는 몰라도 프로세스는 들어보았을 수도 있다.

지금 당장 우리 컴퓨터의 만능 해결사 window 작업관리자를 켜기만해도 프로세스라는 탭이 있고, 그 아래 앱과 백그라운드 프로세스 항목이 존재한다.

우리 생활과 밀접한 이 프로세스는 무엇일까?

프로세스란?

프로세스는 컴퓨터에서 실행되고 있는 프로그램 또는 프로그램이 동작중인 상태를 의미한다.

CPU스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.

우리가 .exe확장자로 되어있는 파일을 프로그램이라고 부른다. 이러한 프로그램을 마우스로 더블클릭하여 이 프로그램을 실행하게 되면, 이 프로그램은 인스턴스화 되어 램(메모리)에 할당되게 되고, 이 할당된 인스턴스화 된 프로그램을 프로세스 라고 부른다.

따라서 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위라고도 할 수 있다.

프로세스를 CPU스케줄러에 맞춰 CPU에서 실행하게 되어 우리가 프로그램을 사용할 수 있게 되는 것이다.


프로세스의 상태(state)

프로세스는 상태(state)가 변경되며 작업을 수행하게 된다.

프로세스가 가지는 상태의 종류는 다음과 같다.

  • 실행(Running)
    CPU에서 실행 중인 상태

  • 준비(Ready)
    CPU를 할당받기 위해 기다리는 상태

  • 대기(Blocked)
    입출력 등의 이벤트 발생을 기다리는 상태
    CPU를 주어도 당장 명령을 수행할 수 없는 상태
    Process 자신이 요청한 event(예: I/O) 가 즉시 만족되지 않아, 이를 기다리는 상태

  • 생성(Created, new)
    프로세스가 생성되어 메모리에 할당된 상태

  • 종료(Terminated)
    프로세스가 종료된 상태


프로세스의 문맥(context)

프로세스의 문맥(context)은 현재 프로세스가 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보의 집합을 말한다.

이 정보들은 프로세스가 실행되는 동안 CPU의 레지스터, 메모리 주소 공간, 시스템 상태 등과 같은 다양한 정보들을 포함된다.

context에 포함되는 정보들을 알아보자.

  • 프로세스 상태(Process Status)
    현재 프로세스의 상태를 나타내는 정보이다.
    대부분의 운영체제에서는 실행 상태(Running), 대기 상태(Waiting), 준비 상태(Ready) 등을 포함한다.

  • 프로그램 카운터(Program Counter)
    프로세스가 다음에 실행할 명령어의 주소를 가리키는 레지스터이다.

  • 레지스터 값(Register Values)
    프로세스가 실행되는 동안 레지스터에 저장되는 값이다.

  • 메모리 관리 정보(Memory Management Information)
    프로세스의 가상 메모리 주소 공간 정보를 담는다.
    코드, 데이터, 스택 으로 구성된 프로세스만의 독자적인 주소 공간을 말한다.

  • 입출력 상태(Input/Output Status)
    프로세스가 실행 중인 입출력 장치의 상태를 담는다.


프로세스 메모리의 구성

프로세스의 문맥에서 프로세스가 가지는 메모리 공간 정보를 알 수 있다.

각각의 프로세스는 CPU로부터 독자적인 메모리 공간을 할당 받는다. 이 메모리 공간 안에서 프로세스 자신만의 데이터와 명령어를 가질 수 있다.

따라서 하나의 프로세스에서 발생한 오류나 문제가 다른 프로세스에 영향을 주지 않으며, 각각의 프로세스는 독립적으로 실행될 수 있다.

하나의 프로세스가 가지는 메모리 공간의 구성은 위의 그림과 같이 코드, 데이터, 스택, 힙 을 가지고 있다.

  • 코드(code) 영역
    프로그램 코드가 저장되는 공간
    실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역이며, CPU는 코드영역에 저장된 명령어들을 하나씩 처리한다.

  • 데이터(data) 영역
    전역 변수 등의 데이터가 저장되는 공간
    코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역이며, 프로그램이 실행되면서 할당되고 종료되면서 소멸한다.

  • 스택(stack) 영역
    지역 변수와 함수 호출 시 생성되는 스택 프레임이 저장되는 공간
    함수 안에서 선언된 지역변수, 매개변수, 리터값등이 저장된다. 함수 호출시 기록되고 종료되면 제거된다.

  • 힙(heap) 영역
    동적으로 할당된 메모리가 저장되는 공간
    관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유공간이다.


프로세스의 특징

😀프로세스는 독립적인 구성이나, 운영체제의 간섭으로 아래와 같은 특징들을 가진다.

독립적인 시행

  • 각각의 프로세스는 운영 메모리 공간을 할당받고, 이 메모리 공간 안에서 프로세스 자신만의 데이터와 명령어를 가질 수 있다.
    따라서 하나의 프로세스에서 발생한 오류나 문제가 다른 프로세스에 영향을 주지 않으며, 각각의 프로세스는 독립적으로 실행될 수 있다.

  • 각각의 프로세스는 운영체제로부터 자신만의 CPU 시간 또한 할당받는다.
    이렇게 CPU 시간을 할당받으면 다른 프로세스와의 간섭 없이 자신의 작업을 처리할 수 있다.

1개 이상의 스레드

  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

프로세스간 통신을 위한 IPC기능

  • IPC는 Inter-Process Communication의 약자로 프로세스 간 통신을 의미한다.

  • 이 기능은 운영체제에서 제공하는 기능으로, 독립적인 특징을 가진 프로세스 끼리 데이터를 주고받을 수 있게 해준다.

  • IPC를 위해서는 파이프, 파일, 소켓 등의 기능을 통해 프로세스간 데이터를 주고 받을 수있다.

    1. 파일: 프로세스가 파일을 생성하여 데이터를 저장하고, 다른 프로세스가 이 파일을 읽어들이는 방식

    2. 파이프(Pipe): 두 개의 프로세스 간에 단방향 통신을 위한 방식

    3. 소켓(Socket): 네트워크를 통해 두 개의 프로세스 간에 양방향 통신을 위한 방식

    4. 메시지 큐(Message Queue): 운영체제에서 제공하는 큐를 이용하여 데이터를 주고받는 방식

    5. 공유 메모리(Shared Memory): 두 개의 프로세스가 동일한 메모리 영역을 공유하여 데이터를 주고받는 방식

계층구조

  • 운영체제에서 부모 프로세스가 자식 프로세스를 생성하면, 이 자식 프로세스는 또 다른 자식 프로세스를 생성할 수 있는 계층 구조를 형성한다.

  • 계층 구조를 통해 운영체제는 프로세스를 계층적으로 관리할 수 있으며, 부모 프로세스는 자식 프로세스의 실행 상태를 감시하고 제어할 수 있다.

스케줄링

  • 운영체제는 다양한 스케줄링 알고리즘을 사용하여 CPU를 할당할 프로세스를 결정한다.
  1. FCFS 알고리즘: 먼저 도착한 프로세스를 먼저 실행하는 방식

  2. SJF 알고리즘: 실행 시간이 가장 짧은 프로세스를 먼저 실행하는 방식

  3. RR 알고리즘: 시간 할당량(Time Quantum)을 정해두고, 시간 할당량이 지난 후에는 다른 프로세스로 CPU를 넘기는 방식

  • 스케줄링은 CPU 사용률과 프로세스 응답 시간 등 다양한 요소를 고려하여 결정된다.

문맥교환(Context Switching)

😀프로세스는 운영체제에서 실행되는 작업의 단위이다.

하나의 시스템에서 여러 개의 프로세스가 동시에 실행될 수 있으며, 이러한 프로세스들은 CPU를 공유한다. 하지만 CPU는 동시에 하나의 작업만 처리할 수 있으므로, 운영체제는 여러 개의 프로세스들이 동시에 실행될 수 있도록 CPU를 번갈아가며 할당하는 작업이 필요하게 되는데, 이러한 작업을 수행하는 것이 문맥교환이다.

문맥 교환(Context Switching)은 CPU에서 실행중인 프로세스를 다른 프로세스로 전환하는 과정에서, 현재 실행중인 프로세스의 상태 정보를 저장하고, 다음에 실행될 프로세스의 상태 정보를 불러오는 과정을 말한다.

문맥교환(Context Switching)은 앞서 포스팅한 동시성에서 멀티태스킹을 운영체제에서 가능하게 하기 위한 중요한 기술이다.

😀예시를 들어보자 프로세스 A와 B가 있다.

유저가 유튜브에서 영상을 시청하고 있을 때, 다른 탭에서 웹 서핑 페이지를 검색하려고 한다. 이 경우, 운영체제는 유튜브에서 실행 중인 프로세스 A의 상태를 자신의 PCB에 저장하고, 웹 서핑 페이지를 실행하기 위한 프로세스 B의 상태를 PCB로 부터 불러와 CPU를 할당한다. 이 과정이 문맥교환이다.

웹 서핑 페이지가 실행되는 동안, 유저는 검색어를 입력하고 원하는 정보를 수집한다. 이후, 웹 서핑 페이지를 닫고 유튜브로 돌아오면, 운영체제는 이전에 저장한 유튜브의 상태를 불러와 CPU를 할당한다. 유튜브는 이전에 시청하던 영상을 계속해서 재생하며, 유저는 영상을 시청할 수 있다.

PCB란?

  • Process Control Block의 약자로 운영체제에서 프로세스에 대한 메카데이터를 저장한 데이터블럭을 말한다.
    프로세스가 생성되면 운영체제는 그 프로세스의 해당 PCB를 생성한다.

  • PCB는 프로세스 스케줄링 상태, 프로세스ID등의 여러가지 정보를 담고 있다.
    PCB가 담고있는 정보는 다음과 같다.

    • 프로세스 스케줄링 상태,
    • 프로세스ID,
    • 프로세스 권한,
    • 프로그램 카운터,
    • CPU레지스터,
    • CPU스케줄링 정보,
    • 계정정보,
    • I/O상태 정보

참고자료(출처)
얄팍한 코딩사전 유튜브 동영상 [프로세스는 뭐고 스레드는 뭔가요?]
면접을 위한 CS 전공지식 노트(도서)
브런치 강관우 포스팅 프로세스와 스레드의 차이
벨로그 aeong98 포스팅 [운영체제] 프로세스와 스레드
티스토리 장장스 포스팅 [OS] 프로세스 관리, 프로세스 문맥(context)
깃헙.io 권희정 포스팅 [OS] 프로세스와 스레드의 차이


P.S
처음으로 마크다운에 토글 기능을 적용하였는데, 이게 내가 포스팅을 하고 있는지 html을 짜고있는지 해깔려지고 너무 오래 걸리게 된다. 다음부터는 토글 기능 안쓸거다. 그리고 벨로그는 강제적인 들여쓰기는 지원하지 않는가.. ㅠㅠ

P.S 2
아니.. 분명 미리보기에서는 html이 적용이 되는데 다 작성하고나서 밖에서 보면 적용이 하나도 안된다. 왜 미리보기에서는 정상동작하고 포스트의 뷰페이지에서는 동작하지 않는걸까? 저번 포스팅에서 html로 짠 표나 글자색입히는 것은 됐었는데, 표에서 중앙정렬이 안됬던 것도 있고, 마크다운 마다 적용할 수 있는 태그의 차이가 있는 걸까?

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글