Search
Duplicate
📒

[OS Stduy] 01-1. 프로세스와 스레드, 문맥교환

상태
완료
수업
OS Study
주제
OS
연관 노트
3 more properties
참고

프로세스와 스레드

NOTE
프로세스란 컴퓨터에서 실행 중인 프로그램을 의미합니다. 정확히는 프로그램 파일이 OS에 의해 주기억장치에 적재되어 CPU에 의해 실행되는 과정을 프로세스라 합니다. 쓰레드는 프로세스 내에서 실행되는 작업의 단위입니다.
프로세스 ⇒ 프로그램이 돌아가고 있는 상태! (작업중인 프로그램)
모든 프로그램은 운영체제가 실행되기 위해 메모리 공간을 할당해줘야 실행될 수 있습니다.
프로그램을 실행하는 순간, 파일은 컴퓨터 메모리에 올라가고 운영체제로부터 시스템 자원(CPU)을 할당받아 프로그램 코드를 실행시켜 서비스를 사용할 수 있습니다.
프로세스는 최소 하나의 스레드를 가지고 있으며, 실제로도 스레드 단위로 스케줄링을 합니다.
자바 언어로 비유하면 클래스(프로그램) , 인스턴스(프로세스) 입니다.

프로세스 계층 구조

NOTE
프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다!
프로세스는 자식 프로세스를 가질 수 있다.
# 프로세스 계층구조 확인 pstree ## 결과 systemd─┬─ModemManager───2*[{ModemManager}] ├─agetty ├─containerd───9*[{containerd}] ├─containerd-shim─┬─mysqld───7*[{mysqld}] │ └─11*[{containerd-shim}] ├─cron # ...
Bash
복사
최초의 프로세스 systemd

프로세스 부모-자식 관계

부모 프로세스
새로운 프로세스를 생성하는 과정을 말합니다.
일반적으로 부모 프로세스는 실행 중인 상태에서 새로운 작업을 수행하기 위해 자식 프로세스를 생성할 수 있습니다/
자식 프로세스
부모 프로세스에 의해 생성된 프로세스를 의미합니다.
부모 프로세스와 별개의 프로세스 이므로 다른 PID를 가집니다.

프로세스 계층 구조의 특징

일반적으로 1번째 프로세스 init 또는 systemd가 모든 프로세스의 최상위 부모 루트 역할을 하며, 다른 프로세스는 이 프로세스에서 시작된 계층 구조의 하위에 위치하게 됩니다.
자식 프로세스는 부모 프로세스의 환경 변수, 파일 디스크립터, 우선 순위 등을 상속받을 수 있으며 자식 프로세스에서 독립적으로 변경할 수 있습니다.
부모-자식 프로세스는 pipe, message, queue 등의 IPC(Inter-Process Communication) 방법을 사용하여 서로 데이터를 주고 받을 수 있습니다.

프로세스 & 스레드 메모리 구성

NOTE
프로그램이 실행되어 프로세스가 만들어지면 4가지의 메모리 영역으로 구성되어 할당받게 됩니다.
프로세스 - 스레드 할당
프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립적인 메모리 공간을 가지고 있어, 운영체제에서 별도의 작업 단위로 분리되어 관리되며 서로 간섭하지 않습니다.
프로세스는 서로의 메모리에 직접 접근할 수 없다. 이렇게 격리되어 관리되기 때문에, 하나의 프로세스가 충돌해도 다른 프로세스에는 영향을 미치지 않습니다.
스레드는 동일 프로세스에 있는 다른 스레드와 코드, 데이터, 힙 등의 메모리를 공유할 수 있으며, 각각의 스레드는 독립된 스택 메모리를 가집니다.
프로세스 구조
Stack 영역
함수 안에서 선언된 지역 변수, 매개변수, 리턴값이 저장되는 공간입니다.
Stack은 함수의 호출과 함께 생성되며, 호출이 완료되면 소멸합니다.
Heap 영역
생성자, 인스턴스와 같이 동적으로 할당되는 데이터를 저장하는 공간입니다.
Code 영역
실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역입니다.
Data 영역
코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역입니다.
함수 안에서 선언된 지역변수, 매개변수 ,리턴값이 저장되는 공간입니다.
Stack은 함수의 호출과 함께 호출되며, 호출이 완료되면 소멸합니다.

프로세스 제어 블록(Process Control Block)

NOTE
프로세스 제어 블록(PCB)는 운영체제에서 각 프로세스의 상태와 정보를 관리하기 위해 사용되는 데이터 구조입니다. PCB는 운영체제가 프로세스를 관리하고, 스케줄링하며, 문맥교환을 수행하는데 필요한 정보를 담고 있습니다.
메모리 구조
PCB의 역할은 다음과 같습니다.
1.
PCB는 운영체제가 각 프로세스를 관리하기 위한 핵심 정보를 저장하며, 이를 통해 프로세스 실행, 중지, 종료등의 작업을 수행할 수 있습니다.
2.
PCB는 문맥 교환시 프로세스의 상태를 저장/복원 할 수 있습니다.
3.
운영체제는 PCB의 정보를 기반으로 프로세스를 스케줄링 할 수 있습니다.
PCB는 커널영역에 있으며 꼬리표와 같은 개념입니다.
프로세스 ID(PID)
프로세스를 구분하기 위해 주는 고유 번호입니다.
같은 프로그램을 두 번 실행하면 PID가 다른 두 개의 프로세스가 생성됩니다.
레지스터 값
실행 순서가 돌아왔을 때 복원할 레지스터 값들을 백업해 둔 것입니다.
프로세스 상태
프로세스가 CPU를 사용 중인지, 대기 중인지, 입출력 장치를 사용하려 하는지 등의 정보를 나타냅니다.
CPU 스케줄링 정보
프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보입니다.
메모리 관리 정보
프로세스가 메모리의 어느 주소에 저장되어 있는지에 대한 정보입니다.
사용한 파일과 입출력 장치 목록
프로세스가 어떤 입출력 장치를 사용하고 있는지, 어떤 파일을 열었는지 등의 정보입니다.
프로세스를 식별하기 위해 부여하는 고유한 번호
같은 프로그램도 두 번 실행하면 PID가 다른 2개의 프로세스 생성

문맥교환 (Context Switch)

NOTE
문맥 교환은 운영체제가 CPU를 하나의 프로세스에서 다른 프로세스로 전환할 때 발생하는 작업을 말합니다.
A → B → A .. 프로세스가 변해도 중간값들을 백업해서 다시실행할 떄 가져옴!
문맥교환 과정

문맥 교환의 이유

시분할 시스템에서는 여러 프로세스가 CPU를 번갈아 사용할 수 있기 위해 필요합니다.
입출력(I/O 대기) 상황에서는 입출력을 기다리는 동안 CPU를 다른 프로세스에 할당할 수 있도록 하기 위해 문맥교환이 발생합니다.
우선순위 스케줄링을 사용하는 경우에는 우선순위가 높은 프로세스를 실행하기 위해 현재 실행중인 프로세스를 일시 중지하고, 새로운 프로세스로 전환합니다.

문맥 교환 오버헤드

문맥 교환은 시스템의 자원을 소모하는 작업입니다.
문맥을 저장/복원 하는 과정이 많을수록 CPU가 실제로 작업하는 시간이 줄어들며, 문맥 교환이 자주 발생하게되는 경우 오버헤드로 비춰질 수 있습니다.